sk
London. Working with people anywhere — but if you are nearby, I would rather meet.

I build websites for people who would rather not think about websites again.

sk is one person. I am Shahin, a software engineer of fifteen years, and I am the only person who will touch your site — the conversation, the code, and the email you send me two years from now.

  • MarketplaceYour listing sold — 1× laptop, £420. Collected.
  • ZooplusOut for delivery: 12kg salmon treats. Rush £6.
  • Catnip DirectSubscribe & Save is on. Every Tuesday. Forever.

Every site starts here. One command, no template.

Nobody is typing. Try not to think about it.

Right. Who wrote this?

It starts as text. Most of it still is.

Three designs. You'll pick the middle one.

And underneath — the bit nobody asks to see.

…it worked on my machine.

PHP turned up somehow. PHP is not staying.

Retries. Backups. A much smaller door.

Nothing is happening. That was the goal.

Directed by
The cat
Starring
The cat, as himself
Best boy
Shahin Kiassat
And every other job
Shahin Kiassat
Animation
Twelve joint angles, solved every frame
Stunts
Performed without a safety net or a framework
Built with
Astro, anime.js, and no template
Now taking
One project at a time

It all happens again in a moment. Do stay.

Usually it is a website. Sometimes it is the whole system behind it. Both get built here.

Swipe or scroll
01 — Gallery
Nima's site on a desktop: his name across a near-black page, 'Low end, deep current.' in teal beneath it, Listen and Work with me buttons, and a circular photograph of him playing bass under a stage light.
The same page on a phone: the circular photograph on top, the name and the teal line under it, the two buttons stacked, and a Farsi link in the corner of the bar.
Nima Giti

A musician's portfolio, in two directions

A bilingual portfolio in English and Farsi. The Farsi side reads right-to-left, with its own typeface, and the whole layout mirrors rather than merely translating. The interactive parts — the gallery lightbox, the menu, a music player, the moving header — run as small islands on otherwise static pages.

What was hard

Making the Farsi side feel designed rather than translated.

How this actually works
Right-to-left is not a switch. Every margin, every arrow, every animation direction has to mirror, and the Farsi typeface has different vertical metrics from the Latin one, so line heights that looked right in English looked cramped in Farsi. The layout is written entirely in logical properties — start and end rather than left and right — so the mirroring comes for free and cannot be forgotten in one stylesheet corner.

Keeping it fast despite the interactive parts.

How this actually works
The interactive components are React, but the pages are not a React app. Only two of them load with the page — the menu and the moving header, because both are there the moment you arrive and a menu that is not ready yet is worse than no menu. The rest wait until they are scrolled to, so someone who never reaches the gallery never downloads it.
02 — Orchestrator
Conductor's terminal interface: the plan and its gates down the left, and the run's status, cost, token budget and workspace paths on the right.A live agent transcript inside Conductor, listing timestamped file reads and reasoning against a named source file.Conductor's board view, with tasks arranged in Todo, In Progress and Done columns.A task card in Conductor showing its persona, stage notes, injected knowledge, tool contract and declared file paths.Conductor's plan editor, listing the remaining stages with their durations and assigned models.Conductor's command palette, listing run, stage and danger commands with a description beside each.
HomeAgentBoardCardPlanCommands

Conductor

It runs long coding sessions unattended and then refuses to take their word for anything — running the gates, reading the git history, checking the tracker against what actually changed on disk. Every event is written down before it happens, so a crash mid-run resumes at the last checkpoint instead of starting again. What follows is one real run, recorded.

What it shows

Event sourcing, crash-safe resumable workflows, and the discipline of not letting a process mark its own work. It is also what makes unattended work worth starting at all: something independent has to be willing to fail it.

03 — Editorial
Elfine's site on a desktop: her name in a light serif on near-black, 'physical theatre — Belgium' above it and 'theatre maker · mover · director' below, beside a photograph of two performers reaching towards a single stage light.
The same page on a phone: the navigation collapses to a menu button, the name and the paragraph stack, and the photograph of the performers sits under the link that begins the work.
Elfine Radwanski

