Skip to content

feat(site): a landing page with beta sign-ups, served by one Node container - #112

Closed
lippdev wants to merge 8 commits into
mainfrom
feat/site
Closed

lippdev wants to merge 8 commits into
mainfrom
feat/site

Conversation

@lippdev

@lippdev lippdev commented Oct 22, 2026

Copy link
Copy Markdown
Owner

Site de apresentação do JoyChromium com inscrição no beta, para subir no Dokploy.

  • Página (site/public/): pt-BR, fundo escuro com brilho azul da marca, motion guiado pela rolagem no estilo Apple (a TV se endireita e cresce, os passos de uso acompanham as telas, o controle acende os botões). Fallback com IntersectionObserver e prefers-reduced-motion respeitado. Verificado em 1440 px e 375 px, sem rolagem horizontal.
  • Servidor (site/server.mjs): Node puro, sem dependências. POST /api/subscribe valida o e-mail, ignora duplicados e bots (campo isca), limita 5 tentativas por minuto por IP e grava em DATA_DIR/subscribers.jsonl. GET /api/subscribers.csv exporta a lista com ADMIN_TOKEN. CSP restrita, vídeo servido em ranges (Safari).
  • Deploy: site/Dockerfile + passo a passo do Dokploy em site/README.md (volume em /data, porta 3000).
  • node site/test.mjs cobre inscrição, duplicado, isca, CSV com/sem token e range do vídeo.

🤖 Generated with Claude Code

lippdev and others added 8 commits October 21, 2026 22:17
…tainer

A dark, blue-lit page in pt-BR with scroll-driven motion (a TV that straightens up, a feature stack that follows the
scroll, a controller that lights its buttons) and an e-mail form for the beta. server.mjs has no dependencies: it serves
public/, stores sign-ups in DATA_DIR/subscribers.jsonl and exports them as CSV behind ADMIN_TOKEN. Dockerfile and the
Dokploy steps are in site/.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…roll, and a page you can drive with a gamepad

The page is now React (Vite, Motion, Lenis) built into site/dist. The TV scene rebuilds JoyChromium's UI live and the
scroll plays it chapter by chapter (cursor, D-pad, keyboard, watching); a manifesto lights up word by word; the
controller section lights the button a real pad is pressing; the bento, FAQ and closing sign-up show the queue position
returned by the server. The site itself answers a gamepad like the app does: stick pointer, D-pad focus that the pointer
follows, A to click, right stick to scroll. The Dockerfile builds web/ in a first stage.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…cks into a glass capsule

The header is transparent and wide over the hero, then gathers into a glass capsule once the page moves. A highlight
slides to the section on screen (or the link under the pointer), a hairline shows reading progress, and the beta CTA
nudges its arrow. The word-by-word manifesto section is gone.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Mark and name, text links beside them (with GitHub), one solid action on the right. No capsule, badge, sliding
highlight or progress line; once the page scrolls under it, it only takes a translucent ground and a hairline.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The footer links the build log on filipemoreira.top (why browsing the web with a controller is harder than it looks),
signs the page as lippdev with the pixel avatar from that site, and links the site itself.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…on Whistler's nocturnes

A calm, light page instead of the dark glow: a centered serif statement with two actions, the live app framed on a
public-domain Whistler nocturne, a feature list that plays each gesture in the frame, the controller on a night panel,
value chips that switch the panel under them, an FAQ, the beta sign-up and a dark footer with columns, the story
behind the project and "Made by lippdev". Instrument Serif + Schibsted Grotesk. Also adds the GitHub banner
(docs/assets/banner.png 1280x640 for the social preview, banner-wide.png 1600x400).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A moon/sun button in the header, as on Zen. The first visit follows the system (and keeps following it until the
visitor picks a side); the choice is remembered, and theme.js sets it before the first paint so the page never flashes
the wrong theme. Night keeps the footer as the darkest layer and leaves the paintings as they are.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@lippdev

lippdev commented Oct 27, 2026

Copy link
Copy Markdown
Owner Author

Dropping this: the landing page lives elsewhere now.

@lippdev lippdev closed this Oct 27, 2026
@lippdev
lippdev deleted the feat/site branch October 27, 2026 17:02
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.

1 participant