This folder is the source of truth for the public creator website. The older export folders are archival build artifacts; edit this folder, validate it, then let the approved deploy step publish it.
The stack is intentionally free:
- GitHub Pages static hosting
- Supabase free tier for browser auth, profiles, and newsletter signup
- Plain HTML, CSS, and vanilla JavaScript
- Data-driven pages from
data/*.json - No payments, no tracking scripts, no platform automation
- Home, Live, Chat, Schedule, Clips, Community
- Join, Login, Members, Profile, Newsletter
- About, Support, Merch, Sponsors, Opinions, Articles, Contact
- Privacy, Terms, 404
Edit the JSON files under data/:
site.json: site identity, live status, active public channelsplatforms.json: public channels and pending channel notesschedule.json: upcoming streams and recurring blocksclips.json: approved public clips and VOD entriesarticles.json: approved public recaps and notescommunity.json: rules and public community channelssupport.json: free support and member valuesponsors.json: sponsor policy and media-kit statusmedia_kit.json: audience-fit structure and owner-reviewed metrics statusopinions.json: Sami's personal takes / opinion postsmerch.json: reviewed merch or support itemsmember_posts.json: members-only prompts, topics, and bonus notes
Use honest empty states when content is not posted yet. Do not invent cards just to fill a layout.
A "Going live for the very first time tomorrow" announcement is live in two places, both easy to change:
- Sitewide amber banner (top of every page) and the home live-status card:
controlled by
data/site.json.- To take it down once the first stream is over, open
data/site.jsonand:- set
"announcement"->"enabled": false(hides the banner), and - edit
"status".title/"status".messageback to everyday copy, and - edit
"bio".enback to everyday copy.
- set
- To change the wording, just edit
"announcement".message/"announcement".label(and"status"/"bio") in the same file. No code or redeploy of JS is needed; the pages read the JSON live.
- To take it down once the first stream is over, open
- Home hero headline: a clearly commented block in
index.html(search forFIRST-STREAM ANNOUNCEMENT). Edit theeyebrow,h1, and live-badge fallback text there back to the everyday copy after going live.
Run this off-stream to gather draft website items from companion outputs:
python website\tools\draft_from_companion.pyThe script writes draft-only JSON into data/_drafts/. It never publishes,
deploys, uploads, posts, or edits live data. A human reviews the draft, adds real
public URLs, and manually moves approved items into the live data/*.json files.
Create a free Supabase project, apply supabase/schema.sql, then put only the
public project URL and public anon or publishable browser key in js/config.js.
Never commit privileged backend keys, admin tokens, passwords, cookies, or
private credentials.
Required Supabase settings:
- Enable email auth.
- Add the public site domain to allowed auth redirects.
- Keep Row-Level Security enabled.
- Keep the policies in
supabase/schema.sql.
python -m http.server 8090 --directory websiteOpen the local preview URL in a browser. Supabase auth requires the public URL, browser key, and redirect settings before real login flows work.
python website\deploy.py --check
python website\deploy.py --check --packageThe helper checks required files, unresolved editable markers, local links, JSON, public-safety patterns, and site content markers. It does not deploy, push, open a browser, or make network calls.
Do not publish automatically. The owner should review the validated site and run the approved GitHub Pages deploy flow separately.