A digital gig bag for musicians to manage songs, setlists, and perform on stage.
- Song Library: Manage your complete song catalog with lyrics, metadata, and tags
- Setlist Management: Create and organize setlists for performances
- Song Editor: Edit songs with rich metadata including:
- Key, tempo, and time signature
- Performance notes and production notes
- Custom font size, scroll speed, and text alignment
- Multiple layout modes (standard/split)
- Font family selection (sans/serif/mono)
- Performance Mode: On-stage performance view with:
- Auto-scroll with configurable speed and delay
- Split-screen layout for lyrics and notes
- Performance-specific display settings
- Document Import: Import songs from various formats:
- OCR support for scanning physical documents (Tesseract.js)
- Word document support (.docx)
- PDF export capability
- AI Integration: Google Gemini AI for intelligent song management
- Offline Support: PWA with service worker for offline access
- Authentication: Supabase-based user authentication
- Drag & Drop: Intuitive drag-and-drop interface for setlist organization
- Dark Theme: Built-in theme support with dark mode
- Responsive Design: Works on desktop, tablet, and mobile devices
- Frontend: React 19, TypeScript
- Build Tool: Vite
- Styling: Tailwind CSS v4
- Backend: Supabase (authentication, database)
- Local Storage: Dexie (IndexedDB wrapper)
- AI: Google Gemini AI
- OCR: Tesseract.js
- PDF Generation: jsPDF
- Document Processing: Mammoth (Word documents)
- Drag & Drop: @dnd-kit
- Routing: React Router v7
- Animations: Motion
- Icons: Lucide React
- PWA: vite-plugin-pwa
- Node.js 18+
- A Supabase project (for authentication and database)
- A Google Gemini API key
- Clone the repository:
git clone <repository-url>
cd SongBinderSync- Install dependencies:
npm install- Set up environment variables:
cp .env.example .envEdit .env and add your credentials:
GEMINI_API_KEY="your-gemini-api-key"
APP_URL="http://localhost:3000"
SUPABASE_URL="https://your-project-ref.supabase.co"
SUPABASE_ANON_KEY="your-public-anon-key"Start the development server:
npm run devThe app will be available at http://localhost:3000
Build for production:
npm run buildPreview the production build:
npm run previewThe app is configured for deployment on Vercel. The vercel.json file handles SPA routing by redirecting all routes to index.html.
To deploy:
- Push your code to a Git repository
- Import the project in Vercel
- Add environment variables in Vercel dashboard
- Deploy
GEMINI_API_KEY: Your Google Gemini API keyAPP_URL: Your production URL (e.g., https://your-app.vercel.app)SUPABASE_URL: Your Supabase project URLSUPABASE_ANON_KEY: Your Supabase anonymous/public key
npm run dev- Start development server on port 3000npm run build- Build for productionnpm run preview- Preview production buildnpm run clean- Remove dist directorynpm run lint- Run TypeScript type checking
src/
├── components/ # Reusable UI components
│ ├── AuthProvider.tsx
│ ├── ThemeProvider.tsx
│ ├── InstallPrompt.tsx
│ └── ...
├── pages/ # Page components
│ ├── MainLayout.tsx
│ ├── SongsLibrary.tsx
│ ├── SetlistsManager.tsx
│ ├── SetlistDetail.tsx
│ ├── SongEditor.tsx
│ ├── PerformanceMode.tsx
│ └── SignIn.tsx
├── hooks/ # Custom React hooks
├── lib/ # Utility libraries
├── types.ts # TypeScript type definitions
├── App.tsx # Main app component
└── main.tsx # Entry point
Apache-2.0