Path 02 - platform work
Ship it. Then keep it working.
Portals, dashboards, integrations and the automated coverage that lets you deploy on a Friday. Available on applications we did not build.
What you get
What we build, and what it costs
Prices are starting points, not menu items - the real number comes after we understand the work. Nothing here is a package you have to take whole.
Why it keeps working
Tested like software, because it is software
Most agencies hand over an application and hope. We write automated tests over the flows that lose you money when they break, then run them on every change - so a broken checkout is caught by CI rather than reported by your customer.
- Automated Playwright tests over your core functionality - login, checkout, booking and permissions
- Cross-browser: Chromium, Firefox and WebKit
- Wired into CI so it runs on every push
- Available on applications we did not build
How we engage
Four steps, priced so you can stop after any of them
- 01
Assessment
A paid, fixed-price review of what you already have - architecture, critical workflows, performance, accessibility, test coverage and technical debt - ending in a prioritised list. Low risk, and it credits toward the build if you go ahead.
- 02
Scope and price
Fixed scope and fixed price wherever the work allows it. Where it genuinely cannot be fixed up front, you get a rate and an agreed ceiling rather than an open meter.
- 03
Build in increments
Working software you can click through, not status reports. Deployed to a preview environment from the first week, so nobody is guessing what is being built.
- 04
Support
A retainer for changes, monitoring and test maintenance - handled by the person who wrote it, not whoever is free that week. Or a clean handover to your team with documentation, which is equally fine and not treated as a failure.
A real run
This is what gets handed over
You get tests that run, not a report full of percentages. Every time the code changes they run again, and each one is named after something your business actually does, like booking a job or taking a payment. When one fails, you know what stopped working and who it affects.
- every footer service link resolves to something real4.5s
- the quote form submits2.4s
- the lead is stored, not lost2.9s
- it works on a five-year-old phone1.3s
- nothing is clipped at 320px, least of all the phone number1.4s
show all 91hide
- clicking one service after another moves each time7.6s
- a footer link from one path reaches the other path's service2.2s
- a service with no page of its own still reaches its row1.3s
- a linked row is not hidden under the sticky header979ms
- arriving cold on a fragment marks the row too1.1s
- the row you clicked is the row that gets marked2.2s
- a service row links to the page that describes it2.1s
- a row with no page of its own is not a link739ms
- every social link leaves the site safely and says where it goes666ms
- the Google link opens the profile, not the review form459ms
- reports ok, and says so in a way a keyword check can read183ms
- says nothing about the infrastructure behind it135ms
- is not cached20ms
- is kept out of search results21ms
- robots.txt disallows the pages that are not for searchers18ms
- the sitemap lists every public page and no private one69ms
- the private pages also carry noindex1.1s
- the public pages are left indexable763ms
- an invalid field is marked, and its message is tied to it1.5s
- optional fields are not marked invalid or required1.6s
- the required fields say so in the accessibility tree709ms
- the privacy policy carries the mandated sentence, character for character463ms
- the privacy policy is titled Privacy Policy and names the brand477ms
- the terms page meets all four carrier requirements480ms
- the terms page doubles as the opt-in proof657ms
- neither legal page claims the agreement is the consent714ms
- the opt-in page makes clear that consent is not a condition of purchase594ms
- the consent box starts unchecked, every time657ms
- an unticked box is refused, and nothing is recorded812ms
- a ticked box is recorded with the words that were on the screen1.1s
- visitor reaches the quote form1.3s
- a bad email address is caught1.7s
- a lead from the QR page records where it came from921ms
- how they heard reaches the database, in their own words1.5s
- a note is dropped unless the answer is Other81ms
- spam is turned away43ms
- a lead is never falsely reported as emailed34ms
- an unanswered lead past the threshold is picked up by the sweep72ms
- a lead inside the threshold is left alone34ms
- a lead already marked handled is never chased23ms
- a lead already reminded is not reminded again24ms
- nothing is sent outside the sending window22ms
- the sweep refuses a caller without the secret22ms
- a valid token marks the lead, and a second click is still fine52ms
- a forged or missing token is refused46ms
- fetching the link does not mark anything - only the button does575ms
- website-design renders and says what it costs856ms
- logo-design renders and says what it costs1.4s
- lead-capture renders and says what it costs699ms
- google-business-profile renders and says what it costs680ms
- qr-signage renders and says what it costs699ms
- hosting-and-care renders and says what it costs759ms
- custom-software renders and says what it costs766ms
- automation-and-integrations renders and says what it costs695ms
- playwright-testing renders and says what it costs695ms
- every service page is indexable and canonical2.4s
- a slug that does not exist is a 404, not an empty page581ms
- each page describes itself to a search engine, and claims nothing extra2.4s
- exists, and leads with the objections rather than the feature785ms
- the tool link opens sealmark and cannot reach back803ms
- tells you how to install it on every platform1.8s
- is reachable from the footer of another page1.3s
- is indexable and points at its own canonical704ms
- is in the sitemap, because a page nobody finds is not a link31ms
- web-design-mokena renders and points at the service pages725ms
- web-design-new-lenox renders and points at the service pages1.7s
- web-design-frankfort renders and points at the service pages870ms
- web-design-orland-park renders and points at the service pages770ms
- web-design-tinley-park renders and points at the service pages695ms
- web-design-lemont renders and points at the service pages745ms
- web-design-homer-glen renders and points at the service pages769ms
- the dynamic segment does not swallow the rest of the site1.7s
- a town we do not serve is a 404, not an empty page619ms
- no two town pages say the same thing24ms
- every town names all of its neighbours9ms
- towns link to each other, and only where there is somewhere to go1.2s
- a town page says where it works and invents no reviews1.4s
- every project link is external, safe, and says it opens a new tab894ms
- no project is listed twice6ms
- the numbering runs straight through both groups553ms
- the badges match what is actually for sale, and the offer states a price559ms
- the home page shows the showcase and links to the rest of it568ms
- only the projects with a case study link to one360ms
- the whole row is the live link, and the case study link sits above it3.1s
- a case study names its project and still sends you to the live site431ms
- both groups render, each with its own heading523ms
What we work in
Nine years of it, including for a Fortune 5 company
Listed so you can check for a match before spending a call on it. If your stack is not here, say so - adjacent is often fine, and we will tell you when it is not.
Front end
- TypeScript
- JavaScript
- React
- Next.js
- Angular
- HTML & CSS
Back end
- Node
- Express
- Java
- Spring Boot
- REST APIs
Data
- MongoDB
- SQL
- PostgreSQL
Quality
- Playwright
- Cypress
- Vitest
- Jest
- React Testing Library
- JUnit
- Rest Assured
Delivery
- CI/CD
- GitHub Actions
- Jenkins
- Docker
- Kubernetes
Cloud
- AWS
- Google Cloud
- Pivotal Cloud Foundry
- Vercel
- Render
Working in your environment
- Git
- Bitbucket
- Jira
- Code review
- Pull request workflow
The entry point
Start with an assessment, not a contract
Handing a stranger a large build is a lot to ask. An assessment is fixed-price, takes about a week, and ends with a prioritised list you own - whether or not you hire us to act on it. If you do, the fee credits toward the work.
- Architecture and data model
- Critical user workflows
- Mobile and responsive behaviour
- Performance and load times
- Accessibility
- Existing test coverage
- Deployment and release process
- Security considerations
- Technical debt, ranked by cost
$1,000 flat · roughly one week · credited toward the build
Questions people actually ask
The awkward ones, answered up front
- Can you work on an application you did not build?
- Yes, and it is one of the more common engagements. Test automation in particular does not require having written the application - often the opposite, since a fresh reader finds the assumptions the original team stopped seeing.
- What stack do you work in?
- TypeScript and JavaScript across React, Next.js and Angular on the front end; Node and Express or Java and Spring Boot on the back; SQL and MongoDB for data. Playwright and Cypress for end-to-end coverage, Vitest, Jest and React Testing Library for unit tests, JUnit and Rest Assured on the Java side. Deployed on AWS, Google Cloud or Pivotal Cloud Foundry, with Docker, Kubernetes and Jenkins or GitHub Actions behind it. Nine years of it, including for a Fortune 5 company - not a design studio subcontracting the hard part.
- What does automation actually cover?
- Workflow automation and API integrations between systems you already run: moving data between them, triggering notifications, and removing repeated manual steps. It does not cover desktop or robotic process automation of legacy software, which we do not take on.
- Fixed price or hourly?
- Fixed price wherever the scope can be pinned down, which covers most defined projects. Discovery-heavy or open-ended work is quoted at a rate with an agreed ceiling.
Start with an assessment.
A fixed-price review of what you have, with a prioritised list of what to do about it. It credits toward the build if you go ahead.