18What is the ideal line length for body text?
65–75 characters, roughly a 600–700px column at 16–18px. Constrain the text column even when the section background is full-width.
Spacing. Hierarchy. Colour. Restraint.
And the prompt structure that makes AI respect them.
Short answer: Good pages come from eight decisions, not from taste — one job per page, content before layout, a systematic spacing scale, an obvious type hierarchy, one accent colour, a 65–75 character line, 4.5:1 contrast, and deleting a third of what you built. AI tools execute all eight well when you specify them and badly when you don’t. The tool is not the variable. The decisions are.
Everyone shows you the finished design. The polished screenshot, the smooth scroll, the case study with the numbers at the end. Almost nobody shows you the part in the middle — the forty small decisions that turned a blank canvas into that page.
Those decisions are the design. The visual result is just what they add up to.
This is a walkthrough of the ones that matter most, and how to get Claude and ChatGPT to respect them instead of overriding them with defaults. If you want to sanity-check a prompt before you spend a generation on it, our free AI prompt checker scores it and tells you what is missing.
Before anything visual, one question: what is the single thing this page should cause?
A service page should cause a booked call. A blog post should cause trust and a subscription. A pricing page should cause a purchase or a qualified enquiry.
One job per page. When a page tries to do two things — book a call and sell a course and grow the newsletter — it does none of them. Every element either serves the one job or competes with it.
How to apply it: write the job at the top of your document before you design anything. “This page exists to get operations managers at 20–200 person companies to book a 30-minute call.” Every later decision gets tested against that sentence. Does this section move someone toward booking? If not, it is a candidate for deletion.
This is also the decision that separates a designer from a decorator. A decorator makes the page look nice. A designer makes the page work.
Most people open Figma and start with boxes, fill them with lorem ipsum, then bend the design around real copy when it finally arrives.
Work the other way. Write the actual words first — headline, subhead, section content, button labels — then build the layout around what you wrote.
Two things happen when you do this. The layout fits the message instead of the message fitting the layout. If your value proposition needs 40 words, you will design a section that holds 40 words comfortably. And weak copy becomes visible immediately — lorem ipsum hides the fact that you have nothing to say, real words do not.
This is the single biggest reason AI-generated pages feel hollow. Ask a model to design a landing page without giving it real content and it will invent placeholder copy — and placeholder copy produces placeholder layout.
If you fix only one thing on a page, fix the spacing. Cramped pages read as amateur regardless of how good the typography and colour are. Generous pages read as considered and expensive. Highest leverage available, and it costs nothing.
| Element | Spacing |
|---|---|
| Between major sections | 96–128px desktop, 64–80px mobile |
| Between a heading and its paragraph | 16–24px |
| Between paragraphs | 24–32px |
| Inside cards | 24–32px padding |
| Around buttons | 12–16px vertical, 24–32px horizontal |
Use a spacing scale, not arbitrary numbers. Pick a base unit — 4px or 8px — and only use multiples of it: 8, 16, 24, 32, 48, 64, 96, 128. The moment you use 13px here and 27px there, the page loses its rhythm even if nobody can articulate why.
Related space belongs together. A heading should sit closer to its own paragraph than to the section above it. Get proximity wrong and readers cannot tell which heading belongs to which content, no matter how clear the words are.
Hierarchy answers a question the reader never consciously asks: what do I read first? If everything is roughly the same size and weight, the eye has nowhere to land, and most readers will not do that work for you.
The gap between levels needs to be obvious. If your H2 is 20px and your body is 18px, that is not hierarchy, that is noise. Aim for at least a 1.25× jump between levels, more at the top.
Two font families maximum. One is usually better. A single family with three weights (400, 500, 700) produces more coherent results than two families do. If you use two, make them obviously different — a serif and a sans — so it reads as intentional.
Line height matters more than people think. Body text 1.5–1.7, headings 1.1–1.25. Tight line height on body text is the most common readability mistake in long-form content.
Multi-colour pages look cheap. Uncomfortable to hear if you like colour, but the pattern holds almost universally.
Look at Stripe, Linear, Vercel, Notion. Neutral foundation — white, black, a range of greys — and one accent that appears only where it means something: the primary button, a link, an active state.
Why it works: colour is a signal. If everything is colourful, nothing is signalled. When the accent appears in only one context, the eye learns within seconds that this colour means action, and the page becomes navigable without conscious effort.
Practical rule: neutrals for everything, one accent, and the accent appears on the primary CTA and nowhere else on the first screen. If you need a second colour, make it a state colour — red for errors, green for success — not a decorative one.
Skip the gradient. The purple-to-blue gradient is the single most recognisable AI-design tell in 2026. Not because gradients are bad, but because that particular one has been generated ten million times.
Body text should run 65–75 characters per line. On a 16–18px font that is roughly a 600–700px column, and it matches what Nielsen Norman Group’s readability research has found repeatedly.
Full-width paragraphs on a 1400px screen are genuinely hard to read — the eye loses its place returning to the start of the next line. Readers do not notice this consciously. They just leave.
Practical rule: constrain your text column with max-width: 65ch even when the section background runs full-width. The ch unit scales with your font, so the measure stays right when the type size changes. Content column and background width are separate decisions.
Body text against its background: 4.5:1 minimum. Large text at 24px and above: 3:1. Those are the thresholds in the WCAG 2.2 contrast guidelines.
Light grey text on white is the most common design mistake on the modern web. It looks refined on a good monitor in a dark room and becomes unreadable on a phone outdoors — which is where a large share of your traffic actually is.
Treat it as a quality standard, not just an accessibility box. If your text needs perfect conditions to be readable, the design has failed.
The last decision, and the hardest. Once a page is built, go through it and ask of each element: if I deleted this, would the page be worse? Most elements fail that test.
Restraint is what reads as premium. Not more polish — less content. One idea per section. Three features instead of six. One CTA instead of four. A page with five strong elements outperforms a page with fifteen mediocre ones, every time.
Here is the problem with AI design tools: they will happily make all eight decisions for you, and they will make them badly, because “make it beautiful” contains no information.
The output is predictable. Purple gradient hero. Floating card with a fake dashboard screenshot. Three feature columns with generic icons. Tight spacing. Two or three accent colours competing. Testimonials from people who do not exist.
It is not that the models cannot design well. An underspecified prompt gets answered with the statistical average of every landing page on the internet — and the average landing page is mediocre. This is the same failure mode behind most stalled AI projects: the brief was never specific enough to succeed.
The fix is to make the decisions yourself and hand them to the model as constraints.
Both lineups moved fast through 2026, so verify against the vendor docs before you rely on a specific name — Anthropic’s model overview and OpenAI’s model list are the sources of truth.
Anthropic currently offers Claude Opus 5 as the frontier model for complex work, Claude Sonnet 5 as the balanced everyday model, and Claude Haiku 4.5 for fast, cheap tasks. OpenAI currently runs the GPT-5.6 family, with GPT-5.5 and the GPT-5.4 tiers below it.
| Task | Reach for |
|---|---|
| Multi-section page that needs coherence across the whole thing | Claude Opus 5 |
| Iterating on a design visually, back and forth | Claude Design |
| Fast component work, single sections | Claude Sonnet 5 |
| Copywriting, headline variations, tone options | GPT-5.6 or Claude Opus 5 |
| Bulk variations, cheap and fast | Claude Haiku 4.5 / GPT-5.4 mini |
If you are choosing between Claude tiers on price and context rather than on design specifically, we compared all four in which Claude model you should actually use.
Claude Design is worth calling out separately because it changes the workflow rather than just the output. It works on a canvas — you describe a change, see it applied live, and refine from there. For pages you will iterate on ten or fifteen times, that loop is meaningfully faster than copy-pasting code between a chat window and an editor.
A combination that works well in practice: draft the copy with a strong general model, then build and iterate the page in Claude Design with the copy already written. That way you are never designing around placeholder text.
A weak prompt looks like this:
Design a modern, beautiful landing page for my AI automation agency.
That gets you the average. Here is the structure that does not:
ROLE
You are designing a [page type] for [specific audience].
GOAL
The single job of this page is to [one outcome].
CONTENT
[Paste your actual copy — headline, sections, CTA text.
Do not invent placeholder content.]
REFERENCES
Visual direction similar to [2–3 named sites].
Specifically: [what you like about them].
TYPOGRAPHY
[Font] for headings, [font] for body. Two families maximum.
H1 56px, H2 36px, body 17px, line height 1.6.
COLOR
Background [hex]. Text [hex]. ONE accent [hex].
Accent appears only on the primary CTA. No gradients.
SPACING
8px base scale. Section padding 112px desktop, 72px mobile.
Text column max-width 65ch.
LAYOUT
Single column, max-width 1100px, left-aligned.
CONSTRAINTS — do NOT use:
- Stock illustrations or 3D blob graphics
- Purple-to-blue or any multi-stop gradient
- Floating card mockups in the hero
- Emoji as icons
- More than one CTA above the fold
- Fabricated testimonials, logos, or statistics
- Carousels or auto-playing anything
OUTPUT
Single HTML file, inline CSS, no external dependencies
except the Google Font import.
Three parts of that carry most of the weight.
References beat adjectives. “Modern” means nothing — every model has seen a million pages described as modern. “Like Linear.app: dark background, tight type, minimal colour, generous spacing, no illustrations” gives the model something concrete.
Numbers beat descriptions. “Generous spacing” is interpretable. “112px section padding” is not. Anywhere you can specify a number, specify a number.
The negative constraints matter most. This is the part almost everyone skips, and it does the most work. Models default to the most common pattern in their training data, and the do NOT use block is how you steer away from it.
Read it back and ask whether a competent freelancer could build the page from it without asking you a single question. If they would need to ask “what font?” or “how much spacing?”, the model is guessing too.
Faster version: paste it into our free prompt checker, which scores the prompt and names what is missing — role, constraints, output format, success criteria. We wrote up the common failure patterns in why your prompt is weak and how to correct it. It is the same discipline as a design brief: vague in, average out.
The first output will not be right. That is expected — the skill is in the second, third and fourth pass. Change one thing at a time, specifically.
| Instead of | Say |
|---|---|
| “Make it better” | “Increase vertical spacing between all sections by 40%” |
| “The hero looks off” | “The H1 is competing with the subhead. Make the H1 1.5× larger and reduce the subhead to 18px regular weight.” |
| “Too busy” | “Remove the accent colour from everything except the primary button” |
| “Needs more impact” | “Cut this section from 5 features to the 3 strongest and increase their spacing” |
| “Fix mobile” | “At 375px width: reduce section padding to 64px, stack the two-column grid, and reduce H1 to 34px” |
“Make it better” invites the model to change things randomly, and you will often lose something that was working.
Lock in what works. When a section is right, say so explicitly: “The hero is final — do not change it. Now work on the pricing section.” Models will otherwise happily rewrite what you were happy with.
Ask for the reasoning first. “Before writing any code, list the design decisions you are making and why.” You catch bad choices before they are built, and it forces the model to be deliberate rather than reflexive.
Give it a critique pass. Paste the output back with: “Critique this design as a senior designer would. Identify the three weakest decisions and what you would change.” Models are consistently better at criticism than at first drafts.
Constrain the palette to hex codes. Do not say “blue” — give the exact hex. Otherwise you get a different blue every generation and nothing matches across pages.
Ask for a design token block. “Output all spacing, colour and type values as CSS custom properties at the top.” Global changes become trivial and every later page stays consistent with the first.
Set the tone explicitly. “Confident and technical, not playful. No exclamation marks.” Tone drift is one of the fastest ways a page starts feeling generic.
Design decisions and performance decisions are not separate. A beautiful page that loads in six seconds is a failed page.
Images. Convert to WebP or AVIF. Serve responsive sizes rather than one 3000px file scaled down in the browser. Lazy-load everything below the fold — but never the hero image, because lazy-loading it delays your Largest Contentful Paint, which is the opposite of the goal.
Fonts. Every family and weight is a separate download. Two families at three weights each is six files before any content renders. Subset to the characters you use, self-host rather than pulling from a third party, and set font-display: swap so text appears immediately — web.dev’s font guidance covers the trade-offs.
Mobile. Over half your traffic, and it needs decisions rather than a squeeze. Reduce section padding by roughly 40%. Drop heading sizes by 30–40%. Stack multi-column grids. Keep tap targets at 44×44px minimum. And cut content — a mobile page does not need everything the desktop page has.
Heading hierarchy. One H1 per page, containing your primary keyword naturally. H2s for sections, H3s for subsections. Do not skip levels for visual reasons — style them with CSS instead. Screen readers and search crawlers both navigate by this structure, and it is one of the levers that still works now that AI Overviews are absorbing a large share of clicks.
CTA placement. One above the fold, one mid-page after you have made the case, one at the end. Three is enough. Sticky headers with a permanent CTA work well; sticky bars that cover content do not.
Because underspecified prompts get answered with the most statistically common pattern in the training data. “Make it beautiful” has no information in it, so the model returns the average landing page — the same gradient, the same floating card, the same three-column feature grid. Specific constraints and explicit negative instructions are what break the pattern.
96–128px on desktop, 64–80px on mobile, using multiples of an 8px base scale. If a page feels amateur and you cannot say why, this is usually the reason.
Two families maximum, and one is often better. Use weight and size for variety rather than adding families.
A neutral foundation plus one accent, with the accent reserved for actions. Add state colours — error, success — only where they carry meaning.
65–75 characters, roughly a 600–700px column at 16–18px. Constrain the text column even when the section background is full-width.
It depends on the task. Claude Opus 5 handles multi-section pages that need internal coherence, Claude Design is better when you will iterate visually many times, and GPT-5.6 is strong for copy and structural variations. Most real workflows use more than one. Our Claude model comparison covers the cost side.
Test whether a competent freelancer could build the page from your prompt without asking a question. If they would need to ask about fonts, spacing or the page’s goal, the model is guessing too. Our free AI prompt checker scores a prompt and names what is missing.
It replaces the production time — the part where you translate a decision into markup. It does not replace the decisions themselves, which is what this article is about. A model given good constraints produces good work. A model given none produces the average.
Increase the spacing, cut to one accent colour, widen the gap between heading and body sizes, constrain the text column, and delete a third of the content. Those five changes fix most of what is wrong with a generated page.
Good pages are not the product of taste. They are the product of a small number of decisions made deliberately:
AI tools will execute all eight well if you specify them, and badly if you do not. The tool is not the variable. The decisions are.
Parix.ai builds AI workflow automation, web applications and the interfaces that make both usable — you can see how that plays out in our design workspace case study. If you have a page that is not converting or a process eating hours a week, get in touch.
A page that is not converting, or a process eating hours a week — both are decisions waiting to be made properly.
Claude Cowork can burn a day's usage limit before lunch, stop mid-task, or refuse to start on Windows. Most of it is…
Read
"Failed to connect" is not one MCP error, it is five. Find your exact error message, learn what it actually means, and…
Read
Connecting an AI model to your real systems is where a helpful assistant becomes something that can change your data. Twelve checks…
ReadBuild logs, design decisions and practical automation ideas from the Parix.ai team.
By joining, you agree to our Terms and Conditions.