90-Day MVP Roadmap

HOAHelper
Launch Plan

The core product is built. This roadmap covers the 90 days from "working prototype" to "revenue-generating, publicly launched product" — including billing, marketing, customer acquisition, and iteration.

Core app: complete Billing: pending Target: 25 paying communities Target: $2,250+ MRR by Day 90
Important context: HOAHelper is not starting from zero. The Admin, Guard, and Resident portals are functional. The AI edge function is live. Supabase RLS is in place. This 90-day plan focuses on the gap between "it works" and "it earns" — specifically: Stripe billing, public launch, customer acquisition, and iterating on real feedback.
MVP Scope & Definition
Core Value Proposition
HOAHelper gives HOA communities an AI that instantly answers resident bylaw questions and guides gate security decisions — grounded in their actual documents, not generic advice.
What's IN the MVP
  • Admin setup wizard (neighborhood creation, role assignment)
  • Bylaw upload: PDF text extraction + OCR fallback for scanned docs
  • Resident bylaw chat with document citations and flagging
  • Guard portal: DL barcode scan, AI security check, Allow/Flag/Deny
  • Admin dashboard: real-time stats, visitor reports, review queue
  • Google OAuth authentication
  • Stripe billing: $49 trial + $9/mo subscription
  • Landing page, favicon, OG images, PWA manifest
  • Email/magic link auth (for non-Google users)
What's OUT (Post-MVP)
  • Multi-community accounts (Property Manager plan)
  • White-label / branded portals
  • Native SMS integration via Twilio
  • Resident mobile app (PWA install is sufficient for now)
  • HOA accounting / maintenance request features
  • Advanced analytics dashboard
  • API for third-party integrations
  • Multi-language support
25
Paying communities by Day 90
$2,250
Target MRR by Day 90
20%
Trial-to-paid conversion target
< $100
Customer acquisition cost target
Feature Prioritization Matrix
FeatureStatusUser ValueEffortDay Target
Stripe billing + paywall
$49 trial, $9/mo sub, webhook handling
Not built Enables revenue. Blocking everything else. High Day 14
Landing page + domain
hoahelper.app, SEO meta, OG images
Partial First impression for every ad click. Conversion anchor. Low Day 7
Magic link / email auth
OTP via Supabase — no Google required
Not built Removes friction for non-Gmail users (significant HOA board segment) Low Day 10
Favicon + PWA manifest
favicon.svg, apple-touch-icon, manifest.json
Not built Trust signal. Guards can install as home screen app. Very Low Day 5
Admin portal
Dashboard, bylaws, residents, reports, review queue
✓ Built Core admin value. Fully functional. Done
Guard portal + DL scan
AI security check, barcode scan, entry logging
✓ Built Key differentiator. No competitor offers this. Done
Resident bylaw chat
AI Q&A with citations, persistent history, flagging
✓ Built Primary value for residents and board members. Done
Tesseract self-hosting
Move OCR assets from unpkg.com to public/
Quick fix Reliability. Removes single CDN dependency for OCR. Very Low Day 3
Test coverage uplift
≥80% branch coverage on lib/
Partial Engineering confidence. Reduces production bugs. Medium Day 30
Should-Have (Days 31–60)
  • Basic in-app onboarding tour for new admins (3 tooltips, skip-able)
  • Email notifications for flagged review queue items
  • Visitor report PDF export (currently CSV only)
  • Mobile-optimized guard portal (larger tap targets, simplified flow)
  • AI response disclaimer ("not legal advice") in chat UI
Could-Have (Days 61–90+)
  • Multi-community accounts (Property Manager plan)
  • Twilio SMS integration (residents text questions via phone number)
  • Automated email digest of flagged items for admins
  • Bulk resident import (CSV upload)
  • White-label branding options
Technical Architecture (as built)

The architecture is established. This section documents decisions for new contributors and identifies the two gaps to close before launch.

