PlayHarmonium is a free web harmonium for browser-based practice. It gives learners a clean keyboard layout with touch controls, computer-key shortcuts, Sargam labels, transpose, and beginner-friendly guides without making them install anything first.
PlayHarmonium | Feature overview
Most people searching for an online harmonium want to start playing right away, not land on a generic marketing page. This project keeps the instrument front and center while still supporting tutorials, blog content, and future product expansion.
- Play a full browser harmonium without installing software
- Use touch controls, keyboard shortcuts, or Web MIDI input
- Switch between Sargam and western note labels
- Adjust octave, transpose, and volume for daily practice
- Open a focused keyboard page for distraction-free sessions
- Read beginner guides that explain notes, layout, and practice flow
- Website: https://playharmonium.com/
- Keyboard page: https://playharmonium.com/keyboard
- Beginner guide: https://playharmonium.com/blog/harmonium-keyboard-notes-for-beginners
- Blog: https://playharmonium.com/blog
- Next.js 16
- React 19
- TypeScript
- next-intl
- Drizzle ORM
- PostgreSQL
- Tailwind CSS
- Node.js 20 or newer
- pnpm 10.33.0, matching the
packageManagerfield - PostgreSQL for the default database setup
Enable pnpm through Corepack if it is not already available:
corepack enable
corepack prepare pnpm@10.33.0 --activate-
Install dependencies:
pnpm install
-
Create a local environment file:
cp .env.example .env.local
Then update
DATABASE_URLand generate a real auth secret:openssl rand -base64 32
-
Start PostgreSQL and create the database named in
DATABASE_URL. -
Push the Drizzle schema:
pnpm db:push
-
Seed required defaults:
pnpm rbac:init pnpm config:init
-
Start the development server:
pnpm dev
-
Open http://localhost:3000.
pnpm lintchecks the codebase with ESLint.pnpm buildcreates a production build.pnpm startserves the production build afterpnpm build.pnpm db:studioopens Drizzle Studio for local database inspection.
- If install fails after switching branches, remove
node_modulesand runpnpm installagain. - If the app cannot connect to the database, confirm PostgreSQL is running and
DATABASE_URLpoints to an existing database. - If auth-related pages fail locally, confirm
AUTH_SECRETis set before startingpnpm dev.
- Production domain: playharmonium.com
- GitHub repository: bikai9289/Harmonium
- Recommended hosting: Vercel
- Install command:
pnpm install --frozen-lockfile - Build command:
pnpm build
Set the same production environment variables in Vercel, especially NEXT_PUBLIC_APP_URL, DATABASE_PROVIDER, DATABASE_URL, and AUTH_SECRET.
Project planning, setup notes, and test logs live under doc/ locally and are not committed to this repository.
