How I'd build Foyer
I'd reach for Next.js on the frontend with a Postgres backend, Stripe for billing, and Resend for transactional email. On document generation, I'm looking at either Puppeteer or a lightweight PDF library depending on how fancy the contracts get - probably Puppeteer given we need pixel-perfect rendering of custom wedding details. Rough estimate: 140-180 hours to production, assuming standard scope. Most of that is compliance and data modeling, not the happy path.
Day-by-day plan
Day 1-2: Provision Postgres schemas for users, organizations, documents, and stripe webhook events. Multi-tenant row-level security from day one - this isn't optional when you're handling contracts. Set up auth with NextAuth and a basic JWT refresh flow.
Day 3: Wire Stripe integration across three tiers - basic ($29), standard ($79), and pro ($129). I'm building webhooks for subscription lifecycle events and seat-based pricing logic. Billing-system bugs are expensive bugs.
Day 4-5: Build the customer onboarding flow: email verification, workspace setup, first template selection. Ship a basic document builder UI using a rich text editor - I'll probably use TipTap since it's composable and doesn't fight Next.js.
Day 6: Implement the Puppeteer pipeline to render documents as PDFs. Add watermarking for trial accounts and basic branding customization (logo, colors).
Day 7-8: Build the proposal-sending workflow with Resend, document versioning, and read-only signature preview. Add basic analytics tracking (document created, viewed, sent, signed).
Day 9-10: Community onboarding assets: Loom walkthrough, templates for wedding planners, copy for the free trial landing page, and setup instructions. Deploy to production with monitoring alerts on Stripe and email delivery.
What's hard about this build
The core tension is document integrity. Wedding contracts are legal documents, and if someone modifies a PDF after signing or if a template renders differently across devices, we're liable. I'm building versioning into the document model and storing rendered PDFs immutably the moment they're sent. That adds complexity.
The second hard part is seasonality churn. Planners cancel in January and July when pipelines dry up. We'll need to model this in cohort retention and probably offer pause-rather-than-cancel at renewal. That's a business problem first, but it shapes schema design - I'm building subscription states to accommodate it.
Third, integration risk: planners will ask to sync with Google Drive, Slack, or their CRM within weeks. We don't ship that at launch, but I'm designing the architecture to support webhooks and OAuth flows without rewriting everything. That upfront work costs time now but prevents it later.
What's fast because of AI
I'm using Claude for document template scaffolding - generating 8-10 proposal starter templates from wedding-specific prompts compresses what's normally a week of design iteration into a day. I'm also using Claude to enumerate edge cases in the billing state machine (what happens if someone downgrades mid-cycle, upgrades, then cancels?) rather than discovering them in production.
For testing, Claude writes the integration tests for the Stripe webhook flow and auth state transitions. That's typically the slowest part; with Claude, it's 3 hours instead of 12. I'm also using Claude to draft product copy, FAQs, and email templates - things that normally require back-and-forth with marketing. The generator gives us 80% of the way there.
Debugging is faster too. When something breaks in the PDF rendering pipeline, I can describe the error to Claude and get hypotheses on data serialization issues, font loading, or Puppeteer lifecycle problems before I spin up a debugger.
How I'd hand it off
I'd record a Loom walkthrough of the admin dashboard, the document builder, and the Stripe integration. You'd also get a runbook covering deployment steps, environment variables, Stripe webhook configuration, and how to rotate secrets. I'm setting up a 30-day pager rotation where I'm on-call for critical bugs - document rendering failures, billing edge cases, auth issues. After 30 days, I'll hand off credentials for Stripe, Resend, and Postgres to your team, along with documentation for the data model and API contracts. Everything lives in Linear so your next operator can see what shipped and what's still pending.