LayerTechnologyRationaleGap to Close
Frontend SPAReact 19 + TypeScript + Vite 6Fast dev, strong ecosystem, RSC-ready for futureNone
StylingTailwind CSS v4Rapid UI iteration, consistent design tokensNone
Database + Auth + RealtimeSupabase (Postgres 15 + RLS)Handles auth, RLS, storage, realtime — zero backend serversNone
AI (provider-agnostic)Supabase Edge Function (Deno)Keys never hit browser; switch AI provider via env varNone
Document parsingpdfjs-dist + Tesseract.jsClient-side = zero server cost; OCR fallback for scansSelf-host Tesseract assets
DL scanninghtml5-qrcode (PDF417)Works in any mobile browser, no native app requiredNone
ValidationZodRuntime type safety at every form boundaryNone
BillingStripe Checkout + WebhooksIndustry standard, handles all payment edge casesBuild in Days 1–14
HostingVercel (recommended) or NetlifyZero-config SPA deployment, global CDNConfigure for production domain
MonitoringSentry + PostHog (free tier)Error tracking + feature analytics without overheadAdd Day 25–30
Key User Journeys (Discovery → Value)
Journey A — Board Admin (Primary Buyer)
Sees Facebook ad
Discovery
Lands on hoahelper.app
Considers
Clicks $49 trial → Stripe
Converts
Uploads bylaws, shares link
Activates
Weekend inbox = quiet
Value realized
Critical drop-off points: (1) Landing page → Stripe checkout. (2) Stripe → bylaw upload. If admin doesn't upload bylaws, they get zero value and will churn.
Journey B — Gate Guard (Daily User)
Guard is set up by admin (no signup required). Admin adds them as staff → they receive access link → open Guard Portal on phone → scan first DL → AI security check runs → Allow/Flag/Deny logged. Value is realized on the first visitor interaction. The guard never touches billing — their experience is purely operational.
Key insight: Guard satisfaction drives admin retention. If guards find the portal slow or hard to use on mobile, admins hear about it. Mobile performance on the Guard Portal is a retention lever, not just a UX issue.
90-Day Sprint Plan

Three phases: make it sellable (Days 1–30), sell it (Days 31–60), learn and grow (Days 61–90). Development and marketing run in parallel from Day 31.

