Drop-in business modules for Convex.
LMS, mail, tasks, inventory, and more. Each ships a Convex Component, headless hooks, and an optional reference UI. Use our UI, or bring your own. The backend is yours either way. Compose them into any app.
Built with and on top of Convex.dev Components (the get-convex project). An extension one layer up, not a competitor; not Chef, not Templates.
How every module ships
Every module is the same shape: an agnostic core you always get, plus a reference UI you take or replace. There is no single reference app; you build whatever consumer you want.
The backend
convex.config.ts, schema, and functions as an isolated, app.use()-installable Component. Real-time and transactional by construction. Same everywhere.
The logic
useX() over Convex hooks: no router, no styling system, navigation passed in as callbacks. Works in any React framework, on web or React Native.
Take it or replace it
Each module ships its own optional reference UI. Drop it in for batteries included, or take the Component and hooks and build your own surface.
Opinionated about the module contract. Unopinionated about your stack.
Works with your framework
The hard part, the real-time backend, is yours on any framework Convex supports. The ready-made hooks and the optional UI are React.
React: Next, Remix, TanStack Start, Expo
Everything out of the box: the backend, ready-made data hooks, and an optional UI. Web and React Native from the same module.
Svelte, Vue, or anything else
The Convex backend works the same way (those clients are first-class). The hooks and UI are React, so you connect the backend with a little glue of your own. The expensive part is still done for you.
Prescribe the shape, not the stack
One module serves the web-only majority and the cross-platform minority, without forcing either into the other's toolchain.
A Convex Component
Layer 1 is the Convex-native unit of value: convex.config.ts, schema, functions, isolated and app.use()-installable, transactional by construction.
Headless hooks
Layer 2 is useX() over Convex hooks: no router import, no styling system, navigation passed in as callbacks. It runs under any React renderer, DOM or React Native.
Optional reference UI
Want batteries included? Drop in the optional RN + NativeWind kit. Want your own surface? Take the Component and hooks and write ~5-line route wrappers.
The three-layer model
Most-portable at the bottom, most-consumer-specific at the top. You only write the top.
A real proving ground
The contract was extracted from a system in production. Here is what is verified, stated plainly.
50+ portals, one deployment
A production deployment runs 50+ portals on one Convex deployment, used daily by a working college professor for real classes (LMS, bookings, mail). Not a demo. 31 authored components run in production on one deployment; 6 flagships in packaging.
Live federated portal
A live federated portal runs on its own subdomain (valid cert), consuming the shared deployment by name via anyApi. Separate repos, shared data by construction.
One source, two platforms
One shared component renders on web (react-native-web) and mobile (Expo) from a single source. The two apps symlink the same file; nothing is copied.
Components in production
app.use(betterAuth) and app.use(posthog) are live. Entity linking already goes through a canonical Better Auth userId passed explicitly into each Component, so cross-Component mutations stay atomic.
Modules in flight
Every module below already exists as an authored Convex Component running in the production deployment. None are published, installable packages yet; packaging is in progress, led by convex-diary and convex-audio-analyzer.
Garden
A worked example of the module contract, mid-extraction
Diary
Daily notes with a federated standalone SPA
Audio Analyzer
Waveform, annotation, and transient analysis for audio tracks
Inbox, helpdesk, and transactional email
Tasks
Issues, projects, and bug reports, composed
LMS
Courses, students, grades, and attendance
Booking
Resource scheduling without the conflicts
Inventory
Asset tracking, checkouts, and maintenance
Access
Granular per-resource sharing
Content
Articles, MDX, and Obsidian vault sync
Quiz
Subject-agnostic question packs and sessions
Clipper
Save anything from the web
Reader
PDF library with bookmarks and highlights
Commander
A bash AST visualizer registry
Shortcuts
DAW keyboard shortcut reference
Recommendations
Family movie and music recommendations
Annotations
Generic target-scoped annotations with replies
Author a module to the contract.
ConvexCompose is the second wave of Convex Components: business domains above the infra primitives. If you build to the contract, your domain travels across stacks.