Stack

The technical version.

This page is for companies rather than clients. No packages, no prices — the architecture, the decisions I made against a plausible alternative, and what each of them cost me. I have been programming since 2021, taught myself, and work alone across the whole stack.

You are standing on the example

This site is not a portfolio of someone else’s work. The public pages in three languages, the API, the database, and the admin behind it are one application I wrote and run. There is no site builder and no third-party CMS anywhere in it.

Framework
TanStack Start, React 19, file-based routes
API
Elysia mounted at /api, Eden Treaty for a typed client
Data
PostgreSQL through pg, raw parameterised SQL, no ORM
Validation
Valibot on the boundary, shared between client and server
State and forms
React Query for server state, TanStack Form for input
Motion
CSS with IntersectionObserver and pointer events, no library
Hosting
Vercel today; a Hetzner box in Germany is the next move

Four decisions and their price

Every one of these was chosen against something reasonable. The interesting half is not what I picked — it is what picking it cost, so that is written down too.

Raw parameterised SQL instead of an ORM

One app, one database, one operator. An ORM would add a mapping layer and a migration dialect between me and a query I can already read. At this scale that is moving parts without a benefit.

What it costs

More typing, and no free schema refactors. I write the migrations by hand and I keep the queries close to the tables.

My own admin, not an external CMS

Contact enquiries, page copy, clients, and invoices live in one system with one content model, not split across a vendor and a database. The platform being entirely self-built is also the point of the portfolio.

What it costs

I build the editor myself instead of installing one. The copy still lives in typed files until that editor is finished, which is honest rather than convenient.

A German server I administer, over staying serverless

Client data, leads, and invoices belong on a machine in Germany, which makes the GDPR answer short. Cron and background jobs run natively there, and a local database has no serverless connection-pooling problem to design around.

Where this one stands

This is a decision, not yet a fact: the site runs on Vercel today, and the move to Hetzner with Coolify is the next infrastructure job. When it lands, backups and security updates become mine — snapshots, a nightly pg_dump, unattended upgrades, and a restore I have actually tested rather than assumed.

A motion layer with no animation library

The first attempt used GSAP with ScrollTrigger and Lenis. It crashed on every client-side navigation away from the home page, and it animated sections nobody had approved. I deleted it and rebuilt the whole thing on CSS transitions, IntersectionObserver, ResizeObserver, and pointer events.

What it cost

A week of work thrown away, and easing curves I now write by hand. In return the page ships no animation runtime at all and nothing breaks on navigation.

What I have shipped

An online store with a filtered 500-product catalogue, Stripe checkout, orders, and the German support pages a shop legally needs. A writing platform with an editor, uploads, comments, reactions, and notifications. A property management system, in progress, whose architecture this site is built on.

See the projects

If you want to talk