Skip to content

One long form is why the device records were empty, so the record became tabs

A small desktop tool for cataloging equipment, where a device record is split into tabs so a partial entry is a normal state, never an abandoned form.

HitchrollBrackenmoor Plant Hire · register on this machine
HitchrollSearch code, model or yardCtrl FOffline · saving hereGPGail PritchardHire office
BH-2741-ATarnhull TB-85 backhoe loader2021 · Wakefield yard, moving to Normanton · Returned from hire · imported 24/08/2026 from row 17 General tab · 1 unsaved changeSave general tab
GeneralEditing · saves on its ownSpecificationNot filled yet · needs the plateReadingsNot filled yet · needs the hour meter1 of 3 tabs
General · the six things known at the desk
Backhoe loaderTypeBH-2741-AAsset codeGenerated · not editableTarnhullMakeTB-85Model2021YearReturnedHire status *NormantonYard *Was Wakefield · lands in site historyBH7 wakeLegacy ref (from the sheet)Kept for lookup, never used as the code
Back from the Ossett job 16/09. Bucket teeth replaced. Going to Normanton for the drainage contract.Notes
Save general tabDiscardSaves this tab only. Specification and Readings are not touched.
WakefieldcurrentNormantonCastleford
Site historyWritten by the Yard field
NormantonFrom 17/09/2026 · lands on saveGP
Wakefield03/06/2026 – 17/09/2026DR
Castleford11/01/2025 – 03/06/2026ML
Normanton14/04/2022 – 11/01/2025GP
Wakefield02/03/2021 – 14/04/2022GP
This record1 of 3 tabs
GeneralFilled · editing now
SpecificationNot filled yet · needs the plate
ReadingsNot filled yet · needs the hour meter
Two unfilled tabs is a normal record, and it's finished when someone gets to the yard.

The shape of the work

Industry

Logistics & Distribution

Duration

5 weeks

Cooperation model

Fixed price

Services
Desktop engineeringData entry design
Integrations
Local databaseApplication packaging and updatesCSV importPrinting
Technologies
ElectronReactViteLocal storageMaterial UI
Team
1 Project lead1 Full-stack engineer1 Product designer

Client name withheld under NDA. Engagement details are shown to the extent our agreement permits.

01

The record is tabs

Each tab saves on its own, so an entry finished over two visits is simply how it works.

The record is a set of tabs that each save independently, so an entry begun at a desk and finished beside the machine two days later is the normal path. Nothing waits on a form-wide submit, which means a lost connection, a closed window or an interruption costs at most the tab currently open.

What shipped
  • Each tab saves on its own; no form-wide submit
  • An entry finished across two visits is the normal path
  • An interruption costs at most the open tab
HitchrollBrackenmoor Plant Hire · register on this machine
HitchrollSearch code, model or yardCtrl FConnectedDRDev RanaYard foreman
BH-2738-CTarnhull TB-85 backhoe loader2021 · Wakefield yard · On hire · serial TB85-21-004417, read from the plate Specification saved 16/09/2026 14:52 · Dev RanaSave specification
GeneralFilledSpecificationFilled beside the machine · 16/09ReadingsNot filled yet · needs the hour meter2 of 3 tabs
Dimensions
Overall length5,860 mm
Overall width2,350 mm
Height to cab2,900 mm
Wheelbase2,170 mm
Max dig depth4,370 mm
Engine
EngineTarnhull 4T34 diesel
Displacement3.4 L
Rated power55 kW
EmissionsStage V
Fuel tank150 L
Hydraulics
PumpVariable, load-sensing
Max flow165 L/min
Relief pressure250 bar
Auxiliary circuitTwo-way
Bucket breakout60.2 kN
Undercarriage
Drive4WD, powershift
Front tyres12.5/80-18
Rear tyres16.9-28
SteeringTwo-wheel
Operating weight8,070 kg
Dimensioned drawingDrawn from the Dimensions table
2,1705,8602,900SIDE · mm · 1:17
Length 5,860 · wheelbase 2,170 · height 2,900One set of figures: change the table and the drawing follows. Width 2,350 mm is not visible side-on.
On screen

