Use this before shipping a new build of I'm In.
- Confirm
.env(or Render build env) has:VITE_SUPABASE_URLVITE_SUPABASE_ANON_KEY
- If deploying
resolve-google-maps-link, confirmsupabase/config.tomlincludes:[functions.resolve-google-maps-link]verify_jwt = false
- Run
npm install. - Run
npm run lint. - Run
npm run build. - Run
npm run previewand smoke-check the production build.
- Confirm
supabase_reconcile_live_schema.sqlhas been applied in the target environment. - Verify RPCs exist and are executable by
anon/authenticated:submit_rsvp(...)cancel_attendee_with_promotion(...)add_proxy_attendee(...)toggle_event_interest(...)host_send_activity_notification(...)reply_to_event_hosts(...)
- Verify expected core tables/columns exist:
eventsevent_attendeesevent_hostsevent_interestsevent_access_requestsattendee_profilesattendee_sessionsevent_attendees.attendee_profile_id
- Auth: magic link login still works.
- Event create/edit: host can create and edit an activity, including delayed-auth create save flow.
- Calendar visibility: private activities are hidden from
/calendar. - RSVP: signed-in and guest RSVP both work.
- Guest email setting:
require_guest_email_for_joinbehaves correctly in both modes. - Name-first guest flow: when optional mode is on, guests can join with name only and then add email from success UI.
- Waitlist: full event correctly places new RSVP on waitlist.
- Cancellation: "Yes, can't make it" cancels RSVP and promotes next waitlisted attendee.
- Proxy add: "Add someone else" works in both guest-email-required and optional-email modes, including re-adding a previously cancelled name.
- Thinking about it: public and non-public activity interest flows still work.
- Semi-public: request-to-view, private link access, and host request actions still work.
- Feedback button placement: on
/events/:slug, floating feedback button appears top-right below the nav; on other routes it keeps bottom-floating placement. - Hamburger menu consistency: menu styling/items match across top-bar pages and
/events/:slug, withCreate ActivityandExplore Activitiesicon links at the top. - Activity header actions:
/events/:slugheader shows icon-only share next to the hamburger menu, and both actions remain tappable on mobile. - Host dashboard: co-host access still works and host list loads correctly.
- WhatsApp verify/link: the Lalo verification/link flow completes successfully and persists the verified WhatsApp number when one is returned.
- Profile:
/profileshows the linked WhatsApp state and verified WhatsApp number correctly after verification. - Host contacts: host dashboard people/lookup/recipient surfaces show WhatsApp numbers correctly where profile data exists.
- Host notifications: manual host notification send still works from
HostDashboard. - Guest reply: replying to a host-sent activity message creates a
guest_replynotification for the host and opens the expected host-side follow-up path. - Account merge: merge completion preserves linked WhatsApp identity data, including the verified number when present.
- Bookings: guest bookings page loads with active guest session.
- Recovery: recovery link restores a guest session.
- If join requests or proxy add fail with
event_attendees_status_check/pending_approval, run this SQL in Supabase:
DO $$
DECLARE
c RECORD;
BEGIN
IF EXISTS (
SELECT 1
FROM pg_constraint
WHERE conrelid = 'public.event_attendees'::regclass
AND conname = 'event_attendees_status_check'
) THEN
ALTER TABLE public.event_attendees
DROP CONSTRAINT event_attendees_status_check;
END IF;
FOR c IN
SELECT conname
FROM pg_constraint
WHERE conrelid = 'public.event_attendees'::regclass
AND contype = 'c'
AND conname <> 'event_attendees_status_check'
AND pg_get_constraintdef(oid) ILIKE '%status%'
LOOP
EXECUTE format('ALTER TABLE public.event_attendees DROP CONSTRAINT %I', c.conname);
END LOOP;
ALTER TABLE public.event_attendees
ADD CONSTRAINT event_attendees_status_check
CHECK (status IN ('confirmed', 'waitlist', 'pending_approval', 'cancelled'));
END $$;- This is idempotent and already included in
supabase_reconcile_live_schema.sql.
- Static site build command:
npm run build - Publish directory:
dist - Configure SPA rewrite/fallback to
index.html - Re-verify deep links after deploy:
/events/:slug/host/events/:id/host/events/:id/edit/calendar/bookings/recover
- Open home page and calendar on production URL.
- Open one public activity and verify attendee list loads.
- Perform one real RSVP/cancel cycle on a test activity.
- Open one semi-public activity and verify the intended public/private link behavior.
- Confirm browser console has no blocking runtime errors.