arrow_back Back to Projects
vue

Ceremly — SaaS Platform for Event Invitation & RSVP Management

Ceremly is a SaaS platform that centralizes attendance management for private events in the Italian market — weddings, birthdays, graduations, and celebrations. Organizers import guests via CSV or collect new registrations through a public landing page, track responses in real time from a unified dashboard, and follow up with non-respondents in one click via email or WhatsApp. Both landing pages are fully customizable through a drag & drop editor inspired by Shopify Themes, with AI-powered generation built in.

Timeline

2026

Links

deployed_code

Ceremly — SaaS Platform for Event Invitation & RSVP Management

The Brief

Introduction

Ceremly was born out of a straightforward observation: in Italy, people organizing private events — weddings, milestone birthdays, graduation parties — still manage attendance confirmations in the most chaotic way imaginable. Scattered phone calls, individual WhatsApp messages, manually updated spreadsheets. There's no visibility into who has responded and who hasn't, and following up with non-respondents is both tedious and socially awkward.

I designed and built Ceremly to solve this problem end-to-end: a SaaS platform that centralizes the entire flow, from guest registration through attendance confirmation and automated follow-up reminders via email and WhatsApp.


What the product does

Organizers create their event and can manage guests through two complementary paths: importing a guest list via CSV (each guest receives a personalized RSVP link) or publicly sharing a registration landing page on social media or group chats. Both flows converge into a single dashboard where all guests are visible, filterable, and manageable in one place.

The product's core differentiator is the reminders area: a dedicated section that surfaces every non-respondent and offers 1-click tools to send follow-up messages via email or WhatsApp deep links, using customizable templates with automatically interpolated dynamic variables (guest name, RSVP link, event date, deadline).

Both landing pages — the public registration page and the personalized RSVP page — are fully customizable through a drag & drop editor inspired by Shopify Themes, featuring reorderable sections, a visual configurator per section, live preview, and AI-powered generation (Mastra with GPT-4o-mini).


Technical stack and architecture

The project is built entirely on Nuxt 4 with Vue 3 (strict TypeScript, Composition API, <script setup>), with a backend architecture based on thin controllers and a dedicated service layer that keeps API routes lean while delegating all business logic to purpose-built services. The database is PostgreSQL managed with type-safe Drizzle ORM, using UUID v7 and versionable migrations.

Authentication is handled by Better Auth v1.4.5 with email/password, Google OAuth, and 2FA, with sessions cached in Redis. Payments are integrated via Creem (Merchant of Record, native Better Auth plugin), with auto-registered webhooks and full subscription lifecycle management. Files are stored on Cloudflare R2 with SHA-256 deduplication, magic bytes validation, and per-user rate limiting. Transactional emails use Resend with internationalized React Email templates.

The landing editor is built on vuedraggable and a schema-driven configuration system: sections and their fields are defined in a single Zod schema file that drives both validation and the dynamic rendering of the configuration forms in the editor. The Mastra AI integration generates complete LandingPageData objects through validated structured output.

Security is treated as a first-class requirement: CSP, HSTS, granular rate limiting, spam protection with honeypot and timing validation, data isolation with RBAC (owner/editor/viewer), Zod validation on every input, and audit logging across all write operations.

Technical Stack

code vue
code NeonDB
code Creem
code drizzle ORM
code nuxt
code postgresql