Your complete guide to chords, scales, and songs. A modern web application built for guitarists to explore the Nashville Number System and manage their personal song collection.
- Interactive chord progression explorer
- Support for all major and minor keys
- Visual display of chords, notes, and Nashville numbers
- Perfect for transposing songs and understanding music theory
- Create and manage your personal song collection
- Store lyrics with chord notations
- Edit and delete songs
- Cloud-synced with Firebase
- Secure authentication with Google Sign-In
- Frontend: React 19 + TypeScript
- Styling: Tailwind CSS 4
- State Management: Redux Toolkit
- Routing: React Router 7
- Backend: Firebase (Authentication + Firestore)
- Build Tool: Vite 7
- Node.js (v18 or higher)
- npm or yarn
- Firebase account
-
Clone the repository:
git clone https://github.com/Samuel310/guitar-handbook.git cd guitar-handbook -
Install dependencies:
npm install
-
Set up environment variables:
- Copy
.env.exampleto.env - Add your Firebase configuration:
VITE_FIREBASE_API_KEY=your_api_key_here VITE_FIREBASE_AUTH_DOMAIN=your_auth_domain_here VITE_FIREBASE_PROJECT_ID=your_project_id_here VITE_FIREBASE_STORAGE_BUCKET=your_storage_bucket_here VITE_FIREBASE_MESSAGING_SENDER_ID=your_messaging_sender_id_here VITE_FIREBASE_APP_ID=your_app_id_here VITE_FIREBASE_MEASUREMENT_ID=your_measurement_id_here
- Copy
-
Start the development server:
npm run dev
-
Open your browser to
http://localhost:5173
npm run buildThe built files will be in the dist directory, ready for deployment.
- Create a Firebase project at Firebase Console
- Enable Google Authentication in Firebase Authentication
- Create a Firestore database
- Set up Firestore security rules:
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if request.auth != null && request.auth.token.admin == true;
}
match /chords-map/{document} {
allow read: if request.auth != null;
}
match /users/{userId} {
allow read, write: if request.auth != null && request.auth.uid == userId;
match /songs/{songsId} {
allow read, write: if request.auth != null && request.auth.uid == userId;
}
}
}
}guitar-handbook/
├── src/
│ ├── config/ # Firebase configuration
│ ├── controller/ # Business logic and API calls
│ ├── model/ # TypeScript interfaces and types
│ ├── store/ # Redux store and slices
│ ├── view/ # React components and pages
│ │ ├── components/ # Reusable UI components
│ │ ├── hooks/ # Custom React hooks
│ │ └── pages/ # Page components
│ ├── App.tsx
│ └── main.tsx
├── public/ # Static assets
└── dist/ # Production build outputMIT License - feel free to use this project for personal or commercial purposes.
Samuel310
- Nashville Number System methodology
- Firebase for backend services
- Vite for blazing fast development experience