heapzilla · event planning · v1 spec

eventa

Personal event planning, without the bloat — for your dinner party, family trip, wedding, birthday. Multi-user from day one so the people planning it together actually plan it together.

5 MVP features 13 total · v1 scope android · fastapi · websockets · fcm

a presentation of the requirements and tech plan, distilled from a multi-round discussion with the codex CLI.

The problem

Personal events are not what Eventbrite and Partiful are built for. You don't need ticketing. You don't need 12 RSVP form fields. You need who's coming, what's next, and how much it'll cost — and you need your partner / family / best friend to be in there with you.

The opinion

Build a tight five-feature MVP, refuse most of the obvious extensions, and stay mobile-first. Make it real multi-user from the start — Alex marking 'venue booked' and Gerda seeing it within seconds is the whole point.

multi-user · the spine

What "shared" actually means

Real shared state, not screenshots. Six pillars that earn the word.

MVP · ships first

Five features that earn the install

The smallest version where eventa is genuinely useful. If only these five exist, the app is already worth opening on event day.

  1. 01

    Event Brief

    title · dates · location · size · rough budget

    why · Without an anchor, the rest of the app is a pile of tasks with no shared definition of success.

  2. 02

    Guest List with RSVP

    guests · households · dietary · lodging

    why · Most planning decisions depend on headcount — and headcount is only useful when it includes real constraints.

    android Import from device Contacts. Tap-to-call / SMS / email.

  3. 03

    Planning Checklist

    tasks · category · owner · due date

    why · The app must help users know what to do next, not just store event data. Includes packing/supply lists.

  4. 04

    Deadline Timeline

    overdue · this week · this month · later

    why · Event stress comes from late decisions, not from lack of task storage. Reminders are the app's operating system.

    android Local reminders for personal due-dates. Optional one-tap export to device Calendar.

  5. 05

    Budget Buckets

    estimated vs actual · paid-by · per category

    why · Money is one of the fastest ways casual plans become stressful, and even rough visibility is valuable.

    android Snap a receipt with the camera, attach to the line item.

android-native · for free

What the platform brings

Round 4 made these obvious — going native unlocks integrations a web app would have to build (or fake) from scratch.

v1 expansion · after MVP

Eight more, ranked by what hurts to skip

These don't ship on day one. They ship as the MVP gets used and the gaps become obvious.

  1. 06

    Household-Based Invitations

    one outreach covers a couple, family, or shared lodging group

    why · Personal events are rarely individual-ticket affairs; household grouping avoids messy duplicate communication.

  2. 07

    Personal Cost Ledger shared cost tracker → personal cost ledger (round 4)

    who paid for what · who owes whom

    why · Essential for trips, group dinners, and family events. Track across event members + free-text labels; settlement is acknowledged manually, no money movement.

  3. 08

    Menu & Dietary Planner

    meals · drinks · portions · grocery quantities

    why · Food is often the center of personal events; this prevents both overbuying and excluding guests.

  4. 09

    Guest Communication Log

    save-the-date · invite · reminder · address request

    why · Manual entries plus quick send-SMS / send-email buttons. Android permissions block automatic capture.

  5. 10

    Run of Show

    event-day schedule with times, owners, locations

    why · Even casual events benefit from knowing when food arrives, people show up, speeches happen.

  6. 11

    Post-Event Wrap-Up

    final costs · vendor feedback · what to repeat

    why · Each event teaches the next one.

  7. 12

    Venue / Vendor Contact Sheet added in critique

    addresses · phone · booking refs · cancellation terms

    why · Personal events depend on this fast.

  8. 13

    Responsibility Assignment added in critique

    every task / cost / run-of-show item has a clear owner

    why · Owner can be a real event member (they see it) or a free-text label like "the caterer".

v1 must-have · non-negotiable

V1 infrastructure — non-negotiable

The expensive layers a multi-user event-planning app cannot ship without. None of these are 'after MVP'.

tech

Stack — boring on purpose

Backend slots into the existing tiny1 deploy stack (nginx + systemd + Let's Encrypt). Mobile reuses the same Compose/Material 3 setup as the other heapzilla android apps.

backend

Language
Python 3.12
Framework
FastAPI (async, built-in WebSockets)
ORM
SQLAlchemy 2.x + Alembic
DB
PostgreSQL 16 (dedicated container, modeled on the twk pg setup)
Real-time
WebSockets, per-event rooms
Auth
Passwordless magic-link via Resend
Push
Firebase Cloud Messaging (FCM)
Hosting
tiny1 → nginx → gunicorn+uvicorn workers

android

Language
Kotlin 1.9+
UI
Jetpack Compose + Material 3
State
ViewModel + StateFlow
Navigation
Navigation-Compose (typed routes)
HTTP / WS
Retrofit + OkHttp (also WS client)
Local cache
Room (mirror of active event, not source of truth)
Push
Firebase Messaging SDK
Min SDK
24 (Android 7.0)
cut

What we deliberately removed

  • Decision Ledger Notes-with-ceremony — fold into Brief / Run-of-Show / Checklist items.
  • Packing & Supply Lists (separate surface) Merged into Checklist as a category.
  • Polling fallback for real-time User: "polling is stupid." WebSockets only.
  • Offline editing Read-cached, write-online. WS-on-resume + change feed preserves most of the value.
  • Web client Android only. Tiny landing page for invite-acceptance is fine; no full web app.
  • Viewer role / per-field permissions Owner + editor only in V1.
  • OAuth / passwords Magic-link only. Account recovery = email recovery.
  • OT / CRDT conflict merging Last-write-wins with version stamping. Conflict surface, not silent merge.
  • User-facing audit timeline Backend stores `created_by` / `updated_by` / `change_log`; no UI for browsing in V1.
  • SMS as a channel Email only via Postmark.
  • Notification preferences UI One push class per change class; users mute via OS.
not goals

What this app refuses to be

  • Not a SaaS aimed at the general public — personal scale.
  • Not multi-tenant for the eventa operator either.
  • Not public RSVP links — RSVP managed by event members.
  • Not a project-management tool — categories are simple labels.
  • Not a payment platform — paid_by refers to a member or a label.
  • Not a tablet / wear / TV variant in V1. Phone portrait first.

Status — spec complete · awaiting build kickoff

Functional + technical specs are at heapzilla-ai/eventa/REQUIREMENTS.md and TECHNICAL.md. Codex transcripts that produced this are checked in alongside, for traceability.

phase 1 of 9 starts with · deploy/projects/eventa-api.json

until then, read the spec · requirements.md · technical.md · plan.md