dog-training-plan

byMOHIT Chawla

Yes — combining your **original business strategy** with the uploaded **CALM WALKS master prompt**, the UI should revolve around one core loop: **Dog assessment → personalized plan → real-world walk → weekly check-in → adaptive re-plan.** The uploaded spec specifically makes the **weekly re-plan + “what changed and why” diff** the product moat. ## CALM WALKS — Complete UI Plan ### 1. Landing Page **Hero** > **A training plan built for your dog's triggers. Rewritten every week.** Subtext: > Tell us what your dog reacts to, where it happens, and what your walks actually look like. **CTA:** `Build My Plan — $59` Immediately underneath: > **$59. One payment. Not a subscription.** Then: **How it works** `01` Tell us about your dog `02` Get your personalized plan `03` Report your week → your plan adapts The uploaded prompt specifically calls for this three-step structure and immediate price transparency. --- # 2. Intake UI Use a **5-step progress flow**, with autosave. ### Step 1 — Your Dog **“Let's start with your dog.”** Fields: * Name * Age * Breed / mix * Size * Walks per day Bottom: `← Back`  `Continue →` Progress: `●────○────○────○────○` --- ### Step 2 — Triggers **“What sets them off?”** Selectable chips: `Other dogs` `People` `Bikes` `Skateboards` `Joggers` `Cars` `Mail carriers` `Other` Then a large text field: > **Tell us exactly what happens.** Placeholder: > “The off-leash Chihuahua near Maple Street…” This free-text detail is important because the plan is supposed to use the owner's **actual triggers**, not generic categories. --- ### Step 3 — The Street This should be one of the most visually distinctive screens. **“Where does it happen?”** Fields: **Your usual route** > Describe the streets you normally walk. **Problem spots** > “The corner near the park…” **Usual trigger distance** `5m ─────●──────── 20m` Then: ### Your walking environment Cards: `Quiet residential` `Busy street` `Apartment complex` `Park` `Mixed` CTA: `Save my route →` --- # 3. History Screen ### “What have you already tried?” Cards: **Trainer** `$400–$600` **Behaviorist** `$600–$1,200+` **Training app** `Used one` **Online course** `Tried one` Then: > **What worked? What didn't?** Large text box. This reinforces the positioning that the owner isn't being introduced to dog training for the first time—they're looking for something more specific. --- # 4. Safety Gate This needs a completely different visual treatment. Use the **clay/terracotta safety color**, not the normal amber CTA. ### “One important question.” > **Has your dog ever bitten someone and broken skin?** `Yes` `No` Also ask about: * bite to a person * repeated snapping with contact * serious aggression history If flagged: ## The Right Call Is A Vet Behaviorist No checkout. No sales pitch. No upsell. Instead: > A veterinary behaviorist can assess the situation properly and help you build a safe plan. CTA: `Email My Intake Summary` The uploaded specification explicitly says the safety route ends the funnel and should make no sales attempt. --- # 5. Checkout This should feel extremely clean. ## Choose your plan ### $59 **Personalized 4-Week Plan** ✓ Personalized intake ✓ Trigger-specific exercises ✓ Your walking environment ✓ 4-week training plan ✓ Progress criteria **$59 — One payment** --- ### $79 **Plan + Weekly Re-Plans** ✓ Everything in $59 ✓ Weekly check-ins ✓ Updated training plan ✓ “What changed & why” ✓ New trigger adaptations **$79 — One payment** Under the buttons: > **No subscription. No auto-renewal. No cancellation maze.** The $79 version should be framed as a **one-time upgrade**, not recurring billing. --- # 6. Plan Generation Screen After payment: ### Building your plan… Use real progress states rather than a fake infinite spinner. ```text ✓ Reading your dog's triggers ✓ Mapping your walking environment ● Building your first week ○ Creating progression rules ``` Then: > **Your plan is ready.** CTA: `See My Plan →` --- # 7. Main Dashboard This becomes the user's home screen. ### Good evening, Sarah. **Milo's Week 2** `██████░░░░ 60%` ### Today's focus > Stay below Milo's reaction threshold when passing dogs. **Today's exercises** #### 01 — Calm observation 🐕 Other dogs **Starting distance:** 20 ft **Duration:** 5 min **Goal:** Milo notices the dog and can still take a treat. `Start Exercise →` --- #### 02 — Check-in walk **Duration:** 15 min `Start Walk →` --- ### This week's progress `3 / 5 walks logged` `View Progress →` --- # 8. Exercise Detail UI When they tap an exercise: ## Calm observation **Trigger** Other dogs **Start distance** 20 ft **Duration** 5 minutes ### Success looks like > Milo notices the dog, remains able to think/eat, and returns attention to you. ### If a trigger suddenly appears > Increase distance calmly. Don't force the interaction. Resume only when Milo is back below threshold. ### Why this works A short explanation tied to the user's actual intake. CTA: `Start Exercise` The plan schema requires trigger, distance, duration, success criteria, progression rule, unexpected-trigger handling, and a personalized “why.” --- # 9. Walk Check-In This is where the app starts collecting the data needed for adaptation. ## How did the walk go? ### Other dogs `Better` `Same` `Worse` **Closest comfortable distance** `20 ft` ### Did anything unexpected happen? ☐ Loose dog ☐ Construction ☐ Crowded street ☐ New trigger ☐ Nothing unexpected ### Biggest win? Text field: > “Milo looked at the Labrador and took the treat.” CTA: `Save Walk` --- # 10. Weekly Review This should feel rewarding without becoming a gamified streak app. ## Your Week ### 5 walks logged ### 3 wins > “Looked at the lab, took the treat.” > “Passed the corner without lunging.” > “Recovered faster after seeing a bike.” **No streaks. No guilt.** The source specifically calls for a timestamped Win Log without streaks or pressure mechanics. --- # 11. THE MOAT — Weekly Re-Plan This should be one of the **best-designed screens in the entire app.** ## Your next plan is ready. ### What changed? **01 — Starting distance changed** `20 ft → 15 ft` > Milo stayed calm at 20 ft during three walks. **02 — New environment added** > We're introducing the quieter side of the park. **03 — Progression slowed** > Construction increased reactions this week, so we're keeping difficulty steady. Then: ## Why we changed it > Based on your Week 2 reports, Milo is consistently recovering faster around dogs but still struggles when the distance closes quickly. CTA: **View Week 3 →** The spec explicitly defines this **“What changed and why” diff** as the moat and requires plan versions to remain preserved rather than overwritten. --- # 12. $59 User Upgrade UI If someone bought the $59 plan: ## Want your plan to keep adapting? > Your current 4-week plan is ready. Weekly re-plans let us adjust it based on what actually happens during your walks. ### Unlock weekly re-plans **$20 one-time upgrade** > You already paid $59. You'll only pay the $20 difference. `Upgrade for $20 →` And importantly: > **Still one payment. Nothing renews.** The source explicitly specifies this one-time $20 upgrade and says the offer should not use dark patterns. --- # 13. Win Log Navigation: `Home | Plan | Walks | Wins | Account` Win screen: ## Wins `Today` > Milo saw a dog and stayed under threshold. `Yesterday` > Calm walk past the park entrance. `Sept 28` > Recovered quickly after a surprise bike. Each item: **What happened → Date → Trigger** No points. No XP. No streak counter. --- # 14. Plan History This is another important differentiator. ## Plan History **Week 3 — Current** `View` **Week 2** `View` **Week 1** `View` Then: > **Plans aren't overwritten.** This allows the owner to see how their plan evolved over time. --- # 15. Account Keep it extremely simple. ### Account **Milo** Dog profile **Your plan** $79 — Paid **Receipt** View receipt **Your data** `Export my data` `Delete account` **Important:** > Your plan is yours. One payment. Nothing renews. There should deliberately be **no “Manage subscription” section**, because there is no subscription. --- # Overall UI Architecture ```text CALM WALKS │ ├── Landing │ ├── Intake │ ├── Dog │ ├── Triggers │ ├── Street │ ├── History │ └── Safety │ └── Vet Behaviorist │ ├── Checkout │ ├── $59 │ └── $79 │ ├── Dashboard │ ├── Today's Focus │ ├── Exercises │ ├── Walk Check-in │ └── Weekly Progress │ ├── Plan │ ├── Week 1 │ ├── Week 2 │ ├── Week 3 │ └── Week 4 │ ├── Re-Plan │ ├── Weekly Review │ └── What Changed & Why │ ├── Wins │ ├── Plan History │ └── Account ├── Receipt ├── Export Data └── Delete Account ``` ## Visual Direction Use the **Maple Street** system from your file: * Background: warm cream `#FAF7F0` * Primary: forest `#1F4A31` * CTA: amber `#E29A38` * Safety: muted clay `#C25E4C` * Cards: cream `#F4EFE5` * Borders: sage `#A7C4B0` * Headlines: Fraunces/Lora * UI/body: Inter * Rounded 12–16px * Lots of whitespace * Soft borders instead of heavy shadows * Mobile-first, thumb-friendly These exact design tokens and interaction rules are specified in the uploaded master prompt. ### The most important UX principle Don't make it feel like: **“Here is another dog-training content app.”** Make it feel like: > **“I told this thing exactly what happens with my dog, and now it actually remembers and adapts.”** That is the product. Everything in the UI should reinforce that loop: **MY DOG → MY STREET → MY WALK → MY DATA → MY NEXT PLAN.**

No preview

Comments (0)

No comments yet. Be the first!

System Requirements

Page 1 of 25

System Requirements Document for dog-training-plan

1. Introduction

dog-training-plan delivers CALM WALKS, a mobile-first behavioral training product for owners of reactive dogs. The product is built around one core loop:

Dog assessment → personalized plan → real-world walk → weekly check-in → adaptive re-plan.

The product intent is that an owner tells the system exactly what happens with their dog — the actual triggers, the actual street, the actual walk — and the system remembers it and visibly adapts the plan each week. The weekly re-plan and its "what changed and why" diff is the product moat: plan versions are preserved rather than overwritten, so the owner can see how their plan evolved.

The audience is dog owners who have already tried trainers, behaviorists, training apps, or online courses and are looking for something more specific than generic content. Pricing is deliberately one-time: $59 for a Personalized 4-Week Plan, $79 for Plan + Weekly Re-Plans, and a $20 one-time upgrade for $59 owners who later want weekly re-plans. There is no subscription, no auto-renewal, and no cancellation maze.

A safety gate sits inside intake. If a dog has bitten someone and broken skin, has repeated snapping with contact, or has a serious aggression history, the funnel ends: no checkout, no sales pitch, no upsell — the owner is routed to a veterinary behaviorist referral and can email their intake summary.

Page 2 of 25

2. System Overview

CALM WALKS is a custom first-party web application, mobile-first and thumb-friendly, with application-owned identity so that autosaved intake, plans, walk records, wins, and plan history persist privately to the correct owner.

