From 635670dd3eebf2c81c24f2d727e60060e4afc3b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Bokisch?= Date: Thu, 21 May 2026 13:58:46 +0200 Subject: [PATCH] docs: rebuild landing page with brand system + objective copy MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replaces the home page with a new "Composable Engine" design — stacked-triangle mark, Geist + Geist Mono, electric chartreuse accent (#C8FF3A), warm ink/paper neutrals — adapted for Fumadocs's existing dark/light class strategy. All marketing claims swapped for verified measurements from the monorepo on 2026-05-21: - "26 packages" → 15 packages (actual `packages/*` count) - "3 KB CSS engine" → 4.82 KB gzipped (actual styler bundle, also used in /docs/styler) - "122 motion presets" → 123 (actual exported consts in kinetic-presets) - 28 hooks, 170+ CSS prop descriptors, 5 element primitives — verified against source - Dropped "★ 1.2k on GitHub" (unverified), "Ship in a day", "up and running in minutes" Implementation: - `src/app/(home)/page.tsx` — full rewrite: hero (mark + orbit visual + objective stats), package ticker, 6-feature grid (3×2), demo split (copy + code), 16-card ecosystem grid, install CTA with terminal mock, footer - `src/app/global.css` — brand tokens scoped to `.vl-landing` so docs UI is unaffected; light mode is the default (`:root`), `.dark` flips ink + accent - `src/components/landing/Mark.tsx` — Mark + Lockup React components (solid / outline / minimal variants) - `src/components/landing/Counter.tsx` — renders final value statically (animated version was timing-fragile in headless environments and occasionally captured visitors mid-animation showing wrong numbers) - `src/components/landing/Reveal.tsx` — additive fade-in; SSR/no-JS renders content visible, only the client effect arms the hidden→reveal transition; respects prefers-reduced-motion - `src/components/landing/Ticker.tsx` — marquee of all 15 published package slugs - `src/lib/layout.shared.tsx` — fumadocs nav title now uses the Lockup component - `src/app/icon.svg` + `apple-icon.svg` — new triangle mark as Next.js app-router favicon (chartreuse for visibility on both light and dark tab backgrounds; apple icon has dark rounded background) Co-Authored-By: Claude Opus 4.7 --- src/app/(home)/page.tsx | 779 +++++++++++++---------- src/app/apple-icon.svg | 8 + src/app/global.css | 971 +++++++++++++++++++++++++++-- src/app/icon.svg | 5 + src/components/landing/Counter.tsx | 19 + src/components/landing/Mark.tsx | 100 +++ src/components/landing/Reveal.tsx | 74 +++ src/components/landing/Ticker.tsx | 36 ++ src/lib/layout.shared.tsx | 3 +- 9 files changed, 1610 insertions(+), 385 deletions(-) create mode 100644 src/app/apple-icon.svg create mode 100644 src/app/icon.svg create mode 100644 src/components/landing/Counter.tsx create mode 100644 src/components/landing/Mark.tsx create mode 100644 src/components/landing/Reveal.tsx create mode 100644 src/components/landing/Ticker.tsx diff --git a/src/app/(home)/page.tsx b/src/app/(home)/page.tsx index a7d7b91..44d4bf5 100644 --- a/src/app/(home)/page.tsx +++ b/src/app/(home)/page.tsx @@ -1,409 +1,532 @@ import Link from 'next/link' -import { Card, Cards } from 'fumadocs-ui/components/card' +import { Counter } from '@/components/landing/Counter' +import { Lockup, Mark } from '@/components/landing/Mark' +import { Reveal } from '@/components/landing/Reveal' +import { Ticker } from '@/components/landing/Ticker' -const uiPackages = [ - { - title: 'Core', - description: - 'Configuration singleton, CSS engine connector, and utility functions.', - href: '/docs/core', - }, - { - title: 'Styler', - description: - 'Lightweight CSS-in-JS engine (~3KB gzipped) with static/dynamic splitting.', - href: '/docs/styler', - }, - { - title: 'Attrs', - description: - 'Immutable chainable default-props factory for React components.', - href: '/docs/attrs', - }, - { - title: 'Elements', - description: 'Core UI primitives — Element, Text, List, Overlay, Portal.', - href: '/docs/elements', - }, - { - title: 'Rocketstyle', - description: - 'Dimension-based styling with theming, pseudo-states, and light/dark mode.', - href: '/docs/rocketstyle', - }, - { - title: 'Unistyle', - description: - '170+ CSS property mappings with responsive breakpoints and unit conversion.', - href: '/docs/unistyle', - }, +// Objective inventory — verified against the monorepo on 2026-05-21: +// 15 packages (packages/* count) +// styler bundle: 4.82 KB gzipped (size-limit budget 12 KB; actual measured) +// 28 React hooks (packages/hooks/src/use*.ts, deduped against .native variants) +// 123 kinetic presets (exported consts in kinetic-presets/src/presets.ts) +// 170+ CSS prop descriptors (packages/unistyle/src/styles/styles/propertyMap.ts) +// 5 element primitives: Element, Text, List, Overlay, Portal +const STATS = [ + { n: 15, lbl: 'Packages', suffix: '' }, + { n: 4.82, lbl: 'KB Styler (gzip)', suffix: '', float: true }, + { n: 170, lbl: 'CSS props', suffix: '+' }, + { n: 123, lbl: 'Motion presets', suffix: '' }, +] + +const FEATURES = [ { - title: 'Coolgrid', - description: - 'Flexible responsive grid system with Container, Row, and Col.', - href: '/docs/coolgrid', + glyph: '{ }', + title: 'Type-safe end to end', + meta: '01 · core', + body: 'Generic inference on dimensions, themes, and prop shapes. Iterator/List narrow per call-site mode; rocketstyle preserves dimension types through chain methods.', }, { - title: 'Hooks', - description: - '28 React hooks for state, DOM, events, timing, theming, and accessibility.', - href: '/docs/hooks', + glyph: '▽▽▽', + title: 'Composable by design', + meta: '02 · attrs', + body: 'Chainable factories — .attrs(), .theme(), .styles(), .compose(). priorityAttrs → attrs → explicit props (last wins). Marker-based detection (IS_ATTRS).', }, { - title: 'Connectors', - description: - 'CSS engine adapters — switch between Styler, styled-components, or Emotion.', - href: '/docs/connectors', + glyph: '⇌', + title: 'Swap the engine', + meta: '03 · connectors', + body: 'Same component code runs on built-in Styler (4.82 KB), styled-components, or Emotion via a single connector swap. RN target via connector-native.', }, { - title: 'Kinetic', - description: - 'Declarative enter/leave animations — Transition, Collapse, Stagger, and TransitionGroup.', - href: '/docs/kinetic', + glyph: '[ ]', + title: 'Responsive built-in', + meta: '04 · coolgrid', + body: 'Layout props accept scalars, arrays, or breakpoint objects. Mobile-first via the unistyle responsive resolver — no media-query boilerplate.', }, { - title: 'Kinetic Presets', - description: - '122 animation presets, 5 factories, and composition utilities for Kinetic.', - href: '/docs/kinetic-presets', + glyph: '( )', + title: 'Batteries included', + meta: '05 · tools-*', + body: 'Shared rolldown bundler, vitest config (90% coverage default), biome lint, and storybook 10 preset — published as separate @vitus-labs/tools-* packages.', }, { - title: 'Rocketstories', - description: - 'Auto-generated Storybook stories from rocketstyle components.', - href: '/docs/rocketstories', + glyph: '//', + title: '4.82 KB CSS engine', + meta: '06 · styler', + body: 'Static/dynamic split, React 19