OurVows: Event pages and RSVP
CLIENT
OurVows (independent product)
ROLE
Founder & full-stack
DURATION
2025 to present
TECH_STACK
PROJECT_URL
view_siteMonorepo
API + web
SSR + API
Architecture
Live
Product
Plans
Entitlements
CONTEXT
People throwing a celebration still need a sane page online: something guests trust, a quick RSVP, and a way for hosts to see replies without living in spreadsheets. OurVows tries to be that: nice pages up front, boring data and permissions behind them.
THE CHALLENGE
One pretty page is easy. The work is doing it again for every event, keeping guests on a stable path without forcing logins everywhere, respecting plan limits in analytics, and keeping motion-heavy templates fast. I wanted one small system: one API shape, one web app, templates that do not rot as features land.
ARCHITECTURE & APPROACH
Nuxt handles marketing, the creator side, and public event views. Nest handles auth, events, RSVP writes, and analytics. The database sits behind TypeORM with real migrations in prod. Validation, throttling, and consistent errors stay on the server. The browser holds guest session continuity; owners get a typed creator session in the app.
Monorepo boundaries
Apps deploy separately but share types and habits. Public JSON stays explicit so templates never depend on server details we would regret later.
Template-driven public pages
Events resolve a template key to a registered presentation component so new looks ship without rewriting core RSVP logic.
Guest session continuity
Browser storage backs a stable guest key across visits so RSVP edits behave predictably without exposing private account details in marketing copy.
Entitlements by plan
Heavier analytics and similar features go through one gate so the UI never promises what the API will refuse. No copy-pasted limits in two repos.
OUTCOMES
It ships: public guest flows on one side, authenticated creator tools on the other. Heavy templates still respect reduced motion; API payloads stay predictable for the client. I am not putting traffic or revenue here; this note is about how it is built, not scoreboard stats.
LEARNINGS
- If the product looks simple, the API and permission model still need to be nailed early. Bolting entitlements on later hurts.
- RSVP is half UX and half data. The UI can feel light; the server still validates everything.
- A template registry only helps if adding a template is dull. If every new look risks RSVP core, the abstraction failed.
- Owning frontend and backend speeds you up until it does not. Shared error shape, sane pagination defaults, and logs you can read matter from the start.