Case Study · Operations Software · 2026

Tropilux went from a pile of forms to one system that runs the whole warehouse.

A custom inventory and operations platform for a company that furnishes and maintains apartment properties — 15 modules, 5 roles, real-time everywhere, built and shipped in about six months.

Modules
15
Modules
User roles
5
User roles
Permission rules
~140
Permission rules
From kickoff to launch
~6 mo
From kickoff to launch

▸ every shelf above is live. scroll to follow one item through the system.▍

[App screenshot]
[App screenshot]
Client

Tropilux, a company that furnishes, maintains and turns over apartment units across multiple properties.

Scope

Discovery, permission design, UX, full-stack build, real-time infrastructure, backups, launch, and a complete user manual.

Outcome

One source of truth for stock, requests, purchasing, returns, tasks and timesheets — used daily by warehouse, office and field staff.

The problem

Before: nobody knew what was where

Tropilux was running a growing multi-property operation on a patchwork that had stopped scaling. Inventory lived in a spreadsheet behind a basic form. Requests came in by text, paper, and whoever caught the warehouse manager first. Every process had its own form — and none of them talked to each other.

ISSUE-01

A warehouse with no map

Items had no assigned shelf. Finding a specific curtain rod or lamp meant walking the aisles.

Cost: Hours lost every week just locating stock.

ISSUE-02

A form for everything, a system for nothing

Requests, intake, timesheets and purchasing each had their own spreadsheet or paper form. Nothing reconciled.

Cost: No single number anyone trusted.

ISSUE-03

Shrinkage and waste

Tools went out to properties and never came back. Damaged items got replaced with no record of the damage. Stock counts drifted from reality with no way to trace why.

Cost: Unexplained losses, month after month.

ISSUE-04

No approvals, no thresholds

Anyone could ask for anything in any quantity. High-value items went out on the same footing as a box of light bulbs.

Cost: Overspend and duplicate orders.

ISSUE-05

Costs nobody could pin down

Supplier prices changed, but the “cost” of what a property used was a guess.

Cost: No way to bill accurately or spot waste.

ISSUE-06

Staff worked around the tools

The old form was clunky on a phone, so field staff skipped it. Data was incomplete because entering it was a chore.

Cost: The system was only as good as the people who bothered to use it.

[Quote from Tropilux about what it was like before — e.g. “We were ordering things we already had because nobody could find them.”]
[Name, Role, Tropilux]
What we built

After: one system, every workflow

We rebuilt the operation as a single web app — installable on a phone, live-updating, and permission-aware down to the individual button. Instead of digitizing the old forms, we redesigned each process around how the warehouse actually works.

  • Start Here
  • Daily Operations
  • Inventory & Stock
  • Warehouse Setup
  • Administration
Main aisle →
↑ Entrance

Hover a room for a summary; select it for the full description.

Follow one item

Follow one item through the system

Here's the life of a single 72-inch curtain rod — from purchase order to shelf to apartment and back. Every step is a screen in the app, and every step leaves a record.

OrderReceiveShelveRequestDispenseReturn
72" Curtain rod · SKU [xxxx]
Purchase order
PO-[n]
24 × curtain rod · $[x] each
Ordered
Audit log
  1. 01PO-[n] placed · 24 units · $[x]
Unit cost
$[x] ea
quoted on PO-[n]
Step 1 — Order

Warehouse drafts a purchase order; Admin reviews and locks in quantity and unit cost.

Step 2 — Receive

The shipment arrives. Each receipt is recorded at its actual cost as its own lot — this is what makes costing honest later.

Step 3 — Shelve

The item gets a shelf. Every item has one. Search shows it; the warehouse walks straight to it.

Step 4 — Request

Field staff at a property open a request: building, unit, room, item, quantity, reason, photo. The app checks stock and warns if this unit just got the same thing.

Step 5 — Dispense

Warehouse approves and hands it out. Stock is deducted from the oldest lot first, so the request is priced at what those specific rods actually cost.

Step 6 — Return

One rod comes back unused. Nothing is credited until Warehouse physically accepts it — then it lands in the Used Pool with a condition and a shelf.

Six screens, one item, a complete trail of who did what and when — and a cost figure that's real.

How it works

Designed around the way a warehouse actually runs

The request lifecycle

  1. REQ-2026-[n] · 01
    Pending
    Stamped
  2. REQ-2026-[n] · 02
    Pending Admin Approval
    Stamped
  3. REQ-2026-[n] · 03
    Approved
    Stamped
  4. REQ-2026-[n] · 04
    Dispensed
    Stamped
  5. REQ-2026-[n] · 05
    Pending Return
    Stamped
  6. REQ-2026-[n] · 06
    Returned
    Closed
RejectedPartial ApprovedPartial Dispensed

Stock only moves at two moments: when the warehouse physically dispenses, and when it physically accepts a return. Nothing is credited back just because someone said it was coming.

Before / After

