Audio without a music licence API
Clips come from public 30-second store previews resolved into a curated catalogue, so the game needs no login to any streaming service.
SongSpot is a music quiz: you hear a tiny clip and guess the track. Miss or skip and the clip grows — 0.5, 1, 3, 8, 15 seconds. It ships with a catalogue of 700+ hits that grows every week, a global Daily Challenge, friend challenges by link and per-genre leaderboards, backed by a Firebase serverless backend.
A SwiftUI + MVVM client paired with a TypeScript backend on Firebase. The app streams 30-second previews with AVPlayer and cuts the clip windows client-side; the backend curates the catalogue and runs the competitive features.
SwiftUI views and view models, with around twenty focused services (audio player, catalogue, daily challenge, leaderboard, streak shields, store, notifications). String Catalogs for EN/ES.
Catalogue expansion and resolution, candidate discovery via Last.fm, daily-challenge generation, weekly genre rotation, leaderboards, usernames, purchase validation and a weekly maintenance job.
Cloud Firestore with security rules and indexes; Firebase Auth with Apple and Google; App Check to protect the backend.
Static pages for challenge links, support, privacy and terms deployed alongside the backend.
songspot| Package | Version | Source |
|---|---|---|
| abseil-cpp-binary | 1.2024072200.0 | SPM |
| app-check | 11.3.1 | SPM |
| appauth-ios | 3.0.0 | SPM |
| firebase-ios-sdk | 12.19.1 | SPM |
| google-ads-on-device-conversion-ios-sdk | 3.7.0 | SPM |
| googleappmeasurement | 12.19.0 | SPM |
| googledatatransport | 10.1.1 | SPM |
| googlesignin-ios | 10.0.0 | SPM |
| googleutilities | 8.1.3 | SPM |
| grpc-binary | 1.69.1 | SPM |
| gtm-session-fetcher | 5.3.1 | SPM |
| gtmappauth | 6.0.0 | SPM |
| interop-ios-for-google-sdks | 101.0.0 | SPM |
| leveldb | 1.22.5 | SPM |
| nanopb | 2.30910.1 | SPM |
| promises | 2.4.1 | SPM |
Stack detected automatically from the repository on 27 Oct 2026.
Clips come from public 30-second store previews resolved into a curated catalogue, so the game needs no login to any streaming service.
Scheduled functions publish the Daily Challenge and rotate the weekly genre for every player at the same moment.
Friend challenges are self-contained deep links; the backend is only needed for rankings.