cd ../log

Building this portfolio as a quiet system

Why this site is built as a small static system with Markdown content, clear sections, and almost no backend dependency.

  • astro
  • portfolio
  • content

I did not want this portfolio to behave like a brochure that gets redesigned once, published, and then slowly forgotten. I wanted it to feel like a small working system: easy to update, honest about what I build, and calm enough to keep using.

Diagram showing Markdown content flowing into Astro components and GitHub Pages deployment
The site stays static, but the content flow is intentional: Markdown for meaning, Astro for rendering, GitHub Pages for delivery.

Why rebuild it

The first job of a portfolio is simple: give a fast signal. In a few seconds, someone should understand who I am, what kind of work I do, and where the proof lives.

The harder job is maintenance. A portfolio changes every time a project ships, an experiment becomes useful, an article is written, or a contact detail moves. If those updates require touching layout code every time, the site starts fighting its own purpose.

That is why this version is static, but content-driven. The interface is built with Astro. The writing lives in Markdown. The pages are generated at build time and deployed to GitHub Pages.

The goal is not to make the site complicated. The goal is to make future changes boring.

The architecture rule

The rule I am following is small but useful:

  • Markdown owns meaning
  • Astro components own structure
  • CSS files own presentation
  • utility functions own routing, dates, and localization

This split keeps the codebase readable. If I want to update a project summary, I edit content. If I want to improve how project cards look, I edit a component and its CSS. If I want to add a new language, the content tree already has a place for it.

It is not a big architecture. It is a quiet one.

LayerOwnsWhy it matters
MarkdownWriting, project data, localized contentI can update the site without touching layout code.
AstroRouting, rendering, collectionsThe build turns content into fast static pages.
CSSSpacing, typography, interaction statesVisual changes stay near the component they affect.
GitHub PagesHostingThe deployment stays simple and predictable.

What the homepage should do

The homepage is designed as a signal, not a pitch deck. It should quickly answer three questions:

  • What does Elsy build?
  • What proof can I inspect?
  • What is the next useful page?

That is why the page stays compact. The ASCII avatar gives the site a personal mark. The work section shows a few projects instead of everything. The experience section gives context. The contact section makes the next step obvious.

home
├─ signal: who I am
├─ proof: selected work
├─ context: experience
└─ next step: contact

What the log should become

The log is not meant to be a fake changelog. It is the place where the portfolio can breathe.

Some posts will be technical notes. Some will explain decisions behind projects. Some will document experiments, mistakes, and small lessons. The important thing is that each post should have a reason to exist.

If the work page is proof, the log is the thinking trail behind the proof.

The part I like most

This setup is modest, but it fits the way I want to work. I can write a Markdown file, commit it, build the site, and publish without adding a backend or opening a CMS.

That keeps the site close to Git, close to the code, and close to the actual work. For now, that is exactly the right amount of system.