MyBlitz

The platform behind the service.

MyBlitz timeline showing the Standard Slab service tab, four resource rows, and orders as colored blocks across a four-day window. Statuses visible: in progress (purple), not started (cyan), and hidden (grey). The unscheduled-orders sidebar is on the right.
The MyBlitz timeline. Resources on the left, time across the top, orders as colored blocks by status. This is where Blitz admins and clients schedule the work.

MyBlitz is the platform Blitz runs on. Three repos — a React Router 7 frontend, an Express 5 backend on MongoDB, and a CAD viewer published on npm — coordinate the work that turns an incoming order into delivered shop drawings. The platform is live in production, used daily by Blitz admins, clients, and freelancers.

StatusProduction. Used daily.
FrontendReact Router 7 · React 19 · TypeScript 5 · Tailwind CSS 4 · Vite 6
BackendExpress.js 5 · TypeScript 5 · Mongoose 8 · MongoDB · Socket.io
Viewer@karlantoun/legacy (Fabric.js, see /labs/legacy)
IntegrationsAabcoonline · Makana · Zoho Books · Slack · Notion · Google SMTP
Routes~40 frontend pages, ~150 backend endpoints
AuthJWT (password + magic link)
RealtimeSocket.io for in-app notifications and announcements
SourcePrivate
What it does

MyBlitz is not one feature; it’s an operating surface. Six functional layers, each running on the same data model, the same auth, the same audit trail.

Layer 01

Timeline and scheduling

The timeline is the central scheduling interface. Resources sit on the Y-axis, time on the X-axis, orders as colored blocks. Clients drag orders onto resources to schedule them; admins do the same across all resources. Working hours and time zones are first-class concepts — every date calculation respects 7am–3pm UTC, Mon–Fri, with utility functions for adding working hours, finding the next working day, and bringing orders forward when others complete early.

Layer 02

Estimation engine

A formula-driven engine that turns a parameter form into time and cost estimates. Parameters can be user-entered (number, boolean, select) or computed (formula or 2D lookup table). Activities — the workflow steps in detailing — are evaluated in topological order with their formulas referencing parameters and other activities. Each service has four formulas (internal/external × billable/turnaround) that produce the final hour estimates. Formulas are stored as ASTs, parsed once on save, never evaluated as strings. No eval, no surprises.

Layer 03

Billing

Weekly and monthly invoicing, depending on contract. Line items combine completed orders, canceled orders with locked prices, and idle-time hours on private resources. Invoices sync to Zoho Books for delivery and payment tracking. Credit notes handle refunds. The whole cycle is automated — Monday 7am UTC weekly job generates the invoices, Monday 7am UTC monthly job generates the consolidated ones, daily 8am UTC sends overdue reminders at 7/14/30 days past due.

Layer 04

Runs

Automated detailing tools that act as productivity software for freelancers. The first run type is the E-Detailer: upload a Revit file, configure rebar parameters, attach schedule sheets, get back automated detailing. The workflow runs on Makana — an external task orchestration engine — with MyBlitz handling the upload, configuration, polling, and the interactive draw-regions step (built on Legacy).

Layer 05

Notifications

Three channels, two urgency tiers. In-app notifications via Socket.io for “something happened, check it when you’re in the app.” Slack threads for the internal ops team — every order gets a thread that updates as the order progresses. Email for events with financial or deadline implications. User preferences control which optional emails fire; financial and auth emails always send.

Layer 06

Announcements

A separate system from notifications. Admins write feature announcements as containers of one or more features, each with its own category, body, and target roles. Status flows draft → scheduled → published, with a minutely cron picking up the scheduled ones. Published announcements emit a Socket.io event to relevant role rooms, render as a banner below the header, archive on a /whats-new page, and trigger an immediate email to opted-in users.

— How it’s built

MyBlitz follows a strict module pattern across both frontend and backend.

Backend

Each backend module is route → controller → service → repository → model. Routes attach middleware. Controllers parse request and format response. Services hold business logic. Repositories own MongoDB queries. Models declare the Mongoose schema. The pattern is enforced because consistency at the file level is what makes a 30-module codebase navigable.

Frontend

React Router 7 with file-based routing in flat dot-notation: _dash-layout.admin.billing.invoices.$id.tsx becomes /admin/billing/invoices/:id under the dashboard layout. Forms use React Hook Form with Zod schemas. API calls live in typed request modules per domain. Three contexts — Auth, Socket, Notification — hydrate the app on login.

Coordination

The frontend and backend communicate over REST with a uniform { success, data, message, error } envelope. Auth is a Bearer JWT. Realtime is Socket.io with the same JWT for handshake authentication; users join their per-user room and per-role broadcast room on connect. Every external API call (Aabcoonline, Makana, Zoho, Slack) runs through a logged client with retry, backoff, and outgoing-request audit.

The order lifecycle

Orders are the central entity. Every order moves through a state machine — eight statuses, deterministic transitions, an hourly job that auto-starts and auto-submits, side effects per transition. The state machine is the spine of the platform; everything else builds on it.

Statuses: not-estimated, not-scheduled, not-started, in-progress, ready-for-submission, delayed, done, canceled. Each transition is a deliberate action — admin estimation, client scheduling, hourly auto-start at the start date, freelancer submission, hourly auto-submit one working hour before deadline. Cancellation can come from any state with role-based authorization. Refunds on done orders generate credit notes on the next billing cycle.

Where it's going

A redesign of the resource model is in progress — tighter integration of the freelancer side, more automation in routing, monthly billing as the default, a unified rework workflow with a 3-month window. The admin role shifts from active scheduler to overseer of automated flows. Most of the routine work moves under the platform’s hourly and minutely jobs; admin handles the exceptions.

The long-term arc is full migration of order placement and freelancer work onto MyBlitz, with Aabcoonline integration becoming optional rather than required. The platform that started as a timeline-and-billing surface becomes the surface for the whole operation.