
Without agency rates or a six-month wait. I build it myself, show the work as it goes, and quote before we start.
First we decide who is coming and why. Then what they must see in the first three seconds. Only then do we draw. The reverse order rarely works: you end up with a gallery people admire and leave.
What answers the visitor's questions, and in what order
Design that strengthens the answer instead of decorating it
After launch we look at the numbers and fix by them
End to end: research, wireframes, design, code, launch and support. One person accountable the whole way.
A page for a conference, forum, concert or opening. It has one job: collect registrations before the date arrives. Programme, speakers, venue with a map, a sign-up form with confirmation and an exportable list. The deadline doesn't move, so I take these projects out of the queue and ship in 7–14 days.
Form with confirmation and an exportable attendee list
Schedule, speakers, venue and how to get there
Live before the date, ahead of the general queue
Not a wall of screenshots but a breakdown: the task, the decision, and the part a client never sees — yet pays for.
The project arrived from another contractor: the server had already been breached, the catalogue was duplicating itself, sold cars stayed on display. Close the holes and fix the data first, sell second.
Anyone can draw a good-looking screen. The difference shows where clients never look: page weight, what the form does when something fails, what happens under a rush.
The first thing I found was a server compromised through a known hole in the site engine. I updated the engine to the version that closes it and moved the build onto a supported runtime — the old one had stopped receiving security updates. I also removed a line that printed the database password into the server log: anyone with access to the logs had access to the database.
The server sits in Russia and cannot reach Telegram directly. Any hiccup used to mean the enquiry simply stayed in the database and nobody found out. Now there is a queue: the site files a job, the bot collects it itself and confirms delivery. If the bot dies halfway, the job returns to the queue after a minute — eight attempts in all, with growing pauses. And if no manager is active at all, the enquiry goes to a backup chat instead of evaporating.
There are around a hundred thousand cars, and the page address could be crafted so the server tried to assemble all of them at once — one request took the site down. Now no more than sixty cards are served at a time, and any malformed value in the address returns an ordinary list instead of an error. Checked by hand: a request for 99,999 cars returns 60, and an attempt to slip a database command through returns a normal listing.
The source platform serves the same car twice — once under the listing number, once under the vehicle's internal number — and the old importer dutifully created two cards. Every fourth car in the catalogue was duplicated. I removed 38,459 surplus cards, keeping a copy of them first, and closed the cause itself with three checks on write. The catalogue now holds 94,647 cars and 3 duplicates.
A car sold — and its card hung on the site forever: the sync only reached new listings and never came back to published ones. Customers called about cars that no longer existed, and the conversation opened with an apology. Now every listing is re-checked against the source at least once every three days, and sold stock disappears without anyone touching it.
YouTube videos were embedded directly: the player loaded with the page and told YouTube about the visit even if nobody intended to watch anything. I replaced them with a still frame and a play button — the player connects only on click. Requests to YouTube before a click went from two to zero, and not a single third-party cookie is set until the video starts. For a site that has to declare in its privacy policy what it collects, that is not a detail.
In a trade where the estimate arrives after the work and doubles on the way, the argument is a fixed price. The site has to calculate it itself, before anyone visits.
Anyone can draw a good-looking screen. The difference shows where clients never look: page weight, what the form does when something fails, what happens under a rush.
Blocks appeared as you scrolled — a nice touch, but it rested on a browser mechanism that sometimes simply never fires. I checked and saw it: in that situation not one of the six blocks ever appeared, and everything below the first screen stayed blank forever. I added an independent check on a one-second timer and a separate rule for when scripts are off. Blocks now appear even where the browser sends no signal at all.
It travels two ways in turn: first to a service bot, and if that doesn't answer within four seconds, straight to Telegram. If neither path works, the visitor sees an honest «it didn't send, please call» rather than a fake «thank you» — and the full text is written to a service log on the server, where it can be recovered by hand. I deliberately tested the broken path: the site returned an error and kept the enquiry instead of pretending all was well.
There's an invisible trap field: people never see or touch it, automated scrapers fill in everything and give themselves away. Separately, the server re-checks the name, phone and consent itself — it doesn't take the browser's word. And one address gets no more than five submissions per ten minutes. Verified live: a normal enquiry passes, a bot's is rejected, the sixth in a row is refused.
On a 375-point screen the home page occupied 542 — you could drag it sideways and part of the text ran off the edge. The culprit was a wide price table: in a narrow layout it pushed the whole page out instead of scrolling inside itself. The header with the name and phone number didn't fit either. Fixed and re-checked across seven pages at four widths, from a very narrow phone to a large monitor — no sideways shift anywhere.
There's a measurable standard for how far text must differ from its background to stay legible for people with weak sight and in sunlight. I calculated every colour pairing on the site and found four that failed it. The worst was yellow lettering on the call-to-action bar in dark mode: it differed from the background by three times less than the standard and all but vanished. Colours replaced; every pairing now clears the standard with room to spare.
Every page is built in advance and sits on the server as a ready file — a request costs it about two thousandths of a second and 55 MB of memory. Fonts, counters and images are never pulled from third-party sites: if something goes down at Google or an ad network, page speed is unaffected. There's a specific reason for that — on the client's previous site a build once failed for exactly one reason: Google's fonts couldn't be reached.
The studio's own site: show the method, name prices before the first call, and take enquiries so that none is ever lost.
Anyone can draw a good-looking screen. The difference shows where clients never look: page weight, what the form does when something fails, what happens under a rush.
They used to go straight to Telegram. One enquiry containing text Telegram refused, and it vanished silently. Nine were lost that way. Now an enquiry is logged to disk first and sent second, and failed attempts retry on a schedule.
The hero video weighed 3 MB and carried a 256 kbps audio track — on a site where video is always muted. Re-encoded into two formats without audio: 1947 KB became 176 KB before the video loads.
The cache header arrived doubled: first «do not store», then «keep for a month». Browsers take the first. The site was re-downloaded on every visit, and the only way to notice was to read the response headers.
A price lived as text in four files — the price list and the service pages, in two languages. A mismatch between them costs more trust than a typo. Now they are numbers in one place, and roubles and dollars are derived from them.
A field no human can see, plus a timestamp: nobody fills a form in two seconds. Add rate limiting at the server. None of it is visible and none of it gets in the way — but enquiries don't drown in noise.
The first call is a free review of your current site: where enquiries get lost and what to fix first. Thirty minutes, and you leave with an estimate and a plan — whoever ends up building it.
I send progress as it happens — you see what is going on and can step in before it is too late.
Thirty minutes on a call. We go through the goal, the audience, the competition. I come back with an estimate and a plan.
1 dayWireframes, copy, the logic behind the enquiry form. Agreed before design — changes here are free.
2–4 daysThe first screen as a concept, then the full layout. Motion is shown as a working prototype, not described in words.
5–10 daysCode, motion, responsive layout, 90+ in PageSpeed, CRM and analytics wired up.
5–14 daysDomain, hosting, analytics, handover notes. A month of support included.
1–2 daysA brief call: we go through the task, I come back with an estimate and a plan. The estimate is fixed before we start and doesn't creep. Free, and it commits you to nothing.
Nobody sits between you and the person doing the work. That's where the timelines, the price and the freedom to change your mind come from.
| Agency | Me | |
|---|---|---|
| Who owns the result | An account manager | Me, directly |
| When you learn the price | After two meetings | Before we start, calculator on the page |
| Landing page price | $4,000–9,000 | from $1,800 |
| Landing page timeline | 1.5–3 months | 10–14 days |
| Design revisions | Per the contract | Until you're happy |
| Who writes the code | A subcontractor's subcontractor | I do |
| After launch | A new contract | A month of support included |
Almost nobody in this market shows a price. I do. Whatever you configure travels with your enquiry, so you won't have to repeat it over email.
Accurate to about ±20%. The exact figure comes after a 30-minute brief — free, and it commits you to nothing.
If your question isn't here, message me on Telegram — you'll get a straight answer and a next step.
The range is in the calculator above — it prices by project type, depth of design and the integrations you need. The exact figure comes after a half-hour walk-through of your task: guessing before that means being wrong in both directions. The estimate is fixed before we start and doesn't creep as we go.
In stages, not everything up front. The estimate is fixed before we start and split along the process: part at the start, the rest as stages are accepted. At any moment you can see what's done, what's accepted and what's paid. The exact split comes with the estimate after the brief.
A fair question, and it's answered by how the work is set up, not by a promise. Domain, hosting and code access are yours from day one — the site can't be held hostage. Every stage ends with an artifact in your hands: brief, wireframes, layouts, a working build. The stack is standard, no homemade magic — any developer can pick it up. Illness shifts the timeline by days, and you hear about it at once, not on delivery day.
That's how most people arrive. I build the structure during the brief and write the copy too — it's a separate line in the estimate. What I need from you is a clear sense of who your customer is and why you're better than the people next door. The rest I'll pull out with questions.
Next.js and TypeScript, Tailwind for markup, hosted on my own server. Not a website builder: the site isn't tied to someone else's subscription, and it can grow and move. If your task is simpler than that, I'll say so and suggest something cheaper.
No catch, just arithmetic. An agency invoice covers an office, a salesperson, an account manager, a project manager and the studio's margin — the work itself is the smaller part of it. Here you pay for the work alone: the same stages, done by one person, with no hand-offs. The honest flip side: I won't take five projects at once, which is why a queue exists.
No reason at all, if you need five screens you won't mind throwing away in six months. The difference shows up later. At that price it's a template: someone else's theme, a dozen plugins, a builder with a subscription — and changing one section in that costs more than starting over. Here the code is written for your task, the credentials are yours from day one, page weight is measured, and the form has been tested on real enquiries. And there's someone to write to six months on: this is my job, not something I do between shifts.
The first month of support is included: copy edits, small improvements, and I watch the numbers. After that it's optional — a growth subscription or one-off tasks. Domain, hosting and code access are yours from day one.
You do. Layouts, copy, code and every credential are handed over in full. The only thing I keep is the right to show the work in my portfolio — and only if you don't mind.
You see the first-screen concept before the full layout exists. If the direction is wrong, we change it at that step — that's what it's for. Design revisions aren't capped by a counter: we work until it's good.
The first call is a free review of your task or your current site. You leave with an estimate and a plan — what happens next is up to you.
Order today — your site is ready by13 October