You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
PlatonicLogo:
- Drag-to-spin with quaternion rotation and momentum physics
- Click faces for actions (next/prev shape, play/pause, spin, see-through)
- Preferences persisted to localStorage, auto-resume after 5s inactivity
- Morph scale shrink during transitions to prevent face overlap
- Translucent see-through mode with chroma boost, hover-to-opaque per face
- Light mode face darkening via color-mix to compensate for white bleed
- Touch support, pre-hydration 3D tilt, nav logo hidden on first paint
Syntax highlighting:
- Dual-mode chromatic tokens: warm light (blue/purple/green/red) vs cool dark
- Tagged template literal and import binding detection
- Regenerated CVD-optimized light palette at L=0.64 via qlab
Homepage & styling:
- Mobile latest post card above logo, centered
- Rainbow gradient inline code tags with 3x dark mode intensity
- Darkened textMuted for better light mode emdash/byline contrast
- Button > p margin reset for MDX paragraphs
Copy file name to clipboardExpand all lines: AGENTS.md
+2-1Lines changed: 2 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -47,6 +47,7 @@ Before editing anything that touches styled-components APIs (`createTheme`, `The
47
47
- Releases page uses `markdown-to-jsx`, not MDX.
48
48
-`${ClientComponent} &` selector interpolation in a styled template calls the referenced component's `.toString()`, which trips RSC's client-reference guard from a server module. Any styled component using this pattern must stay `'use client'`. Currently applies to `CodeBlock.tsx` (uses `${Note} &`).
49
49
- Import code mixins (`codeTextMixin`, `editorMixin`) from `components/codeMixins.ts`, not from `LiveEdit`. Importing from `LiveEdit` pulls `react-live-runner` + `sucrase` into the client bundle of every consumer.
50
-
-`utils/logoPalette.ts` is the single source of `LOGO_LUM`, `LOGO_CHROMA`, `logoHueRing()`. `PlatonicLogo.tsx` and `CelebrationEffect.tsx` import from it; don't duplicate the constants at call sites.
50
+
-`utils/logoPalette.ts` is the single source of the 20-step hue ring (offset 23°). Three L/C tiers: `logoPalette` (bright, for logo/celebration), `lightPalette` (CVD-optimized for light bg), `darkPalette` (CVD-optimized for dark bg). `theme.palette[N]` switches light/dark automatically. Syntax colors reference palette indices directly (e.g. `P[14]` for violet). Don't hand-pick oklch values — pick a palette index.
51
+
- Blog posts are assembled dynamically from MDX files at build time by `utils/blog.server.ts`. No JSON index to maintain — just create the MDX file with `export const meta`.
51
52
-`PlatonicLogo.tsx` faces must NOT use `backface-visibility: hidden`. Per-face axis-angle interpolation during morph transitions can briefly flip a face normal and cull mid-animation. `transform-style: preserve-3d` z-sorts back faces naturally.
52
53
-`CelebrationEffect.tsx` particles are `React.memo`'d; `onAnimationEnd` is a stable `useCallback` that reads `fwId`/`particleId` from `data-*` attributes. Don't close over IDs in per-item arrow functions — it defeats memoization on the particle list.
0 commit comments