2026-04-15 17:00:31 +04:00
|
|
|
{
|
|
|
|
|
"name": "website",
|
|
|
|
|
"version": "0.1.0",
|
|
|
|
|
"private": true,
|
|
|
|
|
"scripts": {
|
2026-05-15 01:59:52 +04:00
|
|
|
"dev": "next dev --webpack",
|
2026-04-15 19:40:58 +04:00
|
|
|
"build": "next build --webpack",
|
2026-04-15 17:00:31 +04:00
|
|
|
"start": "next start"
|
|
|
|
|
},
|
|
|
|
|
"dependencies": {
|
2026-04-15 19:38:35 +04:00
|
|
|
"@sparticuz/chromium": "^147.0.0",
|
2026-04-21 21:19:47 +00:00
|
|
|
"@vercel/analytics": "^2.0.1",
|
Wave 2 hero — live streaming extraction (#22)
* feat(website): url safety guard
Blocks SSRF vectors before we hand the URL to Playwright: localhost,
*.local, *.localhost, IPv4 private ranges (10/8, 172.16/12, 192.168/16,
127/8, 169.254/16), IPv6 loopback/unique-local/link-local, file://,
javascript:, and non-80/443 ports. Pure function, no DNS — DNS-rebind
defense is Wave 3.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* feat(website): per-IP rate limiter (memory + optional KV)
Per-key sliding window limiter, default 3 hits per 24h. Map is
per-instance on Fluid Compute — documented tradeoff; Vercel BotID at
middleware (future PR) covers the cross-region gap.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* feat(website): streaming /api/extract with v7.0 outputs and rate limit
Rewrites the route to emit NDJSON events (stage, token, summary, files,
cache, error) so the hero can paint tokens as they resolve. Output map
now includes DTCG tokens, iOS/Android/Flutter/WordPress block theme,
MCP companion JSON, and agent rules — everything the CLI writes for
`--platforms all --emit-agent-rules`.
URL validation routed through url-safety; per-IP budget through
rate-limit. Cache module is a stub — full Blob implementation lands in
B.5; this commit wires the call sites so the route is complete.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* feat(website): hero stream renderer with live token paint
HeroExtractor reads NDJSON from /api/extract and paints as events
arrive: color swatches fade in left-to-right, type sample renders in the
detected font family, dimension bars grow by px, summary numerals
resolve at the end. Download-all-zip and copy-markdown buttons reveal
when the final files event lands. 429/400/500 paths each surface a
tuned error copy. Replaces the static form in page.js.
Motion is pure CSS keyframe + prefers-reduced-motion kill switch — no
Framer Motion.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* feat(website): cache extractions in Vercel Blob for 24h
Install @vercel/blob so the cache module (added in B.3) can read/write
extraction payloads. cache.js already implements cacheKey (sha-256 of
normalized URL), getCached (fetches Blob, enforces own 24h TTL via
generatedAt), and putCached (writes JSON with expiresAt metadata).
Route wires a `{type:'cache',cached:true}` event on hit, then replays
stages/tokens/summary/files in the same NDJSON shape. Missing
BLOB_READ_WRITE_TOKEN logs once and skips — local dev stays quiet.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-18 15:31:28 +04:00
|
|
|
"@vercel/blob": "^2.3.3",
|
2026-05-21 17:14:13 +04:00
|
|
|
"@vercel/speed-insights": "^2.0.0",
|
2026-04-15 19:38:35 +04:00
|
|
|
"jszip": "^3.10.1",
|
website: real logo, motion testimonials, polished footer, real gallery
Logo
- New brand-mark.svg: stacked rounded squares (back layer rotated, front
layer with a single bright "extracted token" dot in the corner). Red
gradient. Embedded in the nav with a hover wobble.
Footer
- Replaces the basic 4-col footer with a proper 5-section layout:
brand block (logo + tagline + npm/GitHub CTAs), 4 link columns
(Product, Install, Integrations, Crawlers), an outlined giant
"designlang" wordmark behind the columns, and a bottom strip with
v12.11.0, a green pulsing "all systems live" LED, author credit
and copyright.
Reddit testimonials
- Replaces the static 6-card grid with an auto-scrolling 3-column
marquee (motion/react) that shows the actual r/ClaudeAI launch
comments. Each card has a coloured initial avatar, the subreddit,
the user, the body, and a working "open ↗" link to the thread.
Real gallery
- Ran npx designlang against stripe.com, linear.app, vercel.com,
notion.so, figma.com, apple.com, arc.net and spotify.com. The full
extraction outputs (DTCG tokens, Tailwind config, brand book HTML,
preview, etc.) are committed under website/public/gallery/<slug>/.
- The landing's "Real extractions, on this site" cards now use the
brands' actual extracted primary + accent colours for the cover
gradient, render the brand favicon (icon.horse) as the cover badge,
and link directly to /gallery/<slug>/brand.html — the real brand
book the CLI produced.
Adds: motion ^x.x dependency.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 02:23:09 +04:00
|
|
|
"motion": "^12.38.0",
|
2026-09-11 04:48:19 +00:00
|
|
|
"next": "16.3.4",
|
2026-05-15 01:59:52 +04:00
|
|
|
"ogl": "^1.0.11",
|
2026-04-15 19:38:35 +04:00
|
|
|
"playwright-core": "^1.59.1",
|
2026-04-15 17:00:31 +04:00
|
|
|
"react": "19.2.4",
|
|
|
|
|
"react-dom": "19.2.4"
|
2026-04-24 23:55:07 +04:00
|
|
|
},
|
|
|
|
|
"overrides": {
|
2026-08-24 10:18:50 +00:00
|
|
|
"postcss": ">=8.5.26"
|
2026-04-15 17:00:31 +04:00
|
|
|
}
|
|
|
|
|
}
|