Before committing to a fix, ask for the whole option space — grounded in what actually exists in the code — so the choice you make is informed by alternatives you didn't know you had.
“Here's my rough problem: Acme users churn after onboarding. Search the codebase and brainstorm 10 places we could intervene, from cheapest to most ambitious. I'll tell you which ones resonate.”
I searched apps/web, services/, and packages/ for onboarding, invite, and first-session code paths. A pattern showed up: a lot of retention machinery already exists but is disconnected — the cheapest options below are mostly wiring, not building. Check the ones that resonate and copy the reply at the bottom.
Found in code — The zero-projects dashboard renders the illustration and the copy “No projects yet” — and nothing else. NewProjectButton exists two directories over but was never imported here; the only way forward is the tiny “+” in the top nav. Every churned user's last screen was probably this one.
Found in code — Someone built a complete seeded demo project — “Product teaser v3” with a 45s clip, four timestamped comments, and one resolved thread — behind the flag sample_project_v1. The flag is still false for everyone and the file hasn't been touched in 8 months. The feature is done; it was just never shipped.
Found in code — Invites go out as email only. TeamPanel queries team_members but ignores the invites table entirely — an inviter can't see that their teammate never accepted, and there's no resend. For a collaborative review tool, a solo user is a churn-in-waiting.
Found in code — The backend already records first_upload, first_comment, first_invite_accepted, and first_approval in user_milestones — but no client code reads the table. It exists purely for an analytics dashboard. All the ingredients for a “3 of 4 steps done” checklist are sitting there.
Found in code — Timestamped comments are Acme's core loop, but the affordance is hidden: clicking the timeline seeds the timestamp into the composer, and nothing teaches this. Timeline.tsx has a TODO: first-run hint? from the original author. Add a ghost pin on first play — “click anywhere to comment at this moment”.
Found in code — When transcode fails (unsupported codec, oversized ProRes, corrupt moov atom), the job moves to failed, logs to Sentry, and tells the user nothing — the project card just shows a spinner forever. There's a retry-with-fallback-preset code path that's only reachable from an internal admin script.
Found in code — Live presence is fully built — shared playhead, live cursors, “Maya is watching” badges — but it only lights up if two people happen to open the same review. Nothing engineers that coincidence. Add a “review together” scheduling nudge when a teammate accepts an invite, deep-linking both into the same session.
Found in code — Approval workflows (rough cut → client review → final sign-off) are fully configurable — and start completely blank. The definitions directory contains only __fixtures__ for tests. Judging by a comment in WorkflowEditor.tsx, power users copy a shared Notion doc to set theirs up. Ship 5 opinionated templates: agency delivery, YouTube pipeline, client sign-off, internal QA, localization pass.
Found in code — Today Acme's onboarding has a hard external dependency: you need a finished video before the product is useful. But services/ingest already accepts chunked webm uploads (built for the mobile app), so a MediaRecorder-based “record your screen, get feedback” flow needs no pipeline work — “just” the capture UI. Removes the biggest reason a trial goes idle: nothing to review yet.
Found in code — Guest share links exist but are deliberately crippled: tokens expire after 24h, guests can't comment, and there's a // TODO(sasha): revisit guest perms after launch from two years ago. The users who churn are often the ones whose clients wouldn't sign up. Make guests first-class — persistent portal, comment-with-name, no account — and every external review becomes a retention loop (and an acquisition one).