Dependencies Inventory
From package.json (clean, modern, no spurious squatter packages — a notable contrast to the backends).
Production dependencies (~55)
Framework
| Package |
Version |
Notes |
react |
^18.3.1 |
|
react-dom |
^18.3.1 |
|
react-router-dom |
^6.26.2 |
Routing |
Server-state / fetch
| Package |
Version |
Notes |
@tanstack/react-query |
^5.56.2 |
Mounted in App.tsx; adoption partial |
| Package |
Version |
Notes |
react-hook-form |
^7.53.0 |
|
@hookform/resolvers |
^3.9.0 |
Bridges zod to react-hook-form |
zod |
^3.23.8 |
Schema validation |
input-otp |
^1.2.4 |
OTP input UI component |
shadcn/ui dependencies (all Radix UI primitives)
| Package |
Version |
@radix-ui/react-accordion |
^1.2.0 |
@radix-ui/react-alert-dialog |
^1.1.1 |
@radix-ui/react-aspect-ratio |
^1.1.0 |
@radix-ui/react-avatar |
^1.1.0 |
@radix-ui/react-checkbox |
^1.1.1 |
@radix-ui/react-collapsible |
^1.1.0 |
@radix-ui/react-context-menu |
^2.2.1 |
@radix-ui/react-dialog |
^1.1.2 |
@radix-ui/react-dropdown-menu |
^2.1.1 |
@radix-ui/react-hover-card |
^1.1.1 |
@radix-ui/react-label |
^2.1.0 |
@radix-ui/react-menubar |
^1.1.1 |
@radix-ui/react-navigation-menu |
^1.2.0 |
@radix-ui/react-popover |
^1.1.1 |
@radix-ui/react-progress |
^1.1.0 |
@radix-ui/react-radio-group |
^1.2.0 |
@radix-ui/react-scroll-area |
^1.1.0 |
@radix-ui/react-select |
^2.1.1 |
@radix-ui/react-separator |
^1.1.0 |
@radix-ui/react-slider |
^1.2.0 |
@radix-ui/react-slot |
^1.1.0 |
@radix-ui/react-switch |
^1.1.0 |
@radix-ui/react-tabs |
^1.1.0 |
@radix-ui/react-toast |
^1.2.1 |
@radix-ui/react-toggle |
^1.1.0 |
@radix-ui/react-toggle-group |
^1.1.0 |
@radix-ui/react-tooltip |
^1.1.4 |
Styling utilities
| Package |
Version |
Notes |
class-variance-authority |
^0.7.1 |
cva for variant APIs |
clsx |
^2.1.1 |
conditional className |
tailwind-merge |
^2.5.2 |
dedupe tailwind classes; wrapped by cn() |
tailwindcss-animate |
^1.0.7 |
(Tailwind plugin; also needs to be listed in devDependencies — verify) |
| Package |
Version |
Notes |
cmdk |
^1.0.0 |
Command palette (used in shadcn command) |
embla-carousel-react |
^8.3.0 |
Carousel |
react-day-picker |
^8.10.1 |
Date picker |
react-resizable-panels |
^2.1.3 |
Resizable layouts |
recharts |
^2.12.7 |
Charts |
vaul |
^0.9.3 |
Drawer component |
sonner |
^1.5.0 |
Toast (alternative to shadcn toast) |
next-themes |
^0.3.0 |
Theme switching — declared, not yet used |
lucide-react |
^0.462.0 |
Icon set |
Utilities
| Package |
Version |
Notes |
date-fns |
^3.6.0 |
Date helpers |
Dev dependencies (~17)
| Package |
Version |
Notes |
@eslint/js |
^9.9.0 |
|
@tailwindcss/typography |
^0.5.15 |
Tailwind prose plugin |
@types/node |
^22.5.5 |
|
@types/react |
^18.3.3 |
|
@types/react-dom |
^18.3.0 |
|
@vitejs/plugin-react-swc |
^3.5.0 |
SWC for React build |
autoprefixer |
^10.4.20 |
|
eslint |
^9.9.0 |
|
eslint-plugin-react-hooks |
^5.1.0-rc.0 |
RC version — flag for replacement when stable |
eslint-plugin-react-refresh |
^0.4.9 |
|
globals |
^15.9.0 |
|
lovable-tagger |
^1.1.7 |
Dev-only plugin from Lovable.dev — tags components in dev mode for the Lovable editor. See security.md. |
postcss |
^8.4.47 |
|
tailwindcss |
^3.4.11 |
|
tsconfig-paths |
(transitively) |
|
typescript |
^5.5.3 |
|
typescript-eslint |
^8.0.1 |
|
vite |
^5.4.1 |
|
Three lockfiles
The repo contains three lockfiles simultaneously:
- package-lock.json (npm)
- yarn.lock (yarn classic)
- bun.lockb (bun)
This is a smell — different engineers run different package managers, producing inconsistent installs. Pick one (the README suggests npm; the size of bun.lockb suggests bun has been used too). Delete the other two.
Notable absences
| Capability |
Missing |
| Tests |
no Vitest / Jest / Playwright / Cypress |
| Code formatter |
no Prettier |
| Pre-commit |
no Husky / lint-staged |
| Type-checked CI |
no tsc --noEmit in any script |
| Bundle analyser |
no rollup-plugin-visualizer |
| HTTP client |
no axios — uses fetch directly |
| State machine |
no XState / Zustand / Redux |
Health summary
Modern, healthy dependency tree. No deprecated packages. No squatter packages. Versions are recent. The shadcn/Radix combination is well-supported. Notable improvements would be:
- Remove the two unused lockfiles
- Add Prettier (
prettier + eslint-config-prettier + a script format)
- Add
tsc --noEmit as a CI gate
- Decide whether
next-themes will be used; remove if not
- Decide whether
sonner and shadcn toast are both needed; consolidate
- Audit whether
lovable-tagger is a runtime dependency in production (per vite.config.ts it's only loaded mode === 'development', so it's dev-only — good)