Available for new projects

Back to Work
2020

ICDR

Internal company management system handling users, records, operations & reporting.

Node.jsExpressMySQLReactJWT
01

Overview

ICDR is an internal company management system designed to streamline administrative workflows and data management. The platform centralizes user management, record keeping, operational tracking, and comprehensive reporting into a single unified system.

Built for organizations that need to move fast without sacrificing data integrity, ICDR replaced multiple spreadsheets and disconnected tools with one cohesive platform that actually works.

02

My Role

As lead software engineer and project manager, I designed and built ICDR from the ground up solo:

  • System Architecture — Designed the entire backend infrastructure and data models
  • Full-Stack Development — Built both the Node.js/Express API and React frontend
  • Database Design — Structured MySQL schema for performance and scalability
  • Authentication & Authorization — Implemented JWT-based auth with role-based access control
  • Reporting Engine — Created dynamic reporting system with export capabilities

Every component built by me.

03

Architecture

The system follows a classic three-tier architecture optimized for reliability and maintainability:

Backend

Express.js server with clear separation of concerns — routes, controllers, services, and data access layers. JWT authentication with refresh token rotation for security.

Database

MySQL with normalized schema design. Indexed for common query patterns. Soft deletes for audit compliance.

Frontend

React SPA with Redux for state management. Component library for consistent UI. Real-time updates via polling for critical data.

Infrastructure

Dockerized for easy deployment. Nginx reverse proxy. Automated backups with point-in-time recovery.

04

Hard Problems

1. Complex Permission System

Different user roles needed granular access to different records. Built a hierarchical permission system that cascades through organizational structure.

2. Audit Trail Requirements

Every change needed to be tracked for compliance. Implemented comprehensive audit logging without impacting performance.

3. Report Generation at Scale

Large datasets made report generation slow. Optimized with pagination, background processing, and incremental caching.

4. Data Migration

Migrating from legacy spreadsheets required careful ETL processes. Built validation pipelines to ensure data integrity during migration.

05

What I'd Improve Today

  • Migrate from MySQL to PostgreSQL for better JSON handling and full-text search
  • Replace Redux with React Query for server state management
  • Add real-time updates via WebSockets instead of polling
  • Implement GraphQL for more flexible data fetching
  • Use TypeScript throughout — the JavaScript codebase makes refactoring risky
  • Add comprehensive E2E testing with Playwright