Current delivery and actors

  • Anonymous entry: the Landing Page is publicly reachable and explains trigger-based plans, the weekly adaptation loop, and one-time pricing.
  • Identity access: Sign Up establishes first-use identity; Login verifies returning owners. Both are anonymously reachable entry surfaces. Intake, History Screen, Safety Gate, The Right Call Is A Vet Behaviorist, Checkout, Plan Generation Screen, Main Dashboard, Exercise Detail UI, Walk Check-In, Weekly Review, Weekly Re-Plan, $59 User Upgrade UI, Win Log, Plan History, and Account require login.
  • Assessment: a five-step autosaving Intake (Your Dog, Triggers, The Street, History, Safety) with the History Screen and Safety Gate as their own destinations.
  • Safety routing: a flagged Safety Gate leads to The Right Call Is A Vet Behaviorist, which ends the funnel with an intake-summary email action and no selling surface.
  • Purchase: Checkout offers the $59 and $79 one-time plans; the $59 User Upgrade UI offers the $20 one-time difference payment.
  • Plan delivery: the Plan Generation Screen shows real progress states after payment, then reveals the plan.
  • Daily use: Main Dashboard, Exercise Detail UI, Walk Check-In, Weekly Review, Weekly Re-Plan, Win Log, Plan History, and Account.

Narrow exclusions

  • No subscription, auto-renewal, or cancellation management anywhere; the Account screen deliberately has no "Manage subscription" section.
  • No checkout, sales pitch, or upsell on the safety-flagged route.
  • No streaks, guilt mechanics, points, XP, or streak counters in Weekly Review, Win Log, or the dashboard.
  • No dark patterns in the $20 upgrade offer.
  • No overwriting of plan versions.
Page 3 of 25

2a. Product Interpretation and Delivery Boundary

CALM WALKS is delivered as a first-party application with its own custom UI. The owner's identity is application-owned because durable, private, owner-specific state must survive across sessions: autosaved intake answers, the purchased plan and its preserved versions, walk check-ins, wins, and account controls. First use begins anonymously at the Landing Page; Sign Up establishes identity before protected intake work begins, and Login verifies returning owners so they can resume intake and reach their plans, logs, history, upgrade, and account controls.

Payment is a one-time purchase handled at Checkout, and the personalized plan is generated only after payment completes. The safety evaluation completes before checkout; when it is flagged, the owner remains on the veterinary behaviorist path and never reaches a selling surface. The $20 upgrade payment completes before weekly re-plans are unlocked.

Everything described in this document is current. No future-horizon features are defined by the source.

Page 4 of 25

2b. Source Content Inventory

The CALM WALKS master prompt is supplied as a content_source and is authoritative. The verified product content it supplies is preserved throughout this document, including:

  • Landing copy: hero "A training plan built for your dog's triggers. Rewritten every week."; subtext "Tell us what your dog reacts to, where it happens, and what your walks actually look like."; CTA Build My Plan — $59; "$59. One payment. Not a subscription."; three-step "How it works" — 01 Tell us about your dog, 02 Get your personalized plan, 03 Report your week → your plan adapts.
  • Intake content: Step 1 "Let's start with your dog." with Name, Age, Breed / mix, Size, Walks per day; Step 2 "What sets them off?" with chips Other dogs, People, Bikes, Skateboards, Joggers, Cars, Mail carriers, Other, plus "Tell us exactly what happens." with placeholder "The off-leash Chihuahua near Maple Street…"; Step 3 "Where does it happen?" with Your usual route, Problem spots ("The corner near the park…"), usual trigger distance 5m–20m, environment cards Quiet residential, Busy street, Apartment complex, Park, Mixed, CTA Save my route →; Step 4 "What have you already tried?" with Trainer $400–$600, Behaviorist $600–$1,200+, Training app Used one, Online course Tried one, plus "What worked? What didn't?"; Step 5 "One important question." — "Has your dog ever bitten someone and broken skin?" Yes/No, plus bite to a person, repeated snapping with contact, and serious aggression history.
  • Safety route content: "The Right Call Is A Vet Behaviorist"; "A veterinary behaviorist can assess the situation properly and help you build a safe plan."; CTA Email My Intake Summary.
  • Checkout content: $59 Personalized 4-Week Plan with ✓ Personalized intake, ✓ Trigger-specific exercises, ✓ Your walking environment, ✓ 4-week training plan, ✓ Progress criteria, "$59 — One payment"; $79 Plan + Weekly Re-Plans with ✓ Everything in $59, ✓ Weekly check-ins, ✓ Updated training plan, ✓ "What changed & why", ✓ New trigger adaptations, "$79 — One payment"; "No subscription. No auto-renewal. No cancellation maze."
  • Generation content: "Building your plan…" with states Reading your dog's triggers, Mapping your walking environment, Building your first week, Creating progression rules; "Your plan is ready."; CTA See My Plan →.
  • Dashboard content: greeting ("Good evening, Sarah."), "Milo's Week 2" with 60% progress, Today's focus "Stay below Milo's reaction threshold when passing dogs.", exercise 01 Calm observation (Other dogs; Starting distance 20 ft; Duration 5 min; Goal "Milo notices the dog and can still take a treat."; Start Exercise →), exercise 02 Check-in walk (Duration 15 min; Start Walk →), "3 / 5 walks logged", View Progress →.
  • Exercise content: Calm observation with Trigger Other dogs, Start distance 20 ft, Duration 5 minutes, "Success looks like" — "Milo notices the dog, remains able to think/eat, and returns attention to you.", "If a trigger suddenly appears" — "Increase distance calmly. Don't force the interaction. Resume only when Milo is back below threshold.", "Why this works", CTA Start Exercise.
  • Walk Check-In content: "How did the walk go?"; per-trigger Better Same Worse; Closest comfortable distance 20 ft; "Did anything unexpected happen?" with\x20\xe2\x98\x90 Loose dog,\x20\xe2\x98\x90 Construction,\x20\xe2\x98\x90 Crowded street,\x20\xe2\x98\x90 New trigger,\x20\xe2\x98\x90 Nothing unexpected; "Biggest win?" with "Milo looked at the Labrador and took the treat."; CTA Save Walk.
  • Weekly Review content: "Your Week"; "5 walks logged"; "3 wins" — "Looked at the lab, took the treat.", "Passed the corner without lunging.", "Recovered faster after seeing a bike."; "No streaks. No guilt."
  • Re-Plan content: "Your next plan is ready."; "What changed?" — 01 Starting distance changed 20 ft → 15 ft ("Milo stayed calm at 20 ft during three walks."), 02 New environment added ("We're introducing the quieter side of the park."), 03 Progression slowed ("Construction increased reactions this week, so we're keeping difficulty steady."); "Why we changed it" — "Based on your Week 2 reports, Milo is consistently recovering faster around dogs but still struggles when the distance closes quickly."; CTA View Week 3 →.
  • Upgrade content: "Want your plan to keep adapting?"; "Your current 4-week plan is ready. Weekly re-plans let us adjust it based on what actually happens during your walks."; "Unlock weekly re-plans"; "$20 one-time upgrade"; "You already paid $59. You'll only pay the $20 difference."; Upgrade for $20 →; "Still one payment. Nothing renews."
  • Win Log content: navigation Home | Plan | Walks | Wins | Account; wins grouped Today ("Milo saw a dog and stayed under threshold."), Yesterday ("Calm walk past the park entrance."), Sept 28 ("Recovered quickly after a surprise bike."); each item What happened → Date → Trigger.
  • Plan History content: "Plan History"; "Week 3 — Current" View, "Week 2" View, "Week 1" View; "Plans aren't overwritten."
  • Account content: "Account"; "Milo" / Dog profile; "Your plan" / "$79 — Paid"; "Receipt" / View receipt; "Your data" / Export my data, Delete account; "Your plan is yours. One payment. Nothing renews."
  • Design tokens: background warm cream #FAF7F0, primary forest #1F4A31, CTA amber #E29A38, safety muted clay #C25E4C, cards cream #F4EFE5, borders sage #A7C4B0, headlines Fraunces/Lora, UI/body Inter, rounded 12–16px, lots of whitespace, soft borders instead of heavy shadows, mobile-first and thumb-friendly.

2c. Page Content and Component Coverage

Page 5 of 25

Landing Page

  • Information/state: anonymous public entry. Hero headline "A training plan built for your dog's triggers. Rewritten every week."; subtext "Tell us what your dog reacts to, where it happens, and what your walks actually look like."; CTA Build My Plan — $59; immediately beneath it "$59. One payment. Not a subscription."; "How it works" three-step structure 01 Tell us about your dog, 02 Get your personalized plan, 03 Report your week → your plan adapts.
  • Primary actions: Build My Plan — $59 begins the purchase journey; the three-step panels explain the loop.
  • Supporting actions: navigation into Sign Up / Login for returning owners.
  • Domain entities: plan tiers ($59, $79), the core loop, the three-step explanation.
  • Component responsibilities: hero band with headline, subtext, amber CTA and price-transparency line; three numbered "How it works" panels; a live "this week's change" fragment panel showing 20 ft → 15 ft with the caption "Milo stayed calm at 20 ft during three walks."
  • States: loading (hero imagery and panels resolve), empty (not applicable — static marketing content), success (CTA routes to Sign Up), error (CTA failure surfaces a retry), recovery (retry preserves the anonymous entry state).

Sign Up

  • Information/state: first-use identity establishment for a self-starting customer, anonymously reachable.
  • Primary actions: create the owner's identity so autosaved intake and private plans, walk records, wins, and history are retained.
  • Supporting actions: route to Login for returning owners.
  • Domain entities: owner identity, credential.
  • Component responsibilities: enrollment form, validation messaging, link to Login.
  • States: loading (submission in progress), empty (blank form), success (routes into Intake), error (invalid or already-used identity surfaces inline guidance), recovery (correct and resubmit without losing entered values).