An artist's site in English and French

A working artist's portfolio in two languages, where the French pages are genuinely written in French rather than machine-translated — including the descriptions of the paintings, which is the part most bilingual sites get wrong.

What was hard

Two languages that stay properly in step.

How this actually works
Each page exists once as a layout and twice as content, so adding a section cannot leave one language behind. The image descriptions used by screen readers are per-language too — a French visitor who cannot see a painting hears about it in French.

Letting her collect feedback without an account.

How this actually works
She has a private link that turns any page into something she can annotate: tap a paragraph, say what is wrong, and it arrives as a tracked item with a screenshot attached. No login, nothing to install, and the link is hers alone.
04 — Trading engine
Shamshir's strategy bank: a grid of strategy cards, each with its entry and exit rules, expected trade frequency, and its win rate and profit or loss to date.Shamshir's prop firm rule sets: cards for each challenge type listing daily loss, total loss, profit target, minimum days and drawdown type.Shamshir's run builder: strategies, symbols and timeframes selected on the left, with date range, venue, balance, costs and protection toggles down the right.Shamshir's run list: a filterable table of completed backtests with venue, strategy, symbol, net profit and loss, maximum drawdown, trade count and win rate on each row.A Shamshir run report: net and gross profit, drawdown, profit factor and win rate as figures, a reconciliation line, and an equity and drawdown chart underneath.Shamshir's analyzer: R-multiple distribution, holding time, profit and loss by hour and by day of week, and a maximum adverse against maximum favourable excursion plot.
StrategiesRiskNew runRunsReportAnalyzer

Shamshir

A deterministic, event-sourced trading engine: one decision kernel drives backtesting, replay and live execution, so the same data and the same seed give a byte-identical result every time. That single property is what makes an audit possible. What follows is the route a person actually walks through the interface.

What it shows

Determinism as a design constraint rather than a testing technique — a pure decision core with the clocks, the database and the venue pushed out to the edges. It is also the honest test of everything else on this page, because here being wrong costs money.

05 — Minimal
Bruce's site on a desktop: his name in a large serif over the Persian spelling, on a dark photograph of a painted canvas propped against a brick wall, and the line about listening for the difference inside everything that seems to repeat.
The same page on a phone: the photograph fills the screen, the name and the line stack under it, and a single Enter link sits at the bottom.
Bruce Nemeth

A film-maker's calling card

A single-page site that gets out of the way of the work — a name, a reel, the projects, and a way to reach him. Deliberately quiet, because everything on the page competes with the film that is meant to be the point.

What was hard

Putting a film on the page without the page paying for it.

How this actually works
A normal YouTube embed loads about a megabyte of somebody else's code before anyone presses play — on a page whose whole job is to be quiet. So the page shows a still and a play button, and the player is only built when someone actually taps it. Nobody who scrolls past is charged for a film they did not watch.

Restraint, which is harder than it sounds.

How this actually works
The temptation on a site with little content is to add motion. Most of the design work here was removing things and getting the typography and spacing right, which is slower than adding a carousel and considerably better.
06 — Code-graph engine
DevContext2's Atlas view summarising a solution — eleven projects, the detected stack, a service diagram, and the top request flows.DevContext2 tracing an HTTP endpoint through calls and cross-service hops, with the matching source code and its file path shown beside it.DevContext2's Insights view, listing findings such as anonymous endpoints, missing validators and possible dead code.DevContext2's MCP panel, showing host configuration for Claude Code, Cursor and VS Code alongside a live feed of tool calls.
AtlasTraceInsightsMCP

DevContext2

It reads a .NET solution with Roslyn and turns it into something you can ask questions of: what calls what, which endpoints are unauthenticated, where a request actually ends up. Every edge cites the file and the line it came from, so an answer can be checked instead of believed. It ships as a command-line tool, a desktop app, and a server AI coding tools connect to directly.

