Skip to content

Build the weouthere.app website from the approved prototype - #5

Merged
EmotiveImpact merged 9 commits into
mainfrom
claude/website-build-dhxeck
Oct 16, 2026
Merged

EmotiveImpact merged 9 commits into
mainfrom
claude/website-build-dhxeck

Conversation

@EmotiveImpact

@EmotiveImpact EmotiveImpact commented Oct 15, 2026 •

Copy link
Copy Markdown
Owner

Requested by Edem · project thread

Before: the Outhere website only existed as a clickable prototype artifact with a pretend waitlist.

After: apps/web is the real site for weouthere.app. It looks and behaves like the approved prototype, page for page, and saves sign-ups, run club claims and Black invite requests to Outhere's Supabase project. Stacked on #6 (the monorepo setup), so this diff is the website only.

What's in it

  • Vite, React 19 and Radix UI: Dialog for the waitlist and phone menu, Tabs for the feature comparison, Accordion for the FAQ, Popover for the feature tips. The prototype's stylesheet, photography and 3D objects are carried over unchanged.
  • 38 prerendered pages:
    • home, crews, Black, privacy and a 404
    • one page per borough (/boroughs/<id>, ids matching supabase/seed.sql)
    • each with its own title, description, canonical link and social card, plus a generated sitemap and robots.txt
  • Home keeps every prototype section:
    • the hero reel: 15 connected shots, still for reduced motion, paused off screen
    • the manifesto that lights up as you scroll
    • the live 1v1 battle, city vs city and the London borough map
    • tiers with monthly and yearly prices (Black £12.99 a month), and the comparison tabs with tips
    • the Black band, the run club finder and the phone with the counting ring
    • the FAQ, and the final sign-up fading into the full footer
  • Invite links (weouthere.app/i/CODE) credit the friend who shared them.
  • Fonts are self-hosted. The site sets no cookies and loads nothing from third parties.

How

  • Monorepo: the site is the @outhere/web workspace package, checked by turbo like the other web packages. It uses @outhere/core for the club slug rule.
  • Club links: the site owns weouthere.app. Any path it has no file for (a club link such as weouthere.app/peckhampacers, or anything unknown) is rewritten to the member app at app.weouthere.app. A test checks that every top-level path the site serves is in RESERVED_SLUGS, so no club can take one. The strict CSP and frame rules apply only to the site's own pages, so proxied app pages keep their own headers.
  • Database: the tables and functions live in supabase/migrations/20261015100900_website.sql (Outhere mobile app, every prototype screen, on Supabase #4). The browser reaches them only through four functions using the anon key.
  • Without the database: if VITE_SUPABASE_URL and VITE_SUPABASE_ANON_KEY aren't set, the site runs on the prototype's example figures, labelled as examples, with simulated forms.

Checked

  • pnpm turbo run typecheck test lint build --filter "@outhere/web...": all green.
  • Side-by-side screenshots against the prototype at 1440px and 390px.
  • A scripted click-through of every form, menu, tab, tip, map tile and invite link, with no console errors.
  • A preview of this branch runs on Vercel (the hobby account). The live domain and DNS are untouched.

To go live: apply the Supabase migrations, set the two Supabase variables and VITE_SITE_URL, point the Vercel project at apps/web, and add the domain.

🤖 Generated with Claude Code

https://claude.ai/code/session_01A3KTjkLAXTgUTh3vXAChDA

Adds apps/site: the Outhere marketing and waitlist site rebuilt from the
website prototype as a Vite app with React and Radix UI. Every page is
prerendered to static HTML (home, crews, Black, privacy, a page for each
of the 32 boroughs and a 404), with the prototype's stylesheet, photography,
hero reel and interactions carried over.

Sign-ups, run club claims and Black invite requests go to Outhere's
Supabase project through four functions in db/website.sql, called with the
public anon key. Without Supabase settings the site runs on labelled example
figures and simulates the forms, as the prototype did.

Includes unit tests, SQL tests for the database functions, a Vercel config
with clean URLs, invite link rewrites and security headers, and a CI
workflow for the site.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A3KTjkLAXTgUTh3vXAChDA
@EmotiveImpact EmotiveImpact self-assigned this Oct 15, 2026

EmotiveImpact commented Oct 15, 2026 •

Copy link
Copy Markdown
Owner Author

Update: GitHub Actions is starting runners again. On 76be83a, "Typecheck, test, lint and build" and the member app and HQ checks all pass, and so does the Vercel preview.

Both Website checks failed within seconds, before any step ran, because GitHub Actions could not start runners for this repository. This affected every workflow in the repo and was not caused by this change.


Generated by Claude Code

The waitlist, club claims and Black requests now live in
supabase/migrations/20261015100900_website.sql (PR #4), so drop
apps/site/db and the website's own database CI job, and point the
docs there.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A3KTjkLAXTgUTh3vXAChDA
@vercel

vercel Bot commented Oct 15, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
outhere-site Ready Ready Preview Oct 15, 2026 1:35pm UTC

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A3KTjkLAXTgUTh3vXAChDA
- apps/site becomes apps/web (@outhere/web), installed with pnpm and
  checked by turbo like the other web packages; React 19 and the
  workspace's TypeScript and Vitest versions.
- Club links use slugify from @outhere/core, and a test checks every
  top-level path the website serves is in RESERVED_SLUGS.
- vercel.json passes any path the site has no file for to the member
  app at app.weouthere.app (club pages and its not-found page), keeps
  the strict CSP and frame rules on the site's own pages only, builds
  with pnpm and skips builds when the site has not changed.
- The Website workflow mirrors the member app's.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A3KTjkLAXTgUTh3vXAChDA
@EmotiveImpact
EmotiveImpact changed the base branch from main to claude/web-app-build-nig9rl October 15, 2026 12:51
The outhere-site Vercel project now builds from the repo root, so
branches without apps/web skip quietly through the ignored build step
instead of failing on a missing root directory.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A3KTjkLAXTgUTh3vXAChDA
Anyone in the UK can join on day one: the waitlist, club claims and Black
requests now ask for a launch city (plus the borough in London) or a town and
the region it plays for. The London borough map on the home page becomes a UK
launch map of the ten cities with every region's list, and the copy, Founding
500, Black, borough pages, footer, FAQ, feature table, meta and privacy notice
no longer read as London-only. Saved places from the old London-only waitlist
still load.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A3KTjkLAXTgUTh3vXAChDA
EmotiveImpact pushed a commit that referenced this pull request Oct 15, 2026
… or a town

From the website thread (PR #5). Waitlist, club_claims and
black_requests gain city_id, town and region; borough_id is optional
outside London. join_waitlist, claim_club and request_black take
p_city, p_borough, p_town and p_region, and website_stats returns
cities and regions.

Club links move to part 15 so they run after this, and an approved
claim now takes the city it named, or a city in its region, rather
than London.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GuNoar5FSdqFXBKo7d7CmV
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A3KTjkLAXTgUTh3vXAChDA
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A3KTjkLAXTgUTh3vXAChDA
@EmotiveImpact
EmotiveImpact changed the base branch from claude/web-app-build-nig9rl to main October 16, 2026 10:40
@EmotiveImpact
EmotiveImpact marked this pull request as ready for review October 16, 2026 10:40
@EmotiveImpact
EmotiveImpact merged commit f7d04b5 into main Oct 16, 2026
7 checks passed

This branch was successfully deployed

2 active (1 outdated) deployments
Preview — fe3ddb90 Deployed Oct 15, 2026 by vercel[bot]
Production — 34ac7375 Deployed Oct 15, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants