The bespinian website reachable at bespinian.io
The project uses a Nix Flake. To get
started, install Nix and run nix develop. This will provide you with a shell
and all the necessary tools to run and develop the app.
This is an Astro-based multilingual website with the following structure:
/
├── public/ # Static assets (favicon, images, robots.txt)
└── src/
├── assets/ # Image assets (logos, team photos, partners, etc.)
├── components/ # Reusable Astro components
├── content/ # Content collections (blog posts, customers, jobs, services)
├── i18n/ # Internationalization (translations)
├── layouts/ # Page layouts
├── lib/ # Utility functions
├── pages/ # File-based routing with [lang] dynamic routes
└── styles/ # Global styles
All commands are run from the root of the project, from a terminal:
| Command | Action |
|---|---|
npm install |
Installs dependencies |
npm run dev |
Starts local dev server at localhost:4321 |
npm run build |
Build your production site to ./dist/ |
npm run preview |
Preview your build locally, before deploying |
npm run check |
Run Astro type checking |
npm run format |
Format code with Prettier |
npm run lint |
Check formatting (Prettier) and lint (ESLint) |
npm run astro ... |
Run CLI commands like astro add, astro check |
npm run astro -- --help |
Get help using the Astro CLI |
- Add your portrait to
src/assets/team. - Add your information to
src/content/members/members.json. - Create a PR.
- Add your blog post to
src/content/blog/en/my-blog-topic.mdwith the respective frontmatter, and its German translation under the same file name insrc/content/blog/de/. - Add a header image from Pexels to
src/assets/blog. - Run
magick mogrify -resize 1600 your-image.jpgto reduce the image width to 1600 pixels. This improves loading times and SEO. Mogrify is a command-line tool of ImageMagick. - If your blog post features other images, create a folder
src/assets/blog/my-blog-topicand put them in there. - Create a PR with your new blog post. Set
draft: truein the frontmatter to merge it without publishing it yet: drafts only show up on the dev server.
- Add your customer story to
src/content/customers/en/my-customer.mdwith the respective frontmatter. - Add the customer's logo (preferably as an SVG) to
src/assets/customers. - Send the story to the customer for review and get their quote.
- Add the German translation under the same file name in
src/content/customers/de/. - If they are OK with us publishing it, create a PR with your new customer
story. Until then, keep
draft: truein the frontmatter of both files.
The site is available in English (en), German (de) and Bernese Swiss German
(ch). Blog posts and customer stories live in one subdirectory per language
(en/, de/, ch/); files placed directly in a collection folder, like the
jobs, are English only. Where a translation is missing, the page falls back to
the closest language that has one: Swiss German falls back to German, and
everything falls back to English. Such fallback pages point their canonical URL
at the page they copy and are left out of the sitemap.