Adventure Date Night App
One-city marketplace that books adventure date nights for couples — kayaks, studios, private chefs — with Stripe checkout and gift vouchers.
Friday night arrives and the couple already knows the script. Same Italian place. Planning something better — dusk kayaking, an after-hours pottery studio, a rooftop that is not a reservation — dies between Google, Instagram, and giving up. Intent is there. Execution is a second job. That complaint is documented. A 2024 r/CasualConversation thread on non-dinner dates pulled 90-plus comments; r/dating_advice put it flatter: restaurants get both old and expensive. City subs (LA, DC, Grand Rapids, Salt Lake) ask the same thing because local search dumps tourist tours, Groupon spas, and Airbnb listings aimed at visitors, not two people who already live here.
Built for Solo Founders, Weekend Builders, Side Hustlers.
Circana counted 1 billion fewer US restaurant meals in Q1 2025 versus Q1 2024.
Suggested stack: Next.js (App Router) + Vercel, Supabase or Convex, Stripe Checkout + Stripe Customer Portal, Resend, v0 or Bolt. Weekend scope: about 10 hours.
The Problem
Friday night arrives and the couple already knows the script. Same Italian place. Planning something better — dusk kayaking, an after-hours pottery studio, a rooftop that is not a…
The Solution
A one-city catalog for two, not a horizontal OTA. Twenty to thirty operators signed by hand: kayak outfits, after-hours studios, private chefs, night hikes. Each listing has a…
Market Research
The restaurant default is losing the 25–45 cohort. Circana counted 1 billion fewer US restaurant meals in Q1 2025 versus Q1 2024. CACI’s H1 2026 data showed restaurants as the…
Competitive Landscape
Airbnb Experiences — Default local-activity marketplace. 15 percent host fee, $250 million 2025 relaunch, nearly half of Q3 bookings unlinked to stays. Do not beat this on…
Business Model
Browse ($0) — City grid, vibe filters, a 50 non-dinner date PDF gated on email. Lead magnet, not a fake free tier.
Recommended Tech Stack
Next.js (App Router) + Vercel — Public catalog, gift landing, booking form. Static listing pages for SEO on “kayak date Austin” style queries once you have unique copy.
AI Prompts to Build This
Copy these build prompts into Claude, Cursor, or your AI coding tool. Create a free account to unlock the full research behind them.
1. Project Setup
Build the weekend MVP of "Night Out": a one-city catalog of adventure date nights for couples, where you book a slot or buy a gift voucher. Stack: Next.js (App Router), TypeScript, Tailwind, Supabase (Postgres, Row Level Security, Auth with email magic link for the admin only). Deploy on Vercel. No operator login and no native app. Tables (Row Level Security on: the public reads active listings and open slots, only the admin writes): - operators(id, name, email, phone, notes, active) - listings(id, operator_id, title, vibe, price_cents, duration_min, photo_url, description, active) where vibe is one of adventure, cozy, food, outdoors - slots(id, listing_id, starts_at, capacity, status) where status is one of open, held, sold, canceled - orders(id, type, listing_id, slot_id, theme, amount_cents, stripe_session_id, buyer_email, recipient_email, surprise, notes, status) where type is booking or voucher - vouchers(id, order_id, code, theme, amount_cents, redeemed_order_id, expires_at) Screens: / (city grid with vibe and max-price filters), /listings/[id], /admin (add listings and slots, see orders). Env vars (names only): NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_ANON_KEY, SUPABASE_SERVICE_ROLE_KEY (server only). Do not build: payments in this step, an operator login, payouts, a second city, a native app. Done when: npm run dev starts, the admin can add a listing and a slot, and the grid shows them with the vibe and price filters working.
2. Core Feature
Build the one feature that proves Night Out: pay for a slot or a gift voucher, and never sell the same slot twice. 1. Add env vars STRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRET and RESEND_API_KEY. Booking: POST /api/checkout/booking with slot_id and notes. Check the slot is open, set it to held, and create a Stripe Checkout Session (mode payment) with metadata slot_id and type booking. 2. On checkout.session.completed, mark the slot sold, insert the order, email the operator the listing, time, notes and allergies, and email the buyer a receipt through Resend. On checkout.session.expired, set the slot back to open. 3. Voucher: POST /api/checkout/voucher with theme, amount_cents (9900, 19900 or 29900), buyer_email, recipient_email, surprise and note. On completed, insert the order and a voucher with a 10-character code that expires in 12 months. If surprise is false, email the recipient the code. If true, email only the buyer a printable card. 4. Redeem: /redeem takes a code and a slot_id. Check it is unused and unexpired, then create a zero-amount booking linked to the voucher and mark the slot sold. Rules: orders.stripe_session_id is unique so a retried webhook never double-sells. Operator payouts stay manual. Done when: a test booking marks its slot sold and emails the operator, and a test voucher can be redeemed once and only once.
3. Landing Page
Build a one-page landing site and a /gift page for Night Out, one city (pick one and hardcode it). Hero: "Date night that is not another restaurant." Sub: "Kayaks, studios, private chefs. Book a Saturday slot or send a voucher they actually get to use." Buttons: Browse this weekend, and Send a gift. Grid: cards with photo, title, vibe chip, price for two and duration. Filter chips: Adventure, Cozy, Under $150, This weekend. If no slots are open, show "Gift a voucher: they pick the night." /gift: three vouchers at $99, $199 and $299 with what each includes, and a form for theme, recipient email, a surprise checkbox and a note. Trust line: "12-month expiry, real calendar slots, refund if we cannot place you." FAQ: weather cancellations and how the surprise works. Waitlist: until payments are live, the buttons store the email in a waitlist table in Supabase. No other service. Done when: the page renders on a phone and a submitted email appears in the waitlist table.
4. Branding Package
Use a design or image tool for this one. A coding agent cannot draw a logo. Brand for Night Out: a wordmark and a simple icon for a one-city date-night catalog. Look: a dark page with a mint accent, objects only and no stock couple photography (a compass, tickets, a paddle). Type: Geist. Deliverables: wordmark, icon, a set of three object illustrations for the grid, and one gift-card graphic. Done when: each deliverable is saved in one folder and the wordmark reads at 18px.