Engineering · 13 min
05 — Product Requirements (PRD)
The PRD. Functional requirements per pillar, acceptance criteria, and the global non-functional rules.
Engineering · 13 min
The PRD. Functional requirements per pillar, acceptance criteria, and the global non-functional rules.
The functional spec for the AgriShala platform. Read alongside
06_INFORMATION_ARCHITECTURE.md,07_DATA_MODEL.md, and09_DESIGN_SYSTEM_NOTES.md.
Each requirement is shaped like this:
FR-XXX <short title>
Pillar: <1 / 2 / 3>
Phase: <0 / 1 / 2 / 3 / 4> (see `12_ROADMAP.md`)
Persona: <subscriber / visitor / admin / anon>
User story:
As a <persona>, I want <goal>, so that <reason>.
Acceptance criteria:
- Given <context>, when <action>, then <outcome>.
Out of scope:
- <explicit non-goals>
Open questions:
- Q-NNRequirements are numbered in FR-<pillar><phase>-<n> form below.
| ID | Requirement |
|---|---|
| NFR-1 | Site must remain a single Next.js 14 App Router app in Phase 0–3. Extraction allowed only at Phase 4 (Replication). |
| NFR-2 | The current scroll-narrative (app/page.tsx, components/sections/) is preserved as the public homepage. No section may be deleted. |
| NFR-3 | All subscription / account / order / delivery surfaces live behind a (account) route group with auth. |
| NFR-4 | Photo updates are stored as objects in cloud storage with metadata in the DB — never as raw blobs in the DB. See 07_DATA_MODEL.md. |
| NFR-5 | All payment integrations must use a single provider for the lifetime of Phase 1–2. Adding a second is Phase 3. Q-8 |
| NFR-6 | All dates in the UI render in Asia/Kolkata (IST); the seed farm is in Karnataka. |
| NFR-7 | Accessibility target: WCAG 2.1 AA on every product surface. |
| NFR-8 | The brand voice in copy is the same voice that already lives in components/sections/. No "marketing copy" voice is allowed. See 08_CONTENT_STRATEGY.md. |
Pillar: 1 · Phase: 1 · Persona: anon
User story. As a city dweller, I want a single page that explains how the subscription works, why it's different from an organic box, and what zone / plot I am signing up for, so that I can decide whether to join.
Acceptance criteria.
/subscribe (route group (marketing); see 06_INFORMATION_ARCHITECTURE.md).delivery radius (default: Bengaluru urban), and a "talk to us" CTA.
Out of scope. Account creation, payment collection. Done on /sign-up.
Open questions. Q-9
Pillar: 1 · Phase: 1 · Persona: anon, subscriber
User story. As a prospective subscriber, I want to see the actual 1-acre laid out — each zone visible, what it grows this week, who else shares a zone with me, so that I know what I'm buying.
Acceptance criteria.
/zones. zone overlays from 11_FARM_ZONING.md.
week, number of subscribers served.
/zones/[zoneId].Out of scope. Live soil-sensor data, drone footage (Phase 3+).
Open questions. Q-10 (how anonymous is the explorer?).
Pillar: 1 · Phase: 1 · Persona: anon → subscriber
User story. As a visitor, I want to pick a tier, pick a delivery slot, give an address, and pay, so that I become a subscriber.
Acceptance criteria.
/subscribe/checkout.scheduled. Q-8
/my-plot.Out of scope. Gift subscriptions (Phase 3), corporate billing (Phase 2).
Open questions. Q-3, Q-7, Q-8
Pillar: 1 · Phase: 1 · Persona: subscriber
User story. As a subscriber, I want a single page that shows my zone, the photo updates from this week, the upcoming delivery date, and a way to pause or change my plan.
Acceptance criteria.
/my-plot (authed).admin inbox).
Out of scope. In-app chat (Phase 2), per-plot live video (never).
Pillar: 1 · Phase: 1 · Persona: subscriber
User story. As a subscriber, I want to see and change my delivery day and window, and I want to know what is in this week's basket, by when.
Acceptance criteria.
/my-plot/delivery (authed).planned harvest → planned pack → planned delivery).
goes to the admin queue, not an auto-commit.
day**, after packing.
Out of scope. Self-serve rescheduling without human approval.
Pillar: 1 · Phase: 1 · Persona: subscriber (recipient); admin (publisher)
User story (subscriber). As a subscriber, I want photos of my zone through the season, posted in roughly real time, so that I have a relationship with the plot.
User story (admin). As the farm manager, I want to upload a batch of photos of a zone, tag them with phase and crop, and have the system send a digest to subscribers before the delivery.
Acceptance criteria.
/admin/zones/[zoneId]/updates/new (auth + rolerequired).
(sow / grow / harvest / pack).
(opt-in).
app/page.tsx, the public homepage remains untouched — photoupdates are not exposed publicly in Phase 1.
Out of scope. Instagram auto-posting (Phase 2), subscriber comments on updates (Phase 2).
Open questions. Q-2 (toggle for the digest in the cheapest tier).
Pillar: 1 · Phase: 1 · Persona: subscriber
User story. As a subscriber, I want to pause my subscription for a month without losing my plot allocation, or to cancel cleanly, without having to send an email.
Acceptance criteria.
/my-plot/manage.the plot becomes available for re-assignment immediately.
Out of scope. Refund handling inside the app. Q-7
Pillar: 2 · Phase: 2 · Persona: visitor
User story. As a prospective visitor, I want to see what staying at the farm looks like — rooms, food, pace, silence — so that I know whether the weekend is for me.
Acceptance criteria.
/stay.inventory, sample day, what's included, what's not.
Out of scope. Real-time room availability (Phase 2 late), gift vouchers (Phase 3).
Pillar: 2 · Phase: 2 · Persona: visitor
User story. As a visitor, I want to pick a date range, a room, and the meal plan (included / opt-in), and reserve, so that I can come.
Acceptance criteria.
/stay/book.Out of scope. Channel-manager integration (Phase 3), corporate rates (Phase 2 mid).
Open questions. Q-4, Q-11
Pillar: 2 · Phase: 2 · Persona: visitor, subscriber
User story. As a visitor, I want to see upcoming events and workshops at the farm — yoga retreats, foraging walks, ghee-making sessions — so that I can pick one to attend.
Acceptance criteria.
/journal (the "what's happening" surface — see 06_INFORMATION_ARCHITECTURE.md).
link to register.
Out of scope. Self-host events (Phase 3), ticketing via third party.
Pillar: 2 · Phase: 2 · Persona: visitor
User story. As a visitor, I want to book an excursion to the BRT safari, the Jenumutti temple, or the Tibetan settlement, separately from staying at the farm.
Acceptance criteria.
/stay/excursions.to expect, price.
/stay/book.Out of scope. Independent operator dashboards. Operators stay on email + WhatsApp until Phase 3.
Pillar: 2 · Phase: 2 · Persona: subscriber
User story. As a subscriber, I want to use my quarterly stay credit when I want, without re-entering my payment details.
Acceptance criteria.
/my-plot./stay/book flow, as a line-item discount.Out of scope. Gifting credits (Phase 3).
Pillar: 3 · Phase: 3 · Persona: visitor, subscriber, anon
User story. As a visitor, I want to see what the farm makes and sells — ghee, honey, soap, pickles, millets — so that I can buy or subscribe.
Acceptance criteria.
/shop./shop/[slug].Out of scope. Marketplace functions (multi-vendor), reviews system.
Pillar: 3 · Phase: 3 · Persona: visitor, subscriber, anon
User story. As a buyer, I want to know exactly what this product is, where on the farm it came from, when it was made, and how to get it.
Acceptance criteria.
/shop/[slug].ingredients, use notes.
Out of scope. Subscription bundling (Phase 3 late), gifting.
Open questions. Q-5, Q-12
Pillar: 3 · Phase: 3 · Persona: visitor, subscriber, anon
User story. As a buyer, I want to enter a shipping address, pay, and see a delivery estimate.
Acceptance criteria.
perishables (ghee). Q-12
Out of scope. International shipping (ever, in this concept).
Pillar: 3 · Phase: 3 · Persona: subscriber, customer
User story. As a customer, I want to see my order history and re-order what I liked.
Acceptance criteria.
/account/orders.Out of scope. Subscription management of food SKU bundles (Phase 3 late).
Pillar: cross · Phase: 1 · Persona: admin
User story. As the farm's operations lead, I want a simple sign-in to the admin, so that the farm can run the platform.
Acceptance criteria.
/admin/* routes require a role: admin claim.Out of scope. Multi-tenant admin (Phase 4 only).
Pillar: cross · Phase: 1 · Persona: admin
User story. As the agronomist, I want to define zones of the 1-acre, the crops in each, the rotation, and the expected harvest weeks, so that subscribers see an accurate picture of their plot.
Acceptance criteria.
/admin/zones — list + create/edit zone./admin/zones/[id] — name, area, current crop(s), rotation plan,capacity (subscribers served), notes.
Out of scope. Per-row planting logs (Phase 3+).
Pillar: 1 · Phase: 1 · Persona: admin
User story. As the farm, I want to upload a batch of photos of a zone, tag them with phase and crop, and have the system send a digest to subscribers.
Acceptance criteria.
FR-1.5 for the subscriber-facing side./admin/zones/[zoneId]/updates/new — multi-photo upload, short caption, crop phase selector (sow / grow / harvest / pack), scheduled-send time.
Out of scope. Auto-caption / AI tools (Phase 3 late).
Pillar: 1 · Phase: 1 · Persona: admin
User story. As the packer, I want to see this week's planned deliveries by zone, compose the basket contents per tier, and print pack sheets.
Acceptance criteria.
/admin/deliveries — week view.11_FARM_ZONING.md+ admin override), item quantities, packing notes.
Out of scope. Driver app (Phase 3). Use a routing spreadsheet in Phase 1.
Pillar: 1 · Phase: 1 · Persona: admin
User story. As operations, I want to look up a subscriber, see their plan, pause/cancel on their behalf, and view their delivery & payment history.
Acceptance criteria.
/admin/subscribers — search by name/email/phone./admin/subscribers/[id] — full record.Out of scope. Bulk import (never — Phase 1 sells in tens, not thousands).
Phase 0 is the cheapest possible pivot: the existing pages are reframed so that the workshop site reads as the front door of the platform, while we build the real product surfaces behind it.
Phase: 0 · Persona: anon
Acceptance criteria.
components/sections/Hero.tsx) keeps its scroll-narrative shape. The line Where does your food come from? stays. The CTAs become a small two-button group: "Subscribe to a plot" → /subscribe "Come for a weekend" → /stay
Invitation section becomes a dual CTA: subscribe (with link to /subscribe) and reserve a workshop seat (current behaviour kept).
components/Navigation.tsx) gains: Subscribe → #subscribe Stay → #stay Existing links Vision, Place, Founder, Join are preserved.
Phase: 0 · Persona: anon
Acceptance criteria.
Three pillars is added to app/page.tsx, placed after Founder and before Seasons.
(Subscription / Experience / Sustenance) — voice matches the field-journal style already in components/sections/Chapters.tsx.
/subscribe, /stay, /shop),but the anchors work even while those pages are stubbed.
Phase: 0 · Persona: all
Acceptance criteria.
section are static.
Invitation form (components/sections/Invitation.tsx)is unchanged in behaviour; only its CTA text is updated.
A quick lookup, ordered by Phase.
| ID | Title | Phase | Owner |
|---|---|---|---|
| FR-5.0 | Homepage reframing | 0 | Design + Dev |
| FR-5.1 | Three pillars interlude | 0 | Design + Dev |
| FR-5.2 | No data work (scope cap) | 0 | Dev |
| FR-1.0 | Subscription landing | 1 | Dev + Content |
| FR-1.1 | Plot / zone explorer | 1 | Dev + Ops |
| FR-1.2 | Subscribe / checkout | 1 | Dev |
| FR-1.3 | My plot | 1 | Dev + Design |
| FR-1.4 | Delivery schedule | 1 | Dev |
| FR-1.5 | Photo update stream | 1 | Dev + Ops |
| FR-1.6 | Pause / change / cancel | 1 | Dev |
| FR-4.0 | Admin authentication | 1 | Dev |
| FR-4.1 | Zone & crop planner | 1 | Dev + Agronomy |
| FR-4.2 | Photo update publisher | 1 | Dev + Ops |
| FR-4.3 | Delivery & basket composer | 1 | Dev + Ops |
| FR-4.4 | Subscribers & accounts | 1 | Dev |
| FR-2.0 | Stay landing | 2 | Design + Dev |
| FR-2.1 | Stay booking | 2 | Dev |
| FR-2.2 | Events & workshops calendar | 2 | Dev |
| FR-2.3 | Excursions | 2 | Dev + Ops |
| FR-2.4 | Subscriber visit credits | 2 | Dev |
| FR-3.0 | Shop landing | 3 | Design + Dev |
| FR-3.1 | Product detail & buy | 3 | Dev + Content |
| FR-3.2 | Checkout & shipping | 3 | Dev |
| FR-3.3 | Order tracking & reorder | 3 | Dev |