Skip to content
oleks crane
Studio websiteIn development

Every number here has a source, or says it doesn’t.

I built this site the way I build for clients: a brief, a log of every decision and why, and typed content where an unconfirmed number can’t pass for a real one. This page holds the site to its own rule.

/* * Placeholders — the evidence rule made structural. Anything unconfirmed renders through one of * these, never as a plausible fake. Each carries a data-todo attribute naming its kind, so a * pre-launch check can find every one: document.querySelectorAll('[data-todo]'). */ type TodoProps = {  children: ReactNode;  className?: string;}; /** An inline gap marker for short missing content. Renders "TODO: {children}". */export function Todo({ children, className }: TodoProps) {  return (    <span      data-todo="todo"

At a glance

Type
This website
Scope
Everything: the brief and the decision log, the copy, the design tokens, the Next.js app, the hosting and DNS as Terraform, CI and the git hooks.
Status
In development — before launch · as of 24 Sep 2026
Timeline

Started Sep 2026 · not released yet

Platforms
The web, phone to desktop, Dark and light themes
Source code
Not public
Try it
You’re on it.
Stack
Next.jsReactTailwind CSSTypeScriptESLintPrettierlefthookGitHub ActionsTerraformVercelCloudflare

The challenge

Most of what a studio site uses as evidence — a public repo to point at, a live URL, a user count, a testimonial — doesn’t exist yet for the studio’s own site, and the evidence rule doesn’t carve out an exception for the page describing itself.

  • a studio site sells evidence, but this one had to be built before most of that evidence existed — client numbers, screenshots, testimonials
  • every unconfirmed fact has to render as a visible TODO rather than a plausible guess, and stay countable until launch
  • one person owns positioning, copy, design and code — without the site reading like a freelancer portfolio or an agency pretending to be bigger

The constraints

The rules that shape every page on this site apply to this one first.

  • evidence only — no invented metrics, testimonials, client names or logos; unconfirmed content stays a visible TODO
  • public projects only — the site shows only work a visitor can open, install or read today
  • no Russian-origin brand, service, package, font, API or CDN at any layer, verified at the company registries rather than a vendor’s own site
  • tokens only — colours, fonts and radii live in one stylesheet, and Tailwind’s default palette is switched off, so a component can’t reach for a raw hex value
  • Server Components by default — client JS ships only where interaction needs it, plus a cookieless page-view counter
  • infrastructure only as code — hosting and DNS change through a Terraform plan reviewed on the pull request, never by hand in a dashboard

The solution

Every decision below is recorded in the decision log, dated, with what it ruled out — the same accounting this page asks of every project it describes.

  • The name: Oleks Crane

    Zhuravlov comes from журавель, crane — so the name is a translation, not a pseudonym, and in English it also names the machine that builds things, which is what the studio sells.

  • Next.js over Astro

    it’s my home stack and the stack my case studies sell; Astro would fit a pure content site better, but it isn’t what the studio builds for clients.

  • Grey crane, annotated

    the name is the palette — a common crane’s grey plumage and one red crown — so one red accent on warm grey says Oleks Crane without a national symbol; lime-on-black was rejected as the generic look of AI and dev-tool sites.

  • Every public project gets a page — this one too

    the site shows only work a visitor can open, install or read today, and every one of those gets a page that sells the engineering behind it, not just the product — which is why this recursive page exists at all.

  • I build — you own

    it answers the first objection to a one-person studio — what happens if I disappear — and it’s checkable: this page’s own Handover section is the same evidence every other project page promises.

  • The evidence rule, made structural

    every fact is typed as the real value or a Missing TODO, so a gap renders as a visible TODO instead of a plausible guess — and what’s left before launch can be counted with one query.

I build — you own

Built to hand over

The repo is private, so nothing below links yet — this is the same handover a client gets, just not one you can click through today.

  • The brief

    12 sections covering positioning, voice, sitemap, the home and case-study page templates, visual direction and the open questions — the single source of truth for anything a visitor sees.

  • The decision log

    12 dated decisions, from the studio’s name to how visits are counted — each with its reasons, most with what they ruled out.

  • The typed content model

    src/content/ types the evidence rule directly: 6 fields on every project — status, scope, platforms, handover and both timeline dates — are typed as the real value or a visible Missing TODO, never left blank.

  • The design tokens

    9 colour tokens carry both themes — a warm near-black default and an ash light mode — plus the one accent colour, with Tailwind’s default palette switched off.

  • CI

    one GitHub Actions job runs 4 checks — format, lint, typecheck, build — on every pull request and every push to main.

  • Git hooks

    lefthook runs 2 checks before every commit (ESLint and Prettier, auto-fixed on staged files) and 3 before every push (format, lint, typecheck) — the same gates CI re-runs.

Results

Nothing to measure before launch. After it, the numbers that count are the inquiries it brings and how few TODOs are left on the other pages.

What’s next

Launch on olekscrane.com. Still open in the brief: the typeface, a wordmark and whether a blog ships with it.

Have a similar project in mind?

I’ll build it and hand it over: the code, the docs and the accounts are yours.

Discuss a project