React + Vite
Fast client application for the logged-in MTY Hub experience.
TypeScript · pnpm
A focused, multi-shop MTY Hub rebuild with Clerk, Convex, Vite, React Router, and Vercel. Start with the workflow your service advisor needs. Add platform complexity only when it earns its place.
Use Clerk now. It gets organizations, user management, invitations, roles, and polished sign-in UI into the product quickly. Save WorkOS for the moment a real customer needs enterprise SSO or directory sync.
Clerk selectedEach tool gets one job. This keeps the codebase easy to understand for you, Luciano, and the next person who joins the build.
Fast client application for the logged-in MTY Hub experience.
TypeScript · pnpm
Routes, layouts, protected screens, and shop-aware navigation.
/org/:orgSlug/shop/:shopId
Sign-in, people, organizations, invitations, and company roles.
active organization
Data, realtime updates, functions, jobs, and product authorization.
queries · mutations · actions
Deploy the frontend on Vercel. Convex provides an official Vercel workflow that deploys your frontend and backend functions from the same code push.[3]
Clerk is the right choice here because the first MTY Hub job is product workflow, not custom identity infrastructure.
Clerk brings the identity pieces that otherwise steal weeks from a first release. Its official Convex integration passes a signed-in Clerk session into Convex, where backend functions can use the verified identity.[1]
Clerk Organizations are designed for multi-tenant apps. A user can belong to more than one organization, and the active organization selects the current company context.[2]
Lucas, a service advisor, a technician, or an outside accountant. They may work across more than one customer company.
MTY Collision or a future collision-group customer. This is the company boundary, its members, and its broad role permissions.
Dallas, Fort Worth, and Arlington live under one company. Do not create one Clerk organization per location.
A manager may access every shop. A technician may work only in Dallas. Keep this product rule in Convex.
Clerk includes active-organization information in the session token. Convex functions should still make every ownership and shop check before returning or changing business data.[6]
Make the first codebase boring on purpose. The goal is a running app with real identity and a real backend, not a pile of optional tools.
Use Vite with React and TypeScript. React Router officially supports this direct Vite setup.[4]
npx convex dev creates the Convex project connection, writes the convex/ folder, and keeps backend functions synced while you build.[5]
Enable Organizations. Activate Clerk's Convex integration, put the Clerk Frontend API URL in the Convex environment, then add convex/auth.config.ts and sync it with Convex.[1]
At the app root, Clerk wraps the Convex provider. This lets the client send Clerk's auth token to Convex without building a second session system.[1]
Start with company setup, shop setup, team invites, and one repair-order flow. A good first release lets someone create, assign, update, and close a repair.
Each phase must produce a usable result. Do not wait for the entire dream product before putting the first real workflow in front of a shop team.
app.mtyhub.comNone of these are wrong. They are simply not version-one work. A direct frontend-to-Convex product does not need extra machinery just to feel “serious.”
“Ready” is not a long feature list. It is the moment a real team can get through their daily work without dropping the thread.
npx convex dev flow.