A beginner-friendly guitar learning web application built with React, TypeScript, and Express in a modern monorepo setup.
- Frontend: React + TypeScript + Vite
- Backend: Express + TypeScript + Node.js
- Database: PostgreSQL + Prisma (coming soon)
- Monorepo: pnpm + TurboRepo
- Linting: ESLint + Prettier
- Git Hooks: Husky + lint-staged + commitlint
- CI/CD: GitHub Actions
guitar-world/
├── apps/
│ ├── web/ # React frontend (Vite)
│ └── api/ # Express backend
├── packages/
│ ├── config/ # Shared ESLint/Prettier configs
│ └── tsconfig/ # Shared TypeScript configs
├── .github/
│ └── workflows/ # GitHub Actions CI
└── package.json # Root workspace config
- Node.js 18+
- pnpm 8+
-
Install dependencies:
pnpm install
-
Setup git hooks:
pnpm prepare
Run both frontend and backend in development mode:
pnpm devThis will start:
- Web app at http://localhost:3000
- API server at http://localhost:3001
Run frontend only:
pnpm --filter @guitar-world/web devRun backend only:
pnpm --filter @guitar-world/api devBuild all apps:
pnpm buildRun type checking:
pnpm typecheckRun linting:
pnpm lintRun tests:
pnpm testFormat code:
pnpm formatGET /- API infoGET /healthz- Health check (returns{ status: "ok" })
- Create a feature branch
- Make your changes
- Commit using conventional commits (enforced by commitlint)
- Push your branch
- Create a pull request
This project uses conventional commits:
feat: add new guitar tuner feature
fix: resolve chord recognition bug
docs: update API documentation
GitHub Actions automatically runs on pull requests:
- Type checking
- Linting
- Testing
- Building
- Fork the repository
- Create your feature branch (
git checkout -b feat/amazing-feature) - Commit your changes (
git commit -m 'feat: add amazing feature') - Push to the branch (
git push origin feat/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License.