The specification tab, filled in when someone had the plate in front of them: dimensions, engine, hydraulics and undercarriage, beside a dimensioned drawing carrying the same length, wheelbase and height figures. It saved on its own; the readings tab is still not filled.

HitchrollBrackenmoor Plant Hire · register on this machine
HitchrollSearch code, model or yardCtrl FOffline · saving here5GPGail PritchardHire office
Register400 devices · opens here, search already focusedAll yardsWakefieldNormantonCastlefordSorted by last edit
Asset codeMachineTypeYardHire statusCompletenessLast edit
BH-2741-ATarnhull TB-85 · 2021Backhoe loaderNormantonAvailable1 of 3 tabsGP 09:19
TH-0932-FVarrow VT-3007 · 2020TelehandlerWakefieldAvailable2 of 3 tabsTA 10:12
DP-0457-JBrindlow SD-6 high-tip · 2019Site dumperWakefieldAvailable1 of 3 tabsML 09:47
BH-2738-CTarnhull TB-85 · 2021Backhoe loaderWakefieldOn hire2 of 3 tabsDR 16/09
MX-1186-TKestrand K18 · 2023Mini excavatorNormantonOn hire3 of 3 tabsDR 15/09
MX-1179-LKestrand K18 · 2022Mini excavatorCastlefordIn workshop2 of 3 tabsTA 14/09
EX-0611-PKestrand K135 · 2018Tracked excavatorNormantonOn hire3 of 3 tabsGP 11/09
RL-0214-COusemark OR-120 twin drum · 2017RollerCastlefordAvailable1 of 3 tabsML 10/09
BH-2716-WVarrow VB-9 · 2019Backhoe loaderCastlefordOn hire3 of 3 tabsDR 09/09
TH-0927-PVarrow VT-3007 · 2021TelehandlerNormantonIn workshop2 of 3 tabsTA 08/09
DP-0449-TBrindlow SD-3 swivel · 2020Site dumperNormantonOn hire1 of 3 tabsML 05/09
MX-1152-NKestrand K08 · 2016Mini excavatorWakefieldAvailable2 of 3 tabsTA 03/09
EX-0598-XTarnhull TX-210 · 2020Tracked excavatorWakefieldOn hire2 of 3 tabsGP 01/09
A record with one tab filled is a record Tab filled Not filled yet, which is allowedShowing 13 of 400
Add a deviceSix questions create it. The rest is filled in by whoever is standing next to it.
1General6 questions · requiredEnough to create the device. About a minute.
Optional · later
2SpecificationOptional · needs the plateSerial, dimensions, engine
3ReadingsOptional · needs the hour meterHours, service, examination
Skipping these doesn't leave a half-finished form. It leaves a device.
Step 1 of 1 required · General
Backhoe loaderWhat is it?TarnhullMakeTB-85Model2022YearCastlefordWhich yard?AvailableHire status
Asset code · generatedBH-2742-K Bravo Hotel · two seven four two · KiloSeriesBH · backhoe loaderLast usedBH-2741-ANext number2742Check letterK
No serial asked for here. It's on the plate, and the Specification tab takes it.
1 of 3 tabson create · a normal recordCancelCreate device
02

General is enough to create

On screen

Creating a device asks six questions and generates the asset code, with its check letter and how it reads over a phone. No serial is asked for, and the two remaining tabs are marked optional on the face of the dialog.

A device exists after one short tab. The detail gets added when someone is standing next to it.

The general tab is short enough to complete in a minute and enough on its own to create the device, so a machine exists in the catalog the moment anyone knows about it. Specification detail (plate readings, serials, ratings) is filled in later by whoever is standing next to it. A record with one tab complete is useful; the old all-or-nothing form produced no record at all.

What shipped
  • One short tab creates the device
  • Detail added by whoever is standing next to the machine
  • A partial record is a useful record
03

Identifiers are generated

Nobody invents a code, so nobody invents two different codes for the same machine.

