Handoff: Project Page V2 Migration¶
What was done¶
Feature flag: project-page-v2¶
- Backend: added
project-page-v2tofeature_flags.pyfallback map,FeatureFlagsResponseschema, GET and PATCH endpoints inapi/routers/feature_flags.py - Frontend: added
projectPageV2: booleantoFeatureFlagsinterface anddefaultFlagsinfeature-flags-context.tsx - Local dev default:
FEATURE_PROJECT_PAGE_V2=trueindocker-compose.yml - Azure App Configuration: flag key
project-page-v2— needs to be created in both dev and prod App Config stores (same process ascv-generation)
Routing gate¶
App.tsx ProjectRoute now checks flags.projectPageV2 before routing to ProjectPageV2. When the flag is off every slug goes to the old ProjectDetail. When on, slugs with a projectV2Data entry go to V2.
All 7 projects migrated to V2¶
projectV2Data in client/src/data/projects.ts now has entries for all slugs:
| Slug | Title lines | Notes |
|---|---|---|
iac-platform-framework |
Infrastructure-as-Code / Platform Framework | Full bespoke content (arch diagram, repo tree, code snippets, design decisions) |
genai-framework |
Scalable GenAI Framework / for Unstructured Data | Minimal — tagline, overviewBody, metaFields |
data-platform-migration |
Enterprise Data Platform / Migrations | Minimal |
realtime-bi-integration |
Real-time BI / Integration | Minimal |
metadata-ingestion |
Metadata-Driven / Ingestion Framework | Minimal |
azure-batch-optimization |
Azure Batch / Optimisation | Minimal |
healthcare-cost-analysis |
Healthcare Cost / Analysis | Minimal |
All non-IaC projects render the V2 hero, Project Record section (challenge/solution/results/responsibilities/timeline from API), and overview sidebar automatically. No bespoke CMS sections yet.
What's next¶
Immediate (before enabling flag in prod)¶
-
project-page-v2flag is now seeded in Bicep — seeinfra/modules/app_configuration.bicepandinfra/parameters.shared.bicepparam. Rundeploy-infrastructure-shared.ymlto apply. No manual portal work needed. -
Add bespoke content for non-IaC projects (optional before launch)
- Each project only needs
tagline,titleLines,overviewBodyat minimum - Richer sections (
architectureSection,designDecisions, etc.) can be added to Strapi later
Part 1 of migration plan (from plan-project-page-v2-migration.md)¶
- Wire
useProjectPageCMSfor all slugs - Currently only
iac-platform-frameworkhas a Strapi entry - Add Strapi entries for the other 6 via the admin UI at
http://localhost:1337/admin - The hook already falls back to static
projectV2Dataso this is non-breaking
Part 2 — V1 deprecation (after all slugs confirmed stable in prod)¶
- Delete
project-detail.tsx - Remove its import and the V1 branch from
ProjectRouteinApp.tsx - Remove
projectV2Datastatic entries as each slug's CMS entry is confirmed working
Infrastructure for Strapi in Azure¶
See plan-content-management.md Phase 2:
- New ACA
dna-{env}-portfolio-we-ca-cmsincontainer_apps.bicep - Key Vault secrets for Strapi session keys
- Custom domain
cms.sven-relijveld.com - Build + push
portfolio-cmsimage indeploy-application.yml