Bodados — Wedding coordination SaaS platform
Early access now live at bodados.com. In production with real customers. AI content pipeline generating articles and social posts autonomously.
Visit BODADOSChallenge
The Spanish wedding market moves ~4B EUR/year. Couples organize weddings with a WhatsApp group, three spreadsheets and phone notes. Existing portals are vendor directories with contact forms. None solve the real operational problem.
Solution
Coordination platform with customizable digital invitations, integrated RSVP, guest management with visual seating plan, smart budgeting with scenario simulator, collaborative Party Cam and autonomous AI content system.
Architecture
Next.js 15 (App Router), Neon PostgreSQL (40+ tables), Supabase (auth + storage), Netlify, Together AI (Llama 3.3-70B + FLUX.1-schnell), Stripe, 6 GitHub Actions workflows.
Technologies
- Next.js 15
- TypeScript
- Tailwind CSS
- Neon PostgreSQL
- Supabase
- Together AI
- Stripe
- GitHub Actions
- Storybook
The problem
Couples don’t want to “manage their wedding.” They want to not think about logistics. But the reality is they need to coordinate 80 to 150 people with different diets, pending confirmations, tables that don’t add up and a budget that always overflows.
The hypothesis was simple: give the couple a single well-designed tool that centralizes digital invitations, RSVP, guest list and budget, and they stop losing hours and start enjoying the planning.
The product
Digital invitations
The core of the product. Nine design templates with their own editorial identity. Not variants of the same layout: BohoSunset for outdoor weddings, EmeraldCrest for country estates, NewYorkLuxury for cosmopolitan couples, RetroCocktail for the festive ones, RivieraDorada for coastal weddings, VogueLuxury for black-and-white luxury.
Each template accepts full customization: names, date, venue, dress code, event timeline, integrated map, hero photo with focal point adjustment. The timeline uses editorial language: “The Feast” instead of “Dinner”, “The Ceremony” instead of “Ceremony.” Tone matters.
“The Feast” instead of “Dinner” is not a detail. It is the difference between an invitation that looks like a form and one that feels like a special moment.
Invitations are published at custom URLs like bodados.com/the-wedding-of-ana-and-jorge, with a customizable subdomain from the dashboard. Each template is a React component with its own CSS Modules, design tokens and variants. There is no generic “theme engine”: each one has its own design judgment.
Integrated RSVP
Guests confirm attendance, plus-ones, dietary restrictions and custom questions directly on the invitation. No friction, no account needed. The dashboard shows real-time confirmations, pending, declined, diet breakdown and open-rate analytics. Automatic reminders to those who haven’t confirmed.
Guest management and seating plan
Full list with filters by table, confirmation, diet, family group. Flexible plus-one management. Visual seating plan with drag and drop, conflict detection (ex-couples, families who don’t speak) and PDF export for catering.
Smart budgeting
Four modules: Cashflow (actual spend vs budget by category), Predictive (projected final spend based on confirmations), What-if (scenario simulator: what if I add 20 guests, what if I switch caterers) and Audit (log of every change with timestamp).
Party Cam
Collaborative camera for the wedding day. Guests scan a QR and upload photos in real time. The couple moderates from the dashboard. At the end of the event a downloadable album is generated.
After-wedding
Vendor review management, final attendance summary, data export for the memory book. Blog integration to publish the wedding story as SEO content.
Technical architecture
Key decisions
Next.js 15 App Router was deliberate. Server Components for public invitations (better SEO, loads in ~1.2s on 3G without JavaScript), Client Components only where there is real interactivity. The dashboard uses Server Actions instead of a separate REST API: less code, better DX, end-to-end type safety.
Two databases. Neon PostgreSQL for transactional product data (40+ tables, complex seating and budget queries). Supabase for auth with native RLS and image storage. Not gratuitous complexity: each one does what it does best.
Design token system
Design tokens in CSS custom properties with semantics: --color-text-primary, --color-border-subtle, --spacing-section. The token system in variants.css lets global changes (type scale, spacing) propagate to all templates without touching them individually. Full Storybook with 9 templates x 6+ stories with real permutations.
AI content system
Autonomous blog pipeline
Bodados generates SEO content autonomously. The pipeline runs every hour in GitHub Actions:
Neon queue, Together AI (Llama 3.3-70B), writer agent drafts the article, SEO Guardian audits keywords, H2 structure and density, Human Score detects if it sounds like AI and rewrites if it scores low, Editor in Chief gives the verdict: publish, rewrite or discard. Then upsert to Supabase blog_posts.
LLMs generate useful content if you give them briefs with editorial judgment, not if you ask them to “write an article about weddings.” The result is not SEO spam: it is articles that actually help the reader.
Articles are generated with prior editorial briefs using real data. Example: “Honest comparison: Excel, WhatsApp and Bodados for managing guests. Table with criteria: real-time updates, diets, plus-ones, reminders, data export, cost. Be honest about when Excel is enough and when it is not.”
Social media autopilot
Fully autonomous publishing system across Instagram, LinkedIn, Twitter and Pinterest. The approval flow goes through Telegram: the system generates the post and sends a preview to the bot. The editor approves, rejects or requests changes. Images are generated with FLUX.1-schnell and composited with Pillow: logo, brand typography, color overlay. Not stock photos: images with coherent visual identity.
SEO from code
The site had zero Google presence at launch. Full audit: unique metadata per route with generateMetadata(), structured JSON-LD (Organization + SoftwareApplication + BlogPosting + BreadcrumbList), blog with functional category filtering via indexable URLs, dynamic sitemap with generated posts and destination landing pages.
Operations
CI/CD with 6 active GitHub Actions workflows: blog generation every hour, Supabase backup every 12h (pg_dump with 90-day retention), social post generation on Mondays at 9am, reactive feed scanning every 6h.
System health dashboard with integration status, latest agent runs and recent errors. Audit log of every user action. RLS on Supabase, service role key server-side only, webhooks with signature validation, magic links with no stored passwords.
Demo mode and conversion
The product has a functional demo mode: anyone can explore the full dashboard without creating an account, using real data from a fictional event. Designed for conversion: users try before they sign up.
What I learned
On product: Couples want to not think about logistics. Language matters as much as functionality.
On architecture: Two databases is not unnecessary complexity if each one solves a different problem well. Unnecessary complexity is having one database that does everything poorly.
On AI in product: A pipeline of agents (writer, SEO, human score, editor) produces publishable results because each agent has a scoped role, not because the LLM is magic.
On automation: A system that generates Instagram posts, sends them to Telegram for approval and publishes automatically is not a toy. It is a competitive advantage. A solo founder cannot publish consistently. A system can.