My Portfolio Website
How I Built My Portfolio Website with Wasm, Astro, and Docker
When I set out to build my personal portfolio website, I didn’t just want a flashy homepage. My main goal was to create a simple static website that can be hosted anywhere.
Why static? Because static websites are:
- Easier to host – you have more options, from GitHub Pages to any cheap web host.
- More secure – no backend to maintain, no server-side security issues to worry about.
- Future-proof – I can migrate providers any time without worrying about compatibility.
Even though I consider myself more of a backend developer, I found that static sites don’t have to be “simple pages.” With WebAssembly (WASM), I can bring complex logic directly to the browser, without needing a backend. This way, recruiters and future employers can try out my projects immediately—no need to download or compile anything.
Why I Built My Own Build Tool (Jonah)
I work on many different projects: compilers, hardware description languages, web apps, and more. Each uses a different programming language and toolchain. Setting up the right environment every time I wanted to rebuild something quickly became frustrating.
So, I created Jonah, my own build tool.
Jonah is Docker-based. Each project defines:
- a Dockerfile – describing how to build the project,
- a jonah.toml – telling Jonah which build artifacts to extract.
Jonah builds the container, copies the outputs (like WebAssembly binaries or HTML files), and injects them into the final website build.
All I need is Docker installed—Jonah handles the complexity.
Building the Website with Astro
For the frontend of my portfolio, I chose Astro. It’s fast, lightweight, and perfect for static content.
The design is heavily inspired by Tailwind UI Spotlight. I liked its modern and clean look, and Astro made it easy to adapt.
All the content—projects, experience, and personal details—is stored in a JSON file. During build time, Astro automatically loads this data and inserts it into the right places. Updating my website is as easy as editing JSON.
Keeping It Platform-Independent
One design choice I made was not to rely on GitHub’s CI/CD.
Instead, Jonah makes the build process platform-independent: it works anywhere Docker runs. Whether I use my laptop, a CI server, or another hosting provider, the process is the same.
Right now, I deploy to GitHub Pages, but migrating would be trivial.
How Everything Fits Together
Here’s how the pieces connect:
-
astro-spotlight – my Astro-based website template.
-
my-website – contains the website’s content and deployment setup. This is where Jonah orchestrates builds.
-
Project Repositories – for example:
-
Jonah builds these projects inside Docker, extracts their outputs, and passes them into the website.
-
Finally, I just push to elias-2001-de.github.io, and the site goes live.
Conclusion
My portfolio is more than just a resume page. It’s a static, secure, and portable website that showcases my projects—and lets people try them instantly, thanks to WebAssembly.
By combining Astro, Docker, and my custom tool Jonah, I built a workflow that’s future-proof and platform-independent.
If you want to take a look under the hood, check out the repos: