Order Tracker
Cisco SE/AM workflow tool
If you've ever worked in sales engineering, you know the drill. An order goes in. Someone asks for a status update. You check your email. You check the portal. You check the spreadsheet that may or may not be current. You ask the AM. The AM asks the partner. Three days later you get an answer that was already stale when it arrived.
That's the problem Order Tracker solves. Not with some revolutionary platform — with a straightforward web app that tracks orders through their lifecycle and makes the current state searchable.
What It Does
The basics: order lifecycle tracking from initial quote through CCW submission, approval, and fulfillment. Search by customer, status, product, or date range. A dashboard that shows pipeline health at a glance — what's stuck, what's moving, what's coming due.
Every status change gets logged with a timestamp and who made it. No more "I thought someone updated that."
The Stack
I made deliberate choices to keep this proportional to the problem:
SQLite over Postgres — This is a team-scale tool. Not an enterprise platform. SQLite with WAL mode handles concurrent reads, requires zero infrastructure, and the entire database is a single file. Backup means copying one file. Recovery means restoring one file.
Zod on every endpoint — Every route input gets validated with a schema before it touches the service layer. No "we'll add validation later." This caught three bugs during development that would have been silent data corruption in production. Three. From validation alone.
No ORM — The queries are straightforward enough that an ORM adds abstraction without value. Raw SQL is readable, debuggable, and doesn't hide the performance problems that ORMs love to create.
Docker for deployment — The target is a Synology NAS behind a reverse proxy. Multi-stage build: React gets built, then served by Express. deploy.sh auto-detects LAN versus WAN connectivity. One command deploys.
Architecture
Service-layer-first. Routes are thin wrappers — try/catch, call service, return response. Business logic lives in services/. Every route file stays under 100 lines. Every service file under 300. Hit the limit? Refactor before adding features.
The frontend is React with a centralized API client and Context for shared state. Single CSS file with domain-prefixed class names. No component library. Not every project needs one.
The Real Point
Order Tracker is a case study in building the right amount of tool for the problem. Not everything needs microservices. Not everything needs a cloud database. Not everything needs a component framework.
Sometimes the right answer is a well-built app that does one thing. SQLite in a Docker container on a NAS, behind a reverse proxy with Let's Encrypt. It's boring. It works. It's been running in production without me touching it.
The spreadsheet approach works until it doesn't — usually when someone asks "what's the status of the order we placed six weeks ago?" and nobody can find the row. That's when you build the tool.
What's the workflow in your organization that everyone knows is broken but nobody's built the replacement for?