Nov 2025 – Present · Engineering · Logistics & Ops
StationOn ERP — Fulfillment, HR, and Sales in One System
Instead of buying the systems a fulfillment operation needs, I built them — outbound and inventory, attendance, payroll and contracts, and marketplace operations all run on one system.
Background
Running a fulfillment center, I needed a lot of tools — and nothing off the shelf matched how we actually worked.
Operating the floor myself, I moved each gap into software one at a time, until fulfillment, HR, finance, and sales
all ran on one system. The company runs on it today.
Role
Product, backend, frontend, deployment, and hardware integration — built and operated solo. The real difference from
an off-the-shelf system was being able to ship a change the same day the floor asked for it.
What it does
Fulfillment
- The full flow: cutting prep → machine dispatch → packing → boxing → rack storage → outbound and inbound → returns
- Barcode/QR labels for boxes and packages, with turnover and coverage statistics
- Integration with fabric-cutting machines I built on ESP32 — job dispatch, heartbeat-based offline detection, over-the-air firmware updates
- Courier booking automation: a browser bot issues waybills and returns tracking numbers and PDFs
HR & finance
- Attendance verified by GPS geofence and IP allowlist, with automatic clock-out
- Payroll generation and payslip PDFs, severance calculated from ordinary and average wage, wage ledger
- Leave requests, approvals, balances, and monthly automatic accrual
- E-signature contracts (templates, provider sync, archiving to Google Drive), cash-flow and loan repayment tracking
Sales & catalog
- Marketplace operations — listings, inventory, orders, returns, settlements, inquiries, and 3PL inbound/outbound
- A product detail page generator and AI image generation across several providers
- A separate public SPA for customers to search fabric, running on the same backend
How it was built
- Ruby on Rails 8 API + Vue 3 SPA on PostgreSQL, with Sidekiq for background work
- Multi-tenant, with tenant context carried per request
- N+1 queries are blocked by default; every endpoint declares the preloads it needs
- Role-based permissions, plus a second authentication step for sensitive screens
- The admin app is wrapped with Capacitor for mobile use
- Security scanning, static analysis, tests, and type checks all gate deployment in CI
Scale
- ~274,000 lines of code, 159 tables, 302 migrations
- 107 admin screens and 237 service objects
- 434 logged releases
- In development and production since 2025-11-20 — ~1,429 commits by a single developer