The only difference
Same shape, different reactivity primitive React
useState + useEffect
Svelte
$state + $derived (runes)
Solid
createSignal + createMemo
Vanilla JS
manual pub-sub store (no primitive)
Verify it yourself
Same structure, file by file Click any badge below to open that exact file on GitHub — no need to take this claim on faith.
Runtime entry
The only file allowed to register plugins.
WorkflowActionBar
The generic component — it never knows what "meeting" means.
meeting.config.ts
The only place meeting-specific business rules actually live.
MeetingDetail
The page that ties actions, notes, and history together.
Browse the shape
Full file tree, one framework at a time React Vue Angular Svelte Solid Vanilla JS
src/
├─ types/
│ └─ meeting.ts
├─ runtime/
│ ├─ polaris.ts
│ ├─ useWorkflow.ts
│ ├─ useCanExecute.ts
│ ├─ useGlobalContext.ts
│ └─ WorkflowTrace.tsx
├─ components/
│ ├─ Button.tsx
│ ├─ StatusBadge.tsx
│ ├─ WorkflowActionBar.tsx
│ ├─ FormModal.tsx
│ └─ PromptModalProvider.tsx
├─ features/
│ ├─ auth/
│ │ ├─ mock-users.ts
│ │ ├─ Login.tsx
│ │ └─ RequireAuth.tsx
│ └─ meeting/
│ ├─ meeting.config.ts
│ ├─ history.ts
│ ├─ MeetingList.tsx
│ ├─ MeetingDetail.tsx
│ ├─ MeetingForm.tsx
│ ├─ NotePanel.tsx
│ └─ HistoryLog.tsx
└─ App.tsx Vue Live demo — coming soon
src/
├─ types/
│ └─ meeting.ts
├─ runtime/
│ ├─ polaris.ts
│ ├─ useWorkflow.ts
│ ├─ useCanExecute.ts
│ ├─ useGlobalContext.ts
│ └─ WorkflowTrace.vue
├─ components/
│ ├─ workflow-action.ts
│ ├─ Button.vue
│ ├─ StatusBadge.vue
│ ├─ ActionButton.vue
│ └─ WorkflowActionBar.vue
├─ features/
│ ├─ auth/
│ │ ├─ mock-users.ts
│ │ └─ Login.vue
│ └─ meeting/
│ ├─ meeting.config.ts
│ ├─ MeetingList.vue
│ ├─ MeetingDetail.vue
│ ├─ MeetingForm.vue
│ └─ NotePanel.vue
├─ router/
│ └─ index.ts
└─ App.vue src/app/
├─ types/
│ └─ meeting.ts
├─ runtime/
│ ├─ polaris.service.ts
│ ├─ workflow.ts
│ ├─ can-execute.ts
│ ├─ global-context.ts
│ └─ workflow-trace.component.ts
├─ components/
│ ├─ workflow-action.ts
│ ├─ button.component.ts
│ ├─ status-badge.component.ts
│ ├─ action-button.component.ts
│ └─ workflow-action-bar.component.ts
├─ features/
│ ├─ auth/
│ │ ├─ mock-users.ts
│ │ ├─ login.component.ts
│ │ └─ auth.guard.ts
│ └─ meeting/
│ ├─ meeting.config.ts
│ ├─ history.ts
│ ├─ history-log.component.ts
│ ├─ note-panel.component.ts
│ ├─ meeting-list.component.ts
│ ├─ meeting-detail.component.ts
│ └─ meeting-form.component.ts
├─ app.routes.ts
└─ app.component.ts Svelte Live demo — coming soon
src/
├─ lib/
│ ├─ types/
│ │ └─ meeting.ts
│ ├─ runtime/
│ │ ├─ polaris.ts
│ │ ├─ workflow.svelte.ts
│ │ ├─ can-execute.svelte.ts
│ │ ├─ global-context.svelte.ts
│ │ └─ WorkflowTrace.svelte
│ ├─ components/
│ │ ├─ workflow-action.ts
│ │ ├─ Button.svelte
│ │ ├─ StatusBadge.svelte
│ │ ├─ ActionButton.svelte
│ │ └─ WorkflowActionBar.svelte
│ └─ features/
│ ├─ auth/
│ │ ├─ mock-users.ts
│ │ └─ Login.svelte
│ └─ meeting/
│ ├─ meeting.config.ts
│ ├─ MeetingList.svelte
│ ├─ MeetingDetail.svelte
│ ├─ MeetingForm.svelte
│ └─ NotePanel.svelte
└─ routes/
├─ +layout.svelte
├─ +page.svelte
└─ meetings/[id]/+page.svelte src/
├─ types/
│ └─ meeting.ts
├─ runtime/
│ ├─ polaris.ts
│ ├─ workflow.ts
│ ├─ can-execute.ts
│ ├─ global-context.ts
│ └─ WorkflowTrace.tsx
├─ components/
│ ├─ workflow-action.ts
│ ├─ Button.tsx
│ ├─ StatusBadge.tsx
│ ├─ ActionButton.tsx
│ └─ WorkflowActionBar.tsx
├─ features/
│ ├─ auth/
│ │ ├─ mock-users.ts
│ │ ├─ Login.tsx
│ │ └─ RequireAuth.tsx
│ └─ meeting/
│ ├─ meeting.config.ts
│ ├─ MeetingList.tsx
│ ├─ MeetingDetail.tsx
│ ├─ MeetingForm.tsx
│ └─ NotePanel.tsx
└─ App.tsx Vanilla JS Live demo — coming soon
src/
├─ types/
│ └─ meeting.ts
├─ runtime/
│ ├─ polaris.ts
│ ├─ store.ts
│ ├─ workflow.ts
│ ├─ can-execute.ts
│ ├─ global-context.ts
│ └─ workflow-trace.ts
├─ components/
│ ├─ dom.ts
│ ├─ button.ts
│ ├─ status-badge.ts
│ ├─ workflow-action.ts
│ ├─ action-button.ts
│ └─ workflow-action-bar.ts
├─ features/
│ ├─ auth/
│ │ ├─ mock-users.ts
│ │ └─ login.ts
│ └─ meeting/
│ ├─ meeting.config.ts
│ ├─ meeting-list.ts
│ ├─ meeting-detail.ts
│ ├─ meeting-form.ts
│ └─ note-panel.ts
├─ router.ts
└─ main.ts View the full repo on GitHub →