Foundation + new JMS. The committed build. Replaces the spreadsheet shape and the 5pm transfer at the end of month one.
Landing zone deployed day one. Repo and CI/CD wired. The new JMS rebuilt on TypeScript + React, drag-drop dispatch, SMS plumbing. Supervisors and the office move to the new dispatch surface; field crews still on paper until the field app is added. Nothing else is committed at this point.
Compliance + invoicing · Field experience · Spine A · Spine B · AI layer. Each one stacks on Phase 1. Each one is a separate yes.
$40k → $60k → $75k → $90k → $100k → $140k cumulative if Ridgeline takes all five with the JMS-extension field experience (Option A). Same eleven-module end state at the top. Each unlock has its own value moment named on its own slide; commit at the unlock, not at the program. Ridgeline can stop anywhere it has paid back. Choosing the dedicated mobile rebuild (Option B) adds $15k to every figure from the field experience onward.
Landing zone, repo architecture, RidgeOS React scaffolds. Pre-built substrate, not invention. One platform, one stack.
A green-field rebuild would cost a lot more. PrevAIl brings the platform substrate already written. Landing zone is IaC the day we sign. Repo architecture and CI/CD pipelines are templated. The RidgeOS scaffolds (list views, edit forms, role permissions, audit log) sit inside the same repo, so compliance, fleet and CRM modules build into the RidgeOS web app instead of a separate low-code tool. We start at week three of what would otherwise be a green-field plan.
Azure tenant, networking, security baseline, policy guardrails. Codified. Day one, not week six.
Standing up the Azure platform from scratch is typically 5-6 weeks of work. Our landing zone is an IaC artefact we deploy on day one of the engagement and parameterise to Ridgeline. Subscriptions, network topology, Entra tenant config, policy assignments, security defaults, key vaults. Done.
Monorepo template. CI/CD, code standards, lint, test, deploy, observability hooks. Pre-wired.
Repo scaffold for the bespoke modules. TypeScript + React + Capacitor template. Pre-wired test, lint, build, deploy pipelines. Environment promotion. Branch policies. App Insights wired by default. The new JMS lands into a structure that exists rather than getting invented as it goes.
React scaffolds for the "list + edit form + rules + audit" pattern. Compliance, fleet and CRM build into the RidgeOS web app as new views, not a separate tool.
Used when the compliance, environmental, fleet or CRM unlocks are added on top of Phase 1. Each one starts from a working scaffold we have shipped to other clients, not a blank canvas. Tailoring effort, not build effort. They build into the same RidgeOS codebase, behind the same Entra login, against the same platform database. One platform, one place to look. They do not feature on Phase 1 because Phase 1 doesn't need them.
Azure subscriptions, network topology, Entra config, policy, key vault. Parameterised, deployed.
A green-field platform stand-up is typically 5-6 weeks. Our landing zone deploys on day one, parameterised to Ridgeline's tenant. The platform database (Azure SQL) stands up alongside the JMS in Phase 1, and the same database is extended by each later unlock as new views and tables get added to the same RidgeOS app. The cleanup work the landing zone doesn't include sits inside Phase 1's $40k budget.
Monorepo for the bespoke modules. Pipelines, branch policies, environment promotion, App Insights wired by default.
The new JMS lands into a repo that already knows how to test, build, lint and deploy. No first-fortnight invention of the scaffolding. Conventions, code owners and structured logging baked in. Means the bespoke dev spends weeks one and two on the JMS itself, not the toolchain. App Insights observability rides the same template.
Subscriptions, RBAC, MFA, conditional access, app registrations. All applied by the landing zone.
The landing zone applies the security baseline. Entra app registrations for the new JMS. RBAC roles for office and supervisor. MFA on admin accounts. Conditional access on the dispatch web. Same standard we apply on every tenant.
Drag-drop calendar by truck, driver, day. Pre-allocation queue. Dispatch via Twilio SMS. Lands into the repo scaffold from day one.
The spreadsheet "shape" retired. The 5pm transfer retired. Supervisors move from continuous all-day editing to discrete decision moments. Allocation has no block-at-allocation yet because the compliance slice is an optional later unlock; for now allocation is a faster surface for the same human-judgement decisions.
The current JMS sits on a third-party developer's server, on an old codebase, with no source-of-truth backup Ridgeline controls. Phase 1 retires that.
The current JMS works well for what it does, which is exactly why we're rebuilding it on the same shape. What we are replacing is the substrate. The existing code lives on the original developer's domain, who has stepped away to a full-time job. Ridgeline does not own the code, does not have a clean export of the data, and is one server cancellation away from a very bad week. Phase 1 rebuilds the JMS into Ridgeline's own Azure tenant, on PrevAIl's repo with CI/CD, source control, environment promotion and observability. Same simplicity for the operators, vastly less operational risk for the business.
No field app. No invoicing. No compliance. No CRM. No BI. No AI. Each is its own optional unlock from the next slide onwards.
Phase 1 is deliberately small. It buys Ridgeline the new JMS on a foundation that can absorb anything else later, without committing to anything else now. The case for stopping here is real if the operational-risk reduction plus the spreadsheet retirement is the value Ridgeline wants. Field crew, accounting and compliance carry on as today until Ridgeline chooses to unlock the next step.
Operator master with licences, tickets, expiry dates. Daily alerts. Blocks unsafe allocations in the JMS from this point.
Not the full Module 4 (that lands in the Spine A unlock later). The slice absorbs the manual registers and makes allocation safe. Built into the RidgeOS web app using the React scaffold pattern PrevAIl has shipped before. Tailored, not invented. The new JMS refuses unsafe assignments before they ship because the compliance data lives in the same database.
Supervisor approval surface. Calculates against rate sheet. Variations captured. Fires invoice straight into Xero. Direct-to-PaySync payroll.
Excel proforma macro retired. Real-time labour recovery replaces the 10-12 day P&L lag. Simpro subscription off the books from cutover. PaySync payroll fed by the system. Full bookkeeping retirement (~$70-80k/yr) waits for the field experience unlock to land too, because the docket-to-proforma loop has to run end to end.
Largest single dollar-out moment. Simpro retired ($30k/yr), Jordan's separate PaySync keying loop retired (one supervisor approval now feeds both invoicing and payroll), proforma macro retired, P&L lag closed.
Sequenced before the field experience because the immediate cash hit is bigger and the dependencies are simpler. The field experience unlock then completes the bookkeeping loop and lands the ~$70-80k/yr offshore saving on top. Compliance slice also makes the JMS dispatch surface safe in the same delivery.
+$15k · cum $75k · ~0.5 month
Extend the JMS web portal with touch-first "today's runs for this truck" views. Same URL, same code, same login. Add-to-home-screen PWA gives it an icon. Camera, voice and signature via Safari natively. Truck-scoped Entra login.
How it works. Each truck gets an Entra ID account scoped to the truck. Driver opens the JMS portal from the iPad home screen, authenticates, lands on a touch-optimised "today" view inside the same web app the supervisors use. Camera for photo evidence via native Safari APIs. Voice-to-text via Azure Speech directly. Touch signature pad. Offline via service worker + IndexedDB; syncs on reconnect.
Why this is the easier business. One codebase, one deploy, one URL. Updates ship instantly to every truck the moment they next open the portal, no app-store review. No mobile device management overhead for Ridgeline IT to push updates. Same Entra login as the dispatch surface so support is trivial. Lower build cost, lower run cost, faster iteration. Easier to work, easier to operate.
Trade-offs. Slightly more careful engineering on the offline boundary. Tied to iPad / Safari conventions. Some platform-native features (push notifications, haptics, custom share sheets) need workarounds or sit outside scope.
+$30k · cum $90k · ~1 month
Rebuild the field experience as a native Capacitor app. Submitted to Apple App Store and Google Play. Branded Ridgeline icon on the home screen. Native push, native offline, native camera + voice.
How it works. Capacitor packages the same React UI into a native iOS and Android app. Native camera, native voice (or Azure Speech), native signature, native offline storage. App-store distribution; deployable via Apple Business Manager or Google MDM. Push notifications for new jobs land natively.
Why someone would pick this. Most polished operator experience. Bulletproof offline by default, including in low-coverage areas. Native push notifications mean a new urgent dispatch reaches the driver even if the app is closed. Brand presence on the device home screen.
Trade-offs. $15k more to build than the JMS-extension option. Apple and Google app-store review on every update (days of waiting). MDM deployment overhead for Ridgeline IT. A second build pipeline to maintain even though most logic is shared with the web portal. Slower to iterate when something needs to change.
Competency cross-checks. Inductions. The manual registers fully absorbed. State-by-state competency variances.
Picks up where the compliance slice left off. Full operator master, competency matrix, inductions, role-vs-task cross-checks. State-by-state competency variances ready for the interstate conversation. No more chasing tickets. Built into RidgeOS on the same scaffold as the slice.
EPA-aligned waste register fed automatically from the field docket. Quarterly regulator view.
No double entry. Waste type, weight, source job, disposal site and signed receipt come straight from the field capture. Audit trail on every load. Hard requirement for the tier-one principals tendering. Built into RidgeOS as a new view over the same database.
Truck master, service schedules, defect log, Verizon Connect feed. Service status visible at allocation.
A truck overdue for service cannot be allocated to a 14-hour the major project shift. Defect patterns surface over time. Maintenance supervisor spreadsheet retired. Verizon API integration sized in the working assumptions; mild scope risk worth confirming early. Same RidgeOS web app, new view.
Client master, rate schedules, equipment hire rates, tender pipeline. Built into the RidgeOS web app on the same scaffold as compliance and fleet.
Source of truth for the rate cards the new JMS and the invoicing surface both pull from. WhatsApp-as-intake retired. The rate sheets buried in tender documents and in Sam's head finally have a home. Lives in the same RidgeOS codebase against the same platform database, so JMS and invoicing read it natively without integration. If Ridgeline ever wants a separate marketing/lead-gen CRM later (HubSpot etc) that's a separate conversation; this unlock covers operational CRM only.
Live dashboards over the RidgeOS platform database + Xero. Margin by truck, by customer, by service line. Labour recovery in real time.
Closes the 10-12 day P&L lag. On-time KPI surfaces, which is the sales weapon when crane time costs $10-20k an hour. Underperforming customers, trucks and service lines become visible. The execs' morning scoreboard.
Site collection per business function. Indexed by client, job, doc type. Retention rules automated.
Single place for "where is the signed copy". Findable in an incident. File-share sprawl retired. Lays the data substrate the AI layer (next unlock) needs to reason over.
Tendered rates, variations, scope changes against contracts. Surfaces missed billable variations and at-risk margins.
Reads the contracts in SharePoint. Cross-references against job and invoice data. Flags scope creep, variations that should have been billed, rate drift. The Ridgeline commercial team gets a question-and-answer surface over its own contract estate.
Allocation suggestions from historical patterns. Demand-side forecasting. Capacity stress tests.
The dispatch web in Phase 1 was the operating surface. The AI layer adds a recommendation layer on top. "Tomorrow's allocation, with reasons." "Where are we likely to be capacity-constrained next week." Operator stays in control; the system advises rather than decides.
Operator dictates the job in natural language. The model structures it into fields. Field UX collapses further.
The field app had voice-to-text. This layer turns that into voice-to-structure. Operator says "delivered to site three, customer was happy, two extra waste loads went off to Tip B, supervisor signed". The model maps it to job state, customer sentiment, waste lines and sign-off. Field time drops further.
Private endpoint in Ridgeline's tenant. Data never leaves. Cost stays variable on usage.
Azure Speech is already in if the field app unlock landed (used for voice-to-text). OpenAI joins it for reasoning. Both private endpoints. Variable cost: estimate $10-25k/year combined depending on usage. Defer the precise number until usage data starts.
1.5 months. Spreadsheet shape retired. Supervisors on the new dispatch surface.
The only committed phase. Stands on its own if Ridgeline chooses to stop here.
Biggest single cash-out moment. Built into the RidgeOS web app.
+0.5 month. Simpro off the books, real-time labour recovery, block-at-allocation on licences. ~$100k/yr of direct cash starts coming back once paired with the field experience.
Paper out. Audit trail in. Voice + photo + sign-off. Choice of delivery option.
~0.5 month (A) or ~1 month (B). Option A = extend the JMS web portal so iPads serve the field view from the same URL; recommended for lower TCO and easier operation. Option B = dedicated Capacitor app; for native polish, push and offline guarantees.
Compliance full, EPA waste register, fleet defect log.
+0.5 month. Tendering (the tier-one principals) and interstate expansion become defensible.
Morning scoreboard. WhatsApp intake retired. Document spine for AI.
+0.5 month. The execs get the daily view. Substrate for the AI layer.
Azure OpenAI in Ridgeline's tenant. The moat.
+1.5 months. The defensible differentiator. Bids on insight, not price.
| Unlock | Marginal cost | What it pays back |
|---|---|---|
| Phase 1 · Foundation + JMS | $40k LOCKED | Spreadsheet shape retired. Supervisor time on dispatch decisions, not data entry. |
| + Compliance slice + invoicing | +$20k | Simpro $30k/yr. Jordan's separate PaySync keying loop retires (one approval feeds both invoicing + payroll). Safe allocation. P&L lag closed. |
| + Field experience (Option A: JMS extension on iPad · Option B: dedicated mobile rebuild) | +$15k (A) or +$30k (B) | Paper out. Audit trail in. Customer sign-off digital. Bookkeeping $70-80k/yr loop closes (paired with the invoicing unlock). |
| + Spine A · safety / env / fleet | +$15k | Tender defensibility (the tier-one principals). interstate expansion competency. Fleet defect patterns. |
| + Spine B · CRM / BI / docs | +$10k | The execs' morning scoreboard. WhatsApp intake retired. ~$180k/yr supervisor capacity redirectable. |
| + AI layer | +$40k | Revenue protection on contract variations ($20-50k/yr). interstate-expansion story. Moat. |
| Total if all on | $140k (Option A) / $155k (Option B) | ~$305-348k/yr offsets · most landing by the field experience unlock |
$40k to start. 1.5 months to the new dispatch surface. Add compliance + invoicing then the field experience in the next 1-1.5 months and the cash offsets are already live.
The natural sequence: Phase 1 → compliance + invoicing → field experience (Option A). That gets Ridgeline to ~$75k total spend with the bulk of the direct cash offsets already landing. Spine A, Spine B and the AI layer then become genuine value choices, not assumptions.
Each unlock is a yes-or-no at its own moment. Cancel anytime there isn't payback.
Phase 1 stands on its own. Field app + compliance + invoicing have direct cash paybacks that show up inside a quarter. Spine A and B are tender + scoreboard plays. AI is the moat and the interstate-expansion story. Each conversation is its own.
Data cleanup beyond scoped. Verizon API tighter than assumed. AI agent compression below the doubling we assume.
The accelerators take the platform risk off the table. Residual risk sits in data cleanup, third-party API surface and AI compression rate. Each is tracked in week one. If any one materially shifts, re-baseline at the unlock rather than absorbing the slip.