mars-platform

byPriyank Dave

Project Brief — GE Powerzone Service Operations & Supply Chain Platform What this product is An internal web platform for a gas & electrical appliance service business. It sits as a wrapper and automation layer on top of two existing systems the company already lives in: ServiceM8 (field service management — jobs, technicians, scheduling) and Xero (accounting — invoices, payments). The office staff will do their day-to-day work inside this new platform; ServiceM8 continues to act as the underlying data store and technician mobile app, and the two stay in sync both ways. The goal is to replace a lot of manual copy-paste, email chasing, and switching between tabs with a single dashboard that tracks jobs, parts, quotes, suppliers, and payments, and automates follow-ups where a human is currently the glue. Users and roles Admin / office staff (Kylie, Linda, Wendy, Elaine): full access. Create jobs, quote, invoice, manage inventory, run analytics. Technicians (field): light access. Log in to report which parts they used from their van and view their assigned jobs. They do NOT re-enter anything they already put in ServiceM8. Owner / financial view: only Kylie and Elaine should see revenue/financial data. Financial section must be access-controlled because random visitors walk through the office. Core modules to build 1. Unified Operations Dashboard (the home screen) A single-pane-of-glass quick view that mirrors how ServiceM8 feels (so staff don't feel like they've left it), but with much better information density: Jobs by stage/queue: pending quote, P&A requested, quote sent, follow-up 1, follow-up 2, intervention required, parts on order, ready to schedule, awaiting invoice, etc. The queue structure should mirror ServiceM8 queues (currently ~5–8 queues, will grow as automation adds stages). "How long has this job been sitting here?" indicator per job (like the McDonald's drive-thru timer — visual cue when a job is aging out). Counts: jobs outstanding, jobs awaiting parts, quotes awaiting approval, overdue invoices. Jobs comparison by month across years (e.g. Jan 2024 vs Jan 2025 vs Jan 2026). Top clients by month/quarter (spend and job count). Better search than ServiceM8's — must treat multi-word queries as a phrase, not split into individual letters. Search across contacts, jobs, and job notes. Include refinements (date range, stage). Alerts panel: low stock, aged jobs, stuck follow-ups, overdue supplier responses. 2. Job Management List, detail, and create jobs (jobs can be created from the platform OR continue to be created in ServiceM8 — both must sync). Job status lifecycle: Created → Technician Assigned → Diagnosed → Quote Required → Quote Sent → Awaiting Approval → Awaiting Parts → Scheduled → Completed → Invoiced. Jobs can re-enter earlier stages (a completed job can revert to "quote needed" if a second visit finds more parts). Link jobs together by customer / appliance / issue so related jobs are visible to each other (prevents duplicate quoting). Every job has a job ID (format like 260503 — year + sequence). 3. Automated Work Order Ingestion Watches an inbox for incoming work orders (email + PDF attachments). Uses an LLM to extract: customer name & contact, site location, appliance make/model/serial, fault description, requested service. Creates the draft job in ServiceM8 via its API. Office confirms/edits before it goes live. 4. Technician Notes Cleanup (the most important automation per client) Technicians write raw, messy notes in the ServiceM8 "quote description" / "invoice description" field (spelling mistakes, stream-of-consciousness, mixed with internal commentary like who they spoke to). Office staff currently manually copy → clean → paste this into a customer-facing format for every quote and invoice. Trigger: when a technician checks out of a site / signs out of a job. Action: LLM takes the raw note, keeps the original raw version saved in the job's Notes section (audit trail), and writes a cleaned, formatted version back into the quote/invoice description. Format: top-level header with MAKE / MODEL / SERIAL / LOCATION in caps, then body. Preserve data loyalty: do NOT change part numbers the technician quoted — those are ordering-critical (if a tech wrote part X and office orders part X and it's wrong, the tech must not be able to say "I never gave you that number"). Keep the original raw note verbatim for this reason. Idempotency: mark formatted sections with an asterisk delimiter (e.g. *...*) so the cleaner knows what it already touched. On a 2nd or 3rd site visit, append a NEW cleaned block below the old one — do not re-clean and rewrite earlier ones, because the customer may already have received a quote referencing that text. Learns the house style from examples — the client already experimented with this in Claude and it worked. 5. Inventory / Parts Tracking (has to be custom — ServiceM8 doesn't do this properly) Parts catalog: ~16,000 items already, growing daily (new appliance models constantly). Fields per part: part name, internal SKU, supplier SKU(s) (can differ per supplier), optional photo (stored in AWS S3 — separate cost line), quantity, price, minimum-stock threshold. Storage locations: a main Warehouse + one stock location per technician van (Van 1, Van 2, …). Admin can add new storage locations (warehouse 2, van 6, etc.). Transfers: office moves stock Warehouse → Van when scheduling a job. Technicians do not pull stock themselves — the office does it from the admin UI (decided in the call to reduce technician friction). Usage logging: technicians, when they fit parts on a job, log what they used (either via the existing ServiceM8 mobile billing screen that syncs back, or a light mobile view in this new platform — ideally the former to avoid double entry). Low-stock alerts: for warehouse AND per-van (e.g. "Van 2 is down to 2 solenoids, normal load is 4 — alert office to top up"). Parts-to-job mapping: every part consumption maps to a job ID. A single job can have parts from 8+ different suppliers, so one job → many POs is normal. 6. Purchase Orders & Supplier Communication No formal PO system today — orders happen via supplier websites or Linda emailing "spares@hobart" style addresses asking for price & availability. Platform must support a PO record: supplier, parts, job ID reference, expected delivery, price, status. Supplier follow-up automation: once an email is sent to a supplier for P&A (price & availability), if no reply in a set window, auto-send follow-ups. Client wants aggressive cadence ("every 6 hours" was mentioned, realistic default 24h, configurable). After N automated follow-ups (default 3), STOP auto-sending and alert Linda to call. Requires a dedicated Gmail account for the platform so it can send-and-parse supplier replies. Supplier scorecard: average response time, delivery time, pricing consistency. 7. Customer Quote & Estimate Follow-Up Automation Triggered once the quote is manually sent for the first time (office sends the initial one, automation takes over after). Cadence: Day +3: friendly reminder email (+ optional SMS via ServiceM8's built-in SMS feature, using the existing template). Day +7 (or before the 2-week expiry): "your quote is about to expire" reminder. After that: automation stops, creates an "Intervention Required" alert so a human calls the customer. Don't become the "buy my fence" spam bot. Every automated send moves the job into a corresponding ServiceM8 queue (Follow-up 1, Follow-up 2, Intervention Required) so both systems stay visually aligned. Track: sent timestamp, response (approved / rejected / no response), approval history. 8. Payment & Financial Tracking (Xero integration) Paid vs unpaid invoices, overdue list, outstanding balance per customer. Connect to Xero directly (not via ServiceM8's Xero bridge) so we can customize analytics later. Financial section is role-gated — only Kylie/Elaine see dollar values. 9. Cross-Job Parts Reconciliation Engine (prevents duplicate billing) This is a later but critical piece. Real scenario: same customer, same appliance, two open jobs — office quotes the same part twice by accident. Centralized Parts Usage Ledger: ordered / allocated / installed events per part per job. Cross-job matching on (customer, appliance, issue, SKU, part name) using fuzzy/NLP matching (part names aren't standardized). Pre-quote validation: when a quote is being prepared, flag if the part was recently installed on a linked job or is already on another open quote. Show warning, allow manual override with a reason logged for audit. Auto-link related jobs by customer + appliance + issue. 10. Analytics & Reporting Jobs by month, year-over-year comparison. Component usage: most-used parts, high-failure parts, seasonal demand. Repair trends: most common failures by appliance type, repeat-failure patterns, average repair time. Technician efficiency: completion time, time waiting on parts / approvals, quote approval turnaround. Supplier performance (see §6). Top clients.

LoginDashboardJobsSuppliersQuotesAnalyticsInventoryAdminSignup
Login

Comments (0)

No comments yet. Be the first!

System Requirements

System Requirement Document
Page 1 of 7

System Requirements Document (SRD)

Project Name: mars-platform

1. Introduction

The mars-platform is an enterprise-grade web platform designed to streamline operations for a gas and electrical appliance service business. It acts as a wrapper and automation layer over the existing ServiceM8 system (field service management). The platform aims to eliminate manual workflows, reduce errors, and provide a unified dashboard for office staff to manage jobs, quotes, inventory, suppliers, and payments.

This document outlines the system requirements for the mars-platform, tailored to the needs of Priyank Dave's team in India. Locale-specific considerations such as timezone (IST), currency (INR), and user workflows have been incorporated.

Page 2 of 7

2. System Overview

The mars-platform integrates with ServiceM8 via its API to provide a seamless experience for office staff, technicians, and financial managers. It automates repetitive tasks such as work order ingestion, technician note cleanup, inventory tracking, supplier communication, and customer follow-ups.

Key features include:

  • A Unified Operations Dashboard for quick access to job statuses, analytics, and alerts.
  • Two-way synchronization with ServiceM8 to ensure no double entry for technicians or office staff.
  • Role-based access control (RBAC) to protect sensitive financial data.
  • Automation engines for supplier follow-ups, quote reminders, and technician note formatting.
  • Inventory management for tracking parts across warehouses and technician vans.
  • Admin panel for user management, including role assignment and user permissions.

The platform will handle all processes directly within its backend, ensuring tight integration and real-time updates without relying on external microservices.

3. Functional Requirements

Page 3 of 7

As story points:

  • As Admin, I should be able to create, track, and manage jobs with lifecycle stages synced to ServiceM8.
  • As Admin, I should be able to view a unified dashboard with job queues, analytics, and alerts.
  • As Admin, I should be able to manage inventory across warehouses and technician vans, including low-stock alerts.
  • As Admin, I should be able to send and track purchase orders to suppliers, with automated follow-ups.
  • As Admin, I should be able to automate customer quote follow-ups via email and SMS.
  • As Admin, I should be able to reconcile parts usage across jobs to prevent duplicate billing.
  • As Admin, I should be able to clean and format technician notes automatically while preserving raw data.
  • As Admin, I should be able to access analytics for operational efficiency and supplier performance.
  • As Technician, I should be able to view assigned jobs and log parts used via ServiceM8 mobile.
  • As Owner, I should be able to view operational data securely.
  • As Admin, I should be able to selectively re-run SRD regeneration manually to update requirements.
  • As Admin, I should be able to add or remove users and assign roles.
  • As User, I should be able to log in using my email and password.
  • As User, I should be able to sign up with my first name, last name, email, password, and confirm password.

4. User Personas

Admin / Office Staff

  • Primary Users: Kylie, Linda, Wendy, Elaine
  • Responsibilities: Job creation, inventory management, supplier communication, customer follow-ups, analytics, and user management.
  • Access: Full access to all modules except gated financial data.

Technicians

  • Primary Users: Field staff
  • Responsibilities: Logging parts used, viewing assigned jobs.
  • Access: Limited access to job details and inventory logging via ServiceM8 mobile.
Page 4 of 7

Owner / Financial Manager

  • Primary Users: Kylie, Elaine
  • Responsibilities: Reviewing operational analytics and sensitive data.
  • Access: Restricted access to sensitive modules.

5. Visuals Colors and Theme

Color Palette:

  • Background: #F9FAFB (Cloud White)
  • Surface: #FFFFFF (Stellar White)
  • Text: #1A202C (Deep Space Black)
  • Accent: #FF6B35 (Mars Ember Orange)
  • Muted Tones: #CBD5E0 (Nebula Gray)

The palette reflects a professional yet futuristic aesthetic, inspired by the Mars theme and the clean workflows of ServiceM8.

6. Signature Design Concept

Page 5 of 7

Interactive Galaxy Dashboard

The homepage will feature an interactive galaxy map where each star represents a job, queue, or module. Users can zoom in and out to explore clusters of jobs by stage (e.g., pending quote, awaiting parts). Clicking on a star opens a detailed view of the job, including its lifecycle, assigned technician, and linked parts.

Details:

  • Animations: Stars twinkle subtly, and clusters pulse when hovered over.
  • Transitions: Smooth zoom and pan effects when navigating the galaxy.
  • Color Shifts: Stars change color based on job status (e.g., green for completed, red for overdue).
  • Micro-Interactions: Alerts appear as shooting stars, guiding users to urgent tasks.

This design creates an unforgettable first impression while making job management visually intuitive and engaging.

7. Non-Functional Requirements

  • Performance: The platform must handle up to 20,000 API requests/day for ServiceM8 integration.
  • Scalability: Support for growing inventory (~16,000+ items) and expanding job queues.
  • Security: Role-based access control for sensitive operational data.
  • Reliability: Real-time sync with ServiceM8, with reconciliation cron as backup.
  • Usability: Familiar UI mirroring ServiceM8 to ensure adoption by office staff.

8. Tech Stack

Frontend

  • React for Web
Page 6 of 7

Backend

  • Python
  • FastAPI

Database

  • MySQL (preferred for relational data)
  • MongoDB (optional for unstructured data)

AI Models

  • GPT 5.4 for user-friendly responses
  • Claude 4.6 Opas for note cleanup and parsing
  • Google Nano Banana for image generation

AI Tools

  • Litellm for LLM routing
  • Langchain

Orchestration

  • Docker for local development
  • Kubernetes for server-side orchestration
Page 7 of 7

9. Assumptions and Constraints

  • Assumptions:

    • ServiceM8 APIs will remain stable and accessible.
    • Users will provide their own API keys for LLM integrations.
    • Office staff are familiar with ServiceM8 workflows.
  • Constraints:

    • ServiceM8 API rate limit of 20,000 req/day.
    • Webhook payloads from ServiceM8 contain only UUIDs, requiring follow-up GET requests.
    • AWS S3 costs for storing part photos must be monitored.

10. Glossary

  • ServiceM8: Field service management tool used for job scheduling and technician mobile app.
  • LLM: Large Language Model used for automation tasks like note cleanup and parsing.
  • RBAC: Role-Based Access Control for managing user permissions.
  • API: Application Programming Interface for integrating external systems.
  • Webhook: A mechanism for real-time data updates via HTTP callbacks.

This updated SRD incorporates all requested changes, including the removal of the financials page, the addition of an admin panel for user management, and a complete redesign of the inventory page based on the provided reference image. Let me know if further adjustments are needed!

Login design preview
Login: Sign In
Dashboard: View Overview
Jobs: View Job Queue
Jobs: Create Job
Jobs: Manage Lifecycle
Inventory: View Stock
Inventory: Manage Parts
Suppliers: Send Purchase Order
Suppliers: Track Orders
Quotes: View Quotes
Quotes: Send Follow-up
Analytics: View Reports
Admin: Manage Users
Admin: Assign Roles