A comprehensive music practice management application built with Next.js and Supabase. This app helps music teachers manage classes, assignments, and track student practice sessions.
- Upload and manage music books with PDF support
- Track practice sessions for individual pieces
- Weekly practice statistics and analytics
- Piece-specific practice tracking
- Create and manage music classes
- Student enrollment and roster management
- Class-specific assignments and tracking
- Create assignments for individual students or entire classes
- Track assignment completion and progress
- SMS notifications for assignment updates
- Log practice sessions with duration tracking
- Weekly practice statistics
- Progress visualization and analytics
- Secure token-based student access
- Mobile-friendly interface for practice logging
- Framework: Next.js 16.0.6 with App Router
- Database: Supabase
- Frontend: React 19.2.0
- Styling: CSS Modules
- Authentication: Supabase Auth
- File Storage: Supabase Storage (for PDFs)
- SMS: Custom SMS integration
- Node.js 18+
- npm, yarn, pnpm, or bun
- Supabase account and project
- Clone the repository:
git clone <repository-url>
cd practice-app- Install dependencies:
npm install
# or
yarn install
# or
pnpm install- Set up environment variables:
Create a
.env.localfile in the root directory:
NEXT_PUBLIC_SUPABASE_URL=your_supabase_url
NEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key
SUPABASE_SERVICE_ROLE_KEY=your_service_role_key- Run the development server:
npm run dev
# or
yarn dev
# or
pnpm dev
# or
bun dev- Open http://localhost:3000 to view the application.
src/
├── app/ # Next.js App Router pages
│ ├── api/ # API routes
│ │ ├── assignments/ # Assignment management
│ │ ├── books/ # Book and practice tracking
│ │ ├── classes/ # Class management
│ │ ├── enrollments/ # Student enrollments
│ │ ├── pieces/ # Music piece management
│ │ └── sessions/ # Practice sessions
│ ├── books/ # Book management pages
│ ├── classes/ # Class management pages
│ └── s/ # Student access pages
├── components/ # Reusable React components
│ ├── assignments/ # Assignment-related components
│ ├── books/ # Book management components
│ ├── classes/ # Class management components
│ └── common/ # Shared components
└── lib/ # Utility functions and configurations
├── assignmentsDb.js # Assignment database operations
├── sms.js # SMS functionality
└── supabaseClient.js # Supabase configuration
GET/POST /api/books- List/create booksGET/PUT/DELETE /api/books/[id]- Book operationsGET /api/books/[id]/stats/weekly- Weekly practice stats
GET/POST /api/classes- List/create classesGET/PUT/DELETE /api/classes/[id]- Class operationsGET /api/classes/[id]/roster- Class roster
GET/POST /api/assignments- List/create assignmentsGET/PUT/DELETE /api/assignments/[id]- Assignment operations
GET/POST/DELETE /api/sessions/[sessionId]- Session management
The app uses Supabase with the following main tables:
books- Music books and materialsclasses- Music classesstudents- Student informationenrollments- Class enrollmentsassignments- Practice assignmentspractice_sessions- Individual practice logspieces- Music pieces within books
npm run dev- Start development servernpm run build- Build for productionnpm run start- Start production servernpm run lint- Run ESLint
- ESLint configuration with Next.js rules
- React Compiler enabled for optimization
- CSS Modules for component styling
The app can be deployed on Vercel, Netlify, or any platform supporting Next.js:
- Build the application:
npm run build-
Set up environment variables on your hosting platform
-
Deploy using your preferred method
The easiest way to deploy is using the Vercel Platform:
- Connect your GitHub repository
- Configure environment variables
- Deploy automatically on every push
- Audio Analysis: AI agent that listens to student practice sessions in real-time
- Performance Assessment: Automated evaluation of pitch accuracy, rhythm, tempo, and technique
- Personalized Exercises: Generate custom 4-8 measure exercises targeting specific areas of improvement
- Adaptive Learning: Exercises that adjust difficulty based on student progress and skill level
- Real-time Feedback: Instant coaching suggestions during practice sessions
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
This project is private and proprietary.