Skip to content

Latest commit

Β 

History

History
755 lines (498 loc) Β· 25.3 KB

File metadata and controls

755 lines (498 loc) Β· 25.3 KB

LoopKit User Stories

"A user story is a promise for a conversation." β€” Ron Jeffries

This document maps every LoopKit feature to real user stories with acceptance criteria. Use this for development prioritization, QA testing, and onboarding design.


Story Format

As a [persona]
I want to [action]
So that [outcome/value]

Acceptance Criteria:

  • Given [context], when [action], then [result]

Priority: πŸ”΄ High / 🟑 Medium / 🟒 Low Effort: S / M / L Persona: Primary beneficiary


Phase 1: Define (loopkit init)

US-INIT-01: Score My Idea Before Building

As a first-time founder (Alex)
I want to answer 5 structured questions about my idea
So that I get an objective score before writing any code

Acceptance Criteria:

  • Given I run loopkit init, when I answer all 5 questions, then I receive scores for ICP, Problem, and MVP (1-10)
  • Given my answer is < 5 words, when I submit it, then I see a soft warning suggesting more detail
  • Given my answer contains solution language ("app that does X"), when I submit Q2, then I see a flag warning me to focus on the problem

Priority: πŸ”΄ High | Effort: M | Persona: Alex, Sarah


US-INIT-02: Compare Multiple Ideas

As a solo founder (Sarah)
I want to run `loopkit init` on 3 different ideas
So that I can compare their scores and pick the best one to pursue

Acceptance Criteria:

  • Given I have 3 saved briefs, when I list them, then I see each with its overall score
  • Given I pick the highest-scoring idea, when I set it as active, then loopkit track uses it by default

Priority: 🟑 Medium | Effort: S | Persona: Sarah, Marcus


US-INIT-03: Resume After Interruption

As a side project shipper (Jordan)
I want to resume `loopkit init` after pressing Ctrl+C
So that I don't lose my progress if I get interrupted

Acceptance Criteria:

  • Given I answered 3 of 5 questions and pressed Ctrl+C, when I run loopkit init again, then I'm asked whether to resume or start over
  • Given I choose to resume, when the command continues, then I see my previous answers and continue from question 4

Priority: πŸ”΄ High | Effort: S | Persona: Jordan


US-INIT-04: Validate Without AI

As a free-tier user
I want to complete `loopkit init` even when the AI is unavailable
So that I can still structure my thinking without paying

Acceptance Criteria:

  • Given my API key is missing and I have no auth token, when I run loopkit init, then I can still answer all questions and save a brief without scores
  • Given the AI service is down, when I complete the flow, then my answers are saved and I see a message to run --analyze later

Priority: 🟑 Medium | Effort: S | Persona: All


US-INIT-05: Get a Clear Validation Plan

As a first-time founder (Alex)
I want the AI to tell me the riskiest assumption and how to validate it
So that I know exactly what to do in my first week

Acceptance Criteria:

  • Given I complete loopkit init, when the brief is generated, then it includes a "Riskiest Assumption" section
  • Given I read the brief, when I look at "Validate Before You Build", then I see 1-3 concrete actions I can take this week

Priority: πŸ”΄ High | Effort: S | Persona: Alex, Sarah


Phase 2: Develop (loopkit track)

US-TRACK-01: See My Weekly Progress

As a solo founder (Sarah)
I want to run `loopkit track` and see what I've done this week
So that I know if I'm on track or falling behind

Acceptance Criteria:

  • Given I have a tasks.md file with done and open tasks, when I run loopkit track, then I see a board with βœ“ done and β—‹ open tasks
  • Given I have completed tasks, when the board renders, then I see a shipping score progress bar (done/total Γ— 100)

Priority: πŸ”΄ High | Effort: S | Persona: All


US-TRACK-02: Close Tasks via Git Commits

As an indie hacker (Marcus)
I want my commit messages to automatically close tasks
So that I don't have to manually update tasks.md every time

