Contact Page
The form first, then the four questions that cause most of the messages — answered here, because that is faster for the sender than a reply and leaves the inbox for what needs a person.
Route before you write — three doors, each with the form its sender actually needs: a calendar for a buyer, a structured ticket for a broken import. One textarea costs a round trip.
app/contact-page-02.tsxnpx hoverlab add contact-page-02
Or over MCP, from your editor's agent — no account needed.
Free to read, copy and install, for personal and non-commercial projects. Shipping it in client work or a paid product needs Pro ($79 once). The source lands in your repo and stops being ours — no attribution, nothing to upgrade.
npx hoverlab add contact-page-02Three doors, because a buyer and a customer with a broken import want completely different things and one textarea serves neither well.
Book thirty minutes with someone who can answer pricing
File it with the details we will otherwise have to ask for
Press, partnerships, invoices, or a question about the company
No discovery form. If it turns out we are wrong for you, we would rather establish that in the first ten minutes than in the fourth call.
The fields below are the ones we would email you for anyway. Filling them in now is what turns a two-day thread into one reply.
Response times as measured, not as aspired to. The slow one is at the bottom and it is labelled.
The real page, rendered in your current theme — every section below is a live block, not a screenshot.
Same page type, different bet about what the reader came for. Neither is the “correct” one — pick the layout whose opening section matches the question your visitors arrive with.
Sales, support and the people who write the code all read this. Pick a subject and it goes to the right one of them.
Replies within one working day, and within two hours for anything marked urgent.
Four things people write in about most. All four have an answer you can act on now.
The form first, then the four questions that cause most of the messages — answered here, because that is faster for the sender than a reply and leaves the inbox for what needs a person.
Only want one section? Open it and copy that block instead — browse Navigation.
Want the whole project rather than this one screen? A template ships every route, the theme tokens and the layout.
/**
* The contact page, take 02 — route first, write second.
*
* doors three reasons to be here, each with its own destination
* sales a calendar, because that is what this door actually wants
* support a structured ticket, because free text loses the details
* objections what happens next, per door, with real response times
*
* Take 01 puts one form at the top and answers the four commonest questions
* underneath. That is the right shape when every message lands in the same
* inbox — one form, one queue, one person triaging.
*
* It stops being right the moment the messages have different destinations.
* A single "how can we help?" textarea forces the sender to guess what you
* need and forces you to reply asking for it, which is two round trips
* before anyone has done anything. A buyer wants a time in a calendar. A
* customer with a broken import wants to attach a file and a workspace id.
* Neither is served by the same box.
*
* So the page opens on `persona-cards` as a router: pick the door, get the
* form built for it. The cost is one extra click for everyone, and the
* judgement is that the click is cheaper than the round trip it removes.
*
* Both destinations render inline rather than behind navigation, because a
* router that hides its destinations is a page that looks empty on arrival.
*/
import * as React from 'react'
import { NavbarSimple } from '@/components/navbar-simple'
import { PersonaCards } from '@/components/persona-cards'
import { BookingScheduler } from '@/components/booking-scheduler'
import { SupportTicketForm } from '@/components/support-ticket-form'
import { FaqObjectionList } from '@/components/faq-objection-list'
import { FooterMinimal } from '@/components/footer-minimal'
const DOORS = [
{
name: 'I want to buy',
headline: 'Book thirty minutes with someone who can answer pricing',
bullets: [
'Straight to a calendar, no qualification form first',
'You will meet an engineer, not only an account executive',
'Security questionnaire answered before the call if you send it',
],
href: '#sales',
ctaLabel: 'Pick a time',
},
{
name: 'Something is broken',
headline: 'File it with the details we will otherwise have to ask for',
bullets: [
'Workspace id and a file attachment, captured up front',
'Median first reply four hours, business days, no bot',
'Sev-1 during month-end close is paged, not queued',
],
href: '#support',
ctaLabel: 'Open a ticket',
},
{
name: 'Everything else',
headline: 'Press, partnerships, invoices, or a question about the company',
bullets: [
'hello@acme.example reaches four people',
'Invoices and VAT: billing@acme.example',
'Press: we will say yes to most things and answer within a day',
],
href: 'mailto:hello@acme.example',
ctaLabel: 'Email us',
},
]
const WHAT_HAPPENS = [
{
id: 'sales',
label: 'Booked a sales call',
detail:
'You get a confirmation with the agenda and the name of who is joining. No pre-call form. If you send the security questionnaire beforehand it is answered in the invite, so the thirty minutes are not spent reading it aloud.',
tone: 'positive' as const,
status: 'Instant',
},
{
id: 'support-normal',
label: 'Filed a support ticket',
detail:
'Auto-acknowledged with a ticket number, then a human reply. Four hours is the median and fourteen is the ninety-fifth percentile — both measured on business hours, both published on the status page.',
tone: 'neutral' as const,
status: '4h median',
},
{
id: 'support-sev1',
label: 'Filed a Sev-1 during close',
detail:
'Between the 28th and the 3rd, anything marked blocking pages the on-call engineer directly rather than entering the queue. This is the one route on the page with a phone attached to it.',
tone: 'warning' as const,
status: 'Paged',
},
{
id: 'general',
label: 'Emailed hello@',
detail:
'Read by four people, none of whom are a shared-inbox rota, which means it is occasionally slower than support and never routed to someone who cannot answer.',
tone: 'neutral' as const,
status: '1–2 days',
},
]
export default function ContactPage02() {
return (
<div className="min-h-screen bg-background text-foreground">
<NavbarSimple brand="Acme" activeLabel="Contact" ctaLabel="Book a call" ctaHref="#contact-page-02-sales" />
<main>
<PersonaCards
heading="What brings you here?"
subheading="Three doors, because a buyer and a customer with a broken import want completely different things and one textarea serves neither well."
personas={DOORS}
/>
<div id="contact-page-02-sales">
<BookingScheduler
heading="Thirty minutes, with an engineer in the room"
description="No discovery form. If it turns out we are wrong for you, we would rather establish that in the first ten minutes than in the fourth call."
durationMinutes={30}
hostTimeZone="Europe/Lisbon"
/>
</div>
<div id="contact-page-02-support">
<SupportTicketForm
heading="Tell us what broke"
intro="The fields below are the ones we would email you for anyway. Filling them in now is what turns a two-day thread into one reply."
submitLabel="File the ticket"
/>
</div>
<FaqObjectionList
heading="What happens after you send it"
intro="Response times as measured, not as aspired to. The slow one is at the bottom and it is labelled."
rows={WHAT_HAPPENS}
/>
</main>
<FooterMinimal brand="Acme" />
</div>
)
}
components/ — each block page has its own copy button.app/contact-page-02.tsx. The imports already point at @/components/…, so they resolve with no edits.The component, its props, the design tokens it expects and the command that installs it — as one prompt. Paste it into Claude, Cursor, v0 or ChatGPT and what they build around it will match the rest of the catalog instead of inventing its own system.
No component library to adopt, no design system to negotiate, no runtime to ship.
Trusted by teams shipping every day
The parts you would otherwise rebuild on every project.
No runtime, no hydration cost, no waterfall. What you paste is what the browser paints.
Copied code lives in your repo. Nothing phones home and nothing breaks when we ship.
Nothing to audit.
Every piece works alone or nested inside the next one up.
Keyboard paths, focus rings and reduced-motion fallbacks included.
Priya R., Staff Engineer
Whichever seat you are in, the work starts further along.
Ship polish without the busywork
Close the gap between the mock and the build
Make an MVP feel like a funded product
Read patterns that are actually in production
No install step, no configuration file, no build plugin.
1import { PricingTiers } from '@/components/pricing-tiers'2import { FaqAccordion } from '@/components/faq-accordion'3 4export default function Page() {5 return (6 <main>7 <PricingTiers />8 <FaqAccordion />9 </main>10 )11}From teams that ship on a deadline.
“We replaced a week of design polish with an afternoon. The parts that used to get cut for time are just there now.”
“Dropped it in on a Friday and shipped Monday. No dependency argument with my team for once.”
“The thing I did not expect: it made our junior engineers faster, because the patterns are readable. They learn from what they paste.”
“Our marketing site went from three weeks to four days. Same designer, same headcount.”
“I stopped keeping a personal snippets file. That file had been following me between jobs for six years.”
Start free. Upgrade when it starts paying for itself.
Everything you need to try it properly.
For working developers shipping real products.
Shared access and billing for a whole team.
Every line, side by side.
| Feature | Free | ProPopular | Team |
|---|---|---|---|
| Projects | 3 | Unlimited | Unlimited |
| Commercial license | Not included | Included | Included |
| Full component library | Not included | Included | Included |
| Figma source files | Not included | Included | Included |
| Seats | 1 | 1 | Up to 10 |
| SSO and audit log | Not included | Not included | Included |
| Support | Community | Priority email | Dedicated |
Everything people ask before getting started.
Yes. Everything here is yours to ship in client work and paid products, with no attribution required.
No. The markup is plain HTML and the styling is utility classes, so it drops into any stack that can render an element.
Copied code is yours — nothing reaches back into your project. Pull a newer version whenever you want it.
There is. A large part of the catalog is free forever; the paid plan unlocks the rest and removes usage limits.
Most of what ships started as someone asking for it.
A complete marketing page in the order that actually converts — hook, proof, substance, price, objections, exit. Twelve blocks, navbar and footer included.
Start free and stay free until it is worth paying for. Every plan includes the full library — the tiers differ on scale and support, never on quality.
Everything you need to try it properly.
For working developers shipping real products.
Shared access and billing for a whole team.
Every line, side by side.
| Feature | Free | ProPopular | Team |
|---|---|---|---|
| Projects | 3 | Unlimited | Unlimited |
| Commercial license | Not included | Included | Included |
| Full component library | Not included | Included | Included |
| Figma source files | Not included | Included | Included |
| Seats | 1 | 1 | Up to 10 |
| SSO and audit log | Not included | Not included | Included |
| Support | Community | Priority email | Dedicated |
The questions people ask right before they buy.
Any time, in both directions. Upgrades take effect immediately and are prorated; downgrades apply at the end of the current period so you keep what you paid for.
Nothing breaks. We email you at 80% and again at 100%, and usage above the limit is billed at the listed overage rate rather than being cut off mid-request.
Within 30 days, in full, no questions asked. After that we will prorate the unused portion of an annual plan if you ask.
Two months free — that is the 20% you see on the toggle. Annual plans are invoiced and can be paid by bank transfer.
Yes to both. Email us with a sentence about what you are building and we will sort it out — we have never said no to a nonprofit.
Start on Free. You will know within a week whether you need more, and upgrading takes one click with no migration.
Create a free accountPlans, a feature matrix and a pricing-specific FAQ written to remove the last purchase objection rather than answer general questions.
Orbit reads the meeting out of the thread and books it, in the gap everyone can actually make. No polls, no back-and-forth, no third message asking about Tuesday.
Free for the first cohort. No card, and no marketing list.
4,820 already waiting
Engineers on the list work at
Not a feature list — the three decisions the product is built around. Everything else follows from them.
Forward the mail and Orbit works out who needs to be there, how long it should run, and which week you actually meant. You confirm; you do not fill anything in.
Focus blocks are real appointments, not a colour. Orbit will move a meeting before it splits an afternoon, and tells the other side why in a sentence you can edit.
Cancel and every hold disappears from every calendar it touched. No orphaned invites, no ghost blocks a month later, no cleanup task nobody owns.
“We ran the beta across a 40-person engineering org for six weeks. The scheduling threads didn't get shorter — they stopped happening.”
Trusted by support teams at
The four we get most, answered the way we would answer them in a reply.
Something we have not covered?
Mail the founders directly. Both of us read it, and one of us replies the same day.
hello@orbit.exampleCohorts open monthly, 120 people each, in signup order. You will get a date rather than a "soon" — and if you are more than one cohort away we say so in the first mail rather than at the end.
The first cohort is free permanently, not free for a trial. After that we expect to charge per seat per month, in the range you would expect for a calendar tool. We are not naming a number we might have to walk back.
Read the events, write the ones you confirm, and nothing else. It is not training data, it is not sold, and it is deleted within 30 days of you leaving. The data-processing agreement is available before you connect anything.
Both at launch. The beta is Google-first because that is what the first cohort ran; Outlook support is in the second. If you are Outlook-only, say so when you sign up and we will slot you accordingly.
120 places a month, in signup order. It takes an email address and about four seconds.
A pre-launch page for a product you cannot buy yet: one email field, scarcity instead of adoption, and no pricing section to be held to later.
Relay takes delivery, retries, signature verification and the dead-letter queue off your critical path. One endpoint in, one verified payload out.
$npm i @relay/sdkDelivering for
4.1 billion events delivered last month, at 99.99% first-attempt success.
Two files. There is no third one where the complexity was hiding.
1import { verify } from '@relay/sdk'2 3export async function POST(req: Request) {4 // Throws on a bad signature or a replayed timestamp, so there is5 // no boolean to forget to check.6 const event = await verify(req, process.env.RELAY_SECRET!)7 8 switch (event.type) {9 case 'invoice.paid':10 await fulfil(event.data.invoiceId)11 break12 case 'invoice.failed':13 await notify(event.data.customerId)14 break15 }16 17 // 200 means "stored". Relay retries anything else for 72 hours.18 return new Response(null, { status: 200 })19}Each of these is a thing teams build in-house, ship, and then own forever.
Delivery
Twelve attempts over 72 hours with exponential backoff, resumed across your deploys rather than lost with the process that scheduled them. Anything that never lands goes to a dead-letter queue you can replay from a dashboard or a single API call.
Verification
Constant-time comparison, a configurable tolerance window, and rejection of anything reused. The failure mode of hand-rolled verification is not an outage — it is silently accepting forged events for a year, which is why this is the section to read twice.
Visibility
The request, the response, the status code and the latency, for every attempt of every event, kept for 30 days. When a customer says the webhook never arrived, this is the difference between an answer and an afternoon.
Direct integrations, not a webhook you have to adapt at both ends.
Payments
Verified passthrough of every Stripe event type.
Source
Repository, org and app events, with installation scoping.
Commerce
Order, fulfilment and inventory topics.
Alerting
Post failures into a channel with the payload attached.
Infrastructure
Forward into a bus with the original signature preserved.
Infrastructure
Produce to a topic with at-least-once semantics.
Move the slider. There is no plan to pick, and the number below is the number on the invoice.
Infrastructure buyers ask about exits before they ask about features. Fair enough.
Install command first, real code before any prose, and a usage calculator instead of tiers — the order a developer actually scans in.
Tempo notices when you are on holiday, when you are ill, and when a streak is about to make you lie to an app. It adjusts instead of nagging.
4.8 out of 5 · 21,400 ratings
4.8out of 5
from 21,400 ratings verified reviews
Four things the app does. Tap through them rather than reading a grid of twelve.
No tiers to compare, no feature held back to make the next one look better.
Tempo Plus
$6.99Save 43% annually
Cancel in two taps from inside the app. No email, no retention offer.
What is included
Everything people ask before getting started.
Three habits, unlimited history, widgets and export. That is the app most people need; Plus exists for the ones tracking a dozen things at once. The free version is not time-limited and never becomes read-only.
Settings, Subscription, Cancel — two taps, inside the app, no chat window and no offer screen. Billing is through the App Store or Play Store, so you can also cancel there and we cannot stop you.
Entirely. Everything is stored on the device and syncs when it can. The app has no loading spinner on launch because it is not waiting for us.
You drop to three active habits and keep every one of your records. Nothing is deleted and nothing is locked — you can export the lot from the free tier at any point.
No. One subscription covers up to six people in your family group, which is how Apple intended it to work and how vanishingly few apps implement it.
…which is why the migration queues behind the reporting job rather than failing outright. The lock is held for as long as the report runs, and on a large table that can be several minutes.
The safe version is to set a lock timeout and accept that the migration may need a second pass, rather than letting it wait indefinitely and block every write behind it.
Store badges above the fold, the App Store rating as the first proof, and a single price — a page with one job, which is the install.
Onboarding, settings, empty states, the error a customer hits at 2am. The unglamorous surfaces where products are actually kept or abandoned.
Fourteen years, sixty-odd products, a handful of them yours
Outcomes
Studios quote their best case and call it a result. These are medians across every engagement of the last three years, including two that were cancelled — which is why they are less flattering than the figures on most studio sites, and why we will show you the working.
Read a full case studyShapes of engagement rather than a capability list. Pick the one that matches where you are, or tell us we have the wrong three.
2 weeks
We use your product the way a new customer does, then hand back a prioritised list of what is costing you activation and what it would take to fix each one. Fixed fee. Roughly a third of these end with us telling you not to hire us.
8–12 weeks
The main engagement. We take one surface — onboarding, the settings area, the billing flow — from research through to built components your engineers can ship, working inside your repo and your design system rather than beside them.
Ongoing
Two or three days a week inside your team for six months or more, for companies at the point where the design work is continuous but a full-time hire is a year away. Same people every week, in your standups.
Fieldwork is six people and stays six people. You meet everyone in week one, and the person in the pitch is the person on the project — a sentence every studio writes and this is the size at which it is true.
Co-founder & CEO
Previously led platform at a payments unicorn; still reviews PRs.
Co-founder & CTO
Wrote the first commit in March 2023 and the incident runbook the week after.
Head of Design
Believes every empty state deserves as much care as the dashboard.
Staff Engineer
Owns the sync engine; measures success in p99s, not features.
Product Manager
Turns forty support tickets a week into a roadmap the team believes in.
Developer Advocate
If you found us through a conference talk in 2026, it was probably his.
“They spent the first fortnight telling us our onboarding problem was actually a pricing problem. Nobody we had paid before was willing to lose the next phase of work by saying that.”
Trusted by support teams at
A paragraph is enough to start. If we are the wrong studio for it we will say so in the reply, and usually name a better one.
A studio site: full-bleed hero, client list, engagements described as engagements, and the actual team — with no pricing, on purpose.
Same dentist every visit, prices on the wall, and an appointment that starts when it says it does. Taking new NHS patients as of this month.
Average wait for a first appointment: 2 days
Most people arrive for one of these four. Prices are on the next section, in full, including the ones nobody likes quoting.
You are overdue and slightly embarrassed about it
You need to be seen today, not in a fortnight
The last time went badly and you have avoided it since
You have been looking at this for a while
Pulled from our Google reviews, with permission and without editing.
“I had not been to a dentist in eleven years and had worked myself into a state about it. They gave me an appointment where they just talked me through it and did nothing else. Went back a fortnight later and got it all done.”
“Rang at 8:40 with a broken filling and was in the chair by 11. No fuss about not being registered, and the price was what they said on the phone.”
“Third generation of my family to use them. My gran went to the current dentist’s grandfather. They are not the cheapest and they have never once tried to sell me something I did not need.”
“The aligners came in about £400 over the first estimate because I needed extra refinements. They flagged it before doing the work rather than on the invoice, which is the only reason this is still five stars.”
“Parking is genuinely a nightmare and they tell you so on the phone rather than letting you find out. Use the Raeburn Place car park.”
“They ran 25 minutes late once in four years and the receptionist rang me before I left the house.”
Including the ones practices normally make you ring for. NHS bands are set nationally and change each April; the private column is ours.
| Feature | NHS Band 1 | NHS Band 2Popular | Private |
|---|---|---|---|
| Examination and diagnosis | £29.00 | Included | From £95 |
| X-rays, where clinically needed | Included | Included | Included |
| Scale and polish | If required | Included | From £75 |
| Fillings | Not included | £78.00 | From £145 |
| Root canal treatment | Not included | £78.00 | From £420 |
| Extraction | Not included | £78.00 | From £180 |
| Emergency appointment | £29.00 | £29.00 | £110 |
| Whitening | Not included | Not included | From £320 |
| Veneers, per tooth | Not included | Not included | From £480 |
| Clear aligners, full course | Not included | Not included | £1,900–£3,400 |
| Written quote before treatment starts | Included | Included | Included |
| 0% finance over 12 months, above £500 | Not included | Not included | Included |
| Free if under 18, pregnant, or on qualifying benefits | Included | Included | Not included |
Visiting us
Honestly: not easily. Raeburn Place has a pay-and-display two minutes away and is your best bet. There is no practice car park and the residents’ bays are enforced. Give yourself ten minutes more than you think.
Ground floor, step-free from the street, and one surgery with a wheelchair-accessible chair. The upstairs surgeries have no lift — tell us when booking and we will put you downstairs.
Under 18, under 19 and in full-time education, pregnant or having had a baby in the last 12 months, or on qualifying benefits. Bring the evidence to the first appointment — claiming without it and being checked later means paying the full charge plus a penalty.
Always, in writing, and we do not begin until you have said yes to it. If something changes mid-treatment we stop and tell you rather than adding it to the bill.
Yes, and a fair number of people do. Fifteen minutes, sitting up, nothing in your mouth. Two of our dentists have specific training in dental anxiety and it is not treated as an unusual request.
Inhalation sedation for most anxious patients and intravenous sedation for longer or more difficult work. Both need a chat first, and IV sedation needs someone to take you home.
Ring the practice number and the message gives you the NHS 24 dental line. For anything involving facial swelling, difficulty swallowing or uncontrolled bleeding, go to A&E rather than waiting for Monday.
A real person reads these during practice hours and answers the same day. If it is urgent, ring instead — we will always pick up faster than we type.
Weekdays 8am–6pm, Saturdays 9am–1pm. Closed Sundays and bank holidays.
A booking widget above the fold, every price published including the awkward ones, and a footer carrying the registrations a regulated trade must show.
Nine thousand independent makers, no dropshippers, no resold factory stock. Every listing names the person who made it and the town they made it in.
What is on Thicket
Counts are live and include only sellers who have shipped an order in the last 90 days — a directory padded with dormant accounts is a directory nobody buys from twice.
Live listings from makers with stock on hand — not a curated editorial selection that is out of stock by the time you click.
For makers
| Metric | Craft fairs and Instagram | After twelve months on Thicket | Change |
|---|---|---|---|
| Orders per month | 11 | 74 | Improved: 6.7× |
| Hours spent selling, not making | 22 hrs | 6 hrs | Improved: −73% |
| Average order value | £34 | £51 | Improved: +50% |
| Commission and fees | £0 + stall hire | 6% + payment fees | Improved: Flat |
| Repeat customers | 9% | 31% | Improved: 3.4× |
Medians across 1,204 sellers who joined in 2024 and were still listing twelve months later. Sellers who left inside the year are excluded, which flatters these numbers — 18% did, and the exit survey mostly says the volume was more than they wanted to make.
Makers
5 out of 5
“I did eleven craft fairs in 2023 and made less than I now make in a good fortnight. The part nobody mentions is the weekends back — I have not stood behind a trestle table in a cold hall since March.”
5 out of 5
“The 6% is real money and I resented it for about two months. Then I worked out what my own website plus the ad spend to make anyone visit it had been costing, and stopped resenting it.”
4 out of 5
“The volume caught me out. I went from making things to running a small factory in about four months, and I had to deliberately raise prices to slow it down. That is a good problem and it is still a problem.”
5 out of 5
“They removed a seller who was reselling factory ceramics as handmade within a day of me reporting it. That is the whole reason I am still here rather than on the bigger one.”
Buying and selling
6% of the item price plus the payment processor’s fee, taken at the point of sale. No listing fee, no monthly fee, no charge for photographs or promotion. If nothing sells, you pay nothing.
Every seller submits work-in-progress photographs from their own workspace before their first listing goes live, and we spot-check them again at random. Reselling factory stock is the one thing that gets an account removed the same day rather than warned.
The maker does, from their own workshop, using their own packaging. We buy the labels in bulk and pass the rate through, which is usually cheaper than a small seller can get alone. Nothing goes through a Thicket warehouse because there is not one.
Report it within 14 days with a photograph and we refund you immediately, then settle it with the maker separately. The buyer is never left waiting on a dispute between two other parties.
Within 14 days for anything not made to order, at your cost for the return postage. Commissioned and personalised pieces are not returnable, and the listing says so before you buy rather than in the confirmation email.
Seven days after the order is marked delivered, into the account on file, with no minimum threshold. There is no rolling reserve and no payout schedule that quietly holds a month of your money.
UK, Ireland and the EU today. We will not open a country until we can settle payouts in the local currency without a conversion fee falling on the maker, which is why the list is short.
Twenty minutes to list your first piece, and nothing to pay until something sells.
Two audiences, one page: a search field and real listings for buyers up top, the seller economics below, and a searchable FAQ because they ask different things.
Ledgerline reconciles every ledger, flags what does not match, and keeps an audit trail your regulator will accept without a follow-up request.
Reconciling for regulated teams at
Four surfaces. Each of them is a spreadsheet somebody currently owns, maintains and worries about.
Every automatic match records the rule that made it and the confidence it had, so a reviewer approves a decision rather than re-doing it. The 4% that cannot be matched arrive in a queue with the near-misses attached, not as an error log.
Immutable, timestamped, and exportable to the format your auditor asks for. It is generated as work happens rather than reconstructed in March.
SOX, ICFR and your own internal controls, mapped to the actual steps in the product, with evidence attached to each one.
A checklist with owners, dependencies and a real critical path, so the month-end that took eleven days does not take eleven days because two people were on holiday.
Written by us, so read it accordingly — but the two rows we lose are real, and we would rather you found them here than in month three.
| Feature | LedgerlinePopular | Legacy ERP module | Spreadsheets |
|---|---|---|---|
| Automatic match rate, out of the box | 96% | 71% | n/a |
| Match reasoning recorded per transaction | Included | Not included | Not included |
| Immutable audit trail | Included | Included | Not included |
| Close checklist with owners and critical path | Included | Not included | Manual |
| SOX / ICFR control mapping | Included | Add-on | Not included |
| SSO, SCIM and scoped roles | Included | Included | Not included |
| Median time to first close | 3 weeks | 9 months | Same day |
| Works offline on a plane | Not included | Not included | Included |
| Already integrated with your ERP | 14 connectors | It is the ERP | n/a |
| Data residency in the EU or UK | Included | Varies | Your laptop |
| Cost of the first year | £48k–£140k | £300k+ | Salaries |
| Nobody has to be trained on it | Not included | Not included | Included |
Customers
Filmed at their offices, unscripted, and each of them was told they could say what did not work. Two of them did.
“We went from eleven days to four. The implementation was harder than they said it would be and I would still do it again tomorrow.”
“The audit trail is the thing. Our auditors used to send forty follow-up requests at year end. Last year they sent four.”
“The match rate was 96% in the demo and about 80% on our data for the first two months, because our data was a mess. It is 95% now. Ask them what your number will really be.”
The vendor-risk question
2019
FoundedBy two people who had run month-end at a bank
First customer that November; still a customer.
2022
ProfitableAnd has been every quarter since
We raised once, in 2020, and have not needed to again.
2024
SOC 2 Type IIPlus ISO 27001 and UK/EU data residency
Reports available under NDA before you sign anything.
2026
412finance teams, 94% renewing at twelve months
The 6% who left mostly got acquired onto a parent’s stack.
Published because a champion who cannot name a figure cannot open a budget conversation, and a deal that never opens is not protected — it is lost.
Up to 15 finance users and 3 entities. Self-serve onboarding.
Up to 60 users and 20 entities, with a named lead for the first close.
From — unlimited entities, your choice of data residency, custom controls.
Prices exclude VAT and are the same whether you find them here or ask a salesperson. Implementation is quoted separately and is typically £12k–£40k, depending on how many systems have to be connected.
Forty-five minutes, with a solutions engineer rather than an account executive, using a sample of your data if you can share one.
Built for a champion assembling an internal case: numbers in the hero, a comparison that concedes two rows, video references, and published prices instead of a sales wall.
Junction normalises 38 CRMs, ledgers and HR systems behind a single schema. Write the integration once; we keep it working when their vendor changes the field names.
Beta means the endpoints exist and the edge cases do not all have tests yet. Planned means it is not built. We would rather lose the signup than the trust.
CRM
Accounts, contacts, opportunities and custom objects.
CRM
Full CRM object model, including associations.
CRM
Deals, persons, organisations and activities.
Ledger
GL, AR/AP, subsidiaries and saved searches.
Ledger
Invoices, bills, contacts and tracking categories.
Ledger
Online only — the desktop editions are not supported.
Ledger
Dimensions, journals and multi-entity consolidation.
HR
Workers, org structure and compensation, read-only.
HR
Employees, time off and custom fields.
HR
Employees, absences and attendance.
CRM
Sales and Business Central. Finance & Ops is planned.
Ledger
Scoped to the finance modules. In build with two design partners.
Ledger
ERP and HCM. Design partners wanted.
HR
Payroll runs, employees and contractor payments.
$ import { Junction } from '@junction/sdk'
const junction = new Junction(process.env.JUNCTION_KEY!)
// Same shape whether the account lives in Salesforce,
// HubSpot or Dynamics — the connector is a parameter,
// not a different code path.
const { data } = await junction.accounts.list({
connection: 'conn_8fK2',
updatedSince: '2026-08-01',
limit: 100,
})
for (const account of data) {
console.log(account.id, account.name, account.owner?.email)
}Every one of these is a thing you would otherwise build once per connector, and then maintain once per connector for as long as the product exists.
Normalisation
An account is an account whether the system underneath calls it a Customer, an Organisation or a Business Partner. Custom fields come through in a typed passthrough rather than being dropped, so the 20% of every integration that is somebody’s bespoke field does not fall out of the abstraction.
Auth
A hosted connection flow your customer completes in your product, with token refresh, revocation handling and the per-vendor quirks absorbed. The one that expires silently after 90 days is handled; you find out from a webhook rather than from a customer.
Change
Upstream schema changes are absorbed behind the normalised model wherever they can be, and announced with a migration window where they cannot. In four years we have passed through two breaking changes to customers, both with ninety days’ notice.
Pricing
A customer’s migration month is fifty times a normal one. Seats make the quiet months feel like a rip-off and the busy ones like a penalty.
One credit is one API call to a connected system — a read, a write or a page of results. Retries after our own failures are not charged.
$99
per month
Enough for about 40 connected customers on a normal month.
Start here$599Save 25%
per month
The tier most teams settle on once they are past a hundred connections.
Choose 2M$2,200Save 45%
per month
Volume pricing below this rate is available above 25M.
Talk to usDated where we can date it, and marked planned rather than “coming soon”. Design partners get the connector free for the first year and a say in the field mapping.
Landed in v3.1, August.
Consolidation dimensions included.
Read-only today; writes with two design partners.
Sales and Business Central are already live.
Polling today on 11 of the 38.
Scoped with two design partners. Not started.
Design partners wanted — talk to us.
Payroll is a different object model; scoping now.
Or at the point where somebody senior asks what happens if this goes away.
The connector names in the hero, a catalogue with honest live/beta/planned status, four SDK languages, credit pricing, and a dated roadmap for everyone who is not on the list.
The skill nobody teaches and every job assumes: getting oriented in fifty thousand lines of someone else's decisions, quickly, without reading all of it.
I had been a developer for six years and had quietly assumed everyone else found new codebases as slow as I did. Week three broke that. I onboarded onto a new team in September and was shipping in four days.
Past students now work at
Written as capabilities rather than topics, because “covers dependency graphs” tells you nothing about whether you could use one on Monday.
Most of any repository is leaves. There is a small core that everything else hangs off, and there are repeatable ways to find it that do not involve reading files in alphabetical order. You will do this on four real open-source projects, timed.
Why is there a second cache here? Why does this module import nothing? Git history, issue threads and the shape of the code itself are evidence, and reading them is a learnable skill rather than seniority.
The goal of orientation is not understanding — it is a correct change. You will practise identifying the smallest safe edit and the blast radius around it, which is a different question from “how does this work”.
The professional version of being lost is a specific list of what you have ruled out and what you would look at next. Half the cohort says this is the part that changed how they are perceived at work.
Two hours of recorded material a week and a live session on Thursdays. Everything is recorded, and nobody has ever been penalised for watching it late.
Not a faceless academy. One person, who answers the forum posts and runs the Thursday sessions live rather than shipping a recording from 2023.
Instructor — and the person who replies to your posts
Fourteen years across four companies, most of it inherited code. Spent three years as the person a large payments company sent into failing projects, which is where this material came from — it is the checklist I built for myself and then found I could teach. I have run this cohort eleven times and rewritten a third of it since the first one.
No upsell tier, no “community edition”, and no separate charge for the live sessions.
Deep Practice — March cohort
£640£160 off until 20 February
Full refund up to the end of week three, no reason needed, no form to fill in — reply to any email from me. 11 of 340 students have taken it. Access does not expire and there is no subscription to cancel.
What is included
Everything people ask before getting started.
Two hours of recorded material and roughly three hours of exercises a week, plus a 90-minute live session on Thursdays at 18:00 UK. Call it six hours. People who treat it as three hours get noticeably less out of it, and I would rather say that than have you find out in week five.
Comfort in at least one language and some experience of a codebase you did not start. Roughly two years in. It is not a beginner course and it is deliberately not an advanced one — the material is about a skill senior developers usually acquired by accident.
TypeScript, Python, Go and one Rust project. You do not need to know all four — that is somewhat the point, since orienting in an unfamiliar language is the harder version of the same skill. Every exercise has a worked solution.
They are recorded and posted the same evening, and the forum is where most of the actual discussion happens anyway. About a third of each cohort is in a timezone that makes 18:00 UK impossible and they do fine.
Usually, yes. There is a one-page justification you can forward and I will invoice a company directly, with a PO number if procurement needs one. Roughly 60% of students go this route.
No. The material, the recordings and the forum stay available, including the updates I make for later cohorts. There is no subscription and nothing to cancel.
Full refund any time up to the end of week three — reply to an email and say so. No form, no exit interview, no attempt to talk you out of it. 11 people out of 340 have done it and I would rather that number were higher than have anyone stay resentful.
…which is why the migration queues behind the reporting job rather than failing outright. The lock is held for as long as the report runs, and on a large table that can be several minutes.
The safe version is to set a lock timeout and accept that the migration may need a second pass, rather than letting it wait indefinitely and block every write behind it.
One person selling one course: a student testimonial as the hero because a course cannot demo, a long instructor section, one price and a refund policy on the page.
Blameless is easy to say and hard to schedule. The template, the timebox, and the one question we ask before anyone opens a dashboard.
Six weeks, zero visual regressions, one codemod we should have written first.
At 1.8B rows the vacuum stopped keeping up. What we tried, in order.
Turns out "Contact us" was doing a lot of damage for a two-word button.
A written design doc predicts on-the-job performance better than a weekend project.
One email when something ships worth reading. No digest padding, no re-sends.
Unsubscribe in one click. We never share your address.
The post grid, a subscribe ask that comes after the proof, and a minimal footer — no hero, because the featured post already is one.
Flags are borrowed complexity — this is what it cost to pay ours back, and the two rules that keep the debt from growing again.
The pull request was titled “remove stale flags, part 1 of 8” and it deleted more code than the previous quarter had added. Our flag service listed 312 active flags; production telemetry showed 41 of them had evaluated to the same value for every user since at least January. The rest were split roughly evenly between experiments nobody remembered starting and kill switches for services we had already decommissioned.
“A feature flag is a loan. The interest is every engineer who has to reason about both branches forever.”
One email per post. Unsubscribe is one click and actually works.
Unsubscribe in one click. We never share your address.
A single post: header, byline and opening prose in one reading column, with the subscribe form after the article — at the only moment it converts.
A small team spread across four time zones, shipping every week since 2023.
Co-founder & CEO
Previously led platform at a payments unicorn; still reviews PRs.
Co-founder & CTO
Wrote the first commit in March 2023 and the incident runbook the week after.
Head of Design
Believes every empty state deserves as much care as the dashboard.
Staff Engineer
Owns the sync engine; measures success in p99s, not features.
Product Manager
Turns forty support tickets a week into a roadmap the team believes in.
Developer Advocate
If you found us through a conference talk in 2026, it was probably his.
We’re hiring across three teams. Every role lists the real salary range — no “competitive”.
Nothing that fits? We read every speculative application — jobs@hoverlab.dev.
The things candidates ask once there's an offer, answered while it can still save you time.
Remote-first across European and American time zones, with a four-hour overlap window. We meet in person twice a year, and the company pays for it.
Yes, for roles marked as sponsoring in the listing. The process runs in parallel with the offer, not after it, so sponsorship never delays a start date.
A conversation, a paid work sample you do on your own time, and a debrief with the people you would sit with. No whiteboard algorithms, no surprise rounds.
Yes. Several people on the team joined through a speculative note that named the problem they wanted to work on. Tell us that, and skip the cover letter.
Start a workspace now and have your first sprint planned before standup tomorrow.
Team first, openings second, then the questions candidates only ask after an offer — answered while they can still change who applies.
Every request to the Acme API is authenticated with a bearer token. This page covers creating a key, storing it safely, and rotating it without downtime.
Acme issues two kinds of keys. Secret keys (prefixed sk_live_) can read and write everything in your project and must only ever live on a server. Publishable keys (prefixed pk_live_) are safe to ship in a browser bundle and can only create client sessions.
Keys are scoped to a project, not to your account. Deleting a project revokes its keys immediately; removing a teammate does not, so treat offboarding as a reason to rotate.
Create a key from the dashboard under Settings → API keys, then pass it as a bearer token on every request:
curl https://api.acme.dev/v1/projects \
-H "Authorization: Bearer $ACME_API_KEY"Note: the full secret is shown once, at creation. Acme stores only a hash, so a lost key cannot be recovered — it can only be rotated.
Rotation is overlap, not replacement: create the new key, deploy it everywhere, and only then revoke the old one. Both keys stay valid during the window, so a slow rollout never turns into an outage.
The site navbar over the three-column docs frame. In your project this is one catch-all route — the slug picks the article, the frame never changes.
StatusScheduled maintenance is in progress — dashboards and the CLI are unavailable.Follow the status page
Most of what reaches our inbox is answered on this page in about forty seconds. The four below are what people ask for most.
Ordered by how often they arrive, not by how interesting they are.
One person reads every one of these. Include what you expected, what happened, and the workspace name — that is the difference between an answer and a first reply asking for details.
Search first, the six answers that absorb the most contact volume under it, and the ticket form in plain sight rather than behind a modal — a support page measured in tickets not filed.
Every release, in plain language.
One email per release — what changed, what might break, and what to try first.
Unsubscribe in one click. We never share your address.
The release timeline with the site chrome kept on, and the one subscribe form on the site that is not a detour — "tell me when this page changes" is exactly what it promises.
Everything you need to launch — auth, billing, analytics and a dashboard your customers will actually understand.
Security
A wall of certification logos answers none of these. Each figure names its scope, because a control that covers one environment and not the other is the thing a reviewer is looking for.
Every store, including backups and the search index.
Critical CVEs, from advisory to production, trailing year.
EU, US, UK and AU. Pinned per workspace, never replicated out.
All production access, logged and exportable.
Measured, not claimed
Every number below names the conditions it was taken under. A benchmark without its method is a marketing figure wearing a lab coat.
p50 over 10,000 invocations, Frankfurt, empty cache.
Single node, 4 vCPU, read-only workload.
One million rows, measured wall-clock end to end.
Peak RSS under the throughput run above.
These four arrive in every procurement review. Answering them on a public page rather than in a questionnaire is worth about two weeks of a sales cycle.
Three fields, because a fourteen-field form is a way of asking for the meeting twice. You get a reply inside one working day.
Page content sits here. The bar rides above it once the reader is past the threshold, and the spacer at the end of the document keeps the last element reachable.
Start with the free tier
Every component readable and installable. A licence only when you ship it commercially.
The page a security questionnaire arrives from, written to be forwarded rather than to persuade: certifications early, benchmarks with a denominator, objections in a reviewer’s own words, and a route to a human.
Every event, session and conversion in one place — with the answer already on screen instead of three filters away.
Switching
Every migration page promises everything comes across. Something never does, and finding out which thing after the cutover is how a switch becomes a rollback.
Integrations
A grid of thirty logos implies thirty equivalent integrations. Usually four are deep, six are one-way, and the rest are a Zapier entry. Saying which is which costs one sentence each.
Results
Most readers skip the quotes. What they do not skip is a number with a time period attached to it, and every figure here names the company it came from and how long it took.
Median first-response time at Northwind, over one quarter.
Time to a customer's first live workspace, at Arden.
Hours returned to one finance team of three, measured before and after.
Of teams past 90 days, over the last twelve months.
Most FAQs answer what the company wishes it were asked. These are the four that actually decide it, including the one where the honest answer is no.
Thirty minutes, screen-shared, against something of yours rather than a seeded demo account. If you would rather not talk to anyone, the free tier is the same product.
The landing page for a reader whose current tool already works: the migration mechanism second rather than buried, integrations stated at depth, and deliberately no pricing section.
Every product makes a claim about how its user should think. Most make it by accident. A short case for treating layout as a position rather than a container.
Monthly recurring revenue
vs. previous 30 days
Active workspaces
vs. previous 30 days
Churn
Lower is better
Median response time
vs. previous 30 days
/v1/projects/{project_id}/deploymentsList the deployments for a project, newest first.
| Name | Type | Required | Description |
|---|---|---|---|
| project_id | string | Required | The project to list deployments for. Passed in the path. |
| status | string | Optional | Filter by state: building, ready or failed. |
| limit | integer | Optional | Page size, 1–100. Defaults to 20. |
| cursor | string | Optional | Opaque cursor from a previous page’s next_cursor. |
curl "https://api.acme.dev/v1/projects/prj_8kq2/deployments?limit=2" \
-H "Authorization: Bearer $ACME_API_KEY"{
"data": [
{
"id": "dep_9f2c1a",
"status": "ready",
"branch": "main",
"created_at": "2026-08-12T09:41:00Z"
},
{
"id": "dep_8e1b0d",
"status": "failed",
"branch": "fix/session-ttl",
"created_at": "2026-08-11T17:03:12Z"
}
],
"next_cursor": "dep_7d0a9c"
}Everyone who joins gets a position and a link. Three people through your link moves you up a hundred places, which is the only honest way a waitlist is worth sharing.
A product announcement shaped as writing rather than a landing page — serif headline, real byline, three pieces of evidence, and an endpoint card that doubles as documentation for the week before the docs exist.
The whole library, source included, with a licence that does not care how many client projects you ship this year.
Why this price
A price defends itself against the alternative, not against a competitor's price. The alternative here is engineering time, so that is the unit.
Reviews
An average with nothing beside it is unreadable: 4.6 from nine reviews and 4.6 from nine hundred are different facts. These are what make the first number mean something.
Across every review, including the ones left after a return.
Unfiltered. Nothing is hidden for being low.
Matched to an order. The other 9% are labelled as such.
Shown, and sorted to the top when you filter by lowest.
Thirty minutes with an engineer, not a sales team. Bring your codebase.
Essential cookies keep you signed in. The rest stay off until you turn them on, and you can change your mind at any time. Privacy policy
One thing, one price, named above the fold — for a course, a consultation or a one-time licence, where there is nothing to compare against and hiding the number answers the only question last.
About Acme
Every finance team we knew was reconciling two systems by hand on the last Friday of the month. The tools that claimed to fix it assumed you had an engineer spare. We did not, and neither did they — so the product’s first constraint was that it had to work for someone with no engineer, and it still is.
Read the engineering notesHow we got here
2019
1customer
A script on one laptop, solving the founders’ own reconciliation problem. The first customer was the accountant who saw it over a shoulder.
2021
6people
Support and engineering hired in the same month — answering the questions and fixing what causes them is one job split across two desks.
2023
3integrations built by customers
All three were written against a private endpoint we had not documented. Publishing the API was mostly writing it down and apologising.
2025
0rounds raised
SOC 2 Type II landed the same year, paid for out of revenue. That is the part we are prouder of.
Support is not a tier-one queue — the person who answers is the person who can change the thing you are asking about.
Co-founder & CEO
Previously led platform at a payments unicorn; still reviews PRs.
Co-founder & CTO
Wrote the first commit in March 2023 and the incident runbook the week after.
Head of Design
Believes every empty state deserves as much care as the dashboard.
Staff Engineer
Owns the sync engine; measures success in p99s, not features.
Product Manager
Turns forty support tickets a week into a roadmap the team believes in.
Developer Advocate
If you found us through a conference talk in 2026, it was probably his.
Reconciling with Acme since 2021
Ask for a reference. We will give you a customer in your industry who has been with us long enough to have complaints.
No hero — a reader who clicked "About" has already read the pitch and is checking whether the company is real, so the page opens with numbers and a timeline instead of a headline.
The company is small enough that the person who answers your question is usually the person who built the thing you are asking about. That is a deliberate ceiling, not a stage we are growing out of.
Co-founder & CEO
Previously led platform at a payments unicorn; still reviews PRs.
Co-founder & CTO
Wrote the first commit in March 2023 and the incident runbook the week after.
Head of Design
Believes every empty state deserves as much care as the dashboard.
Staff Engineer
Owns the sync engine; measures success in p99s, not features.
Product Manager
Turns forty support tickets a week into a roadmap the team believes in.
Developer Advocate
If you found us through a conference talk in 2026, it was probably his.
Three commitments with a shape you could hold us to. Everything else is a poster.
Support
Every engineer does one support day a fortnight. It is the cheapest way we have found to keep the bug that annoys forty people from losing to the feature that impresses one.
Decisions
Anything that changes the product or the roadmap starts as a document with the alternatives in it. Meetings are for disagreeing with the document, not for hearing it read out.
Hours
Nine time zones only works if the four hours everyone shares are spent on the things that genuinely need a conversation. Everything else is a document and a day to read it.
Openings are on the careers page. If none of them fit, the speculative note is read by a person and answered either way.
Who we are, as distinct from who we are hiring: faces, the shape of the company in four numbers, and three working commitments that could actually be falsified.
Questions
There is a free tier rather than a trial: it does not expire, it is capped at one workspace and 500 transactions a month, and it never asks for a card. Most single-person users stay on it permanently.
Yes, as CSV or JSON, from Settings → Data, without asking us. The export includes historical records, attachments and the audit log. It keeps working for 90 days after cancellation.
In the region chosen when the workspace is created — eu-west, us-east or ap-southeast — and it does not move. Backups stay in the same region.
No, and it is not a setting you have to find and turn off. Customer content is never used to train anything, by us or by a subprocessor; the DPA says so in a clause you can hold us to.
Nothing stops working. You get an email at 80% and another at 100%, and overage bills at the per-unit rate on the pricing page. We do not lock an account for going over.
A public REST API on every plan, free tier included, with no separate key purchase. Rate limits differ by plan and are published in the docs rather than discovered.
Everything else
Yes, both directions, and the change is prorated to the day. Downgrades take effect immediately rather than at renewal, so you are not paying for a tier you have stopped using.
On any plan, with a 15% discount and net-30 terms. Purchase orders and bank transfer are fine; a procurement portal is fine too, though it will be slower than either of us would like.
Prices are excluding VAT. It is added at checkout based on the billing country, and a valid EU VAT number reverse-charges it.
Type II, audited annually, and the report is available under NDA within a day of asking. The penetration-test summary is available without one.
SAML and OIDC are on Business and above. They are not priced as a separate security add-on, which is a practice we have opinions about.
Thirty days in soft delete, then purged from primaries and from backups within a further sixty. Immediate hard delete is available on request for anything with a legal reason behind it.
Twenty minutes to a working workspace if your data is in a supported system, and about a day if it is in spreadsheets. The import step is the whole cost; everything after it is configuration you can change later.
Self-serve importers cover the six commonest sources. Above 100,000 records, a person on our side runs the migration with you — included, not a professional-services line item.
That is the recommended way. Import into a sandbox workspace, which is free and disposable, and throw it away if the answer is no.
…which is why the migration queues behind the reporting job rather than failing outright. The lock is held for as long as the report runs, and on a large table that can be several minutes.
The safe version is to set a lock timeout and accept that the migration may need a second pass, rather than letting it wait indefinitely and block every write behind it.
Search and browse, in that order, because the two halves serve opposite visitors — one arrives from a search engine with a phrase, the other from the navbar with none.
A six-person finance team, four years of history in two systems, and a close that had been slipping later every quarter for two years.
The pull request was titled “remove stale flags, part 1 of 8” and it deleted more code than the previous quarter had added. Our flag service listed 312 active flags; production telemetry showed 41 of them had evaluated to the same value for every user since at least January. The rest were split roughly evenly between experiments nobody remembered starting and kill switches for services we had already decommissioned.
“A feature flag is a loan. The interest is every engineer who has to reason about both branches forever.”
Results
| Metric | Jan–Jun 2025 | Jul–Dec 2025 | Change |
|---|---|---|---|
| Days to close the month | 9.5 | 3.0 | Improved: −68% |
| Entries reconciled by hand | 4,200 | 310 | Improved: −93% |
| Reopened periods per quarter | 2.3 | 0.4 | Improved: −83% |
| Finance headcount | 6 | 6 | Improved: unchanged |
Measured from Halyard’s own close calendar, not from our telemetry. Headcount is in the table because it did not change — the saving was in the hours, and nobody lost a job over it.
Written up in the order it happened, including the part that was not planned.
Weeks 1–2
The rule everywhere: no new process until the old data is in and reconciles to the same totals. It caught a duplicate-supplier problem that had been quietly inflating one cost centre since 2022.
Weeks 3–5
Not all of it. The long tail of exceptions stayed manual on purpose — the team wanted to keep seeing them, and automating a rule you cannot explain to an auditor is a liability rather than a saving.
Week 6 onward
The year-end request list went from a fortnight of screenshots to a login. This was not in the original scope and turned out to be the change the CFO mentions first.
“I had budgeted for a new hire to survive the close. We did not need one, and I would rather have the three days back than the headcount.”
Trusted by support teams at
Send us the shape of it — the systems, the volume and the deadline — and we will tell you honestly whether six weeks is realistic.
The numbers above the story, which is the opposite of how these are usually written: the colleague this link gets forwarded to needs the result in the first screen.
4.7out of 5
from 612 verified reviews
Nine and a half days down to three, 93% less manual matching, and no new hire — across four years of history in two systems that had never agreed with each other.
Read-only auditor access and an immutable log turned the year-end request list from eleven days of screenshots into a two-day review.
Six matching rules covered 80% of the volume. The rest stayed manual deliberately, because a rule nobody can explain to an auditor is a liability.
Each site had its own spreadsheet and its own deadline. Consolidation took five weeks and found £41,000 of duplicated supplier charges on the way.
The interesting part is what did not change: the same six people, the same close process, and a reporting cadence four times faster.
Three funders, three formats, one ledger. The reconciliation that used to be a person’s whole February is now a scheduled export.
Another 1,400 teams who have not written one up
Ask for a reference in your industry instead. We will introduce you to a customer who has been with us long enough to have complaints as well as compliments.
Excerpts that lead with the outcome rather than the customer’s biography, filterable by industry — because the reader is scanning for a problem that resembles their own.
Named by the situation you are in rather than by how much they cost, because the wrong engagement at the right price is still wrong.
You think something is wrong and cannot prove it
You know what to do and have nobody free to do it
You need the capability, not the deliverable
The three things clients ask about before they ask about price.
Always first
The repository, the incident history, the last two post-mortems and an hour with whoever has been there longest. Every engagement that has gone badly for us skipped this to start faster.
How we bill
Hourly billing makes our incentive the opposite of yours on the only question that matters — how long this takes. The phase price is agreed before the phase starts and does not move unless the scope does, in writing.
What you keep
Code, infrastructure, documents and the decision log with the alternatives we rejected and why. A handover that is only the code leaves the next person re-deciding everything from scratch.
Ranges, with the variable named. If a number here is not the number you would be quoted, the difference is in the row underneath it.
| Feature | Audit | BuildPopular | Embed |
|---|---|---|---|
| Typical duration | 2 weeks | 6–12 weeks | 3 months, rolling |
| Fee | £9k fixed | £12–18k per phase | £22k per month |
| What moves the number | Nothing — it is fixed | Source systems in scope | People embedded |
| Written report | Included | Included | Included |
| We write production code | Not included | Included | Included |
| Your team pairs with ours | Not included | Not included | Included |
| Handover runbook | Not included | Included | Included |
| Notice to stop | n/a | End of phase | 30 days |
The four that come up on nearly every first call.
Usually yes. Our standard terms exist so a small engagement does not need a legal review; if you have your own, send it and we will redline rather than negotiate from scratch.
That is a normal outcome and the fee is structured for it. Around a third of audits end with a report that the client’s own team then acts on, which is a good result and we would rather have the reference.
The people you meet on the call. We do not have a bench of juniors behind a senior pitch team, which is also why we can only run four engagements at a time.
Stop at the end of the current phase and pay only for that phase. There is no termination fee and no minimum term on Audit or Build.
Bring the problem rather than the requirements. If we are the wrong people for it, we will say so on the call and suggest who is not.
For a business that sells work rather than licences: three engagements named by situation, and prices in a comparison table rather than a pricing card with a monthly toggle that does not apply.
Nine live connections and two in beta, all built on the same public API you can use yourself. Nothing here is a partner-tier endpoint.
Live means supported and stable. Beta means supported and still moving. Planned means not yet built, and it is on this page rather than hidden so you can plan around it.
Accounting
Two-way sync of ledgers and cost centres, reconciled hourly.
Logistics
Shipment and duty records imported nightly, matched to invoices.
Payments
Payment runs pushed for approval and pulled back as settled.
HR
Employee and cost-centre directory as the source of truth for approvals.
Cloud
Infrastructure spend broken out per team and posted as journal lines.
SaaS spend
Design-tool seat counts reconciled against the licence ledger.
Data
Warehouse export for teams that would rather model it themselves.
Manufacturing
Works-order costs matched to purchase invoices at line level.
Reporting
Carbon accounting fed from the same supplier records as the ledger.
By the job
The same set, arranged by the reconciliation it removes rather than by vendor category.
Three questions every integration page raises and most of them dodge.
It works, it is supported, and the field mapping may still change with notice. It is not a waiting list — you can turn a beta integration on today, and roughly a third of customers run at least one.
Yes. Everything on this page uses the same public REST API and webhooks that you have, with no private endpoints and no partner tier. If ours does not fit, yours will not be second-class.
Ask. We build the ones that more than five customers request, in request order, and the list of what has been asked for is public rather than a thing you have to guess at.
Every connection with its real status on the card — live, beta or planned — because a directory that hides which is which is discovered at exactly the wrong moment.
Posted journal lines out every hour, chart of accounts in every night, and a review queue instead of a silent overwrite when the two disagree.
The pull request was titled “remove stale flags, part 1 of 8” and it deleted more code than the previous quarter had added. Our flag service listed 312 active flags; production telemetry showed 41 of them had evaluated to the same value for every user since at least January. The rest were split roughly evenly between experiments nobody remembered starting and kill switches for services we had already decommissioned.
“A feature flag is a loan. The interest is every engineer who has to reason about both branches forever.”
The four questions an integration page usually leaves to a support ticket.
Acme → Quartzly
Every posted line is pushed with its cost centre, tax code and source reference. Nothing is pushed until it is posted, so a draft in Acme never appears in your ledger.
Quartzly → Acme
Quartzly is the source of truth for structure. A cost centre renamed there is renamed here overnight, and one deleted there is archived here rather than deleted — because deleting it would orphan history.
On conflict
If the same period is edited in both systems, Quartzly’s version is kept and the Acme change is held in a review queue rather than discarded. Silent last-write-wins is how reconciliations become unexplainable.
Two API calls, or four clicks in the UI. Both are shown because the person evaluating this is usually not the person who will run it.
1# 1. Create the connection (once, from your terminal or the UI)2curl -X POST https://api.example.com/v1/connections \3 -H "Authorization: Bearer $ACME_TOKEN" \4 -H "Content-Type: application/json" \5 -d '{6 "provider": "quartzly",7 "workspace": "ws_8f21",8 "scopes": ["ledger.write", "coa.read"]9 }'10 11# 2. Follow the returned authorize_url in a browser.12# 3. That is the whole of it. The first sync starts within a minute./v1/connectionsCreates the connection and returns an authorize_url. Idempotent on provider + workspace, so retrying is safe.
| Name | Type | Required | Description |
|---|---|---|---|
| provider | string | Required | Always "quartzly" for this connection. |
| workspace | string | Required | The Acme workspace to bind. One connection per workspace. |
| scopes | string[] | Required | Minimum is ledger.write and coa.read. Requesting more than you use is refused at the authorize step. |
| sync_from | ISO date | Optional | Backfill start. Defaults to the first day of the current financial year. |
curl "https://api.acme.dev/v1/projects/prj_8kq2/deployments?limit=2" \
-H "Authorization: Bearer $ACME_API_KEY"{
"data": [
{
"id": "dep_9f2c1a",
"status": "ready",
"branch": "main",
"created_at": "2026-08-12T09:41:00Z"
},
{
"id": "dep_8e1b0d",
"status": "failed",
"branch": "fix/session-ttl",
"created_at": "2026-08-11T17:03:12Z"
}
],
"next_cursor": "dep_7d0a9c"
}What support is asked about it most.
For the initial authorisation, yes. After that the connection runs under a service identity, so it survives the admin leaving — which is the failure that takes a month to notice.
Nothing, and it does not count against your plan volume. Historical records are read-only on our side and we would rather you imported everything.
Yes. Push-only is a supported configuration for teams whose chart of accounts is managed somewhere else entirely.
Lines queue and retry for 24 hours, then appear in the sync dashboard as held with the reason. Nothing is dropped, and nothing is posted twice — every push carries an idempotency key.
You will need a Quartzly admin for the first step and nothing after that. Backfill is free and does not count against plan volume.
One connection, answering the four questions an integration page usually leaves to a support ticket: which records move, which way, how often, and what happens on conflict.
Checked against published pricing and documentation on 9 January 2026. Rows where we lose are in the table, in the same type size as the rest.
| Feature | AcmePopular | Meridia | Obsidia |
|---|---|---|---|
| Free tier that does not expire | Included | Not included | Not included |
| Public REST API on every plan | Included | Not included | Included |
| SSO without an enterprise contract | Included | Not included | Not included |
| Self-serve export of everything | Included | Included | Not included |
| Data residency choice | 3 regions | 1 region | 6 regions |
| Published rate limits | Included | Not included | Not included |
| Native mobile apps | Not included | Included | Included |
| Offline desktop client | Not included | Included | Not included |
| Approval workflows | Basic | Advanced | Advanced |
| Implementation partners | 4 | 140+ | 60+ |
| Entry price, per month | £0 | £49 | £90 |
| Minimum contract | None | 12 months | 12 months |
Three situations where one of the others is the better answer, written by us, on our own site.
Choose Meridia if
Conditional, multi-branch approval routing is their strongest feature and is better than ours by a distance. If a purchase order takes four different paths depending on amount, department and supplier risk, buy theirs.
Choose Obsidia if
Sixty-plus implementation partners against our four. For a regulated rollout across twelve subsidiaries with local statutory requirements, a partner network is worth more than anything on our feature list.
Choose neither if
Under about 500 transactions a month with one person doing the close, none of these three will pay for themselves. Come back when the close takes more than a day or when a second person has to touch it.
4.7out of 5
from 612 verified reviews
Questions a comparison page ought to answer about itself.
We did, on 9 January 2026, from each vendor’s public pricing and documentation on that date. Nothing here comes from a private conversation, and nothing is inferred from a sales call.
Tell us and we will fix it, including when the fix makes us look worse. Every row carries the date it was last checked in the published source data.
Against the cheapest tier of each product that includes the feature. Comparing our entry plan with a competitor’s top plan is the standard trick and produces a table that means nothing.
From either, and it is included rather than a services line item. The importers were built because that is where most of our customers come from.
Import into a sandbox workspace, run one real close in both, and keep whichever wins. The sandbox is free and disposable.
The competitor-name landing page, with a section naming where each rival is the better buy — which is what makes the other forty rows believable.
Planned items carry no date, because a quarter against something unstarted is a number invented for this page. In-progress items carry one because by then it is worth something.
Shipped in December after one tenant’s 4.1M-row export starved the shared pool.
Limits are in the docs rather than discovered at 429.
Came out of a customer engagement and turned out to be the feature CFOs mention first.
Line-level matching of works-order costs to purchase invoices. The most-requested connector by a distance.
Multi-branch chains by amount, department and supplier risk. Currently our weakest area against Meridia, and we would rather say so than fudge it.
For the finance teams whose downstream system still reads a folder at 6am.
Same supplier ledger, second set of reports. Scoped, not started.
Requested often and honestly not close. It is on the board so nobody buys on the assumption it is coming this year.
Here so the shipped column means something. Every entry links to the release notes and, where there was one, the incident that caused it.
One email per release, which is roughly monthly. No other use of the address and one click to stop.
Monthly-ish. Unsubscribe in one click.
Board plus changelog, because a roadmap alone is a promise — the last three releases underneath are what turn the shipped column into something with dates attached.
A real import against a real dataset with real faults in it, then twenty minutes of matching rules and twenty of unfiltered questions. Recording sent to everyone who registers.
Average wait for a first appointment: 2 days
So you can decide whether it is worth yours before you give us an email address.
0–18 min
Live, against a real dataset with real problems in it — including the duplicate-supplier fault we hit at Halyard. The import is the whole cost of a migration and it is where every demo stops short.
18–38 min
Six rules covering 80% of volume, and the argument for leaving the tail manual. We will write one badly first, then fix it, because the failure is more instructive than the finished version.
38–60 min
Not a curated Q&A. Everything asked in the chat gets answered on the call or in a follow-up email within two working days, including the ones about competitors.
Both of them do customer migrations for a living and neither works in marketing, which is why the demo is allowed to fail on stage.
Co-founder & CEO
Previously led platform at a payments unicorn; still reviews PRs.
Co-founder & CTO
Wrote the first commit in March 2023 and the incident runbook the week after.
Head of Design
Believes every empty state deserves as much care as the dashboard.
Staff Engineer
Owns the sync engine; measures success in p99s, not features.
Product Manager
Turns forty support tickets a week into a roadmap the team believes in.
Developer Advocate
If you found us through a conference talk in 2026, it was probably his.
Including the one that stops most people, which is the recording.
Yes, and it is sent to everyone who registers whether or not they attend — no separate "watch on demand" form afterwards. Register even if Thursday is already lost.
Two-thirds of it is the product doing a real migration, so honestly yes — but against a messy dataset rather than a prepared one, and the failures stay in. There is no slide deck.
No. You get the recording and one email asking whether it was useful. If you want a conversation there is a link in it, and if you do not, nothing else happens.
Forward the confirmation — the link is not personalised. Registering the whole team is fine too and costs us nothing.
One email when a workshop is scheduled, roughly every six weeks. Nothing else is sent to this address.
Recording sent to everyone who registers, attending or not.
Registration at the top and again at the bottom, with an agenda timed by the minute — so the reader knows what they are getting before handing over an address.
Acme is being built for finance teams reconciling two systems by hand. Early access opens in March, in order of joining, and there is no charge during it.
No other email goes to this address. One click to leave.
2,140 already waiting
Including the third row, which is what it will not do yet.
The problem
Two systems that have never agreed, a spreadsheet holding them together, and one person who understands the spreadsheet. That is the situation this is being built for.
The shape
Nothing is automated until four years of history is in and reconciles to the same totals. It is slower to start and it is the only order that finds the faults already in your data.
The honest part
No mobile app, no conditional approval routing, and two of the six importers are not written yet. Listing this now is cheaper for both of us than discovering it in March.
Invitations go out in the order people joined. No countdown clock on this page, because a clock at zero is worse than no clock at all.
2,140 people ahead of you, and that number is real.
The shortest page in the catalog, and it still says what the product does — including what it will not do at launch. No countdown, because a clock at zero is worse than no clock.
The forum has been running since 2019 with the same searchable archive. Staff post in the same threads as everyone else, and the critical posts stay up.
Quoted with permission and not edited for length, including the four-star one.
“I asked a question at 11pm expecting nothing until Monday. Two other users had it solved before anyone from Acme woke up, and one of them had hit exactly the same importer bug.”
“The rule library that members share is genuinely the reason we stayed. Half our matching rules started as somebody else’s post.”
“Staff post in the same threads as everyone else and do not delete the critical ones. That is rarer than it should be and it is why the archive is worth searching.”
Local and topic groups
Organised by members, listed here, not run by our marketing team. If there is none near you, we will pay for the first room.
The monthly digest is the ten threads worth reading, as an email. No account, no app, and it is the same content.
Monthly. One click to stop.
Member counts and reply times on every door, because "join our community" with no number reads as an invitation into an empty room — plus a digest for people who will not install another chat app.
Move the slider to the number of paying accounts you think you would send in a year. The figure is twelve months of commission at the current average account value.
A programme that makes you apply to find out the rate is a programme whose rate is bad.
Attribution
If a reader finds you in March and buys in June, you are paid. We also do not run paid search on our own brand terms in a way that outbids partners, which is the practice that quietly kills most programmes.
What is not allowed
No bidding on our trademarks, no coupon-injection extensions, and no unmarked reviews. Everything else — comparison posts that rank us second, critical reviews, honest lists — is fine and we would rather have it.
When it stops
Commission runs twelve months from each referred account’s first payment. Leaving the programme does not cancel commission already accruing — you keep the tail on everyone already referred.
Including the two that decide most disputes: attribution and what counts as qualified.
No minimum. The smallest active partner sends about four accounts a year and is paid for all four. There is no tier system and no volume bonus, so the rate is the same for everyone.
Yes, and it will not affect your status. A comparison that puts us second is more useful to your readers than one that does not, and a programme that punishes honesty produces reviews nobody believes.
A paid account that stays past the 60-day refund window. Free-tier signups do not pay out, which is stated here rather than discovered at the first payout.
A dashboard with clicks, signups, conversions and pending commission, updated hourly. Referral-level detail is anonymised — you see that an account converted, not who they are.
Terms before the application, and a calculator so the reader sees a number rather than doing arithmetic with an ARPU they do not know.
4.7out of 5
from 612 verified reviews
On camera
Filmed on their own machines, in one take, with no agency involved. That is why the audio is what it is.
“I had budgeted for a new hire to survive the close. We did not need one.”
“Nineteen sites on one calendar for the first time, and it found £41,000 on the way.”
“The auditors got a login instead of a fortnight of screenshots.”
Quoted with permission and not edited for length. The four-star ones are in here too, because a wall of nothing but fives is a wall nobody believes.
“Nine and a half days to three. The part I did not expect was that the exceptions got easier to explain, not just fewer.”
“The importer choked twice on our data. Both times it told us exactly which rows and why, which is more than the last three tools managed between them.”
“Support is engineers on a rota. The bug I reported on Tuesday shipped on Friday.”
“Approval routing is genuinely weaker than what we came from and they told us so on the sales call. We bought it anyway for the reconciliation and the honesty.”
“Read-only auditor access turned year-end from eleven days into two.”
“Exported everything to CSV on day three to prove we could leave. That we could is why we stayed.”
At greater length
5 out of 5
“We ran both systems in parallel for a full quarter because I did not believe the numbers. They matched every month, including the one where we found a duplicate supplier that had been inflating a cost centre since 2022 — which was our fault, not either tool’s, and only one of them surfaced it.”
5 out of 5
“The thing I tell people is that it is slower to start than it looks. They insist on importing four years of history and reconciling it before any rule runs, and I resented that for about a fortnight. Then it found the fault and I stopped resenting it.”
4 out of 5
“Not everything is better. Our approval chains were more sophisticated in the old system and we have had to simplify them, which was a real cost and one I would weigh again. The close going from nine days to three outweighed it, but it was not free.”
And 1,400 teams who have never said a word about us in public
Third-party scores first, because they are the only part of the page the company does not control — and the four-star quotes stay in, because a wall of nothing but fives reads as filtered.
This is the whole product. There is no fifth screen behind a sales call, and nothing here is a mock-up of something unbuilt.
One paragraph per screen, including the reason it is shaped that way.
One number — days to close — and the three things standing between you and it. Everything else is a click away rather than on screen, because a dashboard that shows everything is a dashboard nobody reads on the ninth day.
Written as sentences, not as a query builder. If you cannot read a rule aloud to an auditor, it should not be running unattended.
Where the 20% we deliberately do not automate ends up. Sorted by how much money is at stake, not by date.
Read-only, immutable, and shareable with someone who will never have an account. Built for one customer’s year-end and now the feature CFOs mention first.
“The exception queue sorted by money rather than by date changed how we work more than any of the automation did.”
Trusted by support teams at
Import your own data into a free sandbox workspace and look at your own numbers in these four screens instead of ours.
A switcher rather than an infinite grid: four named views, one visible at a time, so the page weighs one image on load instead of forty.
Product design, design systems and the occasional identity, for companies whose software is the job rather than the marketing. Four projects at a time, which is a ceiling and not a stage.
Four steps down to two, on a deadline that could not move because the marketing spend was already booked. The interesting part is what we cut to make it.
Shared primitives, separate tokens, and a governance model that survived the two teams disagreeing about buttons for a year.
Ninety years of letterhead, no logo anyone could find the original of. We redrew it from a 1962 casting rather than starting again.
Shared structure, per-property photography and typography. The constraint was that no two could be mistaken for each other.
Most of the eleven existed to collect data that was already available from the integration. The work was mostly deletion.
One page, four numbers, and a method appendix nobody has to open. The previous version was fifty-two pages and was not read.
Who the work was for
Tell us the problem and the deadline. If we cannot take it we will say so in the first reply and name someone who can.
A studio’s list of work, with excerpts that name the outcome and the constraint rather than the aesthetic — a contents page, not a landing page.
Ten years on platform and performance. I am at my best on a team that has outgrown its first architecture and still has to ship every week.
$whoami --longCode I wrote is in production at
The cache was hiding a query plan that went quadratic above 400 line items. Invalidation cost more than the reads saved, so the fix was a delete and one index. Six weeks, no downtime, no rewrite.
The renewal was $310k and the notice period was ninety days. Full-text search in the database we already ran, shipped behind a shadow-read comparison nobody could argue with.
Two thirds of our alerts had never once been acted on. The work was an audit and an argument, not a tool — the tooling never was the problem.
Sixty clinics, a public-sector buyer and WCAG 2.1 AA written into procurement. What made it pass was testing with a keyboard in CI, not a remediation sprint at the end.
Three consumers, one scheduling service, and no shared definition of the payload. Contract tests in both directions, and the class of incident stopped.
Written as the second engineer at a company that survived. Boring on purpose: idempotency keys, a ledger, and no clever reconciliation.
A fixed-window rate limiter and the one test that matters. Thirty lines is enough to tell whether you want to read the other thirty thousand.
1// Limiter is a fixed-window counter kept deliberately dull.2//3// A sliding log is more accurate and costs a sorted set per key; at our4// traffic the extra accuracy changed nobody's experience and the memory5// bill was real. Windows are aligned to the clock so two processes agree6// without coordinating.7type Limiter struct {8 redis *redis.Client9 limit int10 window time.Duration11}12 13func (l *Limiter) Allow(ctx context.Context, key string) (bool, error) {14 // Bucket in the key, not in a value: expiry then cleans up for us and15 // there is no sweeper to get wrong.16 bucket := time.Now().Truncate(l.window).Unix()17 k := fmt.Sprintf("rl:%s:%d", key, bucket)18 19 n, err := l.redis.Incr(ctx, k).Result()20 if err != nil {21 // Fail open. A limiter that takes the site down when Redis blips22 // has caused more outages than the abuse it was added to stop.23 return true, err24 }25 if n == 1 {26 l.redis.Expire(ctx, k, l.window)27 }28 return int(n) <= l.limit, nil29}The accounts are the real portfolio — this page is just the index.
Everything above that can be public is here, including the rate limiter on this page.
1.2k contributions this yearLong-form notes on performance work, usually with the profiler output left in.
24 posts since 2019SRECon EMEA and Write the Docs. Slides and transcripts, no video paywall.
6 talksRemote, or Lisbon. Tell me the system and what has stopped working about it. If I am not the right person I will say so in the first reply.
An engineer’s portfolio that opens on a terminal rather than a gradient, and puts thirty legible lines of real code on the page — because a portfolio that only links to repositories asks the reader to go and judge for themselves, and almost nobody does.
Principal engineer — platform, performance and the unglamorous parts
Print or save as PDF
Ten years building systems that other engineers depend on, mostly by removing things. I am at my best on a team that has outgrown its first architecture and has to keep shipping while it changes. Looking for a principal or staff role where the hard problem is technical rather than political.
Mar 2023 — Present · Remote
Series B logistics platform, 40 engineers, one Rails monolith and four Go services.
Jun 2019 — Feb 2023 · Dublin
Patient records for 60 clinics. Regulated, audited, and slow to change by design.
Sep 2016 — May 2019 · Dublin
TypeScript · Go · Postgres · React · Next.js · Terraform · OpenTelemetry · WCAG 2.2 AA · Incident command
The fastest route is email. Tell me what the system does and what has stopped working about it — that is the part I want to hear before anything about the company.
A personal site whose home page is the CV itself, printable, so the document that decides whether you get a reply is the one that is actually maintained. Four blocks, and the restraint is the design.
Indicative prices, delayed 15 minutes
Spot trading on 214 assets, a real order book, and a fee schedule on the same page as the marketing. Withdraw to your own wallet whenever you like — there is no lock-up and never was.
Custody
The four facts that decide whether an exchange is safe to use, each one checkable rather than asserted. If a venue will not answer these, that is the answer.
Multi-party signing, three geographies, no single quorum holder
Held apart from company funds in a bankruptcy-remote entity
Merkle-tree attestation you can verify against your own balance
Underwritten by a Lloyd’s syndicate, policy published in full
Operations
Numbers from the last twelve months. The status page is third-party hosted, so it stays up when we do not.
Rolling 12 months, measured externally and published at status.meridian.exchange
Fiat SEPA, business hours, last 90 days
Frankfurt colocation, matched to acknowledgement
MiCA authorisation in the EU, FCA registration in the UK
We are not trying to be a bank, a card, a social network and a launchpad. Trading, custody and reporting — and the reporting is the one everybody else treats as an afterthought.
Trade
Limit, market, stop and trailing orders on every pair, with the full depth visible and no hidden spread priced into the quote you are shown.
Hold
Self-custody is a right and not a feature. There is no minimum holding period, no withdrawal lock on a promotional balance, and no support ticket between you and your keys.
Report
Cost basis computed per jurisdiction, including the disposal rules that differ between the UK, Ireland and Germany, with the working shown rather than a single number.
Volume bands, not subscription plans — there is no monthly charge and nothing to cancel. Your band is recalculated every day on a rolling 30-day window.
| Feature | Entry | ActivePopular | Professional | Institutional |
|---|---|---|---|---|
| 30-day volume | Under $50k | $50k – $1m | $1m – $10m | Over $10m |
| Maker fee | 0.08% | 0.04% | 0.02% | 0.00% |
| Taker fee | 0.10% | 0.08% | 0.05% | 0.03% |
| Crypto withdrawal | Network fee only | Network fee only | Network fee only | Network fee only |
| SEPA deposit and withdrawal | Included | Included | Included | Included |
| Dedicated API rate limit | Not included | Not included | Included | Included |
| Named account manager | Not included | Not included | Not included | Included |
Risk warning
Crypto assets are unregulated in several of the markets we serve and are high risk everywhere. This section is required by law in most of them and we would print it anyway.
Including the ones we would rather you did not ask. If a competitor cannot answer these in writing, that tells you something.
Still deciding?
Our compliance team answers questions about custody and segregation directly, in writing, before you deposit anything.
Ask compliance a questionBecause client assets sit in a separate, bankruptcy-remote entity and the monthly attestation is a Merkle tree you can check your own balance against — the leaf hash is in your account settings. We do not run a yield product, which is the mechanism by which this usually goes wrong.
Client assets are segregated, so they are not part of the estate. The administrator returns them; they do not distribute them to our creditors. That is a legal structure rather than a promise, and it is the one question worth checking on any exchange.
Usually not. Zero-fee venues make the money back on the spread, which is invisible at the moment you trade. Our spread is the order book’s and our fee is on this page, so the total cost is something you can calculate before you press the button.
Anti-money-laundering rules in all nine markets we are authorised in. We ask for the minimum the rule requires, delete the raw images after verification, and never sell or share the data. An exchange that skips this step is one regulatory action from freezing your withdrawals.
Yes, on every tier, with the same rate limits our own front end uses. Keys are scoped — a read-only key cannot place an order and a trading key cannot withdraw, which is the separation that saves people when a key leaks.
A regulated exchange’s front door: a moving price rail before a word of copy, custody and reserves above the feature grid, and the risk warning as a section rather than as small print.
Indicative prices, delayed 15 minutes · last updated 14:42 UTC
214 assets, 96 pairs, and the fee you pay on each of them on one page. Everything here is indicative and delayed — the order book is the only live price, and it is the one your order fills at.
BTC / USD
Trend over the last 9 periods, rising 2.41 percent.
ETH / USD
Trend over the last 9 periods, rising 1.08 percent.
SOL / USD
Trend over the last 9 periods, falling 3.22 percent.
30-day volume
Trend over the last 9 periods, rising 8.6 percent.
Last trade on this venue, sampled every three hours, in UTC. Not a volume-weighted average across exchanges — see the notes below for why that matters.
| Month | BTC / USD |
|---|---|
| 00:00 | 61,180 |
| 03:00 | 61,420 |
| 06:00 | 60,980 |
| 09:00 | 61,760 |
| 12:00 | 62,340 |
| 15:00 | 62,110 |
| 18:00 | 62,880 |
| 21:00 | 63,510 |
| 24:00 | 63,204 |
Once the price is on the rail above, this is the question a listings page is really answering: which networks, what minimum, and can I stake it.
| Feature | BTC | ETHPopular | SOL | USDC |
|---|---|---|---|---|
| Spot trading | Included | Included | Included | Included |
| Deposits and withdrawals | Included | Included | Included | Included |
| Networks supported | Bitcoin, Lightning | Ethereum, Base, Arbitrum | Solana | Ethereum, Solana, Base |
| Minimum withdrawal | 0.0002 BTC | 0.005 ETH | 0.02 SOL | 10 USDC |
| Staking | Not included | Included | Included | Not included |
| Used as trading collateral | Included | Included | Not included | Included |
| Listed since | 2019 | 2019 | 2021 | 2020 |
Four questions that come up every time somebody compares our price with somebody else’s and finds a difference.
The rail at the top of the page is indicative and delayed by roughly fifteen minutes. Prices inside the trading screen are live from the order book and are the only ones an order is filled at. If the two disagree, the order book is right and this page is stale.
Those sites publish a volume-weighted average across dozens of venues. We publish the last trade on our own book. Neither is wrong; they are answers to different questions, and the one that matters for an order you are about to place is ours.
The last trade now against the last trade at the same clock time yesterday, in UTC, on this venue. It is not a calendar-day figure and it does not reset at midnight in your own time zone — which is why two exchanges can honestly report different daily changes for the same asset.
Delisting is announced at least 30 days in advance by email and on the status page, and withdrawals stay open for 12 months afterwards. Nothing is ever seized — if you miss the window, open a support ticket and we will process it manually.
The public price screen — sparklines instead of a percentage column, because two assets both up 4% got there differently, and that shape is what a trader is scanning for.
Early bird€260 until 28 February — the price steps up to €340 at midnight CET, and there are 420 tickets in total.Book a ticket
Three tracks on platform, interface and practice, for people who ship and maintain the same system. No vendor pitches, no panels about the future of work, and every talk published free within a fortnight.
Thursday 14 May · the full two days are on the programme page
All times CEST (Berlin)
Registration and coffee
Foyer
08:30 – 09:30
Registration and coffee
Foyer
09:30 – 10:15
10:30 – 11:10
Eighteen talks across two days; six of them are here. Everyone speaking has shipped and maintained the thing they are describing — we do not take submissions about work somebody else did.
Principal engineer, Northwind
Opening keynote. Ten years of build tooling, told as the two times she was confidently wrong about it.
Staff engineer, Contoso
On removing a caching layer and getting faster, with the profiler output and the argument that preceded it.
Independent
Type-safe forms with no runtime library, and a workshop on accessible components from first principles.
Design director, Umbra
Design reviews people actually attend, and what changed when they stopped being a gate.
Database engineer, Vandelay
Five years of one monorepo and the Postgres bill that came with it, assessed honestly.
Accessibility lead, Aperture
Animation that survives prefers-reduced-motion, and why the fallback is usually the better design.
Funded by six sponsors, none of whom get a stage slot
Sponsorship pays for the community tickets, the captions and the recordings. It does not buy a talk — every session on the programme went through the same review, and three sponsors submitted and were turned down this year.
One price, paid once, and the same two days in all three. The differences are lunch, the workshops and the dinner — there is no version of this event where you see fewer talks.
| Feature | Community | StandardPopular | Workshop |
|---|---|---|---|
| Price until 28 February | €180 | €260 | €420 |
| Price from 1 March | €180 | €340 | €520 |
| Both conference days | Included | Included | Included |
| Talk recordings, published within two weeks | Included | Included | Included |
| Lunch and the Thursday party | Not included | Included | Included |
| Hands-on workshops (limited to 24 seats each) | Not included | Not included | Included |
| Speakers’ dinner on the Wednesday | Not included | Not included | Included |
| Transferable to a colleague | Included | Included | Included |
| Refundable until 1 April | Included | Included | Included |
The logistics that decide whether a ticket is usable, answered properly rather than in a line each.
Something not covered?
Two of us read this inbox and we answer before you pay, not after. Access requirements especially — ask first.
Email the organisersIt is the same two days at €180, for students, people between jobs, and anyone whose employer is not paying. Nobody is asked to prove any of that — you tick a box. We hold 80 of them and they are funded by the sponsor tiers, not by the other ticket types.
All of them, published to the public within two weeks, no login and no paywall. Workshops are not recorded because the value is in the room and a camera changes how people ask questions.
Full refund until 1 April, no reason needed. After that the ticket is transferable to anyone else right up to the morning of the event — change the name in your order and that is the whole process.
Three tracks run in parallel, but the two keynotes and the closing panel run alone with nothing scheduled against them. Nobody should have to choose between the talk everybody will discuss and one they specifically came for.
Step-free throughout, including the stage. Live captions on every talk in the Great Hall and Room A, a quiet room open both days, and hearing loops in all three rooms. Email us before you book if you need something not listed here and we will answer before you pay.
Yes, and yes — it is linked in the footer, it names the three people on the response team, and they are at the event both days with a phone number printed on every badge. It has been used twice in four years and both reports resulted in action.
The early-bird price holds until the end of February. After that it steps up once, and it does not step back down.
A conference home page built around a deadline: the price step-up above the hero, the programme extract above the speakers, and tickets as a comparison rather than a plan picker.
Both days in full. Eighteen talks, four workshops and an unconference track, across three rooms. Every scheduled session is recorded and published free within a fortnight — the workshops are not, deliberately.
Thursday 14 May
All times CEST (Berlin)
Registration and coffee
Foyer
Lunch, and the unconference board opens
Foyer
Party at the Funkhaus — badge gets you in, no ticket needed
Funkhaus
08:30 – 09:30
Registration and coffee
Foyer
09:30 – 10:15
10:30 – 11:10
11:20 – 12:00
12:00 – 13:30
Lunch, and the unconference board opens
Foyer
13:30 – 15:00
15:20 – 16:00
16:15 – 17:00
19:00
Party at the Funkhaus — badge gets you in, no ticket needed
Funkhaus
Friday 15 May
All times CEST (Berlin)
Coffee, and the unconference board is final at 09:30
Foyer
Lunch
Foyer
Close, and thank you
Great Hall
09:00 – 09:30
Coffee, and the unconference board is final at 09:30
Foyer
09:30 – 10:15
10:30 – 11:10
11:20 – 12:00
12:00 – 13:30
Lunch
Foyer
13:30 – 15:00
15:20 – 16:00
16:00 – 16:30
Close, and thank you
Great Hall
Three tracks means a clash in almost every slot. Four questions about what that costs you.
Everything except the workshops is recorded and published free within two weeks, so a clash costs you the room and not the talk. The two keynotes and the closing panel deliberately run with nothing scheduled against them.
Yes — 24 seats each, booked from your order page, and they open two weeks before the event. A workshop ticket guarantees you a seat in one workshop per day, not in a specific one.
A physical board in the foyer. Write a session and a room on it and it is on the programme; the Friday morning slots are filled this way. It opens at lunchtime on Thursday and is final at 09:30 on Friday.
The Great Hall and Room A, both days, for every scheduled session. Room C is captioned on request with 24 hours’ notice — find any organiser or email us. Hearing loops are in all three rooms.
Both days in full, as two grids rather than a day switcher — because this is the page people print, and a tab hides half of it from find-in-page.
A small dining room doing one sitting a night. Wednesday to Sunday, six until ten, and the table is yours for the evening.
An extract. The full menu — three courses, the wine list and the cheese — is on the menu page, and it is the same document the kitchen is working from right now.
The full menu changes when the produce does
Six halves. The crab is picked here on the morning it arrives.
Sourdough from the Tuesday bake, salted butter churned in house.
Bitter, sweet, salt. The pears are from a single orchard in Herefordshire.
Please tell us about allergies when you book rather than when you arrive. We cook in one kitchen and cannot promise any dish is free of a trace, but we can usually change one.
How it works
None of them are unusual in a good restaurant and most restaurant websites leave all four out, which is why people arrive expecting something else.
4.8out of 5
from 312 reviews verified reviews
Four of the 312. The four-star one is here on purpose — the room really is loud when it is full, and we would rather you knew that before you booked an anniversary.
“The hogget for two is the best thing I have eaten in this city. Carved at the table, gone in twenty minutes, and they were not precious about us ordering three puddings between two.”
“Small room, so book. We turned up on a Saturday without one and were sent away kindly, which is fair enough. Came back Wednesday and it was worth the wait.”
“Told them about a nut allergy when booking and they had already crossed two things off by the time we sat down. Nobody made it a performance. That is rarer than it should be.”
“Excellent food, and honestly quite loud when it is full. If you want a quiet conversation take the early sitting at six rather than eight.”
Wednesday to Sunday, sittings from six. Tables for six or more are best done by phone so we can talk about the menu first.
Hours, address and phone as a first-class section directly under the hero, then the menu — the two jobs a restaurant site has, in the order visitors actually need them.
Wednesday to Sunday, six until ten, kitchen closes at half past nine. One menu, changed when the produce changes rather than on a schedule — which is why there is no printed copy and this page is the only one.
Served until 3pm on Sundays
Six halves. The crab is picked here on the morning it arrives.
Sourdough from the Tuesday bake, salted butter churned in house.
Bitter, sweet, salt. The pears are from a single orchard in Herefordshire.
Morecambe Bay brown shrimp, mace and cayenne, clarified butter.
Charred whole over embers, then dressed while still hot.
All served with greens; potatoes are £5 and worth it
Four hours in the wood oven, carved at the table. Comes with greens and dripping potatoes.
On the bone. Ask and we will take it off for you.
The mushrooms change weekly; ask what came in.
Thirty-five days on the bone. Priced by weight on the day.
Ninety minutes in a salt crust, cracked open in the dining room.
Cheese £4 a cut, £14 for four, from Bath Soft and Neal’s Yard
Crème fraîche. The honey is from the roof of the building next door.
Poached slowly until it goes the colour of a penny.
One scoop, two scoops, or three if the table is sharing.
Made in the morning, set by service. When it is gone it is gone.
Please tell us about allergies before you order — we cook in one kitchen and cannot promise any dish is free of a trace. A discretionary 12.5% service charge is added to tables of six or more and goes to the people who served you.
A short list, mostly from within a day’s drive, and priced so the second bottle is not a decision. Corkage is £18 on Wednesdays and Thursdays.
125ml / 175ml / bottle
Elderflower and green apple. Grown eleven miles from this room.
Chilled, light, and the answer to most of the food on the left.
For the hogget, or the rib chop, or both.
Cloudy, dry, faintly of cider. The one the staff drink.
The alcohol-free list is a real list and not one token bottle
330ml, 4.8%
375ml bottle, 6.5%, bone dry
Brewed to be low, not de-alcoholised afterwards.
Bitter, not sweet. Served with soda and a twist.
Made in house, no added sugar.
Wines by the glass are poured to line from a measure at the pass, and we will always let you taste before the bottle is finished. The alcohol-free list is a proper list — we got tired of restaurants offering one sad bottle of grape juice.
Before you order
Usually, and we would rather know when you book than when you sit down. We cook in one small kitchen with shared equipment, so we cannot promise any dish is free of a trace of anything — we will tell you honestly which dishes we are confident about and which we are not.
They are at the foot of the menu: (v) vegetarian, (ve) vegan, (gf) gluten free, (df) dairy free, (n) contains nuts, (s) contains shellfish. They describe the dish as written — several can be changed, so ask.
No. We use hazelnuts and walnuts most weeks and they are stored and prepared in the same room. If that is a problem we will say so when you book rather than let you find out on the night.
At every course, and it is a dish rather than a substitution — the salt-baked celeriac is the one the kitchen is proudest of this month. We do not do a separate vegan menu because it always ends up being the shorter one.
No, and we would rather say so than serve a bad one. Most of the rest of the menu is gluten free as written; the marks on the menu are accurate.
Sundays only — two courses £26, three for £32, from noon until half past three. It is drawn from the same menu, not a cheaper one, and the hogget is on it most weeks.
Wednesdays and Thursdays, £18 corkage a bottle, two bottles a table. Not on Friday or Saturday, when we need the table turn and the list to pay for itself.
A discretionary 12.5% on tables of six or more. It goes to the people who served you and is split evenly with the kitchen, which is not the industry norm. Ask us to remove it and we will, without a conversation about it.
When the produce does, which in practice is most Wednesdays. This page is the menu — there is no printed one — so what you are reading now is what the kitchen is working from tonight.
Thirty-eight covers and one sitting a night, so weekends go about ten days ahead. Wednesdays are usually free at short notice and are the better meal.
The full bill of fare, typeset with leaders and dietary marks, split into food and drink because a diner reads the two differently. No photography, deliberately.
Thirty-eight covers, one sitting a night. Weekends go about ten days ahead; Wednesday is usually free at short notice and is the better meal.
Average wait for a first appointment: 2 days
Times are when your table is ready, not when the kitchen can take an order — the kitchen closes at half past nine, so the last sitting is 21:00.
What happens next
Four things about deposits, cancellations and how long the table is yours. All of them are on this page rather than in the confirmation email, which is where they usually turn up as a surprise.
Large tables, waiting lists, children and access — the six that come up most on the phone.
Ring us instead
0117 946 2210, answered from 4pm on service days by somebody who will be in the room that evening.
Call 0117 946 2210Six and above goes through the phone, because we want to talk about the menu first — large tables eat differently and we would rather plan it than improvise on the night. Ring 0117 946 2210 from 4pm on a service day.
Yes, and it moves — roughly one table in six comes back to us on any given evening. Join it from the slot grid above and you will get a text the moment something opens, with twenty minutes to take it.
The grid shows real availability including today, so if a slot is there you can take it. Wednesdays and Thursdays very often have something at short notice; Fridays and Saturdays almost never do.
Step-free from the street, no internal steps, and an accessible WC on the same floor. Two tables take a wheelchair comfortably — tell us when you book and we will hold one of those rather than seat you and shuffle.
Of course, at the six o’clock sitting, where there are usually two or three others. We have two high chairs and the kitchen will do a smaller plate of anything on the menu. Later sittings get loud and are not much fun for a small child.
If there is a table, yes, and there sometimes is at six or after nine. It is worth ringing rather than walking up the hill on a Saturday — we would rather save you the trip.
Two booking blocks on purpose: four nights with free-slot counts to answer “is there any point”, then the real grid. The cancellation policy is stated before the button, not in the confirmation email.
142 properties on our books today. Search by street, postcode or area — or scroll down, everything is already on the map.
142 properties across Bristol · showing the six added this week
£615,000
NewFour-bedroom Victorian terrace
Hampton Road, Redland
4 bed2 bath1,540 sq ft
£385,000
Two-bedroom garden flat
Chandos Road, Cotham
2 bed1 bath780 sq ft
£549,950
ReducedWarehouse conversion, top floor
Wapping Wharf, Harbourside
3 bed2 bath1,180 sq ft
£472,500
Three-bedroom semi with studio
Kellaway Avenue, Bishopston
3 bed1 bath1,090 sq ft
£289,000
Under offerOne-bedroom period conversion
Pembroke Road, Clifton
1 bed1 bath540 sq ft
£895,000
Five-bedroom detached, corner plot
Downs Park East, Westbury Park
5 bed3 bath2,310 sq ft
Our numbers
From our own completed sales over the last twelve months, not from a national index. Any agent can quote the market; these are the four figures that separate one agent from another, and most will not print them.
Instruction to agreed sale, our own sales in BS6 and BS8, last twelve months
Median. We publish this because the agent who talks you into a high asking price is not doing you a favour
Against a national average nearer a third. We check chains before we agree a sale, not after
No withdrawal fee, no marketing charge, no tie-in beyond eight weeks
A valuation takes about forty minutes and comes with the three comparable sales it is based on, so you can check the reasoning rather than trust the number. There is no obligation and we will not ring you afterwards unless you ask.
Including the two that are awkward. If an agency cannot answer these in writing before you sign, that is the answer.
Ask us something else
One of the four partners answers this inbox, usually the same day. No call-back form and no lead-qualification script.
Email the partnersPhotography, floor plan, EPC, the listing on the two portals that matter, every viewing accompanied by one of us, and the negotiation. There is no separate marketing package and no charge if we do not sell it. The only thing you pay for separately is a conveyancer, and they are not us.
Eight weeks of sole agency, then it rolls month to month and you can leave with two weeks’ notice. Twelve- and sixteen-week tie-ins are common in this city and they exist to protect the agent, not you.
No, and this is the main thing that loses us instructions. Over-valuing wins the listing and then costs the seller three months and a reduction. Our valuation comes with the three comparable sales it is based on, and you can check every one of them on the Land Registry yourself.
One of the four of us, always, including evenings and Saturdays. We do not send a viewings assistant who has never been in the house and cannot answer a question about the boiler.
No. It is in the fee, it is done by a photographer rather than a phone, and it includes a floor plan with measurements. A listing without a floor plan gets materially fewer enquiries and we are not going to sell you one as an upgrade.
Nothing. No withdrawal fee and no invoice for work done. Circumstances change, and an agency that charges you for changing your mind has made your decision about them for you.
An estate agency home page where search owns the first screen and results are already populated, plus the achieved-against-asking figure most agents will not publish.
New this week · Redland, Bristol
Freehold · 1,540 sq ft · walled garden · no chain above
Quantity
The legals
Tenure, council tax, EPC and chain position. Portal listings bury these under eleven photographs; they are the first thing a buyer's solicitor will ask and the first thing that ends a sale.
Four bedrooms across two floors. The main bedroom runs the full width at the front with the original shutters; the second is a good double overlooking the garden.
The third is a genuine single — about 2.4 by 2.6 metres — and the fourth on the top floor is the one with the view, reached by a steep staircase that will not suit everybody. Two bathrooms, one of them recent. The kitchen was done in 2019 and opens onto the garden.
About eighteen metres, walled, and facing north-east — so it gets the morning and loses the sun by mid-afternoon in summer.
There is a brick outbuilding at the end currently used as a bike store, with power but no heating. Two of the neighbours have converted theirs into studios and the planning precedent is there.
Hampton Road is residential with permit parking, zone RD, currently with no waiting list.
Redland station is a seven-minute walk for the Severn Beach line and Gloucester Road with its shops is about ten. Catchment for Redland Green School, which is the reason most people on this street are on this street.
There is a crack above the bay window that the owners had looked at in 2023. The engineer’s report says historic movement with no ongoing issue, and we will send you the report rather than wait to be asked.
The loft is boarded but not insulated to current standard, and the boiler is a 2011 Worcester that will want replacing within five years. Nothing else we are aware of, and we would tell you if there were.
Six properties between £470,000 and £900,000, all within a mile
£615,000
NewFour-bedroom Victorian terrace
Hampton Road, Redland
4 bed2 bath1,540 sq ft
£385,000
Two-bedroom garden flat
Chandos Road, Cotham
2 bed1 bath780 sq ft
£549,950
ReducedWarehouse conversion, top floor
Wapping Wharf, Harbourside
3 bed2 bath1,180 sq ft
£472,500
Three-bedroom semi with studio
Kellaway Avenue, Bishopston
3 bed1 bath1,090 sq ft
£289,000
Under offerOne-bedroom period conversion
Pembroke Road, Clifton
1 bed1 bath540 sq ft
£895,000
Five-bedroom detached, corner plot
Downs Park East, Westbury Park
5 bed3 bath2,310 sq ft
Viewings are conducted by one of the four partners, evenings and Saturdays included. We will send the engineer's report, the EPC and the title plan before you come rather than after you offer.
A product detail page with different stakes: tenure, council tax, EPC and chain position above the prose, and a description that names a flaw so the rest is believed.
1,340 live roles from 286 companies hiring directly. No agencies, no “competitive salary”, and no account needed to apply.
Thirteen of 1,340, grouped by craft so you can read three rows instead of forty. Every one lists a real range, the countries the employer can hire in, and the number of stages.
Senior Backend Engineer, Payments
BerlinRemote OKFull-time€95k–€120k
Staff Engineer, Developer Platform
Remote, EURemote OKFull-time€120k–€150k
Site Reliability Engineer
AmsterdamRemote OKFull-time€90k–€115k
iOS Engineer
LisbonFull-time€65k–€85k
Engineering Manager, Growth
LondonRemote OKFull-time£105k–£130k
Nothing that fits? We read every speculative application — hello@plainspoken.jobs.
They are why postings get rejected and why the board is smaller than the big ones. That is the trade, and it is deliberate.
Not "competitive", not "DOE", and not a range so wide it is meaningless. We reject about one posting in six on this rule alone, and we tell the employer why.
Every listing is posted by the company doing the hiring. You will never apply through a middleman who cannot answer a question about the team.
"Remote" that turns out to mean one time zone and a visa you do not have wastes a fortnight. Employers list the countries they can actually employ in.
Number of stages, whether there is a take-home, how long it is, and whether it is paid. On the listing, not in an email after the first call.
One price, one listing, shown the same way as everybody else’s. No subscription and nothing to cancel — and we will tell you before it goes live if the range needs work.
For both sides, since the rules are the product and they only work if everyone knows them.
Something wrong with a listing?
Every posting has a report link and it reaches a person, not a queue. Salary bands that look wrong are the report we act on fastest.
Report a listingYes, and there is no account required to browse or to apply — applications go straight to the employer’s own system. We make money from employers posting, which is the only model where our incentives and yours point the same way.
Usually because the role spans two levels. We allow a band up to about 35% wide and reject anything broader, because past that the number stops being information. If a band looks wrong to you, the report link on every listing reaches a person.
No. There is no candidate database to sell — we do not have one. Applications are passed to the employer and nothing is retained beyond a count. This is the main reason the board exists.
Every posting expires after 30 days unless the employer confirms it is live, and the date it was last confirmed is on each listing. Roughly a fifth of postings lapse this way each month, which is the point.
One email a week, filtered to the crafts and countries you pick, and unsubscribing is one click from any of them. No "we miss you" emails, and the list is never rented.
£199 for a 30-day posting, or £1,490 for ten to use over a year. No subscription, no annual contract, and no upsell to a "featured" slot — every listing is shown the same way.
A two-sided marketplace where only one side is reading — candidates get the whole page, employers get one section. Every listing carries a real salary range, which is the entire differentiator.
Berlin or remote in six countries. €95k–€120k on a published ladder, four interview stages totalling about six hours, and the take-home is paid.
The pull request was titled “remove stale flags, part 1 of 8” and it deleted more code than the previous quarter had added. Our flag service listed 312 active flags; production telemetry showed 41 of them had evaluated to the same value for every user since at least January. The rest were split roughly evenly between experiments nobody remembered starting and kill switches for services we had already decommissioned.
“A feature flag is a loan. The interest is every engineer who has to reason about both branches forever.”
Before you read any further
Salary, location, process and contract. They are here rather than under three paragraphs of mission statement, which is a rule of this board and not a favour from the employer.
Four stages, about six hours, designed to fit in two weeks. Nothing below is a surprise you will meet on the day.
Stage one · 30 minutes
Video, camera optional. Half of it is them describing the team honestly, including what is currently broken about it.
Stage two · take-home, paid €600
A cut-down version of their payments service with one failing test and an ambiguous requirement. Timeboxed at four hours, and they mean it — they read what you did in four, not what you could do in twelve.
Stage three · 90 minutes
You extend what you wrote, with the two people who will review your code every week. Your editor, your machine, your keybindings.
Stage four · 45 minutes
Not a culture-fit screen with a veto. One engineer from another team and one person from support, on how you work with people who are not engineers.
The payments service moves about €40m a month for 9,000 businesses and is the part of the product that cannot be down. You would be the fourth engineer on it, working mostly in Go with a Postgres ledger underneath.
The first six months are a specific project: splitting settlement out of the main service so that a slow bank connection stops holding up everything else. That work is scoped, funded and already agreed — it is not a "we will find you something" role.
Five or more years writing backend services that handle money, or something with the same consequences — ticketing, healthcare, logistics. The language matters much less than having been on the wrong end of a reconciliation.
They explicitly do not require a degree, Go experience, or prior fintech. Two of the four on the team came from other domains and the ramp is budgeted at three months.
Not a greenfield rewrite — the service is seven years old and most weeks you are working inside it rather than beside it.
Not a management track in disguise; there is a staff path and this is on it. And not a role with a nine-month notice period, a non-compete, or unpaid overtime, none of which they use.
About Northwind
Published by them, and checkable — the pay ladder and the annual attrition report are both on their public handbook.
Of 140 people, across six countries
Series B, 2024, profitable since Q3 2025
Published annually with the attrition rate
The whole ladder is in their handbook, externally readable
One role, with the four facts a candidate needs before the mission statement and the whole interview process published — stages, hours, and whether the take-home is paid.
Postmortems with the numbers left in, migrations with the rollback described, and interview processes assessed against what they actually selected for. Free, and about 2,000 words.
One email a week. Unsubscribe in one click. Your address is never sold.
41,280 already waiting
Read by engineers at
A caching layer that everyone agreed was load-bearing turned out to be hiding a query plan that went quadratic. The interesting part is not the fix — it is how long it took to be allowed to look.
Seven teams, three years of estimates against actuals. The bias is consistent enough to correct for, and nobody does, because correcting for it feels like admitting something.
An audit of 214 alert rules across four companies. Two thirds had never resulted in an action. Deleting them is the highest-leverage reliability work available and nobody is measured on it.
The whole runbook, including the two steps we got wrong and had to roll back. Long, and the only issue this year that people have printed.
Applications fell 20% and the proportion who finished the process rose from 31% to 68%. The people who started applying were different in a way we did not predict.
If the docs going down would stop customers self-serving, they are production. Almost nobody treats them that way, including us until last year.
Three years in
A large list that nobody opens is a vanity metric and a rented audience. This one is small by newsletter standards and is read, which is why the sponsor slots are booked out to June and why there is only ever one of them.
Read the archiveUnedited, and picked to include the two that describe it as long — because it is, and somebody who wants a three-minute read should know before subscribing.
“The only newsletter I read the week it arrives rather than in a batch on a Sunday. It is long, which is unusual and correct — the short ones have nothing to say.”
“I have forwarded the estimates issue to three managers and it changed how one of them ran planning. That is a better hit rate than most books.”
“It is one email a week and it is genuinely one email a week. No “quick note”, no webinar invitation, no course launch. I have been on it four years.”
“Half the issues are about things that went wrong, with the numbers left in. I do not know anywhere else that publishes the rollback as well as the launch.”
The terms
The three worries everybody has about giving an address to a newsletter, answered before you are asked to give one a second time.
The archive is the argument, so it sits above the testimonials, and the three worries about handing over an address are answered as content rather than as small print.
$ npm install ratchetA migration runner that reads your application code before it drops a column, and blocks itself when something still needs it. Plain SQL, one static binary, no DSL.
$ratchet upA config, and migrations that are plain SQL. If you already know how to write an ALTER TABLE you know how to use this.
1import { Ratchet } from 'ratchet'2 3// A migration is a file, not a class. The up is required; the down is4// optional and, if you leave it out, the migration is declared5// irreversible and the tool will say so rather than guess.6export const ratchet = new Ratchet({7 dir: './migrations',8 url: process.env.DATABASE_URL,9 10 // The whole point of the library. Before applying anything that drops11 // or narrows a column, parse the queries in these paths and refuse if12 // one of them still reads it.13 guard: {14 scan: ['api/**/*.go', 'reports/**/*.sql'],15 onConflict: 'block',16 },17})18 19await ratchet.up()Five differences. The first one is the reason the project exists; the others are consequences of keeping it small.
The guard parses the queries in the paths you name and blocks a destructive migration while anything still reads the column. Most outages caused by a migration are this exact shape.
Your database’s own documentation is the reference. Nothing to learn and nothing that stops working when Postgres adds a feature.
A migration with no down is fine — lying about it is not. Say so in a comment and the plan output says so too.
Planning happens before the transaction opens, so a slow guard scan never holds a lock on a production table.
6MB, static, no Node or Python needed in the image that runs it. The library and the CLI are the same code.
Funding, since you are about to depend on it
Northwind funds one day a week and Contoso funds two, both on rolling twelve-month agreements, and neither gets any say over the roadmap — that is written into both. If both stopped tomorrow the project would keep going more slowly rather than stopping, because no single contributor holds more than 19% of commits. This paragraph is here because it is the question a team should ask before taking a dependency, and most projects do not answer it.
The documentation is the place to start. The Discord is faster on weekdays, and every design decision is argued in a public RFC.
The code, the issues and the RFC process. Every design decision was argued in public and the threads are still there.
18.4k stars · 312 open issuesAbout 4,000 people. Two maintainers are in it daily; nobody is paid to be, so answers are faster on weekdays.
4,100 membersGuides, a full CLI reference and thirteen recipes for migrations that are genuinely hard to get right.
Versioned back to 1.0Every release since 1.0, with the breaking changes called out and a codemod where one was possible.
Latest: 2.4.0The install command above the hero, the API in twenty lines, and who funds it said plainly — because “what happens if the sponsors stop” is the question that decides whether a team takes the dependency.
Filter by pricing model, hosting and compliance rather than by category — you already know the category. Every entry says when it was last checked.
Nothing matches all of those.
Remove a filter above — the counts show which one is doing it.
How the list is maintained
Freshness and independence are the only things that separate a useful directory from a link farm, and both are claims that can be checked rather than adjectives.
Every entry’s pricing page and status are fetched fortnightly; the date is on each listing
Dead sites, acquisitions and products that stopped shipping. A directory that only grows is not maintained
Nobody can buy a position, a badge, or a place in the results. Submissions are £40 and that is the whole business model
The other 6% are marked “contact for pricing”, which is information too
Six sections, 1,028 entries. The counts are live and include everything, not just the entries that paid — because none of them did.
212 entries — managed Postgres, object storage, vector stores, and the migration tooling around them.
144 entries — workflow engines, schedulers, queues and the durable-execution category that grew out of them.
186 entries — tracing, logs, metrics, and the seven products that claim to be all three.
97 entries — auth providers, SSO, secrets management and policy engines.
231 entries — CI, code review, preview environments and local development tooling.
158 entries — IaC, container platforms, edge runtimes and cost management.
Reviewed by a person within two working days. If it does not fit, you get the money back and a sentence explaining why, rather than silence.
Ranking, freshness, corrections and removals — the four things that decide whether a list like this is worth reading.
Spotted something wrong?
Every entry has an edit link, and factual corrections do not need an account. They are usually live within a day.
Report a problemNo, and there is no mechanism to. Results are sorted by the facet you choose and nothing else — there is no "featured" tier, no sponsored row and no badge for sale. Submission costs £40 once and that is the entire revenue of the site.
A fortnightly crawl of every entry’s pricing and status page, flagged for a human when something changes materially. The date each entry was last confirmed is printed on it, so a stale one is visible rather than hidden. 23 were removed last month.
There is an edit link on every entry and it does not require an account or ownership proof for a factual correction — pricing, a dead link, a changed name. Changes to the description go through review, which takes about a day.
Yes, on request, no reason needed and no retention attempt. Email us and it is gone the same day. We think a directory nobody can leave is a hostage situation rather than a resource.
Reviews left here, by accounts that have been on the site more than 30 days. They are not aggregated from elsewhere and they are not weighted — the score is the mean, the count is beside it, and a product with 27 reviews should be read differently from one with 214.
The whole index is downloadable as JSON under CC BY-SA, updated nightly, with no key and no rate limit worth mentioning. If you build something better with it, that is a good outcome.
Faceted by pricing model and hosting rather than by category, because the reader already knows the category. Publishes its own removal rate, which is a claim that can be checked.
An open-source schema migration runner that parses your application code before a destructive migration and blocks itself when something still reads the column. Plain SQL, one static binary, no hosted version.
The pull request was titled “remove stale flags, part 1 of 8” and it deleted more code than the previous quarter had added. Our flag service listed 312 active flags; production telemetry showed 41 of them had evaluated to the same value for every user since at least January. The rest were split roughly evenly between experiments nobody remembered starting and kill switches for services we had already decommissioned.
“A feature flag is a loan. The interest is every engineer who has to reason about both branches forever.”
The facts
The four columns every entry in this directory carries, in the same order, so two entries can be read side by side without hunting.
Chosen by what people actually search for next, not by who would like to be compared. Every row is checkable from public documentation and dated 4 days ago.
| Feature | RatchetPopular | Halyard Migrate | Vandelay Shift |
|---|---|---|---|
| Licence | MIT, open source | Proprietary | BSL, converts to Apache after 4 years |
| Price | Free | From $49/mo | Free under 5 seats, then $29/seat |
| Self-hostable | Included | Not included | Included |
| Hosted option | Not included | Included | Included |
| Plain SQL migrations | Included | Not included | Included |
| Blocks destructive changes by scanning app code | Included | Not included | Not included |
| Runtime required | None — static binary | Node 20+ | JVM 17+ |
| Postgres, MySQL, SQLite | All three | Postgres only | All three |
| Median issue first response | 2 days | Support SLA, 4 hours | 9 days |
Ratchet is a schema migration runner. Migrations are plain SQL files applied in order, which is unremarkable — what is not is the guard: before applying anything destructive, it parses the queries in paths you nominate and refuses if one of them still reads the column being dropped.
In practice that turns the most common migration-caused outage into a blocked command with a file and a line number. It is the only tool in this category that does it, and it is why the entry exists.
There is no hosted or managed version and the maintainers have said there will not be, so if you wanted somebody else to run it, this is not the tool.
The guard only understands SQL and Go query construction today — if your queries are built dynamically in Python or Ruby it will not see them, and it fails open rather than pretending. The Windows build lagged the others by two releases in 2025.
Two corporate sponsors fund three maintainer-days a week between them on rolling twelve-month agreements, neither with any roadmap influence, plus about 340 individual sponsors.
No single contributor holds more than 19% of commits, so the bus factor is genuinely better than most projects this size. Total 2025 funding was £61k, which they publish.
214 reviews
A 4.8 can mean consistently good or sharply divided, and those are different purchases. Here almost all the low scores are one issue from one year, which is worth knowing before you read them.
From 214 reviews left on this site since 2022
167 reviews — almost all mention the guard specifically
9 reviews, seven of which are about the Windows build in 2025
Asked separately from the star rating
Two months in, it refused a DROP COLUMN and pointed at a reporting query nobody remembered writing. That one event paid for the entire migration off our previous tool. The output is unusually good — it names the file and the line rather than just saying no.
Two releases went by without a Windows binary and we pinned an old version for four months. It is fixed now and the maintainers were honest about it in the issue, but if your team is on Windows, check the release page before committing.
We moved off a tool with its own DSL and immediately deleted a page of internal documentation explaining the DSL. Onboarding a new engineer to migrations is now "these are SQL files".
Works exactly as documented — it only parses SQL and Go — but we are a Django shop so the headline feature is mostly inert for us. Still a good migration runner and we kept it. Would be five stars with a Python parser.
This is a plain link to the project. Stackfinder takes no affiliate revenue and nobody can pay for placement, which is the only reason the comparison above is worth reading.
One entry, compared against the two obvious alternatives — against the vendor’s interest and exactly in the reader’s. No buy button and no affiliate link, which is what makes the comparison credible.
Long-form technical film-making with the profiler open the whole time. 240 hours in the catalogue, no ads on any plan, and about 40 hours of it free without an account.
Six of the fourteen series added this month. Everything is released complete — there is no weekly drip.
What other people are part-way through. Nothing here is sponsored or promoted — it is a count.
4:18 / 12:04
Profiling, end to end
48,219 views · Episode 3 of 7 · Published 4 March
We take a page that feels slow and find out what is actually slow about it — with a profiler open the whole time, and no guessing. The fix at the end is two lines; finding it is the other eleven minutes.
Downloads, ads, subtitles and sharing — in that order, because that is the order they come up. None of them is an upsell.
Every episode, at full quality, on up to four devices. Nothing expires after 48 hours the way it does elsewhere, and a download you started stays valid if your subscription lapses mid-series.
There is one plan and it has never had an ad tier, a "with ads" discount, or a mid-roll. This is a product decision rather than a current promotion.
Human-written, not auto-generated, in six languages. Every episode also has a searchable transcript, which is how most people actually find the bit they wanted to re-watch.
Watch on three screens at once from anywhere. We do not check IP addresses, ask for a verification code, or have an opinion about who is in your household.
No ad tier, no 4K surcharge, no annual lock-in. The thing you can buy is the whole thing.
Longform
About 40 hours are free to watch with no account at all, including the whole first series. Try that before you pay for anything.
What is included
Cancellation, downloads, sharing and price rises — the four places streaming services usually disappoint people.
Something else?
Support is email and it is answered by people who work here, usually within a day and always within three.
Email supportYes, from the account page in two clicks, and it takes effect at the end of the period you have already paid for rather than immediately. No retention flow, no phone call, and no offer of two months free on the way out.
Anything already downloaded stays playable for 30 days from when you downloaded it, including after the subscription ends. Most services revoke on cancellation; we think that is mean, given you paid for the month.
No trial, and the first month is the same price as every other month — but roughly 40 hours of the catalogue is free to watch without an account at all, including the whole first series of Profiling. Watch that and decide.
Three streams, five profiles, and we do not check where they are. No household verification, no travel restrictions, and no "you seem to be away from home" email.
4K HDR where the source allows, adaptive down to about 1.5Mbps. There is no quality tier and no surcharge for 4K — the plan you can buy is the best one there is.
It has once in five years, from £7 to £9, announced two months ahead. If it changes again, existing subscribers keep their price for twelve months and are told before it happens rather than in the receipt.
The catalogue sells itself: rails second, features far down as objection handling, and a real watch screen on the marketing page instead of a device montage.
4:18 / 12:04
Profiling, end to end · Episode 3 of 7
48,219 views · published 4 March · 12 minutes
We take a page that feels slow and find out what is actually slow about it, with a profiler open the whole time and no guessing. The fix at the end is two lines; finding it is the other eleven minutes.
Five chapters across twelve minutes. Selecting one seeks the player; the timecodes are also in the description of every download.
Human-written, timestamped, and searchable with find-in-page once it is open. Six languages are available from the subtitles menu in the player.
00:00 — This page takes about two and a half seconds to become interactive, and the complaint that started this was not a number at all. It was a support message saying the checkout "hangs for a second". That is a better bug report than any score, because it tells you when it happens rather than how much.
00:41 — The first thing I am not going to do is open the profiler on my laptop. My laptop has a fast disk, a warm cache and eleven rows in the table. Everything I would learn here would be about my laptop.
02:10 — So this is a production trace, sampled, from a request that actually took 2.4 seconds. Nothing synthetic. The whole rest of this episode is reading it.
The profiler is open source and the flame graph viewer is the one bundled with it — no paid tooling is used anywhere in this series.
The example service, the failing query and the trace shown at 02:10 are all in a public repository, so you can open the same trace and follow along rather than watch someone else do it.
At 06:12 the narration says the plan "goes quadratic above 400 rows". It is 400 line items per order, not rows in the table — the distinction matters and the on-screen text is right where the voiceover is not.
Corrections are listed here rather than silently re-cut, and the episode is never replaced after publication.
Five other series. Everything is released complete — there is no weekly drip and nothing expires.
The one page in the catalog whose job is to get out of the way — player, chapters, a searchable transcript, and no comments section, because a thread is a moderation commitment rather than a component.
Most about pages of companies our size are written to sound like companies four times our size. This one is not, because the thing we are actually selling — that a named person will answer when reconciliation breaks on the last Friday of the month — stops being true at four times our size.
Each of these costs us something measurable. That is how you can tell they are real commitments rather than values-page furniture.
First
Support tiers exist to protect engineering time, and they work — at the cost of putting a translator between the problem and the person who can solve it. We have not hired a tier one, and the cost of that is real: our response times are slower than a scripted queue. We think the trade is worth it and we would rather say so than quietly rank badly on a metric we chose not to optimise.
Second
We ship on Tuesdays and we ship small. Nobody wants their reconciliation software to have a redesign the week of close, so the interface has moved very little in two years and most of the work has gone under it. This is the least exciting thing about the company and it is the reason customers stay.
Third
We are not SOC 2 Type II yet. We are Type I, the audit window for Type II closes in March, and every enterprise deal we have lost this year we lost on that line. The alternative was to write "SOC 2 compliant" and let the reader assume, which is what most of this market does, and which would have made the sentence you are reading impossible to write.
“They were eighteen months old and pre-Type-II when we signed, which my CFO hated. What sold it was that their founder answered the security questionnaire herself, in full, including the three rows where the answer was no.”
Trusted by support teams at
Three of them, which is what a company of nineteen people can absorb in a quarter. If the list is empty by the time you read this, the speculative address below is read by a person.
Nothing that fits? We read every speculative application — hiring@acme.example.
…which is why the migration queues behind the reporting job rather than failing outright. The lock is held for as long as the report runs, and on a large table that can be several minutes.
The safe version is to set a lock timeout and accept that the migration may need a second pass, rather than letting it wait indefinitely and block every write behind it.
The founder’s letter instead of the evidence wall: a byline and a dateline, for a company whose best asset is still conviction rather than a six-year record — and it ends on the job board, because /team is linked from job posts more often than from sales decks.
That last part is not a perk and we do not present it as one. Every engineer here spends roughly one day in ten answering customers, which is the single biggest reason our roadmap is any good and the single commonest reason someone turns us down.
The shape of the company
A flat company of nineteen has no promotion path, and we would rather you learn that here than in your second year. What it has instead is scope: the person who takes the ledger role owns the ledger, including what it does not do. If you want a title that changes every eighteen months, this is a bad place to want that.
Read the engineering handbookSmall enough that this is the whole company, not a leadership page. If you join engineering, you will have worked directly with everyone on this list inside a month.
Co-founder & CEO
Previously led platform at a payments unicorn; still reviews PRs.
Co-founder & CTO
Wrote the first commit in March 2023 and the incident runbook the week after.
Head of Design
Believes every empty state deserves as much care as the dashboard.
Staff Engineer
Owns the sync engine; measures success in p99s, not features.
Product Manager
Turns forty support tickets a week into a roadmap the team believes in.
Developer Advocate
If you found us through a conference talk in 2026, it was probably his.
Four, with a band on every one. We do not negotiate up from the bottom of the band — the offer is made at the number the interviews supported, and it is the same number regardless of what you are paid now.
Nothing that fits? We read every speculative application — hiring@acme.example.
We open roughly one role a quarter and we read speculative applications before we write the job post. Several of the people above arrived that way.
The team page that is really a recruiting page: it opens on the trade rather than the faces, and puts a salary band on every role — a board with three bands and one “competitive” teaches the reader which is the bad one.
Sorted by how uncomfortable they are, hardest first. Three of the five have answers that will lose us some readers, and those are the three worth reading.
Short answers, because these are short questions. Eighteen of them in total, which is why this page has no search box.
Not here?
The chat below is a person during business hours and a form outside them. Either way it is answered by someone who can change the thing you are asking about.
Ask a humanFourteen days, no card, full product including the integrations. The only thing gated during the trial is bulk export, for the obvious reason.
No. Monthly billing cancels at the end of the period you have paid for. Annual saves seventeen percent and is genuinely refundable pro rata in the first sixty days.
Nine live, three in beta and marked as such in the directory. If yours is not listed, the API is documented and two of the nine were originally built by customers.
Yes, up to twelve entities on the standard plan. Inter-company elimination is manual — it is on the roadmap and it is not built, so do not buy us for it today.
No, and we have no plan to. If self-hosting is a requirement rather than a preference, we are the wrong vendor and the shortlist you want has three other names on it.
Weekdays, 08:00 to 19:00 UTC, with a real person. During month-end close, the 28th to the 3rd, anything marked blocking pages an on-call engineer outside those hours too.
Fifty percent, no paperwork beyond your registration number, and it applies to the annual plan as well.
You do. We do not train anything on it, we do not sell aggregate views of it, and the sub-processor list that can see it is published with thirty days of change notice.
The same list we return on a questionnaire, including the two rows where the answer is not the one you want. Anchor-linkable — send this section, not the page.
Someone is here — about 6 min to a first reply
Answers for this page
Hi — Priya here. I can see order ORD-88410. What went wrong with it?
Priya · 14:02
The second chair arrived with a cracked base plate.
You · 14:03
Sorry about that. I can send a replacement base plate today, or swap the whole chair — the plate is a ten-minute job with the allen key in the box. Which suits you?
Priya · 14:04
Objection-ordered and search-free: the questions that lose deals first, hardest at the top, because a search box over eighteen questions implies a list long enough to get lost in — and its empty state reads as “no refund policy”.
Eleven entities, three currencies, and a 340-tab workbook that one person understood. This is the whole story, including the six weeks where our software was worse than the spreadsheet it replaced.
I would not describe the first two months as a success. What saved it was that they gave me the rule editor instead of asking me to file tickets — I knew why the data was weird and they never could have.
Three acts, and the second one is the reason the third is believable.
Before
Meridian ran eleven entities across three currencies, and the close ran on a shared workbook with 340 tabs that one person understood. Nobody thought this was fine. It had simply never been the most broken thing in any given quarter, which is how a two-day manual process survives six years.
The middle, which did not go well
The first rule set matched 71 percent of lines. The workbook, with a human applying judgement, was effectively matching 96. For about a month the finance team was doing their old job plus reviewing our exceptions, and the honest summary of week six is that they nearly stopped. What changed it was giving them the rule editor rather than filing tickets with us — the controller wrote the seventeen rules that took it to 94 percent herself, in an afternoon, because she was the only person who knew why a supplier sometimes invoiced under a trading name.
After
The number that matters to the CFO is nine days down to four. The number that matters to the controller is that she took a fortnight off in November for the first time since 2021, because the rules are written down and three people can run them.
Twelve months on
Measured over eight consecutive closes rather than the best one, which is the only version of these numbers worth printing.
From 9, measured over 8 consecutive closes
Up from 71% at week 6
Was roughly 2 days of combined effort
Was 1
Against the category
Compared against the 34 other 10-to-15-entity customers we have. One of these three rows does not flatter us and it is the one about time to first value.
Meridian: 4
Meridian: 94%
Meridian: 9 — the slow one
…which is why the migration queues behind the reporting job rather than failing outright. The lock is held for as long as the report runs, and on a large table that can be several minutes.
The safe version is to set a lock timeout and accept that the migration may need a second pass, rather than letting it wait indefinitely and block every write behind it.
The narrative take, for a study found by search rather than forwarded by a champion: the customer’s sentence first, the numbers last, and the six weeks in the middle where the software was losing to a spreadsheet.
Search the situation rather than the industry — most readers arrive with a problem shape (“eleven entities, three currencies”) rather than a category.
5 of 34 projects
Nothing matches all of those.
Remove a filter above — the counts show which one is doing it.
Across the whole set
Including the four where the rollout went badly. Those are published in the same directory rather than in a footnote, and they are filterable like everything else.
Across all 34 published studies
Slowest published: 9 weeks
All four are in this directory
Tell us the entity count, the ledger and the thing that currently takes longest. If we have no comparable customer we will say so rather than send you the closest logo.
A results directory rather than a reading list: search the situation, facet by entity count and ledger, and the aggregate claim sits at the bottom underneath the thirty-four rows it was computed from.
One engagement, run forty-one times. We put the number in the first screen because a productised service that hides its price is just consulting with extra steps.
Fixed. Not a starting point, not a range, and not subject to a scoping call.
See what is includedMiss 90% and week seven costs nothing. Paid out 4 times in 41 engagements.
Tabs rather than a list, because the three audiences for this page — controller, CFO, and the engineer who will inherit it — each need a different third of it.
The schedule
Week 1
2workshops
Your close, mapped as it actually runs rather than as it is documented. Half a day of your controller, and it is the only week that needs meaningful time from you.
Weeks 2–3
1ledger connected
We build the connection and the first rule set against a full historic month. You do nothing this fortnight; we send a Friday note either way.
Week 4
60–75%auto-match, typically
The uncomfortable week. The number is below what your spreadsheet achieves and it is supposed to be — this is the week we hand over the rule editor.
Weeks 5–6
90%+auto-match, target
Your team writes the domain rules; we write the structural ones. Handover, runbook, and one live close with us watching. If we miss 90 percent, week seven is free.
No implementation fee stacked on top, no per-entity charge, no separate line for the runbook.
Close Automation Sprint
50% on signature, 50% after the supervised close. A call first is available and not required.
What is included
“We had two bespoke quotes at roughly the same number, both of which needed three more meetings to firm up. The fixed price was not cheaper. It was six weeks earlier, because there was nothing left to negotiate.”
Trusted by support teams at
Including the paragraph naming when this engagement is the wrong shape, which is the one worth reading if you are above twenty entities.
One productised engagement with the price in the first screen and no mandatory call — a fixed price behind a scoping call is consulting with extra steps. Includes the paragraph naming when it is the wrong shape.
Thirty-one live, seven in beta, five scoped and not started. Search the vendor name — nobody browses one of these.
43 products
Status is on every card and it is the real one — beta means beta, and the planned rows carry the number of customers waiting rather than a quarter we would miss.
General ledger
Two-way. Journals, subsidiaries and the chart of accounts. Conflict resolution is last-write-wins with a review queue.
General ledger
Two-way, including tracking categories. The only connector that supports multi-currency revaluation on our side.
General ledger
Two-way. Dimension mapping is manual on first setup and takes about an hour.
General ledger
Reads only for now. Writing journals is in the March release and the beta is open.
Banking and cards
Payouts, fees and disputes, reconciled to the penny including the FX leg.
Banking and cards
Bank feeds across 11,000 institutions. We do not store credentials; Plaid holds them.
Banking and cards
Card transactions and receipts, with the memo field mapped to your match key.
General ledger
Two-way. Known limitation: classes do not round-trip cleanly and we flag rather than guess.
General ledger
Scoped, not started. Five customers waiting. Realistically second half of 2026.
This form is genuinely how the order gets decided — the five planned connectors above are the five with the most requests. Tell us the vendor and roughly how many entities it covers.
Search-first, with facet counts including the zeroes — nobody browses an integration directory, and “Payroll (0)” answers the question inside the list the reader is already looking at.
NetSuite connector
Read this before the wizard. Two of the five rows below are the ones people are surprised by later — attachments do not sync, and the chart of accounts is read-only in both directions of the word.
$ curl -X POST https://api.acme.example/v1/connections \
-H "Authorization: Bearer $ACME_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"provider": "netsuite",
"account_id": "TSTDRV1234567",
"role_id": "1057",
"direction": "two_way",
"backfill_months": 1,
"on_conflict": "review",
"schedule": "hourly"
}'The five things a NetSuite administrator asks before granting the role. The residency row is the one with a constraint you cannot change later.
Pre-tagged to the NetSuite connector, so the reply does not start by asking which integration. Include the step number and the account id.
The setup guide, not the pitch: what moves and which way, then a five-step wizard — written for the person turning the connector on rather than the one deciding to buy it.
You already own Northwind. You know its weaknesses better than we do, so a feature table is not the argument — what switching costs is. This page leads with the three cases where the answer is don't, then spends the rest on what a migration actually involves.
Showing every row, identical or not.
| Specification | Acme€490/mo | Northwind€350/mo |
|---|---|---|
| Entities included | 12best | 5 |
| Auto-match, median at 12 weeks | 94%best | 89% |
| Rule editor for your team | Included | Support ticket |
| Time to first close | 6 weeks | 3 weeksbest |
| SOC 2 | Type I | Type II |
| Self-hosting | No | Yes, enterprise |
| Data export on cancellation | 90 days, self-serve | 30 days, on request |
Switching
Written in weeks of your controller's time rather than in a sales timeline. The last row is the thing you would lose, and it is the reason two customers went back.
“The parallel month was the part I resented and the part that made it work. We found nine rules that had been quietly wrong in Northwind for two years, and we would never have found them in a straight cutover.”
Trusted by support teams at
The first row is the one we would most like you to read, and it is the one that tells roughly a third of this page's readers to stay put.
We will tell you what fraction converts automatically and how many rules need rewriting, as a number, before you commit to anything. It takes us about a day and there is no call attached to it.
One rival, head to head, for a reader who already owns the competitor — so the argument is what a migration costs, and the page opens by telling roughly a third of its readers to stay where they are.
We tried a dated roadmap for a year and missed enough of it that the page became a liability — every slipped quarter spent credibility the roadmap existed to build. What follows instead is four problems we are working on, stated as problems, plus the four things we have decided not to build. Exactly one date appears below and it is the SOC 2 one.
Each with the constraint that makes it hard, because “in progress” with no constraint attached is how a card sits in a column for three quarters.
Being worked on now
Twelve-entity customers currently drop out of the product at exactly this step and finish the consolidation by hand, which means the close we shortened by four days gets one of them back. The hard part is not the arithmetic — it is that every group nets differently and we have not found a rule shape that covers more than about seventy percent of them.
Being worked on now
A rule set at 94 percent is excellent until an auditor asks why line 4,181 matched, and the current answer is a rule id. We want a sentence. This is mostly a data-modelling problem and slightly a writing problem, and the writing half is the part that has stalled twice.
Next, probably
The connector reads today. Writing journals back needs a different API surface with different governance limits, and the beta has four customers on it. This one has a real chance of moving ahead of the theme above it, because it is well understood and merely laborious.
We want to, and cannot yet
Not a feature, and the single most common reason we lose an enterprise deal. The observation window closes in March and the report follows it. Listed here because "on the roadmap" is how most vendors describe this and we would rather give you the actual month.
Four refusals with reasons. Two of them have cost us named customers, which is noted in the rows rather than left out.
One email per release, written by whoever built the thing. No dates, no teasers, and nothing on the weeks we ship nothing.
Roughly two a month. Unsubscribe link in every one, and it works.
Themes and refusals, no quarters — four problems stated as problems, plus the four things we have decided never to build, which is the section that takes nerve and the one customers actually need.
The full recording, no registration. A controller, a CFO and one of our founders, including the twenty-minute Q&A and the part where our own software is losing to a spreadsheet.
Timestamped, because almost nobody watches fifty-two minutes and the second chapter is the one most people came for.
00:00 – 06:12
The threshold is not size, it is the point at which one person stops being able to hold the whole reconciliation in their head. Priya walks through the 340-tab workbook that ran Meridian for six years and identifies the exact three tabs that made it unmaintainable.
06:12 – 22:40
The longest chapter and the reason most people are here. Live rule-writing against a real ledger, including two rules that turn out to be wrong and the exception queue catching them. Nothing here is pre-baked; the 71-percent number on screen at 14:02 is what it actually was.
22:40 – 31:05
Tobias makes the case for running both systems for one close, which is the advice most people in the chat disagreed with at the time. He also names what it costs: roughly two extra days of controller time.
31:05 – 52:18
Twenty-one minutes, thirty-four questions, and the answers are transcribed further down this page because this chapter is the most useful and the least watchable part of the recording.
Three clips
Each under three minutes and each survives being watched without context — which is the only test that matters for a clip someone pastes into Slack.
“Week six was the week I nearly stopped. The software was matching 71 percent and my spreadsheet was matching 96.”
“The parallel month found nine rules that had been quietly wrong for two years. A straight cutover would have inherited all nine.”
“If your close is under four days already, we will make it slower for about a quarter. That is a real thing and we should say it out loud.”
Thirty-four questions were asked; these are the six that came up more than once. Two answers correct what was said live, and both corrections are marked.
The seventeen-rule starting set Priya used, as a file, plus the complete 52-minute transcript. This is the one thing on the page that asks for an email address.
Two files, one email, and you are not subscribed to anything by submitting this.
The replay, ungated, for the traffic that arrives months after the event — the gate moves to the transcript and the template, where it is a trade rather than a toll.
Not open yet. The queue is ordered, it moves when you invite someone, and the position we show you is the real one — including the part where roughly a third of today's queue will not get in before general availability.
Trusted by teams at
Three places per person who joins with your link, capped at thirty. Forty people are admitted every Tuesday, limited by how many we can support properly rather than by how many we could charge.
Four sentences, so that an invitation forwarded to a colleague arrives with something to read. This is the whole product today, not a subset of a longer page.
A rule editor rather than a support ticket. The people who know why a supplier invoices under three different trading names are the people who should be encoding that, and they do not write SQL.
Consolidated without a workbook. Inter-company elimination is the one part that is still manual, and it will still be manual at launch.
Week six is usually in the sixties, which is below the spreadsheet you are replacing. That dip is normal, it is the hardest part, and we will warn you about it rather than let you discover it.
Ninety days, self-serve, including the match history. Built early and on purpose, because we have been on the other end of a vendor who did not.
A referral queue with a real position: three places per invite, forty admitted a week, and the admission ceiling on the page rather than in the confirmation email — otherwise it is a dark pattern with a progress bar.
Forty-five minutes, twelve seats, screen sharing encouraged. An engineer who works on the matching engine is in every session, and most of them are spent on one person's actual ledger rather than on slides.
Average wait for a first appointment: 2 days
Office hours weekly, a user group monthly, and a clinic during close week that exists because nobody wants to learn a new tool on the second of the month. Eight events, all free, none of them a product demo.
The same three people every week, which is the entire reason anyone comes back. If you have been to office hours twice you have already met all of them.
Co-founder & CEO
Previously led platform at a payments unicorn; still reviews PRs.
Co-founder & CTO
Wrote the first commit in March 2023 and the incident runbook the week after.
Head of Design
Believes every empty state deserves as much care as the dashboard.
Staff Engineer
Owns the sync engine; measures success in p99s, not features.
Product Manager
Turns forty support tickets a week into a roadmap the team believes in.
Developer Advocate
If you found us through a conference talk in 2026, it was probably his.
Still here, just not the pitch — an idle Slack is a worse first impression than a half-full calendar. Counts and reply times are current as of this month.
Quiet on purpose. Roughly forty messages a week, most of them in #rules, and a founder reads all of them.
1,240 members · ~3h median replyWhere the long answers live, because a Slack answer is gone in a fortnight and a forum thread still ranks two years later.
890 threads · searchableThe SDKs and the rule-syntax spec. Issues here get triaged by the engineer who owns that area, not by a bot.
17 repos · 2-day triageFor people who will not install another chat app, which is most finance teams. One email, the good threads, nothing else.
4,100 subscribersThe calendar is the community: the next session bookable in the first screen, the month underneath, and the chat links demoted to a strip — an idle Slack is a worse first impression than a half-full calendar.
No calculator on this page. A slider shows what you could earn from numbers you picked yourself, which is arithmetic rather than evidence — these four figures are last quarter's, including the median rather than only the top.
Sasha's row is here on purpose. Her audience is three-entity bookkeepers, where we are the expensive option, and no programme page that omits that case is telling you how the programme works.
“I write one newsletter a month for finance controllers. Two referrals a quarter, both of which stuck, and the twenty-four month tail means last year’s referrals are still paying this year. It is not a business. It is a good lunch every week.”
“Fractional CFO work. I recommend them to roughly one client in four, and only the multi-entity ones. The programme pays me either way, but the reason I stay is that I have never had to apologise for the recommendation.”
“Honestly below what I hoped. My audience is small-business bookkeepers and most of them have three entities, where Acme is the expensive option. That is my targeting problem, not theirs, and they told me it would happen on the application call.”
“The implementation partner tier is the one worth having. I get a lower commission and a much higher conversion rate, because I am the one doing the migration afterwards.”
Percentages rather than prices — the number under each name is the share of first-year revenue, not a monthly fee. Advocate is applied automatically; you do not have to ask.
The default tier. You send a link, we do everything else.
For partners past €5,000 in lifetime commission. Applied automatically.
For consultants who run the migration themselves. Lower rate, much higher conversion.
Four behaviours and two payment questions. The first two are the ones that end partnerships, and both are stated as absolutes because they are.
Immediate removal and forfeited commission. This is the single commonest reason a partnership ends, and it is not a grey area — if you bid on "Acme" or any close variant, the account closes. We would rather say this before you apply than after a payout.
Not accepted. The traffic converts but it converts people who were already buying, and every one of those is a commission we pay for nothing. There is no version of this where we say yes.
If a referral arrives believing we are SOC 2 Type II or that we self-host, they churn in month two and we both lose. Say what we actually do. The comparison page is deliberately honest so that you can point at it.
Disclose it. Legally required in most of the markets our partners operate in, and separately it is the thing that makes the recommendation worth anything.
Commission is clawed back within the first sixty days and not after. Around one in nine does, which is the same rate as our direct signups.
Monthly, on the 15th, for the month before, once the balance is over €50. Bank transfer or PayPal. We have never missed one and if we do, say so publicly.
A person reads this, usually within two days, and the reply either says yes or says which part of your audience we think is a poor fit. Thirty-one partners out of about ninety applications, and we tell the other fifty-nine why.
Proof before arithmetic — what four named partners actually earned last quarter, including the one for whom it is not working, and no calculator anywhere. A slider shows what you could earn from numbers you picked yourself.
A wall of forty quotes is uniformly impressive and uniformly irrelevant — a CFO does not care what a bookkeeper liked. Pick the row that is you and read the nine or eleven that were written by people in your job.
Week six was the week I nearly stopped. The software was matching 71 percent and my spreadsheet was matching 96.
Twenty-six quotes across three roles. Each group includes the unflattering ones, which is why the counts do not add up to a marketing number.
You will live in this daily and you will write the rules
You are signing this and you will not open it monthly
You will connect it and then hope never to think about it
Controllers and CFOs
5 out of 5
“Week six was the week I nearly stopped. The software was matching 71 percent and my spreadsheet was matching 96. What changed it was being handed the rule editor instead of a support queue — I knew why our suppliers invoice under three trading names and nobody at Acme ever could.”
5 out of 5
“The parallel month found nine rules that had been quietly wrong for two years. I resented every day of it and I would insist on it again.”
3 out of 5
“Our rollout took six months and should have taken two. Two of those months were ours — we changed our chart of accounts mid-migration, which was a stupid thing to do. The other two were theirs, and they have said so publicly, which is more than I expected.”
5 out of 5
“What I actually bought was that three people can now run the close instead of one. The four-days-instead-of-nine is what I put in the board pack; the key-person thing is what kept me awake.”
4 out of 5
“Their retry policy took our NetSuite integration down for forty minutes in November, along with everyone else’s. The post-mortem was published in five days and named the actual cause rather than "an upstream provider". I have been on the other side of that conversation and it usually goes differently.”
5 out of 5
“Two auditors in a row have accepted the match evidence without a follow-up question. That is the entire review.”
All 185 reviews
Pulled from G2 and Capterra rather than collected by us. The four one-star reviews are three about pricing and one about the November outage, and all four are readable at source.
64% — mostly controllers
22% — the commonest complaint is week six
9% — rollouts that overran
3% — all five predate the rule editor
2% — three about pricing, one about the Nov outage
Who these people work for
A single row of logos tells you how many. Grouping tells you whether anyone like you is on it, which is the only question a logo wall is ever really asked.
…which is why the migration queues behind the reporting job rather than failing outright. The lock is held for as long as the report runs, and on a large table that can be several minutes.
The safe version is to set a lock timeout and accept that the migration may need a second pass, rather than letting it wait indefinitely and block every write behind it.
Segmented by who is talking rather than sorted by score, because a wall of forty quotes is uniformly impressive and uniformly irrelevant — with the full rating spread underneath, ones included.
Everything the studio currently has, including what is sold out and what is made to order. Past about ninety pieces the curation is gone whether we admit it or not, so this is a catalogue with filters rather than a sequence with a story.
94 products
8 of 94 projects
One piece, at length
What a detail page holds, using the piece at the top of the grid. The third point is the one people email about six months later.
…which is why the migration queues behind the reporting job rather than failing outright. The lock is held for as long as the report runs, and on a large table that can be several minutes.
The safe version is to set a lock timeout and accept that the migration may need a second pass, rather than letting it wait indefinitely and block every write behind it.
The whole catalogue at once, filterable, with the total stated up front — the opposite trade to the switcher, and it honestly costs ninety images on load rather than one.
Twelve weeks, four people, and a payment provider that could not be touched during peak season. Completed bookings up 22% on flat traffic — and a seat-selection interaction we spent three weeks on that nobody uses.
Meridian Foods
Three points, and the third is the one that should tell you most about how we work.
Four projects in total rather than eleven. A portfolio that scrolls past the fourth is optimising for a reader who left at the second.
Lantern Trust · 2025 · Identity and site
Lantern had grown to forty staff and their brand had grown with it — into something that read like a government department. Donations from individuals had been falling for three years while institutional grants rose, and the board had attributed it to the market. The work was mostly subtraction: a warmer palette, photography of four named people instead of nine hundred beneficiaries, and a donation flow that stopped asking for a title.
Kestrel Software · 2025 · Product design
An internal tool with a total user base of three, which is the kind of project that normally gets a template and a shrug. It was worth doing properly because those three people spent six hours a day in it, and the existing version was costing roughly ninety minutes of that to navigation alone. We rebuilt around keyboard-first navigation and a single command palette.
Harbourside Retail · 2024 · Design system
Four teams, four component libraries, and a genuine question about whether consolidating them was worth a quarter of everyone’s time. We argued it was not, initially, and were overruled. Six months later the honest assessment is that it was worth it for three of the four teams and a waste for the fourth, whose product is different enough that they now maintain a documented fork.
Two sentences is enough to begin. We reply within two days either with questions or with the name of a studio we think fits better — we turn down roughly half of what comes in, usually on timing rather than on fit.
One project per screen, four in total, each naming the constraint it worked around — nobody reads four case studies, and the constraint is the only sentence a competitor cannot copy.