feat: mile-marker posts travel with the road and carry the route log
This commit is contained in:
@@ -102,3 +102,11 @@ Run: `npm run build:preview` then serve `dist` (dev server shows a blank page).
|
||||
- **Budgets:** initial JS 115.43 KB gz (from 119.08: IconGlyph draws the six Phosphor glyphs from their regular-weight paths instead of importing the package components, which ship all six weights each), CSS 26.93 KB gz (+0.24), scene chunk 222.95 KB gz (+1.6), DashcamFrame 3.74 KB gz. 925 tests (79 files), violations [].
|
||||
- **Left:** relay lamp cores (a saturated violet cannot pass the luminance bloom threshold, so a violet core loses its glow); mast girth at 1024/phones (bounded by the panel-margin layout test); cold-GPU first frame; underpass pier vs billboard edge; yard lens slide and far-stack lean. Headless hardware-GL Chromium loses its GPU process when a project video starts (SharedImage BGRA failure), also at ca12cfd; not an app fault.
|
||||
- Screenshots: docs/overnight/polish/ (WEBP).
|
||||
|
||||
## Polish: mile markers ride the road (owner feedback)
|
||||
- **What:** the kilometre posts were parked at scroll-mapped z and stood still while idle ("way too static... half implemented"). They are now road furniture on a fixed 60 m lattice (4 posts, one InstancedMesh) driven by the drive's travel distance, like the rails, delineators and pylons, so they stream past at idle cruise and speed up with the drive. Plain posts carry a small dark plate with an accent rule and a lit three-digit kilometre number (digit strip in a canvas atlas). The route log rides the lattice: a post still in the haze (z < -165) is handed the next entry when, from the smoothed scroll rate and road speed, it would reach the pass line about when that entry's plate crosses the activation line, or straight away once the reader has stopped (0.4 s) on an entry it has not passed. That feature post gets a large dark plate (accent band "LOG 02/04 · EXP", the dates "JUN→AUG 2025", the organisation code "CCF", lettered from the page's inert input snapshot so nothing is added to the initial bundle), a lamp head that warms up as it approaches, an accent-tinted pool that sweeps the shoulder and lane as it passes, a +8% bass swell, and a soft glint at the pass line.
|
||||
- **Rules kept:** the road never runs backwards; scrolling back re-arms entries and their posts come up the road again. Predictions only reach the next entry either way and wait 0.3 s after a chapter change and 0.6 s after a sweep, so a navigator jump hands nothing out mid-flight; no glint while sweeping, at most one every 0.6 s. Chapter changes are linear 0.35/0.25 s screen-door ramps (no pop; Profile's left-shoulder posts fade as Experience's right-shoulder posts arrive). Plates stay under the bloom threshold; only the lamp blooms when close. Low tier/touch: no beam, pools, pulse or glint. Reduced motion and SSR untouched.
|
||||
- **Budgets:** initial JS 115.54 kB gz by Vite (+13 B gz: three more export bindings from route-log for the scene), scene chunk 225.05 kB gz (+2.1). 932 tests (79 files), violations [].
|
||||
- **Review (Sonnet, hardware GL):** per-frame allocations removed, non-finite distance guarded; featured plates now hang on a 4.2 m arm over the road (clears traffic at ~6.3 m) so the Experience plate is fully in frame at 1440.
|
||||
- **Left:** the first entry of a chapter can arrive late when the reader starts scrolling right at the heading (transit from the haze is ~6-10 s at cruise).
|
||||
- Screenshots: docs/overnight/polish/posts-*.webp (before/after, idle contact strips before and after, feature plate zoom).
|
||||
|
||||
Reference in New Issue
Block a user