The Board — every system, one substrate

Everything I’ve built, on one board.

The monogram is a system diagram: nodes, traces, and one live node the signal runs into. This is that diagram at full size — the stack from the top of the page seen from above, with every system I have shipped as a part on it. Hover a part to probe it. Open one to read what was actually decided.

Drawing
The Board
Drawn by
Hitesh Vaghela
Scale
11 yrs : 1 page
Layers
4
Parts
10
Traces
11
Rev
11.0
Fig. 03 — The board: every system, one substrate
The Board A circuit board of every system built, in four layers from interfaces down to infrastructure. Each part is listed in full below the drawing. PIXEL Interfaces LOGIC APIs & services DATA Databases INFRA Infrastructure U1 → U2: components U5 → U1: the floor U1 → U4: requests U2 → U3: rows out U2 → U6: page queries U3 → U6: streamed reads U4 → U7: the contract U6 → U7: indexed joins U8 → U7: guarded writes U7 → U9: migrations XTAL → U5: the clock FE-PLATFORM U1 Frontend platform DATA-GRID U2 Data grid EXPORT-PIPE U3 Export pipeline REST-API U4 API layer CORE-FW U5 Internal framework QUERY-TUNE U6 Query & index layer ERP-CORE U7 ERP core schema INGEST-GUARD U8 Ingestion guard RELEASE U9 Release pipeline The clock XTAL-DSA TO PRODUCTION HV GET /WORK → PRODUCTION
— Probe a part Move over the board, or tab into it

Every part on this board keeps its own numbers, and shows them here.

no signal
Bill of materials

Every part, and what was decided inside it.

U1

Frontend platform

FE-PLATFORM pixel

29 components · 54 server-rendered elements

Adopted as the build standard across product modules, shortening new-screen delivery and retiring duplicated view code.

The problem
Every new screen was written from scratch, so the same view code existed in a dozen slightly different copies — and each copy drifted on its own.
The decision
A platform rather than a style guide. 29 JavaScript components, 54 server-rendered elements, and engines for validation and forms, so a screen is assembled instead of written.
The evidence
Duplicated view code retired by the thousand lines, and a screen that took days now takes a sitting.
U2

Data grid

DATA-GRID pixel

Sorting, filtering, paging, export

The surface other engineers build their screens on, and the one that had to survive the largest tables in the product.

The problem
A grid is where a product's data meets a person, so every performance sin in the stack below shows up in it first.
The decision
Treat it as a layer, not a widget: one grid, with sorting, filtering, paging and export solved once, against a query layer that could answer it.
The evidence
Every module's tables are the same grid, so a fix in it is a fix everywhere.
U3

Export pipeline

EXPORT-PIPE logic

Synchronous and queued paths · constant memory

Streams large exports in constant memory, replacing a path that silently capped at 1,000 rows.

The problem
The export silently capped at 1,000 rows. Nobody was told. People made decisions on a thousand rows believing they had the whole table — which is worse than an export that fails.
The decision
Stream it. Constant memory, two paths — synchronous for what can be answered now, queued for what cannot — and a cap that announces itself if one is ever needed again.
The evidence
A silent truncation became a complete file, and the failures that remained say what went wrong.
U4

API layer

REST-API logic

Token auth · role–permission matrix · audit log

Serves web and mobile clients from one contract, with token auth, a role–permission matrix and audit logging.

The problem
Web and mobile wanted the same data and were growing two different ideas of what it meant.
The decision
One contract for both, with authorisation as a matrix rather than a pile of checks, and an audit log written on the way through instead of reconstructed afterwards.
The evidence
Who did what is a query, not an investigation.
U5

Internal framework

CORE-FW logic

Routing, ORM, auth, components

Adopted across product modules, substantially cutting the boilerplate each one carried.

The problem
Five modules meant five answers to routing, five to authorisation and five to validation — none of them wrong, and no two the same.
The decision
Write the floor once. A framework and a component library that make the ordinary decisions, so each module only spends its code on what makes it different.
The evidence
Boilerplate per module fell far enough that new modules stopped arguing about the basics.
U6

Query & index layer

QUERY-TUNE data

Index design · query rewrites · materialised views

The heaviest report ran 49s at p95 before this layer; latency across the schema fell far enough to absorb sustained data growth on unchanged hardware.

The problem
A correlated subquery over an unindexed column, run once per row, in the report everyone opened first. 49 seconds at p95, and the data was still growing.
The decision
Replace the subquery with an indexed join and batch the N+1 resolvers. Then design the indexes for the queries that actually run, and materialise the report views that could never be fast honestly.
The evidence
Measured at p95, not on a warm cache — and the same hardware absorbed the growth that followed.
U7

ERP core schema

ERP-CORE data

Inventory · order-to-cash · finance

The schema under a multi-warehouse manufacturing business: inventory, order-to-cash and finance, in one model rather than three.

The problem
Inventory, sales and finance each had their own idea of a transaction, and the month-end reconciliation was where the three ideas met.
The decision
One model for the business, not one per department: a single ledger of movement that inventory, order-to-cash and finance all read, so there is nothing to reconcile.
The evidence
The business ran its order-to-cash on this for over five years.
U8

Ingestion guard

INGEST-GUARD data

Four import handlers · per-row errors

A class of silent data-corruption bugs removed from bulk CSV ingestion, by turning dropped rows into per-row actionable errors across all four import handlers.

The problem
Bad rows were dropped quietly. The import reported success, the file looked imported, and the damage surfaced weeks later as numbers nobody could explain.
The decision
A dropped row is an error with a row number and a reason, in all four handlers. An import that partly failed has to say so at the moment it fails.
The evidence
Corruption that used to be discovered became corruption that is refused.
U9

Release pipeline

RELEASE infra

Load-balanced multi-node fleet

Releases across a load-balanced multi-node fleet with zero planned downtime.

The problem
A release meant a window, and a window meant the business stopped while engineering worked.
The decision
Roll through the fleet instead of stopping it: one node at a time behind the balancer, with migrations written so both versions of the code can live with the schema.
The evidence
No planned downtime taken, and the unplanned kind grew rarer rather than quieter.
XTAL

The clock

XTAL-DSA infra

5 years teaching DSA, C/C++, Java

Five years teaching data structures, algorithms, C/C++, Java and computer graphics, and mentoring capstone projects.

The problem
Nothing on this board is here because of a framework. It is here because of what teaching the fundamentals does to how you think about them.
The decision
Explain it until it is simple. Five years of having to answer why, from people with no reason to accept hand-waving, is where the habit of measuring before claiming came from.
The evidence
Every part on this board keeps its own numbers. That started in a classroom.
On the drawing

None of this is decoration. The four bands are the same four layers the homepage stack shows — pixel, logic, data, infrastructure — turned from a side view into a plan view.

The parts sit in the band they belong to, the traces follow the data that actually moves between them, and the routing is computed from the parts list rather than drawn by hand: move a chip four pixels in config/board.json and every trace into it is re-routed, through the clear channel on the band boundary, with the corners cut at 45° the way copper is.

The crystal in the bottom corner is the one part that ships nothing. It is five years of teaching data structures and algorithms, and it is drawn as the clock because that is what it is: the reason every other part on this board keeps its own numbers.

  • Trace Data that moves between two parts
  • Live route One request, end to end, repeating
  • Clock line Where the habits came from
  • Edge connector The board’s one output: production

The same language, smaller, is in the corner of every page on this site. The monogram is this board with four nodes and one live one.

↑↓ navigate ↵ select hiteshvaghela.com