My Bodegas

BodegasNYC — Product Requirements Document

Status: Draft v0.2 Owner: Yukichi Kawada Last updated: 2026-07-21

About this document. A PRD answers three questions before any code gets written: what are we building, for whom, and how do we know it worked. It intentionally stays implementation-light — architecture gets its own section below, but detailed UI design, exact schemas, and sprint planning are deliberately out of scope for this doc. Anything marked Assumption below is a judgment call made without your explicit confirmation — treat those as the first things to correct.


1. Overview & Problem Statement

NYC bodegas are dense, hyper-local, and full of useful variation (does this one have a cat? hot food? lotto?) — but they’re systematically underrepresented on Google Maps and Apple Maps, which are built for chains and formally-registered businesses. The same is true of a wider category of informal city infrastructure: food carts, park chess tables, street performers, dog runs. None of it is well mapped, and the data that would make it useful (amenities, vibe, hours that are actually accurate) isn’t something a business listing captures anyway — it’s something only the people who actually go there know.

BodegasNYC is a crowdsourced, community-maintained map of NYC bodegas, built by the people who use them.

This project has a second, equally real goal: it’s a portfolio piece. It needs to demonstrate native iOS craft — not just “does it work” but “does it feel considered” — through onboarding, transitions, and moments of delight, in addition to functioning as a genuinely useful app.

2. Goals & Success Criteria

Goals

  1. Make it fast to find a bodega with the specific thing you need right now (cold beer, a lotto ticket, a cat to say hi to) via crowdsourced, structured data that Google/Apple Maps don’t capture.
  2. Make contributing data (adding a bodega, leaving a review, flagging something stale) low-friction enough that people actually do it.
  3. Showcase native SwiftUI craft — onboarding, transitions, and interaction design — as a portfolio artifact.

Success looks like

Non-Goals (v1)

3. Target Users

Persona Description Why they matter
Primary — NYC regular Lives or works in NYC, has a few go-to bodegas already, wants to discover new ones with specific amenities. The core user loop (find + contribute) is built for them.
Secondary — Explorer/tourist Visiting or new to a neighborhood, wants a map layer Google/Apple can’t give them. Validates that crowdsourced data is useful to people with zero local knowledge.
Tertiary — Portfolio reviewer An interviewer or peer evaluating this as a work sample. Doesn’t use the app for its data — evaluates it in the first 60 seconds on polish, onboarding, and interaction design. Shapes Section 8 directly.

4. MVP Scope (Bodegas Only)

Everything in this section is bodega-specific. Generalizing to other POI types is explicitly a reach goal (Section 6) — the MVP data model should be free to hard-code “bodega” as a concept rather than build a generic category system prematurely.

4.1 Core data model

Each bodega has:

4.2 Functional requirements

4.3 Required feature slots (not fully speced)

The following must exist as real, budgeted features in the MVP, even though their visual/interaction design is being deferred to a later design pass (per your direction):

5. Streets-Walked Heatmap (MVP)

A personal feature, separate from the bodega data model: the app tracks the streets a user has physically walked and renders them as a highlighted overlay on their own map view. This moved from reach-goal to MVP at your explicit direction — it was originally deferred pending confirmation (see the interrupted question in the prior session), and you’ve now confirmed it belongs in v1.

5.1 Functional requirements

5.2 Privacy & permission implications

6. Out of Scope / Reach Goals

Full backlog with effort/dependency notes lives in REACH_GOALS.md, structured so each row can become its own future /plan session. Summary of what’s deliberately not in the MVP:

7. Technical Architecture (Directional)

This section states direction and rationale, not final implementation design — architecture for specific screens (especially the map layer) should get its own /plan session once you’re actually building them.

8. Design & Portfolio Requirements

This app needs to read as designed, not just functional, within the first minute of use — that’s the whole point of the portfolio framing. Full visual/interaction design is a later pass, but this PRD commits to these being real, budgeted feature slots (cross-referenced from Section 4.3):

9. Assumptions & Open Questions

Every judgment call made in this draft without your explicit sign-off, collected in one place:

  1. Streets-walked heatmap defaults to local-only storage (Section 5.1) — not synced to Supabase. Flag if you want cross-device sync as an MVP requirement rather than a later addition.
  2. Streets-walked tracking defaults to full background tracking with continuous, distance-filtered location updates (Section 5.1/5.2), not a foreground-only lite version — flag if you actually meant the lighter version, since the battery/permission tradeoffs differ meaningfully.
  3. No monetization assumed for v1 (ads, subscriptions, sponsored placement all out of scope).
  4. Solo developer, no fixed ship date — this PRD doesn’t include a timeline/roadmap-with-dates, just MVP vs. reach-goal sequencing.
  5. NYC-only for v1 — no city-selection UX, no multi-region data model.
  6. Duplicate-bodega resolution (Section 4.1) and edit-approval flow (Section 4.2) are both left as “immediate, no queue” for MVP, consistent with the lightweight-moderation decision — flag if you want anything stricter.
  7. Auth provider set (email vs. social login vs. both) is unspecified — implementation detail for later.

Related: MVP_BACKLOG.md — tracked backlog for remaining in-scope MVP work. REACH_GOALS.md — structured backlog for future, out-of-scope feature planning.