Multi-app educational platform built with Nuxt 4, featuring separate applications for students, staff, and instructors.
- students - Student portal application
- staff - Staff/administrator dashboard
- instructors - Instructor management interface
- Framework: Nuxt 4
- UI: @nuxt/ui + shadcn-nuxt
- Database: SQLite (better-sqlite3)
- Auth: Custom JWT-based authentication
- Validation: Zod + vee-validate
├── apps/
│ ├── students/ # Student portal (extends core layer)
│ ├── staff/ # Staff dashboard (extends core layer)
│ └── instructors/ # Instructor app (extends core layer)
├── layers/
│ └── core/
│ ├── components/ # Shared UI components
│ ├── composables/ # Shared composables
│ └── lib/ # Shared utilities & themes
├── server/
│ ├── api/ # API routes (auth, etc.)
│ ├── middleware/ # Request middleware
│ └── utils/ # Server utilities
└── db/ # SQLite database
# Install dependencies
bun install # or npm install
# Prepare Nuxt
bun run postinstall
# or: npx nuxt prepareEach app can run independently:
# Run student app (localhost:3000)
bun run dev:students
# Run staff app (localhost:3000)
bun run dev:staff
bun run dev:instructors# Build student app
bun run build:students
# Build staff app
bun run build:staff
# Preview production build
bun run previewAll apps extend the layers/core layer which provides:
- Shared UI Components: 50+ shadcn-based components in
layers/core/components/ui/ - Shared Composables: Reusable Vue composables in
layers/core/composables/ - Theme System: CSS variables and styling in
layers/core/lib/theme.css
Each app automatically imports components and composables from the core layer without explicit imports.
SQLite database located at db/database.sqlite.
To reset the database:
rm db/database.sqlite
# Restart dev server to reinitialize