No Lighthouse measurement available; no scores assigned.
01 / WHAT WORKS
What makes it work
No separate strengths were recorded. See the evidence below.
02 / NEXT STEPS
Where to go next
See the individual checks for further guidance.
03 / DESIGN LANGUAGE
A design system you can reuse
No design tokens were extracted for this report.
04 / EVIDENCE
The detail behind the report
Explore each observation, recommendation and captured record.
Taste2 observations
Three equal feature cards
High
A row of three identical cards is the default feature block every generator emits. It signals layout, not a point of view.
Break the row. Use two columns, a list, or one featured item. Do not clone the same card three times.
grid-cols-3
Inter is doing the brand job
Medium
Inter is the default face of generated UI. On its own it is fine. As the only display voice, the page reads as a template.
Pick one display family that matches the product. Keep Inter only if the brief is deliberately neutral.
Inter
Conversion5 observations
Share card is incomplete
High
A blank or generic unfurl on X, Slack, or WeChat wastes the click you already earned. This is distribution, not decoration.
Set og:title, og:description, and a 1200x630 image that matches the live headline.
og:title=no og:image=yes
A form has no action
High
A waitlist or contact form with no action is a conversion dead end. It looks ready and does nothing.
Wire the form to an endpoint, Formspark, Basin, or a server action you actually handle.
<form>
No human or proof on the page
Medium
A stranger landing on an AI-looking site with no maker, no customer, and no contact will not give you an email.
Add a real name, a real face, a real contact method, or one real customer line.
no about, no first-person, no quote
No analytics on the live page
Medium
If you cannot see who bounced, you cannot tell if the next fix worked. Shipping without a counter is flying blind.
Put Plausible, PostHog, or GA4 on the public pages. One snippet is enough.
no gtag / plausible / posthog / umami
Tab title and H1 disagree
If the tab, the share card, and the hero name different things, the visitor cannot form one memory of the product.
Make title, og:title, and H1 share the same noun.
title="Expo Documentation" h1="Create amazing apps that run everywhere"
Launch2 observations
No HSTS header
Medium
Without Strict-Transport-Security, a first visit can still be downgraded to http. Browsers will not pin HTTPS.
Set Strict-Transport-Security: max-age=31536000; includeSubDomains at the edge.
strict-transport-security missing
No Content-Security-Policy
A CSP is the standard way to limit script sources. Vibe-coded pages often load anything, including injected scripts.
Start with a report-only CSP, then default-src 'self' and an explicit script-src.
content-security-policy missing
Link preview
https://docs.expo.dev/
Build one JavaScript/TypeScript project that runs natively on all your users' devices.
05 / MAKE IT HAPPEN
Give your AI a clear next step
Use the improvement prompt for this page, or the design prompt to borrow its visual language. “Recreate” includes references and implementation steps. Paste either into your coding assistant.
Preview full instructions
You are editing an already-shipped page at https://docs.expo.dev/. Do not restyle the site from scratch. Do not introduce purple/violet/indigo gradients, Inter as the brand font, three equal feature cards, fake testimonials, fake round stats, or another shadcn default skin.
Current scores: Taste 78/100 (distinct), Conversion 42/100 (bounce), ship risks 0.
Fix only the named issues. Keep the information architecture and the product's actual claims. If social proof is fake, remove it rather than inventing new names.
Issues:
1. [taste/high] Three equal feature cards
A row of three identical cards is the default feature block every generator emits. It signals layout, not a point of view.
Fix: Break the row. Use two columns, a list, or one featured item. Do not clone the same card three times.
Evidence: grid-cols-3
2. [conversion/high] Share card is incomplete
A blank or generic unfurl on X, Slack, or WeChat wastes the click you already earned. This is distribution, not decoration.
Fix: Set og:title, og:description, and a 1200x630 image that matches the live headline.
3. [conversion/high] A form has no action
A waitlist or contact form with no action is a conversion dead end. It looks ready and does nothing.
Fix: Wire the form to an endpoint, Formspark, Basin, or a server action you actually handle.
Evidence: <form>
4. [taste/medium] Inter is doing the brand job
Inter is the default face of generated UI. On its own it is fine. As the only display voice, the page reads as a template.
Fix: Pick one display family that matches the product. Keep Inter only if the brief is deliberately neutral.
Evidence: Inter
5. [conversion/medium] No human or proof on the page
A stranger landing on an AI-looking site with no maker, no customer, and no contact will not give you an email.
Fix: Add a real name, a real face, a real contact method, or one real customer line.
6. [conversion/medium] No analytics on the live page
If you cannot see who bounced, you cannot tell if the next fix worked. Shipping without a counter is flying blind.
Fix: Put Plausible, PostHog, or GA4 on the public pages. One snippet is enough.
7. [ship/medium] No HSTS header
Without Strict-Transport-Security, a first visit can still be downgraded to http. Browsers will not pin HTTPS.
Fix: Set Strict-Transport-Security: max-age=31536000; includeSubDomains at the edge.
8. [conversion/low] Tab title and H1 disagree
If the tab, the share card, and the hero name different things, the visitor cannot form one memory of the product.
Fix: Make title, og:title, and H1 share the same noun.
Evidence: title="Expo Documentation" h1="Create amazing apps that run everywhere"
9. [ship/low] No Content-Security-Policy
A CSP is the standard way to limit script sources. Vibe-coded pages often load anything, including injected scripts.
Fix: Start with a report-only CSP, then default-src 'self' and an explicit script-src.
After the edits, the page should still be the same product. It should just look less like a prompt and convert more clearly.