FrankenSuite Website Development
SkillWeb & browsingBuild FrankenSuite project websites matching frankentui.com quality. Use when creating a new FrankenSuite website, adding pages/sections, or adapting the design system for a different project.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the FrankenSuite Website Development skill
What this skill tells your AI
The instructions your AI receives, as published by lev-os/agents in skills-db/design-ux/frankensuite-website-development/SKILL.md and read by ahel’s review.
Reference implementation:
/data/projects/frankentui_website(frankentui.com) Read the source files AND DESIGN-PHILOSOPHY.md before building.
Brand Essence
"Laboratory of Beautiful Monsters" — industrial horror meets Stripe-grade polish.
- Bolts = fasteners, Stitches = sutures, Glitches = electrical surges, Eye = the monster watching, Green = life force
- Every heading uses the "One Green Word" pattern:
"Get [Started]."— green word is the most evocative, period makes it declarative - Micro-labels (
text-[10px] font-black uppercase tracking-[0.3em]) appear everywhere — eyebrows, status indicators, nav badges, stats. This is what makes it feel like an instrument dashboard, not a blog - The site breathes through 4 atmospheric layers: GlowOrbits (background) → SpectralBackground noise/grain (atmosphere) → glass-modern cards (content) → custom cursor (interactive)
- Homepage is a scroll narrative — each section is a story chapter from "Here's what this is" (hero) through "Others love it" (tweets) to "The machine is alive" (footer)
Full philosophy, anti-patterns, visual language: DESIGN-PHILOSOPHY.md
Quick Start
bunx create-next-app@latest <project>-website --ts --tailwind --app --src-dir=false
cd <project>-website
bun add framer-motion lucide-react clsx tailwind-merge highlight.js marked dompurify
Copy from frankentui_website:
# Required (brand consistency)
components/ franken-elements.tsx franken-glitch.tsx franken-eye.tsx
motion-wrapper.tsx section-shell.tsx client-shell.tsx
site-header.tsx site-footer.tsx custom-cursor.tsx
lib/ utils.ts site-state.tsx
hooks/ use-body-scroll-lock.ts use-intersection-observer.ts
app/ globals.css
# Optional (copy as needed)
components/ glow-orbits.tsx spectral-background.tsx terminal-demo.tsx
screenshot-gallery.tsx rust-code-block.tsx comparison-table.tsx
timeline.tsx tweet-wall.tsx video-player.tsx stats-grid.tsx
animated-number.tsx decoding-text.tsx error-boundary.tsx
motion/index.tsx motion/magnetic.tsx
Then: create lib/content.ts → update app/layout.tsx (Inter + JetBrains Mono) → build pages.
Full step-by-step: ADAPTATION-GUIDE.md
Workflow
- Scaffold Next.js 16 + BUN
- Copy design system + shared components
- Create
lib/content.ts(ALL content in this one file) - Build homepage following scroll narrative order
- Build subpages: Showcase, Architecture, Getting Started (minimum)
- Verify mobile: bottom nav, responsive grids, touch interactions
-
bun run build && bun tsc --noEmit— zero errors - Deploy to Vercel
Tech Stack
Next.js 16 (App Router, Turbopack) · React 19 · Tailwind CSS 4 (@tailwindcss/postcss, no tailwind.config) · Framer Motion 12 · lucide-react · Inter + JetBrains Mono via next/font/google
BUN only — never npm/yarn/pnpm. TypeScript strict, bundler resolution, @/* path alias.
Architecture
RootLayout (server) → ClientShell ("use client" boundary)
├── SiteProvider (context: anatomy, terminal, audio)
├── SiteHeader (desktop pill nav + mobile bottom nav)
├── AnimatePresence page transitions
│ └── {children}
├── SiteFooter
└── CustomCursor (desktop only)
SectionShell — core layout primitive (4/8 col grid, sticky sidebar):
<SectionShell id="features" icon="sparkles" eyebrow="Why" title="Built Different" kicker="...">
{/* content */}
</SectionShell>
Content centralization: ALL data in lib/content.ts — siteConfig, navItems, heroStats, features, screenshots, codeExample, comparisonData, changelog, tweets. Types co-located. Never separate data files.
Component details: COMPONENTS.md · Motion system: EXACT-VALUES.md
Key Design Patterns
| Pattern | Implementation | Details in |
|---|---|---|
| Glass morphism | rgba(5,18,5,0.8) + blur(12px) + green/12% border | DESIGN-SYSTEM.md |
| Micro-labels | text-[10px] font-black uppercase tracking-[0.3em] | DESIGN-PHILOSOPHY.md |
| Viewport entry | opacity:0,y:40 → 1,0, ease [0.19,1,0.22,1] | COMPONENTS.md |
| Spring presets | smooth/snappy/gentle/quick | COMPONENTS.md |
| Custom cursor | data-technical / data-flashlight / data-magnetic / data-cursor | COMPONENTS.md |
| Desktop nav | Floating pill, transparent → glass-modern on scroll | RESPONSIVE.md |
| Mobile nav | Bottom tab bar (not hamburger), slide-out drawer | RESPONSIVE.md |
| CTAs | Primary bg-green-500 rounded-2xl, never rounded-full | DESIGN-PHILOSOPHY.md |
| Section spacing | py-16 md:py-32 lg:py-48 — extreme breathing room | DESIGN-PHILOSOPHY.md |
| Hero formula | Eyebrow → big title (green word + period) → subtitle → CTAs → stats → FrankenEye | DESIGN-PHILOSOPHY.md |
| Decorative system | FrankenBolt/Stitch/Container/Glitch/Eye — shared brand chrome | COMPONENTS.md |
| OG images | Satori/next/og — PNG only, no <br/>, display:"flex" everywhere | ADAPTATION-GUIDE.md |
Gotchas
- SectionShell icon: String key, not component ref. Add to BOTH import AND
sectionIconsmap - Server/Client boundary: No
next/dynamicwithssr: falsein Server Components (Next.js 16). Import"use client"components directly - React 19: No ref writes during render. No synchronous setState in effects
- Satori (next/og): No WebP, no
<br />, noborderRadius: "full"(use "9999px"). Pre-convert with sharp - Linter auto-modifies: Re-read files before editing — ESLint may have changed imports
- .next/cache:
rm -r .next/cachefixes phantom type errors - BUN only:
bun dev,bun run build,bun lint,bun tsc --noEmit - Content: ALL data in
lib/content.ts— never separate data files - RustCodeBlock: Uses
titleprop, NOTfilename - GlowOrbits: Native Web Animation API — don't convert to Framer Motion
- Portal: Fixed-position inside transform parents breaks — use Portal from motion-wrapper.tsx
- Body scroll lock: Must compensate scrollbar width — use
useBodyScrollLock - Event listeners: Always
{ passive: true }for scroll/mouse. RAF batching for cursor. - Font loading: Both fonts need
display: "swap"to prevent FOIT
Adapting for a New Project
- Read DESIGN-PHILOSOPHY.md first — absorb the aesthetic soul
- Fork structure, not code — same tech stack, same visual language
- Replace content — new
siteConfig,navItems,features, etc. - Swap accent color — update
--color-green-primein CSS vars + component defaults - Keep decorative system — FrankenBolt/Stitch/Container/Glitch for brand unity
- Follow the scroll narrative — homepage tells a story, each section is a chapter
- Maintain micro-labels — every section needs the 10px uppercase eyebrow
- Preserve atmosphere — GlowOrbits + noise + glass-modern + breathing space
- Test the "alive" feeling — if the page feels static, something is missing
Full 10-phase guide + checklist: ADAPTATION-GUIDE.md
References
| I need to... | Read |
|---|---|
| Understand the brand, visual language, anti-patterns | DESIGN-PHILOSOPHY.md |
| Look up CSS vars, glass-modern, typography, utility classes | DESIGN-SYSTEM.md |
| Understand a component's API, behavior, or props | COMPONENTS.md |
| Get exact values (SVG paths, spring configs, magic numbers) | EXACT-VALUES.md |
| See page-by-page implementation patterns | PAGES.md |
| Check responsive/mobile behavior | RESPONSIVE.md |
| Follow step-by-step new project setup | ADAPTATION-GUIDE.md |
Signals
- GitHub stars
- 22
- Forks
- 2
- Last commit
- Sep 2026
ahel review
K1binfo
installs-packages (in references/EXACT-VALUES.md)
Automated review, not a security audit. Ruleset v1+k2.
Advanced
- Catalog kind
- skill
- Gateway key
frankensuite-website-development- Source
- github.com/lev-os/agents