Changelog

What's new.

A plain-language record of every Listo release, audience-tagged so hosts and guests can scan for the parts that affect them.

Currently running:v0.31.0·3317fb9·production

v0.31.0

Fix: Remove now actually removes

  • Removing items works reliably

    Fixed a bug where clicking Remove and confirming on a task, shift, volunteer, or schedule item closed the dialog but left the item on the list — the delete was being cancelled before it could run. These now delete reliably.

    hostadmin

v0.30.0

Shopping list: plan against a what-if headcount

  • Simulate a different guest count

    The shopping list still computes from your live RSVPs by default, but a new "Plan against a different headcount" panel lets you override the adults/children/infants count with a hypothetical and instantly see every quantity, purchase amount, and cost recompute against it. Your actual RSVP numbers stay visible for reference, and "Reset to actual" returns to the live view. The CSV export honors the simulation too.

    host

v0.29.0

Sign in with Google using any of your emails

  • Sign in with Google — even with a different email

    If your Google account uses a different address than the one you were invited with, you can now add it as an additional sign-in email and log in with Google. Open Account, add the address, and click the confirmation link we email you. Once confirmed, Google (or Microsoft) sign-in lands on your existing account instead of creating a new one.

    hostadmin
  • Manage your sign-in emails

    A new Account page lists your primary email plus any additional confirmed or pending addresses. Add or remove them anytime; each new address is confirmed by a one-time emailed link.

    hostadmin
  • Owners can pre-register a member's sign-in email

    On the Members page, expand a member to add an alternate sign-in email for them — useful when onboarding someone whose Google address differs from their invite email. They confirm it via an emailed link, so their very first Google login just works.

    admin
  • Reset your password from the sign-in page

    Added a "Forgot your password?" link on sign-in. Enter your email, get a one-time link (valid 1 hour), and choose a new password — for anyone who signs in with a password instead of Google.

    hostadmin

v0.28.0

Merge duplicate people

  • Find & merge duplicate people

    New tool under People → Merge duplicates that finds records that are really the same person (it groups by name and flags ones sharing a phone or household). Pick which record to keep and merge in one click — guest history, volunteer roles, and task assignments all move to the record you keep, and nothing is lost. We also cleaned up the existing list: 76 duplicate records left over from the original import were consolidated.

    hostadmin

v0.27.1

Families → Households (terminology)

  • Households (not Families)

    Renamed the persistent rolodex layer from "Family" to "Household" — fits couples, roommates, and single-person invites that aren't really families. The directory moved to /admin/households (replaces the old redirect-to-rsvps stub). People-tab on the Person edit overlay is now "Household", the dropdown is "Belongs to household". No data migration — only labels and URLs changed.

    hostadmin

v0.27.0

Customize role permissions and sidebar visibility

  • Roles module shipped

    /admin/roles lets you customize which capabilities each of the four roles (OWNER / HOST / HELPER / VIEWER) grants within this tenant — and which sidebar entries to hide cosmetically per role. Pattern lifted from mybimah's System Roles editor: Permissions tab with grouped checkboxes, Navigation Visibility tab showing every sidebar entry. Save = creates a TenantRoleConfig row that replaces the codebase defaults for that role; Reset to defaults = deletes it.

    admin
  • Lockout protection on OWNER

    OWNER always retains MANAGE_ROLES, MANAGE_MEMBERS, and MANAGE_TENANT_SETTINGS regardless of what's checked — the editor disables those boxes on the OWNER row and the server force-augments the saved list. Means you can't accidentally lock yourself out of role management.

    admin
  • Custom role display names

    Rename roles per tenant — "Helper" → "Coordinator", etc. The override surfaces on the admin header and member list. Permission keys stay stable (OWNER / HOST / HELPER / VIEWER) so capability checks aren't affected.

    hostadmin

v0.26.0

People + Families directory · multi-assignee tasks · linking

  • Persistent People + Families rolodex

    /admin/people and /admin/families — tenant-scoped, year-agnostic records. Guests, Volunteers, and Members are now "roles" on a single Person, not three separate types. CRM notes live on both Person and Family. Existing data was deduplicated in place: 500 Persons and 276 Families now sit underneath the 886 Guest + 30 Volunteer + 514 Household rows you already had.

    hostadmin
  • Tasks support multiple assignees

    Assign a task to one or more Members/Volunteers. The task modal Main tab now has a searchable multi-select of People. Lists show "First Last +N" when multiple. "Mine" filter on the prep timeline walks via your Person record so it works the same regardless of how the task was assigned.

    host
  • Promote a Person to Member in one click

    Open any Person on /admin/people → Activity tab → Promote to Member. Creates the User account + TenantMembership; the recipient signs in via Google or via password-reset (no automatic invitation email yet — use /admin/members for that flow when ready).

    admin
  • Punchbowl import now populates the rolodex too

    Importing a Punchbowl CSV now writes Person + Family rows alongside the per-event Guest rows, deduped by email across years. So future imports keep the rolodex in sync without a separate migration step.

    hostadmin

