PetalBoard is a modern, mobile-friendly alternative to other platforms focused on coordinating events. Hosts can create an event in minutes, share a public link, and manage signups without forcing guests to create accounts.
- 🎉 Event creation – Collect title, date, description, and location in one form.
- 🧺 Slot management – Add, edit, and remove required items while tracking remaining capacity.
- 🔐 PIN-secured signups – Guests reserve a slot with their name, optional email, and 4–6 digit PIN. The PIN is hashed using scrypt before storage.
- 🔁 Guest self-service – Guests can edit or cancel their signup later using the signup ID and PIN.
- 🧮 Overbooking prevention – Server-side validation ensures slots never exceed their quantity.
- 🖨️ Manage dashboard – Token-protected view for organizers to edit event details, slots, and remove signups.
- SvelteKit for routing, server actions, and templating
- Prisma ORM with SQLite (swap for Postgres when deploying)
- TypeScript everywhere for type safety
- PNPM for dependency management
-
Install dependencies
pnpm install
-
Configure the database Copy the environment example and adjust if necessary.
cp .env.example .env
By default the project stores data in
prisma/dev.db(ignored by git). -
Generate the Prisma client and run migrations
pnpm exec prisma migrate dev -
Start the dev server
pnpm run dev
Open the logged URL (usually
http://localhost:5173).
pnpm run dev # Start SvelteKit in dev mode
pnpm run build # Build the production bundle
pnpm run preview # Preview the production build
pnpm exec prisma studio # Inspect the database UITo build and run PetalBoard in a production-style container you only need Docker and PowerShell. The
included deploy.ps1 script clones the repository (if needed), builds the Docker image, and runs the
container on a rarely used port (4173). Persistent SQLite data is stored in a data/ directory next
to the cloned repo so it survives restarts.
git clone https://github.com/petalboard/petalboard.git
cd petalboard
./deploy.ps1After the script finishes, visit http://localhost:4173. To stop and remove the container later, run:
docker rm -f petalboard-appYou can change the published port by supplying -Port <port> to deploy.ps1.
src/
lib/
server/ # Prisma client and validation helpers
utils/ # Formatting helpers
routes/
+page.svelte # Landing page
create/ # Event creation flow
event/[code]/ # Public event view and signup action
event/manage/[token]/ # Organizer dashboard
manage-signup/ # Guest lookup/edit page
api/signups/{lookup,update,cancel} # JSON endpoints for guest actions
prisma/
schema.prisma # Database schema
- Signup PINs are hashed with scrypt using Node's
cryptomodule and per-signup salts. - All mutations validate input with Zod.
- Organizer dashboards are protected with unique manage tokens generated at event creation.
Enjoy planning your next event without the clutter! 🌸