09 /2026
Real projectOblik — a unit's equipment from a phone
An internal app for keeping track of equipment: what there is, where it is, who has it and what is on the way. It works from a phone without a steady connection, and a plain Google Sheet stays the database.
- #Internal tool: all cases with this tag
- #Mobile: all cases with this tag
- #Offline: all cases with this tag
- Product Design
- UX/UI
- Internal Tools
- Frontend
A real internal tool. Names, places, call signs and real screens are not shown; the examples in the case are made up.

- session window: everyone signs out at once
- 4 hsession window: everyone signs out at once
- migrations: the sheet heals itself
- 0migrations: the sheet heals itself
- tests on the accounting arithmetic
- 391tests on the accounting arithmetic
- sheet as the source of truth
- 1sheet as the source of truth
01 /07
Accounting that lives in the field
A unit needs to know what it has, where it is, who holds it, what has left and what has not arrived. Before, this was an Apps Script on top of a spreadsheet: a Google banner at the top, seconds per click and no change history. Who changed what was worked out from screenshots in a chat.
Oblik is a separate app with sign-in by call sign, a log of every change and several workplaces, from the storeroom to the parcel collection point. The spreadsheet stayed where it was and stayed the source of truth.
- Category
- Internal tool · Accounting · Logistics
- Product
- A mobile web app on top of a Google Sheet
- Status
- Live, closed access
- My role
- Product, UX/UI, development
02 /07
The limits the product was built around
The interesting part is not the list of screens but the limits. People use the app on a phone, often offline. Others edit the sheet by hand at the same time and never open the app at all, and that is a deliberate choice, not a stopgap.
So the app could not demand discipline from the sheet: columns get moved, sheets come from older versions, and there is nobody to run migrations.
- 01
Equipment keeper
wants to find an item by serial number or notes in seconds and issue it from a phone.
- 02
Parcel packer
needs two actions and nothing else, without a password to the whole app.
- 03
Commander
wants to see how much is where, what is stuck and who changed what.
03 /07
What the app does
Find and issue
01- Live search across all sheets
- Cards, filters, in-place editing
- «Issue» / «Receive»
- Duplicate serial numbers across sheets
Storage and movement
02- Boxes with photos and QR codes
- Intake, write-off, balance
- Deliveries with weight, date and priority
- A collection point behind its own link
Control
03- Stock checks from a phone
- Handover records
- A «before → after» log with the author
- Dashboard: what is stuck longer than it should be
04 /07
The decisions everything else rests on
People edit the sheet by hand alongside the app. That gives the rules both the interface and the code stand on.
- 01
01. Columns by header, not by number
Someone can swap columns around and the app survives it. Different spellings of «location» lead to the same column.
- 02
02. New things go at the end
New fields are appended at the end of a sheet so they never shift what is already there. If a sheet is shorter than the schema, the headers are filled in on the first read.
- 03
03. A separate place for a separate role
The collection point is not a cut-down interface but its own page with two actions. Only recent entries are visible, nobody can edit others' entries, and no password to the rest of the app is needed.
05 /07
Security without extra steps
A session on the clock
A sign-in lasts until the next four-hour boundary, and everyone signs out at once. A lost phone stops being a key within four hours at most.
A PIN that is not in the sheet
The sheet holds a salted hash, not the PIN: access to the sheet does not let anyone sign in as someone else.
A log of every change
Date, time, sheet, row, «before → after» and who. Arguments about who changed what are over.
06 /07
When there is no connection
The entry has to be made now, network or not.
- Writes that did not go through queue up in the browser and are sent once the network is back.
- Reads fall back to the last good response, so the screen is never empty.
- A stock check saves each item right away: the app can be closed and reopened at the same place.
- Deletions can be undone, and «remove the extra duplicate» can be reversed.
07 /07
What came out
Oblik replaced the Apps Script and the chat screenshots: equipment is found and issued from a phone, parcels are tracked from collection to destination, and every change has an author.
The spreadsheet did not go anywhere: people used to working in it work the way they always have.
Next case · 01 / 09
Product designer workspace
Tell me briefly about the product and the timeline — I'll reply within a day.