Work/Termkont
Termkont
Marine container sales for a company in Saint Petersburg. A virtualised catalogue, a request pipeline that routes enquiries to a real inbox, and an admin dashboard behind it.
- ROLE
- Development
- YEAR
- 2025
- PLATFORM
- Web
- STATUS
- Live at termkont.ru

A few hundred listings, filtered in place
02 / 07
Screen 2 of 7: A few hundred listings, filtered in place
The site had to be built in the open and launched deliberately: visible to the client, invisible to search engines, until the day it wasn't.
Termkont sells marine containers: a few hundred listings, a request pipeline that routes enquiries to email with the listing attached, and an admin dashboard with a month of trend data. All of it in Russian, for a market where Yandex matters more than Google.
The interface design is Artur Moldovanu's. I built the front end, the Firestore data model, the functions behind the request pipeline, the dashboard and the deployment.
Two constraints shaped everything: the client had to see progress on a live URL without search engines finding it, and real users were on connections slow enough that a failed stylesheet was a genuine failure mode rather than a theoretical one.
Live at termkont.ru and handed over in full, so the client runs it without me. The interface design is Artur Moldovanu's.
- STATUS
- Live at termkont.ru
- PLATFORM
- Web
- HANDOVER
- Complete
Three screens carry it.One device, three states.

STATE 01 / 03
The catalogue
A few hundred listings with filters that have to stay fast on a throttled connection. Virtualised rows, images sized per breakpoint, and no client-side search index to download before anything renders.

STATE 02 / 03
The request
Nobody buys a container in a checkout. Every listing ends in a request, which is validated, rate-limited, and routed to a real inbox with the listing attached so the reply can be specific.

STATE 03 / 03
The dashboard
The client needed to see what was coming in without asking me. Requests, status and a month of trend data, in Russian, behind the same auth as the rest of the site.
Two decisions worth explaining.The parts that took the longest.
D—01
Two search engines, one switch
Yandex is the search engine that matters here, and it does not read a site the way Google does. That meant structured data in both dialects, explicit geo signals for Saint Petersburg, and a sitemap that tells the truth about what is actually live.
It also had to be buildable in public. Indexability is one deploy-time flag. Robots directives, canonical tags and sitemap output all read from it, so staging is invisible and launch is one environment variable rather than a checklist someone forgets.
// one flag, read everywhereexport const INDEXABLE = process.env.PUBLIC_INDEX === 'true' robots: INDEXABLE ? 'all' : 'noindex'sitemap: INDEXABLE ? routes : []canonical: INDEXABLE ? SITE_URL : undefined geo: { region: 'RU-SPE' }D—02
When the stylesheet never arrives
Real users on throttled connections were seeing an unstyled page. Not a slow page but an unstyled one, because the stylesheet request had failed outright and there was nothing underneath it.
So a small critical block ships inline in the document head: layout, type scale, and enough colour that the page is readable and navigable on its own. If the full stylesheet arrives it takes over. If it never does, the site still works.
/* inline, in <head>, ~1.4kb */:root{--ink:#101725;--acc:#3B6BD4}body{font:16px/1.5 system-ui;color:var(--ink)}.grid{display:grid;gap:12px} /* full sheet takes over when it lands *//* if it never does, this still reads */WHAT IT IS BUILT ON
- FRONTEND
- Next.js 15 · React 19 · Tailwind 4 · TypeScript strict
- BACKEND
- Firebase: Firestore, Cloud Storage, Cloud Functions
- QUALITY
- Playwright end-to-end · Lighthouse budgets in CI
- DELIVERY
- Vercel · Yandex Webmaster · Google Search Console
CREDITS
Interface design by Artur Moldovanu. Front end, data model, request pipeline, admin dashboard and deployment by me.
STATUS
Live at termkont.ru. Handed over in full.
NEXT PROJECT
Liquid Glass
A private React Native component library. Apple's native glass on iOS 26, a faithful fallback everywhere else, and the components client work starts from.
Tell me what you’re building.A written scope and a fixed quote before any money moves.
I reply to everything within one working day. If I’m not the right person for it, I’ll tell you straight away rather than three weeks in.




