A production-ready Single Page Application (SPA) built with Quasar.dev for managing students and classes. Features real-time data synchronization with Supabase backend, modern CI/CD pipeline, and automated translations.
- Student Management: Add, edit, delete students with validation
- Class Management: Add, edit, delete classes with detailed information
- Class Assignments: Assign/remove students from classes with batch operations
- Real-time Data: Supabase integration with optimistic updates
- Search & Filter: Quick search across students and classes
- TypeScript: Full type safety across frontend and backend
- Automated Testing: ESLint, TypeScript checks on every PR
- Automated Translations: AI-powered i18n with OpenAI integration
- Performance Monitoring: Lighthouse audits on every deployment
- Security Scanning: CodeQL and dependency vulnerability checks
- Auto-merge: Dependabot PRs for minor/patch updates
- Responsive Design: Mobile-first approach with Quasar components
- Multi-language: English and Polish with automated translation workflow
- Modern UI: Material Design 3 components with accessibility
- Error Handling: Comprehensive error boundaries and user feedback
- Performance: Lazy loading, code splitting, and caching strategies
- Frontend: Quasar.dev (Vue 3, TypeScript)
- State Management: Pinia with Pinia Colada for API caching
- Backend: Supabase (PostgreSQL)
- Styling: SCSS with Quasar variables
- Internationalization: Vue i18n
- Node.js (v18 or higher)
- Yarn or npm
- Supabase account
Create a .env file in the root directory:
# Supabase Configuration
VITE_SUPABASE_URL=https://your-project.supabase.co
VITE_SUPABASE_ANON_KEY=your-anon-key- Create a new Supabase project
- Run the SQL schema from
supabase-schema.sqlin your Supabase SQL editor - Update your environment variables with your Supabase URL and anon key
# Install dependencies
yarn install
# Fill database with sample data
yarn fill-db
# Start development server
yarn devThe application uses three main tables:
- students: Student information (id, first_name, last_name)
- classes: Class information (id, name, description)
- class_assignments: Many-to-many relationship between students and classes
The application provides REST API functionality through Supabase:
GET /students- Get all studentsPOST /students- Create new studentPATCH /students/:id- Update studentDELETE /students/:id- Delete student
GET /classes- Get all classesPOST /classes- Create new classPATCH /classes/:id- Update classDELETE /classes/:id- Delete class
POST /class_assignments- Assign student to classDELETE /class_assignments- Remove student from class
This project includes a comprehensive CI/CD pipeline with:
- Pull Request Checks: ESLint, TypeScript, and build verification
- Security Scanning: CodeQL analysis and dependency audits
- Performance Monitoring: Lighthouse audits with performance budgets
- Auto-Translation: OpenAI-powered i18n translation on content changes
- Auto-Deployment: Staging and production deployments with preview environments
- Dependency Management: Automated Dependabot PRs with smart auto-merge
- β All PRs must pass linting and type checking
- β Security vulnerabilities automatically detected
- β Performance regressions caught early
- β Translations updated automatically
- β Dependencies kept up-to-date
# Development
yarn dev # Start development server
yarn type-check # Run TypeScript type checking
yarn lint # Run ESLint
yarn lint:fix # Fix ESLint issues automatically
yarn format # Format code with Prettier
yarn format:check # Check code formatting
# Production
yarn build # Build for production
# Database
yarn fill-db # Fill database with sample data
# Testing (when implemented)
yarn test # Run unit tests
yarn test:e2e # Run end-to-end testssrc/
βββ components/ # Reusable Vue components
βββ composables/ # Pinia Colada API composables
βββ layouts/ # App layouts
βββ pages/ # Page components
βββ services/ # API services and Supabase client
βββ stores/ # Pinia stores
βββ i18n/ # Internationalization files
βββ css/ # Global styles
- Pinia Colada: Automatic caching and background refetching
- Real-time Updates: Optimistic updates with error handling
- Offline Support: Cached data available when offline
- Material Design: Consistent Quasar components
- Responsive: Mobile-first design
- Loading States: Proper feedback during async operations
- Error Handling: User-friendly error messages
- Multi-language: English and Polish support
- Dynamic Switching: Change language on the fly
- Localized Messages: All UI text is translatable
To populate your database with sample data, run:
yarn fill-dbThis will create:
- 15 sample students with Polish names
- 10 sample classes in various subjects
- Random class assignments for each student
This project features automated i18n translation using OpenAI:
- Edit source language: Make changes to
src/i18n/en-US.json - Automatic translation: Push to main/develop triggers translation workflow
- AI translation: OpenAI GPT-4 translates to Polish with context awareness
- Auto-commit: Translated files are automatically committed back
Set up the following GitHub secrets:
OPENAI_API_KEY: Your OpenAI API key for translations
- English (en-US) - Source language
- Polish (pl) - Auto-translated
For full CI/CD functionality, configure these GitHub secrets:
# Translation
OPENAI_API_KEY=sk-... # OpenAI API for translations
# Deployment (optional)
NETLIFY_AUTH_TOKEN=netlify-token # Netlify deployment
NETLIFY_SITE_ID=netlify-site-id # Netlify site ID
NETLIFY_STAGING_SITE_ID=staging-site-id # Netlify staging site
# Notifications (optional)
SLACK_WEBHOOK_URL=https://hooks.slack... # Slack notifications
LHCI_GITHUB_APP_TOKEN=github-token # Lighthouse CIPlease read CONTRIBUTING.md for detailed guidelines.
- Fork the repository
- Create a feature branch (
git checkout -b feat/new-feature) - Make your changes following our coding standards
- Ensure all checks pass (
yarn lint,yarn type-check) - Create a Pull Request using our template
Use conventional commits:
feat: add student search functionality
fix: resolve class assignment bug
docs: update API documentation
chore: update dependenciesThis project is licensed under the MIT License.