-
Notifications
You must be signed in to change notification settings - Fork 1
Home
(Draft, Sep 2025)
-
Promote Firefox’s “Open What You Want” positioning via satirical, Gen Z–friendly creative.
-
Drive awareness, not data collection (no PII stored).
-
Anchor campaign activations (TwitchCon booth, influencer streams, Data War game) on a central microsite.
-
Landing Page — Campaign branding, ticker, hero banner.
-
Avatar Creation Modal
-
Users answer 7 multiple-choice questions (5 options each).
-
Avatar + bio generated via LLM API.
-
-
Avatar URL Assigned — User receives unique “all access pass” link (e.g.
/a/{hash}). -
Avatar Gallery & Playpen
-
Actions: space selfie, TikTok dance, etc.
-
Unlocks stored per-avatar, but experienced individually per user.
-
-
Return Visits —
-
Cookie auto-routes returning users to their avatar.
-
These URLs allow users to view/modify avatars (no authentication required).
-
-
Volume of avatars generated.
-
Engagement with playpen actions.
-
Return rate (users revisiting via hash/URL).
-
Social sharing (tracked via outbound links, not user IDs).
-
No email collection or CRM tie-in (legal constraint).
-
Must function on mobile + desktop with infinite scaling (no breakpoints).
-
Runs at least through end of 2025, possibly extended for card game.
-
Frontend: Next.js (on Netlify), Tailwind CSS, HeroUI (limited).
-
CMS: Sanity (content blocks, homepage cards, editorial updates).
-
Database: Supabase (Postgres) → avatar/user mapping + playpen action flags.
-
Image Storage:
-
LLM returns avatar/playpen images.
-
Store originals in Supabase Storage (private bucket).
-
Serve via CDN with signed URLs for caching + performance.
-
-
Hosting: Netlify (fast deploy, preview builds).
-
Version Control: GitHub (Mozilla enterprise repo).
Flow:
-
User submits choices → API → LLM generates avatar image + bio.
-
API stores result in Supabase:
-
Avatarstable - one row per unique avatar, up to N rows per choice combination. -
Userstable - one row per unique hash.
-
-
Avatar/playpen images stored in Supabase Storage → cached CDN delivery.
-
User gets unique hash in URL + cookie for return visits.
Table: Avatars
-
id(PK, UUID) -
combination_key(string: concatenated 7 answers, eg. '5324153') -
image_url(string, Supabase storage path) -
bio_text(text) -
playpen_selfie_url(string, nullable) -
playpen_tiktok_url(string, nullable) -
created_at(timestamp)
Table: Users
-
id(PK, UUID / hash) -
avatar_id(FK → Avatars.id) -
cookie_id(string, optional for return routing) -
playpen_selfie_unlocked(boolean) -
playpen_tiktok_unlocked(boolean) -
created_at(timestamp)
-
Each combination of answers = deterministic
combination_key. -
On first N requests:
-
Generate avatar via LLM.
-
Insert into
Avatars(up to N variants allowed per combination).
-
-
On subsequent requests (N+1):
-
Randomly select from existing Avatars for that combination.
-
Create new User pointing to that randomly assigned Avatar.
-
Playpen actions:
-
If avatar doesn’t have action → LLM generates asset, stored in
Avatarstable. -
If avatar already has action → user experience references stored asset.
-
User table tracks whether they have “unlocked” the action (boolean).
-
No PII collected.
-
User hashes = UUID or salted hash (timestamp + choices + random).
-
Hash must be unguessable to prevent brute-force enumeration.
-
Images stored in private buckets → accessed via signed CDN URLs.
-
Cookies store only
user_idhash, no sensitive data.
-
Netlify handles build + deploy (Next.js SSR where needed).
-
Supabase (DB + storage) = single source of truth.
-
CDN caching for images.
-
Monitoring/observability: Netlify Analytics + Supabase logs.
-
Scaffolding
-
Next.js project setup in Mozilla GitHub.
-
Sanity CMS integration for homepage cards.
-
Tailwind + HeroUI baseline setup.
-
-
Core Components
-
Header (nav, logo, social links).
-
Footer.
-
Bento grid + ticker.
-
Card wrapper component (consistent styling).
-
-
Avatar Flow
-
Modal for 7-question quiz.
-
API call to LLM + Supabase insert.
-
Hash + cookie handling.
-
-
Playpen Actions
-
Selfie + TikTok endpoints.
-
DB + storage logic for memoization.
-
UI for unlocking actions.
-
-
Routing & Persistence
-
/a/{hash}pages. -
Cookie-based return logic.
-
-
Performance & Testing
-
CDN image caching.
-
Accessibility (clickable CTAs, keyboard nav).
-
QA on infinite scaling design.
-
-
N value for memoization (10? 20?).
-
CDN choice: Supabase’s built-in vs Netlify Blob.
-
Easter egg unlocks (Data War cards) → DB design needed.
-
Sunset plan for 2026: archive vs ongoing maintenance.