A site rarely fails because the code was wrong. It fails because two years later nobody can change it. The agency that built it has moved on, the repository was never handed over, the hosting sits in someone else's account, and there is no document explaining how any of it fits together.
So the next agency quotes a rebuild, because reading someone else's undocumented codebase is slower than starting again. The cycle repeats every two or three years, and each rebuild throws away the SEO history and the content the last one accumulated.
The second recurring problem is the CMS. A marketing team is promised they can edit the site, then discovers that changing a heading means filing a ticket. Content stops being updated, the blog dies after four posts, and the site slowly stops reflecting what the company does.
Third is speed. A site that scores 40 on mobile is losing traffic to Google and visitors to the back button, and by the time anyone measures it the cause is spread across a dozen decisions made months earlier.
Sound familiar?
You do not have access to the repository your own site is built from.
Hosting or the domain sits in a previous agency's account.
Changing a heading requires a developer and a two-week queue.
Mobile PageSpeed is under 50 and nobody can say which part is at fault.
The last handover was a zip file and a phone call.
You are being quoted a full rebuild for what sounds like a small change.
A GitHub organisation you own, with our commits in it from day one. Not delivered at the end as a zip. It is visible throughout, so you can bring in another developer at any point.
Cloudflare, Vercel or AWS, set up under your billing. We get access as collaborators. If you stop working with us, nothing needs migrating.
Editing without a developer, for the content that actually changes: pages, posts, team, case studies. Including a written guide and a training call.
Every breakpoint, and every state: hover, focus, error, empty, loading. Checked on real devices, not just a browser window dragged narrow.
Static rendering where possible, images converted and sized, fonts self-hosted, per-page meta and canonical tags, structured data and a sitemap. We aim for Lighthouse 90+ on mobile and tell you what is holding the number down when something required gets in the way.
How to run it locally, how to deploy, how to add a page, who to call. Plus a post-launch fix window, typically ten working days and longer on bigger builds, for anything that surfaces in real use.
Two things delay web projects more than anything technical: changing the design once it is built, and waiting on copy the week before launch. The process front-loads both.
Sitemap, page templates and the design for every template, agreed in writing before any code. Changes here cost minutes; the same change after build costs days.
Output: approved designs and a page inventory.
Front end and backend together, template by template, deployed to a preview URL you can open at any time. No month of silence followed by a reveal.
Output: a live preview, updated daily.
Your copy and images into the CMS, forms wired to their destinations, analytics and tracking installed, redirects mapped from the old URLs.
Output: a complete site on a staging domain.
DNS cutover, Lighthouse and accessibility pass, Search Console and sitemap submission, repository and hosting transfer, training call.
Output: a live site and its documentation.
We pick per project rather than defaulting to one framework. A brochure site and a customer portal have almost nothing in common.
Astro
Marketing sites and content-heavy builds. Ships almost no JavaScript, which is why it scores well on mobile without tuning.
Next.js and React
Applications with real interactivity: dashboards, portals, anything behind a login where state matters.
Vue and Nuxt
The alternative to React where a team already works in Vue, or where a smaller, more conventional codebase matters more than the size of the hiring pool.
Laravel
Backends with substantial business logic, admin panels and role-based permissions. Fast to build in and easy for another team to pick up.
Node and TypeScript
APIs and services, particularly where the front end is already TypeScript and sharing types between them saves a class of bug.
MySQL and PostgreSQL
Relational by default. We use Postgres where JSON columns or vector search are involved, MySQL where your team already runs it.
Cloudflare, AWS and DigitalOcean
Static sites on Cloudflare's edge, applications on AWS or DigitalOcean. Chosen for what the project needs, in your account either way.
Not fixed to these
This is what we reach for by default, not a limit. Plenty of projects arrive with the stack already decided: an existing codebase, a framework your in-house developers know, a hosting provider you are contracted to. We build in it. Where we would have chosen differently we will say why once, then get on with the work. The team has shipped in Angular, Vue, WordPress, Django and plain PHP alongside the list above.
Page count matters less than how many of those pages are genuinely different, and how many systems the site has to talk to. These are the shapes most projects take.
| Engagement | Typical timeline | Best for |
|---|---|---|
| Marketing site, 8 – 15 pages | 4 – 7 weeks | Companies replacing a dated or slow site |
| Site with CMS and blog | 6 – 10 weeks | Teams publishing content regularly |
| Customer portal | 10 – 18 weeks | Logins, accounts, dashboards, documents |
| Web application | 14 weeks + | A product rather than a site |
| Support retainer | Ongoing | Updates, changes and monitoring after launch |
Design is included in the build. Copywriting, photography and paid stock are quoted separately, or we work with your own. Timelines assume content and feedback arrive on schedule, and we will say during scoping which milestones depend on you.
Every project is priced in writing after a scoping call. You get a fixed number, with what is included and what is not, so there is nothing to negotiate later.
Tell us what you need built and we will send a scope and a price. The reply comes from the person who would run the project.
Get a quote →This page describes how we prefer to work, not a fixed contract. Deliverables, stages and timelines vary with the size and shape of the project, and some of what is described here will not apply to yours. The written scope you receive after the scoping call is the version that counts. How we engage →
Yes, and from the first commit rather than at the end. The repository is created in your GitHub organisation and we work inside it as collaborators. Hosting is set up under your billing account too. If you stop working with us tomorrow, nothing needs to be transferred.
For the content that changes, yes: pages, posts, team, case studies and testimonials are all editable through the CMS, with a written guide and a training call at handover. Structural layout changes still need a developer, and we will be specific during design about which is which.
We aim for Lighthouse 90+ on mobile and treat anything lower as worth explaining. We get there with static rendering, images converted and correctly sized, self-hosted fonts and minimal JavaScript. If a third-party script you need pushes it below that, we will tell you the cost before adding it.
A post-launch fix window is included, usually ten working days and scaled up on larger builds, for anything that surfaces in real use. Beyond that, either a support retainer with agreed monthly hours, or ad-hoc work quoted per change. Plenty of clients take the code and use their own developer, which is the point of handing it over properly.
Yes, and most of our work starts from an existing brand. Send fonts, colours, logo files and any guidelines you have and we will design within them. Where guidelines do not cover something a website needs, we will propose an extension rather than inventing something off-brand.
Often, but we will look first. If the code is reasonable and documented we can maintain and extend it. If it is a heavily modified theme with no version control, a rebuild is usually cheaper than the first six months of maintenance. We will give you an honest assessment either way, before quoting.
Every enquiry gets a reply within one working day, from the person who would run your project.