feat(site): rewrite the landing page around verified facts and accessible controls
- Replace claims that contradicted the app: the default hotkey is Right Alt (hold to talk), local features are free with no daily cap, there is no 14-day trial, Team/SSO/SCIM/ZDR are not offered, and the repository is not public. Remove invented metrics, status badges, the competitor table, the ad-mediation changelog, the hash calculator and the duplicate demo. - Seven sections: hero with one labelled example, features, how it works, privacy, pricing (Free / Pro 2,900 / Pro+ 8,900 KRW a month), download, FAQ. Footer links the privacy policy, terms and account deletion pages. - All copy moves into i18n and every one of the 10 locales is translated. Pricing and cloud quotas come from site/src/pricing.ts. - Accessibility: skip link, labelled sections, aria-expanded with Esc and focus return for the menu, language list and FAQ, live status for the example, reduced-motion support, 44px targets, AA contrast on the primary button. Korean keep-all line breaking is scoped to :lang(ko) because Tailwind's break-keep blocked wrapping in Japanese and Chinese. - JS 111 -> 98 KB gzip, CSS 7.8 -> 5.2 KB gzip.
This commit is contained in:
parent
ad6bb70c20
commit
e689683b72
44 changed files with 2198 additions and 3782 deletions
|
|
@ -1,4 +1,4 @@
|
|||
import { I18nProvider } from './i18n'
|
||||
import { I18nProvider, useI18n } from './i18n'
|
||||
import { Header } from './sections/Header'
|
||||
import { Hero } from './sections/Hero'
|
||||
import { Features } from './sections/Features'
|
||||
|
|
@ -7,26 +7,32 @@ import { Privacy } from './sections/Privacy'
|
|||
import { Pricing } from './sections/Pricing'
|
||||
import { Download } from './sections/Download'
|
||||
import { FAQ } from './sections/FAQ'
|
||||
import { CTA } from './sections/CTA'
|
||||
import { Footer } from './sections/Footer'
|
||||
|
||||
function Page() {
|
||||
const { t } = useI18n()
|
||||
return (
|
||||
<div id="top">
|
||||
<a href="#main" className="skip-link">{t.a11y.skipToContent}</a>
|
||||
<Header />
|
||||
<main id="main" tabIndex={-1} className="outline-none">
|
||||
<Hero />
|
||||
<Features />
|
||||
<HowItWorks />
|
||||
<Privacy />
|
||||
<Pricing />
|
||||
<Download />
|
||||
<FAQ />
|
||||
</main>
|
||||
<Footer />
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
export function App() {
|
||||
return (
|
||||
<I18nProvider>
|
||||
<div className="min-h-screen bg-surface-950">
|
||||
<Header />
|
||||
<main>
|
||||
<Hero />
|
||||
<Features />
|
||||
<HowItWorks />
|
||||
<Privacy />
|
||||
<Pricing />
|
||||
<Download />
|
||||
<FAQ />
|
||||
<CTA />
|
||||
</main>
|
||||
<Footer />
|
||||
</div>
|
||||
<Page />
|
||||
</I18nProvider>
|
||||
)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue