🔹 Feature: Content App on Microsoft Fabric Apps — Sample Deployment Accelerator (New Hosting Model for Content Applications)
🔹 What It Does: Ready-to-run sample that hosts a content-driven web application entirely on Microsoft Fabric — content lives in a Lakehouse, the API is auto-generated GraphQL, and the frontend is static — with no PHP, no MySQL, no App Service, no backend server anywhere.
Why This Matters — A Different Way to Host Applications:
🔸 Fabric Apps is a NEW hosting model, not just an analytics surface. Applications become first-class Fabric items alongside Lakehouses, Warehouses, and Notebooks — with the same governance, identity, and access control.
🔸 App data lives in OneLake from day one — the SAME data is instantly queryable by Power BI, Notebooks, Fabric data agents, and Warehouses. The classic “operational vs. analytical” data silo disappears.
🔸 Consumes CU from your existing Fabric capacity — no separate cloud bill for the app tier. Same monthly line item that powers the rest of the Fabric estate.
🔸 Enterprise governance inherited by default — Purview, sensitivity labels, DLP, and Entra ID RBAC apply automatically. No bolted-on compliance layer.
What This Sample Is Giving You:
✅ End-to-End Pipeline: CSV data → Fabric Lakehouse (Delta tables) → SQL analytics endpoint (read-only views) → Fabric API for GraphQL → React + Vite frontend with MSAL / Entra ID auth. Full path from “existing dataset” to “hosted application” in one script.
✅ Zero Backend Server: No PHP interpreter, no MySQL, no Express, no custom REST API, no service-principal secret in the app. The browser calls Fabric’s API for GraphQL directly with the user’s delegated token. Backend surface = zero.
✅ Auto-Generated GraphQL API From SQL Views: Define SQL views in the Lakehouse — Rayfin exposes them as GraphQL collections automatically. Change the view schema, redeploy, the GraphQL contract updates.
✅ Real Application Features Working: Content listing, full detail pages with preserved HTML content, search across multiple fields, category filtering, monthly archive filtering, recent items + category counts, cursor-based pagination, light/dark themes. Not a toy demo — a functional application.
✅ Automated PowerShell Deployment: One command (`.\deploy.ps1 -WorkspaceName “…”`) that: signs in to Fabric, creates/finds the Lakehouse, waits for SQL endpoint, parses and normalizes the CSVs, loads Delta tables, applies SQL views, provisions the Fabric API for GraphQL item, creates/updates the Entra app registration + GraphQL permission, deploys the frontend via Rayfin, and adds the hosted URL as an Entra redirect URI. All the “20 manual steps” collapsed into one script.
✅ Content-Type Agnostic Pattern: The CSV → Lakehouse → GraphQL → static frontend pattern isn’t specific to any one CMS. Swap in any product catalog, knowledge base, event listing, help center, or read-mostly content dataset — the architecture is the same. This is a SAMPLE only — the value is the pattern, not the specific dataset.
✅ Fabric Permission Model Documented End to End: Viewer workspace role + Read + “Run queries and mutations” (GraphQL Execute) on the GraphQL API item. Every gotcha spelled out — including the classic `401 Unauthorized` if you forget the Execute permission and the `AADSTS9002326` if you register the SPA redirect URI under the Web platform instead.
✅ Local Dev Path: `.env.local` config + `npm run dev` starts a local Vite server that still talks to Fabric — same MSAL auth, same GraphQL endpoint. Full dev-loop without deploying every change.
✅ Companion Piece to the Rayfin Story: Concrete, end-to-end example of what Rayfin (Managed Application Backend on Fabric) actually looks like in a real content-heavy application — not just the concept slide.