launchframe 0.2.4 → 0.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/template/.amazonq/cli-agents/clone-website.json +1 -1
- package/template/.amazonq/rules/project.md +60 -0
- package/template/.augment/commands/clone-website.md +32 -2
- package/template/.claude/skills/clone-website/SKILL.md +32 -2
- package/template/.claude/skills/marketing-landing-production/SKILL.md +36 -0
- package/template/.clinerules +60 -0
- package/template/.codex/skills/clone-website/SKILL.md +32 -2
- package/template/.continue/commands/clone-website.md +32 -2
- package/template/.continue/rules/project.md +60 -0
- package/template/.cursor/commands/clone-website.md +32 -2
- package/template/.cursor/commands/marketing-landing-production.md +31 -0
- package/template/.cursor/rules/project.mdc +4 -1
- package/template/.gemini/commands/clone-website.toml +32 -2
- package/template/.github/copilot-instructions.md +60 -0
- package/template/.github/skills/clone-website/SKILL.md +32 -2
- package/template/.opencode/commands/clone-website.md +32 -2
- package/template/.windsurf/workflows/clone-website.md +32 -2
- package/template/AGENTS.md +48 -0
- package/template/docs/research/INSPECTION_GUIDE.md +12 -0
- package/template/src/app/globals.css +93 -1
- package/template/src/app/layout.tsx +3 -2
- package/template/src/app/page.tsx +3 -7
|
@@ -53,7 +53,9 @@ These are the truths that separate a successful clone from a "close enough" mess
|
|
|
53
53
|
|
|
54
54
|
**Raster & video are first-class.** Before you treat the page as “mostly typography,” run a dedicated **media inventory** (see `@docs/research/INSPECTION_GUIDE.md` Priority section): every `<img>`, `<picture>` / `<source>`, `<video>` (+ poster), and non-trivial `background-image`. Download to `public/images/` and `public/videos/` and write `docs/research/MEDIA_MANIFEST.md` (URL → local path, or `BLOCKED` + reason). Component specs MUST list concrete `public/...` paths; if you use a placeholder, say why in `docs/research/EXTRACTION_LIMITATIONS.md`. Never silently drop a hero layer, reel, or og visual.
|
|
55
55
|
|
|
56
|
-
**Motion defaults to Framer Motion.** This template lists `framer-motion` as a dependency. After foundation tokens, ensure `import { motion } from "framer-motion"` (and related APIs: `useScroll`, `useTransform`, `AnimatePresence`, `LayoutGroup
|
|
56
|
+
**Motion defaults to Framer Motion.** This template lists `framer-motion` as a dependency. After foundation tokens, ensure `import { motion } from "framer-motion"` (and related APIs: `useScroll`, `useTransform`, `AnimatePresence`, `LayoutGroup`, **`useReducedMotion`**) for: scroll-triggered reveals, staggered children, layout transitions, and gestures — anything beyond a trivial one-property CSS `transition`. In each spec file, add a **Motion** subsection: trigger, duration, easing, delay/stagger, **tier A–E coverage** (see `AGENTS.md` production polish table), reduced-motion fallback, and **implementation: CSS | framer-motion**. Prefer CSS only when it matches the target exactly without JS.
|
|
57
|
+
|
|
58
|
+
**Illustration & pixel art are production inputs.** Where the target (or post-rebrand layout) lacks convincing visuals, specs MUST still allocate **SVG illustration layers** — hero backdrop cluster, section separators, feature-card scenes tied to copy — using React SVG components (`currentColor` + theme vars). Pixel-art motifs require an explicit palette table in the spec. Do not ship ambiguous gray placeholders when `AGENTS.md` calls for production density on authored landings.
|
|
57
59
|
|
|
58
60
|
### 1. Completeness Beats Speed
|
|
59
61
|
|
|
@@ -367,10 +369,17 @@ For each section (or sub-component, if you're breaking it up), create a spec fil
|
|
|
367
369
|
- **<Element>:** <property>: <before> → <after>, transition: <value>
|
|
368
370
|
|
|
369
371
|
## Motion (Framer Motion vs CSS)
|
|
372
|
+
- **Tiers A–E:** <which tiers apply — load stagger, scroll reveal, ambient loop, interaction lifts, decorative parallax — list triggers>
|
|
373
|
+
- **Reduced motion:** <what disables or simplifies when user prefers reduced motion>
|
|
370
374
|
- **Entrance / scroll reveals:** <e.g. fade+translateY, staggerChildren — specify duration, easing, delay, viewport `once`/`margin`>
|
|
371
375
|
- **Library:** <`framer-motion` | CSS-only — justify if CSS-only>
|
|
372
376
|
- **Keyframes / springs:** <if any — match target curve>
|
|
373
377
|
|
|
378
|
+
## Illustration & pixel art *(production uplift)*
|
|
379
|
+
- **SVG components:** <named exports, paths using currentColor vs fixed fills>
|
|
380
|
+
- **Pixel motif:** <palette hex table, grid, scaling — or N/A>
|
|
381
|
+
- **Motif thread:** <how illustration echoes logo / OG / favicon>
|
|
382
|
+
|
|
374
383
|
## Per-State Content (if applicable)
|
|
375
384
|
|
|
376
385
|
### State: "Featured"
|
|
@@ -466,6 +475,26 @@ What you must NOT change in this pass:
|
|
|
466
475
|
|
|
467
476
|
After the rebrand pass, the codebase should look like the original site visually but read like the user's SaaS at a glance. Save a short `docs/research/REBRAND.md` summarizing the product name you chose, the headline rewrites, and any assets you swapped — so the user can audit what's clone-derived vs. authored.
|
|
468
477
|
|
|
478
|
+
## Phase 4.6: Production uplift *(sparse references / user asks for prod polish)*
|
|
479
|
+
|
|
480
|
+
Run this pass when **any** of the following is true:
|
|
481
|
+
|
|
482
|
+
- The cloned reference is mostly typography with weak imagery (internal demos, minimalist SaaS shells).
|
|
483
|
+
- The user asks for **more motion**, **SVG / illustration**, **pixel art**, **brandability**, or **production-ready** marketing polish.
|
|
484
|
+
- Visual QA feels “correct but dead” — layout matches but nothing moves and cards use unrelated placeholders.
|
|
485
|
+
|
|
486
|
+
**Do not contradict pixel-perfect emulation when cloning a rich reference** — this phase *adds* density only where the brief allows uplift or the reference was inherently flat.
|
|
487
|
+
|
|
488
|
+
Checklist (mirror `AGENTS.md`):
|
|
489
|
+
|
|
490
|
+
1. **Imagery** — Add layered hero treatment + purposeful SVG scenes per feature (swap nonsense placeholders). Prefer named components under `src/components/marketing/art/`.
|
|
491
|
+
2. **Motion tiers** — Implement at minimum **A + B + one of C/D**, optionally **E**: staggered hero load, `whileInView` sections + card stagger, looping ambient (marquee / caret / SVG dash loop), hover lifts / nav scroll shrink, optional light parallax. Gate loops with **`useReducedMotion()`**.
|
|
492
|
+
3. **Brand** — Establish motif thread + accent tokens in `:root`; refresh favicon / OG sketch to match.
|
|
493
|
+
|
|
494
|
+
Document deltas in `docs/research/PRODUCTION_UPLIFT.md` (what SVGs/motion/accent decisions shipped).
|
|
495
|
+
|
|
496
|
+
Invoke `.claude/skills/marketing-landing-production/SKILL.md` as a focused playbook for this pass.
|
|
497
|
+
|
|
469
498
|
## Phase 5: Visual QA Diff
|
|
470
499
|
|
|
471
500
|
After assembly, do NOT declare the clone complete. Take side-by-side comparison screenshots:
|
|
@@ -494,7 +523,8 @@ Before dispatching ANY builder agent, verify you can check every box. If you can
|
|
|
494
523
|
- [ ] For hover states: before/after values and transition timing are recorded
|
|
495
524
|
- [ ] All images in the section are identified (including overlays and layered compositions)
|
|
496
525
|
- [ ] Any `<video>` (and poster), Lottie, or canvas-driven hero is identified — not approximated as a static div
|
|
497
|
-
- [ ] **Motion** subsection filled: CSS vs **framer-motion**, durations, easings, stagger, scroll triggers
|
|
526
|
+
- [ ] **Motion** subsection filled: tiers **A–E** coverage (see `AGENTS.md`), CSS vs **framer-motion**, durations, easings, stagger, scroll triggers, **reduced-motion** fallback
|
|
527
|
+
- [ ] **Illustration** subsection filled when uplift applies: SVG components / palette / motif thread — or explicit **N/A** with justification only on strict clone parity jobs
|
|
498
528
|
- [ ] Responsive behavior is documented for at least desktop and mobile
|
|
499
529
|
- [ ] Text content is verbatim from the site, not paraphrased
|
|
500
530
|
- [ ] The builder prompt is under ~150 lines of spec; if over, the section needs to be split
|
|
@@ -50,7 +50,9 @@ These are the truths that separate a successful clone from a "close enough" mess
|
|
|
50
50
|
|
|
51
51
|
**Raster & video are first-class.** Before you treat the page as “mostly typography,” run a dedicated **media inventory** (see `@docs/research/INSPECTION_GUIDE.md` Priority section): every `<img>`, `<picture>` / `<source>`, `<video>` (+ poster), and non-trivial `background-image`. Download to `public/images/` and `public/videos/` and write `docs/research/MEDIA_MANIFEST.md` (URL → local path, or `BLOCKED` + reason). Component specs MUST list concrete `public/...` paths; if you use a placeholder, say why in `docs/research/EXTRACTION_LIMITATIONS.md`. Never silently drop a hero layer, reel, or og visual.
|
|
52
52
|
|
|
53
|
-
**Motion defaults to Framer Motion.** This template lists `framer-motion` as a dependency. After foundation tokens, ensure `import { motion } from "framer-motion"` (and related APIs: `useScroll`, `useTransform`, `AnimatePresence`, `LayoutGroup
|
|
53
|
+
**Motion defaults to Framer Motion.** This template lists `framer-motion` as a dependency. After foundation tokens, ensure `import { motion } from "framer-motion"` (and related APIs: `useScroll`, `useTransform`, `AnimatePresence`, `LayoutGroup`, **`useReducedMotion`**) for: scroll-triggered reveals, staggered children, layout transitions, and gestures — anything beyond a trivial one-property CSS `transition`. In each spec file, add a **Motion** subsection: trigger, duration, easing, delay/stagger, **tier A–E coverage** (see `AGENTS.md` production polish table), reduced-motion fallback, and **implementation: CSS | framer-motion**. Prefer CSS only when it matches the target exactly without JS.
|
|
54
|
+
|
|
55
|
+
**Illustration & pixel art are production inputs.** Where the target (or post-rebrand layout) lacks convincing visuals, specs MUST still allocate **SVG illustration layers** — hero backdrop cluster, section separators, feature-card scenes tied to copy — using React SVG components (`currentColor` + theme vars). Pixel-art motifs require an explicit palette table in the spec. Do not ship ambiguous gray placeholders when `AGENTS.md` calls for production density on authored landings.
|
|
54
56
|
|
|
55
57
|
### 1. Completeness Beats Speed
|
|
56
58
|
|
|
@@ -364,10 +366,17 @@ For each section (or sub-component, if you're breaking it up), create a spec fil
|
|
|
364
366
|
- **<Element>:** <property>: <before> → <after>, transition: <value>
|
|
365
367
|
|
|
366
368
|
## Motion (Framer Motion vs CSS)
|
|
369
|
+
- **Tiers A–E:** <which tiers apply — load stagger, scroll reveal, ambient loop, interaction lifts, decorative parallax — list triggers>
|
|
370
|
+
- **Reduced motion:** <what disables or simplifies when user prefers reduced motion>
|
|
367
371
|
- **Entrance / scroll reveals:** <e.g. fade+translateY, staggerChildren — specify duration, easing, delay, viewport `once`/`margin`>
|
|
368
372
|
- **Library:** <`framer-motion` | CSS-only — justify if CSS-only>
|
|
369
373
|
- **Keyframes / springs:** <if any — match target curve>
|
|
370
374
|
|
|
375
|
+
## Illustration & pixel art *(production uplift)*
|
|
376
|
+
- **SVG components:** <named exports, paths using currentColor vs fixed fills>
|
|
377
|
+
- **Pixel motif:** <palette hex table, grid, scaling — or N/A>
|
|
378
|
+
- **Motif thread:** <how illustration echoes logo / OG / favicon>
|
|
379
|
+
|
|
371
380
|
## Per-State Content (if applicable)
|
|
372
381
|
|
|
373
382
|
### State: "Featured"
|
|
@@ -463,6 +472,26 @@ What you must NOT change in this pass:
|
|
|
463
472
|
|
|
464
473
|
After the rebrand pass, the codebase should look like the original site visually but read like the user's SaaS at a glance. Save a short `docs/research/REBRAND.md` summarizing the product name you chose, the headline rewrites, and any assets you swapped — so the user can audit what's clone-derived vs. authored.
|
|
465
474
|
|
|
475
|
+
## Phase 4.6: Production uplift *(sparse references / user asks for prod polish)*
|
|
476
|
+
|
|
477
|
+
Run this pass when **any** of the following is true:
|
|
478
|
+
|
|
479
|
+
- The cloned reference is mostly typography with weak imagery (internal demos, minimalist SaaS shells).
|
|
480
|
+
- The user asks for **more motion**, **SVG / illustration**, **pixel art**, **brandability**, or **production-ready** marketing polish.
|
|
481
|
+
- Visual QA feels “correct but dead” — layout matches but nothing moves and cards use unrelated placeholders.
|
|
482
|
+
|
|
483
|
+
**Do not contradict pixel-perfect emulation when cloning a rich reference** — this phase *adds* density only where the brief allows uplift or the reference was inherently flat.
|
|
484
|
+
|
|
485
|
+
Checklist (mirror `AGENTS.md`):
|
|
486
|
+
|
|
487
|
+
1. **Imagery** — Add layered hero treatment + purposeful SVG scenes per feature (swap nonsense placeholders). Prefer named components under `src/components/marketing/art/`.
|
|
488
|
+
2. **Motion tiers** — Implement at minimum **A + B + one of C/D**, optionally **E**: staggered hero load, `whileInView` sections + card stagger, looping ambient (marquee / caret / SVG dash loop), hover lifts / nav scroll shrink, optional light parallax. Gate loops with **`useReducedMotion()`**.
|
|
489
|
+
3. **Brand** — Establish motif thread + accent tokens in `:root`; refresh favicon / OG sketch to match.
|
|
490
|
+
|
|
491
|
+
Document deltas in `docs/research/PRODUCTION_UPLIFT.md` (what SVGs/motion/accent decisions shipped).
|
|
492
|
+
|
|
493
|
+
Invoke `.claude/skills/marketing-landing-production/SKILL.md` as a focused playbook for this pass.
|
|
494
|
+
|
|
466
495
|
## Phase 5: Visual QA Diff
|
|
467
496
|
|
|
468
497
|
After assembly, do NOT declare the clone complete. Take side-by-side comparison screenshots:
|
|
@@ -491,7 +520,8 @@ Before dispatching ANY builder agent, verify you can check every box. If you can
|
|
|
491
520
|
- [ ] For hover states: before/after values and transition timing are recorded
|
|
492
521
|
- [ ] All images in the section are identified (including overlays and layered compositions)
|
|
493
522
|
- [ ] Any `<video>` (and poster), Lottie, or canvas-driven hero is identified — not approximated as a static div
|
|
494
|
-
- [ ] **Motion** subsection filled: CSS vs **framer-motion**, durations, easings, stagger, scroll triggers
|
|
523
|
+
- [ ] **Motion** subsection filled: tiers **A–E** coverage (see `AGENTS.md`), CSS vs **framer-motion**, durations, easings, stagger, scroll triggers, **reduced-motion** fallback
|
|
524
|
+
- [ ] **Illustration** subsection filled when uplift applies: SVG components / palette / motif thread — or explicit **N/A** with justification only on strict clone parity jobs
|
|
495
525
|
- [ ] Responsive behavior is documented for at least desktop and mobile
|
|
496
526
|
- [ ] Text content is verbatim from the site, not paraphrased
|
|
497
527
|
- [ ] The builder prompt is under ~150 lines of spec; if over, the section needs to be split
|
package/template/AGENTS.md
CHANGED
|
@@ -35,6 +35,51 @@ Treat these as **first-class deliverables**, not polish at the end.
|
|
|
35
35
|
|
|
36
36
|
1. **Raster & video** — Early in recon, inventory every `<img>`, `<picture>` / `<source>`, `<video>`, poster image, and meaningful `background-image` URL. Download into `public/` and reference **local paths** in specs and components. Hero bands and marketing sections often fail visually when a single layer is skipped.
|
|
37
37
|
2. **Motion** — Match the target’s feel: easing, duration, stagger, scroll triggers. Prefer **`motion` from `framer-motion`** for entrance sequences, viewport-driven animations, shared-layout-style transitions, and anything beyond a one-off CSS transition. Note in each component spec whether behavior is **CSS-only** vs **Framer Motion**.
|
|
38
|
+
3. **Illustration & brand marks** — Inline **SVG React components** (not only Lucide) for motifs that repeat across sections: logo glyph variants, dividers, grain/noise overlays, hero “scene” shapes, feature-card mini-compositions. Prefer **`currentColor`** + CSS variables so SVGs inherit theme tokens. For **pixel art**, keep a tight palette (4–8 fills), consistent pixel grid logic, and use `style={{ imageRendering: "pixelated" }}` on upscaled raster OR build pixel SVG paths intentionally — never blurry upscale.
|
|
39
|
+
|
|
40
|
+
## Production polish for marketing landings *(imagery + motion density + brandability)*
|
|
41
|
+
|
|
42
|
+
Use this whenever the page is **authored or minimalist** (internal templates, rebranded clones that still feel flat, or targets that are mostly typography). “Looks OK” is not ship-ready — **production landings** stack multiple visual layers, choreographed motion, and recognizable brand cues.
|
|
43
|
+
|
|
44
|
+
### Imagery density (every fold earns a visual idea)
|
|
45
|
+
|
|
46
|
+
- **Hero** — Never headline-only on white: add at least two of — soft gradient mesh / radial spotlight, subtle SVG grid or notebook lines, floating glyph cluster, ambient particle dots, masked photo or device frame with **real `public/` raster**, thin geometric frame that echoes the logo.
|
|
47
|
+
- **Between sections** — Optional SVG waves, angled cuts, or dashed “tape” strips so rhythm feels intentional.
|
|
48
|
+
- **Feature rows** — Replace generic placeholders (random shirts, blank boxes) with **purpose-built SVG scenes** tied to copy (capture → waveform + mic; workspace → windows + avatars; publish → export arrows + formats). Each card gets **foreground illustration + supporting UI chrome**, not one flat rectangle.
|
|
49
|
+
- **Social proof** — Logo strip may use grayscale marks; add **slow infinite marquee** or gentle opacity drift — motion sells “living product.”
|
|
50
|
+
|
|
51
|
+
### Motion choreography *(ship several layers; respect `prefers-reduced-motion`)*
|
|
52
|
+
|
|
53
|
+
Default minimum bar for authored landings — implement with **`framer-motion`** unless matching CSS-only parity:
|
|
54
|
+
|
|
55
|
+
| Tier | What users feel | Typical implementation |
|
|
56
|
+
|------|-----------------|-------------------------|
|
|
57
|
+
| **A — Page load** | Hero headline, subcopy, CTAs, and hero art **stagger in** (opacity + `y`, or blur-in for type) | Parent `variants` + `staggerChildren`; durations 0.35–0.7s, ease `[0.22, 1, 0.36, 1]` or springs |
|
|
58
|
+
| **B — Scroll** | Sections **ease up / fade** on first viewport entry; grids **stagger cards** | `whileInView` + `viewport.once`; `margin: "-80px"` tweak so reveals feel early |
|
|
59
|
+
| **C — Looping ambient** | Logo strip marquee; gradient drift; subtle SVG stroke dashoffset loop; “thinking…” **typing caret** | CSS `@keyframes` or Framer `animate` repeat; keep amplitude **low** |
|
|
60
|
+
| **D — Interaction** | Buttons scale/shine on hover; cards **lift** (`translateY`, shadow); nav **backdrop blur / height** past threshold | `whileHover`, `whileTap`; scroll listener or Framer scroll hooks for nav |
|
|
61
|
+
| **E — Decorative depth** | Pointer parallax on hero cluster (2–4 layers at different strengths) OR scroll-linked `useTransform` | Small rotate/translate ranges (≤ 8px / ≤ 2deg) |
|
|
62
|
+
|
|
63
|
+
Always gate looping motion: **`useReducedMotion()`** from Framer Motion — swap loops for static frames and shorten entrances.
|
|
64
|
+
|
|
65
|
+
### Brandability checklist *(distinctive, not generic SaaS gray)*
|
|
66
|
+
|
|
67
|
+
- **Motif thread** — One recurring visual hook (pen stroke, folded page corner, hub spark, pixel creature) reused in hero, favicon, OG image sketch, and one feature illustration.
|
|
68
|
+
- **Accent discipline** — Define **primary + secondary accent** in `:root` (even if mostly monochrome). Use accents on CTAs, SVG highlights, focus rings — not rainbow scatter.
|
|
69
|
+
- **Wordmark lockup** — SVG glyph + tracked type; provide **icon-only** variant for favicon / meta.
|
|
70
|
+
- **OG & SEO assets** — Generate **`public/seo/og.png`** (or route og image) that includes motif + product name — not a bare screenshot.
|
|
71
|
+
|
|
72
|
+
### Where artifacts live
|
|
73
|
+
|
|
74
|
+
- **Raster/video** — `public/images/`, `public/videos/` (see `MEDIA_MANIFEST.md`).
|
|
75
|
+
- **SVG React illustrations** — Prefer `src/components/marketing/art/` or co-located `*-scene.tsx` modules; export named components (`HeroBackdrop`, `FeatureCaptureIllustration`).
|
|
76
|
+
- **Pixel art** — Same folder pattern; document palette in file header comment.
|
|
77
|
+
|
|
78
|
+
### Spec requirement *(hand-off quality)*
|
|
79
|
+
|
|
80
|
+
When writing `docs/research/components/*.spec.md`, add sections **Illustration** (layers, SVG components, raster paths) and expand **Motion** with tier **A–E** coverage and reduced-motion fallback. Builders should not invent motion ad hoc — the spec states durations and triggers.
|
|
81
|
+
|
|
82
|
+
Invoke **`marketing-landing-production`** (`.claude/skills/marketing-landing-production/SKILL.md`) when the user asks for **prod-ready polish**, **more motion**, **SVG/pixel art**, or **stronger branding** on an existing landing.
|
|
38
83
|
|
|
39
84
|
## Commands
|
|
40
85
|
- `npm run dev` — Start dev server
|
|
@@ -64,6 +109,7 @@ Prefer **Playwright** for repeatable extraction in-repo — do **not** rely on C
|
|
|
64
109
|
## Design Principles
|
|
65
110
|
- **Images & video fidelity** — prefer real downloaded assets; preserve aspect ratio, `object-fit`, layering, and poster frames. Rebrand pass may **swap** URLs for IP-safe alternates but must keep layout identical.
|
|
66
111
|
- **Motion fidelity** — timing and easing matter as much as color; use Framer Motion when CSS alone cannot match staggered or scroll-driven behavior.
|
|
112
|
+
- **Production landing density** — For authored/minimal pages, deliberately add **SVG illustration layers**, **pixel-art accents**, and **tiered motion (A–E)** per “Production polish” above; static monochrome layouts are incomplete unless the user explicitly wants extreme minimalism.
|
|
67
113
|
- **Pixel-perfect emulation** — match the target's spacing, colors, typography exactly
|
|
68
114
|
- **No personal aesthetic changes during emulation phase** — match 1:1 first, rebrand later
|
|
69
115
|
- **Real content during extraction** — use actual text and assets from the target site so the clone scaffolds against real shapes
|
|
@@ -76,6 +122,7 @@ src/
|
|
|
76
122
|
app/ # Next.js routes
|
|
77
123
|
components/ # React components
|
|
78
124
|
ui/ # shadcn/ui primitives
|
|
125
|
+
marketing/ # Landing sections + authored SVG scenes (`art/` recommended)
|
|
79
126
|
icons.tsx # Extracted SVG icons as React components
|
|
80
127
|
lib/
|
|
81
128
|
utils.ts # cn() utility (shadcn)
|
|
@@ -96,5 +143,6 @@ scripts/ # Asset download scripts
|
|
|
96
143
|
- When launching Claude Code agent teams, ALWAYS have each teammate work in their own worktree branch and merge everyone's work at the end, resolving any merge conflicts smartly since you are basically serving the orchestrator role and have full context to our goals, work given, work achieved, and desired outcomes.
|
|
97
144
|
- After editing `AGENTS.md`, run `bash scripts/sync-agent-rules.sh` to regenerate platform-specific instruction files.
|
|
98
145
|
- After editing `.claude/skills/clone-website/SKILL.md`, run `node scripts/sync-skills.mjs` to regenerate the skill for all platforms.
|
|
146
|
+
- After editing `.claude/skills/marketing-landing-production/SKILL.md`, update `.cursor/commands/marketing-landing-production.md` to match (Cursor command is maintained beside the Claude skill until sync-skills grows multi-skill support).
|
|
99
147
|
|
|
100
148
|
@docs/research/INSPECTION_GUIDE.md
|
|
@@ -23,6 +23,18 @@ If automation hits a bot wall, **do not pretend extraction succeeded** — captu
|
|
|
23
23
|
- [ ] **Gestures** — drag, pan, hover follow (often Framer Motion)
|
|
24
24
|
- [ ] **Implementation rule** — use **`framer-motion`** for anything beyond trivial single-property CSS `transition`. Record **duration, easing, delay, stagger**, and **trigger** (scroll, hover, tap) in specs.
|
|
25
25
|
|
|
26
|
+
### 3. Illustration, pixel art & brand motifs *(production landings)*
|
|
27
|
+
|
|
28
|
+
When the reference page is **sparse** (mostly type + gray boxes) or after a **rebrand** the UI still reads generic, treat illustration as required inventory — not optional garnish.
|
|
29
|
+
|
|
30
|
+
- [ ] **Inline SVG** — hero shapes, dividers, card mini-scenes; note `viewBox`, whether fills use **`currentColor`**, and which CSS variables apply
|
|
31
|
+
- [ ] **Pixel art / sprite accents** — intentional palette (list hex fills), grid size, scaling strategy (`imageRendering`), animation frames if any
|
|
32
|
+
- [ ] **Motif thread** — recurring stroke/icon creature/grid that should echo across hero, OG sketch, favicon
|
|
33
|
+
- [ ] **Accent tokens** — beyond monochrome: primary/secondary accent roles for SVG strokes, CTAs, focus (extract or **define** in `:root` for authored pages)
|
|
34
|
+
- [ ] **Motion tiers A–E** — page-load stagger, scroll reveals + staggerChildren, looping ambient (marquee/caret), hover lifts, decorative parallax — document each with **reduced-motion** fallback (`prefers-reduced-motion`)
|
|
35
|
+
|
|
36
|
+
See **`AGENTS.md` → Production polish for marketing landings** for tier definitions and folder conventions (`src/components/marketing/art/`).
|
|
37
|
+
|
|
26
38
|
---
|
|
27
39
|
|
|
28
40
|
## How to Reverse-Engineer Any Website
|
|
@@ -46,6 +46,9 @@
|
|
|
46
46
|
--radius-2xl: calc(var(--radius) * 1.8);
|
|
47
47
|
--radius-3xl: calc(var(--radius) * 2.2);
|
|
48
48
|
--radius-4xl: calc(var(--radius) * 2.6);
|
|
49
|
+
--color-brand: var(--brand);
|
|
50
|
+
--color-brand-foreground: var(--brand-foreground);
|
|
51
|
+
--color-brand-muted: var(--brand-muted);
|
|
49
52
|
}
|
|
50
53
|
|
|
51
54
|
:root {
|
|
@@ -73,6 +76,10 @@
|
|
|
73
76
|
--chart-4: oklch(0.371 0 0);
|
|
74
77
|
--chart-5: oklch(0.269 0 0);
|
|
75
78
|
--radius: 0.625rem;
|
|
79
|
+
/* Scribewise brand accents (ink + notebook blue) */
|
|
80
|
+
--brand: oklch(0.52 0.14 252);
|
|
81
|
+
--brand-foreground: oklch(0.985 0 0);
|
|
82
|
+
--brand-muted: oklch(0.94 0.03 252);
|
|
76
83
|
--sidebar: oklch(0.985 0 0);
|
|
77
84
|
--sidebar-foreground: oklch(0.145 0 0);
|
|
78
85
|
--sidebar-primary: oklch(0.205 0 0);
|
|
@@ -84,6 +91,9 @@
|
|
|
84
91
|
}
|
|
85
92
|
|
|
86
93
|
.dark {
|
|
94
|
+
--brand: oklch(0.62 0.12 252);
|
|
95
|
+
--brand-foreground: oklch(0.145 0 0);
|
|
96
|
+
--brand-muted: oklch(0.26 0.04 252);
|
|
87
97
|
--background: oklch(0.145 0 0);
|
|
88
98
|
--foreground: oklch(0.985 0 0);
|
|
89
99
|
--card: oklch(0.205 0 0);
|
|
@@ -117,6 +127,88 @@
|
|
|
117
127
|
--sidebar-ring: oklch(0.556 0 0);
|
|
118
128
|
}
|
|
119
129
|
|
|
130
|
+
@keyframes scribewise-marquee {
|
|
131
|
+
from {
|
|
132
|
+
transform: translateX(0);
|
|
133
|
+
}
|
|
134
|
+
to {
|
|
135
|
+
transform: translateX(-50%);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
@keyframes scribewise-float {
|
|
140
|
+
0%,
|
|
141
|
+
100% {
|
|
142
|
+
transform: translateY(0);
|
|
143
|
+
}
|
|
144
|
+
50% {
|
|
145
|
+
transform: translateY(-8px);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
@keyframes scribewise-pixel-blink {
|
|
150
|
+
0%,
|
|
151
|
+
49% {
|
|
152
|
+
opacity: 1;
|
|
153
|
+
}
|
|
154
|
+
50%,
|
|
155
|
+
100% {
|
|
156
|
+
opacity: 0.25;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
@keyframes scribewise-grid-shift {
|
|
161
|
+
0% {
|
|
162
|
+
transform: translate(0, 0);
|
|
163
|
+
}
|
|
164
|
+
100% {
|
|
165
|
+
transform: translate(-24px, -24px);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
.scribewise-marquee-track {
|
|
170
|
+
display: flex;
|
|
171
|
+
width: max-content;
|
|
172
|
+
gap: 3rem;
|
|
173
|
+
animation: scribewise-marquee 42s linear infinite;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
.scribewise-bg-grid {
|
|
177
|
+
animation: scribewise-grid-shift 18s linear infinite;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
@media (prefers-reduced-motion: reduce) {
|
|
181
|
+
.scribewise-marquee-track,
|
|
182
|
+
.scribewise-bg-grid {
|
|
183
|
+
animation: none !important;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
.scribewise-pixel-brain rect,
|
|
187
|
+
.scribewise-soft-float {
|
|
188
|
+
animation: none !important;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
.scribewise-pixel-brain rect {
|
|
193
|
+
animation: scribewise-pixel-blink 1s steps(1, end) infinite;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
.scribewise-pixel-brain rect:nth-child(1) {
|
|
197
|
+
animation-delay: 0s;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
.scribewise-pixel-brain rect:nth-child(2) {
|
|
201
|
+
animation-delay: 0.12s;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
.scribewise-pixel-brain rect:nth-child(3) {
|
|
205
|
+
animation-delay: 0.24s;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
.scribewise-pixel-brain rect:nth-child(4) {
|
|
209
|
+
animation-delay: 0.36s;
|
|
210
|
+
}
|
|
211
|
+
|
|
120
212
|
@layer base {
|
|
121
213
|
* {
|
|
122
214
|
@apply border-border outline-ring/50;
|
|
@@ -127,4 +219,4 @@
|
|
|
127
219
|
html {
|
|
128
220
|
@apply font-sans;
|
|
129
221
|
}
|
|
130
|
-
}
|
|
222
|
+
}
|
|
@@ -13,8 +13,9 @@ const geistMono = Geist_Mono({
|
|
|
13
13
|
});
|
|
14
14
|
|
|
15
15
|
export const metadata: Metadata = {
|
|
16
|
-
title: "
|
|
17
|
-
description:
|
|
16
|
+
title: "Scribewise — AI workspace for structured notes",
|
|
17
|
+
description:
|
|
18
|
+
"Capture voice, screenshots, and messy thoughts into structured notes synced everywhere.",
|
|
18
19
|
};
|
|
19
20
|
|
|
20
21
|
export default function RootLayout({
|
|
@@ -1,9 +1,5 @@
|
|
|
1
|
+
import { ScribewiseLanding } from "@/components/marketing/scribewise-landing";
|
|
2
|
+
|
|
1
3
|
export default function Home() {
|
|
2
|
-
return
|
|
3
|
-
<main className="flex min-h-screen items-center justify-center">
|
|
4
|
-
<p className="text-muted-foreground">
|
|
5
|
-
Clone target not yet built. Run <code className="font-mono text-foreground">/clone-website</code> to start.
|
|
6
|
-
</p>
|
|
7
|
-
</main>
|
|
8
|
-
);
|
|
4
|
+
return <ScribewiseLanding />;
|
|
9
5
|
}
|