Identifiers are generated, never typed, so nobody invents a code and nobody invents two different codes for the same machine. That had happened all over the old spreadsheet, where the same asset appeared three times under three conventions. Generated codes are stable, checkable and unambiguous when read aloud over the phone.

What shipped
  • Codes generated, never invented by an operator
  • One machine can't acquire two identifiers
  • Stable and unambiguous when read aloud
HitchrollBrackenmoor Plant Hire · register on this machine
HitchrollSearch code, model or yardCtrl FConnectedGPGail PritchardHire office
plant-register-MASTER-v7.xlsxSheet 1 · 40 columns · 412 rows · brought over in one pass on 24/08/2026 by Gail PritchardExport the 26 rows
Rows read41240 columns each
Imported as they stood386Now devices on the register
Listed with a reason26Not imported, not lost
Codes generated386Legacy refs kept for lookup only

40 columns → 3 tabs

9GeneralType, Make, Model, Year, Yard, Status…
24SpecificationSerial, Length, Engine, Flow, Tyres…
7ReadingsHours, Last service, LOLER due…
9 + 24 + 7 = 40 columns

Why 26 rows were listed

Missing serial14
Unrecognised yard7
Already on the register5
14 + 7 + 526 rows

Rows that couldn't import as they stood

Each listed with its reason
All 26Missing serial · 14Unrecognised yard · 7Already on the register · 5
RowAs typedMachineYardReasonDetail
23TB85/7Tarnhull TB-85Wakefield On registerSame serial as row 17 → BH-2741-A
41K18 (2)Kestrand K18Normanton No serialSerial cell empty
58DUMP 3Brindlow SD-3Pontefract Unknown yardNo yard called Pontefract
66MX08-2Kestrand K08Castleford No serialSerial cell reads “see plate”
90Roller bigOusemark OR-120Cas'ford Unknown yardNot one of the three yards
131TH 3007 no2Varrow VT-3007Normanton On registerSame serial as row 128 → TH-0927-P
188VB9Varrow VB-9Wakefeild Unknown yardSpelt differently from Wakefield
204EX135-AKestrand K135Normanton No serialSerial cell empty
257BACKHOE 7Tarnhull TB-85Wakefield On registerSame serial as row 17 → BH-2741-A
301Mini dig blueKestrand K18Castleford No serialSerial cell reads “TBC”
Rows 17, 23 and 257 are one backhoe under three conventions: row 17 imported, the other two are listed.10 of 26
On screen

The forty-column spreadsheet brought over in one pass. Of 412 rows, 386 imported with generated codes; the 26 that couldn't are listed with the reason, split between a missing serial, an unrecognized yard and a machine already on the register.

HitchrollBrackenmoor Plant Hire · register on this machine
HitchrollSearch code, model or yardCtrl FOffline · saving here7GPGail PritchardHire office
Register401 devices · opens here, search already focusedAll yardsWakefieldNormantonCastlefordSorted by last edit
Asset codeMachineTypeYardHire statusCompletenessLast edit
BH-2742-KTarnhull TB-85 · 2022Backhoe loaderCastlefordAvailable2 of 3 tabsDR 10:38
BH-2741-ATarnhull TB-85 · 2021Backhoe loaderNormantonAvailable1 of 3 tabsGP 09:19
TH-0932-FVarrow VT-3007 · 2020TelehandlerWakefieldAvailable2 of 3 tabsTA 10:12
DP-0457-JBrindlow SD-6 high-tip · 2019Site dumperWakefieldAvailable1 of 3 tabsML 09:47
BH-2738-CTarnhull TB-85 · 2021Backhoe loaderWakefieldOn hire2 of 3 tabsDR 16/09
MX-1186-TKestrand K18 · 2023Mini excavatorNormantonOn hire3 of 3 tabsDR 15/09
MX-1179-LKestrand K18 · 2022Mini excavatorCastlefordIn workshop2 of 3 tabsTA 14/09
EX-0611-PKestrand K135 · 2018Tracked excavatorNormantonOn hire3 of 3 tabsGP 11/09
RL-0214-COusemark OR-120 twin drum · 2017RollerCastlefordAvailable1 of 3 tabsML 10/09
BH-2716-WVarrow VB-9 · 2019Backhoe loaderCastlefordOn hire3 of 3 tabsDR 09/09
TH-0927-PVarrow VT-3007 · 2021TelehandlerNormantonIn workshop2 of 3 tabsTA 08/09
DP-0449-TBrindlow SD-3 swivel · 2020Site dumperNormantonOn hire1 of 3 tabsML 05/09
MX-1152-NKestrand K08 · 2016Mini excavatorWakefieldAvailable2 of 3 tabsTA 03/09
EX-0598-XTarnhull TX-210 · 2020Tracked excavatorWakefieldOn hire2 of 3 tabsGP 01/09
A record with one tab filled is a record Tab filled Not filled yet, which is allowedShowing 14 of 401
On screen

