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.
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.
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.
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.
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