v0.25.7

Task edit modal stops showing stale values on save

  • Saved assignee no longer snaps back to Unassigned

    Picking a new assignee on a task and clicking Save was visually reverting the dropdown to Unassigned (the DB had the right value — only the open modal was wrong). The modal now closes on a successful save so you see the updated task in the underlying list. Re-open it to make more edits.

    host

v0.25.6

Punchbowl import: clearer in-flight feedback

  • Full-screen "Importing…" overlay during commit

    When you commit a Punchbowl import (which can take 20–60 seconds for a 250-household list), a centered overlay appears with a spinner, the household count, and a live elapsed-time counter. Page interactions are blocked until the import finishes so you can't accidentally double-fire it.

    host
  • Success banner on the destination page

    After the import completes you land on /admin/rsvps with a green banner confirming how many households were created vs matched-as-existing. No more wondering whether the import actually worked.

    host

v0.25.5

Prep timeline: default Mine on + fixed assignee dropdown

  • Prep timeline opens on Mine by default

    When you land on /admin/tasks/timeline signed in, it now filters to your assignments by default. Toggle Mine off, pick someone else from the dropdown, or hit "clear filters" to see everything.

    host
  • Assignee dropdown actually filters now

    Picking a name from the assignee dropdown was silently no-oping due to a URL-state race. The dropdown now atomically updates the assignee + turns Mine off in a single navigation, so the filter applies on the first click.

    host

v0.25.4

Tabbed task edit modal

  • Task edit organized into tabs

    The edit-task modal now splits its fields across Main (title, description, assignee, volunteer-can-self-assign), Scheduling (status, priority, prep window, due date, estimated minutes), and Details (station, location, role, supplies). Saving still commits everything regardless of which tab is open. Required-field validation auto-routes to the right tab if you forgot something.

    host

v0.25.3

Interactive prep timeline

  • Click any task on the timeline to edit it

    Tasks on /admin/tasks/timeline are now clickable. Tapping a row opens the same edit modal as the tasks page — change status, priority, due date, assignee, and supplies in place. Changes revalidate the timeline so the bucket counts update immediately.

    host
  • Mine + assignee filters on the prep timeline

    Sticky toolbar with a "Mine" toggle (shows only tasks assigned to you), an assignee dropdown to scope to anyone else on the tenant, and a text search across title / station / supplies / assignee name. Filter state lives in the URL so refresh + back/forward + bookmarking all work.

    host

v0.25.2

Due dates computed from prep windows

  • Seed from templates now fills in due dates

    Hitting "Seed from templates" on a task list now translates each template's prep window (T-21d, T-7d, Day of BBQ, etc.) into a real calendar date based on the event's date. Existing tasks with a prep window but no due date get backfilled automatically — no need to edit each one.

    host
  • Prep timeline shows the actual dates

    /admin/tasks/timeline now puts the calendar date next to each prep-window bucket header ("T-7d · Jun 20"), sorts buckets earliest-first, and shows a "3 done" / "15 to do" split per bucket so you can scan progress without expanding rows.

    host

v0.25.1

Task templates import

  • Import last year's tasks as templates

    New script (npm run db:import:task-templates) reads the existing 2025-tasks.json intermediate and creates tenant-scoped TaskTemplate rows — 118 unique titles from the 2025 spreadsheet. Once imported, populate any event's task list by hitting /admin/tasks/templates → "Seed from templates".

    hostadmin

v0.25.0

Punchbowl CSV import

  • Punchbowl guest-list importer

    /admin/imports/punchbowl — upload a Punchbowl event-guest-list CSV (Event → Guest List → Download), preview what Listo found, then commit. Idempotent (re-uploading the same CSV is safe — existing households match by name). Records historical invitation timestamps + rolls up per-guest RSVPs to household-level Rsvp rows so the message log and Overview page reflect Punchbowl's history immediately.

    host
  • No outbound during import

    The importer never sends email or SMS. It records that Punchbowl notified the household — that's metadata, not a new send. If you want to resend invitations via Listo, use /admin/rsvps or /admin/reminders after the import lands.

    hostadmin

v0.24.0

Planning overview + year-rollover script

  • Planning overview dashboard

    /admin/overview — single-screen mirror of the legacy 2025 BBQ Planning Overview tab. RSVP funnel + anticipated/actual headcount + budget by category in the top, computed shopping list grouped by category in the body with per-row % of guests, per-guest quantities, effective quantities, and per-category subtotals and averages. All live-computed from RSVPs + catalog plan.

    host
  • Year-over-year rollover script

    scripts/setup-event-from-prior-year.ts (npm run db:setup:from-prior-year) — idempotent script that clones EventPlan rows from a source year to a target year, with optional event-name fixups. Runs against local by default; pass REQUIRE_PROD=1 to opt into a prod-pointed DATABASE_URL. Refuses to run against the wrong DB without explicit confirmation.

    admin

v0.23.0

Dark mode

  • Dark mode across the whole app

    Toggle in the top-right of the marketing nav and the admin header. Cycles Light → Dark → System (System follows your OS preference). Choice persists across sessions and across listorun.com subdomains.

    hostguestadmin
  • About the dark palette

    The Listo brand guide defines a light palette only; the dark variants were picked to keep the forest-green-and-amber identity recognizable while staying legible. Treat them as v1 — easy to tune later.

    host
  • Print + email stay light

    Print stylesheet forces a light background regardless of theme. Outbound emails always render with light brand colors — email clients largely ignore prefers-color-scheme and we'd rather guarantee one consistent look across inboxes.

    hostadmin

v0.22.0

Exports hub + suppliers + domain + integrations

  • Unified exports hub

    /admin/exports — one page with download buttons for RSVPs, shopping list, tasks, volunteers, schedule, outbound messages, and the audit log. Each card shows what's about to download. Per-page filtered exports (e.g. RSVPs by status) still live in the toolbar of each list.

    hostadmin
  • Suppliers roll-up

    /admin/suppliers — read-only summary of catalog items grouped by supplier, with item counts, categories, and total estimated cost. Click a supplier to filter the catalog to just their items.

    host
  • Custom domain settings

    /admin/settings/domain — set your tenant's custom hostname (e.g. posnerbbq.com), plus the runbook for the Cloudflare CNAME + Vercel attach steps. The intent is recorded immediately; SSL provisioning still happens out-of-band.

    hostadmin
  • Integrations diagnostic page

    /admin/settings/integrations — at-a-glance status for Resend, Twilio, Upstash KV, Sentry, Vercel Blob, and the outbound safety gate. Read-only (env vars are deploy-time) — no key values are displayed, only presence + redacted tails.

    hostadmin

v0.21.0

Reminder waves + broadcast composer

  • Reminder waves

    /admin/reminders — chase non-responders with a single click. Pick a wave label (T-21 / T-14 / T-7 / T-2 / Manual), select households, send. Filters by status (No response / Maybe), search, and whether the household has ever opened their RSVP link. Each send writes an audit row tagged with the wave so you can see which round produced which engagement.

    host
  • Broadcast composer

    /admin/send — free-form email to a slice of your households ("we moved the date", "see you Saturday"). Pick the audience (everyone / YES only / no-response / etc.), preview live counts, write subject + HTML body, hit send. Personalizes {{household.displayName}} per recipient. Distinct from reminder waves — does NOT include an RSVP token.

    host
  • Outbound safety still in charge

    Both new flows route through the same safety gate as invitations and reminders. Until LISTORUN_OUTBOUND_ENABLED=true is set in production, every send lands in the message log as FAILED with a safety-gate reason — no surprise emails leave the system.

    hostadmin

v0.20.0

Outbound message log + tenant settings

  • Message log

    /admin/messages — every email/SMS attempted on behalf of this tenant. Status pills (sent / queued / failed / bounced), filters by channel + date range + free-text search, expandable body inline. Blocked-by-safety-gate sends show up here too so you can verify nothing escaped.

    hostadmin
  • General tenant settings

    /admin/settings — display name, support email (reply-to for invitations), mailing address (CAN-SPAM footer), and timezone (drives quiet hours, schedule local times, RSVP cutoffs).

    host
  • Branding

    /admin/settings/branding — primary + accent colors with hex inputs and color pickers, logo URL, and a live preview of the resulting button styles. Applies to the public tenant landing, RSVP invitation emails, and the public event page (the admin chrome stays on the Listo palette).

    host

