[solvere]
$
← work
project 01wtedradio.com

WTEDRadio.com

A fan-run site for Goose listeners: stream WTED Goose Radio, follow the Wysteria Lane community, and browse a full setlist archive.

clientWysteria Lane LLC (volunteer-run; WTED Goose Radio)
year2026
roledesign and build
statusin production
what was built

The public site is one Next.js app at WTEDRadio.com. The homepage is a single shell: listen (player, schedule, song requests, now playing), community (featured Discourse topics), setlist archive (latest show and the full hub), and a signed-in profile with attendance and stats. Radio pages cover about/FAQ, episodes, and GORPs. The archive covers years, tours, per-show setlists, songs, stats, personnel, venues, discography, lists, Echo / Setlist Game, Goose 101, correction submit, and public user profiles.

The constraint that shaped the rest of it: the app is a static export on Netlify. There are no Next.js API routes, server actions, or middleware at runtime. Reads go to Supabase from the browser with the anon key. Anything that needs secrets, rate limits, or outbound HTTP (Radio.co, Discourse SSO, song requests, admin writes, search, push, share images) lives in Supabase Edge Functions.

the pieces
-Homepage shell: listen, community, archive, profile, and the radio/schedule/auth modals
-Admin / back-office: setlist, shows, songs, venues, discography, radio playlists, Bandcamp, and related tabs
-Integrations: Radio.co streaming, Discourse forum + SSO, Bandcamp, Stripe support, iOS/Android apps
-Permissions and audit: Supabase sessions, DiscourseConnect SSO, role-based admin, attendance and public profiles
screens
homepage: listen, community, archive, profile
show setlist, archive
signed-in profile: my stats
stack & architecture notes

It ships as static HTML/JS/CSS. The tradeoff was no Next server at request time: cheaper and simpler to host, but every privileged action has to be an Edge Function, and user-specific pages use query params (/user?id=) because IDs are not known at build time.

[ start a project → ]
$ cat stack.txt
frontend typescript · react · next.js
backend supabase edge functions
data postgres (supabase)
auth supabase session · discourse sso · role-based
hosting netlify (static export)
$ notes
Static export plus Edge Functions is the decision that kept secrets and licensing/API calls off the static host.