MyBlitz
The platform behind the service.
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.
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.
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.
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.
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.
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).
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.
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.
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.
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.
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.
