Some checks failed
System Monitoring / Health Checks (push) Has been cancelled
System Monitoring / Performance Monitoring (push) Has been cancelled
System Monitoring / Database Monitoring (push) Has been cancelled
System Monitoring / Cache Monitoring (push) Has been cancelled
System Monitoring / Log Monitoring (push) Has been cancelled
System Monitoring / Resource Monitoring (push) Has been cancelled
System Monitoring / Uptime Monitoring (push) Has been cancelled
System Monitoring / Backup Monitoring (push) Has been cancelled
System Monitoring / Security Monitoring (push) Has been cancelled
System Monitoring / Monitoring Dashboard (push) Has been cancelled
System Monitoring / Alerting (push) Has been cancelled
Security Scanning / Dependency Scanning (push) Has been cancelled
Security Scanning / Code Security Scanning (push) Has been cancelled
Security Scanning / Secrets Scanning (push) Has been cancelled
Security Scanning / Container Security Scanning (push) Has been cancelled
Security Scanning / Compliance Checking (push) Has been cancelled
Security Scanning / Security Dashboard (push) Has been cancelled
Security Scanning / Security Remediation (push) Has been cancelled
3.8 KiB
3.8 KiB
Research Findings
Multi-Tenant Architecture Decisions
Database Multi-Tenancy Strategy
Decision: PostgreSQL with Row-Level Security (RLS) Rationale:
- Provides strong data isolation between tenants
- Supported by Django and FastAPI
- Built-in security at database level
- Cost-effective for 100 tenant scale
- Malaysian data residency compliance
Alternatives considered:
- Separate databases per tenant: Too expensive at scale
- Schema-based tenancy: Complex management and migration challenges
- Application-level filtering: Higher security risk
Backend Framework Selection
Decision: Django + Django REST Framework Rationale:
- Built-in admin interface for back office
- Mature multi-tenant packages (django-tenants)
- Strong ORM for complex data models
- Authentication system built-in
- Malaysian developer community support
Alternatives considered:
- FastAPI: Better performance but less built-in admin
- Flask: Too minimal for complex business logic
- Node.js: Not ideal for Malaysian enterprise market
Frontend Framework Selection
Decision: Next.js with TypeScript Rationale:
- Server-side rendering for SEO
- Type safety for large codebase
- Malaysian SME users need fast, responsive UI
- Strong component ecosystem
- Easy deployment with Docker
Authentication Strategy
Decision: Multi-auth approach with Django Allauth Rationale: Supports all required methods:
- Email/password with MFA
- SSO integration
- OAuth providers
- Custom Malaysian National ID integration (future)
Payment Processing
Decision: Stripe + Midtrans dual integration Rationale:
- Stripe: International standard, subscription management
- Midtrans: Malaysian payment methods (FPX, e-wallets)
- Both support recurring billing and one-time payments
- Well-documented APIs for both frameworks
Healthcare Compliance
Decision: PDPA 2010 + additional safeguards Rationale:
- Malaysian Personal Data Protection Act compliance
- Audit trails for patient data access
- Data encryption at rest and in transit
- Role-based access control for healthcare data
- Ready for future international standards adoption
Performance & Scalability
Decision: Vertical scaling first, with horizontal expansion path Rationale:
- 100 tenants with 10 users each fits well on single server
- PostgreSQL connection pooling for efficiency
- Redis for caching and session management
- Kubernetes-ready for future expansion
- Container orchestration for consistent deployment
Infrastructure
Decision: Docker + Kubernetes Rationale:
- Consistent development and production environments
- Malaysian cloud provider support (AWS, Azure, Google Cloud)
- Auto-scaling capabilities
- Rolling updates without downtime
- Malaysian data center options
Module Architecture
Decision: Django Apps with Plugin System Rationale:
- Each industry module as separate Django app
- Shared core infrastructure
- Plugin-based activation based on subscription
- Independent testing and deployment
- Malaysian market-specific customizations per module
Data Retention Implementation
Decision: Automated cleanup with configurable periods Rationale:
- 90-day retention period configurable per tenant
- Soft delete with permanent cleanup
- Audit logging for compliance
- Tenant-level override capability
- Malaysian legal compliance
Testing Strategy
Decision: Pyramid testing approach Rationale:
- Contract tests for API compatibility
- Integration tests for multi-tenant isolation
- Unit tests for business logic
- End-to-end tests for user flows
- Performance tests for scalability validation
Monitoring & Observability
Decision: ELK Stack + Prometheus Rationale:
- Malaysian developer community support
- Multi-tenant usage monitoring
- Performance bottleneck identification
- Security event logging
- Malaysian data residency compliance