Implement the "Desktop dark" Penpot design: nav, hero, about, products
teaser and contact form, with the exported logo and wave artwork and
self-hosted Poppins, Roboto Flex and Chillax fonts.
- Shared page markup in _includes/home.pug; copy in locales/{en,pl}.json
- Footer language switcher and hreflang tags generated from the locales
- Contact form composes a mailto: to the address in _data/site.json
- Stacked layout below 1024px
1.8 KiB
continuum-3d-site
Landing page for continuum-3d.com. Eleventy + Pug + Tailwind CSS, with a
small JSON-based i18n setup (src/locales/en.json, src/locales/pl.json).
- English (the default language) lives at
src/en/index.pugand builds to/. - Every other language lives at
src/<lang>/index.pugand builds to/<lang>/(e.g. Polish:src/pl/index.pug->/pl/). - The page markup is shared in
src/_includes/home.pug; all copy is insrc/locales/<lang>.json. - To add a language: copy
src/locales/en.jsontosrc/locales/<lang>.json, translate it (includinglang_name, the language's own name), and add asrc/<lang>/index.pugwithlang: <lang>andpermalink: /<lang>/in its front matter that includes../_includes/home.pug. The footer language switcher and thehreflangtags pick it up automatically. - Site-wide settings (domain, contact address, default language) are in
src/_data/site.json. The contact form opens the visitor's mail client addressed tocontactEmail.
Develop
npm install
npm run dev
Build
npm install
npm run build
Output goes to dist/.
Deploy
Every push to main builds the site and publishes dist/ (zipped) as the
asset on a Gitea Release tagged deploy, using the automatic per-job
GITEA_TOKEN — no secrets to configure. A separate site-deployer watcher
container on octo-winsrv polls that release (releases/tags/deploy) every
~45s and, when it changes, extracts it into /mnt/e/sites/continuum-3d-com/,
which Caddy serves as the document root for continuum-3d.com. No SSH keys
or admin credentials are involved — the watcher only has filesystem access
to /mnt/e/sites, nothing else on the host.
Manual deploy still works if you need it immediately (bypasses the watcher):
npm run build
scp -r dist/* <host>:/mnt/e/sites/continuum-3d-com/