Skip to content

Features

Austin Stanfield edited this page Oct 5, 2026 · 15 revisions

Features

The full list. The README carries a shorter version.

Public Site

  • Home Page: Hero slideshow that collapses into a condensed strip on scroll, countdown timer, intro text, and About section all on one page. Content below the hero is built as a stack of overlapping "bands" — each section has rounded top corners (40px radius) and a soft drop shadow so the section boundaries and rounded edges read clearly against the blush page background. The Details & FAQ section is a fully-rounded white card, and the Explore (nav cards) section below it is white.
  • About (merged into Home): Our Story, How We Met, The Venue (with optional venue photo), Ceremony/Reception cards, and FAQ — all appear below the home intro; nav "About" link auto-scrolls to #about anchor; /about redirects there; "Get Directions" renders as a styled pill button with a map-pin icon when a venue address is set
  • Timeline: Interactive vertical timeline of relationship milestones with photos; scroll-triggered entrance animations
  • Wedding Party: Member cards with scroll-triggered animations; responsive images at 5 breakpoints
  • Schedule: Wedding day timeline and events with scroll-triggered animations
  • Photo Gallery: Beautiful gallery with lightbox (only shows "hearted" photos)
  • Registry: Tabbed page with two sections:
    • 🌴 Honeymoon Fund — Experience items with contribution flow via Venmo, Cash App, Zelle, PayPal (deep links, app-first)
    • 🛍️ Registry — Product grid linked to Target and Amazon; shows thumbnail, title, price, description; clicking opens the product page directly
  • RSVP: Guest RSVP form with name verification against guest list. Per-person dietary answers: Vegetarian, Vegan, Gluten Free, Nut Allergy, Other (+ free text), Kids' Meal and Not Eating (a seat with no plate — the baby whose food comes with them; ticking it clears the rest)
  • Animations:
    • Hero collapse (wide layout, above 768px): scroll down → hero condenses to strip + scattered polaroid photos fly in; scroll up → reverses. Driven by a wheel or a finger, so a tablet and a phone held sideways animate like anything else — the layout is chosen on width, but the input is a separate question (see Troubleshooting)
    • Hero collapse (narrow layout, 768px and below): swipe up → hero squishes vertically into center third while top/bottom photos slide in from edges; swipe down reverses; particle burst (gold sparks + rose petals) fires at strip seams on both collapse and expand
    • Nav banner → island: full-width frosted glass bar morphs into floating pill on scroll (all pages); both desktop and mobile hero dispatches fire this simultaneously
    • FadeIn: scroll-triggered fade, slide-up, slide-left, slide-right, scale on page sections
    • HeartBurst: double-click/double-tap anywhere spawns floating hearts
    • Page transitions: fade+rise animation on every route change
  • Responsive Design: Mobile-friendly across all pages; nav island adapts width per screen size

