01All tools at a glance
Each card maps to one tile on /admin. "When to use" answers the only question that matters: which screen do I open for this task?
📥 Review queue /admin-vetting
When to use
Something arrived on its own — a business application, suggested spot, event submission, or problem report. Triage from one screen.
- Approve → row promoted to Live in
spots(oreventsetc.). - Reject → row removed.
- "Open spot editor" → tweak before approving.
⚡ Quick add a spot /admin-quick-add
When to use
You found a cool place. Paste one URL (Instagram, TikTok, website, Google Maps link). Google Places auto-fills address, hours, photos, rating. You then jump to "Add & edit" to polish.
- Fastest path from "saw a cool spot" to "it's in the system".
- Lands in
spotsasStatus='Pending'— won't show on the public site until you flip it to Live.
✏️ Add & edit spots /admin-add-spot
When to use
The main workhorse. Create a spot from scratch, or load an existing one and edit any field — opening hours, photos (upload to Cloudflare), tags, who-for, tier, booking link, the lot.
- Status dropdown controls visibility:
Pending·Draft·Live·Needs Review·Hidden. - First photo is the hero (used for cards, map thumbnails, share previews).
🤝 Partners /admin-partners
When to use
A business owner wants to manage their own spot. Approve their claim, link spots to their account, suspend or reissue logins.
- Pending claims — review requests from
/partner/claim. - Approved partners — see who owns what, add/remove spots, send fresh login emails.
🗺️ Itinerary planner /admin-add-trip
When to use
Build a curated multi-day trip ("Mount Lawley brunch crawl", "Perfect day in Fremantle"). Stitches existing spots into a route with time-of-day suggestions. Visible on the homepage Trips row + at /best-days.
🎉 Add an event /admin-add-event
When to use
Something time-limited is on — gig, market, festival. Goes onto the homepage "This weekend" row + the dedicated What's On page. Type the venue's address; the form auto-links it to your existing spot if there's a match.
📊 Analytics /admin-dashboard
When to use
Weekly check: traffic, top spots, quiz funnel, conversion funnel — pulled from Google Analytics. Not real-time — GA has a ~24h delay.
🔍 Spot inspector /admin-spot
When to use
Debug. Shows the raw Supabase row for any spot, exactly as the public site sees it. Useful when something looks wrong on the live site and you want to know what's actually stored.
02Flow · Adding a new spot
When you discover a place worth featuring.
From "saw a great café" to live on the map
spots with status='Pending'. The spot is now in the DB but invisible to the public./list-your-business, skip Quick Add. Go to /admin-vetting and approve from there — same outcome, less typing.
03Flow · Vetting a submission
Someone applied to list, suggested a spot, or reported a problem. Where it lands and how to clear it.
The vetting queue
/list-your-business, /suggest-a-spot, /submit-an-event or /report-a-problem.status='Pending' (or the equivalent for events / problem reports). Admin home counter increments.- Approve → status flips to
Live(or equivalent), goes public. - Reject → row deleted. Optional reason for your own notes.
- Open spot editor → tweak fields before approving (most common — submissions are usually thin on copy).
04Flow · Partner claim
A business owner wants to manage their own listing. End-to-end, from their first click to logged-in.
From claim form to dashboard
spot_claims with status='pending'. Auto-matches the business name against Live spots and pre-fills the matched spot if exactly one matched.business_owners row (status=approved), inserts owner_spots links, marks the claim approved, audits the action./partner/login → already signed in → redirected to /partner/ dashboard. Sees their spot(s).- Suspend — blocks login but keeps their data + spot links. Reversible.
- Delete — permanent. Removes the owner row + all their
owner_spotslinks via cascade. Theauth.usersrow stays so they can re-claim later if you change your mind.
05Flow · Approving an event
Time-limited things — gigs, markets, festivals.
Event submission → on the homepage
/submit-an-event. Row lands in events as Pending.status → Live. Shows on homepage This weekend row and the dedicated /whats-on page.06Flow · Building a trip
Editorial multi-stop itineraries — the highest-engagement content on the site.
Curated trip → public
spots — create them first if not.Editorial=true to feature it. Save. Lands in shared_days table.07Where things live
Quick map of which Supabase tables back which features.
editorial=true = featured./partner/claim.plTrack() on the public site writes here.08All URLs in one place
Bookmark or screenshot this. Every URL the admin or a partner ever needs.
Admin
- /admin — home (tools + live stats)
- /admin-vetting — incoming submissions queue
- /admin-quick-add — drop one URL → auto-fill spot
- /admin-add-spot — full spot editor
- /admin-partners — partner approvals + management
- /admin-add-trip — itinerary planner
- /admin-add-event — events
- /admin-dashboard — analytics
- /admin-spot — single-spot inspector / debug
- /admin-guide — this page
Public-facing partner entry points
- /partner/claim — claim form ("I own this business")
- /partner/login — magic-link sign-in
- /partner/ — partner dashboard (after sign-in)
- /list-your-business — new business application (different from claim)
External dashboards
- Supabase ↗ — DB, auth users, email templates
- Netlify ↗ — deploys, env vars, function logs
- Google Analytics ↗ — traffic
- Cloudflare ↗ — Stream (videos) + Images
09Emergencies
When something's on fire.
The site is down
- Check Netlify deploys — bad commit? app.netlify.com → site → Deploys → "Publish deploy" on the last green one to roll back.
- Check Supabase status — outage? status.supabase.com.
- If neither, check Cloudflare DNS.
A partner can't log in
- /admin-partners → find the partner → confirm
claim_status='approved'(not suspended). - Click ✉ Resend login email. Ask them to check spam.
- Still stuck? In Supabase → Authentication → Users → search by email → "Send magic link" manually.
Wrong data on the public site
- Open /admin-spot → find the spot. Confirm the raw DB row.
- If DB looks right but public site shows old data, the
/spotsendpoint caches for 60s. Wait or trigger a deploy. - If DB is wrong, edit in /admin-add-spot.
"Someone broke my listing!"
Check audit_log in Supabase. Every admin action and partner override is recorded with timestamp, actor and payload. Filter by target_id = '<spot_id>'.