Plain HTML, CSS and JavaScript
When the page is the product — marketing sites, documentation, content libraries. Nothing to hydrate, nothing to break, and a crawler sees the finished page on first request.
Web development
Marketing sites that rank and convert, dashboards your team lives in, and backends that don't fall over — built fast, built properly.
Most of what gets called "a website" is really two different products wearing the same domain. One is the public face — it has to load fast on a mid-range phone, say what you do in the first screen, and rank for the things people actually search. The other is the software your team opens every morning: a custom web application with roles, records, and workflows, where speed matters less than not losing anyone's data.
We build both, and we build them differently. A marketing site gets static HTML, aggressive caching, and a structured-data layer so search engines can read it without running JavaScript — the approach behind the searchable code library we built for a developer YouTube channel, where near-instant loads and zero running cost were the whole point. An admin dashboard gets real state management, server-side authorization, and an audit trail.
The overlap is the backend. Whether you need a contact form that reliably reaches a human or a multi-tenant API, the same questions decide the build: who is allowed to read this, what happens when it fails, and who fixes it in eighteen months.
Two production builds that show the range — a lead-generating business site and a content platform built for search.
Project fit
Architecture
Novelty is a cost you pay every time someone new opens the repository. We spend it deliberately.
When the page is the product — marketing sites, documentation, content libraries. Nothing to hydrate, nothing to break, and a crawler sees the finished page on first request.
Dashboards with filters, live data, and half a dozen interacting panels are where a component model pays for itself. Below that threshold it is overhead your users download.
Auth, Firestore, hosting and rules out of the box. You trade some control for weeks of calendar time — worth it when the product still has questions to answer.
Once business rules stop fitting in security rules — billing, integrations, scheduled jobs, anything with a third party on the other end — a real server is the honest answer.
Excellent for document-shaped data and real-time listeners. We will tell you when your reporting needs relational queries instead of a NoSQL workaround.
Card data never touches your servers, and the compliance surface stays with the people who specialise in it.
Engagement
No status theatre. You see working software on a URL early, and it stays on that URL as it grows.
We pin down pages, roles, and integrations, then write the estimate against that — not against a hopeful average.
Information architecture, URL structure, and the data model. Getting URLs right on day one avoids redirect debt later.
Weekly increments on a staging URL you can open any time. You review real pages, not screenshots.
Performance, accessibility, security rules, error states, and the analytics you will actually read.
DNS, SSL, caching, sitemap and search console — then a documented handover of every credential.
The rhythm is deliberately dull: a weekly demo, an honest changelog, and early bad news when something turns out harder than scoped. It is the same way we run MVP product development — and the reason clients usually know about a slipped estimate before we have finished diagnosing it. More on how we work is on our about page.
Core Web Vitals get treated as a constraint during the build rather than an audit afterwards. In practice that means images sized and lazily loaded, fonts subset and preloaded, JavaScript shipped only where it changes behaviour, and static assets served from a CDN with long cache lifetimes. A page that starts fast tends to stay fast; a page rescued at the end rarely does.
Anything a browser sends can be forged, so authorization lives on the server or in Firestore security rules — never in the interface that renders the button. Secrets stay out of the client bundle and out of the repository. Third-party payment and auth providers do the parts that carry regulatory weight. Dependencies are kept few, because every one of them is a door.
We write for whoever opens the project after us, on the assumption it will not be us. That means predictable file structure, comments that explain why rather than restating the code, and no clever abstraction that saves ten lines and costs an afternoon of reading. If a build step exists, it is one command and it is written down.
You own one hundred per cent of the code from the first commit. There is no proprietary framework to license, no hosting you are locked into, and no clause that makes leaving expensive. If you later move the work in-house or to another team, everything they need is already in the repository.
FAQ
A focused marketing site typically ships in 2–4 weeks. Web applications and admin dashboards usually run 6–12 weeks depending on how many roles, integrations, and workflows are involved. You get a timeline before anything is signed, and you hear about slippage when we spot it, not at the deadline.
Yes — semantic HTML, per-page titles and meta descriptions, Open Graph tags, structured data, a generated sitemap, and fast load times are part of every build rather than an upsell. What we do not do is ongoing content marketing; we build the technical foundation that makes content worth publishing.
Whichever the page justifies. Content and marketing pages are usually static HTML so they render instantly and crawl cleanly. Dashboards and anything with heavy interactive state get React. We do not add a framework to a brochure site to keep our tooling consistent.
Firebase when the product still has questions to answer and speed to market matters most: authentication, Firestore, hosting and security rules arrive working. Node.js when your business logic outgrows security rules — billing, scheduled jobs, third-party integrations, or anything that needs a trusted server. Plenty of builds use both.
Usually yes, provided there is an API or direct database access we can read and a way to authenticate. We start by mapping what already exists, then build the interface against it rather than migrating your data somewhere new.
Yes. We typically deploy to Firebase Hosting with your custom domain, SSL, and caching configured, plus a deployment process documented so anyone on your side can ship. The accounts are yours, so you are never dependent on us to stay online.
Often, yes. We start with an audit of performance, structure, and code quality, then either optimise in place or migrate your content into a cleaner build — whichever gives the better result for the budget. Rebuilding is a recommendation we have to justify, not a default.
You do, entirely, from the first commit. The repository lives under your account, every third-party service is registered in your name, and the handover includes documentation written for a developer who has never spoken to us.
Your choice. Some clients continue on a monthly retainer for new features, monitoring, and dependency updates. Others take the documented handover and run it with their own team. Both are normal, and neither costs you access to anything.
Next step
Tell us about your product. You'll get a straight answer on approach, timeline, and cost — usually within 24 hours.