The list is the landing screen, with search focused and matching code, model or yard. A completeness column shows, per row, how many of the record's three tabs are filled.

04

The list is the landing screen

Looking something up is the daily action; cataloging is the occasional one.

The application opens on the list, because looking something up happens daily and cataloging happens occasionally. Search is focused on launch and matches identifier, model and location, so the common case (someone with a machine in front of them and a question) is answered before any navigation happens.

What shipped
  • Opens on the list, with search already focused
  • Matches identifier, model and location together
  • The daily action is the landing screen
05

Desktop, deliberately

The office connection is unreliable, which makes local storage a requirement, not a shortcut.

Local storage on the desktop was a hard requirement: the office connection drops for hours, and a catalog that can't be read during an outage is a catalog nobody relies on. Records live on the machine and export deliberately, so the tool works exactly the same on a bad day as on a good one.

What shipped
  • Local storage because the office connection genuinely drops
  • Readable during an outage, which is exactly when it's needed
  • Export is a deliberate act, with no background sync
HitchrollBrackenmoor Plant Hire · register on this machine
HitchrollSearch code, model or yardCtrl FOffline · saving here7GPGail PritchardHire office
Offline since 09:12. The register is on this machine, so nothing is waiting on it.Edits save here as usual and sit in the queue with the name of whoever made them. Export happens when someone chooses to.17/09/2026 · 10:42

Edit queue · 7 edits

Saved on this machine · waiting for export
TimeByDeviceTabChange
09:18GPGail PritchardHire officeBH-2741-AGeneralYard: Wakefield → NormantonQueued
09:19GPGail PritchardHire officeBH-2741-AGeneralHire status: Returned → AvailableQueued
09:47MLMaureen ListerHire officeDP-0457-JGeneralYard: Castleford → WakefieldQueued
10:05TATom AshworthFitterTH-0932-FReadingsHour meter: 3,418 hQueued
10:12TATom AshworthFitterTH-0932-FReadingsExamination due 02/03/2027Queued
10:26GPGail PritchardHire officeBH-2742-KGeneralCreated from six answersQueued
10:38DRDev RanaYard foremanBH-2742-KSpecificationSerial, engine, hydraulics from plateQueued
Export 7 editsAvailable when the connection is back. Nothing exports in the background.

Still working

Register on this machineReadable and searchable now401 devices
Edits blockedEvery save went through locally0
Queued editsBy 4 people this morning7
Last exportGail Pritchard16/09 17:40

Connection today

ConnectedOffline
07:3009:1210:42
Lookups answered from this machine
Seven saves, none waiting on a network
Queue exports when someone presses it
On screen

Offline since mid-morning, with the register still on the machine. Seven edits sit queued with the name against each one, nothing was blocked, and the export waits for someone to choose it.

Introduction

What we were brought in to do

A plant-hire company needed a catalog of what they own, with enough detail to answer a customer's question. We built a small desktop application: sign in, a device list, and a record split across tabs.

A plant-hire company that needed a catalog of what they own, with enough detail to answer a customer's question on the phone. What they had was a forty-column spreadsheet in which most rows filled in six. The engagement ran five weeks, and the interesting constraint was that the missing detail wasn't missing through neglect.