Login

  • Information/state: returning verification, anonymously reachable.
  • Primary actions: verify the returning owner and resume protected intake, plans, walk records, wins, history, upgrade, and account controls.
  • Supporting actions: route to Sign Up for new owners.
  • Domain entities: owner identity, credential.
  • Component responsibilities: verification form, error messaging, link to Sign Up.
  • States: loading (verification in progress), empty (blank form), success (routes to the owner's protected destination), error (incorrect credentials surface a non-revealing message), recovery (retry without losing the entered identity).
Page 6 of 25

Intake

  • Information/state: autosaved five-step progress flow with a step progress indicator (●────○────○────○────○) and ← Back / Continue → navigation. Step 1 "Let's start with your dog." with Name, Age, Breed / mix, Size, Walks per day. Step 2 "What sets them off?" with chips Other dogs, People, Bikes, Skateboards, Joggers, Cars, Mail carriers, Other, plus "Tell us exactly what happens." with placeholder "The off-leash Chihuahua near Maple Street…". Step 3 "Where does it happen?" with Your usual route, Problem spots ("The corner near the park…"), usual trigger distance slider 5m–20m, environment cards Quiet residential, Busy street, Apartment complex, Park, Mixed, CTA Save my route →.
  • Primary actions: enter dog details, select and describe triggers, describe route and problem spots, set usual trigger distance, choose walking environment, advance and go back.
  • Supporting actions: autosave each step; resume an interrupted intake.
  • Domain entities: dog profile (name, age, breed/mix, size, walks per day), trigger selections and free-text trigger detail, usual route, problem spots, usual trigger distance, walking environment.
  • Component responsibilities: step progress rail, step panels, chip selector, free-text fields, trigger-distance slider, environment cards, Back/Continue controls, autosave indicator.
  • States: loading (restoring autosaved answers), empty (no answers yet), success (step saved and next step shown), error (save failure surfaces a retry without discarding typed answers), recovery (autosave resumes and the owner continues from the saved step).

History Screen

  • Information/state: "What have you already tried?" with cards Trainer $400–$600, Behaviorist $600–$1,200+, Training app Used one, Online course Tried one, plus a large text box "What worked? What didn't?".
  • Primary actions: select prior approaches tried; describe what worked and what didn't.
  • Supporting actions: continue to the Safety Gate; return to earlier intake steps.
  • Domain entities: prior training approaches with their cost ranges, free-text history notes.
  • Component responsibilities: selectable history cards, large free-text box, step navigation.
  • States: loading (restoring saved history), empty (nothing selected yet), success (history saved and step advanced), error (save failure with retry), recovery (answers retained and resubmitted).

Safety Gate

  • Information/state: "One important question." — "Has your dog ever bitten someone and broken skin?" with Yes / No, plus questions about bite to a person, repeated snapping with contact, and serious aggression history. Uses the clay/terracotta safety treatment, not the normal amber CTA.
  • Primary actions: answer the bite question and the additional aggression questions.
  • Supporting actions: return to earlier intake steps.
  • Domain entities: safety answers (bite breaking skin, bite to a person, repeated snapping with contact, serious aggression history), flag state.
  • Component responsibilities: clay-treated safety panel, Yes/No control, additional aggression question controls, routing logic to checkout or the vet behaviorist route.
  • States: loading (restoring saved safety answers), empty (unanswered), success (unflagged answers route to Checkout; flagged answers route to The Right Call Is A Vet Behaviorist), error (save failure with retry), recovery (answers retained; the owner can re-answer before routing).
Page 7 of 25

The Right Call Is A Vet Behaviorist

  • Information/state: the safety-flagged outcome. "The Right Call Is A Vet Behaviorist" with "A veterinary behaviorist can assess the situation properly and help you build a safe plan." and CTA Email My Intake Summary. No checkout, no sales pitch, no upsell.
  • Primary actions: email the intake summary.
  • Supporting actions: review the intake information being sent.
  • Domain entities: intake summary, referral destination.
  • Component responsibilities: clay-treated referral panel, intake-summary email action, absence of any selling surface.
  • States: loading (preparing the summary), empty (not applicable — the summary is derived from completed intake), success (summary emailed confirmation), error (email failure surfaces a retry), recovery (retry re-sends the same summary).

Checkout

  • Information/state: "Choose your plan". $59 Personalized 4-Week Plan with ✓ Personalized intake, ✓ Trigger-specific exercises, ✓ Your walking environment, ✓ 4-week training plan, ✓ Progress criteria, "$59 — One payment". $79 Plan + Weekly Re-Plans with ✓ Everything in $59, ✓ Weekly check-ins, ✓ Updated training plan, ✓ "What changed & why", ✓ New trigger adaptations, "$79 — One payment". Beneath the buttons: "No subscription. No auto-renewal. No cancellation maze." The $79 option is framed as a one-time upgrade, not recurring billing.
  • Primary actions: choose and pay for the $59 or $79 plan.
  • Supporting actions: compare plan inclusions.
  • Domain entities: plan tier, one-time payment, purchase record.
  • Component responsibilities: two plan panels with inclusion lists and one-time price labels, payment control, non-subscription messaging.
  • States: loading (payment processing), empty (no plan selected), success (payment completes and routes to Plan Generation Screen), error (payment failure surfaces a retry without losing the selection), recovery (retry the same plan selection).

Plan Generation Screen

  • Information/state: "Building your plan…" with real progress states rather than a fake infinite spinner: ✓ Reading your dog's triggers, ✓ Mapping your walking environment, ● Building your first week, ○ Creating progression rules. Then "Your plan is ready." with CTA See My Plan →.
  • Primary actions: wait for generation; open the plan.
  • Supporting actions: none beyond opening the plan.
  • Domain entities: generation stages, generated plan.
  • Component responsibilities: four-state checklist with completed and active states, readiness message, See My Plan → control.
  • States: loading (stages advance with the active stage marked), empty (not applicable — generation begins after payment), success ("Your plan is ready." and the plan opens), error (generation failure surfaces a retry), recovery (retry resumes generation without a second payment).
Page 8 of 25

Main Dashboard

  • Information/state: home screen. Greeting ("Good evening, Sarah."), "Milo's Week 2" with a 60% progress bar, Today's focus "Stay below Milo's reaction threshold when passing dogs.", Today's exercises — 01 Calm observation (Other dogs; Starting distance 20 ft; Duration 5 min; Goal "Milo notices the dog and can still take a treat."; Start Exercise →) and 02 Check-in walk (Duration 15 min; Start Walk →) — and This week's progress "3 / 5 walks logged" with View Progress →.
  • Primary actions: start an exercise; start a check-in walk; view progress.
  • Supporting actions: navigate to Plan, Walks, Wins, Account.
  • Domain entities: dog, current week number, week progress, today's focus, exercises with trigger/distance/duration/goal, logged walk count.
  • Component responsibilities: greeting header, week progress bar, focus panel, exercise cards, week progress summary, primary navigation.
  • States: loading (week and exercise data resolving), empty (no exercises for today), success (exercises and progress shown), error (data load failure with retry), recovery (retry restores the dashboard without losing the current week).

Exercise Detail UI

  • Information/state: exercise name (e.g. Calm observation), Trigger (Other dogs), Start distance (20 ft), Duration (5 minutes), "Success looks like" ("Milo notices the dog, remains able to think/eat, and returns attention to you."), "If a trigger suddenly appears" ("Increase distance calmly. Don't force the interaction. Resume only when Milo is back below threshold."), "Why this works" tied to the owner's actual intake, CTA Start Exercise. The plan schema requires trigger, distance, duration, success criteria, progression rule, unexpected-trigger handling, and a personalized "why".
  • Primary actions: start the exercise.
  • Supporting actions: read success criteria, unexpected-trigger handling, progression rule, and the personalized rationale.
  • Domain entities: exercise, trigger, distance, duration, success criteria, progression rule, unexpected-trigger handling, personalized "why".
  • Component responsibilities: prescription panel, success-criteria panel, unexpected-trigger panel, rationale panel, Start Exercise control.
  • States: loading (exercise data resolving), empty (exercise not found for the current week), success (full prescription shown), error (load failure with retry), recovery (retry restores the exercise).

Walk Check-In

  • Information/state: "How did the walk go?" with per-trigger Better / Same / Worse, Closest comfortable distance (20 ft), "Did anything unexpected happen?" with\x20\xe2\x98\x90 Loose dog,\x20\xe2\x98\x90 Construction,\x20\xe2\x98\x90 Crowded street,\x20\xe2\x98\x90 New trigger,\x20\xe2\x98\x90 Nothing unexpected, "Biggest win?" text field ("Milo looked at the Labrador and took the treat."), CTA Save Walk.
  • Primary actions: record per-trigger outcome, closest comfortable distance, unexpected events, and the biggest win; save the walk.
  • Supporting actions: start a check-in walk from the dashboard.
  • Domain entities: walk record, per-trigger outcome, closest comfortable distance, unexpected-event selections, biggest win text.
  • Component responsibilities: per-trigger outcome controls, distance field, unexpected-event checkboxes, win text field, Save Walk control.
  • States: loading (restoring an in-progress check-in), empty (no walk recorded yet), success (walk saved and reflected in weekly progress), error (save failure with retry), recovery (retry saves the same walk without duplicating it).
Page 9 of 25

Weekly Review

  • Information/state: "Your Week" with "5 walks logged" and "3 wins" — "Looked at the lab, took the treat.", "Passed the corner without lunging.", "Recovered faster after seeing a bike." — and "No streaks. No guilt."
  • Primary actions: review the week's logged walks and wins.
  • Supporting actions: continue to the weekly re-plan.
  • Domain entities: week, logged walks, wins.
  • Component responsibilities: week summary panel, wins list, no-streak/no-guilt messaging.
  • States: loading (week data resolving), empty (no walks logged this week), success (walks and wins shown), error (load failure with retry), recovery (retry restores the week).

Weekly Re-Plan

  • Information/state: "Your next plan is ready." with "What changed?" numbered diffs — 01 Starting distance changed 20 ft → 15 ft ("Milo stayed calm at 20 ft during three walks."), 02 New environment added ("We're introducing the quieter side of the park."), 03 Progression slowed ("Construction increased reactions this week, so we're keeping difficulty steady.") — then "Why we changed it" ("Based on your Week 2 reports, Milo is consistently recovering faster around dogs but still struggles when the distance closes quickly.") and CTA View Week 3 →.
  • Primary actions: review what changed and why; open the next week.
  • Supporting actions: compare previous and new values side by side.
  • Domain entities: plan version, numbered changes with old and new values and reasons, rationale.
  • Component responsibilities: two-column diff spread (previous value left, new value right), numbered change cards, rationale panel, View Week 3 → control.
  • States: loading (re-plan data resolving), empty (no re-plan available yet for this week), success (diff and rationale shown), error (load failure with retry), recovery (retry restores the diff).

$59 User Upgrade UI

  • Information/state: "Want your plan to keep adapting?" with "Your current 4-week plan is ready. Weekly re-plans let us adjust it based on what actually happens during your walks.", "Unlock weekly re-plans", "$20 one-time upgrade", "You already paid $59. You'll only pay the $20 difference.", CTA Upgrade for $20 →, and "Still one payment. Nothing renews." The offer must not use dark patterns.
  • Primary actions: pay the $20 one-time difference to unlock weekly re-plans.
  • Supporting actions: read what the upgrade adds.
  • Domain entities: upgrade offer, $20 one-time payment, unlocked weekly re-plans.
  • Component responsibilities: offer panel, difference-payment explanation, Upgrade for $20 → control, non-renewal messaging, no dark-pattern pressure elements.
  • States: loading (payment processing), empty (offer not applicable to $79 owners), success (weekly re-plans unlocked), error (payment failure with retry), recovery (retry the same $20 payment).
Page 10 of 25

Win Log

  • Information/state: "Wins" grouped by date — Today ("Milo saw a dog and stayed under threshold."), Yesterday ("Calm walk past the park entrance."), Sept 28 ("Recovered quickly after a surprise bike.") — with each item showing What happened → Date → Trigger. No points, no XP, no streak counter.
  • Primary actions: read the durable win history.
  • Supporting actions: navigate via Home | Plan | Walks | Wins | Account.
  • Domain entities: win entry (what happened, date, trigger).
  • Component responsibilities: date-grouped win list, per-item what-happened/date/trigger display, absence of points, XP, and streak counters.
  • States: loading (wins resolving), empty (no wins recorded yet), success (wins listed by date), error (load failure with retry), recovery (retry restores the list).

Plan History

  • Information/state: "Plan History" with "Week 3 — Current" View, "Week 2" View, "Week 1" View, and "Plans aren't overwritten."
  • Primary actions: open any preserved plan version.
  • Supporting actions: compare how the plan evolved over time.
  • Domain entities: preserved plan versions by week.
  • Component responsibilities: week panel list with View controls, non-overwrite statement.
  • States: loading (versions resolving), empty (no plan versions yet), success (all preserved versions listed), error (load failure with retry), recovery (retry restores the list).

Account

  • Information/state: "Account" with "Milo" / Dog profile, "Your plan" / "$79 — Paid", "Receipt" / View receipt, "Your data" / Export my data, Delete account, and "Your plan is yours. One payment. Nothing renews." Deliberately no "Manage subscription" section.
  • Primary actions: view receipt; export data; delete account.
  • Supporting actions: view the dog profile and plan status.
  • Domain entities: dog profile, plan status, receipt, exported data, account deletion.
  • Component responsibilities: profile panel, plan-status panel, receipt control, data controls, non-renewal messaging, absence of subscription management.
  • States: loading (account data resolving), empty (no receipt yet), success (account details shown; export or deletion confirmed), error (action failure with retry), recovery (retry the same action; deletion requires explicit confirmation).
Page 11 of 25

3. Functional Requirements

Each requirement is a distinct story point with provenance, lifecycle facts, and observable acceptance.

FR-1 — Core product loop (explicit) As a Dog Owner (Calm Walks customer), I should move through dog assessment → personalized plan → real-world walk → weekly check-in → adaptive re-plan, so that my plan keeps reflecting my dog and my street.

  • Trigger/input: I begin at the Landing Page and complete intake.
  • Observable result: my plan is generated, I log walks, and my next week's plan reflects what I reported.
  • Access state: anonymous at the Landing Page; login required from Intake onward.
  • Failure/recovery: if any stage fails, I can retry that stage without losing prior answers.
  • Continuation: each completed stage leads to the next stage of the loop.

FR-2 — Landing hero and price transparency (explicit) As a Dog Owner (Calm Walks customer), I should see "A training plan built for your dog's triggers. Rewritten every week." with the subtext "Tell us what your dog reacts to, where it happens, and what your walks actually look like.", the CTA Build My Plan — $59, and immediately beneath it "$59. One payment. Not a subscription.", so that I understand the product and its one-time price before starting.

  • Trigger/input: I open the Landing Page.
  • Observable result: hero copy, CTA, and price-transparency line are visible together.
  • Access state: anonymous.
  • Failure/recovery: if the CTA fails, I can retry from the same page.
  • Continuation: the CTA begins the purchase journey.

FR-3 — How it works (explicit) As a Dog Owner (Calm Walks customer), I should see the three-step structure 01 Tell us about your dog, 02 Get your personalized plan, 03 Report your week → your plan adapts, so that I understand the loop before I commit.

  • Trigger/input: I scroll the Landing Page.
  • Observable result: three numbered steps are shown in order.
  • Access state: anonymous.
  • Failure/recovery: static content; no failure path beyond page load retry.
  • Continuation: I proceed to Build My Plan — $59.

FR-4 — Five-step autosaving intake (explicit) As a Dog Owner (Calm Walks customer), I should complete a 5-step progress flow with autosave — Step 1 Your Dog, Step 2 Triggers, Step 3 The Street, Step 4 History, Step 5 Safety — so that my assessment is captured without losing work.

  • Trigger/input: I enter Intake after establishing identity.
  • Observable result: each step saves and the progress indicator advances (●────○────○────○────○).
  • Access state: login required.
  • Failure/recovery: if a step fails to save, I can retry without retyping.
  • Continuation: I advance with Continue → or return with ← Back.

FR-5 — Step 1 Your Dog (explicit) As a Dog Owner (Calm Walks customer), I should enter Name, Age, Breed / mix, Size, and Walks per day under "Let's start with your dog.", so that the plan is built for my actual dog.

  • Trigger/input: I open Step 1.
  • Observable result: the five fields are captured and saved.
  • Access state: login required.
  • Failure/recovery: save failure surfaces a retry with values retained.
  • Continuation: Continue → moves to Step 2.

FR-6 — Step 2 Triggers (explicit) As a Dog Owner (Calm Walks customer), I should select from chips Other dogs, People, Bikes, Skateboards, Joggers, Cars, Mail carriers, Other and describe exactly what happens in a large text field with placeholder "The off-leash Chihuahua near Maple Street…", so that my plan uses my dog's actual triggers, not generic categories.

  • Trigger/input: I open Step 2.
  • Observable result: selected chips and free-text detail are saved and used by the plan.
  • Access state: login required.
  • Failure/recovery: save failure surfaces a retry with selections retained.
  • Continuation: Continue → moves to Step 3.

FR-7 — Step 3 The Street (explicit) As a Dog Owner (Calm Walks customer), I should describe my usual route, name problem spots such as "The corner near the park…", set my usual trigger distance on a 5m–20m slider, choose a walking environment card from Quiet residential, Busy street, Apartment complex, Park, Mixed, and use Save my route →, so that my plan is mapped to the streets I actually walk.

  • Trigger/input: I open Step 3.
  • Observable result: route, problem spots, trigger distance, and environment are saved.
  • Access state: login required.
  • Failure/recovery: save failure surfaces a retry with entries retained.
  • Continuation: Save my route → moves to Step 4.

FR-8 — Step 4 History (explicit) As a Dog Owner (Calm Walks customer), I should select what I have already tried — Trainer $400–$600, Behaviorist $600–$1,200+, Training app Used one, Online course Tried one — and describe "What worked? What didn't?", so that my plan accounts for my prior experience.

  • Trigger/input: I open the History Screen.
  • Observable result: prior approaches and free-text notes are saved.
  • Access state: login required.
  • Failure/recovery: save failure surfaces a retry with answers retained.
  • Continuation: I advance to the Safety Gate.

FR-9 — Step 5 Safety Gate (explicit) As a Dog Owner (Calm Walks customer), I should answer "One important question." — "Has your dog ever bitten someone and broken skin?" Yes/No — plus questions about bite to a person, repeated snapping with contact, and serious aggression history, presented with the clay/terracotta safety treatment rather than the normal amber CTA, so that safety is assessed before any purchase.

  • Trigger/input: I open the Safety Gate.
  • Observable result: my answers are recorded and the safety flag is evaluated.
  • Access state: login required.
  • Failure/recovery: save failure surfaces a retry with answers retained.
  • Continuation: unflagged answers lead to Checkout; flagged answers lead to The Right Call Is A Vet Behaviorist.

FR-10 — Safety-flagged referral (explicit) As a Safety-Flagged Owner (vet behaviorist referral), I should see "The Right Call Is A Vet Behaviorist" with "A veterinary behaviorist can assess the situation properly and help you build a safe plan." and CTA Email My Intake Summary, with no checkout, no sales pitch, and no upsell, so that I am routed safely out of the purchase flow with my intake information.

  • Trigger/input: my Safety Gate answers are flagged.
  • Observable result: the referral screen is shown and my intake summary can be emailed.
  • Access state: login required.
  • Failure/recovery: if the email fails, I can retry sending the same summary.
  • Continuation: the funnel ends here; no selling surface is reachable from this route.

FR-11 — Checkout plan choice (explicit) As a Dog Owner (Calm Walks customer), I should choose between $59 Personalized 4-Week Plan (✓ Personalized intake, ✓ Trigger-specific exercises, ✓ Your walking environment, ✓ 4-week training plan, ✓ Progress criteria; "$59 — One payment") and $79 Plan + Weekly Re-Plans (✓ Everything in $59, ✓ Weekly check-ins, ✓ Updated training plan, ✓ "What changed & why", ✓ New trigger adaptations; "$79 — One payment"), so that I buy the level of adaptation I want in one payment.

  • Trigger/input: I reach Checkout after an unflagged Safety Gate.
  • Observable result: my chosen plan is purchased once and recorded.
  • Access state: login required.
  • Failure/recovery: payment failure surfaces a retry without losing my selection.
  • Continuation: successful payment leads to the Plan Generation Screen.

FR-12 — Non-subscription messaging (explicit) As a Dog Owner (Calm Walks customer), I should see "No subscription. No auto-renewal. No cancellation maze." at Checkout and have the $79 option framed as a one-time upgrade rather than recurring billing, so that I trust the pricing.

  • Trigger/input: I view Checkout.
  • Observable result: the messaging appears beneath the plan buttons and no recurring-billing language is present.
  • Access state: login required.
  • Failure/recovery: static content; no failure path beyond page load retry.
  • Continuation: I proceed with my chosen plan.

FR-13 — Plan generation progress (explicit) As a Dog Owner (Calm Walks customer), I should see "Building your plan…" with real progress states — ✓ Reading your dog's triggers, ✓ Mapping your walking environment, ● Building your first week, ○ Creating progression rules — then "Your plan is ready." with CTA See My Plan →, so that I know generation is real work, not a fake spinner.

  • Trigger/input: my payment completes.
  • Observable result: stages advance with completed and active states, then the plan is ready.
  • Access state: login required.
  • Failure/recovery: generation failure surfaces a retry without a second payment.
  • Continuation: See My Plan → opens my plan.

FR-14 — Main Dashboard (explicit) As a Dog Owner (Calm Walks customer), I should see my greeting, my dog's current week with a progress bar (e.g. "Milo's Week 2", 60%), Today's focus ("Stay below Milo's reaction threshold when passing dogs."), Today's exercises — 01 Calm observation (Other dogs; Starting distance 20 ft; Duration 5 min; Goal "Milo notices the dog and can still take a treat."; Start Exercise →) and 02 Check-in walk (Duration 15 min; Start Walk →) — and This week's progress ("3 / 5 walks logged"; View Progress →), so that I know exactly what to do today.

  • Trigger/input: I open the app as a logged-in owner.
  • Observable result: the current week, focus, exercises, and logged progress are shown.
  • Access state: login required.
  • Failure/recovery: data load failure surfaces a retry.
  • Continuation: I start an exercise or a check-in walk, or view progress.

FR-15 — Exercise Detail (explicit) As a Dog Owner (Calm Walks customer), I should see the exercise's Trigger, Start distance, Duration, "Success looks like", "If a trigger suddenly appears" handling guidance, and "Why this works" tied to my actual intake, with CTA Start Exercise, so that I can run the exercise correctly.

  • Trigger/input: I open an exercise from the dashboard.
  • Observable result: the full prescription, success criteria, unexpected-trigger handling, progression rule, and personalized rationale are shown.
  • Access state: login required.
  • Failure/recovery: load failure surfaces a retry.
  • Continuation: Start Exercise begins the exercise.

FR-16 — Plan schema completeness (explicit) As a Dog Owner (Calm Walks customer), I should have every exercise carry trigger, distance, duration, success criteria, progression rule, unexpected-trigger handling, and a personalized "why", so that each exercise is actionable and specific to my dog.

  • Trigger/input: my plan is generated.
  • Observable result: each exercise exposes all seven schema elements.
  • Access state: login required.
  • Failure/recovery: if an element is missing, the exercise surfaces an error rather than an incomplete prescription.
  • Continuation: I run the exercise with complete guidance.

FR-17 — Walk Check-In (explicit) As a Dog Owner (Calm Walks customer), I should record "How did the walk go?" per trigger with Better / Same / Worse, the closest comfortable distance (20 ft), "Did anything unexpected happen?" with\x20\xe2\x98\x90 Loose dog,\x20\xe2\x98\x90 Construction,\x20\xe2\x98\x90 Crowded street,\x20\xe2\x98\x90 New trigger,\x20\xe2\x98\x90 Nothing unexpected, and "Biggest win?" ("Milo looked at the Labrador and took the treat."), then Save Walk, so that the app collects the data needed for adaptation.

  • Trigger/input: I start a check-in walk from the dashboard.
  • Observable result: the walk record is saved and reflected in weekly progress.
  • Access state: login required.
  • Failure/recovery: save failure surfaces a retry without duplicating the walk.
  • Continuation: the saved walk feeds my Weekly Review and next re-plan.

FR-18 — Weekly Review (explicit) As a Dog Owner (Calm Walks customer), I should see "Your Week" with my walks logged count (e.g. "5 walks logged") and my wins (e.g. "Looked at the lab, took the treat.", "Passed the corner without lunging.", "Recovered faster after seeing a bike."), with "No streaks. No guilt.", so that reviewing my week feels rewarding without pressure.

  • Trigger/input: I open Weekly Review.
  • Observable result: the week's walks and wins are shown with no streak or guilt mechanics.
  • Access state: login required.
  • Failure/recovery: load failure surfaces a retry.
  • Continuation: I continue to the weekly re-plan.

FR-19 — Weekly Re-Plan diff (the moat) (explicit) As a Dog Owner (Calm Walks customer), I should see "Your next plan is ready." with "What changed?" numbered diffs — 01 Starting distance changed 20 ft → 15 ft ("Milo stayed calm at 20 ft during three walks."), 02 New environment added ("We're introducing the quieter side of the park."), 03 Progression slowed ("Construction increased reactions this week, so we're keeping difficulty steady.") — then "Why we changed it" ("Based on your Week 2 reports, Milo is consistently recovering faster around dogs but still struggles when the distance closes quickly.") and CTA View Week 3 →, so that I can see exactly what changed and why.

  • Trigger/input: my week's reports are available.
  • Observable result: the numbered diff and rationale are shown, and the next week opens.
  • Access state: login required.
  • Failure/recovery: load failure surfaces a retry.
  • Continuation: View Week 3 → opens the next week's plan.

FR-20 — Preserved plan versions (explicit) As a Dog Owner (Calm Walks customer), I should have my plan versions preserved rather than overwritten, so that I can see how my plan evolved.

  • Trigger/input: a new week's plan is produced.
  • Observable result: prior weeks remain available and unchanged.
  • Access state: login required.
  • Failure/recovery: if a version fails to load, I can retry without losing other versions.
  • Continuation: I open any preserved week from Plan History.

FR-21 — $59 upgrade to weekly re-plans (explicit) As a $59 Plan Owner Seeking Upgrade, I should see "Want your plan to keep adapting?" with "Your current 4-week plan is ready. Weekly re-plans let us adjust it based on what actually happens during your walks.", "Unlock weekly re-plans", "$20 one-time upgrade", "You already paid $59. You'll only pay the $20 difference.", CTA Upgrade for $20 →, and "Still one payment. Nothing renews.", so that I can unlock adaptation with a single difference payment.

  • Trigger/input: I own the $59 plan and open the upgrade offer.
  • Observable result: after the $20 one-time payment completes, weekly re-plans are unlocked.
  • Access state: login required.
  • Failure/recovery: payment failure surfaces a retry without losing the offer state.
  • Continuation: weekly check-ins, updated plans, the "what changed & why" diff, and new trigger adaptations become available.

FR-22 — No dark patterns in the upgrade offer (explicit) As a $59 Plan Owner Seeking Upgrade, I should be offered the $20 upgrade without dark patterns, so that my choice is genuinely mine.

  • Trigger/input: I view the $20 upgrade offer.
  • Observable result: the offer states the one-time difference plainly and does not pressure or obscure the choice.
  • Access state: login required.
  • Failure/recovery: not applicable to presentation constraints.
  • Continuation: I may accept or decline without penalty.

FR-23 — Win Log (explicit) As a Dog Owner (Calm Walks customer), I should see my wins grouped by date — Today ("Milo saw a dog and stayed under threshold."), Yesterday ("Calm walk past the park entrance."), Sept 28 ("Recovered quickly after a surprise bike.") — with each item showing What happened → Date → Trigger, and with no points, no XP, and no streak counter, so that my progress is recorded without gamification.

  • Trigger/input: I open the Win Log.
  • Observable result: wins are listed by date with what happened, date, and trigger.
  • Access state: login required.
  • Failure/recovery: load failure surfaces a retry.
  • Continuation: I navigate via Home | Plan | Walks | Wins | Account.

FR-24 — Plan History (explicit) As a Dog Owner (Calm Walks customer), I should see "Plan History" with "Week 3 — Current" View, "Week 2" View, "Week 1" View, and "Plans aren't overwritten.", so that I can revisit any prior plan version.

  • Trigger/input: I open Plan History.
  • Observable result: preserved weeks are listed and any week opens.
  • Access state: login required.
  • Failure/recovery: load failure surfaces a retry.
  • Continuation: I open a week and return to the list.

FR-25 — Account (explicit) As a Dog Owner (Calm Walks customer), I should see "Account" with "Milo" / Dog profile, "Your plan" / "$79 — Paid", "Receipt" / View receipt, "Your data" / Export my data, Delete account, and "Your plan is yours. One payment. Nothing renews.", so that I can manage my profile, receipt, and data.

  • Trigger/input: I open Account.
  • Observable result: profile, plan status, receipt, and data controls are shown.
  • Access state: login required.
  • Failure/recovery: action failure surfaces a retry; deletion requires explicit confirmation.
  • Continuation: I view my receipt, export my data, or delete my account.

FR-26 — No subscription management (explicit) As a Dog Owner (Calm Walks customer), I should find no "Manage subscription" section in Account, because there is no subscription.

  • Trigger/input: I open Account.
  • Observable result: no subscription management, renewal, or cancellation controls appear.
  • Access state: login required.
  • Failure/recovery: not applicable to an absence constraint.
  • Continuation: I use the available account controls.

FR-27 — Primary navigation (explicit) As a Dog Owner (Calm Walks customer), I should navigate via Home | Plan | Walks | Wins | Account, so that I can reach each core destination.

  • Trigger/input: I use the navigation.
  • Observable result: the selected destination opens.
  • Access state: login required.
  • Failure/recovery: navigation failure surfaces a retry.
  • Continuation: I move between destinations without losing state.

FR-28 — Maple Street visual system (explicit) As a Dog Owner (Calm Walks customer), I should experience the Maple Street system — background warm cream #FAF7F0, primary forest #1F4A31, CTA amber #E29A38, safety muted clay #C25E4C, cards cream #F4EFE5, borders sage #A7C4B0, headlines Fraunces/Lora, UI/body Inter, rounded 12–16px, lots of whitespace, soft borders instead of heavy shadows, mobile-first and thumb-friendly — so that the product feels like humane craft rather than a template.

  • Trigger/input: I use any screen.
  • Observable result: the tokens are applied consistently, with the safety gate using clay rather than amber.
  • Access state: applies to all surfaces.
  • Failure/recovery: not applicable to presentation constraints.
  • Continuation: the visual system persists across the loop.

FR-29 — Remembering and adapting (explicit) As a Dog Owner (Calm Walks customer), I should feel that "I told this thing exactly what happens with my dog, and now it actually remembers and adapts", reinforcing MY DOG → MY STREET → MY WALK → MY DATA → MY NEXT PLAN.

  • Trigger/input: I move through the loop.
  • Observable result: my intake details, street, and walk data visibly shape my next plan.
  • Access state: login required from Intake onward.
  • Failure/recovery: if adaptation data is missing, the re-plan states what is needed rather than inventing changes.
  • Continuation: each week's data feeds the next re-plan.

FR-30 — Self-service enrollment (required_inference) As a Dog Owner (Calm Walks customer), I should establish my identity at first use so that my autosaved intake and private plans, walk records, wins, and history are retained.

  • Trigger/input: I begin intake for the first time.
  • Observable result: my identity is established and my work is saved to it.
  • Access state: Sign Up is anonymously reachable; protected destinations require login.
  • Failure/recovery: enrollment failure surfaces a retry without losing entered values.
  • Continuation: I proceed into Intake.

FR-31 — Returning verification (required_inference) As a Dog Owner (Calm Walks customer), I should verify my identity when I return so that I can resume intake and reach my plans, walk records, wins, history, upgrade, and account controls.

  • Trigger/input: I return to the app.
  • Observable result: my protected state is restored to me.
  • Access state: Login is anonymously reachable; protected destinations require login.
  • Failure/recovery: verification failure surfaces a non-revealing retry.
  • Continuation: I resume where my durable state lives.

FR-32 — Payment precedes generation (required_inference) As a Dog Owner (Calm Walks customer), I should have my personalized plan generated only after my payment completes, so that the plan reveal follows a completed purchase.

  • Trigger/input: I complete payment at Checkout.
  • Observable result: the Plan Generation Screen runs and the plan is revealed.
  • Access state: login required.
  • Failure/recovery: generation failure surfaces a retry without a second payment.
  • Continuation: See My Plan → opens the plan.

FR-33 — Safety evaluation precedes checkout (required_inference) As a Dog Owner (Calm Walks customer), I should have my safety answers evaluated before checkout, so that a flagged dog is never routed into a purchase.

  • Trigger/input: I complete the Safety Gate.
  • Observable result: unflagged answers allow Checkout; flagged answers route to The Right Call Is A Vet Behaviorist.
  • Access state: login required.
  • Failure/recovery: if evaluation fails, checkout remains unavailable until it succeeds.
  • Continuation: I proceed on the correct route.

FR-34 — Upgrade payment precedes unlock (required_inference) As a $59 Plan Owner Seeking Upgrade, I should have weekly re-plans unlocked only after my $20 one-time payment completes, so that the unlock follows a completed difference payment.

  • Trigger/input: I complete the $20 payment.
  • Observable result: weekly re-plans become available.
  • Access state: login required.
  • Failure/recovery: payment failure surfaces a retry without unlocking.
  • Continuation: I receive weekly check-ins, updated plans, the diff, and new trigger adaptations.
Page 12 of 25

4. User Personas

Page 13 of 25

Dog Owner (Calm Walks customer)

Product context. This owner has a reactive dog and has already spent money on training — a trainer at $400–$600, a behaviorist at $600–$1,200+, a training app, or an online course. They are not new to dog training; they are looking for something specific enough to match their dog and their street.

Primary goal. A plan that remembers their dog's actual triggers and their actual walking environment and visibly adapts each week.

Distinct accepted responsibilities. Completing the five-step autosaving intake (dog details, triggers with free-text detail, route and problem spots with trigger distance and environment, prior training history, safety answers); choosing and paying once for the $59 or $79 plan; running prescribed exercises and check-in walks; recording per-trigger walk outcomes, closest comfortable distance, unexpected events, and the biggest win; reviewing the week; reading the "what changed and why" diff; and managing their profile, receipt, and data.

Relevant inputs or decisions. Dog name, age, breed/mix, size, walks per day; trigger chips and the exact description of what happens; usual route, problem spots, usual trigger distance (5m–20m), walking environment; prior approaches and what worked or didn't; safety answers; plan tier choice; per-walk outcomes.

Interactions with other accepted participants. The owner's intake and walk reports are the input the system uses to produce the next plan; the owner reads the resulting diff and rationale. The owner's safety answers determine whether they continue to Checkout or are routed to the veterinary behaviorist referral.

Observable success. The dashboard shows the current week and today's exercises; walks are logged against the week's target; the re-plan shows numbered changes with reasons; Plan History shows prior weeks preserved.

Page 14 of 25

Safety-Flagged Owner (vet behaviorist referral)

Product context. This owner's dog has bitten someone and broken skin, has repeated snapping with contact, or has a serious aggression history. They arrive through the same intake as any other owner.

Primary goal. To be routed safely to appropriate professional assessment with their intake information in hand.

Distinct accepted responsibilities. Answering the safety questions honestly; reading the referral guidance; emailing the intake summary.

Relevant inputs or decisions. The bite and aggression answers at the Safety Gate; the decision to email the intake summary.

Interactions with other accepted participants. Their answers determine the route; the referral screen presents the veterinary behaviorist guidance and the intake-summary email action. No selling surface is reachable from this route.

Observable success. The referral screen appears with "The Right Call Is A Vet Behaviorist" and the intake summary can be emailed — with no checkout, no sales pitch, and no upsell.

Page 15 of 25

$59 Plan Owner Seeking Upgrade

Product context. This owner bought the $59 Personalized 4-Week Plan and later wants their plan to keep adapting.

Primary goal. To unlock weekly re-plans with a single $20 difference payment and nothing renewing.

Distinct accepted responsibilities. Reading the upgrade offer; paying the $20 one-time difference; using weekly check-ins, updated plans, the "what changed & why" diff, and new trigger adaptations once unlocked.

Relevant inputs or decisions. The decision to accept or decline the $20 one-time upgrade.

Interactions with other accepted participants. The offer explains that they already paid $59 and will only pay the $20 difference; after payment, the weekly re-plan lifecycle becomes available to them.

Observable success. Weekly re-plans are unlocked, the offer states "Still one payment. Nothing renews.", and no dark patterns are used.

5. Core User Flows

Page 16 of 25

Flow 1 — First-time owner: landing to generated plan

  1. Landing Page (anonymous). The owner reads "A training plan built for your dog's triggers. Rewritten every week.", the subtext, the CTA Build My Plan — $59, and "$59. One payment. Not a subscription.", then the three-step "How it works" panels.
  2. Sign Up (anonymous). The owner establishes identity so their intake autosaves and their plan stays private to them.
  3. Intake — Step 1 Your Dog (login required). Under "Let's start with your dog." the owner enters Name, Age, Breed / mix, Size, and Walks per day, then Continue →.
  4. Intake — Step 2 Triggers. Under "What sets them off?" the owner selects chips (Other dogs, People, Bikes, Skateboards, Joggers, Cars, Mail carriers, Other) and writes exactly what happens, e.g. "The off-leash Chihuahua near Maple Street…".
  5. Intake — Step 3 The Street. The owner describes their usual route, names problem spots such as "The corner near the park…", sets the usual trigger distance on the 5m–20m slider, chooses an environment card (Quiet residential, Busy street, Apartment complex, Park, Mixed), and uses Save my route →.
  6. History Screen. Under "What have you already tried?" the owner selects Trainer $400–$600, Behaviorist $600–$1,200+, Training app Used one, and/or Online course Tried one, and writes what worked and what didn't.
  7. Safety Gate. Under "One important question." the owner answers "Has your dog ever bitten someone and broken skin?" and the additional questions about bite to a person, repeated snapping with contact, and serious aggression history. The screen uses the clay safety treatment.
  8. Checkout (unflagged route). The owner compares $59 Personalized 4-Week Plan and $79 Plan + Weekly Re-Plans, reads "No subscription. No auto-renewal. No cancellation maze.", and pays once for their chosen plan.
  9. Plan Generation Screen. "Building your plan…" advances through ✓ Reading your dog's triggers, ✓ Mapping your walking environment, ● Building your first week, ○ Creating progression rules, then "Your plan is ready." The owner taps See My Plan →.
  10. Main Dashboard. The owner sees their greeting, "Milo's Week 2" at 60%, Today's focus, today's exercises, and "3 / 5 walks logged".
  11. Failure/recovery. If any step fails to save or load, the owner retries that step without retyping; if payment fails, the selection is retained; if generation fails, retry does not require a second payment.
  12. Continuation. The owner proceeds into the daily loop (Flow 2).

Flow 2 — Daily loop: exercise, walk check-in, weekly review

  1. Main Dashboard (login required). The owner reads Today's focus — "Stay below Milo's reaction threshold when passing dogs." — and today's exercises.
  2. Exercise Detail UI. The owner opens 01 Calm observation and reads Trigger (Other dogs), Start distance (20 ft), Duration (5 minutes), "Success looks like" ("Milo notices the dog, remains able to think/eat, and returns attention to you."), "If a trigger suddenly appears" ("Increase distance calmly. Don't force the interaction. Resume only when Milo is back below threshold."), and "Why this works" tied to their intake. They tap Start Exercise.
  3. Walk Check-In. After the walk, the owner records "How did the walk go?" per trigger with Better / Same / Worse, the closest comfortable distance (20 ft), any unexpected events (\xe2\x98\x90 Loose dog,\x20\xe2\x98\x90 Construction,\x20\xe2\x98\x90 Crowded street,\x20\xe2\x98\x90 New trigger,\x20\xe2\x98\x90 Nothing unexpected), and the biggest win ("Milo looked at the Labrador and took the treat."), then taps Save Walk.
  4. Observable result. The saved walk updates This week's progress on the dashboard (e.g. "3 / 5 walks logged").
  5. Weekly Review. The owner sees "Your Week" with "5 walks logged" and "3 wins" — "Looked at the lab, took the treat.", "Passed the corner without lunging.", "Recovered faster after seeing a bike." — under "No streaks. No guilt."
  6. Failure/recovery. If a walk fails to save, the owner retries without duplicating the record; if the week fails to load, retry restores it.
  7. Continuation. The owner continues to the weekly re-plan (Flow 3).
Page 17 of 25

Flow 3 — Weekly re-plan: the moat

  1. Weekly Re-Plan (login required). The owner sees "Your next plan is ready." and "What changed?" with numbered diffs: 01 Starting distance changed 20 ft → 15 ft ("Milo stayed calm at 20 ft during three walks."), 02 New environment added ("We're introducing the quieter side of the park."), 03 Progression slowed ("Construction increased reactions this week, so we're keeping difficulty steady.").
  2. Why we changed it. The owner reads "Based on your Week 2 reports, Milo is consistently recovering faster around dogs but still struggles when the distance closes quickly."
  3. Observable result. The owner taps View Week 3 → and the next week's plan opens.
  4. Plan History. The owner opens "Plan History" and sees "Week 3 — Current" View, "Week 2" View, "Week 1" View under "Plans aren't overwritten.", confirming prior versions were preserved.
  5. Failure/recovery. If the re-plan fails to load, the owner retries; prior versions remain intact.
  6. Continuation. The owner returns to the daily loop with the new week's exercises.

Flow 4 — Safety-flagged owner: referral instead of purchase

  1. Safety Gate (login required). The owner answers "Has your dog ever bitten someone and broken skin?" with Yes, or reports a bite to a person, repeated snapping with contact, or a serious aggression history.
  2. The Right Call Is A Vet Behaviorist. The owner sees "The Right Call Is A Vet Behaviorist" and "A veterinary behaviorist can assess the situation properly and help you build a safe plan." There is no checkout, no sales pitch, and no upsell.
  3. Observable result. The owner taps Email My Intake Summary and their intake summary is emailed.
  4. Failure/recovery. If the email fails, the owner retries sending the same summary.
  5. Continuation. The funnel ends here; the owner pursues a veterinary behaviorist assessment with their intake information in hand.

Flow 5 — $59 owner upgrades to weekly re-plans

  1. $59 User Upgrade UI (login required). The owner sees "Want your plan to keep adapting?" and "Your current 4-week plan is ready. Weekly re-plans let us adjust it based on what actually happens during your walks."
  2. Offer. The owner reads "Unlock weekly re-plans", "$20 one-time upgrade", "You already paid $59. You'll only pay the $20 difference.", and "Still one payment. Nothing renews." The offer uses no dark patterns.
  3. Decision and payment. The owner taps Upgrade for $20 → and completes the one-time difference payment.
  4. Observable result. Weekly re-plans are unlocked: weekly check-ins, updated training plan, "What changed & why", and new trigger adaptations become available.
  5. Failure/recovery. If the payment fails, the owner retries the same $20 payment and nothing is unlocked until it completes.
  6. Continuation. The owner enters the weekly re-plan lifecycle (Flow 3).
Page 18 of 25

Flow 6 — Account and data controls

  1. Account (login required). The owner sees "Milo" / Dog profile, "Your plan" / "$79 — Paid", "Receipt" / View receipt, "Your data" / Export my data, Delete account, and "Your plan is yours. One payment. Nothing renews."
  2. Receipt. The owner taps View receipt and sees their one-time purchase record.
  3. Export. The owner taps Export my data and receives their data.
  4. Deletion. The owner taps Delete account and confirms explicitly.
  5. Observable result. The chosen action completes; no "Manage subscription" section exists anywhere in Account.
  6. Failure/recovery. If an action fails, the owner retries; deletion requires explicit confirmation before proceeding.
  7. Continuation. The owner returns to Home | Plan | Walks | Wins | Account.
Page 19 of 25

6. Visuals Colors and Theme

The CREATIVE DIRECTION is authoritative for this section. The muse is Charles & Ray Eames; the headline idea is warm modernism for the walk you actually take — joyful colour held inside order, organic-modern shapes, gallery-like sequences, film-like pacing, warm documentary photography. The register is calm authority without coldness: a patient, methodical coach who remembers your street, your dog, your week — and quietly rewrites the plan. It must read as humane craft, not clinical tooling and not a content library.

Colour tokens (light mode)

RoleTokenValue
Backgroundwarm cream ground#FAF7F0
Surface / cardscream, one step warmer#F4EFE5
Text / inkforest#1F4A31
Primaryforest#1F4A31
Accent / CTAamber#E29A38
Muted / structuralsage#A7C4B0
Safetymuted clay#C25E4C
Paper offset shadowwarm offset#E7DFCF
CTA label inkdeep ink on amber#1A2B21
Mid-century supportsmustard / teal / tomato#C98F2B / #2E6F6A / #C4553B

Colour rules. Warm cream #FAF7F0 carries roughly 70% of every screen; cards sit on #F4EFE5 so panels read as paper laid on paper rather than floating chrome. Forest #1F4A31 is the ink — all body copy, headings, hairlines, and the wordmark — and is never a big filled button. Amber #E29A38 is the single hot signal, reserved for exactly one action per screen (Build My Plan, Start Exercise, Save Walk, View Week 3) plus the progress bar fill. Sage #A7C4B0 is structural only: 1px borders, dividers, inactive step dots, chart rules. Clay #C25E4C appears only in the safety gate, the vet-behaviorist route, and Worse states — it must never appear on a selling screen, so the safety route is legible as a different mode at a glance. Mid-century supports (mustard #C98F2B, teal #2E6F6A, tomato #C4553B) may tint chart strokes and week badges but never text on the cream ground. Contrast: forest on cream ≈ 9.4:1; ink #1A2B21 on amber #E29A38 ≈ 7.6:1 for CTA labels; clay #C25E4C on cream ≈ 4.7:1 for safety body copy, with clay used as a 2px rule and label colour rather than as a fill behind small text.

Typography. Headings use Fraunces at optical size "soft" — a low-contrast, slightly slabby serif with a warm, almost letterpress feel — weights 400–600, never black; tracking -0.02em on display, 0 on section headings; sentence case everywhere except micro-labels. Jost (a Futura-lineage geometric) carries all UI, forms, chips, numbers, and body copy at 400/500, tracking +0.01em, with tabular numerals enabled for distances, durations, and week counts. The pairing is the Eames move: a warm humanist serif for the voice, a geometric sans for the instrument.

Type scale. 1.25 modular on mobile, 1.333 on desktop. Mobile → desktop: display 40→96, h1 32→56, h2 26→38, h3 21→26, body 17→18, label 13→12 uppercase tracked +0.08em, micro 11→11. Line-height 1.05 on display, 1.15 on headings, 1.6 on body. Display type uses clamp(40px, 7vw, 96px).

Shape language. Organic-modern: 16px radii on cards and inputs, 12px on chips and small controls, 999px on pill buttons and progress tracks. Eames curves are continuous and generous, never bubbly — a card corner should feel like a molded plywood edge, so radius is applied asymmetrically on hero panels (24px top-left, 16px elsewhere) to imply a hand-set panel. Hairline 1px sage borders do all the separating; shadows are replaced by a 2px warm offset (0 2px 0 #E7DFCF) that reads as paper thickness, not elevation. Diagonal 6px colour bands (amber/forest) mark section transitions and the plan-version diff. Circular elements — week badges, the trigger-distance dial, step dots — are true circles, echoing Eames' love of the sphere and the sun.

Layout. Gallery sequence on a 12-column grid with 24px gutters (16px at 375px), max content width 1120px, and a persistent 3-column "panel rhythm" borrowed from Eames exhibition walls: eyebrow label / content / action. The Landing Page is a stacked sequence of full-width horizontal bands, each band a different warm ground value, so scrolling feels like walking past framed panels. Intake is a single centred column at 640px max with the 5-dot progress rail pinned above and Back/Continue pinned in a bottom bar on mobile (thumb zone), side-by-side at 768px+. The dashboard is a two-track layout: a wide "today" column and a narrow right rail of week progress and wins, collapsing to one column under 768px. The Re-Plan screen is the signature layout: a two-column diff spread — previous week's values on the left in sage, new values on the right in forest with amber underline — with numbered change cards stacked between them, always side-by-side at 768px+ and stacked (old above new) at 375px. Plan History is a horizontal filmstrip of week panels, scrollable at 375px, tiled at 1280px.

Imagery. Warm documentary photography in natural light: a dog on a leash at mid-distance on a residential street, a hand offering a treat, a corner with a parked car — shot at eye level, shallow depth, cream and sage in the grade, never stock-studio white. One full-bleed hero photograph per band maximum; everything else is diagrammatic: mid-century line diagrams of a street corner with a marked trigger distance, concentric threshold rings around a dog silhouette, a route map drawn as a single sage line with amber problem-spot dots. Week badges and change indicators use simple geometric marks (circle, half-circle, chevron) in the Eames colour set. No illustrations of cartoon dogs, no emoji as primary iconography, no 3D renders, no gradient blobs.

Avoid. Blue or indigo anywhere in the palette — the amber/forest/clay system is the identity, and a blue link or focus ring would collapse it into a template. Inter, Roboto, Arial, Helvetica, Open Sans, Lato, Poppins, or system-ui for headings or body; Jost and Fraunces carry the voice and must not be swapped for a neutral sans. A centred hero of headline + subtext + button over a gradient blob, and any grid of identical hover-lift cards with equal weight. Streaks, XP, points, confetti, badges, or guilt copy anywhere in Wins, Weekly Review, or the dashboard — the spec forbids pressure mechanics. Amber used for more than one action per screen, or amber/clay used on the safety route's CTA (the safety route has no selling action at all). Soft large-radius drop shadows, glassmorphism, blur panels, or translucent surfaces — separation is hairlines and paper offset only. Cartoon dog illustrations, emoji as primary icons, or stock photography on white studio grounds. Any "Manage subscription", renewal, upsell modal, or recurring-billing language — the product is one payment, and the UI must never imply otherwise.

Readable text and controls stay whole at every viewport. Headlines, wordmarks, labels, numbers, cards' text, and controls stay entirely inside the viewport and their container at 375px, 768px, and 1280px, wrapping or scaling (for example font-size: clamp(...) with its mobile size) to fit, and no other element covers any part of them. Imagery, decoration, and motion follow the creative direction: a photograph, artwork, shape, texture, or animation may be cropped, bled off an edge, rotated, overlapped, or cut exactly as the direction asks, as long as it covers no readable text or control. Moving and scrollable content (marquees, tickers, carousels, horizontally scrollable rows) may cross the viewport or container edge by design: judge it by whether it actually moves or scrolls and whether every item becomes fully readable as it passes, never by the item cut at the edge in a still frame. With prefers-reduced-motion it stops and shows whole items: they wrap into rows, or sit in a horizontally scrollable row (overflow-x: auto) whose further items are reached by scrolling. Where a direction, requirement, brief, or finding asks readable text or a control to be cropped, clipped, covered, or run off an edge, keep it whole and carry the gesture with imagery or decoration instead; for readable text and controls this rule takes precedence.

Page 20 of 25

7. Signature Design Concept

The Re-Plan diff spread as a visible object. The public entry's signature idea is that the product's moat is shown, not described. On the Landing Page, the right 5 columns hold a full-height warm photograph of a dog at mid-distance on a residential street, bleeding off the right edge of the viewport with a 24px top-left radius. Over its lower-left corner sits a small cream panel (16px radius, sage hairline, 2px paper offset) carrying a live "this week's change" fragment: 20 ft → 15 ft with the amber underline and the caption "Milo stayed calm at 20 ft during three walks." That panel is the same object the owner meets again on the Weekly Re-Plan screen as the two-column diff spread — last week's value left in sage #A7C4B0, this week's right in forest #1F4A31 with a 3px amber underline, joined by a centred arrow rule, with numbered change cards stacked between them.

The left 7 columns hold an oversized Fraunces headline at clamp(40px, 7vw, 96px) — "A training plan built for your dog's triggers." on one line, then "Rewritten every week." set in amber on its own line as a full-width second beat — with the subtext at 18px forest and the amber pill Build My Plan — $59 pinned beneath it, immediately followed by the plain forest line "$59. One payment. Not a subscription." Below the fold line, the three-step "How it works" runs as three numbered panels on three different warm ground values with amber numerals 01/02/03 and a sage rule between them.

At 375px the photograph becomes a 240px full-bleed band above the headline, the overlay panel moves below the CTA and stays fully inside the viewport, and the headline wraps to four lines with no word broken. This concept recomposes only accepted content, states, and controls — the hero copy, the price line, the three-step structure, and the change fragment drawn from the accepted re-plan diff — and introduces no new behaviour, page, or destination.

Page 21 of 25

8. Interaction Model & Motion Direction

Interaction Model: Animated Motion Tempo: restrained Hero Dimensionality: layered_2d

Landing Hero Motion Brief

  • Focal subject. The warm documentary photograph of a dog at mid-distance on a residential street, bleeding off the right edge, with the cream "this week's change" panel (20 ft → 15 ft, amber underline, caption "Milo stayed calm at 20 ft during three walks.") overlaid on its lower-left corner.
  • Input → transformation → outcome thesis. As the owner scrolls the Landing Page, each full-width band fades and rises 16px into place (one reveal per band, staggered 80ms across the three columns), so the page reads as walking past framed panels; the change fragment in the overlay panel resolves with the amber underline drawing in, so the first thing the owner sees is the product's moat as an object rather than a claim.
  • Motion vocabulary. 400–600ms cubic-bezier(0.22, 0.61, 0.36, 1) for entrances, 160ms for control feedback. Sections fade-and-rise 16px as they enter the viewport. Progress bars fill from 0 on mount. Hover on any card lifts it 2px and deepens its paper-offset from 2px to 4px — no scale, no glow. No bounce, no particles, no gradient drift.
  • Composed first frame. The left 7 columns hold the oversized Fraunces headline with "Rewritten every week." as a full-bleed amber line, the 18px forest subtext, the amber pill Build My Plan — $59, and the plain forest price line; the right 5 columns hold the photograph with the cream change panel already composed in its lower-left corner. The three "How it works" panels sit below the fold line on three different warm ground values.
  • Reduced-motion state. Under prefers-reduced-motion all reveals resolve instantly to final state, the diff shows both values side by side with no wipe, and the landing "what changed" ticker stops and wraps into static rows.

Signature motion — the Re-Plan diff wipe. On the Weekly Re-Plan screen the diff animates as a wipe: the old value slides left and fades while the new value slides in from the right, 500ms, once, on entry. This is the product's moat made visible. Under prefers-reduced-motion both values are shown side by side with no wipe.

Plan Generation motion. The four-state checklist uses an active row that pulses a 2px amber dot, while completed rows draw a 1px sage rule beneath.

Page 22 of 25

9. Non-Functional Requirements

NFR-1 — One payment only (explicit) There must be no subscription, no auto-renewal, and no cancellation maze anywhere in the product. Rationale: the source states this as a hard constraint and repeats it at Checkout, in the upgrade offer, and in Account.

NFR-2 — $79 is a one-time upgrade (explicit) The $79 plan must be framed as a one-time upgrade, not recurring billing. Rationale: explicit source constraint.

NFR-3 — $20 difference upgrade (explicit) The $59 → weekly re-plans upgrade must be a one-time $20 payment covering only the difference already paid. Rationale: explicit source constraint.

NFR-4 — No subscription management (explicit) The Account screen must deliberately have no "Manage subscription" section because there is no subscription. Rationale: explicit source constraint.

NFR-5 — No selling on the safety route (explicit) When the safety gate is flagged, there must be no checkout, no sales pitch, and no upsell. Rationale: explicit source constraint; the safety route ends the funnel.

NFR-6 — Clay safety treatment (explicit) The safety gate must use the clay/terracotta safety colour #C25E4C, not the normal amber CTA #E29A38. Rationale: explicit source constraint; the safety route must be legible as a different mode at a glance.

NFR-7 — No streaks or guilt (explicit) Weekly Review must have no streaks and no guilt mechanics. Rationale: explicit source constraint.

NFR-8 — No points, XP, or streak counter (explicit) The Win Log must have no points, no XP, and no streak counter. Rationale: explicit source constraint.

NFR-9 — Plan versions preserved (explicit) Plan versions must not be overwritten. Rationale: explicit source constraint; preserved versions are what make the "what changed and why" diff meaningful.

NFR-10 — No dark patterns (explicit) The $20 upgrade offer must not use dark patterns. Rationale: explicit source constraint.

NFR-11 — Actual triggers, not generic categories (explicit) The plan must use the owner's actual triggers, not generic categories. Rationale: explicit source constraint; the free-text trigger detail exists precisely for this.

NFR-12 — Mobile-first and thumb-friendly (explicit) The layout must be mobile-first and thumb-friendly, with lots of whitespace and soft borders instead of heavy shadows. Rationale: explicit source constraint.

NFR-13 — Maple Street tokens (explicit) The Maple Street tokens must be applied consistently: background #FAF7F0, primary #1F4A31, CTA #E29A38, safety #C25E4C, cards #F4EFE5, borders #A7C4B0, headlines Fraunces/Lora, UI/body Inter, rounded 12–16px. Rationale: explicit source constraint.

NFR-14 — Readable text and controls stay whole (explicit) Headlines, wordmarks, labels, numbers, cards' text, and controls must stay entirely inside the viewport and their container at 375px, 768px, and 1280px, wrapping or scaling to fit, with no other element covering any part of them. Rationale: explicit direction constraint; for readable text and controls this rule takes precedence over cropping gestures.

NFR-15 — No blue or indigo (explicit) Blue or indigo must not appear anywhere in the palette; the amber/forest/clay system is the identity. Rationale: explicit direction constraint.

NFR-16 — Font discipline (explicit) Fraunces and Jost carry the voice and must not be swapped for a neutral sans; Inter, Roboto, Arial, Helvetica, Open Sans, Lato, Poppins, and system-ui are excluded for headings and body. Rationale: explicit direction constraint.

NFR-17 — No soft drop shadows or glassmorphism (explicit) Separation must be hairlines and paper offset only; soft large-radius drop shadows, glassmorphism, blur panels, and translucent surfaces are excluded. Rationale: explicit direction constraint.

NFR-18 — Reduced-motion support (explicit) Under prefers-reduced-motion all reveals must resolve instantly to final state, the diff must show both values side by side with no wipe, and marquees/tickers must stop and wrap into static rows. Rationale: explicit direction constraint.

NFR-19 — Payment precedes plan generation (required_inference) Personalized plan generation and the plan reveal must occur only after payment completes. Rationale: required to make the accepted post-payment generation journey executable.

NFR-20 — Safety evaluation precedes checkout (required_inference) Safety evaluation must complete before checkout, and flagged owners must remain on the vet behaviorist path. Rationale: required to make the accepted safety routing executable and to keep the no-selling constraint binding.

NFR-21 — Upgrade payment precedes unlock (required_inference) The $20 upgrade payment must complete before weekly re-plans are unlocked. Rationale: required to make the accepted upgrade journey executable.

NFR-22 — Identity continuity for durable owner state (required_inference) Application-owned identity must protect intake, plans, walk records, wins, history, upgrade, and account controls so that durable owner-specific state remains bound to the correct owner. Rationale: required because autosaved intake, private plans, and walk history must survive across sessions and remain private.

Page 23 of 25

10. Tech Stack

  • Frontend: React, mobile-first responsive web, implementing the Maple Street token system and the Eames-derived layout, motion, and typography direction. Fraunces and Jost are loaded as the heading and UI/body families.
  • Backend: Python / FastAPI, serving intake autosave, safety evaluation, plan generation, plan-version preservation, walk records, wins, upgrade state, and account data controls.
  • Storage: persistent storage for owner identity, autosaved intake answers, generated plan versions (preserved, never overwritten), walk check-ins, wins, purchase and upgrade records, and receipts.
  • Deployment: Docker / docker-compose for local and single-host deployment. Kubernetes is not required by any source constraint and is therefore not included.
Page 24 of 25

11. Assumptions and Constraints

Assumptions

  • A-1 (required_inference) — Identity is application-owned because autosaved intake, private plans, walk records, wins, and history must persist privately to the correct owner across sessions.
  • A-2 (required_inference) — Sign Up and Login are anonymously reachable entry surfaces; all other destinations require login. A protected destination cannot own the interaction that establishes access to itself.
  • A-3 (required_inference) — Payment is a one-time purchase; the plan is generated only after payment completes, and the $20 upgrade unlocks weekly re-plans only after its payment completes.
  • A-4 (required_inference) — Safety evaluation completes before checkout; a flagged result keeps the owner on the vet behaviorist path with no selling surface reachable.
  • A-5 (required_inference) — The intake-summary email on the referral route is an outbound delivery to the owner; the veterinary behaviorist is an external professional the owner contacts, not a product surface.
  • A-6 (basic_default) — The example values in the source (Milo, Sarah, Week 2, 20 ft, 15 ft, 5 min, 15 min, 3 / 5 walks logged, Sept 28) are illustrative content for the described states, not fixed data.

Constraints

  • C-1 (explicit) — One payment only: no subscription, no auto-renewal, no cancellation maze.
  • C-2 (explicit) — The $79 plan is a one-time upgrade, not recurring billing.
  • C-3 (explicit) — The $59 → weekly re-plans upgrade is a one-time $20 payment covering only the difference already paid.
  • C-4 (explicit) — The Account screen must deliberately have no "Manage subscription" section because there is no subscription.
  • C-5 (explicit) — When the safety gate is flagged, there must be no checkout, no sales pitch, and no upsell.
  • C-6 (explicit) — The safety gate uses the clay/terracotta safety colour, not the normal amber CTA.
  • C-7 (explicit) — Weekly Review must have no streaks and no guilt mechanics.
  • C-8 (explicit) — Win Log must have no points, no XP, and no streak counter.
  • C-9 (explicit) — Plan versions must not be overwritten.
  • C-10 (explicit) — The $20 upgrade offer must not use dark patterns.
  • C-11 (explicit) — The plan must use the owner's actual triggers, not generic categories.
  • C-12 (explicit) — Mobile-first, thumb-friendly layout with lots of whitespace and soft borders instead of heavy shadows.
  • C-13 (explicit) — The generic indigo/blue-on-white SaaS template is forbidden for this project.
Page 25 of 25

12. Glossary

  • Calm Walks — The product delivered by dog-training-plan.
  • Core loop — Dog assessment → personalized plan → real-world walk → weekly check-in → adaptive re-plan.
  • Intake — The autosaved five-step assessment: Your Dog, Triggers, The Street, History, Safety.
  • Trigger — A specific stimulus that sets the dog off (e.g. other dogs, people, bikes, skateboards, joggers, cars, mail carriers, other), described in the owner's own words.
  • Trigger distance — The distance at which the dog reacts; set on a 5m–20m slider at intake and recorded as closest comfortable distance at walk check-in.
  • Threshold — The point below which the dog can still notice a trigger, think, and take a treat.
  • Walking environment — One of Quiet residential, Busy street, Apartment complex, Park, Mixed.
  • Plan schema — The required elements of every exercise: trigger, distance, duration, success criteria, progression rule, unexpected-trigger handling, and a personalized "why".
  • Weekly re-plan — The adaptive next-week plan produced from the owner's reports; the product moat.
  • "What changed & why" diff — The numbered changes between plan versions with the reason for each, plus the overall rationale.
  • Plan version — A preserved week of the plan; versions are never overwritten.
  • Win — A recorded positive outcome with what happened, date, and trigger; no points, XP, or streak counter.
  • Safety gate — The intake step that evaluates bite breaking skin, bite to a person, repeated snapping with contact, and serious aggression history.
  • Vet behaviorist referral — The safety-flagged outcome ("The Right Call Is A Vet Behaviorist") with an intake-summary email action and no selling surface.
  • Maple Street — The design token system: warm cream #FAF7F0, forest #1F4A31, amber #E29A38, clay #C25E4C, cream cards #F4EFE5, sage borders #A7C4B0, Fraunces/Lora headlines, Inter body, 12–16px radii.

No completed page designs yet.

Completed design pages will appear here when they are ready to preview.

Landing Page: Return and sign in
Login: Sign in to account
Main Dashboard: Open current plan week
$59 User Upgrade UI: Read $20 one-time difference offer
$59 User Upgrade UI: 1. Pay $20 to unlock re-plans
$59 User Upgrade UI: 2. Retry $20 payment without unlocking
Weekly Re-Plan: Review what changed and why
Weekly Re-Plan: Open next week's plan
Plan History: Open a preserved prior week
Win Log: Read wins by date and trigger
Account: View receipt and upgrade status

No completed page designs yet.

Completed design pages will appear here when they are ready to preview.

Landing Page: Return and sign in
Login: Sign in to account
Main Dashboard: Open current plan week
$59 User Upgrade UI: Read $20 one-time difference offer
$59 User Upgrade UI: 1. Pay $20 to unlock re-plans
$59 User Upgrade UI: 2. Retry $20 payment without unlocking
Weekly Re-Plan: Review what changed and why
Weekly Re-Plan: Open next week's plan
Plan History: Open a preserved prior week
Win Log: Read wins by date and trigger
Account: View receipt and upgrade status