MageTech ServiceFlow
MageTech ServiceFlow
Brand: MageTech Solutions
SKU: MTS-SERVICEFLOW-001
Never miss a service. Never miss a follow-up. The all-in-one platform for AC, RO, appliance, pest-control, solar and maintenance businesses. Track every customer and asset, schedule and dispatch jobs, and let ServiceFlow automatically remind and follow up — so repeat work never slips away.
MageTech ServiceFlow
Never Miss a Service. Never Miss a Follow-up.
What is ServiceFlow?
An all-in-one platform for AC, RO, appliance, pest-control, solar and maintenance businesses. Track every customer and asset, schedule and dispatch jobs, and let ServiceFlow automatically remind and follow up — so repeat work never slips away.
Positioning: "Never Miss a Service. Never Miss a Follow-up."
Section 01 · Commercial Proposition
Customers don't care about the technology stack. They care about one thing: "Will this help me get more repeat service jobs and stop losing customers because we forgot to follow up?"
1
Customer2
Equipment3
Service4
Reminder5
Follow-up6
Repeat ServiceThis is the cycle that matters for an AC, RO, appliance, pest-control, solar or maintenance company. Every service job the platform records automatically schedules the next service reminder and a post-service follow-up — building a self-replenishing pipeline of repeat revenue.
Section 02 · Stack
A modern, containerised stack: Java 21 + Spring Boot on the backend, Next.js 16 on the frontend, PostgreSQL with row-level security for hard tenant isolation, Redis for performance and RabbitMQ for asynchronous notifications and reminders.
| Layer | Technology | Notes |
|---|---|---|
| Backend runtime | Spring Boot 3.4.8 · Java 21 | REST API under /api context path; versioned resources under /api/v1 |
| Backend build | Maven (wrapper) · MapStruct 1.6.3 · Lombok | DTO mapping via MapStruct; boilerplate via Lombok |
| Security | Spring Security 6 · jjwt 0.12.6 · bcrypt | JWT access + refresh tokens (HS256), bcrypt hashing, RBAC |
| Database | PostgreSQL 16 · Spring Data JPA (Hibernate) · Flyway | Flyway migrations V1–V17 + dev seeds V901–V907; shared-schema multi-tenancy with RLS |
| Cache & rate limit | Redis 7 | Token denylist, rate limiting (in-memory fallback), hot-read caching |
| Messaging | RabbitMQ 3.13 (AMQP) | Async notification & reminder delivery (dead-letter handling planned) |
| Spring Mail (SMTP) | Verification / reset / reminder emails; MailHog in dev; log-mode when app.mail.enabled=false | |
| Payments | Razorpay (REST) | Subscriptions API + webhooks; simulated mode by default in dev, live via env config |
| SMS | Twilio (opt-in) | Activated with SMS_PROVIDER=twilio; fails open to console in dev |
| Frontend | Next.js 16 · React 19 · TypeScript 5.7 | Standalone build served by nginx; app-router pages, server components |
| Frontend UI | Tailwind CSS 4 · TanStack Query 5 | Corporate indigo design system; server-state caching for API data |
| API docs | springdoc-openapi 2.6 | Swagger UI (dev) at /api/swagger-ui.html, OpenAPI JSON at /api/v3/api-docs |
| Testing | JUnit 5 · Testcontainers PostgreSQL · H2 · Vitest · RTL | Backend tests on H2 (PostgreSQL mode) + Testcontainers; frontend unit tests in Vitest |
| Delivery | Docker Compose · GitHub Actions · GHCR · AWS EC2 | Local stack in docker-compose.yml; production stack via docker-compose.prod.yml on a single EC2 host (Phase 1) |
Section 03 · Architecture
Deployment overview (Phase 1): Vercel/nginx (Next.js 16) → HTTPS /api/* → AWS EC2 (Nginx/ALB, Spring Boot) → PostgreSQL 16, Redis 7, RabbitMQ 3.13.
Request
–> Nginx/ALB –> /api –> Spring Security (JWT) –> TenantFilter | set TenantContext
v
Controller –> Service –> Repository –> TenantAwareDataSource
| SET app.current_tenant=<id>
v
PostgreSQL 16 with FORCE ROW LEVEL SECURITY
Every tenant-scoped query is filtered twice: the application layers its tenant_id predicates on index-aligned (tenant_id, …) indexes, and PostgreSQL row-level security enforces the same boundary at the database — so a buggy query can never leak cross-tenant data.
Asynchronous notifications (RabbitMQ): Publisher (job status change, follow-up, subscription event) → publish JSON NotificationMessage → serviceflow.notification.exchange (direct, durable) → routing key serviceflow.notification.send → serviceflow.notification.queue → @RabbitListener consumer → persist IN_APP notification and fan out to EMAIL / SMS / WhatsApp providers. JSON via Jackson2JsonMessageConverter; poison-message dead-lettering planned for Phase 2. Redis supports rate limiting, the JWT denylist and hot dashboard reads.
Reminder engine: per-tenant fixed-delay scheduler (Spring @Scheduled) scans equipment.next_service_date − rule.days_before <= today; reminder_rules (service_category, days_before INT[], channels); dedupe via reminder_logs unique (tenant, equipment, rule, channel, days_before); insert reminder_log (PENDING) → publish to RabbitMQ → deliver channel (IN_APP · EMAIL · SMS) → mark SENT / FAILED (+ error_message).
Module boundaries (bounded contexts): com.magetech.serviceflow — config (Security, Web MVC, Redis, RabbitMQ, OpenAPI, JPA auditing, Jackson) · shared (ApiResponse/PageResponse, BaseEntity, exception handling) · tenant (TenantContext ThreadLocal, filter, interceptor, data source decorator) · auth (login/register/refresh/logout, JWT provider & filter) · user (users, Role enum OWNER/MANAGER/TECHNICIAN). Domain modules: customer, equipment, technician, job, followup, reminder, notification, subscription.
Security model: short-lived accessToken (15 min, JWT HS256) + long-lived refreshToken (7 days) stored hashed (SHA-256) in refresh_tokens with rotation & revocation; bcrypt passwords; single-use 2-hour password-reset token; RBAC (OWNER everything + billing/settings, MANAGER operations, TECHNICIAN assigned jobs); anti-enumeration on forgot-password; Redis rate limiting auth:login:<email>:<ip> (5/15min) and auth:forgot:<email> (3/hour) with in-memory fallback; Bearer-only auth (no cookies) so CSRF disabled; CORS permissive in dev, restricted in prod; RFC-7807-style 401s via RestAuthenticationEntryPoint.
Scalability roadmap: extract auth-service / notification-service / ai-service when load justifies (monolith-by-module keeps costs low now) · Kafka replaces RabbitMQ for higher-volume eventing (exchange abstraction keeps producers unchanged) · Kubernetes with Helm + HPA once the single EC2 host saturates (RLS stays the isolation invariant) · S3 for customer documents & job photos via pre-signed URLs · read-only replicas for reporting with tenant-aware routing intact.
Section 04 · Multi-tenancy & Data Isolation
Model: shared schema + tenant_id column. Every tenant-scoped table carries a tenant_id UUID and a composite (tenant_id, …) index. One PostgreSQL cluster serves all tenants — the most cost-efficient model for Phase 1 — while isolation is enforced at two independent layers:
Layer 1 — Application context
TenantFilter resolves the tenant at request entry (X-Tenant-ID header, falling back to the authenticated user's tenant) and stores it in TenantContext, a ThreadLocal<UUID>. TenantInterceptor always clears the context after the request so async work must propagate the tenant explicitly.
Layer 2 — Connection binding
TenantAwareDataSource decorates the connection pool; every getConnection() returns a TenantAwareConnection that runs SET app.current_tenant = '<tenantId>' on acquisition and resets it when returned to the pool.
Layer 3 — PostgreSQL RLS
Each tenant-scoped table is protected with ENABLE + FORCE ROW LEVEL SECURITY and a single tenant_isolation policy — even the database owner cannot read or write rows outside the current tenant.
-- applied to every tenant-scoped table (V14)
ALTER TABLE service_jobs ENABLE ROW LEVEL SECURITY;
ALTER TABLE service_jobs FORCE ROW LEVEL SECURITY;
CREATE POLICY tenant_isolation ON service_jobs
FOR ALL
USING (tenant_id::text = current_setting('app.current_tenant', true))
WITH CHECK (tenant_id::text = current_setting('app.current_tenant', true));
RLS protected: customers, equipment, technicians, service jobs, follow-ups, reminder rules/logs, notifications, organizations, subscriptions. Not protected (no tenant context): tenants (registry), refresh_tokens (auth). This design scales — moving to Kubernetes or Kafka later does not touch tenancy; RLS stays the isolation invariant.
Section 05 · Feature Catalogue
| Feature area | Status | Highlights |
|---|---|---|
| Roles & Access Control | Implemented | OWNER / MANAGER / TECHNICIAN; JWT access (15 min) + hashed refresh (7 days, rotation & revocation); bcrypt; email verification; 2-hour password reset; no enumeration; Redis rate limiting on login/forgot. |
| Customer Management | Implemented | Full CRUD with profile, tags; paginated search by query (?q=) and city filter; duplicate-email guard per tenant. |
| Equipment / Asset Management | Implemented | Asset type, brand, model, serial, installation & warranty dates; serviceFrequencyMonths drives automatic nextServiceDate feeding the reminder engine; lifecycle status with per-asset notes. |
| Service Management | Implemented | Human-readable sequential jobNumber; status flow NEW → SCHEDULED → IN_PROGRESS → COMPLETED | CANCELLED; technician assignment; priority; parts (JSON), labour, total and payment status; on completion sets completedAt and computes the next service date. |
| Technician Management | Implemented | Skills, service categories, weekly availability (JSON), status; optional TECHNICIAN user account link; filter by service category for smart dispatching. |
| Automatic Service Reminders | Implemented SMS partial | Per-tenant reminder_rules with days_before thresholds (30/15/7/1) and channels; idempotent background scheduler (dedupe index on reminder_logs); channels IN_APP, EMAIL, SMS (Twilio, opt-in); audited SENT/FAILED. |
| Follow-Up Management | Implemented | Follow-ups with assignee, date/time, notes, priority and opt-in reminders; daily scheduler (FOLLOWUP_CRON, default 07:00) raises DUE/OVERDUE once per follow-up. |
| Dashboard | Implemented | Live summary: open jobs, jobs today / this week, active customers & equipment, due follow-ups, upcoming reminders, revenue this month, unpaid revenue, top technician; MoM revenue comparison. |
| Calendar | Implemented | Date-based service-job planning view with day-level scheduling and status colouring. |
| Notifications | Implemented | In-app inbox delivered asynchronously via RabbitMQ (job completed, follow-up due/overdue, reminders); event types JOB_COMPLETED, FOLLOW_UP_SCHEDULED, FOLLOW_UP_DUE, FOLLOW_UP_OVERDUE, REMINDER; mark one or all read. |
| Reports & Analytics | Partial | Reports page with revenue and service-volume metrics; custom report builders, exports, churn-risk scoring and predictive scheduling are next milestone. |
| Subscription & SaaS Billing | Implemented Live payments optional | Server-enforced limits (FREE 3/100/5, STARTER 5/1000/10, PROFESSIONAL 10/5000/25, BUSINESS 50/10000/100); Razorpay simulated by default (RAZORPAY_ENABLED=false activates plans instantly), live via signature-verified webhooks (subscription.activated / charged / payment.captured); HMAC-SHA256 verification of raw body. |
| AI Features | Planned | Predictive service scheduling, churn-risk scoring and auto-generated service notes; monthly AI credits in Professional / Business, overage billed separately. |
| API & Integration Layer | Implemented Advanced planned | Versioned REST API at /api/v1 with ApiResponse<T> / PageResponse<T> envelopes; OpenAPI + Swagger UI (dev); Bearer-token auth, tenant-aware routing, pagination. Roadmap: API keys, webhooks, WhatsApp automation, ERP/accounting integration, customer portal. |
Section 06 · Commercial — India Pricing (V1)
Positioning: "Never Miss a Service. Never Miss a Follow-up." The Professional plan is the featured offer. Before finalising any price, per-tenant infrastructure + WhatsApp/SMS + email + AI + support cost should be calculated to confirm gross margin.
| Plan | Suitable for | Suggested price (monthly) |
|---|---|---|
| Starter | Small service business, 1–3 technicians | ₹999 |
| Professional ★ | Growing business, 4–10 technicians | ₹2,499 |
| Business | 10–25 technicians / multiple teams | ₹4,999 |
| Enterprise | Larger / multi-branch companies | Custom (from ≈ ₹9,999) |
Starter (₹999): 1 workspace, up to 3 users, customer management, equipment/asset management, service jobs, basic technician management, follow-ups, service reminders, dashboard & basic reports. Professional (₹2,499 ★): everything in Starter + up to 10 users, advanced scheduling/calendar, recurring services, automated reminders, WhatsApp/email integrations, technician mobile interface, invoices & payments, advanced reports, more automation. Business (₹4,999): everything in Professional + up to 25 users, multiple branches, advanced roles & permissions, advanced analytics, workflow automation, API access & webhooks, priority support, AI features with usage limits. Enterprise (₹9,999+/month): multi-branch, custom user limits & workflows, dedicated onboarding, custom reports, SLA, optional dedicated infrastructure, custom AI/automation. One-time implementation / onboarding fee always applies. No base subscription includes unlimited usage.
Section 07 · Billing — Annual Plans
Roughly 10–20% below monthly. Early-adopter annual plan rather than permanently discounting the product.
| Plan | Monthly ₹ | Yearly at 12 × monthly | Annual — 10% off | Annual — 20% off |
|---|---|---|---|---|
| Starter | ₹999 | ₹11,988 | ≈ ₹10,789 | ≈ ₹9,590 |
| Professional | ₹2,499 | ₹29,988 | ≈ ₹26,989 | ≈ ₹23,990 |
| Business | ₹4,999 | ₹59,988 | ≈ ₹53,989 | ≈ ₹47,990 |
| Enterprise | Custom quote (annual pricing negotiated in the contract) | |||
Section 08 · Implementation Fees & Add-ons
Implementation is never free for business customers. Fees cover business configuration, user setup, service categories, reminder configuration, data import, initial training, channel configuration and basic customisation.
| Plan | One-time setup estimate | Notes |
|---|---|---|
| Starter | ₹2,500 – ₹5,000 | Standard self-setup + guided onboarding |
| Professional | ₹5,000 – ₹15,000 | Includes data import & channel configuration |
| Business | ₹15,000 – ₹30,000 | Multi-branch setup, automation & API onboarding |
| Enterprise | ₹30,000 – ₹1,00,000+ | Dedicated onboarding, custom workflows & integrations |
Add-ons (usage-based — never unlimited in base plans)
| Add-on | Pricing model |
|---|---|
| Additional users | ≈ ₹199 – ₹399 / user / month |
| Additional branches | ≈ ₹999 – ₹2,499 / branch / month |
| Extra storage | Usage-based (bytes stored per month) |
| Pass-through at actual provider / conversation / template costs + optional MageTech platform fee | |
| SMS | Pay-as-you-go or prepaid credits (actual provider cost) |
| AI usage | Monthly credits included in Professional / Business; additional usage billed separately |
Section 09 · ServiceFlow Custom
A dedicated "Custom Software" line protects SaaS pricing while capturing deals where companies want ServiceFlow personalised for their exact workflow.
| Offering | Price range | What drives the bill |
|---|---|---|
| ServiceFlow SaaS | ₹999 – ₹9,999+ / month | Standard multi-tenant platform, subscription plans |
| ServiceFlow Custom | ₹2,00,000 – ₹10,00,000+ | Custom workflows · custom UI · ERP integration · CRM migration · accounting integration · WhatsApp automation · mobile application · customer portal · advanced AI · third-party integrations · multi-country requirements |
Section 10 · International Pricing
Not a currency conversion of ₹2,499 — a separate international price structure adjusted by market and customer size protects margin where willingness-to-pay is higher.
| Plan | International starting price |
|---|---|
| Starter | $19 / month |
| Professional | $49 / month |
| Business | $99 / month |
| Enterprise | Custom |
Why teams choose ServiceFlow
Less admin, more repeat customers
Scheduling, reminders and follow-ups run automatically instead of living in someone's head or notebook.
Grow repeat revenue
Every completed service schedules the next one, so your customers keep coming back.
Keep technicians organised
Assign jobs by skill and availability, and give every technician a clear daily schedule.
Never forget a follow-up
Timely reminders and follow-up lists make sure no lead or customer is left behind.
Know your numbers
A live dashboard shows jobs, revenue, unpaid amounts and your best technician at a glance.
Grow without chaos
Add users, branches and automation as you scale — on plans that grow with your business.
Ready to never miss a service again?
Book a Free Demo · Explore Features · Works on mobile & desktop · Automated reminders · Your data stays yours
| Platform Type | Multi-tenant SaaS — Repeat-Service & Maintenance Management |
| Version | 1.0 (V1) |
| License | Subscription SaaS (+ ServiceFlow Custom software offering) |
| Backend Runtime | Spring Boot 3.4.8 · Java 21 |
| Backend Build | Maven (Maven wrapper) · MapStruct 1.6.3 · Lombok |
| Security | Spring Security 6 · jjwt 0.12.6 (HS256) · bcrypt |
| Database | PostgreSQL 16 · Spring Data JPA (Hibernate) · Flyway (V1–V17, dev seeds V901–V907) |
| Multi-tenancy | Shared schema + tenant_id, TenantContext (ThreadLocal), TenantAwareDataSource, FORCE ROW LEVEL SECURITY |
| Cache & Rate Limit | Redis 7 (token denylist, rate limiting, hot-read caching; in-memory fallback) |
| Messaging | RabbitMQ 3.13 (AMQP), direct durable exchange, Jackson2JsonMessageConverter |
| Spring Mail (SMTP) — verification / reset / reminders; MailHog in dev | |
| Payments | Razorpay subscriptions API + webhooks (HMAC-SHA256); simulated mode by default |
| SMS | Twilio (opt-in, SMS_PROVIDER=twilio); console fallback in dev |
| Frontend | Next.js 16 · React 19 · TypeScript 5.7 · Tailwind CSS 4 · TanStack Query 5 |
| Authentication | JWT access (15 min, HS256) + hashed refresh token (7 days) with rotation & revocation |
| Password Hashing | bcrypt |
| API Docs | springdoc-openapi 2.6 — Swagger UI (dev) at /api/swagger-ui.html |
| Testing | JUnit 5 · Testcontainers PostgreSQL · H2 (PostgreSQL mode) · Vitest · React Testing Library |
| Delivery | Docker Compose · GitHub Actions · GHCR · AWS EC2 (Phase 1: single host) |
| Scalability Roadmap | Service extraction · Kafka eventing · Kubernetes (Helm + HPA) · S3 · read replicas |
| Roles | OWNER · MANAGER · TECHNICIAN (RBAC) |
ServiceFlow — Demo Document
View the complete product documentation below.
Related Products
You May Also Like
MTS AI Commerce Assistant
MTS AI WhatsApp CRM
₹4,999.00 /mo after trial
MTS Laravel RBAC Package
Need Help Choosing?
Our team is ready to help you find the perfect solution for your business.
Get a Free Quote