SKIP TO CONTENT
Monospace

SERVICE / 05

Internal Tools

The software your team uses all day and nobody demos. Operator consoles, admin surfaces, content pipelines, and the review queues that sit between an automated system and the person accountable for it.

Most operator surfaces are a 2–4 week sprint once the data model exists.

An internal tool is software whose users already know the domain and use it for hours a day. That inverts the usual priorities: density beats whitespace, keyboard paths beat onboarding, and the fastest path to the task beats the most discoverable one. Optimising it like a consumer product makes it worse.

TYPICAL SPRINT
2–4 weeks
FROM
5,000
AUDIT TRAIL
FULL
CMS COST
0

HOW IT RUNS

WEEK 1 WEEK 4
  1. WEEK 1

    Shadow the work

    Watch the job actually being done, across whatever spreadsheets and tabs it currently lives in. The tool follows the work.

  2. WEEK 2

    The one screen

    The surface an operator can live in all day, built against real data from the first version onward.

  3. WEEK 3

    Actions and audit

    Every state change recorded with who did it, when, and why — because somebody eventually asks.

  4. WEEK 4

    Roles and rollout

    Permissions, a review queue for anything needing a second pair of eyes, and the team using it in production.

HOW IT IS BUILT

Built for the person who lives in it
An internal tool is used for hours a day by people who already know the domain. Keyboard paths, dense information, and no onboarding wizard — speed matters more than first-run polish.
Review queues for automated systems
Where AI proposes and a human approves, the approval surface is the product. Saldo's import pipeline and Resolo's escalation queue are both this shape: the automation is only as good as the veto.
Content without a CMS tax
Content can live in the repository as typed files and ship through git, with no database and no admin login to maintain. This site works that way — every section is a YAML file.
Auditable by construction
Who changed what, when, and what it was before. Internal tools touch production data, so the log is not a feature request — it is the difference between a question and an incident.

WHAT YOU GET

  • Operator console scoped to the roles that actually use it
  • Review and approval queues with full audit trail
  • Bulk actions with dry-run previews before anything is written
  • Role-based access wired to the same permission model as the product
  • Keyboard shortcuts for the paths used dozens of times a day
BUILT WITH
  • TypeScript
  • Next.js
  • Postgres
  • Redis
  • YAML/git content

THE ARTIFACT

ops/audit.logTRAIL
$ ops queue:statusjob state ageexport.ledger running 00:04import.csv queued 00:00reconcile done 02:1114:02 operator refund #4471 approved14:02 system limit check passed14:06 operator export ledger requestedretention 90 days, append-only
Every action a person takes is a row. Answering "who changed this" should be a query, not an investigation.

IS THIS THE RIGHT FIT

YES, IF
  • Someone on your team is doing a repetitive job in a spreadsheet
  • An automated system needs a human check before it writes
  • Support or ops keeps asking engineering to run queries
PROBABLY NOT, IF
  • A workflow better solved by an off-the-shelf tool you have not tried yet
  • A dashboard nobody has agreed the metrics for

QUESTIONS

  • Should this be a build or an off-the-shelf tool?

    Off-the-shelf, if one fits — we will say so. Custom is worth it when the tool has to reach into your own data model and permission system, which is exactly where generic admin panels stop being useful.

  • Do internal tools need the same quality bar as customer-facing ones?

    The same engineering bar, a different design bar. Type safety, audit trails, and permissions matter more, because these tools write to production. Visual polish matters less than density and keyboard speed.

  • Can you build the admin side of an existing product?

    Yes, and it is a common starting point. It uses the same schema and permission model as the product, so it is usually the fastest useful thing we can ship into an existing codebase.

Got something in this shape?

A scoped sprint starts at €5,000 and runs two to four weeks. Every engagement is priced before work starts.