← Missions

Senior Node.js + React Developer — Salon Management System Refactoring & Bug Fix

Budget: $500.0 FIXED / ⭐ 3.65 (62) Malaysia

mysql, react-js, node.js

**Project Overview** We have an existing salon management system (DACO) built with React.js (TypeScript) + Node.js + MySQL. The system has been partially developed and has significant architectural issues that need to be fixed before we can continue adding features. We are looking for a senior full-stack developer who can audit, refactor, and stabilize the existing codebase — NOT rewrite it from scratch. --- **What the System Does** DACO is a multi-merchant salon POS and management platform covering: - Appointment booking - Billing and invoicing (with discount, tax, tips, split payment) - Inventory and stock management - Gift cards, packages, memberships, privilege cards - Staff management and commission - Customer profiles and loyalty points - Reporting (sales, inventory, transaction details) - Customer Online Booking, Purchase Product, History Checking --- **Known Issues to Fix (Priority Order)** **Database Layer** - All monetary fields (price, discount, total) are stored as VARCHAR — must be migrated to DECIMAL(10,2) - All date fields stored as VARCHAR strings — must be migrated to proper DATE/DATETIME types - Duplicate billing tables (billing_items vs billing_checkout_items) causing data inconsistency - Duplicate amount fields in billing and billing_amount tables - No purchase-time snapshot for Gift Card settings (changing settings affects historical purchases) - Missing indexes on frequently queried columns (merchant_id, outlet_id, customer_id, order_date) - Active Foreign Key constraint errors logged in errorlogs table — must be resolved **Backend (Node.js/Express)** - billingController.js is 10,150 lines — must be split into logical service modules - APK/AAB generation logic is embedded in index.js — must be extracted to separate module - sequelize.sync() used in production — must be replaced with proper migrations - Body parser limit set to 100MB — security risk, must be reduced - Two billing-related repositories (billing.js 8,901 lines) with overlapping logic - No Service layer — business logic mixed into Controllers and Repositories - JWT implementation has a minor flaw (double-decoding token) **Frontend (React/TypeScript)** - Two conflicting API clients (Apiclient.js and axios.ts) — must be consolidated - Billing.tsx is 13,173 lines — must be split into components - Only one React Context exists — state management is inconsistent - TypeScript not enforced — many files remain in plain JS - Axios timeout is 10 seconds — too short for report queries, causing false errors **Functional Bugs (from QA document)** - Rebill and Void buttons not functional - Dashboard report not working - Discount calculation incorrect (auto-applying discount when none given) - Item discount and cart discount not handled separately - Gift card filter in reports not working - Inventory Opening/Closing balance calculation logic incorrect - Customer profile not showing purchased packages and gift cards - Multiple reports returning no data or errors --- **What We Need From You** 1. Code and database audit report 2. Database migration plan with proper field types 3. Backend refactoring — split controllers, add Service layer, fix migrations 4. Frontend refactoring — consolidate API client, split Billing component 5. Fix the listed functional bugs 6. Basic test coverage for billing and discount logic 7. Make sure whole system running smooth and without error --- **Required Skills** - Node.js / Express — 4+ years - React.js / TypeScript — 3+ years - MySQL / Sequelize ORM - Database schema design and migration - REST API architecture (MVC + Service layer pattern) - Experience refactoring large legacy codebases **Nice to Have** - Experience with salon/POS/retail systems - Knowledge of Malaysian e-invoice (MyInvois) integration --- **Project Type:** Fixed price, milestone-based **What to Include in Your Proposal** - Brief description of your experience with similar refactoring projects - Your approach to migrating VARCHAR monetary fields without data loss - Estimated timeline broken into milestones - Fixed price quote **Note:** We will share the full codebase and database schema after initial screening. Please do not apply if you plan to rewrite the system from scratch — we need someone who can work with existing code.
Ouvrir sur Upwork