Work / Axis
Axis
One platform for every location: sales, inventory, finance, people, marketing and signage.

The situation
The owner of several Wild Birds Unlimited franchise stores in Colorado was running the business out of spreadsheets, the point-of-sale system's reports, QuickBooks and memory. Every morning started with reconciling yesterday across five systems. Every month ended with the same reports rebuilt by hand.
Nothing on the market connected the POS, the accounting, the suppliers and the staff for a franchise operator, and nothing respected the franchise agreement's rules about customer data. So we built it, for ourselves first, and then for other franchise owners.
What we built
- Sales and analytics: daily close, store performance against goals, planning scenarios, AI-written daily summaries delivered by email.
- Inventory and procurement: nightly stock snapshots, weeks of cover, low-stock alerts, supplier price lists pulled by scraper, CSV and API, reorder suggestions, purchase orders pushed to the POS, cart sync with price-variance review.
- Finance: daily sales reconciliation to QuickBooks per store, bank statement matching, cash-flow forecasting, vendor invoices turned into bills by an email-reading agent, sales tax by jurisdiction.
- People: scheduling, time clock from the POS, pay periods and payroll export, hiring and assessments, training with completion tracking, quarterly incentive calculations.
- Marketing: email campaigns, customer segmentation, direct-mail route selection, events, a brand media library.
- In store: a fleet of connected-TV signage screens, shelf labels generated from the live price list, price alerts after repricing.
- Mobile: Axis Pocket for the phone (scan-to-count inventory, tasks, approvals), an Android app, a Chrome extension that works inside the POS, and Chirp, a store message feed.
- Multi-tenant: separate franchise owners on one platform with per-account configuration and customer data never combined across accounts.


How it is built
Axis talks to the ERPLY point of sale through its API every fifteen minutes for sales, labor and stock, and to QuickBooks Online for bills, invoices and bank matching. Supplier prices come from each supplier's own portal. Every external call goes through rate limiting, backoff and circuit breakers, because the one time we got that wrong it cost us days.
The web application, a separate worker for machine polling, and a scheduler host run on one server with zero-downtime rolling deploys. Monitoring is handled by Watchdog, the tool we built for the purpose.
For the engineer reading along: Python and FastAPI with Jinja2 and HTMX, MySQL (managed), APScheduler on a dedicated host with 198 scheduled jobs, gunicorn behind nginx with per-worker rolling reloads, DigitalOcean Spaces for private files, Playwright for the few supplier portals without an API, Anthropic and Gemini models behind per-tenant gates. 178 routers, 356 service modules, 948 tables, 897 migrations, about 536,000 lines of Python.
What it does today
Counts from the production database and repository, 2026-11-03.
Running it
Deploys roll one web worker at a time, dozens of times a day, while stores are open. Watchdog checks every process, heartbeat, log and certificate, and opens an incident by email when something drifts. Data is backed up by the managed database and verified. The owner is also the largest user, so problems are usually noticed before anyone reports them.
Have something that needs building, or running?
Tell us what you are trying to do. We reply within one business day, and the first conversation is free.