Loading...
Please wait while we prepare the content
Please wait while we prepare the content
2025
IGO Repair is a full featured, web based business management platform I built for a gadget and electronics repair shop. The goal was simple: replace the mess of spreadsheets, paper receipts, and disconnected tools with a single, centralized system that handles everything from the moment a customer walks in to warranty management months later.
This project covers the complete day to day operations of a repair business, including device intake, diagnosis, parts procurement, payment collection, and post sale warranty claims. The system supports multi branch operations, meaning the owner can monitor and manage everything across all their store locations from one dashboard.
I designed the platform with three distinct user roles in mind: the shop owner who needs full visibility across all branches, admins who manage branch level operations, and technicians who focus on repairs. Each role sees only what they need and is restricted from what they should not access, keeping things secure and efficient.
This is the heart of the application. A Service Order tracks a repair job from the moment a device is received all the way through completion. The system supports three intake modes: Direct Payment for on the spot transactions, Drop Off for devices left for diagnosis, and Purchase Order mode when parts need to be sourced from a supplier before work can begin. Every order captures customer details, device information, the problem description, assigned technician, parts used, labor performed, applied discounts, and warranty periods. The system also generates professional PDF documents including service receipts, warranty certificates, and payment receipts.
The cashier module handles all financial transactions tied to service orders. It supports multiple payment methods including Cash, Bank Transfer, QRIS (Indonesia's QR based payment standard), and EDC card machines. Customers can pay in full or make partial payments with deposits, and the system keeps track of any outstanding balances per order. Promotional discounts can be pre configured by the owner per branch, and staff can also apply manual discounts at the time of settlement. All discount details are stored per transaction for complete traceability.
The inventory system tracks all physical products such as spare parts and any service type SKUs. Products are organized by category, and each branch maintains its own independent stock levels. A Master Product linking feature allows the same product to exist across branches under a unified record, giving the owner cross branch visibility. Stock levels update automatically whenever parts are used in service orders, purchase orders arrive, stock transfers complete, or warranty replacements go out. Every change is recorded as a Stock Movement with clear type labels like IN, OUT, ADJUSTMENT, RETURN, TRANSFER_IN, TRANSFER_OUT, and WARRANTY_CLAIM. Bulk operations are supported through Excel import and export.
Stock opname is the process of physically counting inventory and reconciling it against system records. Staff can filter by branch and category, then enter actual quantities using increment and decrement controls. The system highlights any discrepancies and records adjustments with reason notes. For multi branch operations, stock can be transferred between locations through a structured workflow that moves through PENDING, APPROVED, IN_TRANSIT, and COMPLETED stages. Partial transfers are supported, and both TRANSFER_OUT and TRANSFER_IN movements are created for a complete audit trail. All opname history is preserved and exportable to Excel.
When parts need to be ordered from a supplier, staff creates a Purchase Order listing the supplier, required items, and quantities. The PO moves through a clear lifecycle: it starts as PENDING, transitions to PARTIALLY_RECEIVED as goods arrive in batches, and reaches RECEIVED once everything is accounted for. Stock levels are automatically incremented for each received item, and corresponding IN type Stock Movements are created. Suppliers are managed in a dedicated directory that keeps contact details and company information organized and accessible.
After a repair is completed, customers receive a warranty period on specific service items. The warranty claim module manages the entire post sale claim process. Customers provide their service order number, the system validates that the warranty period has not expired, and a claim is created that goes through review stages: PENDING, then APPROVED or REJECTED, and finally COMPLETED. When claims are approved, replacement products are issued and stock levels decrease accordingly. Every claim links back to the original service order and customer record, creating a clear history of all warranty activity.
The reports section provides owners and authorized admins with a detailed picture of business performance. Available report types include Financial Summary (revenue, expenses, net profit), Transaction Details, Service Details, Expense Reports, Purchase Order Reports, and Stock Movement Reports. All reports support date range filtering with WIB (Western Indonesia Time) timezone support, branch filtering for owners, and pagination for large datasets. Any report can be exported as a professionally formatted Excel workbook, with role based restrictions determining which worksheets each user can access. Owners can also configure automated report delivery on daily, weekly, or monthly schedules via email, powered by a Vercel cron job that runs every day at 1:00 AM UTC.
The main dashboard gives a quick at a glance summary of the shop's health: key performance metrics like total revenue and number of orders, interactive revenue trend charts powered by Recharts, and a list of recent service orders. Owners can filter by branch to see performance across all locations or drill into a specific one. A separate Daily Service Details section always shows today's activity, independent from the main date range. The system fully supports multi branch operations where each branch has its own name, location, and isolated data. One branch can be designated as the warehouse for stock distribution, and owners have full cross branch management capabilities.
The permission system is designed to be both granular and practical. Owners can create users and assign them one of three roles: Owner, Admin, or Technician. Each user is assigned to a specific branch, and individual permissions can be customized to override role defaults. There are 10 module level permissions controlling access to major sections like service orders, inventory, purchasing, and reports. On top of that, 6 critical action permissions gate sensitive operations such as deleting service orders, editing financial data, managing all branches, and exporting data. This layered approach ensures every team member has exactly the access they need, nothing more and nothing less.
The application sends automated messages to customers at key points in the service lifecycle. Email notifications cover service completion confirmations, payment receipts, and warranty information using professionally designed templates built with React Email and sent via Nodemailer. WhatsApp messages are delivered through the Facebook Business (Meta) API for service status updates sent directly to the customer's phone. Professional PDF documents are rendered using a headless Chromium browser through Puppeteer, including service receipts, warranty certificates, payment receipts, and detailed order summaries. The system uses a dual mode PDF setup that works both in local development and in cloud deployment on Vercel using puppeteer core and a serverless optimized Chromium binary.
Security is built into every layer of the application. Sessions are managed through Iron Session with encrypted cookies, and passwords are hashed using bcryptjs so raw credentials are never stored. All dashboard routes are protected by middleware that validates sessions and redirects expired ones to the login page. Every API endpoint uses a withAuthorization higher order function that enforces role and permission checks. Rate limiting is applied globally at 100 requests per minute, with stricter limits of 10 requests per minute for authentication endpoints. User inputs are sanitized using isomorphic dompurify and validated with Zod schemas. Security headers including X Content Type Options and X Frame Options are applied by middleware, and branch level data isolation ensures admin and technician users can only access data from their assigned branch.
Building IGO Repair was a deeply rewarding experience that pushed me to think beyond just code. It required understanding how a real repair business operates day to day, then translating those workflows into software that actually makes people's jobs easier. From the multi branch architecture to the granular permission system, every piece of this platform was designed to solve a real problem for the client. It's the kind of project that reinforced my belief that the best software comes from genuinely understanding the people who will use it.