Skip to main content
The marketing site for a single app: a fast, custom-designed site built with Astro (static output), a hand-written SCSS design system (no UI framework), astro-i18next for translations, and Iconify for icons. No account portal — this is the public marketing site. Everything ships as placeholder content: drop in your brand, copy and assets and go.

Quick start

Where things live

Rule of thumb: language-neutral facts (URLs, prices, handles) live in src/data/; anything a reader sees as words lives in public/locales/.

Rebranding (the short path)

1

Brand & product data

Edit src/data/site.ts (name, emails, socials — the brand name in header/footer/titles is driven entirely by site.name) and src/data/product.ts (download links, prices, features).
2

Assets

Replace public/favicon.svg (optionally add public/og-default.png); drop your app screenshots into src/screenshots/ (01-…, 02-…) and delete the demo images.
3

Domain & copy

Set PUBLIC_SITE_URL in env/env.prod; swap the copy in public/locales/en/*.json.

Design tokens & fonts

Colours, fonts, radii, spacing, elevation and motion are CSS custom properties in src/styles/_variables.scss, with light and dark themes:
  • Accent is a dusty-indigo ramp (--accent-50…900) — change --accent-400 (dark) / --accent-600 (light) and it propagates everywhere.
  • Neutrals are warm greys, not pure zinc.
  • Fonts are a pairing: a display face — Golos Text, self-hosted via @fontsource/golos-text — on headings (--font-display), and the system stack for body/UI. Any OFL font with Cyrillic works.

Languages

Ships English + Russian; the switcher is in the header. Adding a third language is five steps (codes in astro-i18next.config.ts, astro.config.mjs, Header.astro + nav.json, copy public/locales/en/<code>/ and translate, then npm run build). English-only: drop "ru" from the three lists and delete public/locales/ru/.
src/pages/ru/ is generated by astro-i18next generate at build and git-ignored — edit the English source; the Russian tree regenerates.

Content, support form, monitoring

  • Blog & changelog are Astro content collections — add a Markdown file, it appears.
  • Support form: set PUBLIC_SUPPORT_ENDPOINT to your backend’s endpoint to make it post. Empty (default) = demo mode (“email us” notice), no posting.
  • Sentry loads only when PUBLIC_SENTRY_DSN is set, cookies are accepted, and it’s not localhost.