Admin Panel

  • Dashboard: At-a-glance overview cards (countdown, RSVPs, guest list, content, seating, Q&A). The RSVPs & Guests card includes an RSVP Deadline stat showing days left before the RSVP cutoff — amber within 7 days, red once the deadline has passed, "—" if no deadline is set.
  • RSVP Management:
    • Stats cards: Total RSVPs, Total Attending (individual guest count), Declined, Missing RSVPs (invited but no response)
    • Filter by: All, No Response, Attending, Declined, Likely Not Coming, Invited, Not Invited, Bride's Side, Groom's Side, 🧒 Kids Meal (households with anyone on a child's plate), 📝 Noted, ⚠️ Issue, 📌 Need
    • Name search — type a name and press Enter to check that guest off; the box clears and keeps focus so names can be worked through rapidly (see Guest List — Rapid Check-Off)
    • Party sub-rows: additional party members appear as soft gray sub-rows under the head guest row, with their dietary data
    • Responsive guest table: columns are measured and dropped by priority as the window narrows (Contact → Notes → Address → Donated → Relation → checkbox), so Name/Party/Invited/RSVP/Actions always stay readable and Edit/Delete are never cut off or stacked
  • Guest List:
    • Import from CSV (handles quoted fields, commas in addresses)
    • Export CSV — downloads whatever the filter/search is currently showing as a mailing-list-ready CSV (see Guest List — Mailing List Export)
    • Bulk editing — tick guests, then Mark as Invited / Delete Selected inline, with a ⋯ overflow menu for Mark as Not Invited, ⚠️ Issue / 📌 Need flagging, and Edit Selected… (note, flag, side, RSVP status across the selection) — see Guest List — Bulk Editing
    • Manual add/edit/delete
    • Fields: name, email, phone, party_size, side, notes, party_members (JSONB), address
    • Supports families of 4+ with named/unnamed party member slots
    • Upsert on reimport — preserves email, phone, invited, notes, side; updates party_size, party_members, address
    • Import results: Added / Updated / Failed counts
    • RSVP submission syncs email/phone/rsvp_status and resolved party member names back to guest_list
    • Party sub-rows visible in guest list table
    • The couple — an Add the couple banner puts the two of you on the list as one row (names seeded from Settings), so the seating chart can give you chairs and the kitchen can count your plates. Pinned to the top with a 💍 badge, and left out of the invitation statistics, the mailing export and the RSVP responses list
    • Under 21 — a toggle on every person in a guest's card (the household themself and each companion). Not a dietary answer: they eat the adult dinner. It feeds the Drinkers (21+) count on Finances → Settings, so a bar line is charged only for the people who can drink. See Finances
    • Vendors tab — the photographer, the DJ, the planner: name, role, company, contact, whether their contract includes a meal, their food preference and a note. One row is one person. They never take a chair; they appear on the seating export behind Also show → Vendors
  • Budget line ordering: Drag any budget line by its handle to reorder it within a section or move it into another one, empty sections included. Full keyboard support (Space to lift, arrows to move, Escape to cancel) with spoken announcements, and a hold-then-drag on touch so the list still scrolls. The row is carried above the page rather than inside its section, which would clip it, and the list redraws the moment you let go rather than after the round trip. See Finances
  • Photo Management: Upload, drag-reorder, heart to publish, thumbnail API (/api/photos/[filename]/thumb), edit titles/descriptions, delete; "Set Venue Photo" button assigns a photo to display in the Venue section on the home page. Hearting a photo re-sorts it to the top without jumping the page (scroll position preserved); a floating ↑ button scrolls back to the top of the grid
  • Timeline Editor: Create and manage milestones with up to 2 photos each; oldest-first order
  • Content Editors: Home, About, Wedding Party, Schedule, Q&A (with Markdown [text](url) hyperlink support via "🔗 Insert Link" button)
  • General Settings: Wedding date/time/venue, color scheme (accent/light/dark), page background colors, countdown display mode
  • Hero Slideshow: Toggle on/off, pick specific photos, set interval; crossfade with no black flash (reveal-behind z-index technique); dot indicators; img.decode() for GPU-ready preloading
  • Registry Admin (three sub-tabs):
    • Honeymoon Fund: Add/edit/remove experience items; log contributions received; progress bars; "Fully Funded" badge
    • Registry Items: Paste a product URL → auto-fetches OG metadata (title, image, description, price); edit any field before saving; grouped by store (Target / Amazon / Other); edit and delete saved items
    • Settings: Page title, subtitle, description text, background color, payment method handles (Zelle/Venmo/Cash App/PayPal)
  • Nav Cards: Set background images for the home page navigation cards. Each card has a bundled grayscale default photo; use Upload to replace with a custom image or Gallery to pick from photos already on the site.
  • Seating Chart (/admin/seating): One plan, two views. Canvas — add/resize the room shape, place tables (round/rectangle/sweetheart), drag guests in from the side panel, party cohesion colouring. List — the same plan as a roster grouped by table or by guest, with multi-select, bulk move/unseat, swap two people, gather a split party and auto-seat; this is the view a phone opens on, because touch has no drag-and-drop. The couple can be seated like any party; vendors never take a chair. Ends in an Export for the caterer — paper or spreadsheet, with a kitchen summary, per-table counts, vendor plates and a grand total, and a counts-only mode that fits on one page. See Seating and the Export
  • Honeymoon Portal (/admin/honeymoon, admin-only — no public page): Plan the trip and then actually use it, across ten tabs, each its own URL, each under the same toolbar, and one place panel that opens the same way wherever you click a place — Overview (the trip on one page, with the budget, the cancellation deadlines, the nights not booked and a completeness score), Today (a phone-first, offline-capable read-out of the day you are on, with per-stop navigation and an emergency card), Map (auto-fitting Leaflet over four base layers, with a measure tool, drawable region boundaries, road geometry for ground legs and a split view that puts the itinerary and the places either side of it), Itinerary (day-by-day builder with real driving times, honest arrival times, weather, daylight, a conflicts panel, a calendar view and a timeline that draws travel and check-in/out against the clock), Travel (journeys — a whole ticket with all its legs, entered once: paste the flight numbers and each leg is looked up, filled in and placed on the right day by its dates; layovers judged tight / impossible / an airport change; door-to-door versus moving time; time zones, terminals, and one booking reference for the ticket), Places (the candidate library, importable from a spreadsheet, Google My Maps or a Takeout and exportable as CSV/GeoJSON/KML, with photos, saved views and remembered filters — and Stays (shortlist with its own map, drag-to-rank, a comparison table, a triage queue and a bookmarklet price watcher) and Excursions as its segments), Files (a file explorer for passports, visas, insurance and tickets — expiry warnings, a viewer, and every file saved for offline), Checklist (with due-date buckets and a packing list generated from the trip), Guide (region write-ups, Markdown notes and templates including a per-country language card) and Settings (budget, exchange rates, emergency details, share links, documents and whole-trip snapshots). A read-only share link at /honeymoon/<token> and a subscribe-able calendar feed put the trip on someone else's phone without giving them the admin. On a phone the portal has tabs along the bottom, a day at a time with a swipe, and an agenda for the timeline. See Honeymoon Portal
  • WIP Control:
    • Per-page WIP toggle (shows "coming soon" to non-admins)
    • Per-page Hidden toggle (removes page from nav entirely)
    • Basic Mode: Pre-release mode showing only Home/About/Timeline/Photos; optional venue sub-toggle
  • Admin Navigation: Admin button visible in nav only when logged in (desktop + mobile) — or always, on a demo instance

Demo mode

One environment variable (DEMO_MODE=true) turns any instance into a read-only showcase: no login, the admin panel open to everyone, a banner across the top of every page, and every write answered but never stored — so a visitor can change anything they like and a refresh brings the seeded data back. The flag is refused unless the database is actually the demo's, so a production instance cannot fall into it. There is one live at weddingwebsitedemo.com — every feature on this page is on it, and you need no password to look. Full write-up: The demo instance.


← All pages

  • Offline: installed to a phone's home screen, the whole site saves itself and opens with no connection, showing what it last saw; changes made offline say they were not saved. See Offline

Clone this wiki locally