Days 1–30
Make It Sellable
Goal: First paying community live by Day 30 Dev-heavy · 4 weeks · Milestone: $49 in Stripe
Week 1
Days 1–7
Quick wins + launch infrastructure Low effort, high trust
Self-host Tesseract assets — copy WASM, core, eng.traineddata to public/tesseract/. Update paths in extractText.ts. ~2 hrs
Favicon + PWA manifest — favicon.svg, apple-touch-icon.png, manifest.json. Add <link rel="icon"> and <link rel="manifest"> to index.html. ~3 hrs
OG / Twitter card meta tags — og:image (1200×628), og:title, og:description. Verify with Facebook OG Debugger. ~2 hrs
Deploy to production domain — hoahelper.app on Vercel. Configure Supabase redirect URLs. Test OAuth flow end-to-end. ~4 hrs
Set up PostHog analytics — install @posthog/react, instrument: bylaw upload, chat message sent, DL scan, entry logged. ~3 hrs
🎯
Deliverable: hoahelper.app is live, loads fast, has a favicon, and tracks user actions. Shareable with early testers.
Week 2
Days 8–14
Stripe billing + magic link auth Revenue-critical
Stripe Checkout Edge Function — create_checkout_session for $49 trial and $9/mo. Store stripe_customer_id and trial_ends_at on neighborhoods table.
Stripe webhook handler — Edge Function handles: checkout.session.completed, invoice.payment_failed, customer.subscription.deleted. Updates subscription_status in neighborhoods.
Paywall middleware — check subscription_status on portal load. Redirect past_due/canceled/expired to upgrade page. Trial_ends_at enforcement.
Magic link auth — enable Supabase OTP. Add email input to Login.tsx with "or continue with email" separator below Google button.
End-to-end billing test — use Stripe test mode: trial purchase → portal access → trial expiry → upgrade flow. All webhook events verified.
💳
Deliverable: First real $49 payment can be collected. Trial enforcement works. Paywall blocks expired accounts.
Week 3
Days 15–21
Test coverage + early user recruitment Quality + Pipeline
Unit test coverage — run vitest --coverage. Write missing tests for extractText.ts, edge case aamva.ts specs, remaining validation schemas. Target: ≥80% branch coverage on lib/.
AI disclaimer copy — add "Responses are based on your community's uploaded documents and should not be considered legal advice" below the chat input.
Recruit 5 beta communities — post in r/HOA and r/fuckHOA, reach out to local Facebook HOA groups. Offer 3 months free in exchange for a testimonial and 30-min feedback call.
Set up Sentry error monitoring — install @sentry/react, configure DSN, test that uncaught errors and slow transactions alert correctly.
🧪
Deliverable: Codebase is production-stable. 5 real HOA communities testing the product.
Week 4
Days 22–30
Beta feedback, fixes, and first paid customers Revenue begins
Beta feedback calls — 30 minutes each with 5 beta community admins. Structured: (1) What worked? (2) What confused you? (3) What would make you pay for this? Document verbatim quotes.
Fix top 3 feedback items — prioritize issues that affect trial-to-paid conversion. Quick wins only — no scope expansion.
Collect 2 testimonials — get written permission, photograph or use initials. Add to landing page social proof section. Update hero trust strip.
Convert beta users to paid — offer beta communities the $49 trial at the end of their free access. Target: 3 paying communities by Day 30.
🚀
Deliverable: 3 paying communities. Real testimonials on the landing page. Known user friction points fixed.
DAY 30 MILESTONE — Product is live, tested, and collecting real revenue. 3+ paying communities. Testimonials in place.
Days 31–60
Acquire Customers
Goal: 15 paying communities, $1,350 MRR Marketing-heavy · Dev in support role · Week 5–8
Week 5–6
Days 31–44
Paid acquisition begins + product polish Marketing spend starts
Launch Facebook/Instagram ads — Problem angle creative (board burnout inbox visual). $30–50/day. Florida, Texas, Arizona geo-targeting. Use Campaign Angle 1 from the ad package.
Launch Google Search ads — Campaign A keywords ("HOA AI assistant", "HOA management software"). $20–40/day. Manual CPC initially.
Reddit organic engagement — Answer 5 HOA questions per week in r/HOA. No promotional posts. Build credibility. DM users who ask relevant questions to see if they want access.
Admin onboarding tooltip tour — 3 tooltips: (1) Upload bylaws first, (2) Share the chat link with residents, (3) Guards use the Guard Portal. Skip-able. Triggered on first login.
Email notification for flagged items — when needs_review=true, send admin an email via Supabase email edge function. "A resident question needs your review."
📣
Deliverable: Paid ads running. First ad-sourced signups in Stripe. 8+ paying communities total.
Week 7–8
Days 45–60
A/B test, optimize conversion, LinkedIn outreach Scaling
A/B test hero headline — "Your bylaws. Instant answers." vs "Stop answering the same HOA questions." Run for 7 days, pick winner. Pause low-CTR ad creatives.
LinkedIn outreach to property managers — identify 50 property management firms managing 5+ communities in target states. Personalized DM with the property manager pitch (3 portals, white-label interest).
Post first Reddit AMA — "We built an AI that reads HOA bylaws and answers questions — AMA." Do it authentically; answer every reply. This single post can drive 10–20 signups.
Review churned/non-converted trials — look at PostHog funnel. Identify where admins drop out before going live (before bylaws upload? Before sharing link?). Fix the top drop-off point.
📈
Deliverable: 15 paying communities. Best-performing ad creative identified. First property manager conversation started.
DAY 60 MILESTONE — 15 paying communities. $1,350+ MRR. CAC validated. First property manager conversation underway.
Days 61–90
Learn & Grow
Goal: 25 paying communities, $2,250 MRR, clear v1.2 plan Balanced dev + marketing · Retention focus · Week 9–12
Week 9–10
Days 61–74
Retention + expansion revenue Upsell focus
30-day health check calls — call every paying community at the 30-day mark. Ask: are guards using the portal? Have residents asked questions? What's missing? Document churn risks early.
Soft-launch Premium Support ($5/mo) — email current customers: "For communities that want a human to review flagged questions within 4 hours, we now offer Premium Support." Manual fulfillment initially.
Case study: write up one success story — pick the community with the most measurable outcome (e.g., "board went from 30 texts/week to 4"). Publish as a blog post + LinkedIn article.
Visitor report PDF export — add PDF export alongside CSV. Admins share with board meetings. Adds perceived value without changing the product experience.
💼
Deliverable: 20 paying communities. First Premium Support upsell. Published case study for use in outreach.
Week 11–12
Days 75–90
Plan v1.2 + scale what's working v1.2 scope lock
Analyze 90-day data — PostHog: top drop-off in onboarding funnel. Stripe: trial-to-paid rate. Sentry: top error types. Build v1.2 backlog from these, not feature ideas.
Double budget on best-performing ad channel — whichever channel has lowest CAC at Day 75 gets 2x budget. Kill underperforming campaigns.
Close first property manager deal — follow up on LinkedIn outreach from Week 7–8. Target: one PM firm with 3+ communities on a pilot. Price: 3 communities at $9/mo each = $27/mo. Lock in relationship.
Scope v1.2 — lock in features for next 90 days based on data. Likely candidates: multi-community accounts, Twilio SMS, bulk resident import. Confirm with paying customers before building.
🏁
Deliverable: 25 paying communities. $2,250+ MRR. v1.2 scope locked and validated with real customers.
DAY 90 MILESTONE — 25 paying communities. $2,250+ MRR. CAC < $100. First PM partnership. v1.2 roadmap locked.
Testing Strategy
Day 21 — Internal QA
  • Full admin onboarding flow on fresh account
  • PDF upload: text PDF + scanned PDF (OCR)
  • Guard portal DL scan on iOS + Android
  • Resident chat on mobile browser (Safari + Chrome)
  • Stripe test mode: trial → expiry → upgrade
  • All webhook events fire correctly
  • Paywall blocks access after trial
