I design websites in Kiel and then build them myself — no template, no page builder, no 114KB of plugin somebody else wrote. For small businesses, studios, and people with one good idea and no site yet. The mockup is not the thing. The thing is the thing.
From €800one-pager, fixed price
< 1 dayreply, working days
2–4 weekstypical build
DE / ENwe can work in either
02 — Work
Three,infull.
Three projects I set myself, each written up with the decisions in it — including the wrong ones. No client logos here yet: yours would be the first paid one, which is exactly why the starting price is what it is.
03 — Flagship case
FEWOSearchaCSV,bookable
A holiday-rental portal built on a raw Airbnb export: 1,476 listings, 504,795 calendar nights, 103,295 reviews. Everything above the data is written from scratch — schema, API, UI, booking rules. Two views, because the dataset decided most of the design before I did.
Source
Three exports, one schema
~10MB of CSV streamed through prepared statements into three tables with real foreign keys, so “is this night free” is an index lookup instead of a scan over half a million rows.
The dataset prices weekends differently, so a total is the sum of the actual per-night rows in the range — never nights × the headline price. No calendar rows at all and the card says so instead of inventing a number.
price source: per night
headline × nights: no
invented prices: 0
Import
The ids break in Excel
Open the export in Excel once and listing ids come back as scientific notation, silently orphaning every calendar and review row. The importer takes the original .csv.gz, and the admin form says why.
accepted input: .csv.gz
id type: text
broken foreign keys: 0
Counted off the database, not from memory. Still open and left visible rather than cropped out: the JWT lives in localStorage, the 2-minute reservations are in memory and die on restart, and the pay button charges nobody.
Search
Every filter is a SQL clause
Place, guests, date, price, rating, rooms, type — one parameterised query, not three passes over a result set. 100 rows per request, and filters, page and scroll position survive a reload.
endpoints: 23
rows per request: 100
client-side sorts: 0
Booking
One transaction, or none
Insert the booking and flip those calendar nights to unavailable in a single transaction. Cancelling or re-dating gives the nights back. Minimum-nights is checked in the browser for speed and on the server for truth.
Opening a listing reserves it for two minutes and every open tab sees it. EventSource reconnects on its own, and every client→server action already goes through REST — a WebSocket would have bought a dependency and a reconnect loop.
streams: 1
reservation TTL: 2 min
extra dependencies: 0
1476listings, one city
504kcalendar nights
23API endpoints
0front-end frameworks
04 — Services & prices
Whatitcosts.
Three things I sell. Prices are where a project starts, not where it lands — you get a fixed number in writing after the first call, before any work begins. No hourly surprises, no “design retainer”.
01 — One-pager
A single page that gets enquiries
from €8002 weeks
For a business that has a phone number and a Google entry and nothing else. One page, written and designed together, that says what you do and makes it easy to contact you.
Structure, copy pass and design
Built by hand — loads in under a second on mobile data
Several pages, a real navigation, and something behind it — a booking flow, a searchable list, a menu you can edit yourself, a shop-shaped thing. Designed as a system so page seven still looks like page one.
Everything in the one-pager
Design system: type scale, components, states
Editable content where you need it
Search, filters, forms, booking — whatever the job is
30 days of fixes after launch, included
typical: studio, agency, rental, small platform
03 — Editorial & motion
Print, infographic, film and sound
€45 / houror fixed, per job
Poster and editorial layout, data-driven infographics, plus video edit, grade and sound design when the piece needs to move. Sold by the job when the job has edges, hourly when it does not.
Prices are final — as a Kleinunternehmer under § 19 UStG I do not add VAT, so €800 is €800. Half up front on projects over €1,500, the rest on handover. Charities and Vereine in Kiel: ask, there is room.
05 — How it works
Foursteps,nosurprises.
Most people who have never bought a website are not worried about the design. They are worried about paying for something they cannot judge, on a date nobody named. So here is the whole thing.
01
A 15-minute callfree
You say what the business does and what the site has to achieve. I say whether I am the right person. If I am not, I say who is — that call is still free.
02
A fixed offerwithin 2 working days
One page: what gets built, what it costs, when it is done, and what is explicitly not included. You sign it or you do not. Nothing is billed before that.
03
Design, then build2–6 weeks
You see the design before anything is built, and you get one round of changes on it. Then I build it and you get a link you can open at any point — no black box, no big reveal at the end.
04
Handover+ 30 days
It goes live on your domain, with your email working and the legal pages in place. You get every file. Anything broken in the first 30 days I fix for free — and I will show you how to change the text yourself.
06 — Contact
Saysomething.
Tell me what you have and roughly when. I answer within one working day, in German or English, and I say no if it is not a fit.