A community-maintained, filterable web app for remote workers to discover London cafes with the amenities that actually matter: WiFi, power sockets, and call-friendly environments.
| Category | Description | Cost |
|---|---|---|
| Development Labor | ~2 hrs @ $100/hr (RL) | $200 |
| AI Tokens | Claude Pro subscription 1 day of feb =$17/28 = $0.60 | ~$0.60 |
| Production Hosting | Render.com Web Service (free tier) + PostgreSQ 1/6 of monthly $6db | $1.00 |
| Other | n/a | $0.00 |
| TOTAL | $201.60 |
See docs/Design.md for full wireframes.
https://workbrew-m517.onrender.com/
git clonethis repo to a local project folderpip install -r requirements.txt- Consult
.env.examplefor required environment variables; create your own.envfile python geocode.py— populates lat/lng for existing cafes (run once)flask runorpython app.py- Built in Python 3.11 — should work on any 3.8+
See docs/PRD.md for full user stories and acceptance criteria.
- Browse all cafes — interactive Leaflet/OpenStreetMap map + responsive card grid
- Filter cafes by WiFi, sockets, call-friendliness, and neighborhood
- Add a new cafe via public submission form (WTForms + CSRF)
- Admin login (env var credentials, session-based)
- Admin delete cafe (protected POST route)
- Tailwind CSS responsive design (mobile-first, single-column on small screens)
- PostgreSQL-compatible SQLAlchemy models (SQLite dev → Postgres prod)
- Deploy to Render.com with Gunicorn
- Honeypot field on add form to reduce spam submissions
- Broken image URL fallback placeholder
- Shareable filter links (URL query params reflect active filters)
- Animate map → card cross-highlight on pin click
- Search cafes by name
- Thumbs-up / thumbs-down community rating per cafe
- Multiple city support beyond London
- User accounts or registration for regular visitors
- Cafe owner login or claimed listings
- Reservation or booking features
- Payment or monetization
See docs/Design.md for architecture diagram, data model, route map, wireframes, and deployment plan.
flowchart TD
A[User visits /] --> B{Filters applied?}
B -->|No| C[Query all cafes]
B -->|Yes| D[Query with filter params]
C --> E[Render index.html — Map + Cards]
D --> E
F[User visits /add] --> G[Render add_cafe.html]
G --> H{Form valid?}
H -->|No| G
H -->|Yes| I[Insert Cafe to DB]
I --> J[Geocode name+location via Nominatim]
J --> K[Redirect to / with success flash]
L[User visits /admin/login] --> M[Render admin_login.html]
M --> N{Credentials match env vars?}
N -->|No| M
N -->|Yes| O[Set session is_admin=True]
O --> P[Redirect to / — delete buttons visible]
Q[Admin clicks Delete] --> R[POST /cafe/id/delete]
R --> S{is_admin in session?}
S -->|No| T[403 Forbidden]
S -->|Yes| U[Delete Cafe from DB]
U --> V[Redirect to / with success flash]
- 1. Initialize Flask app, SQLAlchemy config,
.envwiring - 2. Define
Cafemodel inmodels.pywithlat/lngcolumns - 3. Run
geocode.pyto populate lat/lng for existing 21 cafes - 4. Build
GET /route with filter logic andindex.htmltemplate (cards only first) - 5. Add Leaflet map to
index.htmlwith cafe pins from JSON context - 6. Wire up filter chip bar (GET params → backend filter → template re-render)
- 7. Build
GET/POST /addroute andadd_cafe.htmlwith WTForms - 8. Build
GET/POST /admin/loginandGET /admin/logoutroutes - 9. Wire up
POST /cafe/<id>/deletewith admin session guard - 10. Sentinel review — CSRF, input validation, session security
- 11. Stella polish — Tailwind responsive grid, amenity icons, flash banners, mobile layout
- 12. Vera QA — 35/35 tests passing, 97% coverage
- 13. Switch to PostgreSQL on Render (
DATABASE_URL+DB_SCHEMA=workbrew) - 14. Deploy to Render.com — web service + env vars + DB seed
- 15. END-TO-END TEST on live Render URL
- 16. FULL DEPLOYMENT — portfolio ready
| DATE | COMMENTS |
|---|---|
| 2026-02-27 | Great deployment led by Claude Code and great design by Stella. It was fast to have the team fully build a prototype in tailwind css than mess with mocks. That's probably why Figma's stock is in the tank. 😟 But seriously it will be interesting to gauge trade-offs in tokens by mocking vs building. |
| 2026-02-27 | Project kickoff complete. PRD, Design, README generated. Git initialized. Ready for Phase 1 development. |
| 2026-02-27 | Full build complete. Flask app, Leaflet map, admin auth, CSRF, 35-test QA suite (97% coverage). Deployed to Render.com at https://workbrew-m517.onrender.com/ using shared rudil24_db Postgres instance with workbrew schema isolation. |
- Laptop Friendly London — UX inspiration
- Leaflet.js — open-source interactive maps
- Nominatim — free geocoding API
- Tailwind CSS — utility-first CSS framework
- Flask-WTF — WTForms Flask integration
- Render.com Docs — deployment reference