Supply Request Form
* Required
Name *
Property *
What do you need? *
How many? *
Submit
did u get my form?
what form
Before
New requestREQ-2026-[n]
Building[Property]
Unit214
RoomBedroom
Item72" curtain rod · B4-03
Qty2
ReasonDamaged
⚠ Unit 214 received this item 9 days ago
Submit request
After

Drag the divider, or use the arrow keys.

TaskBeforeAfter
Finding an itemWalk the aislesSearch, see the shelf, go get it
Requesting stockText the managerPick property, unit, room, item; photo optional; instant duplicate warning
High-value itemsSame as everything elseAutomatically routed to admin approval
Tools going outHope they come backFlagged as returnable; tracked until accepted back
Cost of what a property usedA guessPriced from the actual purchase batch (FIFO)
Field staff on a phoneSkipped itInstalled to the home screen, works like an app
Who changed whatNobody knowsEvery quantity change logged with the person and the source record

Roles & permissions

140 permission rules140 on
Signed in as Admin
  • Dashboard
  • Item Requests
  • Inventory
  • Orders
  • Timesheet
  • Users
  • Backups
Curtain rod 72"$[x]
Lamp shade$[x]
Smoke detector$[x]
DispenseApproveRun backup
PermissionAdminOfficeWarehouseStaff
See item costs✓✓——
Approve requests✓✓Partial (first-pass)—
Dispense stock✓—✓—
Receive shipments✓—✓—
Edit inventory✓—Photo & shelf only—
Submit requests✓——✓
Log timesheets✓✓✓✓
Run backups✓———

Roughly 140 individual permission switches sit behind these four columns. Accounts can additionally be scoped to specific properties and inventory categories, so two people with the same role may see different data.

Why the cost is real

Lot 410 @ $[d]
Lot 38 @ $[c]
Lot 26 @ $[b]
Lot 1 · oldest3 @ $[a]
Cost of this dispense
3 × $[a] + 2 × $[b]
Press Dispense 5 to run it.

Oldest batch first. Reported costs stay accurate even as supplier prices move.

Results

What changed

[X]%

reduction in unexplained stock loss

[X] hrs/week

saved locating and reconciling inventory

[X]%

of field staff submitting requests through the app within the first month

[X] / [X]

properties and units managed in one system

Unexplained stock loss, monthly

Sample data · points [n]
App launchM1M2M3M4M5M6M7M8M9M10M11M12

A warehouse you can search.

Every item has a shelf, a photo, a quantity and a history. Low-stock alerts fire before something runs out, not after.

Losses you can trace.

Returnable tools are tracked from dispense to acceptance. Damage is logged with photos and automatically spins up a replacement request and a maintenance task. Every count change names who made it and links to why.

Numbers the office can trust.

FIFO costing means “what did this property use last month” is a real figure. Approval thresholds mean high-value items get a second look. Nightly backups to two destinations mean the data is safe.

[Quote from Tropilux about the result — e.g. “For the first time we can actually see what’s in the building.”]
[Name, Role, Tropilux]
Delivery

How we delivered

  1. #01[Mon YYYY]

    Discovery

    Mapped every existing form, spreadsheet and text-message workflow. Wrote the permission matrix before writing any code.

  2. #02[Mon YYYY]

    Design

    Figma prototype of every module, reviewed with warehouse, office and field staff.

  3. #03[Mon YYYY]

    Build

    Real-time backend, five-role permission system, 15 modules, PWA install flow, photo pipeline, email notifications.

  4. #04[Mon YYYY]

    Hardening

    Role-by-role QA, live-update resilience, dual-destination backups with restore drills.

  5. #05[Mon YYYY]

    Launch & documentation

    Shipped with a complete user manual covering every screen, status and edge case.

Tech & details

Spec sheet

Packing slip
Tropilux Supply · v1
Platform
Web app, installable as a PWA on iOS and Android
Real-time
Persistent connection with automatic reconnect; every list screen live-updates
Permissions
5 roles, ~140 rules, per-user property and category scoping
Costing
FIFO purchase lots; per-dispense pricing at actual batch cost
Imports/Exports
CSV and XLSX in; CSV and PDF out (with price-free versions for non-financial roles)
Photos
Auto-compressed, archived rather than deleted
Notifications
Configurable per-person email grid with live previews
Backups
Nightly, to Google Drive and cloud storage, with pre-restore snapshots
Documentation
Full user manual at manual.tropilux.com
Qty 1 · ShippedPage 1 / 1
Documentation

Every screen, every status, every edge case — documented.

We shipped Tropilux with a complete user manual: sign-in and navigation, all fifteen modules, a roles-at-a-glance reference, and a status glossary. It's public.

PendingPending Admin ApprovalApprovedPartial DispensedPending ReturnedDraftOrderedPartly InNeeds InfoDisposition SuggestedExecutedAging

Running your operation on spreadsheets and group texts?

We build systems like this for companies that have outgrown their tools.