All posts

New website – how it is built

Published on · 2 min read

  • Astro
  • SEO
  • Apache
  • Security

This website is both a business card and a project. I wanted a site that loads fast, is easy to find, collects no data about visitors – and that I run entirely myself. Here is how it is built.

Static instead of dynamic

The site is built with Astro. At build time, Astro generates finished HTML files – so there is no application, no database and no CMS running on the server that could be attacked. The web server only delivers files. That is fast, secure and easy to operate.

Content such as projects and blog posts are Markdown files in the Git repository. A new post is a new file – the build takes care of the rest.

Three languages, properly linked

The site is available in German, English and Polish. German is the main language and has no prefix in the address; English and Polish live under /en/ and /pl/ – with translated addresses such as /praktikum/, /en/internship/ and /pl/praktyka/.

Important for search engines: every page points to its translations via hreflang, and the sitemap contains these links as well. There is deliberately no automatic redirect based on the browser language – each address always shows the same language. Instead, a subtle hint appears when the page is also available in your language.

Privacy by design

  • No cookies, no tracking: there is nothing that would require a cookie banner.
  • No third-party servers: fonts, scripts and images are served from my server. No CDN, no Google Fonts.
  • Content Security Policy: the browser only executes scripts whose checksum was fixed at build time.

Running on my own server

The website runs on my own Debian server with Apache, HTTPS via Let’s Encrypt and DNS on my own name servers. A script builds the site and transfers it with the right file permissions: the files belong to my user, the web server may only read them.

New versions first go to a password-protected preview that search engines do not index. Only when everything is right there does the version go live.

By the way, the “Server status” tile on the home page is live: a script on the server writes uptime, TLS validity and the state of web, mail and DNS to a small file every five minutes, which the home page displays.

Conclusion

A static website is not a step backwards – for a business card it is exactly the right choice: fast, secure, low-maintenance. And building it taught me more about SEO, multilingual sites and security headers than any tutorial.