v0.19.0

Reports + audit log

  • Year-over-year report

    /admin/reports/year-over-year — every event for this tenant in one table (households / guests / RSVPs / attended / spend), plus a per-catalog-item cost matrix with ▲/▼ year-over-year delta chips. Items without recorded purchases are hidden.

    host
  • Headcount funnel

    /admin/reports/headcount — visual funnel from invited → sent → opened → responded → YES → attended, with bar widths showing each step's conversion. Plus an age-mix table (adults / children / infants invited vs. attending vs. attended) and a weekly response-arrival chart.

    host
  • Audit log viewer

    /admin/audit — every mutation across this tenant, searchable by actor / entity type / action prefix / date range. Click any row to expand the metadata JSON. Defaults to 500 most-recent entries.

    hostadmin

v0.18.0

Catalog editing — finally

  • Add, edit, and archive catalog items

    /admin/catalog is no longer read-only. Modal CRUD with every field — name, category, unit, per-adult/child/infant ratios, consumer ratio, purchase unit + size, estimated unit cost, supplier, notes. Archive an item to hide it without breaking historical receipts.

    host
  • Quantity mode toggle

    Per-guest items scale with RSVPs (the math you've been using). Fixed items are independent of headcount — "rent 2 tents regardless of how many show up." Switching modes reveals or hides the per-guest ratio fields in the modal.

    host
  • "In this year's plan" filter on shopping list

    /admin/shopping-list now defaults to showing only items in this year's plan (anything with an EventPlan row for the active event). Toggle to All catalog items to reveal the full library and add things you'd forgotten.

    host
  • Add / remove items from this year's plan

    From the shopping list's All view, every catalog item gets a "+ Add to plan" button. Items already in the plan show "Remove from plan" — refused with a confirm if there's purchase history attached.

    host
  • Sticky toolbar on catalog page

    Active / Archived pills with counts, search across name + supplier + notes, category dropdown to scope to a single section. Click any row to open the edit modal.

    host

v0.17.0

Run-of-show schedule

  • Day-of timeline with five lanes

    /admin/schedule — schedule items grouped into Guest-facing (cocktails, dinner, music), Prep (host pre-event), Cooking (smoker hour-by-hour), Teardown, and Other. Tab between lanes or view All.

    host
  • Modal create + edit

    Each item captures category, title, start/end time, location, notes, and a sort-order tiebreaker. Click any row to edit; remove with a confirm dialog.

    host
  • Sort by start time, with sortOrder for ties

    Items within a category sort chronologically; if two share a start time the sort-order field decides which comes first.

    host

v0.16.0

Volunteers, shifts, and day-of check-in

  • Day-of check-in (mobile-first)

    /admin/checkin — big-finger UI for the door. Tap a row to mark a guest here; tap again to undo. Live tally of "here / expected" pinned at the top. Filter by Expected / Here / All. Allergies render in red so you can flag the kitchen.

    host
  • Volunteer roster

    /admin/volunteers — sticky toolbar with status pills (Invited / Confirmed / Declined), search, modal create/edit. Captures areas of help (free-text tags), notes, and contact info.

    host
  • Shift coverage

    /admin/shifts — assigns volunteers to shift slots, grouped by station. Modal create/edit with start/end time, effort level, and notes. Click a row to edit or remove.

    host
  • Shift templates with one-click generation

    Define recurring shift slots (e.g. "Grill 1, 3pm–5pm, capacity 2, high effort") and click "Generate from templates" on the shifts page to create that many unassigned slots in one shot. Idempotent — re-running tops up to capacity without duplicating.

    host
  • Per-person attendance, not per-household

    If Beth shows up but her husband doesn't, mark Beth here and leave him out. The plan (RSVP attending list) and the reality (per-guest attendedAt) are tracked separately, so no-shows can be reconciled after the event.

    host

v0.15.0

Tasks — full CRUD, templates, prep timeline

  • Tasks list with filters that stick while you scroll

    Sticky toolbar with status pills, search, and filters by prep window / station / assignee. Click any row to open the edit modal; click the status pill to cycle TODO → IN_PROGRESS → DONE.

    host
  • Tasks open in a modal — fast in, fast out

    Create and edit tasks in an overlay so you don't lose your place in the list. Edit modal includes everything: title, description, status, priority, prep window, station, location, role, assignee, due date, estimated minutes, supplies needed, and a volunteer-eligible flag.

    host
  • Task templates persist year-over-year

    Save reusable definitions at /admin/tasks/templates — title, prep window, station, supplies. Click "Seed from templates" on next year's empty tasks list to instantiate them all in one shot. Idempotent: re-running skips templates whose title already matches an existing task.

    host
  • Save any task as a template

    From the edit modal: "Save as template" button at the bottom-left turns the current task into a reusable definition for future events.

    host
  • Prep timeline view

    /admin/tasks/timeline groups tasks by prep window (T-30d, T-7d, T-1d, Day of, T+1d cleanup) so you can see what's coming up in each window without filtering by hand. Cancelled tasks are hidden.

    host

v0.14.5

UI/UX foundation — modals, sticky toolbars, running notes log

  • Sticky filter pills + search on RSVPs

    Filters and search stay pinned at the top of /admin/rsvps as you scroll. Click a status pill (All / Yes / Maybe / No / No response) to filter instantly — no submit button.

    host
  • New household opens as a modal

    Click "+ New household" on the RSVPs page and a clean overlay slides in with the same form — no full-page navigation, no losing your place in the list.

    host
  • Tabbed household detail

    Each household now has three tabs: Guests (per-guest edit + add), Household + notes (display name + private host notes), RSVP & invitation (response state + send/resend invitation + recent messages).

    host
  • Running CRM notes per household

    On the Household tab, a running log of "who said what when." Each note shows the author and timestamp. Append-only — to correct a note, add a new one. Capability-gated so only OWNERs and HOSTs (not HELPERs by default) can write.

    host
  • Polished confirm dialogs replace browser pop-ups

    Destructive actions (remove member, revoke invitation, activate event, remove guest, remove household) now use a styled in-app dialog instead of the native browser confirm. Looks like Listo, behaves like Listo.

    hostadmin

v0.14.0

Procurement — mark purchased, log receipts, see year-over-year cost

  • Mark items purchased on the shopping list

    Each row gets a 'Mark / edit' toggle. Punch in the quantity you actually got and what it cost; click Mark purchased and the row stamps the time and your name. Unmark just as easily if Costco rejected your card.

    host
  • Receipt-by-receipt purchase log

    /admin/purchases — chronological list of everything bought for the active event, with running total spent, who bought it, and an 8-week activity bar chart so you can see procurement actually happening.

    host
  • Year-over-year cost variance

    When this year's unit cost differs from last year's by more than ½%, the shopping list and purchase log surface a ▲/▼ chip with the percent delta. Buns up 18% from 2025? You'll see it before you head to the store.

    host

v0.13.0

Households + guests management

  • Edit any guest field in place

    On a household's detail page, expand any guest to edit name, email, phone, age group, dietary restrictions, allergies, plus-one allowance, and primary-contact status. Changes save immediately with audit logging.

    host
  • Add a guest to an existing household

    Found out the Smith cousin is coming after all? Click "+ Add guest" on the household, fill in the basics, done — they're folded into the household's RSVP.

    host
  • Remove a guest with primary-contact handover

    If you remove the household's primary contact, the badge automatically transfers to another household member. Refuses to remove the last guest — use "Remove household" for that.

    host
  • Add a household from scratch

    New "New household" button on the RSVPs page lets you add a household with primary contact in one form, then take it from there. The household attaches to whichever event is currently active or planning.

    host
  • Remove a household with safeguards

    Removes the household, its guests, RSVP, and invitation history. Refuses unless you confirm twice if the household has already RSVPed yes/no/maybe.

    host
  • Edit household name + private host notes

    Updated the family display name? Want to jot "brings their dog" against a household? It's all on the same detail page.

    host

v0.12.6

One sign-in across every Listo subdomain

  • Sign in once, not once per tenant

    Switching from the portal selector into a tenant — or between two tenants if you host more than one — no longer bounces you back to the login page. Existing sessions will need one more login when this deploys; from then on, every Listo subdomain shares the session.

    hostadmin

v0.12.5

Events management — plan multiple years side-by-side

  • Plan future years alongside the current one

    A tenant can now hold many events at once — last year's COMPLETED archive, this year's ACTIVE event, and next year's PLANNING placeholder. The host dashboard, RSVP page, and shopping list always operate on whichever event is marked ACTIVE.

    host
  • One-click activate

    From /admin/events, click 'Make active' on any DRAFT or PLANNING event. The previously-active event moves to PLANNING in the same atomic step — only one event is ever ACTIVE per tenant.

    host
  • Edit event details

    Date, end date, location, hero copy, parking notes, dress code, and RSVP cutoff — all editable at /admin/event. Edits are scoped to the event; you don't accidentally rewrite history when you fix a typo on next year's invite.

    host
  • Clone last year's catalog selections

    Creating a new event lets you start from a prior year's plan — same items, same quantities, ready to refine. Households, RSVPs, and tasks aren't cloned (they're year-specific).

    host
  • Active-event chip in the admin header

    A small badge next to the tenant name shows which year + status is currently in focus, so you always know which event you're editing.

    hostadmin

v0.12.0

Members management

  • Invite co-hosts and helpers by email

    From /admin/members, owners can invite anyone by email and choose their role (Owner / Host / Helper / Viewer). Invitations expire after 14 days and can be resent or revoked.

    host
  • Edit a member's role and extra capabilities

    Promote a Helper to a Host, or add a single fine-grained capability (e.g. SEND_INVITATIONS) without changing their role.

    host
  • Self-serve account creation from the invite link

    Invitees who don't yet have a Listo account set their password on the spot and land in the admin signed-in. Invitees with an existing account get a one-click Accept.

    host
  • Owner-removal safeguards

    You can't remove yourself, and the system refuses to leave a tenant without at least one Owner.

    hostadmin

v0.10.0

Marketing site, version display, host login

  • Marketing site at listorun.com

    Public-facing home with features, pricing, user guide, and changelog — all branded to the Listo style guide.

    hostguest
  • Sign in is one click from every page

    The header now includes a Sign in button on the marketing site and a clear path back to /admin from the tenant home.

    host
  • Build version visible everywhere

    Footer on every page shows the running version, environment (local / qa / preview / production), and git commit short SHA. Also reachable at /api/version for health checks.

    admin
  • User guide at /guide

    Walkthroughs for hosts (managing households, sending invitations, day-of check-in) and guests (RSVP-ing, updating responses, plus-ones).

    hostguest
  • Release notes at /changelog

    Plain-English log of what's new, audience-tagged for filterability.

    hostguestadmin

v0.9.0

Admin shell, RSVP dashboard, shopping list, email pipeline

  • Admin dashboard at /admin

    Headline numbers — yes / no / no-response counts, attending headcount by adults / children / infants, volunteer interest from RSVPs.

    host
  • Per-household RSVP detail

    Click any household to see guests, dietary, allergies, RSVP message, invitation history, and a Send / Resend button.

    host
  • Shopping list math

    RSVP-driven quantities with per-guest ratios from the catalog. Override only goes up. Purchase units rounded automatically (24 cans → 1 case).

    host
  • CSV export everywhere

    RSVPs and shopping list both export to CSV for offline planning or supplier handoff.

    host
  • Email pipeline with safety gate

    Resend integration ready. Outbound is BLOCKED by default — a single env flag enables real sends, a redirect mode forwards everything to one test address. No accidental emails to imported guests.

    admin
  • Email template editor

    Tenant-level overrides for invitation and reminder templates with variable substitution: {{household.displayName}}, {{event.name}}, {{rsvpUrl}}.

    host

v0.8.0

Public RSVP flow

  • RSVP at /r/<token>

    Token-bound invitation link. Per-guest yes/no, dietary restrictions, allergies, plus-one slots when allowed, free-text message to host. Update anytime before the event.

    guest
  • Invitation tokens

    256-bit secure tokens, hashed before storage. Re-issuing rotates tokens and invalidates older links automatically.

    host
  • Cross-tenant defense

    Tokens issued for one tenant cannot be used on another tenant's domain.

    admin

v0.7.0

First tenant + historical data import

  • Tenant provisioning + seed

    Initial tenant configured with owner + host roles. Historical event data imported: 257 households, 411 guests, 31 catalog items.

    host
  • Year-over-year cloning

    'Start from last year' copies households + guests into the next year's event in one command.

    host

v0.6.0

Authentication + permissions

  • Sign in with email + password or Google

    Auth.js v5 with Credentials and OAuth providers. Google OAuth activates when its credentials are configured.

    host
  • Role + capability authorization

    Owner / Host / Helper / Viewer roles with 24 granular capabilities. Platform admins are auto-granted across tenants.

    admin

v0.5.0

Multi-tenant routing

  • Subdomain + custom-domain support

    <slug>.listorun.com and any custom domain route to the same tenant. QA environment via *.qa.listorun.com.

    admin

v0.4.0

Database schema

  • 27-table schema

    Households, guests, RSVPs, catalog, plans, volunteers, tasks, shifts, schedule, media, imports, communications. Multi-tenant scoped from day one.

    admin