What it shows

Static analysis at real scale, one core delivered three different ways, and the habit underneath all of this work: an answer with no citation attached to it is a guess in a good suit.

07 — Portfolio
Azarnoosh's site on a desktop: her name in Persian, large and centred on plain white, the Latin spelling spaced out beneath it, a single Work link, and a short biography — fashion designer and artist, from Tehran, based in Gent.
The same page on a phone: the same centred column, narrower, with the biography running the width of the screen and her email underneath.
Azarnoosh

A portfolio that stays out of the way

A straightforward portfolio done properly — the work, arranged well, loading fast, readable on any screen. Not every site needs to be clever, and this one is a good argument for that.

What was hard

Making 'simple' actually good.

How this actually works
A simple site has nowhere to hide. Typography, spacing and image quality are the entire design, so each one had to be right. The images are resized and compressed before they ever reach a browser, which is why it loads as quickly as it does.

Handing it over so she could keep it — and she has.

How this actually works
She can change her own words from her phone: tap the sentence on her own page, type, save. She is the first person other than me to do it on a live site, and the edits are in the history under her own name. That is the whole test, really — a portfolio only stays current if updating it is easier than asking someone to.
01 / 08

What you get

Not a template with your name on it. A site made for you, that you can change yourself, and that still works in two years.

The process

How it goes

The short version: I would rather show you three directions than ask you to describe one.

  1. 01

    You tell me what it is for

    A conversation, not a brief. Who is it for, what should happen when they land, and the one thing they should remember. If you already have a design or a strong idea, bring it and I will build it. If you do not, that is the normal case rather than a problem.

    How this actually works
    What actually helps is anything you already have: photographs, an old site, the way you describe the business to a friend, a competitor you like and one you do not. I would rather have four scrappy sentences and a folder of pictures than a polished brief that has already guessed at the answers.
  2. 02

    I make something to react to

    If you have material — photographs, writing, an old site, an Instagram — I will pull three directions out of it and put them in front of you. Reacting to something real is far easier than describing something imaginary, and it is faster for both of us.

    How this actually works
    Working pages on real URLs you can open on your phone, not flat mockups. Building the real thing is quicker than drawing a picture of it, and you find out immediately how it feels to use rather than how it looks in a screenshot. Expect them within a week of the first conversation.
  3. 03

    We go round until it is right

    This is the part I do not rush and do not count. Colours, spacing, wording, the photograph that is not quite working. Send a list, send a voice note, or point at the thing on your phone — whichever is easier. It has your name on it, so nearly right is not finished.

    How this actually works
    Every round is a deploy and every deploy is a version, so if the third attempt was better than the fifth, going back to it costs a minute and nothing is lost. That is why I would rather try the risky idea than talk you out of it. Rounds are not counted or billed — charging for iteration is charging you for my first draft being wrong.
  4. 04

    It goes live, in your name

    The domain is registered to you, not to me. Always. Going live is a morning's work rather than an event, and if you ever want to go elsewhere, you take it and go — and I will help you move.

    How this actually works
    Registered at cost with no markup, in your name, with you as the account owner. I take delegated access to handle the technical setup. There is no version of this where I hold your domain hostage, because that arrangement is bad for you and I do not want it either.
  5. 05

    You take it from there

    I will show you how to change your own words: open your site on your phone, tap a sentence, type, save. That is the whole of it. If you want something bigger later, ask — but you should not need me to fix a typo.

    How this actually works
    Nothing to log into that can go out of date, no plugins, no dashboard to learn. Every save is a version, so a change you regret is undone rather than retyped. And the shared code underneath keeps being maintained whether or not you ever email me again — a site left alone for a year does not quietly rot.
Start here

Start a conversation

Tell me what you are thinking about. I will tell you honestly whether I am the right person for it — sometimes the answer is that you need something simpler than I would build.