Full-Stack Engineering

Where the old way broke

The spreadsheet they were using had forty columns, and most rows filled in six of them. A single long form has the same problem: someone starts it, reaches a section they can't answer without walking to the yard, and abandons the whole entry instead of saving what they have.

The detail lives on a plate on the machine, in a yard, and the person entering the record is at a desk. A single long form fails predictably: someone starts an entry, reaches a section they can't answer without walking outside, and abandons the whole thing. That's exactly how a forty-column sheet ends up six columns deep.

We split the record into tabs and let each one stand alone. General details are enough to create the device; the specification tab gets filled in when someone has the plate in front of them. A record with one tab complete is a useful record.

The solution

What we built together

  1. 01

    Split the record into tabs so a partial entry is a normal state

    Tabs were chosen after watching an entry abandoned at the specification section, which is where the person at the desk runs out of what they know.

  2. 02

    Made the general tab alone sufficient to create a device

    Cutting the create step to one tab took two passes. The first attempt still asked for a serial, which is the field that sends someone to the yard.

  3. 03

    Kept it desktop, because the catalog is entered in an office with no reliable connection

    The connection was measured over two weeks before this was decided. It dropped for more than an hour on nine of those days.

  4. 04

    Generated identifiers, so nobody has to invent them

    Identifiers are generated, so one machine can't pick up two codes under two conventions the way it had in the spreadsheet.

  5. 05

    Kept the list the landing screen, since looking something up is the common action

    The application opens on the list with search focused, because looking something up is the daily action and cataloging is the occasional one.

Process

