A comprehensive music discovery platform for tracking concert history, discovering new artists, and sharing musical memories with friends.
- Concert Tracking - Log every show you've attended
- Smart Enrichment - Automatic setlist lookup, Spotify playlist generation
- Photo Management - Upload and organize concert photos with Cloudinary
- Social Features - Tag friends, share experiences, discover mutual connections
- Opener Discovery - Track bands you discovered as openers
- Album Analysis - See which album was dominant at the time of each show
- Photo Collages - AI-powered image collages from multiple sources
- Artist Profiles - Dedicated pages for each artist with your concert history
- Discovery Timeline - Visual journey from first opener to headliner
- Secure API Architecture - All external API keys protected server-side
- Authentication - JWT-based user authentication with password reset
- Authorization - User ownership verification for all operations
- Email Integration - SendGrid-powered invites and notifications
- Node.js 16+ and npm 8+
- PostgreSQL database
- External API keys (optional but recommended)
-
Clone the repository
git clone https://github.com/yourusername/concert-tracker.git cd concert-tracker -
Install dependencies
npm run install:all
-
Set up environment variables
# Copy example environment files cp backend/.env.example backend/.env cp frontend/.env.example frontend/.env # Edit with your configuration nano backend/.env
-
Set up the database
npm run db:generate npm run db:push npm run db:seed
-
Start development servers
npm run dev
-
Open your browser
backend/
βββ api/ # Secure API modules
β βββ secureApi.ts # Core secure service
β βββ emailApi.ts # Email operations
β βββ spotifyApi.ts # Spotify integration
β βββ cloudinaryApi.ts # Image management
β βββ externalApi.ts # External API calls
βββ services/ # Business logic
βββ routes/ # API endpoints
βββ middleware/ # Auth & validation
βββ prisma/ # Database schema
frontend/src/
βββ components/ # Reusable UI components
βββ pages/ # Page components
βββ api/ # API client functions
βββ context/ # React context providers
βββ hooks/ # Custom React hooks
βββ styles/ # CSS and styling
# Database
DATABASE_URL="postgresql://username:password@localhost:5432/concert_tracker"
# JWT
JWT_SECRET="your-super-secret-jwt-key"
# Server
PORT=5000
FRONTEND_URL="http://localhost:3000"
# Email (SendGrid)
SENDGRID_API_KEY="your-sendgrid-api-key"
FROM_EMAIL="noreply@yourdomain.com"
FROM_NAME="Concert Tracker"
# Cloudinary
CLOUDINARY_CLOUD_NAME="your-cloud-name"
CLOUDINARY_API_KEY="your-api-key"
CLOUDINARY_API_SECRET="your-api-secret"
# External APIs
SPOTIFY_CLIENT_ID="your-spotify-client-id"
SPOTIFY_CLIENT_SECRET="your-spotify-client-secret"
SETLIST_FM_API_KEY="your-setlist-fm-api-key"
YOUTUBE_API_KEY="your-youtube-api-key"
UNSPLASH_API_KEY="your-unsplash-api-key"
LASTFM_API_KEY="your-lastfm-api-key"REACT_APP_API_URL="http://localhost:5000/api"
REACT_APP_CLOUDINARY_CLOUD_NAME="your-cloud-name"- User - User accounts and profiles
- Concert - Concert records with enrichment data
- Photo - Concert photos with Cloudinary integration
- Comment - Threaded comments on concerts
- Friendship - User relationships
- ConcertTag - Friend tagging at concerts
- EmailLog - Email sending analytics
- InviteToken - Secure invitation system
- ConcertAttendee - Guest and friend tracking
- All external API keys stored server-side only
- Secure token management and refresh
- Input validation and sanitization
- Rate limiting on external API calls
- JWT-based user authentication
- Password reset with email verification
- User ownership verification for all operations
- Admin-only endpoints for administrative functions
- Secure error handling without information leakage
- CORS configuration for frontend domain
- Environment variable protection
- Database connection security
GET/POST/PUT/DELETE /api/concerts- Concert managementPOST /api/auth/register- User registrationPOST /api/auth/login- User authenticationGET/POST /api/friends- Friend management
POST /api/email/send-invite- Send concert invitesPOST /api/spotify/create-playlist- Create Spotify playlistsPOST /api/cloudinary/upload-signature- Secure image uploadsGET /api/external/setlist/:artist/:date- Fetch setlist data
GET /api/opener-discovery- Opener discovery analysisGET /api/discography/analysis/:concertId- Album analysisGET /api/artist/:slug- Artist profile dataPOST /api/collage/generate- Photo collage generation
# All tests
npm test
# Backend tests only
npm run test:backend
# Frontend tests only
npm run test:frontend- Backend service logic
- API endpoint functionality
- Frontend component rendering
- User interaction flows
npm run build
npm startdocker build -t concert-tracker .
docker run -p 5000:5000 concert-tracker- Development: Local database, debug logging
- Staging: Staging database, limited external API calls
- Production: Production database, full external API integration
- Add concerts with artist, date, venue, and notes
- Automatic enrichment from Setlist.fm
- Spotify playlist generation
- YouTube video search and embedding
- Drag-and-drop photo uploads
- Cloudinary cloud storage and transformations
- Photo effects and editing
- Smart photo collage generation
- Friend tagging at concerts
- Courtesy email invitations
- Shared concert discovery
- Direct messaging between users
- Opener discovery tracking
- Album discography analysis
- Artist profile pages
- Discovery timeline visualization
- Personal concert statistics
- Top artists and venues
- Yearly activity charts
- Breakout statistics
- 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
- Follow TypeScript best practices
- Write tests for new features
- Update documentation
- Follow the existing code style
This project is licensed under the MIT License - see the LICENSE file for details.
- Setlist.fm - Concert setlist data
- Spotify - Music integration and playlists
- Cloudinary - Image storage and transformations
- SendGrid - Email delivery service
- Unsplash - High-quality images
- YouTube - Video content
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Email: support@concerttracker.com
Try the live demo: https://concert-tracker-demo.vercel.app
Demo Account:
- Email: demo@concerttracker.com
- Password: password123
Built with β€οΈ for music lovers everywhere π€π΅β¨