AI-powered wedding planning assistant that automates vendor discovery and outreach for couples planning weddings in New South Wales, Australia.
An intelligent wedding planning platform that:
- Multi-Step Form Intake: Professional questionnaire to gather wedding requirements
- Smart Vendor Matching: Automatically finds venues, photographers, caterers based on your preferences
- Automated Outreach: Sends personalized emails to vendors on your behalf
- Response Dashboard: Aggregates vendor responses for easy comparison
- Edit Anytime: Update your wedding details whenever needed
- Frontend: Next.js 15 (App Router), TypeScript, Tailwind CSS
- Backend: Next.js API Routes, Prisma ORM
- Database: PostgreSQL (Supabase)
- Authentication: Supabase Auth (@supabase/ssr) - email/password, Google OAuth, magic links, password reset
- AI: Claude (Anthropic SDK) for vendor email generation and matching
- Email: Resend API (batch sending, webhook delivery tracking)
- Rate Limiting: Upstash Redis (with in-memory dev fallback)
- Error Monitoring: Sentry (@sentry/nextjs v10)
- Hosting: Vercel
- Testing: Vitest (121 unit tests) + Playwright (16 E2E tests)
- Linting: ESLint + Prettier + auto-formatting
Current Phase: Production Ready β
Completed Features:
- β Authentication (Supabase Auth β email/password, Google OAuth, magic links, password reset)
- β User Interface (Header, user menu, dark mode, login/logout)
- β Multi-step form questionnaire (TypeForm-style UI)
- β Edit wedding details (update anytime from dashboard)
- β AI-powered vendor matching (88+ vendors across 5 regions)
- β Email outreach system (generate & send personalized emails with retry logic)
- β Dashboard (empty state, wedding summary, response tracking)
- β Vendor database (Newcastle, Hunter Valley, Sydney, Blue Mountains, South Coast)
- β Resend webhook tracking (delivery, open, bounce events)
- β Rate limiting (Upstash Redis with in-memory dev fallback)
- β Error monitoring (Sentry with per-page error boundaries)
- β Security headers (HSTS, X-Frame-Options, CSP, Referrer-Policy)
- β Input validation (server-side date/budget/email validation, prompt injection protection)
- β Testing suite (121 unit tests + 16 E2E tests)
- β Production deployment (Vercel + Supabase)
- Node.js 20+
- PostgreSQL (local or cloud)
- Claude API key (Anthropic)
-
Clone and install dependencies
npm install
-
Set up environment variables
cp .env.example .env.local
Edit
.env.localand add:DATABASE_URL: Your PostgreSQL connection string (Supabase)ANTHROPIC_API_KEY: Your Claude API keyNEXT_PUBLIC_SUPABASE_URL: Your Supabase project URLNEXT_PUBLIC_SUPABASE_ANON_KEY: Your Supabase anon keyRESEND_API_KEY: Your Resend API key (for email)EMAIL_FROM: Your verified sender emailRESEND_WEBHOOK_SECRET: Your Resend webhook signing secretUPSTASH_REDIS_REST_URL: Upstash Redis URL (optional in dev)UPSTASH_REDIS_REST_TOKEN: Upstash Redis token (optional in dev)NEXT_PUBLIC_SENTRY_DSN: Sentry DSN (optional in dev)SENTRY_ORG: Sentry organization slugSENTRY_PROJECT: Sentry project nameSENTRY_AUTH_TOKEN: Sentry auth token for source maps
-
Set up database
npm run db:push
-
Seed vendor data
npm run db:seed:all-vendors
Or seed individual regions:
npm run db:seed:newcastle npm run db:seed:hunter-valley npm run db:seed:sydney npm run db:seed:blue-mountains npm run db:seed:south-coast
-
Run development server
npm run dev
wedding-plan/
βββ app/ # Next.js 15 App Router
β βββ api/ # API routes
β β βββ auth/ # Auth sync & logout
β β βββ chat/ # Claude AI chat
β β βββ outreach/ # Email generation & sending
β β βββ vendors/ # Vendor matching
β β βββ webhooks/resend/ # Resend delivery webhooks
β β βββ wedding/ # Wedding CRUD
β βββ auth/ # Login, signup, reset-password, update-password
β βββ dashboard/ # User dashboard pages
β βββ questionnaire/ # 5-step form
β βββ outreach/ # Email preview & sending
β βββ vendors/ # Vendor browsing
β βββ global-error.tsx # Global Sentry error boundary
β βββ */error.tsx # Per-route error boundaries (auth, dashboard, chat, questionnaire, outreach)
βββ components/ # React components
βββ lib/ # Core utilities
β βββ supabase/ # Supabase Auth clients
β βββ email/ # Resend integration + email generation
β βββ auth-helpers.ts # Auth utilities + redirect validation
β βββ claude.ts # Claude API
β βββ env-validation.ts # Environment variable validation
β βββ input-validation.ts # Input sanitization + prompt injection protection
β βββ rate-limit.ts # Upstash Redis rate limiting
β βββ retry.ts # Exponential backoff retry utility
β βββ vendor-matching.ts # Matching algorithm
β βββ prisma.ts # Database client
βββ prisma/
β βββ schema.prisma # Database schema
βββ scripts/ # Database seeding (5 regions)
βββ e2e/ # Playwright E2E tests
βββ test/ # Vitest unit tests
β βββ lib/ # Utility tests (input-validation, retry, rate-limit, etc.)
β βββ api/ # API route logic tests
β βββ components/ # Component tests
βββ instrumentation*.ts # Sentry instrumentation
βββ sentry.*.config.ts # Sentry server/edge config
βββ playwright.config.ts # Playwright E2E config
Authentication & User Management:
- Supabase Auth (email/password, Google OAuth, magic links)
- Password reset flow (request + update pages)
- User menu with avatar/initials
- Login/logout UI with dropdown
- Session management across pages
- Open redirect protection
Wedding Planning Flow:
- 5-step form questionnaire (Date, Location, Guests, Budget, Style)
- Edit wedding details anytime
- Server-side input validation (past dates, budget floors, guest count clamping)
- Dashboard empty state with clear CTAs
- Wedding summary card on dashboard
- AI-powered vendor matching
Vendor Database:
- 17 Newcastle vendors
- 28 Hunter Valley vendors
- 17 Sydney vendors
- 12 Blue Mountains vendors
- 14 South Coast vendors
- Total: 88+ vendors across 5 regions
Email Outreach:
- Vendor selection UI with checkboxes
- AI-powered personalized email generation (with retry logic)
- Batch email sending via Resend API (with retry logic)
- Email preview & editing before sending
- Email validation before sending
- Only creates outreach records for successful sends
Dashboard & Tracking:
- Outreach statistics (contacted, delivered, opened, responded)
- Resend webhook integration (delivery, open, bounce, complaint tracking)
- Response tracking table
- Manual response entry
- Individual vendor detail pages
Reliability & Security:
- Upstash Redis rate limiting (with in-memory dev fallback)
- Sentry error monitoring (client, server, edge)
- Per-page error boundaries (auth, dashboard, chat, questionnaire, outreach)
- Global error boundary
- Retry with exponential backoff (Claude API, Resend API)
- Security headers (HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy)
- Input sanitization and prompt injection protection
Quality & Testing:
- 121 unit tests (Vitest + React Testing Library)
- 16 E2E tests (Playwright β homepage, auth, navigation, security headers)
- ESLint + Prettier with auto-formatting
- TypeScript strict mode
- Production deployment (Vercel + Supabase)
- Loading states (
loading.tsxfor key routes) - Content Security Policy header
- Quote comparison tools
- Budget tracker
- Guest list management
- Visit the site - See beautiful landing page
- Sign in - Click "Sign In" in header, use Google or email/password
- Dashboard redirect - See empty state: "We need details about your special day"
- Complete questionnaire - Click "Complete Wedding Details"
- 5 steps with visual progress bar
- Large, easy-to-click buttons
- Smooth animations between steps
- Data saves automatically at the end
- View dashboard - See wedding summary with your details
- Browse vendors - View AI-matched vendors for your preferences
- Select vendors - Choose who to contact (checkboxes)
- Generate emails - AI creates personalized messages
- Send outreach - Batch send via Resend API
- Track responses - Dashboard shows delivery, open, response status
- Go to Dashboard
- Click "Edit Details" button (next to "Your Wedding")
- Form pre-fills with current selections (highlighted)
- Update any answers
- Saves automatically on completion
Essential:
- QUICK_START.md - Get started in 3 minutes
- DEPLOYMENT.md - Deploy to production
- TESTING_PLAN.md - Testing strategy
- BUGS.md - Known issues and tracking
Comprehensive Documentation:
- docs/INDEX.md - Complete documentation index
- docs/product/PRD.md - Product requirements
- docs/architecture/ARCHITECTURE.md - Technical architecture
- docs/guides/VENDOR_DATABASE_STRATEGY.md - Vendor data expansion
- VENDOR_DATABASE_EXPANSION.md - Hunter Valley expansion summary
Status: β Production Ready (March 2026)
Live URL: wedding-plan-v2.vercel.app
Coverage:
- Newcastle, NSW - 17 vendors
- Hunter Valley, NSW - 28 vendors
- Sydney, NSW - 17 vendors
- Blue Mountains, NSW - 12 vendors
- South Coast, NSW - 14 vendors
- Total: 88+ vendors across 5 regions
# Run unit tests
npm test
# Run tests with coverage
npm run test:coverage
# Run E2E tests (starts dev server automatically)
npm run test:e2e
# Run E2E tests with UI
npm run test:e2e:ui
# Lint code
npm run lintTest Coverage (137 total tests):
- β 121 unit tests (Vitest) β input validation, retry logic, rate limiting, env validation, auth helpers, vendor matching, API route logic
- β 16 E2E tests (Playwright) β homepage, auth pages, navigation redirects, security headers
- β Component tests (VendorCard)
- β API logic tests (webhook events, wedding data transformations, email generation)
# Start dev server
npm run dev
# Lint and fix
npm run lint:fix
# Format code
npm run format
# Run tests
npm test
# Build for production
npm run build
# Start production server
npm start# Generate Prisma Client
npm run db:generate
# Push schema to database
npm run db:push
# Open Prisma Studio
npm run db:studio
# Seed all vendors (5 regions)
npm run db:seed:all-vendors
# Seed individual regions
npm run db:seed:newcastle
npm run db:seed:hunter-valley
npm run db:seed:sydney
npm run db:seed:blue-mountains
npm run db:seed:south-coast
# Test database connection
npm run db:testThis is currently a solo project. Contributions welcome after MVP launch.
Private - Not yet open source
- Password reset flow β full reset-password and update-password pages
- Silent email failure fix β only tracks successfully sent emails
- Upstash Redis rate limiting β persistent across serverless cold starts (in-memory dev fallback)
- Sentry error monitoring β client, server, and edge runtime with per-page error boundaries
- Security headers β HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy
- Input validation β server-side date/budget/guest validation, email format checking, prompt injection protection
- Retry logic β exponential backoff with jitter for Claude API and Resend API calls
- Resend webhooks β automatic delivery, open, bounce, and complaint tracking
- Vendor expansion β 3 new regions (Sydney 17, Blue Mountains 12, South Coast 14) = 88+ total vendors
- All questionnaire locations covered β every location option now has matching vendors
- 121 unit tests (Vitest) β input validation, retry, rate limiting, env validation, auth helpers, vendor matching, API logic
- 16 E2E tests (Playwright) β homepage, auth pages, navigation redirects, security headers
- Total: 137 tests, all passing
Built with care for couples planning their dream wedding in Australia