Current Production Status - HCW Platform¶
Archived record
This page describes the Firebase-era platform or a migration step that has completed. It is kept as history and is not a current runbook. The current platform is described from the home page.
Last Updated: June 12, 2026
Build Status: Production Ready
Frontend: Deployed and Live (Firebase Hosting direct deploy verified HTTP 200)
Admin Portal: Fully Functional
Backend: Cloud Functions Deployed (deploy-functions success on a839471f)
Security: Hardened (headers, rules, scanning)
Performance: Optimized (fonts, lazy-load, resource hints)
What's Currently Working¶
Frontend (React SPA)¶
- Status: Production-Ready
- Deployment: Firebase Hosting (automatic on frontend main-branch changes, ~2-3 min; direct CLI deploy used on 2026-06-12 to avoid workflow dispatch)
- Build: 48 pages across 7 cloud domains (100% complete)
- Tech Stack: React 19 + Vite + TailwindCSS + shadcn/ui
- Features:
- Educational content platform for AWS, Azure, GCP, Terraform, GitHub, FinOps
- Responsive mobile-first design
- Dark mode support
- Provider-specific color theming
- Real-time data sync with Firestore
Admin Portal (ContentForge)¶
- Status: Fully Functional
- Route:
/admin/* - Authentication: Firebase Auth (Google sign-in) + Custom Claims (
isAdmin()) - Authorization: Backend-enforced — Firestore rules use
isAdmin()for all write paths
Admin Pages Available¶
- Dashboard (
/admin) — Pipeline overview, batch operations, recent activity - Submit URLs (
/admin/submit) — 4-stage content submission workflow - Queue (
/admin/queue) — Review submitted content with filter/bulk ops - Review (
/admin/queue/:id) — Detailed item review with metadata editing - Editor (
/admin/editor/:id) — Monaco-based markdown editor with live preview - Published (
/admin/published) — Manage ready-to-publish and live content - Calendar (
/admin/calendar) — Visual drag-and-drop scheduling - Connections (
/admin/connections) — Integration health checks for Publer, Plaud, Sessionize, Linkie, Klaviyo, and placeholders - Linkie Hub (
/admin/linkie) — Link-in-bio management throughlinkieProxy - Mailing List (
/admin/mailing-list) — Klaviyo list/profile management and newsletter subscriber support
Backend Services¶
- Cloud Functions (Node.js 22 LTS) — Content scraping, status workflows, audit logging, AI
- Firestore — Content collections, real-time listeners, persistent caching
- Firebase Storage — Image hosting, AI-generated cover art
- Firebase Auth — Google OAuth, custom admin claims
AI Features¶
- AI Content Extraction — Scrapes URLs, extracts key information via Gemini
- AI Cover Generation — Replicate integration (optional per submission)
- Reader Fallback —
CONTENTFORGE_SCRAPE_FALLBACK_ENABLED=truebrings scrape success 62.5% → 100% on benchmark set. Latency tradeoff ~3.3x acceptable since direct_html still handles fast paths.
Security Posture (as of June 12, 2026)¶
HTTP Security Headers (live via firebase.json)¶
| Header | Value |
|---|---|
X-Content-Type-Options |
nosniff |
X-Frame-Options |
DENY |
Referrer-Policy |
strict-origin-when-cross-origin |
Permissions-Policy |
camera=(), microphone=(), geolocation=() |
Strict-Transport-Security |
max-age=63072000; includeSubDomains; preload |
Content-Security-Policy |
default-src self; script/style/font-src scoped to approved origins |
Firebase Rules¶
- Firestore:
wiki_pages,social_workspaces,social_posts,social_libraries,social_library_items,social_schedule_slotsall requireisAdmin()for writes - Storage: Catch-all rule is
allow read, write: if false(deny-all default)
CI Security Pipeline¶
scan-security.ymlexits non-zero on CRITICAL/HIGH CVEs (blocking)- Trivy v0.70.0 (via
trivy-actionv0.36.0) scans npm, secrets, and IaC - SBOM generated on every security scan run
- All GitHub Action refs pinned to SHA digests
ignore-unfixed: truesuppresses noise from CVEs with no upstream fix
Performance Optimizations (as of April 29, 2026)¶
index.html Resource Hints¶
<link rel="preconnect">to Firestore, Identity Toolkit<link rel="dns-prefetch">to Cloud Functions, Firebase Storage<link rel="preconnect">to fonts.googleapis.com + fonts.gstatic.com (for Material Symbols)
Fonts¶
- IBM Plex Mono — self-hosted via
@fontsource/ibm-plex-mono(400, 500, 600 weights). No CDN call, Vite emits woff2 files into dist/assets at build time. - Material Symbols Outlined — Google Fonts CDN (variable icon font, too complex to self-host)
- All
@font-facedeclarations havefont-display: swap
Code Splitting¶
FrameworkRadar(vendor-charts, 159KB) is lazy-loaded viaReact.lazy()+Suspensein bothFrameworkDetailTemplateandFrameworkReviewBoard- Monaco editor chunk loads on demand (admin editor route only)
CI/CD Pipeline (as of June 12, 2026)¶
See documentation/pipeline-cicd-workflows.md for the full reference.
Active Workflows¶
| Workflow | Trigger | Duration | Purpose |
|---|---|---|---|
deploy-frontend.yml |
Push to main |
~2-3 min | Build + Firebase deploy |
check-quality.yml |
PRs to main |
~3-4 min | ESLint, Prettier, unit tests, rules |
check-e2e.yml |
PRs to main |
~5-7 min | Playwright E2E |
check-lighthouse.yml |
PRs to main |
~7-10 min | Lighthouse audit (9 URLs) |
check-helm.yml |
PRs to main |
~1 min | Helm chart lint |
scan-security.yml |
PRs + weekly | ~3-5 min | Trivy + SBOM |
secret-encrypt.yml |
Manual | ~2-3 min | Notion → SOPS |
secret-rotate.yml |
Monthly | ~2-3 min | Secret rotation |
secret-sync.yml |
Auto on enc file | ~2-3 min | SOPS → GitHub/Firebase secrets |
secrets-resync.yml |
Manual | ~4-6 min | Notion → SOPS → secret-sync → Terraform Cloud |
Deleted: check-comprehensive.yml (was redundant with check-quality + check-e2e).
Latest Production Verification¶
- Secrets:
secrets-resyncand childsecret-synccompleted successfully on 2026-06-12. - Firebase Secret Manager:
LINKIE_API_KEY,KLAVIYO_PRIVATE_KEY, andKLAVIYO_LIST_IDwere set successfully. - Backend:
deploy-functionscompleted successfully for commita839471f. - Frontend: Firebase Hosting was deployed directly with Firebase CLI on 2026-06-12;
https://hybridcloudworks.comreturned HTTP 200 after release.
Dependency State (as of June 12, 2026)¶
Recent Dependabot PR cleanup and dependency-alert remediation completed on June 12, 2026. Root and Functions audits were validated locally with zero reported vulnerabilities during the remediation pass.
Documented Overrides¶
All npm overrides in package.json are annotated with CVE justifications in
documentation/dependency-notes.md.
Admin Portal Configuration¶
Authentication & Authorization¶
// Frontend allowlist is UX-only (not a security boundary)
VITE_ADMIN_EMAIL removed from deploy workflow (no longer needed)
// Backend and Firestore rules are authoritative
isAdmin() => request.auth.uid in get(/databases/$(database)/documents/admins/approved).data.uids
How to Add Admin Users: Add the user's UID to the admins/approved Firestore document.
Content Status Workflow¶
API Patterns¶
See documentation/admin-api-patterns.md for endpoint details.
Deployment¶
Frontend¶
- Platform: Firebase Hosting
- CDN: Firebase global CDN
- Trigger: Automatic on every push to
main - Build Time: ~2-3 minutes
- Domain:
https://hybridcloudworks.com
Cloud Functions¶
- Runtime: Node.js 22 LTS
- Deploy:
firebase deploy --only functions
Secrets Management¶
- Source of truth: Notion Database
- Distribution: GitHub Actions secrets via
secret-sync.yml - Runtime: Firebase Secret Manager (Cloud Functions)
- Rotation: Monthly via
secret-rotate.yml - Integration secrets verified: Linkie and Klaviyo are provisioned through Notion → SOPS → Firebase Secret Manager.
Monitoring & Debugging¶
Check Admin Access¶
- Navigate to
https://hybridcloudworks.com/admin - Sign in with Google
- Backend
isAdmin()check governs access
Cloud Functions Logs¶
Firebase Console → Functions → Logs
Firestore Data¶
Firebase Console → Firestore Database → content collection
Next Steps / Known Gaps¶
- Issue #171 — 15-item checklist to restore
lighthouse:recommendedpreset (images, contrast, SEO meta-description, console errors, source maps, heading order) - Stage 3 backend — Assessments service, FinOps engine, GitOps deployment path (see
TODO.md)
Questions? Check the documentation/ folder for detailed guides on specific features.