# Productization Roadmap ## Goal Turn the current TUBCO-specific onboarding/offboarding portal into Workdock, a reusable company portal product, while preserving the current TUBCO deployment as a stable customer-specific baseline. Current branch roles: - `main`: current TUBCO customer baseline - `product_company_portal_foundation`: generic product-development branch ## Core Product Principles 1. Do not build "TUBCO with exceptions". 2. Separate platform core from company configuration. 3. Start as single-tenant configurable, not full multi-tenant. 4. Make branding and document identity admin-managed, not code-managed. 5. Add new business apps only after the core platform layer is standardized. ## Product Layers ### 1. Platform Core Reusable across all customer deployments: - authentication - roles and permissions - page shell and navigation - audit log - backup and recovery - integrations framework - translations - document engine - app registry ### 2. Company Configuration Per deployment / per company: - portal title - company display name - logos - favicon - brand colors - support/contact email - legal text - default language - PDF letterhead - email sender labels - notification routing defaults ### 3. Business Apps Examples: - onboarding / offboarding - welcome emails - asset return - approvals - leave / request flows - checklists - document workflows ## Delivery Strategy ### Phase 0. Freeze Current Customer Baseline Status: completed Purpose: - keep the current TUBCO state stable - allow future customer-specific fixes without mixing them with productization work Snapshot commit: - `08971ab` `snapshot: preserve current tubco portal baseline` ### Phase 1. Product Core Standardization Status: next Purpose: - remove hardcoded company identity from the platform surface - introduce config-driven branding and document identity Deliverables: 1. `PortalBranding` or `TenantConfig` model - portal title - company name - logo - favicon - primary / secondary colors - support email - default language - PDF letterhead file - legal / imprint / privacy text 2. Branding management UI - super-admin/admin controlled - editable from frontend 3. Shared context layer - inject branding into templates - replace hardcoded TUBCO title/logo references 4. Tenant-aware document identity - letterhead path from config - company display name from config - footer/legal text from config 5. Documentation updates - product setup flow - branding flow - PDF/letterhead override behavior ### Phase 2. App Registry and Navigation Purpose: - stop hardcoding app cards and app visibility in the homepage template Deliverables: - app registry model or registry config - title / subtitle / icon / route / required capability / enabled flag - homepage and navigation driven by registry data - ability to enable/disable apps per deployment ### Phase 3. Trial Mode Lifecycle Purpose: - allow limited-time test environments for demos and sales Deliverables: - trial flag - `trial_expires_at` - trial banner - safe default integrations behavior - cleanup command / scheduled deletion - DB/media cleanup policy ### Phase 4. New Business Apps Only start after phases 1-3 are stable. Candidate apps: - asset management - leave / absence requests - approval workflows - internal purchase requests - visitor onboarding - contractor onboarding - policy acknowledgements ## Recommended Deployment Model Initial product model: - single-tenant configurable deployment - one company per deployment - shared codebase - company identity controlled through admin-managed config Do not start with: - true multi-tenant shared-data SaaS Reason: - tenant isolation affects auth, media, PDFs, routing, backups, audit, and cleanup - it is much more complex than the current product stage requires ## What Must Be Removed From Hardcoded Product Core Examples already identified: - former TUBCO-specific portal title kept only as historical baseline context - logo asset references - invitation email wording mentioning TUBCO - historical product text references that still describe the original TUBCO baseline - fixed letterhead file assumptions These should move into configuration progressively, not all at once in one risky rewrite. ## Immediate Next Slice Implement first: 1. `PortalBranding` model 2. branding management page 3. shared branding context processor 4. replace header/logo/title references on: - home - shared header - login/auth pages 5. make PDF letterhead configurable This is the first productization slice because it gives: - generic portal identity - customer-specific configurability - a cleaner base for every future app ## Guardrails - keep current customer deployment values stable while generic product defaults move to Workdock - keep migrations backward-compatible - update both wiki and developer handbook for every architecture change - snapshot at the end of each major phase