Architecture
FlipCard is a small, layered system. The same manifest flows through every layer; the layers are swappable.
┌────────────────────────────────────────────────────────┐
│ Manifest │ JSON, validated against
└──────────────────────────┬─────────────────────────────┘ the published schema
│
┌───────────────────┼───────────────────────────┐
│ │ │
▼ ▼ ▼
design{} schema{} workflow{}
(front face) (back face) (events / actions)
│ │ │
└─────────┬─────────┘ │
▼ ▼
FlipCardController host application / telemetry
(state machine)
│
┌─────────────┼─────────────┐
▼ ▼ ▼
React Vanilla (future)
renderer custom renderers
element
│ │
└──────┬──────┘
▼
@microsoft/flipcard-themes
(design tokens + CSS)
Packages and their dependencies
@microsoft/flipcard-core (no deps)
▲
├── @microsoft/flipcard-react (React 18+)
├── @microsoft/flipcard (web component)
└── @microsoft/flipcard-mcp (@modelcontextprotocol/sdk, zod)
@microsoft/flipcard-themes (no deps; consumed by both renderers)
@microsoft/flipcard-coreis the only required dependency. Everything else builds on top of it.@microsoft/flipcard-themesis decoupled fromcoreso non‑visual consumers (the controller, the MCP server) don't need to pull CSS.- The MCP server depends on
corefor the schema and validator — so an LLM that uses it cannot diverge from what the renderers accept.
Build & deploy pipeline
- Library builds use
tsupper package. - FlipDeck is a Vite + React gallery at
apps/showcasethat dogfoodsFlipCardCatalogand theflipCardAssetLibrary. - Docs are this Docusaurus site at
docs/. - GitHub Pages deploys via
.github/workflows/deploy.yml:/— this documentation site/flipdeck/— the FlipDeck gallery (canonical URL)/showcase/— the same FlipDeck build, kept for backward compatibility/schema/v0.1.json— the published manifest schema
The same manifest, validated by the same schema, is what every layer agrees on. That is the point of the system.