Configuration
src/config/site.ts holds settings: who you are, where links go and how the theme behaves. Words people read (navigation labels, button text, page copy) are not here; they live in the language dictionaries, so each language can word them differently.
Studio details
Section titled “Studio details”| Setting | Example | Used for |
|---|---|---|
name |
'Swift' |
Wordmark, page titles (Services | Swift), structured data |
legalName |
'Swift Studio Ltd' |
Footer copyright, JobPosting and Organization data |
url |
'https://swiftagency.lesscodex.dev' |
Canonical URLs, sitemap, social cards. Set this before you deploy. |
email |
'hello@swiftagency.example' |
Contact page (with a copy button), footer, structured data |
phone |
'+44 20 7946 0381' |
Contact page, services structured data |
address |
{ street, city, postcode, country } |
Contact page, footer, PostalAddress data |
founded |
2016 |
Studio page and Organization data |
social |
[{ label, href }] |
Footer links, sameAs in structured data |
currency is an ISO 4217 code such as 'GBP', 'EUR', 'USD' or 'IDR'. Prices on the services page are formatted with Intl.NumberFormat in each page’s language, so 18000 shows as £18,000 in English and 18.000 £ in German. The amounts themselves are in the dictionaries, under services.packages.
Navigation
Section titled “Navigation”nav: [ { key: 'work', href: '/work' }, { key: 'services', href: '/services' }, { key: 'studio', href: '/studio' }, { key: 'journal', href: '/journal' },],footerNav: [ { key: 'careers', href: '/careers' }, { key: 'contact', href: '/contact' },],legalNav: [ { key: 'privacy', href: '/privacy' }, { key: 'imprint', href: '/imprint' },],navis the header and the mobile menu.footerNavadds links that appear only in the footer, andlegalNavis the small print row.keypoints at a label in thenavsection of each dictionary (t(locale).nav.work). To add a link, add the key toen.tsand the other dictionaries first; TypeScript tells you if one is missing.- Write
hrefwithout a language prefix. Links are localised for you, so/workbecomes/de/workon German pages.
theme: { preset: 'signal', switcher: true,},| Setting | Values | Notes |
|---|---|---|
preset |
'signal', 'cobalt', 'forest', 'mono', or your own |
The look of the whole site. See Presets. |
switcher |
true / false |
Floating preset picker for theme demos. Turn it off for a real site: only the active preset’s CSS then ships. |
Light and dark mode are not a setting. The site follows the visitor’s system and the toggle in the header lets them override it.
Journal
Section titled “Journal”journal.pageSize is how many articles /journal shows per page. The featured lead article is not counted.
Calls to action
Section titled “Calls to action”cta: { contact: '/contact', work: '/work',},The theme uses one destination per intent: every “Start a project” button goes to cta.contact and every “View work” link to cta.work. Point contact at a booking page if you prefer, for example 'https://cal.com/your-studio'. External URLs are left as they are.
Credit
Section titled “Credit”credit adds “Theme by LessCodex” to the footer’s bottom row. Set it to false to remove it; the licence doesn’t require it.
Contact form
Section titled “Contact form”formEndpoint is where the contact form posts. Leave it empty to run the form in demo mode. See Contact form.