Acceptance Criteria:

  • Given the git hook is installed, when I commit with message [#3] Fix auth bug, then task #3 is marked as done in tasks.md
  • Given I commit with [#2] [#4] Update docs, when the hook runs, then both tasks #2 and #4 are closed

Priority: πŸ”΄ High | Effort: M | Persona: Marcus, Sarah


US-TRACK-03: Handle Stale Tasks

As a solo founder (Sarah)
I want stale tasks (3+ days old) to be flagged
So that I decide whether to keep working on them, snooze them, or cut them

Acceptance Criteria:

  • Given a task has been open for 4 days, when I run loopkit track, then I see a stale task alert
  • Given I see the stale alert, when I interact with it, then I can choose: keep / snooze (pick date) / cut (moves to cut.md)
  • Given I cut a task, when I check cut.md, then the task is preserved with the cut date (never deleted)

Priority: 🟑 Medium | Effort: M | Persona: Sarah, Jordan


US-TRACK-04: Add Tasks Quickly

As an indie hacker (Marcus)
I want to add a task without opening an editor
So that I can capture ideas instantly

Acceptance Criteria:

  • Given I run loopkit track --add "Implement OAuth", when the command completes, then the task appears in tasks.md with a sequential ID and today's date
  • Given I run loopkit track --add with no argument, when the command runs, then it opens $EDITOR for multi-line input

Priority: 🟑 Medium | Effort: S | Persona: Marcus


US-TRACK-05: Switch Between Projects

As an indie hacker (Marcus)
I want to switch my active project from the CLI
So that I can manage multiple projects without editing config.json

Acceptance Criteria:

  • Given I have 3 projects, when I run loopkit track --project other-project, then the active project switches
  • Given I switch projects, when I run loopkit track next, then I see the tasks for the newly active project

Priority: 🟑 Medium | Effort: S | Persona: Marcus


US-TRACK-06: Repair Broken IDs

As a side project shipper (Jordan)
I want to fix broken task IDs after manual editing
So that my task numbering stays consistent

Acceptance Criteria:

  • Given I manually edited tasks.md and created duplicate IDs, when I run loopkit track --repair, then all IDs are re-sequenced from #1

Priority: 🟒 Low | Effort: S | Persona: Jordan


Phase 3: Deliver (loopkit ship)

US-SHIP-01: Generate Launch Copy

As a solo founder (Sarah)
I want AI to write my launch posts for HN, Twitter, and IH
So that I can launch in 10 minutes instead of 2 hours

Acceptance Criteria:

  • Given I have a brief.json, when I run loopkit ship, then I see drafts for HN (title+body), Twitter (3 tweets), and IH (narrative)
  • Given I read the HN draft, when I evaluate it, then it follows HN conventions (no hype, developer tone, clear value prop)

Priority: πŸ”΄ High | Effort: M | Persona: Sarah, Marcus


US-SHIP-02: Edit Drafts in My Editor

As an indie hacker (Marcus)
I want to edit AI-generated drafts in my preferred editor
So that I can add my personal voice before posting

Acceptance Criteria:

  • Given I see the draft selection screen, when I press [e]dit, then the draft opens in $EDITOR (or nano as fallback)
  • Given I save and exit the editor, when I return to LoopKit, then I see my edited version and can choose to use it

Priority: 🟑 Medium | Effort: S | Persona: Marcus


US-SHIP-03: Save Ship History

As a solo founder (Sarah)
I want my ship logs saved automatically
So that I can look back at what I launched and when

Acceptance Criteria:

  • Given I complete loopkit ship, when the command finishes, then a log is saved to .loopkit/ships/YYYY-MM-DD.md
  • Given I ship on the same day twice, when the second ship completes, then I'm asked: overwrite / append / skip

Priority: 🟑 Medium | Effort: S | Persona: Sarah


US-SHIP-04: Ship Without a Brief

As a side project shipper (Jordan)
I want to use `loopkit ship` even if I skipped `loopkit init`
So that I can launch quick experiments without full documentation

Acceptance Criteria:

  • Given I have no brief.json, when I run loopkit ship, then I'm asked 2-3 inline questions for context
  • Given I answer the questions, when the AI generates drafts, then they use my answers as context

Priority: 🟑 Medium | Effort: S | Persona: Jordan


Phase 4: Feedback (loopkit pulse)

US-PULSE-01: Collect Feedback via Shareable Link

As a solo founder (Sarah)
I want to generate a shareable feedback URL from the CLI
So that I can collect structured feedback without building a form

Acceptance Criteria:

  • Given I run loopkit pulse --share, when the command completes, then I see a URL and a QR code in the terminal
  • Given I share the URL, when someone visits it, then they see a branded feedback form
  • Given someone submits feedback, when I check the dashboard, then their response appears in real-time

Priority: πŸ”΄ High | Effort: M | Persona: Sarah, Alex


US-PULSE-02: Add Feedback Inline

As an indie hacker (Marcus)
I want to quickly add feedback I received via DM or email
So that I don't lose insights that come through random channels

Acceptance Criteria:

  • Given I run loopkit pulse --add "User said X", when the command completes, then the response is appended to my collection
  • Given I have < 5 responses, when I run loopkit pulse, then I see raw responses with a message that I need 5 for clustering

Priority: 🟑 Medium | Effort: S | Persona: Marcus


US-PULSE-03: AI Clustering of Feedback

As a solo founder (Sarah)
I want AI to group my feedback into actionable clusters
So that I know what to fix now vs. validate later

Acceptance Criteria:

  • Given I have β‰₯ 5 responses, when I run loopkit pulse, then I see 3 clusters: "Fix now", "Validate later", "Noise"
  • Given a cluster is generated, when I read it, then I see: count, pattern description, and 2-3 representative quotes
  • Given the AI generates clusters, when I evaluate them, then the quotes are real (never invented)

Priority: πŸ”΄ High | Effort: M | Persona: Sarah, Alex


US-PULSE-04: Tag Feedback to Sprint

As a solo founder (Sarah)
I want to tag a "Fix now" item directly to my task list
So that feedback turns into action immediately

Acceptance Criteria:

  • Given I see a "Fix now" cluster, when I confirm "Tag to sprint?", then a new task is added to my tasks.md
  • Given the task is added, when I run loopkit track, then I see the new task with a note that it came from pulse

Priority: 🟑 Medium | Effort: S | Persona: Sarah


US-PULSE-05: Embed Feedback Widget

As a solo founder (Sarah)
I want to embed a feedback widget on my landing page
So that visitors can give feedback without leaving my site

Acceptance Criteria:

  • Given I run loopkit pulse --share, when I see the output, then it includes a <script> tag for embedding
  • Given I embed the script, when a user clicks the feedback button, then a modal opens with the feedback form
  • Given the user is offline, when they submit feedback, then Convex queues it and syncs when they're back online

Priority: 🟑 Medium | Effort: M | Persona: Sarah


Phase 5: Iterate (loopkit loop)

US-LOOP-01: Weekly Synthesis Ritual

As a side project shipper (Jordan)
I want a Sunday ritual that synthesizes my week
So that I know exactly what to focus on next week

Acceptance Criteria:

  • Given it's Sunday and I have loop data, when I run loopkit loop, then AI generates "The One Thing" I should focus on next week
  • Given the synthesis is generated, when I read it, then it follows priority logic: Fix now β†’ Ship β†’ Validate β†’ Next task

Priority: πŸ”΄ High | Effort: M | Persona: Jordan, Sarah


US-LOOP-02: Tension Detection

As a solo founder (Sarah)
I want to know when my pulse feedback contradicts my track plan
So that I don't ignore critical user feedback

Acceptance Criteria:

  • Given I have a "Fix now" pulse item and my tasks don't address it, when I run loopkit loop, then the synthesis includes a "Tension" section highlighting the conflict
  • Given I see the tension, when I review it, then I can choose to accept the AI's recommendation or override it with a reason

Priority: 🟑 Medium | Effort: M | Persona: Sarah


US-LOOP-03: Override Tracking

As an indie hacker (Marcus)
I want to override the AI's recommendation with my own judgment
So that I maintain agency while still getting the system's perspective

Acceptance Criteria:

  • Given I disagree with the AI recommendation, when I choose "Change", then I can enter my own priority and reason
  • Given I override, when the loop log is saved, then the override and reason are recorded
  • Given I override > 50% of the time for 4 weeks, when I run loopkit loop, then I see a gentle warning about my override rate

Priority: 🟑 Medium | Effort: S | Persona: Marcus


US-LOOP-04: Streak Visualization

As a side project shipper (Jordan)
I want to see my consecutive week streak
So that I stay motivated to maintain my shipping habit

Acceptance Criteria:

  • Given I have run loopkit loop for 4 consecutive weeks, when I run it again, then I see a "4-Week Streak" indicator
  • Given I break my streak, when I run loopkit loop after missing a week, then I see my streak reset to 0 with a friendly message

Priority: 🟒 Low | Effort: S | Persona: Jordan


US-LOOP-05: First-Week Handling

As a first-time founder (Alex)
I want `loopkit loop` to work in my first week even without historical data
So that I can start the ritual immediately

Acceptance Criteria:

  • Given it's my first week and I have no loop logs, when I run loopkit loop, then I'm asked 2 inline questions instead of relying on AI synthesis
  • Given I answer the questions, when the loop completes, then a log is saved and I see "nextStep('init')" guidance

Priority: 🟑 Medium | Effort: S | Persona: Alex


Cross-Cutting Stories

US-AUTH-01: Authenticate Once, Use Everywhere

As a solo founder (Sarah)
I want to log in once via the CLI and stay authenticated
So that I don't have to manage API keys manually

Acceptance Criteria:

  • Given I run loopkit auth, when I complete the browser flow, then my token is saved (encrypted) to config.json
  • Given I'm authenticated, when I run any AI-powered command, then it uses my token seamlessly
  • Given my token expires, when I make an API call, then I see a friendly message: "Your session expired. Run loopkit auth to log in again."

Priority: πŸ”΄ High | Effort: M | Persona: All


US-TIER-01: Understand My Plan Limits

As a free-tier user
I want to know when I'm hitting my AI usage limit
So that I can decide whether to upgrade or wait

Acceptance Criteria:

  • Given I'm on the free tier and I've used 8/10 AI calls today, when I make another AI call, then I see: "You have 2 AI calls remaining today. Upgrade for unlimited."
  • Given I hit the limit, when I try another AI call, then I see: "Rate limit exceeded: 10/10 AI calls today. Upgrade for more."

Priority: 🟑 Medium | Effort: S | Persona: All


US-TRACK-07: Project Collision Handling

As an indie hacker (Marcus)
I want to handle naming conflicts when creating a new project
So that I don't accidentally overwrite existing work

Acceptance Criteria:

  • Given a project "saas" already exists, when I run loopkit init saas, then I see options: overwrite / create new version / resume existing
  • Given I choose "create new version", when the init completes, then the project is saved as "saas-v2" or similar

Priority: 🟑 Medium | Effort: S | Persona: Marcus


US-PULSE-06: Graceful Fallback When AI Fails

As a solo founder (Sarah)
I want LoopKit to keep working even when the AI service is down
So that I'm never completely blocked

Acceptance Criteria:

  • Given the AI service is unavailable, when I run loopkit pulse with β‰₯ 5 responses, then I see the raw responses instead of crashing
  • Given AI fails during loopkit ship, when the error is caught, then my ship log is still saved with what I manually entered
  • Given any AI error, when it occurs, then I see a friendly fallback message, not a stack trace

Priority: πŸ”΄ High | Effort: S | Persona: All


US-INIT-06: Session Resume After Ctrl+C

As a side project shipper (Jordan)
I want to safely exit any prompt with Ctrl+C without losing data
So that I feel confident using LoopKit in any context

Acceptance Criteria:

  • Given I'm in the middle of any prompt, when I press Ctrl+C, then the CLI exits gracefully
  • Given I was in loopkit init, when I press Ctrl+C after question 3, then my partial answers are saved to draft.json
  • Given I resume later, when I choose to continue, then I start from where I left off

Priority: πŸ”΄ High | Effort: S | Persona: All


Phase 6: Growth & Retention

US-GROWTH-01: Celebrate Milestones

As a solo founder (Sarah)
I want to be celebrated when I hit key milestones (first week, month 1, first revenue)
So that I feel motivated to keep shipping

Acceptance Criteria:

  • Given I complete my first loop (week 1), when I run loopkit loop, then I see an encouraging message: "First week complete! The hardest week is behind you."
  • Given I reach 4 consecutive weeks, when I run loopkit loop, then I see: "4-week streak β€” you're building a habit!"
  • Given I log my first revenue, when the milestone triggers, then I see: "First dollar! This is a huge milestone."
  • Given I'm authenticated, when a milestone triggers, then it's synced to Convex and I receive an email notification (if opted in)

Priority: 🟑 Medium | Effort: M | Persona: All


US-GROWTH-02: Friday Reminder

As a solo founder (Sarah)
I want to be reminded to ship every Friday at 4 PM
So that I don't forget to ship before the weekend

Acceptance Criteria:

  • Given I run loopkit init --cron, when the command completes, then a cron job is installed to run loopkit remind:friday at 4 PM every Friday
  • Given it's Friday at 4 PM and I haven't shipped, when the cron runs, then I see a terminal notification: "Haven't shipped yet this week. Time to ship?"
  • Given it's Friday at 4 PM and I have shipped, when the cron runs, then I see a terminal notification: "You shipped this week! Great job!"
  • Given the notification appears, when I see it, then I can respond with [s] to run loopkit ship immediately or dismiss

Priority: 🟑 Medium | Effort: M | Persona: Sarah, Jordan


US-GROWTH-03: Validate My Brief Before Building

As a first-time founder (Alex)
I want to run a devil's advocate validation on my brief
So that I catch potential weaknesses before I start building

Acceptance Criteria:

  • Given I run loopkit init my-saas --validate, when the init flow completes, then AI generates 3 challenging questions about my brief
  • Given the questions are displayed, when I read them, then I see an encouraging message: "These questions are designed to strengthen your thinking, not discourage you."
  • Given I want to iterate, when I see the prompt, then I can choose to run loopkit init --analyze my-saas to update my brief

Priority: 🟑 Medium | Effort: S | Persona: Alex, Sarah


US-GROWTH-04: Use Shell Aliases for Faster Commands

As an indie hacker (Marcus)
I want to install shell shortcuts for common commands
So that I can type less and ship faster

Acceptance Criteria:

  • Given I run loopkit init for the first time, when the flow completes, then I'm prompted: "Install shell aliases for faster commands? (Recommended)"
  • Given I select yes, when the installer runs, then it detects my shell (zsh/bash/fish) and appends aliases to my config file
  • Given the aliases are installed, when I restart my shell, then I can use: lk (init), lks (ship), lkl (loop), lkt (track)
  • Given I want to remove aliases later, when I run loopkit aliases --remove, then the aliases are removed from my shell config

Priority: 🟒 Low | Effort: S | Persona: Marcus


US-GROWTH-05: Run Loop Any Day Within 7-Day Window

As a solo founder (Sarah)
I want to run my loop on a weekday if I'm traveling on Sunday
So that I don't break my streak due to scheduling conflicts

Acceptance Criteria:

  • Given I run loopkit loop --async on Wednesday, when the command runs, then it skips the mid-week check-in prompt and proceeds with full synthesis
  • Given my last loop was 5 days ago, when I run with --async, then my streak is preserved (not broken)
  • Given my last loop was 8 days ago, when I run with --async, then I see a warning: "It's been 8 days since your last loop. Your streak may be affected."
  • Given I run --async, when the loop completes, then the log is saved normally and streak is calculated correctly

Priority: 🟑 Medium | Effort: S | Persona: Sarah, Jordan


US-GROWTH-06: Get Nudged When Almost Done

As an indie hacker (Marcus)
I want to be nudged when my shipping score is 50-70% with 2 tasks left
So that I push through to finish the week strong

Acceptance Criteria:

  • Given I run loopkit track and my score is 60% with 2 tasks open, when the board renders, then I see: "Almost there β€” 2 tasks left to hit 80%."
  • Given I see the nudge, when I read it, then I see suggested actions like marking tasks done or snoozing
  • Given my score is 40% or 80%, when I run loopkit track, then no nudge is shown (only triggers in 50-70% range)

Priority: 🟒 Low | Effort: S | Persona: Marcus


US-GROWTH-07: Share LoopKit with Friends for Credits

As a side project shipper (Jordan)
I want to get referral credits when I share LoopKit with friends
So that I can extend my subscription for free

Acceptance Criteria:

  • Given I have a 4-week streak, when I run loopkit loop, then I'm prompted: "Share LoopKit with a founder friend and get 1 month of Solo free?"
  • Given I select yes, when the system generates a code, then I see my referral link: "loopkit.dev/r/a3b7c9d2"
  • Given I share the link, when a friend signs up, then we both get 1 month of Solo tier credit
  • Given I've already seen the prompt, when I run loopkit loop again, then I'm not prompted again (flag prevents repeat)

Priority: 🟑 Medium | Effort: S | Persona: Jordan


US-GROWTH-08: Share Wins to Public Feed

As a solo founder (Sarah)
I want to post my weekly wins to a public feed
So that I build accountability and discover other founders

Acceptance Criteria:

  • Given I run loopkit celebrate --share, when the command completes, then my win is posted to the public feed at loopkit.dev/wins
  • Given I'm not authenticated, when I run with --share, then I see: "Not authenticated β€” win not posted. Run loopkit auth to enable sharing."
  • Given my win is posted, when I visit the feed, then I see my product name, week number, shipping score, streak, and tasks completed
  • Given the API call fails, when the error occurs, then I see a warning but the celebration still displays locally

Priority: 🟑 Medium | Effort: M | Persona: Sarah


US-GROWTH-09: Feel Supported After Breaking Streak

As an indie hacker (Marcus)
I want to receive encouraging support when I break my streak
So that I don't feel guilty about missing a week

Acceptance Criteria:

  • Given I had an 8-week streak and missed a week, when I run loopkit loop after the gap, then I see: "You had an 8-week streak before! Life happens β€” what matters is you're back."
  • Given I see the message, when I read it, then I feel encouraged to restart my streak
  • Given the streak breaks, when I run loop again, then my counter resets to 0 and starts counting from the new week

Priority: 🟒 Low | Effort: S | Persona: Marcus


Story β†’ Feature Mapping

Feature Stories Covered Primary Personas Priority
init US-INIT-01, 02, 03, 04, 05, 06 Alex, Sarah πŸ”΄
track US-TRACK-01, 02, 03, 04, 05, 06, 07 All πŸ”΄
ship US-SHIP-01, 02, 03, 04 Sarah, Marcus πŸ”΄
pulse US-PULSE-01, 02, 03, 04, 05, 06 Sarah, Alex πŸ”΄
loop US-LOOP-01, 02, 03, 04, 05 Jordan, Sarah πŸ”΄
auth US-AUTH-01 All πŸ”΄
Tier gating US-TIER-01 All 🟑
Growth US-GROWTH-01, 02, 03, 04, 05, 06, 07, 08, 09 All 🟑

Definition of Done (Per Story)

  • Story acceptance criteria are all met
  • Edge cases from SCENARIOS.md are handled
  • Ctrl+C exits gracefully at every prompt
  • AI failure has a graceful fallback
  • Free vs paid tier behavior is correct
  • pnpm --filter @loopkit/cli build β†’ 0 errors
  • Web changed? β†’ npx next build β†’ clean
  • Tests pass: pnpm --filter @loopkit/cli test + pnpm --filter @loopkit/web test + pnpm --filter @loopkit/shared test

Last updated: April 2026 Β· Phase 13 growth loops added