Discover live street performances. Support local musicians. Connect through music.
iOS application connecting street performers with music enthusiasts through real-time, location-based discovery.
StreetBeats bridges the gap between street performers and music lovers by providing:
- Real-time Discovery - Find live performances on an interactive map
- Digital Tipping - Support artists via Stripe PaymentSheet integration
- Performance Analytics - Detailed insights for musicians including revenue, timing patterns, and location performance
- Go Live - Check in when performing with location tracking
- Receive Tips - Accept digital tips via Stripe PaymentSheet
- Performance Insights - Analytics dashboard with:
- Revenue tracking and growth metrics
- Best performing days and hours
- Top locations analysis
- Viewer statistics
- Top supporters list
- Build Following - Grow audience with follower system
- Interactive Map - Find live performances near you with real-time location
- Search & Filter - Search performers by name or genre
- Artist Profiles - View performer stats, bio, and social links
- Send Tips - Support artists with secure Stripe payments
- Follow Artists - Stay connected with your favorites
| Category | Technology |
|---|---|
| UI Framework | SwiftUI (iOS 17.0+) |
| Architecture | MVVM |
| Backend | Firebase (Auth, Firestore) |
| Payments | Stripe PaymentSheet |
| Maps | MapKit, Core Location |
| Local Server | Node.js/Express (for Stripe testing) |
App Launch
│
▼
RootNavigationView
│
├─────────────────────┬─────────────────────┐
▼ ▼ ▼
Authentication Onboarding Main App
(Login/SignUp) (3-step flow) (Tab-based)
│
┌─────────────────────┴─────────────────────┐
▼ ▼
PerformerTabView ListenerTabView
- Home (Stats) - Discover
- Go Live - Map
- Insights - Following
- Profile - Profile
The app uses a ServiceContainer for dependency injection:
- FirebaseAuthService - Authentication (Email/Password)
- FirestoreService - Database operations (users, performances, tips, follows)
- LocationService - Location tracking and permissions
- StripePaymentService - Payment processing via PaymentSheet
- InsightsService - Analytics calculations and smart insights
CS5520_Project/
├── StreetBeats/
│ ├── App/
│ │ ├── StreetBeatsApp.swift # App entry point
│ │ ├── AppDelegate.swift # Firebase initialization
│ │ ├── Configuration/
│ │ │ ├── Config.swift.example # Configuration template (copy to Config.swift)
│ │ │ └── AppEnvironment.swift # Environment settings
│ │ └── Resources/
│ │ └── GoogleService-Info.plist # Firebase config
│ │
│ ├── Core/
│ │ ├── DesignSystem/
│ │ │ ├── Tokens/ # Colors, Typography, Spacing
│ │ │ ├── Components/ # Reusable UI components
│ │ │ └── Theme/ # Dark/light mode
│ │ │
│ │ ├── Models/Domain/
│ │ │ ├── User.swift # User model (musician/listener)
│ │ │ ├── Performance.swift # Live performance data
│ │ │ ├── Tip.swift # Tip transactions
│ │ │ └── InsightsModels.swift # Analytics data structures
│ │ │
│ │ ├── Navigation/
│ │ │ ├── NavigationCoordinator.swift
│ │ │ ├── RootNavigationView.swift
│ │ │ ├── PerformerTabView.swift
│ │ │ └── ListenerTabView.swift
│ │ │
│ │ └── Services/
│ │ ├── Firebase/
│ │ │ ├── FirebaseAuthService.swift
│ │ │ ├── FirestoreService.swift
│ │ │ └── InsightsService.swift
│ │ ├── Location/
│ │ │ └── LocationService.swift
│ │ ├── Stripe/
│ │ │ └── StripePaymentService.swift
│ │ └── ServiceContainer.swift
│ │
│ └── Features/
│ ├── Authentication/ # Login, SignUp, Forgot Password
│ ├── Onboarding/ # User onboarding flow
│ ├── Discovery/ # Map view, search, live performers
│ ├── Performer/ # Go Live, stats, active performance
│ ├── Payment/ # Tip payment via Stripe
│ └── Profile/ # User profiles, following
│
├── LocalServer/ # Node.js server for Stripe testing
│ ├── server.example.js # Server template (copy to server.js)
│ └── package.json
│
├── SETUP.md # Complete setup and configuration guide
│
└── firebase-seed/ # Database seeding scripts
- macOS 13+ (Ventura or later)
- Xcode 15+
- iOS 17+ device or simulator
- Node.js 18+ (for local Stripe server)
- Firebase project configured
- Stripe account (for payments)
-
Clone the repository
git clone https://github.com/arulagarwal/StreetBeats.git cd StreetBeats -
Configure API Keys and Services
This project requires Firebase and Stripe credentials. See the Setup Guide for detailed instructions on:
- Creating and configuring a Firebase project
- Setting up Stripe API keys
- Configuring the iOS app
- Setting up the local payment server
-
Quick Configuration Summary
# Copy configuration templates cp StreetBeats/App/Configuration/Config.swift.example StreetBeats/App/Configuration/Config.swift cp LocalServer/server.example.js LocalServer/server.js # Add your GoogleService-Info.plist to StreetBeats/App/Resources/ # Edit Config.swift and server.js with your API keys
-
Start the Local Server
cd LocalServer npm install npm start -
Build and Run
open StreetBeats.xcodeproj
- Select target device/simulator (iOS 17+)
- Press
Cmd + R
| Card Number | Result |
|---|---|
4242 4242 4242 4242 |
Success |
4000 0000 0000 9995 |
Declined |
4000 0025 0000 3155 |
3D Secure |
For complete setup instructions, troubleshooting, and security best practices, refer to SETUP.md.
The app uses Core Location for:
- Performer location broadcasting during live performances
- Listener location for finding nearby performers
- Background location updates (with user permission)
Payments are handled via Stripe PaymentSheet:
- LocalServer creates PaymentIntent
- iOS app presents PaymentSheet
- User completes payment
- Tip recorded in Firestore
The InsightsService provides comprehensive analytics:
- Revenue tracking with period comparisons
- Best performing days/hours analysis
- Top locations by earnings
- Viewer engagement metrics
- Smart insights with actionable recommendations
Complete design system, wireframes, and interactive prototype:
- Check location permissions in Settings
- Simulator: Use Debug > Location > Custom Location
- Ensure LocalServer is running (
npm startin LocalServer/) - Check server console for error messages
- Verify Stripe test keys are configured in server.js
- Clean build folder:
Cmd + Shift + K - Delete derived data and rebuild
- Ensure iOS 17+ deployment target
For detailed troubleshooting steps, see SETUP.md.
This project is licensed under the MIT License - see the LICENSE file for details.
Course: CS5520 Mobile Application Development
Institution: Northeastern University
Term: Fall 2025