Phase by phase

  1. Phase 1: The List

    Looking Up Is The Common Case

    Built the device list as the landing screen. Cataloging is occasional; answering "what's the lift capacity on the blue one?" is daily.

    • Device List
    • Search
    • Selection
  2. Phase 2: The Tabbed Record

    Each Tab Stands Alone

    Built the record as tabs (general details, specification, and the device's own readings), each savable on its own, so an entry can be finished across two visits.

    • General Tab
    • Specification Tab
    • Per-Tab Saving
  3. Phase 3: Creation

    General Is Enough

    Made creating a device require only the general tab, with identifiers generated automatically, so adding something takes under a minute.

    • Add Device
    • Generated Identifiers
    • Validation
  4. Phase 4: Desktop And Offline

    The Office Has No Signal

    Shipped it as a desktop application with local storage, because the office it's used in has a connection that comes and goes, and a web app would have been unusable there.

    • Desktop Packaging
    • Local Store
    • Sign-In
HitchrollBrackenmoor Plant Hire · register on this machine
HitchrollSearch code, model or yardCtrl FOffline · saving here5TATom AshworthFitter
TH-0932-FVarrow VT-3007 telehandler2020 · Wakefield yard · Available · Specification not filled yet, and it does not need to be for this Readings saved 10:12 · Tom Ashworth · queuedSave readings
GeneralFilledSpecificationNot filled yet · needs the plateReadingsFilled at the yard · today2 of 3 tabs
Current readings
3,418 hHour meterRead today by Tom Ashworth2,950 h · 02/07/2026 · Service ALast service3,450 hNext service due02/03/2027Thorough examination due
Service interval468 hof 500 h used32 h to Service B at 3,450 h
Hour meter historyThis tab saves on its own
DateHoursSinceNoteBy
17/09/20263,418 h+117Back from hire, meter read at the yardTA
28/08/20263,301 h+351Off-hire checkDR
02/07/20262,950 h+163Service ATA
19/05/20262,787 h+275On-hire checkDR
03/03/20262,512 h+122Thorough examination passedTA
14/01/20262,390 h+246Off-hire checkDR
21/10/20252,144 h—Service BTA
On screen

The readings tab for a telehandler: hour meter, service interval and examination date, filled at the yard and saved on its own while the specification tab stays not filled yet.

Operational results after launch

3

Tabs per record

1

Tabs needed to create

0

Identifiers typed by hand

No

Connection required

Tabs per record and tabs needed to create are counts. Identifiers typed by hand is zero: codes are generated. Connection required is no, describing the operating model: records live on the machine and export deliberately.

Client name withheld under NDA. Figures are approximate, drawn from the engagement’s own reporting.

About our collaboration

  • The owner was blunt that his staff weren't the problem, and he was right. We designed for a record finished across two visits instead of hoping for better discipline, and the catalog filled up in two weeks.

    Five weeks, fixed, with the tabbed record settled first, because the whole design follows from making a partial entry a legitimate state. Desktop and local storage were chosen for a stated reason: the office connection drops for hours, and a catalog that's unreadable during an outage is one nobody comes to rely on.

What it settled

What we'd carry into the next one

  • A long form asks for everything at once, and the answer is usually nothing at all.

    A long form asks for everything at the one moment the person can't supply it, and the honest answer to that demand turns out to be nothing at all.

  • Let a partial record be a legitimate record and people will create records.

    Making a partial record legitimate is what produced records. The old sheet was six columns deep because a partial entry felt like a failed one.

  • Generate identifiers. Asking humans to invent them produces duplicates for the same object.

    Human-invented identifiers produce duplicates for one object, which had already happened three times in the spreadsheet under three conventions.

  • An unreliable office connection is a real requirement, and it's often the honest reason to ship a desktop app.

    An unreliable office connection is a genuine requirement, not an excuse, and it's often the honest reason a desktop application is the right shape.

One backhoe, four steps, no connection needed

A record with one tab filled is a record. An edit made offline is still an edit.

Follow a new backhoe from six questions to an exported record while the office is offline, and watch the edit queue and the record’s completeness change at each step. Pick a step, or use the arrow keys once one is focused.

Created. The General tab was enough.

What is it?Backhoe loader
MakeTarnhull
ModelTB-85
Year2022
Which yard?Castleford
Hire statusAvailable

No serial, no plate readings. Those are on the machine in the yard, and asking for them here is what used to stop an entry halfway.

Illustrative timing: each step is replayed at one field or one edit every 420 ms to show the order things happen in, not how long they take. The five edits already queued are the ones made that morning before this device.

Architecture · Electron, React, Material UI

From a saved tab to an export someone chose

Four of the five stages run on the office machine and need no connection. The connection was measured over two weeks before that was decided, and it dropped for more than an hour on nine of those days.

  1. 01 · Source
    One tab saved at the deskEach tab saves on its own with no form-wide submit, so an interruption costs at most the tab that's open.
  2. 02 · Validation
    General is enough to createOne short tab creates the device. The serial, the field that sends someone to the yard, isn't asked for.
  3. 03 · Engine
    Identifier generatorCodes are generated and never typed, so one machine can't acquire two identifiers under two conventions.
  4. 04 · State
    Local store on the machineRecords live on the machine, so the register reads the same during an outage as on a good day.
  5. 05 · Delivery
    Deliberate exportExport is a choice, with no background sync. Queued edits carry the name of whoever made them.
On the office machine Generated, never typed Leaves only when someone exports

What a plant-hire office can't afford to lose

A register that survives a dropped connection, a phone call and an old spreadsheet

The line drops. The edits stay.

Records live on the office machine and each tab saves on its own, so a lost connection, a closed window or an interruption costs at most the tab that's open. Edits wait in a queue with a name against each one until someone chooses to export.

One machine, one code

Asset codes are generated, never typed, so nobody invents one and nobody invents two for the same machine, as had happened in the old spreadsheet with one asset under three conventions. Generated codes are stable, checkable and unambiguous read aloud.

The migration lists what it couldn't bring

The 40-column sheet came over in one pass. Of 412 rows, 386 imported as they stood, and the 26 that could not are listed with the reason (missing serial: 14, unrecognised yard: 7, already on the register: 5) rather than dropped.

Need an equipment register your team will still fill in when the office connection drops? Scope your build in 3 minutes.

Scope your build
Have a project?

Let's talk

Running a large platform, shaping a first MVP, or getting a product ready for a funding round? Tell us where you are. We'll shape the process around it, and stay with you after launch.