The screen your office runs on.
The web back office is a single Angular 21 SPA, deployed per dealer, that every office seat works inside. Dispatch, AR, the controller, the AP clerk, the parts manager, payroll, the GM, the owner. One database per tenant, one S3 bucket per tenant, feature flags per tenant. Eight server-enforced roles. A driver cannot see a ledger card because the API refuses, not because a menu hides it.
Start where every account starts
Account Search is the entry point. Search by name, phone, email, or account number. The system flags duplicates the moment you try to save one.
Quick Create Customer takes a name and a phone. The record is real after step one. From there the Onboarding Wizard layers everything else on in tabs: Service Location, Labels and Taxes and Promotions, Fuel Systems, Service, Holds, Credit Cards. Link Types capture the messy reality: Homeowner, Tenant, Price Matched, Fuel Payment Override, Service Payment Override.
The Customer Dashboard
Per-customer hub. Profile, account number, phone, email, service plans, locations, taxes.
The Overview tab carries the boxes the office actually opens during a phone call. Services Box. Holds (Credit Hold and Service Hold, visible at a glance). Balance with a link straight to the ledger. Quotes and Proposals. Tasks with status, assignee, due date. A Communication Board for pinned notes, edited inline, deleted with an audit log entry behind it.
A customer can have multiple locations. Each location is its own address with its own service plans, taxes, and accounts. Each location carries Labels, Promotions, Taxes, Customers (yes, plural per address), Service Zones, and four note categories: Description, Additional Notes, Driver Alert, Router Note. Google Places handles the geocoding. The lat/long marker on the map is drag-adjustable when Google guesses wrong.
Fuel Systems and Equipment
A system represents a group of equipment that all share the same fill connection. A two-tank manifolded propane setup is one system, not two. A 275-gallon heating oil tank is one system. A four-cylinder propane bank is one system.
Equipment slots into the system: Tank (with Size, Recommended Capacity, Optimum Delivery), Regulator (with expiration date), Filter, Other. Custom Fields hang off the system or the individual piece of equipment.
Each system runs on one of three Window Strategies.
Degree Day
For accounts without a monitor. HDD accumulates against a base temperature, default 65°F. K is HDD per gallon, smoothed across the last three to five deliveries. Gallons used equals HDD accumulated divided by K. When the projected remaining hits the reserve threshold, the system surfaces on the map.
Monitored
For accounts with hardware on the tank. Float, ultrasonic, or pressure. Cellular, WiFi, or LoRa. Read by serial, refreshed on the monitor’s cadence. Stale monitors (48 hours by default) fall back to a degree-day projection so a dead battery never silently strands a customer. Degree day provides a forecast; monitor provides ground truth.
Calendar
For accounts on a fixed cadence. Day-of-week or specific-date triggers. Recurring placement on the route board without recalculation.
Auto Delivery on a system means the strategy posts requests automatically. Off means the office posts them manually. Both end up in the same place.
The Fuel Map, Staging, and Routes
Every delivery request, auto or manual, lands on the Fuel Map as a pin. Filter by Fuel Type, Routing Date, Min and Optimal gallons. Pull a Lasso around a neighborhood and convert the selection into a Staging Load. Assign the load to a Terminal (the pickup or drop-off origin), give it a Load Number, drop it on a Route.
Routes accept drag-and-drop placement, sequence optimization, and reuse from prior days. Once a route runs, the delivery data lands on Fuel > Deliveries, filterable by fuel type and route. Office verifies the gallons, confirms pricing with a checkmark, and the line is ready for billing.
Billing
Invoices
All generated invoices land in one queue before posting. Filter by Date Range, Payment Type, Bill Type, Status, Brand. Batch Post, Email, Export. Once posted, it cannot be undone.
Collections
Posted invoices for customers with a card on file but no autopay. Counters across the top: Reminders Completed, Due, Upcoming, Unpaid. Charge a card, place a Credit Hold, send an email or text, all from the row.
Bank Deposits
One per business day. Receipts categorized Visa/MC/Disc, AMEX, Check/Cash. Allocate cash and checks across unpaid invoices line by line. CSV export at the end.
Subscriptions
Per-customer recurring charges. Type, amount, effective date, expiration, interval.
Service and the Job List
The Job List defaults to the signed-in tech, today. Filter by date, by tech, by status. Cards surface the service address, customer, and Problem / Equipment / Action labels.
Each job opens into Info, Notes, Pictures, Equipment. Equipment splits ATU for heating and ACT for cooling. The editing rule that everyone learns once: start before notes. Notes are read-only until Start stamps a jobStart. End stamps jobEnd, locks Notes, and locks Request Parts and Add Reading. The order is enforced. The audit trail shows it.
Quotes and Proposals
Status flow: Draft, Sent, Signed, Closed. Scopes of work, pricing, materials, optional upsell scopes. PDFs generated and versioned, emailable from the record. Closure reasons capture wins and losses for the report. Approved scopes convert into projects with line items. The visibleAt toggle controls when the proposal appears in the customer portal.
Reports
- Tune Up Search and Tune Up Scheduler. Filter by type, date, plan status. Bulk-add to the ATU or ACT Email List.
- Customer Reach Outs. Notifications sent and scheduled.
- Fuel Delivery Report. Sums deliveries, leftovers, revenue, expected vs delivered, shortages, margin, lowest and highest price. Per row: System, Account, Driver, Load, Stop, Expected and Delivered Gallons, Cans and Additives, Tank Description.
- Aging Report. Status across Active, On Hold, In Collection, Inactive, Terminated. Buckets 0-7, 7-14, 14-28, 28-56, 56+ days. CSV export.
Admin
The Admin Dashboard shows the employee roster for a selected date. Status icons flag no shift, flexible, clocked-in-without-shift, completed, and late (more than three minutes after start).
Branding is the operator’s control panel for multi-brand. Each brand carries its own company name, tagline, address, state license list, HOD license number, light and dark logos, favicon, thumbnails, Oil and Propane Service Plan PDFs, Portal URL, and support email and phone. One operator, separate brands, separate compliance footprints, one back office.
Beyond Branding, Admin holds the configuration the rest of the platform leans on: Custom Fields, Fuels (free-form, with Tank Size Templates), Invoice Codes, Invoice Subtypes, Labels (color-coded by category), Promotions (Flat, Percentage, or Per-Unit; Universal, Countdown, Limited, Volume, Time-Based), Taxes (percentage or per-unit, across fuel sales, services, subscriptions, service plans, propane exchanges), Terminals (onsite or offsite, with lat/long), Vehicles (multi-container, multi-fuel-compatible), and Zones (Degree Day, Brand, Service; drawn on the map or pulled from a city or zip list with a Weather Location Marker).
RBAC and audit
Eight server-side-enforced roles: SuperAdmin, Admin, Accounting, Office, PartsManager, Technician, Driver, Customer. Record-level change logs and view logs across every resource. When a regulator asks who saw what and when, the answer is in the database.
Who uses it
The dispatch desk. The AR team. The controller. The AP clerk. The payroll administrator. The parts manager. The customer-experience lead. The GM, the COO, the owner. IT and SuperAdmins.
Drivers and technicians live in KozyServiceman on iOS. Your customers live in the customer portal.