Skip to content

Handoff: Project Page V2 Migration

What was done

Feature flag: project-page-v2

  • Backend: added project-page-v2 to feature_flags.py fallback map, FeatureFlagsResponse schema, GET and PATCH endpoints in api/routers/feature_flags.py
  • Frontend: added projectPageV2: boolean to FeatureFlags interface and defaultFlags in feature-flags-context.tsx
  • Local dev default: FEATURE_PROJECT_PAGE_V2=true in docker-compose.yml
  • Azure App Configuration: flag key project-page-v2 — needs to be created in both dev and prod App Config stores (same process as cv-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)

  1. project-page-v2 flag is now seeded in Bicep — see infra/modules/app_configuration.bicep and infra/parameters.shared.bicepparam. Run deploy-infrastructure-shared.yml to apply. No manual portal work needed.

  2. Add bespoke content for non-IaC projects (optional before launch)

  3. Each project only needs tagline, titleLines, overviewBody at minimum
  4. Richer sections (architectureSection, designDecisions, etc.) can be added to Strapi later

Part 1 of migration plan (from plan-project-page-v2-migration.md)

  1. Wire useProjectPageCMS for all slugs
  2. Currently only iac-platform-framework has a Strapi entry
  3. Add Strapi entries for the other 6 via the admin UI at http://localhost:1337/admin
  4. The hook already falls back to static projectV2Data so this is non-breaking

Part 2 — V1 deprecation (after all slugs confirmed stable in prod)

  1. Delete project-detail.tsx
  2. Remove its import and the V1 branch from ProjectRoute in App.tsx
  3. Remove projectV2Data static 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-cms in container_apps.bicep
  • Key Vault secrets for Strapi session keys
  • Custom domain cms.sven-relijveld.com
  • Build + push portfolio-cms image in deploy-application.yml