Mobile scrolling was janky from a stack of expensive paint passes
running every frame. This pass:
- CSS: hide .grain (SVG feTurbulence is the single biggest cost),
drop mix-blend-mode on .haze/.smoke-puff, drop backdrop-filter on
.cmd-box, hide the blurred arm-glow, and remove blur filters from
chip-glow / conveyor-pulse / scan-tear under <=760px.
- JSX: capture an IS_MOBILE flag once at boot. On mobile, halve
smoke puffs / chimneys / sparks / chip-pulse dots / embers, and
switch GSAP scrub from 0.6 (rAF interpolation) to true (direct
scroll-tied) — which is cheaper and more responsive.
- HUD: gate setProgress() on a changed integer depth (0..100) so we
re-render at most ~100 times per full scroll instead of every frame.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- PixelLogo scales to viewport via a responsive hook so FACERE no
longer overflows narrow screens.
- styles.css mobile breakpoints (760px / 480px / short-landscape)
unwrap headlines/body copy, compact the HUD, allow the install
command to wrap on tiny phones, and re-aim the bg pan origins so
the meaningful slice of each landscape image stays in frame.
- Shorten scroll-track to 480vh on phones — the GSAP timeline still
scrubs by progress so the choreography is preserved, just less
exhausting to swipe through.
- Bump cache-busting query string on css/jsx.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Move deploy/nginx.conf -> deploy/conf.d/default.conf and mount the
directory so future config changes can be hot-reloaded with
`nginx -s reload` instead of a full container restart.
- Add deploy/hook.py: a tiny stdlib HMAC-validated webhook listener that
runs pull.sh on Gitea push events. Bound to 127.0.0.1:9528 and
fronted by openresty at /_hook/deploy.
- Add the matching systemd unit at deploy/facere-deploy-hook.service.
- Teach pull.sh the new layout (reload vs. restart vs. compose up -d)
and self-restart the hook listener if hook.py changes.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Cron on the host runs deploy/pull.sh every minute. It fetches main,
fast-forwards the working tree, and restarts the facere-web container
when deploy/nginx.conf changes (Docker bind-mounts the file by inode,
so the in-container view is otherwise stale after a git reset).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Prevents leaking repo history, the docker-compose / nginx config, and
the auto-pull script via the publicly served root.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Bring in the newer app.jsx/styles.css/facere.html that were edited
directly on the deployed copy, rename Facere.html -> facere.html to
match the nginx index, and check in the docker-compose + nginx.conf
that drives the container.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>