RestartCrew — Main Development Plan
Document Purpose
This document is the single source of truth for RestartCrew — combining product specification, technical decisions, design system, and execution plan.
- Product: RestartCrew
- Domain:
www.restartcrew.com
- Stack: Next.js + Supabase + GitHub
- Scope: v1 (Landing page + onboarding + custom forum)
- Out of scope: courses, payments, mentorship marketplace, advanced job board (deferred to v2)
0) Product North Star
Build the best online community for people affected by AI-driven job disruption.
The product should help people:
- feel seen
- feel less alone
- tell their story
- find profession-specific peers
- get practical advice
- regain hope
MVP1 Success Condition
A new visitor should be able to:
- Land on RestartCrew and feel emotionally understood
- Sign up in under 2 minutes
- Choose anonymous or public identity mode
- Get routed into relevant communities
- Read or create a post
- Receive meaningful engagement quickly
1) Scope Hierarchy
- Emotional landing page
- Responsive design system (desktop, iPad, mobile)
- Onboarding flow
- Anonymous or public profile mode
- Profession and skills-based identity
- Custom forum
- Profession-specific subforums
- Moderation/reporting basics
- Notifications
- Basic search
- Admin/mod tools
- Analytics baseline
MVP2: Growth Layer (Deferred)
- Courses
- Structured solution guides
- Expert AMAs
- Mentorship
- AI-powered learning recommendations
2) Product Principles
- Emotional design first: calm, warm, hopeful, credible
- Mobile-first with intentional tablet/desktop UX
- Safety before virality
- Custom forum, not off-the-shelf forum software
3) Technical Architecture
Stack
- Frontend: Next.js App Router + TypeScript + Tailwind CSS
- Backend: Supabase (Postgres, Auth, Storage, Edge Functions, Realtime)
- Version control: GitHub
- Hosting: GitHub Pages (static export via GitHub Actions)
- CI/CD: GitHub Actions
High-Level Flow
User
↓
Next.js frontend
↓
Supabase Auth
↓
Supabase Postgres + RLS
↓
Supabase Realtime / Storage / Edge Functions
Public Routes
/
/about
/how-it-works
/community-guidelines
/privacy
/terms
/stats
/join
Authenticated Routes
/app
/app/feed
/app/welcome
/app/explore
/app/category/[slug]
/app/profession/[slug]
/app/thread/[id]
/app/new
/app/profile/[handle]
/app/settings
/app/notifications
Admin / Moderation Routes
/app/mod/queue
/app/mod/reports
/app/admin/categories
/app/admin/professions
/app/admin/content
/app/admin/metrics
5) Forum Structure (MVP1)
Core Categories
- Welcome & Introductions
- Layoff Stories
- Emotional Support
- Human Value & Identity
- Upskilling & Learning
- Career Transition
- AI Policy & Society
- Reinvention Stories
Profession Subforums
- Software Engineers
- Designers
- Writers & Content
- Marketing
- Customer Support
- Finance
- Teachers & Education
- Healthcare
- Legal
- Operations
- Founders & Freelancers
- Other / General Professionals
Rule: profession communities are filters within one unified forum model.
6) Landing Page Plan
Purpose Sequence
- Emotional validation
- Problem normalization with credible stats
- Explain RestartCrew value
- Move user into onboarding
Required Sections
- Hero
- Statistics band (editable content model)
- Story/testimonial preview
- “What RestartCrew offers”
- Hope section
- Final CTA
Design Notes
- Quiet gradients
- High-contrast typography
- Generous spacing
- One primary above-the-fold action
- Responsive stacking (mobile/iPad)
7) Responsive Design System
Breakpoints
- Mobile: 360–480px
- Large mobile: 481–767px
- iPad portrait/small tablet: 768–1023px
- Tablet landscape/small laptop: 1024–1279px
- Desktop: 1280px+
Behavior by Device
- Mobile: compact nav, single-column thread list, modal composer
- iPad: two-panel friendly layouts where useful
- Desktop: left nav + content + optional right rail
Accessibility Baseline
- Unique page title + clear H1
- Full keyboard navigation
- Respect
prefers-reduced-motion
- WCAG 2.2 contrast/interactions
- Practical touch targets (44x44+)
- No hover-only critical actions
8) Identity Model
Identity Modes
- Anonymous mode
- Public mode
MVP1 Recommendation
- Launch with email/OAuth sign-up + profile-level anonymous posting
- Optionally evaluate true anonymous auth in MVP1.5
Core Profile Fields
Required: id, handle, display_name, anonymity_mode, profession_id, status_type, created_at
Optional: bio, country, affected_by_ai_reason, current_goal, avatar_url
Next-level profile fields:
ai_impact_story — Structured narrative: what happened, how it felt, what they’re doing about it. Prompted during onboarding, editable on profile. This is the emotional core of the profile.
personal_motto — Short statement (max 200 chars) about their relationship with AI and work.
status_evolution — JSONB history of status changes with timestamps. Shows the journey.
helpfulness_count — Cached count of times their replies have been marked “helpful”. Feeds community badges.
community_badges — Auto-assigned based on behavior: “Early member”, “Storyteller”, “Support champion”, “Guide”.
mentor_available — Boolean toggle: “Open to helping others in my profession.”
Skills model (three-category portfolio):
profile_skills with skill_category: 'have' (current skills), 'building' (actively learning), 'want' (aspirational)
- This creates a growth-oriented skills display that shows trajectory, not just current state
Suggested status_type values (evolving journey badges):
just_arrived — “Just arrived” — new to the community
lost_job — Lost job due to AI
worried — Worried about AI impact
work_changed — Work has changed because of AI
finding_path — “Finding my path” — actively exploring options
rebuilding — “Rebuilding” — in transition
exploring — Exploring new directions
thriving — “Thriving again” — found a new direction
ally — Here to support others
8.1) Next-Level Profile Vision
Principle: Profiles are not just info pages — they are journey documents. When someone visits a RestartCrew profile, they should see a person’s story of navigating AI-driven change.
Profile Sections (Launch — Tier 1)
- Identity & Context — Name/anonymous, profession, status badge, country, bio, avatar
- AI Impact Story — Structured narrative with prompts (what happened, how it felt, what I’m doing)
- Skills Portfolio — Three categories: “have”, “building”, “want” — showing growth trajectory
- Community Contributions — Thread count, helpfulness score, community role badges
Profile Sections (Post-Launch — Tier 2)
- Journey Timeline — Visual timeline of self-reported milestones
- Personal Goals — 1–3 current goals with progress tracking
- Wins & Celebrations — Personal milestones to celebrate with the community
- Connection & Availability — “Open to connect”, “Open to helping”, shared experience matching
Study how Teamblind displays professional identity (company verification badge, role). RestartCrew’s equivalent:
- Profession badge instead of company badge
- Status badge showing journey phase
- Community badges showing contribution type
- Skills portfolio showing growth
9) Smart Onboarding Flow
- Validation prompt (“How has AI affected your work?”) — selects status_type
- Profession selection
- Identity mode selection (anonymous / public) with clear explanation
- Display name / handle creation
- Skills quick-start: “What are your top skills?” + “What do you want to learn?”
- AI Impact Story prompt (optional — can complete later): “Tell your story”
- First-action prompt (read / write / browse)
Tone: “Let’s help you find your people.”
10) Database & RLS Baseline
MVP1 tables:
profiles, professions, skills, profile_skills
categories, threads, posts
helpful_marks — tracks which users marked which posts as helpful
thread_tags, thread_tag_links
follows, reports, notifications, moderation_actions
RLS principles:
- Enable RLS on all exposed tables
- Least privilege by default
- Distinct user/mod/admin access boundaries
- Hide flagged content from public reads
11) Search, Discovery, Notifications
Search/Discovery (MVP1)
- Category filter
- Profession filter
- Thread keyword search
- Sort by latest / most active / pinned
- Recent threads
- Active in your profession
- Hopeful/reinvention stories
- Unanswered posts — “This person’s story deserves a response”
- New members — “Welcome them”
- Similar to your experience
Notification events (MVP1)
- Reply to your thread
- Mention
- Report status update
- Welcome/onboarding prompts
12) Moderation & Trust/Safety
- Report thread/post/profile
- Hide content
- Lock thread
- Pin thread
- Mute user
- Moderator queue
UX Requirements
Each moderation action includes:
- reason
- notes
- audit log entry
- No mocking job loss
- No doxxing
- No harassment
- No recruiting spam
- No partisan flamebait
- No nihilism spam about human worth
- Critique systems, not people
13) Metrics & Early-Stage Strategy
Internal Metrics (tracked from day one, admin-only)
- Landing → sign-up conversion
- Onboarding completion
- % anonymous mode selection
- % reaching first category
- First-post rate
- First reply received rate
- Time to first reply
- D1/D7 retention
- Category/profession engagement
North-star operational metric:
% of new users receiving a meaningful reply within 24 hours
Early-Stage UI Metrics (what users see on posts/threads)
Problem: Metrics like “X views” are counterproductive when the community is small. “2 views” signals emptiness.
Use these at launch (work at any scale):
- Reply count (“3 replies” or “Be the first to reply”)
- Time since activity (“2h ago”, “Yesterday”)
- Unique participants (“3 in conversation” — show when ≥ 2)
- Category/profession chips (visual context without numbers)
- Author status badge (“Just arrived”, “Finding my path”)
- “Marked helpful” (show when ≥ 1)
Avoid until scale: view counts, trending/hot indicators, upvote/downvote counts, “X people reading”, follower counts
Scale thresholds for switching: Enable richer metrics when community reaches ~200+ active users. Build the data collection from day one, expose in UI when numbers are meaningful.
14) Execution Phases
Detailed phase acceptance criteria and checklists are preserved from the approved plan and should be used as gates before phase completion.
15) Device-Specific QA Checklist
Mobile
iPad
Desktop
16) Launch Checklist
17) Explicitly Deferred to MVP2
- Full courses system
- Structured lesson player
- Premium memberships
- Stripe billing
- Editorial solution library
- Mentorship marketplace
- Advanced AI moderation
- Job board
- Advanced recommendation engine
When implementing this plan, update docs every step:
docs/DEVLOG.md
For each step include:
- datetime
- task completed
- files changed
- schema changes
- blockers
- next step
docs/DECISIONS.md
For each non-trivial decision include:
- context
- options considered
- chosen option
- reason
docs/ROADMAP.md
Continuously maintain:
- completed
- in progress
- next
- deferred to MVP2
19) Final Product Recommendation
The goal is not merely to build a forum. The goal is to build a humane, privacy-aware, emotionally supportive community product where the forum is the first expression of belonging.
MVP1 should prioritize:
- emotional landing page
- frictionless onboarding
- anonymity/public identity choice
- profession-based routing
- strong responsive UX
- thoughtful moderation
20) Design Deep Dive (Sleek, Interactive, Professional)
This section turns the high-level design direction into implementation-ready UI standards.
Primary design reference: Teamblind.com — study their forum UX patterns closely during the design phase. Much of the same design approach can be adopted for RestartCrew’s thread cards, thread detail, category navigation, and anonymous identity display. Adapt their corporate tone to RestartCrew’s warmer, more supportive emotional feel.
20.1 Visual System (Foundations)
Color system
Use semantic tokens (not raw colors in components), with dark mode support planned but optional for MVP1.
bg.canvas — base app background (soft neutral)
bg.surface — cards and elevated panels
bg.surfaceMuted — secondary panels/bands
text.primary — headlines/body
text.secondary — supporting text
text.inverse — text on dark or accent surfaces
accent.primary — primary CTA and key highlights
accent.secondary — secondary accents/chips
state.success|warning|error|info — statuses and moderation labels
border.subtle|strong — dividers and boundaries
Design constraints:
- Maintain WCAG 2.2 AA contrast minimums for body text and controls
- Reserve bright saturation for action emphasis only
- Keep emotional tone warm, not neon or gamified
Typography system
- Display/Hero: strong, clean sans-serif with generous line-height
- Heading scale:
h1 to h4 with clear hierarchy
- Body scale:
md default with sm captions and lg for intro copy
- Monospace only for technical/admin diagnostics
Type behavior:
- Max line length in reading surfaces: ~65–80 chars desktop
- Larger line-height on mobile thread bodies for reduced fatigue
- Avoid dense all-caps usage except micro labels/badges
Spacing and radius
- Spacing scale: 4, 8, 12, 16, 24, 32, 48, 64
- Radius scale: 8 (small), 12 (default card), 16 (feature card), 9999 (chips/pills)
- Keep generous vertical rhythm on landing and reading views
Elevation and borders
- Prefer subtle border + low blur shadow combinations
- Avoid heavy “floating app” shadows
- Elevation should communicate hierarchy, not decoration
20.2 Motion & Interaction System
Motion should feel calm and intentional.
- Micro-interactions: 120–180ms (buttons, toggles, hover/focus)
- Surface transitions: 180–240ms (cards, drawers, overlays)
- Route/skeleton transitions: 220–320ms with reduced-motion fallback
Rules:
- Use easing curves that decelerate naturally
- Never rely on animation for critical comprehension
- Respect
prefers-reduced-motion by shortening/removing non-essential movement
20.3 Component-Level UX Specs
Primary navigation
- Mobile: bottom nav with 4–5 core actions (Feed, Explore, New Post, Notifications, Profile)
- Tablet/Desktop: left rail nav with clear active state and collapsed option
- Keep labels visible for trust and clarity
Thread cards
- Must show: title, excerpt, category/profession chip, reply count, time since activity, author status badge
- Study Teamblind’s thread card density and layout
- Include clear “anonymous” identity badge when applicable
- Zero-state: “Be the first to reply” instead of “0 replies”
- Optional metadata on small screens should collapse progressively
- Do NOT show at launch: view count, upvote count, trending indicators (see Section 13 early-stage strategy)
- Show “Marked helpful” indicator when ≥ 1
Composer (new thread/reply)
- Mobile-first sheet/modal with sticky submit bar
- Inline validation for title/body length and required fields
- Explicit anonymity toggle with explanatory helper text
- Draft-preservation behavior (local/session) for accidental exits
Notifications center
- Group by date/time bands (Today, Earlier this week)
- Unread visual indicator + bulk mark-as-read
- Tap targets must remain comfortable on iPad portrait
Moderation controls
- Safe defaults: destructive actions require confirmation
- Reason and notes required before hide/lock actions complete
- Mod actions visually distinct from normal user controls
20.4 Page Blueprints (MVP1)
Landing page blueprint
- Hero with emotional validation and single dominant CTA
- Credible stats band with source-ready content slots
- Story preview strip (loss, support, reinvention)
- Value proposition grid (privacy, profession peers, practical support)
- Hope statement section
- Final CTA and lightweight footer/legal links
Feed page blueprint
- Personalized modules in order:
- Welcome nudge
- Active in your profession
- Support discussions
- Reinvention stories
- Recent across community
Thread detail blueprint
- Header (title, category, safety context)
- Original post card
- Replies list with chronology and threading clarity
- Sticky reply affordance on mobile
- Report and moderation affordances in overflow menus
20.5 Interaction Quality Bar (What “10/10” Means)
Every user-facing flow should satisfy:
- Clarity: user always knows what to do next
- Feedback: every action has immediate visible response
- Forgiveness: easy recovery from mistakes (undo/confirm where appropriate)
- Speed: meaningful content appears quickly with skeleton states
- Trust: language, moderation affordances, and identity controls reduce anxiety
20.6 Accessibility & Inclusive UX Enhancements
In addition to baseline accessibility requirements:
- Use consistent focus rings with strong contrast
- Ensure all interactive controls have explicit labels/ARIA names
- Keep form errors adjacent to fields with clear remediation text
- Use inclusive, non-judgmental language in validation and empty states
- Avoid color-only status communication; pair with icon/text
20.7 Implementation Notes for Engineering
Suggested UI token files
src/styles/tokens.css (or equivalent)
src/styles/theme.css for semantic theme mapping
src/components/ui/* for reusable primitives (Button, Card, Chip, Input, Modal, Banner)
Definition of done for design-heavy tickets
- Responsive behavior verified at all MVP1 breakpoints
- Keyboard and screen-reader basics pass on core routes
- Loading, empty, and error states implemented
- Visual regression snapshots captured for critical surfaces
20.8 Design QA Scorecard (Per Screen)
Score each screen 0–2 (max 10):
- Visual polish and hierarchy
- Responsiveness and layout integrity
- Interaction feedback quality
- Accessibility compliance
- Emotional tone alignment
Release target: no core MVP1 screen below 8/10.
21) New User Experience: First Impressions & Onboarding
This section captures ideation and design direction for making the first-time user experience emotionally resonant, practically useful, and delightfully memorable. These ideas inform implementation across multiple milestones.
21.1 Top 3 Priorities for New User Experience
Priority 1: Personalised Onboarding Quiz → Smart Content Routing
- Step 1 uses natural language situation variants (e.g. “Just got notified”, “Worried but still employed”, “Here to help others”) that map to
status_type and content routing
- Progress bar uses warm copy: “Step 2 of 5 — you’re on your way 🚀” — never just “50%”
- After onboarding: show 3 cards as “Your starter pack” — 1 relevant thread, 1 subforum, 1 resource — auto-filtered by profession + status
- “Skip for now, we’ll remember” — allow skipping hard steps (AI Impact Story) without blocking, remind after 48h via notification
- Animated transition into forum after last step: small “you’re in!” animation with message “Your crew is waiting 👋”
Priority 2: “You Are Not Alone” Banner + Intro Thread Prompt
- Dynamic live counter: “14,382 people like you have found their way forward here” — sourced from live
profiles table count, not hardcoded
- Welcome banner with rotating quotes from real (anonymised) community members, cycling every 8 seconds
- Low-friction intro thread card in feed: “Want to say hi? 👋 Most people start here” → links to Welcome & Introductions category
- Show under banner: “37 Software Engineers in the community right now” — based on user’s profession from onboarding
- Warm, calm full-width banner — NOT an alert box or popup. Feels like a message from a human, not a system notification
Priority 3: Industry-Specific “Restart Guide”
- Structured as 3 sections: “What’s happening in your industry → What others here have done → Where you can start now”
- Visual “AI Impact Score” per industry with hopeful framing: “High AI exposure — but 68% of our Marketing crew have found new paths”
- “Popular in your industry right now” — 3 pinned threads auto-filtered by profession from threads table
- External resource link per industry (e.g. Teachers: retraining resources; Software Engineers: AI-adjacent roles) — editor-curated, maintained via admin
- “Restart Guide” card is prominent days 1–3, shrinks to small sidebar link after week 1
Humor & Lightness
- Empty states use warm humor: “Quiet here. You could be the first to break the ice 🧊”
- Creative loading messages: “Finding your crew…” / “Checking who’s online…” / “Connecting you to the future…”
- Micro-encouragement in composer when user nears the Post button: “This could help someone. Send it 💪”
- Celebration language at milestones: First post: “🎉 First words are the hardest. You did it.” First reply received: “Someone replied! You are not alone.”
Positivity Built Into UI
- “Restart Level” system with journey-appropriate titles:
Just Arrived → Finding Footing → Gaining Momentum → Comeback Kid → Crew Leader — maps naturally onto existing status_type field
- “Bright Spots” widget in right sidebar on desktop — auto-curated from threads in Reinvention Stories category or posts with “Thriving” status authors
- Weekly automated “Friday Win” thread — Supabase Edge Function cron creates a new thread every Friday: “What’s your smallest (or biggest) win this week?” — low-barrier, inclusive
- “Find Your Crew” activity indicator on user cards: “Active today”, “Replied 2h ago”, “Helping people in your industry” — sourced live from profiles and posts data
21.3 Surprise & Delight
Micro-Celebrations
- Confetti animation on first post (respects
prefers-reduced-motion) — small, tasteful burst with message “🎉 First words are the hardest. You did it.”
- Achievement toast when user receives their first “Helpful” mark: “Someone found your words helpful. That matters.”
- Subtle profile glow effect when user updates their status to “Thriving again” — celebrates the journey
Buddy System
- Auto-match new members with an experienced community member from the same profession
- “Your Welcome Buddy” card on dashboard for first week: shows matched member’s anonymised profile, recent posts, and a “Say hi” button
- Buddy receives a notification: “A new [profession] just joined. Want to welcome them?”
- Opt-in only for buddies — toggle in settings under “Open to helping others”
Discovery Easter Eggs
- Hidden positive message when user scrolls to the bottom of a long thread: “You read the whole thing. That’s dedication 💪”
- Seasonal theme variations for awareness events (e.g., Mental Health Awareness Month, World Skills Day) — subtle color accent changes, not full redesigns
21.4 Implementation Notes
These ideas map to milestones as follows:
| Idea |
Milestone |
Notes |
| Onboarding quiz with warm copy |
5 (Auth & Onboarding) |
Enhance task 5.3 |
| “Your starter pack” cards |
5 (Auth & Onboarding) |
New post-onboarding screen |
| Welcome banner + live counter |
5 (Auth & Onboarding) |
Task 5.5 |
| Intro thread prompt |
5 (Auth & Onboarding) |
Task 5.5 |
| Industry Restart Guide |
5 (Auth & Onboarding) |
Task 5.6 |
| Warm empty states |
2 (Design System) |
EmptyState component variants |
| Creative loading messages |
2 (Design System) |
Skeleton/loading component |
| Composer encouragement |
6 (Forum Core) |
Composer micro-copy |
| Restart Level titles |
7 (Profiles) |
Maps to status_type |
| Bright Spots widget |
8 (Search & Discovery) |
Discovery widget |
| Friday Win cron thread |
9 (Notifications) |
Supabase Edge Function |
| Helpful mark celebration |
6 (Forum Core) |
Task 6.9 enhancement |
| Buddy system |
7 (Profiles) |
Post-launch enhancement |
| Seasonal themes |
2 (Design System) |
Post-launch enhancement |
| Confetti on first post |
6 (Forum Core) |
Post-submit celebration |
| Discovery Easter eggs |
6 (Forum Core) |
Post-launch enhancement |
Milestone Overview
This table shows every milestone and task. Check items off as they are completed.
| # |
Milestone |
Task |
Status |
| 1 |
Technical Foundation |
|
✅ COMPLETE |
| |
|
1.1 Initialize Next.js project with TypeScript strict mode |
✅ |
| |
|
1.2 Install and configure Tailwind CSS |
✅ |
| |
|
1.3 Configure ESLint + Prettier |
✅ |
| |
|
1.4 Configure Vitest + testing infrastructure |
✅ |
| |
|
1.5 Set up GitHub Actions CI pipeline |
✅ |
| |
|
1.6 Configure build and deployment basics for GitHub Pages |
✅ |
| |
|
1.7 Verify Supabase local development setup |
✅ |
| 2 |
Design System & UI Components |
|
✅ COMPLETE |
| |
|
2.1 Define concrete design tokens (colors, typography, spacing) |
✅ |
| |
|
2.2 Build core UI primitives (Button, Card, Input, etc.) |
✅ |
| |
|
2.3 Build layout components (AppLayout, PublicLayout, nav) |
✅ |
| |
|
2.4 Create component showcase / style guide page |
✅ |
| 3 |
Database & Backend |
|
✅ COMPLETE |
| |
|
3.1 Create core database migrations (all tables) |
✅ |
| |
|
3.2 Implement RLS policies for all tables |
✅ |
| |
|
3.3 Create seed data (categories, professions, welcome content) |
✅ |
| |
|
3.4 Configure Supabase Auth + profile creation trigger |
✅ |
| |
|
3.5 Build TypeScript service layer |
✅ |
| |
|
3.6 Generate and integrate database types |
✅ |
| 4 |
Landing Page & Public Pages |
|
✅ Complete |
| |
|
4.1 Write all landing page content (copy, stats, stories) |
✅ |
| |
|
4.2 Build landing page (hero, stats, stories, CTA) |
✅ |
| |
|
4.3 Build community guidelines page |
✅ |
| |
|
4.4 Build about / how-it-works page |
✅ |
| |
|
4.5 Build privacy policy and terms pages |
✅ |
| 5 |
Auth & Onboarding |
|
✅ Complete (6/6) |
| |
|
5.1 Build sign-up page (email + Google OAuth) |
✅ |
| |
|
5.2 Build sign-in page |
✅ |
| |
|
5.3 Build onboarding flow (profession, identity, status) |
✅ |
| |
|
5.4 Implement auth guards and route protection |
✅ |
| |
|
5.5 Build welcome banner and intro prompt |
✅ |
| |
|
5.6 Build industry restart guide |
✅ |
| 6 |
Forum Core |
|
✅ Complete |
| |
|
6.1 Build category list / forum home page |
✅ |
| |
|
6.2 Build thread list view (early-stage metrics, no view counts) |
✅ |
| |
|
6.3 Build thread detail view with replies and helpful marking |
✅ |
| |
|
6.4 Build thread composer (new thread creation) |
✅ |
| |
|
6.5 Build reply composer |
✅ |
| |
|
6.6 Implement profession-based filtering |
✅ |
| |
|
6.7 Implement thread sorting (latest, most active, pinned) |
✅ |
| |
|
6.8 Implement pagination / infinite scroll |
✅ |
| |
|
6.9 Implement “Helpful” marking on replies |
✅ |
| 7 |
Profiles & User Experience |
|
☐ Not started |
| |
|
7.1 Build public profile page (Tier 1: identity, AI story, skills, contributions) |
☐ |
| |
|
7.2 Build profile edit page (with AI Impact Story editor) |
☐ |
| |
|
7.3 Build user settings page |
☐ |
| |
|
7.4 Implement anonymous identity display logic |
☐ |
| |
|
7.5 Implement community badges system |
☐ |
| |
|
7.6 Implement status evolution tracking |
☐ |
| 8 |
Search & Discovery |
|
✅ Complete |
| |
|
8.1 Implement thread keyword search |
✅ |
| |
|
8.2 Build discovery widgets (recent, profession-active, unanswered) |
✅ |
| |
|
8.3 Build explore / browse page |
✅ |
| 9 |
Notifications |
|
☐ Not started |
| |
|
9.1 Create notifications table and service |
☐ |
| |
|
9.2 Build notifications center UI |
☐ |
| |
|
9.3 Implement reply and mention notification triggers |
☐ |
| |
|
9.4 Add unread badge to navigation |
☐ |
| 10 |
Moderation & Trust/Safety |
|
☐ Not started |
| |
|
10.1 Build report button and report modal |
☐ |
| |
|
10.2 Build moderator queue page |
☐ |
| |
|
10.3 Implement hide/lock/pin thread actions |
☐ |
| |
|
10.4 Implement mute user action |
☐ |
| |
|
10.5 Build moderation audit log |
☐ |
| |
|
10.6 Implement community guardrail enforcement |
☐ |
| 11 |
Admin Tools & Analytics |
|
☐ Not started |
| |
|
11.1 Build admin dashboard (metrics overview) |
☐ |
| |
|
11.2 Build admin category/profession management |
☐ |
| |
|
11.3 Build admin content management |
☐ |
| |
|
11.4 Integrate analytics baseline |
☐ |
| 12 |
QA, Performance & Launch Prep |
|
☐ Not started |
| |
|
12.1 Full responsive QA (mobile, tablet, desktop) |
☐ |
| |
|
12.2 Accessibility audit and fixes (WCAG 2.2 AA) |
☐ |
| |
|
12.3 Performance optimization (Core Web Vitals) |
☐ |
| |
|
12.4 Security audit (RLS, auth, input validation) |
☐ |
| |
|
12.5 E2E test suite with Playwright |
☐ |
| |
|
12.6 Seed production data |
☐ |
| 13 |
Production Deployment & Launch |
|
☐ Not started |
| |
|
13.1 Configure GitHub Pages deployment |
☐ |
| |
|
13.2 Configure Supabase environment for production |
☐ |
| |
|
13.3 Configure custom domain and DNS |
☐ |
| |
|
13.4 Set up GitHub Actions deploy pipeline |
☐ |
| |
|
13.5 Production smoke test and launch |
☐ |
Part 1 — Resolved Technical Decisions
All blocking decisions are resolved. No open questions remain.
1.1 Frontend Framework: Next.js App Router
Decision: Next.js 14+ with App Router, TypeScript strict mode, React Server Components where beneficial.
Rationale:
- Server-side rendering gives SEO benefits for landing page and public content
- App Router provides modern React patterns (server components, streaming, parallel routes)
- Strong ecosystem, excellent TypeScript support
- Matches the product plan in
docs/MAIN_DEVPLAN_RESTARTCREW.md
Environment variable pattern: process.env.NEXT_PUBLIC_* for client-side variables.
1.2 Hosting: GitHub Pages (Static Export)
Decision: Next.js static export deployed to GitHub Pages via GitHub Actions. No VPS. No Vercel. No Netlify.
Architecture:
- Build output: Next.js static export (
output: 'export') → HTML/CSS/JS files
- Hosting: GitHub Pages (free, built-in HTTPS, custom domain support)
- CI/CD: GitHub Actions builds static site and deploys to GitHub Pages on merge to
main
- Backend: Existing Supabase Nano instance (database, auth, edge functions) — no additional setup needed
Rationale:
- Zero cost — GitHub Pages is free for public repositories
- Zero infrastructure management — no servers, no containers, no reverse proxies
- Automatic HTTPS via GitHub Pages
- Direct integration with GitHub repository — no external services required
- Supabase Nano handles all backend needs (database, auth, storage)
- Simple deployment: push to
main → GitHub Actions builds → GitHub Pages serves
Production topology:
GitHub Actions (CI/CD)
↓ builds static site (next build + next export)
GitHub Pages
└── restartcrew.com (custom domain, automatic HTTPS)
└── Static HTML/CSS/JS (Next.js export)
Supabase Nano (existing)
├── PostgreSQL database
├── Auth service
├── Edge Functions
└── Storage
1.3 CSS Framework: Tailwind CSS
Decision: Tailwind CSS v4 with custom theme configuration matching the project’s design tokens.
Rationale:
- Matches “utility-first styling” in the product plan
- First-class Next.js support
- Excellent responsive design utilities
- Strong community, widely understood by AI agents and developers
1.4 Test Framework: Vitest + Playwright
Decision:
- Unit/integration tests: Vitest (fast, TypeScript-native, jest-compatible API)
- Component tests: Vitest + React Testing Library
- E2E tests: Playwright (cross-browser, reliable, great for auth flows)
1.5 Auth Providers: Email + Google OAuth
Decision: Supabase Auth with email/password sign-up AND Google OAuth.
Rationale:
- Email/password is essential — not all users have Google accounts
- Google OAuth covers the widest user base and is most trusted
- GitHub OAuth can be added later if the developer audience grows
- Supabase Auth handles all token management, refresh, and session persistence
1.6 CI/CD: GitHub Actions
Decision: GitHub Actions for all CI/CD:
- On every push/PR: lint → type-check → test → build
- On merge to
main: build static export → deploy to GitHub Pages
1.7 Content Strategy
Decision: All user-facing text is stored in structured content files (src/content/*.ts), not hardcoded in components. The AI agent drafts professional content; the project owner reviews and adjusts.
- Landing page copy: Agent drafts warm, credible, emotionally resonant text
- Statistics: Sourced from publicly available AI workforce impact research (McKinsey, WEF, IMF)
- Story previews: Composite/fictional scenarios clearly framed as illustrative
- Community guidelines: Drafted from the guardrails in the product plan
- Legal pages: Professional templates adapted for the product
1.8 Admin/Moderator Roles
Decision: For initial launch, admin/moderator roles are assigned manually via a database column on the profiles table (role: 'user' | 'moderator' | 'admin'). An admin invite system is a post-launch enhancement.
1.9 Design Reference: Teamblind.com
Decision: Use Teamblind.com as the primary design reference for forum UX patterns. Much of the same design approach can be adopted and adapted for our niche.
Specific patterns to adopt from Teamblind:
- Anonymous posting flow: How anonymous identity is displayed in thread cards and posts. The balance between anonymity and enough context (profession badge, company type) to make posts credible.
- Thread card layout: Compact, scannable thread list with clear hierarchy — title, excerpt, metadata row. High density without feeling cramped.
- Thread detail view: Clean OP + reply chain. Reply form always accessible. Subtle threading indicators.
- Category/topic navigation: Left rail or top-level navigation for categories. Clear active state. Easy switching between communities.
- Company/profession verification: Teamblind verifies company email. RestartCrew’s equivalent is profession-based identity — study how Teamblind makes verified context visible without clutter.
- Mobile UX: How Teamblind handles the transition from desktop thread density to mobile reading. Bottom nav patterns. Composer UX on mobile.
- Social proof indicators: How Teamblind shows engagement on threads (comments count, recency) — these patterns work regardless of community size.
How RestartCrew adapts and differs:
- Warmer emotional tone: Teamblind is corporate/utilitarian. RestartCrew uses warm neutrals, generous spacing, and supportive language. The design should feel like a safe, professional support space — not a corporate gossip board.
- Focused niche: AI-affected workers specifically, not general professional commentary. This shapes category structure, discovery, and content prompts.
- Hope and support emphasis: Design should surface reinvention stories, helpful replies, and community warmth — not just hot topics.
- Onboarding flow: Teamblind has minimal onboarding. RestartCrew has an intentional journey through status, profession, identity mode, and interests.
- Community safety: Stronger guardrails against nihilism, mockery, and harassment. Moderation affordances are more visible.
- Identity evolution: Teamblind profiles are static. RestartCrew profiles show growth and journey (see Section 1.10).
1.10 Early-Stage Metrics Strategy
Problem: Metrics like “X views” or “X people saw this” are counterproductive when the community is small. Showing “2 views” or “0 reactions” signals emptiness and discourages engagement.
Decision: Design all post/thread metadata for early-stage viability. Every metric shown must feel meaningful even with single-digit numbers.
Metrics to USE (work at any scale):
| Metric |
Why it works early |
Display format |
| Reply count |
Even 1 reply is a conversation |
“3 replies” or “Be the first to reply” |
| Time since activity |
Always meaningful |
“2h ago”, “Yesterday” |
| Unique participants |
2-3 people talking is meaningful |
“3 in conversation” (only show when ≥ 2) |
| Category/profession chips |
Visual context without numbers |
Colored badge |
| Author status badge |
Context without scale |
“Just arrived”, “Finding my path” |
| Pinned/Featured label |
Curated quality signal |
Badge or subtle highlight |
| “Helpful” marks |
Peer-validated value |
“Marked helpful by 2 people” (only show when ≥ 1) |
Metrics to AVOID until sufficient scale:
| Metric |
Why it fails early |
When to add |
| View count |
“2 views” looks dead |
After ~500 active users |
| Trending/hot indicators |
No trending with 10 users |
After ~200 posts/day |
| Upvote/downvote counts |
Low counts feel discouraging |
After ~100 active users |
| “X people are reading this” |
“1 person reading” is sad |
After real-time traffic exists |
| Follower counts on profiles |
“0 followers” is demotivating |
After community has network effects |
Early-stage engagement patterns instead:
- “Be the first to reply” — Turns zero replies into a call-to-action
- “This person’s story deserves a response” — For unanswered support threads (after 24h)
- “New member — welcome them” — Nudge for introduction posts
- “Similar to your experience” — Personalized relevance without needing scale
- “Marked helpful” — Quality signal that works with even 1 mark
- Activity indicator dots — Warm (recent activity) vs cool (older) — avoids exact numbers
Implementation: Thread cards and post metadata must use the “early-stage” metric set. A feature flag or config threshold can switch to scale-appropriate metrics (view counts, trending) when the community reaches sufficient size. Build the data collection (view tracking, etc.) from day one, but only expose these numbers in the UI when they become meaningful.
1.11 Next-Level User Profiles
Decision: User profiles in RestartCrew are not just information pages — they are journey documents that tell the story of someone navigating AI-driven career change. This is the core differentiator from generic forums.
Profile vision: When someone visits a RestartCrew profile, they should see a person’s professional story — where they were, how AI affected them, what they’re doing about it, and what they’ve learned. The profile should inspire, build credibility, and create connection.
Profile Sections (Tier 1 — Launch)
1. Identity & Context
- Display name or “Anonymous” (with profession badge)
- Profession and industry
- Status badge: “Just arrived”, “Finding my path”, “Rebuilding”, “Thriving again” (evolves based on self-reported status)
- Country/region (optional)
- Join date
- Bio (short, free-text)
- Avatar or anonymous placeholder
2. AI Impact Story (optional, structured)
- “How has AI affected your work?” — Structured narrative with prompts:
- What happened (role changed, laid off, industry shifted)
- How it felt (emotional validation)
- What I’m doing about it (action-oriented)
- This is captured during onboarding but editable and expandable on the profile
- Displayed as a clean, readable story block — not a form dump
3. Skills Portfolio (growth-oriented)
- Three categories of skills, showing trajectory:
- Skills I have — Current professional skills
- Skills I’m building — What they’re actively learning
- Skills I want to learn — Aspirational / next moves
- Visual display: chips/tags organized by category with subtle color coding
- This signals growth mindset and creates connection points
4. Community Contributions
- Thread count and recent threads
- “Helpful” count — how many times their replies were marked helpful by thread authors
- Community role badges (auto-assigned, not self-selected):
- “Early member” — joined during launch period
- “Storyteller” — shared their AI impact story
- “Support champion” — high helpfulness score
- “Guide” — consistently helpful in specific profession/category
Profile Sections (Tier 2 — Post-Launch Enhancement)
5. Journey Timeline
- Visual timeline showing self-reported milestones:
- “AI impacted my role” (auto-set from onboarding date)
- “Started learning [skill]” (added manually)
- “Completed [course/project]” (added manually)
- “Found a new direction” (self-reported milestone)
- “Got my first opportunity” (celebration moment)
- Clean, vertical timeline display with dates and short descriptions
- Inspired by LinkedIn career timelines but focused on transition/reinvention
6. Personal Goals (optional)
- 1–3 current goals displayed on profile:
- “Learn Python for data analysis”
- “Find remote work in my field”
- “Build a portfolio website”
- Progress indicators (not started / in progress / completed)
- Completed goals move to a “Wins” section automatically
7. Wins & Celebrations
- Personal milestones the user wants to celebrate:
- “Got an interview at [company]”
- “Completed Google Data Analytics certificate”
- “Started freelancing”
- “First client project delivered”
- Community can react/congratulate (lightweight — not full social media reactions)
- Creates a culture of hope and progress
8. Connection & Availability
- “Open to helping others” toggle — visible badge for people willing to support peers in their profession
- “Open to connect” toggle — for professional networking
- Shared experience matching — “Others in your profession who’ve had a similar journey”
Database Impact
New/extended profile fields for Tier 1:
profiles table additions:
- ai_impact_story TEXT -- structured narrative (nullable)
- personal_motto VARCHAR(200) -- short statement (nullable)
- status_evolution JSONB -- history of status changes with timestamps
- helpfulness_count INTEGER -- cached count, updated via trigger
- community_badges TEXT[] -- array of badge slugs
- mentor_available BOOLEAN -- open to helping others
profile_skills table additions:
- skill_category VARCHAR(20) -- 'have', 'building', 'want'
Tier 2 additions (post-launch):
profile_goals table:
- id, profile_id, title, description, status ('not_started'|'in_progress'|'completed'), created_at, completed_at
profile_milestones table:
- id, profile_id, title, description, milestone_date, milestone_type, created_at
profile_wins table:
- id, profile_id, title, description, created_at
Impact on Milestone 7
Milestone 7 is expanded to implement these profile features. See the updated milestone below.
Part 2 — Design System Specification
Concrete values for the design system. These are starting-point recommendations — the project owner adjusts during Milestone 2 review.
2.1 Color Palette
Semantic tokens with hex values:
| Token |
Light Mode |
Purpose |
bg.canvas |
#FAFAF8 |
Base app background (warm off-white) |
bg.surface |
#FFFFFF |
Cards, elevated panels |
bg.surfaceMuted |
#F3F1EE |
Secondary panels, stat bands |
bg.surfaceHover |
#EDEBE7 |
Hover state for surfaces |
text.primary |
#1A1A1A |
Headlines, body text |
text.secondary |
#6B6B6B |
Supporting text, metadata |
text.tertiary |
#9B9B9B |
Placeholders, disabled |
text.inverse |
#FFFFFF |
Text on dark/accent surfaces |
accent.primary |
#2563EB |
Primary CTA, links, key highlights (calm blue) |
accent.primaryHover |
#1D4ED8 |
Hover state for primary accent |
accent.secondary |
#F59E0B |
Secondary accent, warm amber (hope, warmth) |
accent.secondaryHover |
#D97706 |
Hover for secondary accent |
state.success |
#16A34A |
Success states |
state.warning |
#EAB308 |
Warning states |
state.error |
#DC2626 |
Error states, destructive actions |
state.info |
#0EA5E9 |
Informational states |
border.subtle |
#E5E3DF |
Light dividers |
border.strong |
#D1CFC9 |
Stronger boundaries |
border.focus |
#2563EB |
Focus rings (matches accent.primary) |
Design intent: Warm neutrals (not cold gray) as the foundation. Calm blue as the primary action color — trustworthy, not aggressive. Warm amber as the secondary accent — hope, warmth. The palette should feel like a safe, professional space — not a startup landing page and not a social media feed.
2.2 Typography
| Element |
Font |
Size |
Weight |
Line Height |
| Display/Hero |
Inter |
48px / 3rem |
700 |
1.1 |
| H1 |
Inter |
36px / 2.25rem |
700 |
1.2 |
| H2 |
Inter |
28px / 1.75rem |
600 |
1.3 |
| H3 |
Inter |
22px / 1.375rem |
600 |
1.4 |
| H4 |
Inter |
18px / 1.125rem |
600 |
1.4 |
| Body (md) |
Inter |
16px / 1rem |
400 |
1.6 |
| Body (sm/caption) |
Inter |
14px / 0.875rem |
400 |
1.5 |
| Body (lg/intro) |
Inter |
18px / 1.125rem |
400 |
1.7 |
| Monospace |
JetBrains Mono |
14px / 0.875rem |
400 |
1.5 |
Font choice: Inter — clean, professional, excellent readability at all sizes, open-source, great language support. Available via next/font for optimal loading.
2.3 Spacing Scale
4, 8, 12, 16, 20, 24, 32, 40, 48, 64, 80, 96 (px)
Mapped to Tailwind: 1, 2, 3, 4, 5, 6, 8, 10, 12, 16, 20, 24 (Tailwind units)
2.4 Border Radius Scale
| Token |
Value |
Use |
radius.sm |
6px |
Small elements (badges, chips) |
radius.md |
8px |
Default (inputs, buttons) |
radius.lg |
12px |
Cards, containers |
radius.xl |
16px |
Feature cards, modals |
radius.full |
9999px |
Pills, avatars |
2.5 Shadows
| Token |
Value |
Use |
shadow.sm |
0 1px 2px rgba(0,0,0,0.05) |
Subtle lift |
shadow.md |
0 4px 6px -1px rgba(0,0,0,0.07), 0 2px 4px -2px rgba(0,0,0,0.05) |
Cards |
shadow.lg |
0 10px 15px -3px rgba(0,0,0,0.08), 0 4px 6px -4px rgba(0,0,0,0.04) |
Modals, dropdowns |
2.6 Breakpoints
| Name |
Min Width |
Tailwind Prefix |
| Mobile |
0px |
(default) |
| Tablet |
768px |
md: |
| Desktop |
1280px |
lg: |
| Wide |
1536px |
xl: |
2.7 Motion
| Category |
Duration |
Easing |
| Micro (buttons, toggles) |
150ms |
ease-out |
| Surface (cards, drawers) |
200ms |
ease-in-out |
| Route transitions |
250ms |
ease-in-out |
Rule: Always respect prefers-reduced-motion. Reduce to 0ms or minimal for users who prefer it.
Part 3 — Execution Plan
How This Plan Works
Each Task is an atomic unit of work. Tasks are grouped into Milestones. After each Milestone, there is a ⏸️ VERIFICATION CHECKPOINT — work stops, the result is reviewed, and the next milestone only starts after the checkpoint passes.
Each task includes:
- What: Exact description of work
- Files: Which files are created or modified
- Depends on: Prerequisites
- Done when: Verifiable acceptance criteria
Milestone 1: Technical Foundation
Goal: A working dev environment where code can be written, built, tested, and containerized. No product features — just the tooling skeleton.
1.1 — Initialize Next.js Project
- What: Create a Next.js 14+ project with App Router. Configure TypeScript strict mode. Set up path aliases (
@/ → src/). Ensure npm run dev starts a dev server and npm run build produces output. Configure next.config.ts output mode (standalone during development; converted to export in Milestone 13 for GitHub Pages deployment).
- Files:
package.json, tsconfig.json, next.config.js, src/app/layout.tsx, src/app/page.tsx
- Depends on: Nothing
- Done when:
npm run dev opens a page showing “RestartCrew”. npm run build completes without errors. TypeScript strict mode is active.
- What: Install Tailwind CSS v4. Configure with the design tokens from Part 2 (colors, fonts, spacing, radii, shadows, breakpoints). Create base CSS file. Verify utility classes work.
- Files:
tailwind.config.ts, src/app/globals.css, postcss.config.js
- Depends on: 1.1
- Done when: A component using Tailwind classes renders correctly. The config includes all custom design tokens.
- What: Set up ESLint with Next.js and TypeScript rules. Add Prettier for formatting. Add scripts to
package.json.
- Files:
eslint.config.mjs, .prettierrc, package.json (scripts)
- Depends on: 1.1
- Done when:
npm run lint runs without errors. npm run format formats all files.
- What: Install Vitest and React Testing Library. Configure for Next.js and TypeScript. Create one trivial test to verify setup.
- Files:
vitest.config.ts, tests/setup.ts, tests/utils/sample.test.ts, package.json (scripts)
- Depends on: 1.1
- Done when:
npm run test executes and passes.
1.5 — Set Up GitHub Actions CI Pipeline
- What: Create a CI workflow that runs on push/PR: install → lint → type-check → test → build.
- Files:
.github/workflows/ci.yml
- Depends on: 1.1, 1.3, 1.4
- Done when: A push triggers the workflow. It completes with a green check.
- What: Set up build configuration for GitHub Pages deployment. Add
CNAME file for custom domain restartcrew.com. The actual conversion from standalone to export output happens in Milestone 13 when all dynamic routes have generateStaticParams() and auth guards are client-side.
- Files:
next.config.ts, CNAME
- Depends on: 1.1
- Done when: Build configuration is in place.
CNAME file contains restartcrew.com.
1.7 — Verify Supabase Local Setup
- What: Ensure
supabase/config.toml is correct. Verify supabase start works. Update src/lib/supabase.ts to use process.env.NEXT_PUBLIC_* pattern (already done in planning). Create Supabase client utilities for server components and client components.
- Files:
supabase/config.toml, src/lib/supabase.ts (update for server/client separation), .env.local (from .env.example)
- Depends on: 1.1
- Done when:
supabase start runs. supabase status shows local URLs. Supabase client initializes without errors in both server and client contexts.
⏸️ CHECKPOINT 1 — Foundation Verification ✅
Milestone 2: Design System & UI Components
Goal: A reusable component library with the project’s visual identity. Study Teamblind.com for forum UX patterns. No pages yet — just building blocks.
2.1 — Define Design Tokens
- What: Implement the concrete values from Part 2 into Tailwind config and CSS custom properties. Create a visual token reference page.
- Files:
tailwind.config.ts (extended theme), src/styles/tokens.css
- Depends on: Milestone 1
- Done when: All tokens from Part 2 are implemented. A test page renders all token values visually.
Review point: Project owner reviews the color palette, typography, and overall visual tone before component work begins.
2.2 — Build Core UI Primitives
- What: Create reusable components. Each must be responsive, accessible, and use design tokens. Study Teamblind.com for interaction patterns where relevant.
- Components:
Button — primary, secondary, ghost, destructive variants; sizes sm/md/lg
Card — surface container with optional header/footer
Input — text input with label, helper text, error state
Textarea — multi-line input with character count
Select — dropdown with label and error state
Chip / Badge — category/profession labels, status indicators
Modal / Dialog — overlay with backdrop, focus trap, escape to close
Toast / Banner — info/warning/error/success notifications
Avatar — user avatar with anonymous fallback
Skeleton — loading placeholder
EmptyState — friendly empty state with illustration/icon
Dropdown — menu dropdown for actions
- Files:
src/components/ui/*.tsx
- Depends on: 2.1
- Done when: Each component renders at mobile/tablet/desktop. Components have proper ARIA attributes. Tests exist for key components.
2.3 — Build Layout Components
- What: Structural layout components across breakpoints.
- Components:
AppLayout — authenticated app shell (nav + content area)
PublicLayout — public page shell (header + content + footer)
BottomNav — mobile navigation (Feed, Explore, New Post, Notifications, Profile)
SideNav — desktop/tablet left rail navigation
PageHeader — page title with breadcrumbs
Footer — site footer with links
- Files:
src/components/layout/*.tsx
- Depends on: 2.1, 2.2
- Done when: Layouts render correctly at all breakpoints. Mobile shows bottom nav, desktop shows side nav. Navigation is keyboard-accessible.
2.4 — Create Component Showcase Page
- What: A dev-only page showing all components with all variants and states.
- Files:
src/app/(dev)/styleguide/page.tsx
- Depends on: 2.1, 2.2, 2.3
- Done when: Style guide page displays all components with default, hover, focus, disabled, error, loading, and empty states.
⏸️ CHECKPOINT 2 — Design System Verification ✅
Milestone 3: Database & Backend
Goal: Complete, RLS-protected database schema. Seed data. Auth configured. Typed service layer.
3.1 — Create Core Database Migrations
- What: SQL migration files for all tables. Standard fields (id, created_at, updated_at). Proper indexes and foreign keys.
- Tables:
professions — id, name, slug, description, display_order, created_at, updated_at
categories — id, name, slug, description, display_order, icon, created_at, updated_at
profiles — id (FK to auth.users), handle, display_name, anonymity_mode, profession_id, status_type, role, bio, country, affected_by_ai_reason, current_goal, avatar_url, ai_impact_story (TEXT, structured narrative), personal_motto (VARCHAR 200), status_evolution (JSONB, history of status changes), helpfulness_count (INTEGER, cached), community_badges (TEXT[]), mentor_available (BOOLEAN), created_at, updated_at
threads — id, title, body, author_id, category_id, profession_id, is_anonymous, is_locked, is_pinned, is_hidden, reply_count (cached), last_activity_at, created_at, updated_at
posts — id, body, thread_id, author_id, parent_post_id (for nested replies), is_anonymous, is_hidden, helpful_count (cached), created_at, updated_at
helpful_marks — id, post_id, user_id, created_at (unique constraint on post_id + user_id)
thread_tags — id, name, slug, created_at
thread_tag_links — thread_id, tag_id (junction table)
follows — id, follower_id, target_type, target_id, created_at
reports — id, reporter_id, target_type, target_id, reason, notes, status, resolved_by, resolved_at, created_at
notifications — id, user_id, type, title, body, target_type, target_id, is_read, created_at
moderation_actions — id, moderator_id, action_type, target_type, target_id, reason, notes, created_at
skills — id, name, slug, created_at
-
profile_skills — profile_id, skill_id, skill_category (‘have’ |
‘building’ |
‘want’), created_at |
- Note on view_count: View tracking data is collected from day one (for internal analytics), but
view_count is NOT displayed in the UI until the community reaches sufficient scale. See Section 1.10 for the early-stage metrics strategy.
- Files:
supabase/migrations/001_create_professions.sql through 010_create_moderation_actions.sql
- Depends on: Milestone 1 (Supabase working locally)
- Done when:
supabase db reset runs without errors. All tables exist with correct columns, types, indexes, and foreign keys.
3.2 — Implement RLS Policies
- What: RLS policies for every table. Least-privilege. Users CRUD own data. Mods/admins have broader access via role checks. Hidden/flagged content excluded from public reads.
- Files:
supabase/migrations/010_rls_policies.sql
- Depends on: 3.1
- Done when: RLS enabled on all tables. Policies exist for SELECT, INSERT, UPDATE, DELETE. Testing confirms user isolation works.
3.3 — Create Seed Data
- What: Seed SQL for initial categories (8), professions (12+), skills, and welcome threads (at least 1 per category).
- Files:
supabase/seed/seed.sql
- Depends on: 3.1, 3.2
- Done when:
supabase db reset populates all seed data. Categories, professions, and welcome content are present.
- What: Supabase Auth for email/password + Google OAuth. Database trigger to auto-create a
profiles row on sign-up. Helper function for role checking.
- Files:
supabase/migrations/011_auth_trigger.sql, supabase/migrations/012_role_helpers.sql
- Depends on: 3.1, 3.2
- Done when: New user sign-up creates a
profiles row. Google OAuth is configured (dashboard config documented in docs/DECISIONS.md).
3.5 — Build Service Layer
- What: TypeScript service modules wrapping all Supabase calls. Components never call Supabase directly.
- Services:
src/services/auth.ts — signUp, signIn, signOut, getSession, onAuthStateChange
src/services/profiles.ts — getProfile, updateProfile, getProfileByHandle
src/services/threads.ts — listThreads (filters, pagination), getThread, createThread, updateThread
src/services/posts.ts — listPosts, createPost, updatePost
src/services/categories.ts — listCategories, getCategory
src/services/professions.ts — listProfessions
src/services/reports.ts — createReport, listReports, resolveReport
src/services/notifications.ts — listNotifications, markAsRead, markAllAsRead
src/services/moderation.ts — hideContent, lockThread, pinThread, muteUser
src/services/search.ts — searchThreads
- Files:
src/services/*.ts, src/types/database.types.ts
- Depends on: 3.1, 3.2
- Done when: All service functions have TypeScript types, error handling, return typed data. Unit tests exist for key functions (mocked Supabase).
3.6 — Generate Database Types
- What: Run
supabase gen types typescript to generate database types. Integrate into service layer and components.
- Files:
src/types/database.types.ts
- Depends on: 3.1
- Done when: Generated types match schema. Service functions use these types. Type errors are resolved.
⏸️ CHECKPOINT 3 — Backend Verification
Milestone 4: Landing Page & Public Pages
Goal: Polished, responsive landing page and all public/legal pages.
4.1 — Write Landing Page Content
- What: All copy stored in structured content files. Agent drafts professional content, owner reviews.
- Content: Hero headline/subheadline, statistics (sourced from McKinsey/WEF/IMF data), 3 story previews, value propositions, hope statement, CTA text
- Files:
src/content/landing.ts
- Depends on: Nothing (can parallelize with other milestones)
- Done when: All sections have written copy. Statistics include source citations. Tone is calm, warm, hopeful, credible.
4.2 — Build Landing Page
- What: Full landing page following the blueprint in MAIN_DEVPLAN_RESTARTCREW.md Section 20.4.
- Sections: Hero → Stats band → Story previews → Value propositions → Hope statement → CTA → Footer
- Files:
src/app/page.tsx, src/components/landing/*.tsx
- Depends on: Milestone 2, 4.1
- Done when: Page renders at all breakpoints. CTA links to sign-up. Lighthouse accessibility ≥ 90.
- What:
/community-guidelines with content from MAIN_DEVPLAN_RESTARTCREW.md Section 12 guardrails.
- Files:
src/app/community-guidelines/page.tsx, src/content/guidelines.ts
- Depends on: Milestone 2
- Done when: Page is accessible, readable, contains all community rules.
4.4 — Build About / How-It-Works Page
- What:
/about and/or /how-it-works explaining the platform purpose and flow.
- Files:
src/app/about/page.tsx, src/content/about.ts
- Depends on: Milestone 2
- Done when: Page is live, content is accurate, responsive.
4.5 — Build Privacy and Terms Pages
- What:
/privacy and /terms with professional legal template content.
- Files:
src/app/privacy/page.tsx, src/app/terms/page.tsx, src/content/legal.ts
- Depends on: Milestone 2
- Done when: Pages exist and are linked from footer. Content is professional, even if templates are refined later.
✅ CHECKPOINT 4 — Public Pages Verification
Milestone 5: Auth & Onboarding
Goal: Users can sign up, choose identity mode, select profession, and land in the forum.
5.1 — Build Sign-Up Page
- What: Sign-up page with email/password form and Google OAuth button. Error handling for duplicate emails, weak passwords.
- Files:
src/app/(auth)/signup/page.tsx, src/components/auth/*.tsx
- Depends on: Milestone 2, 3.4, 3.5
- Done when: User can sign up via email and Google. Errors shown gracefully. Redirects authenticated users.
5.2 — Build Sign-In Page
- What: Sign-in page with email/password and Google OAuth. “Forgot password” flow.
- Files:
src/app/(auth)/signin/page.tsx
- Depends on: Milestone 2, 3.4, 3.5
- Done when: User can sign in. Session persists across refreshes. Errors handled gracefully.
5.3 — Build Onboarding Flow
- What: Post-signup onboarding sequence:
- “How has AI affected your work?” (status_type selection with empathetic context)
- Profession selection
- Identity mode (anonymous / public) with clear explanation of what each means
- Display name / handle creation
- Skills portfolio quick-start: “What are your top skills?” and “What do you want to learn?” (optional, feeds into the three-category skills model)
- AI Impact Story prompt (optional, can be completed later): “Tell your story — what happened, how it felt, what you’re doing about it”
- Redirect to forum with personalized welcome
- Files:
src/app/(auth)/onboarding/page.tsx, src/components/onboarding/*.tsx
- Depends on: 5.1, 3.3, 3.5
- Done when: New user walks through all steps. Profile saved with profession, status_type, anonymity_mode. Returning users skip onboarding.
5.4 — Implement Auth Guards
- What: Middleware/layout-based route protection. Authenticated routes redirect to sign-in. Onboarding-incomplete users redirect to onboarding.
- Files:
src/middleware.ts, src/app/(app)/layout.tsx
- Depends on: 5.1, 5.3
- Done when: Unauthenticated users cannot access
/app/*. Users with incomplete profiles redirected to onboarding.
5.5 — Build Welcome Banner & Intro Prompt
- What: Build a full-width welcome banner for new users with:
- Dynamic live counter: “X people like you have found their way forward here” — sourced from live
profiles table count, not hardcoded
- Rotating quotes from real (anonymised) community members, cycling every 8 seconds
- Low-friction intro thread card in feed: “Want to say hi? 👋 Most people start here” → links to Welcome & Introductions category
- Profession-matched count below banner: “37 Software Engineers in the community right now” — based on user’s profession from onboarding
- Warm, calm full-width banner — NOT an alert box or popup. Feels like a message from a human, not a system notification
- Files:
src/components/onboarding/WelcomeBanner.tsx, src/components/onboarding/IntroPrompt.tsx, src/services/community-stats.ts
- Depends on: 5.3, 3.5
- Done when: Banner displays live member count. Quotes rotate. Profession-matched count is accurate. Intro thread CTA links to correct category. Banner is responsive and visually warm.
5.6 — Build Industry Restart Guide
- What: Build a profession-specific onboarding guide card with:
- Three sections: “What’s happening in your industry → What others here have done → Where you can start now”
- Visual “AI Impact Score” per industry with hopeful framing: “High AI exposure — but 68% of our Marketing crew have found new paths”
- “Popular in your industry right now” — 3 threads auto-filtered by profession from threads table
- External resource link per industry (e.g. Teachers: retraining resources; Software Engineers: AI-adjacent roles) — editor-curated, maintained via admin
- “Restart Guide” card is prominent days 1–3, shrinks to small sidebar link after day 3 via
localStorage timestamp
- Files:
src/components/onboarding/RestartGuide.tsx, src/services/industry-guide.ts, src/content/industry-resources.ts
- Depends on: 5.3, 3.5, 6.1
- Done when: Guide displays for user’s profession. Threads are auto-filtered. External resources show. Card visibility fades appropriately after day 3. Responsive.
⏸️ CHECKPOINT 5 — Auth & Onboarding Verification
Milestone 6: Forum Core
Goal: Browse categories, read threads, create threads, reply. The core product, informed by Teamblind.com patterns.
6.1 — Build Forum Home / Category List
- What: Main forum view showing all categories with name, description, thread count, latest activity.
- Files:
src/app/(app)/feed/page.tsx, src/components/forum/CategoryCard.tsx
- Depends on: Milestone 2, 3.5
- Done when: All seeded categories display. Thread counts correct. Responsive.
6.2 — Build Thread List View
- What: Category view with thread list. Thread cards show early-stage appropriate metadata (see Section 1.10). Study Teamblind’s thread list density and card layout.
- Thread card metadata (early-stage design):
- Title and excerpt
- Author display name or “Anonymous” with profession badge
- Reply count (“3 replies” or “Be the first to reply” if zero)
- Time since last activity (“2h ago”, “Yesterday”)
- Category/profession chips
- Author status badge (“Just arrived”, “Finding my path”, etc.)
- “Marked helpful” indicator (only when ≥ 1)
- Do NOT show: view count, upvote count, trending indicator, “X people reading”
- Files:
src/app/(app)/category/[slug]/page.tsx, src/components/forum/ThreadCard.tsx
- Depends on: 6.1
- Done when: Threads display in category. Anonymous threads show badge instead of name. Early-stage metrics display correctly. Zero-state messages are encouraging (“Be the first to reply”). Responsive.
6.3 — Build Thread Detail View
- What: Full thread with original post and replies. Chronological order. Reply form at bottom. Study Teamblind’s thread detail layout. Post metadata uses early-stage metrics (see Section 1.10): reply count, time since activity, “Marked helpful” on individual posts, no view counts.
- Files:
src/app/(app)/thread/[id]/page.tsx, src/components/forum/PostCard.tsx
- Depends on: 6.2
- Done when: Thread displays correctly. Replies load in order. Users can submit replies. Anonymous posting works. “Helpful” button on replies works. Empty reply state shows encouraging prompt.
6.4 — Build Thread Composer
- What: New thread creation form: title, body, category selection, profession tag (optional), anonymity toggle. Mobile-first with sticky submit bar. Draft preservation.
- Files:
src/app/(app)/new/page.tsx, src/components/forum/Composer.tsx
- Depends on: 6.1
- Done when: User can create thread. Thread appears in category. Anonymity toggle works. Validation prevents empty content.
6.5 — Build Reply Composer
- What: Reply form within thread detail. Anonymity toggle. Character count.
- Files:
src/components/forum/ReplyForm.tsx
- Depends on: 6.3
- Done when: User can reply. Reply appears in thread. Anonymous toggle works.
6.6 — Implement Profession-Based Filtering
- What: Filter threads by profession across categories. Profession selector in navigation or feed.
- Files:
src/components/forum/ProfessionFilter.tsx, service layer updates
- Depends on: 6.1, 6.2
- Done when: Filtering by profession shows only relevant threads. Filter persists during navigation.
6.7 — Implement Thread Sorting
- What: Sort threads by latest, most active, pinned-first.
- Files: Service layer updates, UI sort controls
- Depends on: 6.2
- Done when: All sort options work correctly. Default is latest.
- What: Paginated or infinite-scroll thread lists. Cursor-based pagination in service layer.
- Files: Service layer updates,
src/components/forum/ThreadList.tsx
- Depends on: 6.2
- Done when: Large thread lists paginate correctly. Loading states during page transitions.
6.9 — Implement “Helpful” Marking on Replies
- What: Thread author can mark a reply as “helpful”. Helpful replies get a subtle badge. Helpful count increments on the replier’s profile (feeds into community badges). Other users can also mark replies as helpful (like a lightweight upvote, but framed as “this helped”).
- Files:
src/components/forum/HelpfulButton.tsx, supabase/migrations/016_helpful_marks.sql, service layer updates
- Depends on: 6.3, 6.5
- Done when: “Helpful” button works on replies. Count displays on reply. Duplicate marking prevented. Replier’s profile
helpfulness_count updates.
⏸️ CHECKPOINT 6 — Forum Core Verification
Milestone 7: Profiles & User Experience
Goal: Next-level user profiles that tell a career transition story. Settings, identity management, and community features that make profiles a core differentiator. See Section 1.11 for the full profile vision.
7.1 — Build Public Profile Page (Tier 1)
- What: Rich profile page implementing all Tier 1 profile sections from Section 1.11:
- Identity & Context: Display name (or “Anonymous”), profession badge, status badge (“Just arrived”, “Finding my path”, “Rebuilding”, “Thriving again”), country, join date, bio, avatar
- AI Impact Story: Structured narrative block (if the user has filled it out). Clean, readable display — not a form dump.
- Skills Portfolio: Three-category display — “Skills I have”, “Skills I’m building”, “Skills I want to learn” — with color-coded chips
- Community Contributions: Thread count, helpfulness count, community role badges (“Early member”, “Storyteller”, “Support champion”)
- Anonymous profiles: Show only profession badge, status badge, community badges, and helpfulness count. No personal details.
- Files:
src/app/(app)/profile/[handle]/page.tsx, src/components/profile/ProfileHeader.tsx, src/components/profile/ImpactStory.tsx, src/components/profile/SkillsPortfolio.tsx, src/components/profile/CommunityBadges.tsx, src/components/profile/ContributionStats.tsx
- Depends on: Milestone 2, 3.5
- Done when: Profile displays all Tier 1 sections. Anonymous users show limited info. Profile is visually compelling and tells a story. Responsive.
7.2 — Build Profile Edit Page
- What: Editable profile covering all Tier 1 fields:
- Basic info: display name, bio, profession, country, avatar, identity mode
- AI Impact Story: structured editor with prompts (“What happened?”, “How did it feel?”, “What are you doing about it?”)
- Skills Portfolio: add/remove skills in three categories with autocomplete from seeded skills
- Status update: self-reported status badge selection with explanation of each status
- “Open to helping others” toggle
- Files:
src/app/(app)/settings/profile/page.tsx, src/components/profile/ProfileEditForm.tsx, src/components/profile/ImpactStoryEditor.tsx, src/components/profile/SkillsEditor.tsx
- Depends on: 7.1
- Done when: User can edit and save all profile fields. AI Impact Story editor has clear prompts. Skills editor supports three categories. Changes persist. Validation prevents empty required fields.
7.3 — Build User Settings Page
- What: Settings page for account management: email change, password change, notification preferences, identity mode toggle, “Open to connect” toggle, data export.
- Files:
src/app/(app)/settings/page.tsx, src/app/(app)/settings/account/page.tsx
- Depends on: 7.2
- Done when: Settings page exists with working forms. Password change works. Identity mode toggle works.
7.4 — Implement Anonymous Identity Display
- What: System-wide logic for displaying anonymous identities consistently. Anonymous users show a generic avatar and “Anonymous” name everywhere (thread cards, posts, profiles). Profession badge still visible for anonymous users (provides context without revealing identity).
- Files:
src/utils/identity.ts, component updates
- Depends on: 7.1
- Done when: Anonymous identity is consistent across all surfaces. No leaking of real identity. Profession badge visible on anonymous posts.
- What: Auto-assigned badges based on user behavior:
- “Early member” — joined during launch period (configurable date threshold)
- “Storyteller” — has filled out their AI Impact Story
- “Support champion” — helpfulness count ≥ 10 (configurable threshold)
- “Guide” — consistently helpful in a specific profession/category
- Files:
src/services/badges.ts, supabase/migrations/017_badge_triggers.sql, src/components/profile/BadgeDisplay.tsx
- Depends on: 7.1, 6.9
- Done when: Badges auto-assign correctly. Badge display is visually clean. Badges appear on profiles and as subtle indicators on posts.
7.6 — Implement Status Evolution Tracking
- What: Track status changes over time. When a user changes their status (e.g., from “Just arrived” to “Finding my path”), store the transition with timestamp. Display status history as a mini-journey on the profile.
- Files:
src/services/profiles.ts updates, profile component updates
- Depends on: 7.2
- Done when: Status changes are tracked in
status_evolution JSONB field. Profile shows current status with a subtle “journey so far” indicator.
⏸️ CHECKPOINT 7 — Profiles Verification
Milestone 8: Search & Discovery
Goal: Users can find content through search and discovery widgets.
8.1 — Implement Thread Search
- What: Keyword search across thread titles and bodies. Search results page with relevance ranking.
- Files:
src/app/(app)/search/page.tsx, src/services/search.ts, database full-text search setup
- Depends on: Milestone 6
- Done when: Search returns relevant results. Results display like thread cards. Responsive.
- What: Sidebar/feed widgets designed for early-stage engagement:
- “Recent threads” — always has content even with few users
- “Active in your profession” — personalized, works with even 1 matching thread
- “Unanswered posts — support needed” — frames empty replies as opportunity, not emptiness (“This person’s story deserves a response”)
- “Reinvention stories” — curated/tagged positive content
- “New members — welcome them” — surfaces recent introductions to encourage community warmth
- “Similar to your experience” — match by profession/status
- Files:
src/components/discovery/*.tsx
- Depends on: Milestone 6
- Done when: Widgets display relevant, fresh content. Empty states are encouraging, not discouraging. Responsive (sidebar on desktop, stacked on mobile).
8.3 — Build Explore Page
- What: Browse/discovery page combining search, category browse, and discovery widgets.
- Files:
src/app/(app)/explore/page.tsx
- Depends on: 8.1, 8.2
- Done when: Explore page provides multiple discovery paths. Responsive.
⏸️ CHECKPOINT 8 — Search & Discovery Verification
Milestone 9: Notifications
Goal: Users are notified of replies, mentions, and moderation updates.
9.1 — Create Notifications Infrastructure
- What: Notifications table (already in schema), service functions, database triggers for notification creation on replies and mentions.
- Files:
supabase/migrations/013_notification_triggers.sql, src/services/notifications.ts
- Depends on: Milestone 3, Milestone 6
- Done when: Replying to a thread creates a notification for the thread author. Mentioning a user creates a notification.
9.2 — Build Notifications Center
- What: Notifications page grouped by date. Unread indicator. Mark as read (single and bulk).
- Files:
src/app/(app)/notifications/page.tsx, src/components/notifications/*.tsx
- Depends on: 9.1
- Done when: Notifications display correctly. Mark-as-read works. Responsive.
9.3 — Implement Notification Triggers
- What: Database-level triggers for: reply to your thread, mention, report status update, welcome/onboarding prompts.
- Files:
supabase/migrations/014_notification_events.sql
- Depends on: 9.1
- Done when: All specified events generate notifications.
9.4 — Add Unread Badge to Navigation
- What: Real-time or polling-based unread notification count in the nav.
- Files:
src/components/layout/BottomNav.tsx, src/components/layout/SideNav.tsx updates
- Depends on: 9.2
- Done when: Unread badge shows correct count. Updates when new notifications arrive.
⏸️ CHECKPOINT 9 — Notifications Verification
Milestone 10: Moderation & Trust/Safety
Goal: Report flow, moderator tools, audit log, community safety.
10.1 — Build Report Flow
- What: Report button on threads and posts. Modal with reason selection. Saves to reports table. Confirmation to user. Prevents duplicate reports.
- Files:
src/components/moderation/ReportButton.tsx, src/components/moderation/ReportModal.tsx
- Depends on: Milestone 6
- Done when: Users can report content. Reports saved. Duplicate prevention works.
10.2 — Build Moderator Queue
- What:
/app/mod/queue showing pending reports. Filter by status, type. Action buttons for each report.
- Files:
src/app/(app)/mod/queue/page.tsx, src/components/moderation/ModQueue.tsx
- Depends on: 10.1
- Done when: Mods can view and act on reports. Queue shows only to users with mod/admin role.
10.3 — Implement Moderation Actions
- What: Hide thread/post, lock thread (prevent replies), pin thread (show at top). Each action requires reason and creates audit log entry.
- Files:
src/services/moderation.ts, src/components/moderation/ModActionBar.tsx
- Depends on: 10.2
- Done when: All actions work. Hidden content invisible to regular users. Locked threads disable reply form. Pinned threads appear first.
10.4 — Implement Mute User
- What: Mods can mute a user (prevent posting for a period). Muted users see a message explaining their mute.
- Files: Service layer updates, mute status check in composer
- Depends on: 10.3
- Done when: Muted users cannot post. Mute status displayed to the user. Mute has duration.
10.5 — Build Moderation Audit Log
- What: Admin-visible log of all moderation actions with moderator, action, target, reason, timestamp.
- Files:
src/app/(app)/mod/log/page.tsx
- Depends on: 10.3
- Done when: All mod actions logged. Log is searchable by moderator and action type.
- What: Automated checks or guidelines display: no mocking job loss, no doxxing, no harassment, no recruiting spam, no partisan flamebait, no nihilism about human worth. Display guardrails in composer. Basic keyword flagging for review.
- Files: Composer updates, Edge Function for flagging (optional)
- Depends on: 10.2
- Done when: Community guardrails are visible in composer. Flagged content routes to mod queue.
⏸️ CHECKPOINT 10 — Moderation Verification
Goal: Admin dashboard for platform management and basic analytics.
11.1 — Build Admin Dashboard
- What: Overview page with key metrics: total users, active users, threads created, posts today, pending reports.
- Files:
src/app/(app)/admin/page.tsx, src/components/admin/MetricsCards.tsx
- Depends on: Milestone 3
- Done when: Dashboard shows real-time stats. Admin-only access.
11.2 — Build Category/Profession Management
- What: Admin pages to create/edit/reorder categories and professions.
- Files:
src/app/(app)/admin/categories/page.tsx, src/app/(app)/admin/professions/page.tsx
- Depends on: 11.1
- Done when: Admin can CRUD categories and professions from UI.
11.3 — Build Content Management
- What: Admin view of all content with ability to search, filter, and moderate.
- Files:
src/app/(app)/admin/content/page.tsx
- Depends on: 11.1
- Done when: Admin can browse and manage all threads and posts.
11.4 — Integrate Analytics
- What: Integrate a privacy-respecting analytics solution (Plausible, Umami, or simple custom events to Supabase). Track key metrics from the product plan.
- Files: Analytics script in layout, event tracking utilities
- Depends on: Milestone 1
- Done when: Key user journey events are tracked. Dashboard shows conversion funnel data.
⏸️ CHECKPOINT 11 — Admin Verification
Goal: Production-quality polish across all surfaces.
12.1 — Full Responsive QA
- What: Test every page at mobile (360px), tablet (768px), desktop (1280px), and wide (1536px). Fix layout issues.
- Done when: Device-specific QA checklist from MAIN_DEVPLAN_RESTARTCREW.md Section 15 passes.
12.2 — Accessibility Audit
- What: WCAG 2.2 AA compliance check. Fix focus management, ARIA labels, contrast, keyboard navigation.
- Done when: Lighthouse accessibility ≥ 90 on all core pages. Screen reader basics work.
- What: Core Web Vitals optimization. Code splitting, image optimization, lazy loading. Target < 3s initial load.
- Done when: Lighthouse performance ≥ 80. First Contentful Paint < 1.5s. No layout shifts.
12.4 — Security Audit
- What: Review all RLS policies. Test auth flows for edge cases. Check for XSS, CSRF. Review input validation.
- Done when: No unauthorized data access possible. All inputs validated server-side.
12.5 — E2E Test Suite
- What: Playwright tests covering: sign-up flow, onboarding, thread creation, reply, report, mod actions.
- Files:
tests/e2e/*.spec.ts
- Done when: E2E suite passes. Covers critical user journeys.
12.6 — Seed Production Data
- What: Prepare production seed data: categories, professions, welcome threads, initial community guidelines content.
- Files: Updated
supabase/seed/seed.sql
- Done when: Production database has all initial content ready for users.
⏸️ CHECKPOINT 12 — Launch Readiness
Milestone 13: Production Deployment & Launch
Goal: Live at www.restartcrew.com with full user journey working.
13.1 — Configure GitHub Pages Deployment
- What: Enable GitHub Pages for the repository. Set build source to GitHub Actions. Configure the
CNAME file for custom domain restartcrew.com. Switch next.config.ts from output: 'standalone' to output: 'export' for static site generation. Add generateStaticParams() to all dynamic routes (/category/[slug], /thread/[id], /profile/[handle]). Convert server-side auth callback (route.ts) to a client-side page component. Replace middleware route guards with client-side navigation guards (using the existing AuthProvider pattern). Note: actual authentication security remains enforced server-side by Supabase RLS policies — client-side guards are UX-only redirects.
- Done when:
npm run build produces a static export in the out/ directory. All pages render correctly. GitHub Pages is enabled.
- What: Verify existing Supabase Nano instance has all migrations applied. Confirm auth providers (email + Google OAuth) are configured. Set production environment variables in GitHub repository secrets.
- Done when: Supabase Nano instance is verified. All migrations applied. Environment variables configured as GitHub secrets.
13.3 — Configure Custom Domain and DNS
- What: Point
restartcrew.com DNS to GitHub Pages. Configure CNAME record. GitHub Pages provides automatic HTTPS.
- Done when:
https://www.restartcrew.com serves the application with valid SSL via GitHub Pages.
13.4 — Set Up Deploy Pipeline
- What: GitHub Actions workflow: on merge to
main, build Next.js static export → deploy to GitHub Pages.
- Files:
.github/workflows/deploy.yml
- Done when: Merging to
main automatically deploys to GitHub Pages. Rollback procedure documented.
13.5 — Production Smoke Test & Launch
- What: Complete end-to-end walkthrough in production: land → sign up → onboard → browse → post → reply → report. Verify all functionality works.
- Done when: Full user journey works in production. Domain live. HTTPS working. Ready for users.
⏸️ CHECKPOINT 13 — Launch Gate
Part 4 — Future Roadmap
After launch, development continues with enhancements and new features:
Post-Launch Improvements (weeks 2–6):
- Profile Tier 2 features: Journey Timeline, Personal Goals, Wins & Celebrations (see Section 1.11)
- Scale-aware metric switching: enable view counts, trending, upvotes when community reaches thresholds (see Section 1.10)
- Real-time thread updates (Supabase Realtime)
- Rich text / markdown editor for posts
- Thread reactions / voting (once scale supports it)
- User reputation system (building on helpfulness + badges)
- Email digest notifications
- Advanced search filters
- Performance monitoring and alerting
- Connection features: “Open to connect” matching, shared experience discovery
Version 2 — Growth Layer:
- Courses and structured learning content
- Expert AMAs and live events
- Mentorship matching (building on “Open to helping others” profiles)
- AI-powered content moderation
- Job board for AI-adjacent roles
- Premium membership features
- Advanced recommendation engine
- Mobile app (React Native)
Part 5 — Principles for Agent Execution
5.1 Documentation Updates
After every task:
- Update
docs/DEVLOG.md with: datetime, task completed, files changed, schema changes, blockers, next step
- Update
docs/DECISIONS.md for any non-trivial decision
- Update
docs/ROADMAP.md to reflect current progress
- Check off completed items in the Milestone Overview table at the top of this document
5.2 Quality Standards
- Every file must pass
npm run lint
- Every new service function must have a test
- Every UI component must handle loading, error, and empty states
- Every async operation must have error handling
- TypeScript strict mode — no
any types without documented justification
- All forum UX patterns should consider Teamblind.com as reference
5.3 Stopping Rules
The agent MUST stop and request human review when:
- A checkpoint is reached (end of each milestone)
- The implementation deviates significantly from this plan
- A security concern is discovered
- A dependency needs to be added not mentioned in this plan
5.4 Execution Order
Milestones must be executed in order (1 → 2 → 3 → …). Tasks within a milestone can be parallelized where dependencies allow. No milestone can start until the previous checkpoint is approved.
Appendix A — Expected File Structure After All Milestones
src/
├── app/
│ ├── layout.tsx # Root layout
│ ├── page.tsx # Landing page
│ ├── globals.css # Global styles
│ ├── (auth)/
│ │ ├── signin/page.tsx
│ │ ├── signup/page.tsx
│ │ └── onboarding/page.tsx
│ ├── (app)/
│ │ ├── layout.tsx # App shell layout
│ │ ├── feed/page.tsx # Forum home
│ │ ├── category/[slug]/page.tsx
│ │ ├── thread/[id]/page.tsx
│ │ ├── new/page.tsx # Thread composer
│ │ ├── explore/page.tsx
│ │ ├── search/page.tsx
│ │ ├── profile/[handle]/page.tsx
│ │ ├── notifications/page.tsx
│ │ ├── settings/
│ │ │ ├── page.tsx
│ │ │ ├── profile/page.tsx
│ │ │ └── account/page.tsx
│ │ ├── mod/
│ │ │ ├── queue/page.tsx
│ │ │ ├── reports/page.tsx
│ │ │ └── log/page.tsx
│ │ └── admin/
│ │ ├── page.tsx
│ │ ├── categories/page.tsx
│ │ ├── professions/page.tsx
│ │ └── content/page.tsx
│ ├── community-guidelines/page.tsx
│ ├── about/page.tsx
│ ├── privacy/page.tsx
│ ├── terms/page.tsx
│ └── (dev)/
│ └── styleguide/page.tsx # Component showcase (dev only)
├── components/
│ ├── ui/ # Button, Card, Input, Textarea, Select, Chip, Modal, Toast, Avatar, Skeleton, EmptyState, Dropdown
│ ├── layout/ # AppLayout, PublicLayout, BottomNav, SideNav, Footer, PageHeader
│ ├── auth/ # SignUpForm, SignInForm, AuthGuard, OAuthButton
│ ├── onboarding/ # OnboardingFlow, ProfessionSelector, IdentityModeSelector, StatusSelector, SkillsQuickStart, ImpactStoryPrompt
│ ├── forum/ # CategoryCard, ThreadCard, ThreadList, PostCard, ReplyForm, Composer, ProfessionFilter, HelpfulButton
│ ├── landing/ # HeroSection, StatsSection, StoriesSection, ValueProps, HopeSection, CTASection
│ ├── profile/ # ProfileHeader, ProfileView, ProfileEditForm, ImpactStory, ImpactStoryEditor, SkillsPortfolio, SkillsEditor, CommunityBadges, BadgeDisplay, ContributionStats
│ ├── discovery/ # RecentThreads, ProfessionActive, UnansweredPosts, NewMembers, SimilarExperience
│ ├── notifications/ # NotificationList, NotificationItem
│ ├── moderation/ # ReportButton, ReportModal, ModQueue, ModActionBar
│ └── admin/ # MetricsCards, CategoryManager, ContentManager
├── services/ # auth, profiles, threads, posts, categories, professions, reports, notifications, moderation, search, badges
├── lib/ # supabase.ts (server + client)
├── types/ # database.types.ts, component types
├── content/ # landing.ts, guidelines.ts, about.ts, legal.ts
├── styles/ # tokens.css
└── utils/ # formatDate, truncate, identity helpers
supabase/
├── config.toml
├── migrations/
│ ├── 001_create_professions.sql
│ ├── 002_create_categories.sql
│ ├── 003_create_profiles.sql
│ ├── 004_create_threads.sql
│ ├── 005_create_posts.sql
│ ├── 006_create_tags.sql
│ ├── 007_create_follows.sql
│ ├── 008_create_reports.sql
│ ├── 009_create_notifications.sql
│ ├── 010_create_moderation_actions.sql
│ ├── 011_rls_policies.sql
│ ├── 012_auth_trigger.sql
│ ├── 013_role_helpers.sql
│ ├── 014_notification_triggers.sql
│ ├── 015_skills.sql
│ ├── 016_helpful_marks.sql
│ └── 017_badge_triggers.sql
├── seed/
│ └── seed.sql
└── functions/
tests/
├── services/
├── utils/
├── e2e/
└── setup.ts
.github/
└── workflows/
├── ci.yml
└── deploy.yml
CNAME