Day 28 — Beta User Testing
  • 5 real HOA admins run full onboarding unassisted
  • Record session (with permission) — watch where they hesitate
  • Time from signup to first resident question answered
  • Guards test DL scan in field conditions (outdoor light, fast scan)
  • Collect SUS (System Usability Scale) score — target ≥ 70
Day 60 — Continuous
  • PostHog funnel: track drop-off at each onboarding step weekly
  • Sentry: zero P0 errors (crashes, blank screens) — alert immediately
  • Stripe: webhook delivery rate ≥ 99.5% — monitor Stripe dashboard
  • AI accuracy: manual review of 10 random chat responses per week
  • Guard portal scan success rate in PostHog — alert if <75%
Risk Mitigation
RiskLikelihoodImpactMitigation
Stripe billing breaks at launch — webhook misconfig, wrong price IDs in test vs live mode Medium High Test every Stripe webhook event in test mode before going live. Use Stripe CLI for local webhook testing. Keep billing logs table in Supabase as backup record.
Admin doesn't upload bylaws — buys trial, never activates, churns after 3 months with zero value Medium High Trigger email 24 hours after signup if bylaws field is empty: "You're set up — one thing left." Guide them to upload. Add this as a Day 1 activation metric in PostHog.
AI gives an inaccurate answer — cites wrong rule or invents something not in bylaws Low Medium System prompt explicitly instructs: only cite uploaded documents. Legal disclaimer below chat input. Weekly manual QA of 10 random chat responses. Flagging covers complex cases.
DL scanning fails on older Android devices — JS zxing fallback slower than native BarcodeDetector Medium Low Manual entry always available. UI copy sets expectations: "works best on a phone camera." PostHog tracks scan success rate — alert if <75% on mobile.
Ad CAC exceeds $100 — Facebook CPMs higher than projected, low landing page conversion Medium Medium Run A/B tests on headline and creative simultaneously. Pause campaigns under 0.5% CTR after 500 impressions. Reddit organic is free — lean into that if paid is expensive.
Board member resists adopting AI — "we don't want to give residents wrong information" High Medium This objection is handled in sales. Emphasize: (1) every answer cites the exact document, (2) complex questions go to human review, (3) 3-month trial with no commitment. Address in FAQ on landing page.
Launch Criteria

All boxes must be checked before spending any paid acquisition budget. Paid traffic to a broken funnel wastes money and first impressions.

Technical Readiness
All three portals functional and tested on mobile
AI chat returns accurate, cited responses on test bylaws
RLS confirmed on all 5 database tables
Stripe live mode active and tested (not test mode)
Paywall enforced after trial_ends_at
Favicon, OG images, and PWA manifest live
Sentry error monitoring active
PostHog analytics tracking key events
Business Readiness
Landing page live with pricing, FAQ, and testimonials
Privacy Policy and Terms of Service pages live
Support email (support@hoahelper.app) routing to founder
At least 2 real testimonials on landing page
AI disclaimer ("not legal advice") visible in chat UI
Facebook ad account set up with pixel installed
Google Ads account created with billing configured
3 paying communities confirmed before ad spend begins
The "3 paying before ads" rule: Do not start paid acquisition until 3 communities have paid and you've confirmed they're getting value. This validates the onboarding funnel and gives you real testimonials. Paid traffic to a pre-validated funnel is efficient. Paid traffic to an untested funnel is expensive learning.
Post-Launch Iteration Plan
Days 1–14 post-launch
Stabilize & learn
  • Monitor Sentry daily — zero P0s tolerated
  • Watch PostHog onboarding funnel for drop-off
  • Read every support email same day
  • Call any churned/inactive trial community to understand why
  • Fix critical bugs within 24 hours
  • Log every piece of feedback in a single doc
Days 15–45 post-launch
Optimize conversion
  • Fix top 2 onboarding drop-off points (data-driven)
  • A/B test landing page CTA copy
  • Add activation email sequence (Day 1, Day 3, Day 7 post-signup)
  • Implement top-requested feature (that's in-scope)
  • Build out NPS survey trigger at 30-day mark
  • Scale winning ad channel
Days 46–90 post-launch
Build toward v1.2
  • Scope multi-community feature (PM plan prerequisite)
  • Evaluate Twilio SMS demand from customer calls
  • Begin LinkedIn B2B outreach at scale
  • Publish 1 long-form content piece per month
  • First conference or HOA industry event (Florida or Texas)
  • Validate white-label interest with 3 PM firms
The 18-Month Target
500 paying communities · $4,500/mo MRR · First property manager partnership · v1.2 shipped
At 500 communities × $9/month = $54,000 ARR from subscriptions alone. Add Premium Support upsell at 20% attach rate ($5/mo) = $63,000 ARR. Add one $50,000/year PM licensing deal = $113,000 ARR. This is well within reach at the current growth trajectory — the key variable is CAC. Keep it under $100 and the math works.