Design & UI/UX
AAlgorithmic Art
algorithmic-art
Create generative art using p5.js with seeded randomness, flow fields, and particles.
landing-page-design
Complete system for high-converting landing pages: intake questions, structure, layout, conversion copy, SEO, and strict visual rules.
Install
npx skills add elayadesign/ai-design-skills
SKILL.md
A landing page is not a homepage. A homepage serves multiple intents. A landing page wins one intent:
one offer → one audience → one primary action.
This skill has two halves. Part A decides what the page says and how it is structured. Part B is the non negotiable visual system. Work through A before touching B.
Apply to all web UI work: landing pages, marketing sites, components, dashboards, prototypes, and design reviews. When a rule here conflicts with a framework default, this file wins. When the user's explicit prompt conflicts with a rule, the user wins.
Companion skill. For upgrading an existing site rather than building a new one, use redesign-existing-projects (github.com/elayadesign/redesign-skill). It diagnoses generic patterns and defers to this file for every concrete value.
Gather these before designing or writing. Ask only for what is missing, and ask in one batch rather than one question at a time.
Purpose
Audience and context
Proof and assets
Constraints
If the user cannot answer, make a reasonable assumption, state it in one line, and continue. Do not stall the build.
Above the fold (required)
Mid page (the argument) 6. Problem to solution, one section 7. Benefits, three to five, outcome driven 8. How it works, three steps 9. Social proof, testimonials or a case study
Bottom (objection handling) 10. FAQ, six to twelve questions 11. Risk reversal, trial, cancel anytime, guarantee 12. Final CTA, identical to the top
Include the mandatory tagline reveal section from B11 somewhere in the mid page argument, typically right after the hero or after benefits.
Pick one and say why.
| Type | Use when |
|---|---|
| A. Classic hero plus sections | The product is understandable from a hero screenshot. Most common. |
| B. Long form story | You need to educate and overcome skepticism. |
| C. Minimal conversion page | High intent traffic (email to known users), or a short offer like a download or waitlist. |
| D. Comparison page | Search intent includes alternatives ("X vs Y", "best for"). Usually paired with SEO pages. |
Match message to source. If traffic comes from ads, mirror the ad headline in the hero and keep the same promise and visual tone.
Make the next step obvious. One primary CTA. Never place competing CTAs above the fold.
Write benefit first. Features are what it does. Benefits are what that means for them.
Be specific.
Reduce risk. Pick at least one: free trial, free plan, no credit card, cancel anytime, money back guarantee.
Treat objections as a section, not a footnote. Move the FAQ earlier for high friction offers. Put proof directly beside the claim it supports.
Headline formulas
Subheadline. One or two sentences. Clarify what it is and who it is for.
CTA. Verb plus what they get. Never "Learn more" or "Submit". Use "Start free trial", "Book a demo", "Get the checklist".
Benefit bullets. Bold benefit, then the proof or detail. Example: Faster iteration — generate three layout variants in one click.
Note: the copy rules in B1 still apply. No hyphens inside sentences, no orphaned words.
Work section by section, in this order:
Never rebuild the whole page on each iteration. Section by section keeps control and keeps diffs reviewable.
Do not index ad only campaign pages or highly time bound offers. Use noindex or keep them behind a non indexed path.
Do index evergreen offers and pages where search intent matches the promise. Add a clear title and meta description, internal links from the homepage and feature pages, and the FAQ in plain question and answer form for AEO. Add FAQ schema if appropriate.
Every visual value must resolve through these rules instead of being invented ad hoc.
Use: Geist, Manrope, Geist Mono, Poppins.
Never use: Inter, Roboto, Arial, Open Sans, Helvetica.
Never use italic fonts anywhere in the interface.
One typeface per site. Do not pair two fonts unless the prompt explicitly asks for it. Geist Mono is allowed alongside a primary font only for code, data, or numeric UI where a monospace is functionally required.
Never use ultra bold weights (900 / black). Cap at semibold or bold.
No hyphens in text. Do not use - inside body copy, headings, or labels. Rewrite the phrase instead.
No orphaned words. A single word must never sit alone on the last line. Apply text-wrap: balance for headings and text-wrap: pretty for body copy.
Always resolve font sizes to Tailwind's default type scale. Never leave arbitrary values in place, including text-[19px], font-size: 22px, or 1.4rem.
If an existing size does not land exactly on a step, snap it to the closest step below, taking both the size and its paired line height.
| Class | Size | Line height |
|---|---|---|
text-xs | 12px (0.75rem) | 16px |
text-sm | 14px (0.875rem) | 20px |
text-base | 16px (1rem) | 24px |
text-lg | 18px (1.125rem) | 28px |
text-xl | 20px (1.25rem) | 28px |
text-2xl | 24px (1.5rem) | 32px |
text-3xl | 30px (1.875rem) | 36px |
text-4xl | 36px (2.25rem) | 40px |
text-5xl | 48px (3rem) | 1 |
text-6xl | 60px (3.75rem) | 1 |
text-7xl | 72px (4.5rem) | 1 |
text-8xl | 96px (6rem) | 1 |
text-9xl | 128px (8rem) | 1 |
Do not combine scale snapping with independently set custom line heights elsewhere in an audit. Tracking and line height may only be adjusted within the value the matched step already provides, so the two rules never fight each other.
text-base (16px), semibold.text-sm (14px), semibold.Only these values. Nothing between them, nothing outside them.
| Token | Value |
|---|---|
| Spacing-0 | 0 |
| Spacing-25 | 2px |
| Spacing-50 | 4px |
| Spacing-75 | 8px |
| Spacing-100 | 12px |
| Spacing-200 | 16px |
| Spacing-300 | 24px |
| Spacing-400 | 32px |
| Spacing-500 | 40px |
| Spacing-600 | 48px |
| Spacing-700 | 64px |
| Spacing-800 | 80px |
| Spacing-900 | 96px |
Main buttons: 8px vertical padding, 12px horizontal padding.
Only use Tailwind's radius values.
Nested radius formula. When a shape sits inside another shape and the gap between them is less than 32px:
inner radius = outer radius − gap
Apply this only when the result is greater than 2. Below that, leave the inner shape square or unchanged.
Example: an outer card at rounded-2xl (16px) with 8px of internal padding gives an inner element an 8px radius (rounded-lg).
Use only these:
#000000 · #181818 · #1F1F1F · #272727 · #313131 · #131209
#FFFFFF → #9B9B9B.#000000 → #666666.This is the one place gradients are used, and only on text, never on the background.
Use: Phosphor, Solar, or Iconamoon.
Never use: Material Icons, Material Symbols.
Never use default transitions. All motion simulates real world mass and spring physics through custom cubic beziers.
transition-all duration-700 ease-[cubic-bezier(0.32,0.72,0,1)]
Closed state. The navbar is a floating glass pill detached from the top: mt-6, mx-auto, w-max, rounded-full.
Hamburger morph. On click, the hamburger lines fluidly rotate and translate into a perfect X using rotate-45 and -rotate-45 with absolute positioning. They must never simply disappear.
Modal expansion. The menu opens as a screen filling overlay with a heavy glass effect: backdrop-blur-3xl bg-black/80 or bg-white/80.
Staggered mask reveal. Nav links inside the expanded state fade in and slide up from an invisible box, translate-y-12 opacity-0 resolving to translate-y-0 opacity-100, staggered per item with delay-100, delay-150, delay-200, and so on.
Elements never appear statically on load. As they enter the viewport they execute a gentle, heavy fade up:
translate-y-16 blur-md opacity-0 → translate-y-0 blur-0 opacity-100
over 800ms or longer.
For JavaScript driven reveals use IntersectionObserver or Framer Motion's whileInView. Never use window.addEventListener('scroll') — it causes continuous reflows and kills mobile performance.
Never ship filler. These are the tells that a page was generated rather than made.
99.99%, 50%, $100.00. Use organic data: 47.2%, $99.00, +1 (312) 847-1928.Every interactive element ships with its full state set:
scale(0.98) or translateY(1px) for physical feedbackwindow.alert().No dead links. A button pointing at # is either linked or visually disabled. The current page must be indicated in the navigation.
Things that get forgotten and make a page feel unfinished:
<title>, meta description, og:image, and social sharing tags<nav>, <main>, <article>, <aside>, <section>Every landing page includes one large type section stating the core benefit or tagline, separate from the hero. It sits further down the page as its own moment, not stacked directly under the hero.
Copy
Typography
text-4xl to text-6xl depending on line count, following the B1 type scale.Animation
IntersectionObserver per word, or a single scroll listener throttled through requestAnimationFrame. Never an unthrottled window.addEventListener('scroll'), per B7.When generating a landing page from scratch, return these in order before writing code:
Then build section by section per A6.
Strategy
Visual
Content and ship
Related
Design & UI/UX
Aalgorithmic-art
Create generative art using p5.js with seeded randomness, flow fields, and particles.
Design & UI/UX
Sanimate
Builds an animation from scratch by making the decisions in the order that determines whether it feels right.
Design & UI/UX
Abrand-guidelines
Apply brand colors and typography consistently across all generated artifacts.
Agent tooling
This index is ours, and so is the tooling behind it. If your team wants agents that understand how your own systems actually work, that is a thing we build.
Contact the dock
One address, read by the people who would do the work. No intake form, no calendar link — just an email.
tphamdn@gmail.com