A modern web application for learning piano through interactive music sheet visualization and playback. Built with Vue 3, TypeScript, and modern web technologies.
Use it online, for free, with no tracking or whatsoever: 🔗Piano Buddy
- Interactive Music Sheet Display: Visualize sheet music using OpenSheetMusicDisplay
- Colored Note Visualization: Each note is color-coded for easier learning
- Part Selection: Support for multiple instrument parts in a single sheet
- Music Library Management: Upload and manage your own MusicXML files or use pre-configured songs
- Offline Support: Works without internet connection after initial load
- Internationalization: Supports multiple languages (English, German)
- Responsive Design: Works seamlessly on desktop and mobile devices
- Zero Tracking: Complete privacy, no analytics or tracking
- Frontend Framework: Vue 3 with TypeScript
- Router: Vue Router
- Database: Dexie.js (IndexedDB wrapper)
- Music Sheet Rendering: OpenSheetMusicDisplay
- Build Tool: Vite
- Package Manager: npm
- Testing:
- Unit Tests: Vitest
- E2E Tests: Playwright
- Code Quality:
- ESLint
- Prettier
- TypeScript
- Husky for Git hooks
- Node.js (v18 or higher recommended)
- npm (v9 or higher)
-
Clone the repository:
git clone https://github.com/yourusername/piano-buddy.git cd piano-buddy
-
Install dependencies:
npm install
-
Start the development server:
npm run dev
-
Open your browser and navigate to
http://localhost:5173
piano-buddy/
├── src/
│ ├── components/ # Vue components
│ │ ├── collections/ # Collection related components
│ │ ├── layout/ # Layout components
│ │ └── sheet/ # Music sheet components
│ ├── composables/ # Vue composables
│ ├── i18n/ # Internationalization
│ ├── services/ # Business logic services
│ ├── types/ # TypeScript type definitions
│ └── views/ # Page components
├── public/ # Static assets
└── tests/ # Test files
npm run dev
- Start development servernpm run build
- Build for productionnpm run test
- Run unit testsnpm run test:e2e
- Run end-to-end testsnpm run lint
- Lint codenpm run format
- Format code
- Renders MusicXML files using OpenSheetMusicDisplay
- Supports multiple parts and voices
- Automatic page layout and scaling
- Color-coded notes for easier learning
- Dynamic width based on note duration
- Visual distinction between notes and rests
- Responsive layout with automatic line breaks
- Local storage using RxDB
- Automatic synchronization
- Offline-first architecture
- CRUD operations for music sheets
We welcome contributions! Please follow these steps:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature
) - Commit your changes (
git commit -m 'Add amazing feature'
) - Push to the branch (
git push origin feature/amazing-feature
) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- OpenSheetMusicDisplay for music sheet rendering
- RxDB for local database management
- Vue.js for the reactive framework
- All contributors who have helped shape this project
If you find this project useful, please consider giving it a star ⭭ on GitHub!