Skip to content

arulagarwal/StreetBeats

Repository files navigation

StreetBeats

Discover live street performances. Support local musicians. Connect through music.

iOS application connecting street performers with music enthusiasts through real-time, location-based discovery.

SwiftUI Firebase Stripe License


Overview

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

Features

For Musicians (Performers)

  • 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

For Listeners

  • 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

Tech Stack

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)

Navigation Flow

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

Service Layer

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

Project Structure

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

Getting Started

Prerequisites

  • 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)

Quick Start

  1. Clone the repository

    git clone https://github.com/arulagarwal/StreetBeats.git
    cd StreetBeats
  2. 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
  3. 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
  4. Start the Local Server

    cd LocalServer
    npm install
    npm start
  5. Build and Run

    open StreetBeats.xcodeproj
    • Select target device/simulator (iOS 17+)
    • Press Cmd + R

Test Cards

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.


Key Features Implementation

Real-time Location Tracking

The app uses Core Location for:

  • Performer location broadcasting during live performances
  • Listener location for finding nearby performers
  • Background location updates (with user permission)

Stripe Integration

Payments are handled via Stripe PaymentSheet:

  1. LocalServer creates PaymentIntent
  2. iOS app presents PaymentSheet
  3. User completes payment
  4. Tip recorded in Firestore

Performer Insights

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

Design

Complete design system, wireframes, and interactive prototype:

View Figma Design Files


Troubleshooting

Location Not Working

  • Check location permissions in Settings
  • Simulator: Use Debug > Location > Custom Location

Stripe Payments Failing

  • Ensure LocalServer is running (npm start in LocalServer/)
  • Check server console for error messages
  • Verify Stripe test keys are configured in server.js

Build Errors

  • Clean build folder: Cmd + Shift + K
  • Delete derived data and rebuild
  • Ensure iOS 17+ deployment target

For detailed troubleshooting steps, see SETUP.md.


License

This project is licensed under the MIT License - see the LICENSE file for details.


Team

Course: CS5520 Mobile Application Development
Institution: Northeastern University
Term: Fall 2025

About

An iOS platform for discovering live street performances nearby. Tip artists via Stripe, follow performers, and go live as a musician. Built with SwiftUI, Firebase, and MapKit.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors