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 insrc/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 inastro-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/.
Content, support form, monitoring
- Blog & changelog are Astro content collections — add a Markdown file, it appears.
- Support form: set
PUBLIC_SUPPORT_ENDPOINTto your backend’s endpoint to make it post. Empty (default) = demo mode (“email us” notice), no posting. - Sentry loads only when
PUBLIC_SENTRY_DSNis set, cookies are accepted, and it’s notlocalhost.