
Overview
The Task Manager is the primary example app for@vertz/ui. It’s a multi-page SPA with CRUD operations, demonstrating how routing, data fetching, forms, theming, and context work together in a real application.
It uses an in-memory mock API (no server or database required), so you can run it immediately and explore every Vertz feature in action.
Source code
Browse the full source on GitHub
Features demonstrated
| Feature | API | Where in the app |
|---|---|---|
| Routing | defineRoutes(), createRouter(), createLink() | router.ts — 4 routes with typed params and search params |
| Data fetching | query() | task-list.tsx, task-detail.tsx — reactive queries with loading/error states |
| Forms | form() with schema validation | task-form.tsx — per-field errors, submit state, progressive enhancement |
| Reactive state | let (compiler transforms to signals) | task-list.tsx — status filter, all pages |
| Derived values | const (compiler transforms to computed) | task-list.tsx — filtered tasks derived from query + filter |
| Context | createContext(), useContext() | settings-context.ts — app-wide theme and default priority |
| Theming | configureTheme(), ThemeProvider | theme.ts, app.tsx — light/dark mode with contextual tokens |
| Styling | css(), variants() | components.ts — scoped styles and parameterized button/badge variants |
| Icons | @vertz/icons | Sidebar nav, filter buttons, pagination |
| URL state | useSearchParams() | task-list.tsx — pagination driven by URL search params |
| SSR | Server-side rendering with hydration | Full SSR support out of the box |
Pages
- Task List
- Task Detail
- Create Task
- Settings
The main page displays tasks with status filtering (All / To Do / In Progress / Done) and URL-based pagination. Clicking a task navigates to its detail page.

Dark mode
The app supports light and dark themes viaconfigureTheme() from @vertz/theme-shadcn. Theme switching is instant — CSS custom properties swap without re-rendering.

Project structure
src
api
mock-data.ts
components
confirm-dialog.tsx
task-card.tsx
task-form.tsx
lib
settings-context.ts
types.ts
pages
create-task.tsx
settings.tsx
task-detail.tsx
task-list.tsx
styles
components.ts
theme.ts
app.tsx
entry-client.ts
router.ts
e2e
package.json
Key patterns
Reactive state with let
The compiler transforms let declarations into signals. Assignments become signal updates, and any JSX that references the variable re-renders automatically.
Data fetching with query()
query() returns an object with reactive properties (data, loading, error). The compiler auto-wraps arguments in thunks, so changing search params automatically re-fetches.
Forms with form()
form() binds to an SDK method with schema validation. It provides per-field error signals and submit state for reactive form UIs.
Routing with defineRoutes()
Routes are defined declaratively with typed params and optional search param schemas. Pages access navigation via useRouter() — no prop threading.
Running the example
http://localhost:3000 with full SSR and HMR.


