Skip to content

Standards

The parts that do not depend on who is looking

Anyone can describe how they work on a first call. This is the version that is written down before the call, applies to every engagement, and can be checked against the code while you watch. Where a standard has a real limit, the limit is on this page too.

Quality gateswhat each build runs, locally
The checks each reference build runs, by stage, for this site, the Whenbird web app and the Whenbird API. They are run locally. Each check links to its evidence.
This siteWhenbird webWhenbird API
type­checktsc --noEmit
testsvitest, axe, JS-offvitest, axevitest
buildnext build
shipthroughbolt.comwhenbird.comapi.whenbird.com

Web builds only: no mobile study is published yet. How store builds are checked

Delivery

How work is run

These are the standards our own products are built to. An engagement inherits them because it is built on the same scaffolding, not because they were written for a proposal.

  • Scope is written before work starts

    A fixed scope document — deliverables, milestones, price, payment structure — agreed before any code is written. The price does not move unless the scope does, and a scope change is priced and accepted in writing before it is built.

  • You get a live build every week

    A URL you can open and use, every week, from week one — or an installable build where the project is a mobile app. Not a status report and not a slide. It exists so a project cannot fail quietly for two months: the first chance to say 'this is not what we wanted' is week one, while a change is still small.

  • Checks are run locally before anything is committed

    Type checking, unit tests, linting, and an import-hygiene check are committed as workflow configuration and run across the monorepo before work is committed. A gate that has not run is treated as a gate that failed — including ours.

    The checks run locally, each commit names which ones ran, and we rerun them in front of you on the call.

  • Accessibility is a gate, not a review

    Automated WCAG 2.1 A/AA checks run against every public route with zero tolerance — one violation fails the run. Where the automated tools cannot see a criterion, the gap is recorded in the test file itself so nobody mistakes green for complete.

    Two limits worth stating. Automated tooling covers roughly a third of WCAG — it is a floor, not a certificate, and the suite says so itself. And on this repository the check runs on demand rather than on every push, because the workflow carrying it has no trigger that fires yet. It said "fails the build" until somebody checked which builds it had actually failed.

    for (const route of ROUTES) {
      test(`${route} has no detectable WCAG A/AA violations`, async ({
        page,
      }) => {
        await page.goto(route);
        await settleAnimations(page);
        const results = await new AxeBuilder({ page })
          .withTags(["wcag2a", "wcag2aa", "wcag21a", "wcag21aa"])
          .analyze();
    
        expect(
          results.violations,
          results.violations
            .map((v) => `${v.id} (${v.impact}): ${v.help}`)
            .join("\n")
        ).toEqual([]);
      });
    }
    Fig 1 · web/throughbolt/tests/e2e/a11y.spec.ts, lines 106–123The accessibility check: one axe run per public route, failed by any violation
  • Performance targets are numbers, not adjectives

    Largest Contentful Paint, Cumulative Layout Shift and Total Blocking Time have written thresholds that a build is measured against, rather than a promise that it will feel fast. The numbers are in the repository where you can read them and hold us to them.

    Measured on demand today rather than on every commit — the workflow carrying these budgets exists but is not yet wired to a trigger that fires. We would rather say that than show you a badge.

  • Store compliance is scored before submission

    Where a project ships to an app store, builds are scored against Apple's Guideline 4.3 and Play's uniqueness rules on a published rubric, with a numeric threshold that has to be cleared before anything is submitted. Rejection is a schedule risk, so it is handled during the build rather than discovered at review.

  • History is reviewable

    Conventional commits, one concern per commit, and a written rationale in the commit body for anything non-obvious. You are buying a codebase somebody else will maintain one day — the reasoning has to survive the engagement.

Ownership

What you hold, from day one

Every item here is designed so that ending the engagement is a decision rather than an event.

  • Source and infrastructure are in your accounts

    Repositories, cloud, app-store and third-party accounts are yours from the start, not migrated at the end. You can revoke access this afternoon and keep shipping.

  • The pipeline is committed, not remembered

    Build steps, deploy lanes, monitoring and alerting — and store submission where a project ships to one — are configuration in your repository: reviewable, runnable, and transferable without us. Nothing load-bearing lives in somebody's head or in a private dashboard.

  • You own the work as it is paid for

    Rights in each milestone pass to you when its invoice is paid; until then you can review and test it. Tooling we bring with us comes with a perpetual, royalty-free licence for your project, so there is no hosting lock-in, no per-seat fee afterwards, and no component you have to keep paying us to use.

  • Partnerships end on 30 days' notice

    Three-month minimum, then month to month, with 30 days' notice on either side and no auto-escalating rate. Ending one includes a documented handover of the project and its operational history.

Security and data

What we ask for, and what we do not keep

The honest answers to the questions a security review asks, including the ones where the answer is no.

  • Access is scoped and revocable

    We work in your accounts under your identity provider, with the narrowest role that does the job, and we ask for production credentials only where the work genuinely requires them. Access is enumerated in the scope document so you know exactly what was granted.

  • Client code and data stay in client systems

    We do not copy client source or customer data into our own infrastructure for convenience, and we do not retain either after an engagement ends beyond what a signed agreement requires us to keep.

  • Overflow work is NDA-clean and unbranded

    White-label delivery under your brand stays under your brand. We do not publish, reference, or list work done under an NDA, and we will sign yours rather than ask you to accept ours.

  • This site collects nothing

    No analytics, no advertising trackers, no tracking pixels, no marketing cookies, and no third-party scripts. Fonts are self-hosted at build time, so loading this page does not make a request to anyone else. That is why there is no cookie banner — there is nothing to consent to.

  • We hold no security certifications

    No SOC 2, no ISO 27001, no Cyber Essentials. If your procurement process requires one, we are not the right vendor for you today — and you should find that out here rather than four weeks into a review.

    Said plainly because a vendor who is vague about this costs you the four weeks.

Commitments

What we will not do

What a company refuses to do under commercial pressure is more informative than what it says it values, so these are phrased as refusals. Every one of them costs us something, which is the only reason any of them is worth reading.

  • We will not invent social proof. No client logo, testimonial, review, user count, or rating appears on this site unless it is real and attributable — and none is.
  • We will not send an invoice you did not agree to in advance. Scope changes are priced and accepted before they are built, never reconciled afterwards.
  • We will not take an engagement we are wrong for. A straight 'you do not need us' on the first call is a normal outcome and costs you nothing.
  • We will not keep billing a partnership you have outgrown. If genuinely quiet months repeat, the honest move is the ad-hoc hourly rate, and we would rather lose the line item than have you resent it.
  • We will not hide the price. Every rate is published before you speak to anyone, because a number you have to ask for is a number that depends on what you look like you can pay.

Next step

Check it rather than take it

Every standard above is enforced in a repository we can put on screen. Bring the two you care about most and we will show you the configuration that enforces them, the last time each one failed, and what happened next. Rates are on pricing; the terms that govern an engagement live in the signed scope rather than on this site, and the site's own terms of use are separate from both.

Start a project

We reply within one business day.