Client:
Battle of Bands Platform
Industry:
Music & Entertainment
Deliverables:
iOS & Android Mobile App · ASP.NET Core REST API · SQL Server Database · Admin Panel · Push Notifications · Audio Upload & Hosting
Website:
Not publicly disclosed
What we’ve accomplished together
Independent musicians and listeners needed a dedicated space to showcase short performances, compare tracks fairly, and build reputation through community voting—not scattered social posts or opaque contests. The client wanted a mobile-first platform where users could register, upload genre-tagged songs, battle rivals, and track wins, losses, and leaderboard standing in one polished experience backed by a production API.
To make that vision real, the platform had to deliver:
Secure account registration, login, password recovery, and profile management on iOS and Android
Genre-organized song uploads with in-app audio trimming before publish
Head-to-head battle screens with playback controls and one-tap voting
Live leaderboards and personal statistics for uploads, battles, and wins
A hosted ASP.NET Core API with admin governance, media storage, and push notifications
“We wanted listeners to hear two songs side by side and vote in seconds—without leaving the app or guessing who was winning.”
Project Overview
Flutter Mobile App → REST API → Entity Framework Core → SQL Server → Static File Storage → FCM Push Notifications
Triaxo Solutions architected Battle of Bands as a Flutter application for iOS and Android using the BLoC pattern with flutter_bloc to manage authentication, home data, battles, song libraries, and upload flows. The app communicates with a hosted ASP.NET Core 7 REST API for account management, genre retrieval, song CRUD, voting, dashboard statistics, and multipart audio uploads. Local state persists through shared_preferences, keeping users signed in across sessions via a splash-screen routing gate.
The core product loop centers on genre-filtered competition. Users select a genre, upload a trimmed audio clip (WAV, MP3, or Opus) with metadata including title, performer or band name, and optional external URL, then enter battles where two songs are presented with synchronized playback, seek sliders, and forward/back controls powered by just_audio. Voting confirms through a dialog and posts to the Song/Vote endpoint, recording winner and loser song IDs while updating artist battle statistics.
On the server side, Triaxo built an ASP.NET Core Web API serving both the mobile app and administrative back end. Mobile app users (AppUsers) and back-office administrators (AspNetUsers) authenticate through separate ASP.NET Core Identity flows. Weekly battle matchmaking returns randomized opponent tracks by genre, vote integrity records both winning and losing songs, and Firebase Cloud Messaging delivers platform-specific push notifications to registered devices.
Mobile App — Compete, vote, and climb the charts
Native Flutter experience. Battle of Bands ships as a native-feeling Flutter app with a four-tab bottom navigation: Home, Battles, My Songs, and Profile. The dark-themed UI uses Montserrat typography and gold-accent branding consistent across splash, auth, and main flows. Users move from signup or login through a timed splash screen into the main shell without friction.
Battles & voting. The Battles tab is the product centerpiece. After choosing a genre, users begin a battle that loads two competing songs, displays performer metadata, and offers play/pause, ±10-second skip, seekbar scrubbing, and a “Click to Vote” action with confirmation. Empty states guide users when no songs are available for a selected genre.
Upload & profile. Upload Song walks users through file selection (file_picker), waveform trimming (easy_audio_trimmer), FFmpeg-based AAC export, preview playback, and metadata entry before multipart upload. Song detail screens provide full playback and vote counts, while the profile tab shows avatar, email, editable profile, change-password flow, and a statistics grid fed by Dashboard/GetStatistics.
Backend API & Admin — Operate competitions with full control
REST API layer. Triaxo integrated the mobile client with a centralized API covering Account endpoints (SignUp, Login, ForgetPassword, ChangePassword, ProfileUpdate), Genre/GetAllGenre, Song operations (AddSong, GetAllMySongs, GetAllSongByGenreId, Vote), and Dashboard services (GetStatistics, GetLeaderboard). Audio and profile images are served from the platform host with multipart form posts and 20-second HTTP timeouts.
Competition engine. When users request battles within a genre, the API returns two randomly selected opponent tracks from the prior competition week that the voter has not yet judged. Each vote records both the winning and losing song, incrementing TotalWins, TotalLosses, and TotalBattles on artist profiles. Leaderboard queries aggregate vote counts within the weekly window, returning top performers per genre.
Admin governance. Administrators authenticate through ASP.NET Core Identity with role-based sidebar menus mapped from AspNetMenus and AspNetRoleMenus. Operations teams manage mobile users, freeze or activate accounts, perform genre CRUD, and access dashboard statistics—uploads, wins, losses, battles judged, and weekly leaderboard rankings—giving operators the data needed to moderate fair, active competitions.
Technology Stack
| Layer | Technologies |
|---|---|
| Mobile framework | Flutter (Dart SDK ≥2.19), iOS & Android |
| State management | flutter_bloc, Equatable |
| Audio & media | just_audio, easy_audio_trimmer, ffmpeg_kit_flutter, file_picker |
| Mobile UX | shared_preferences, cached_network_image, connectivity_plus, share_plus, Material/Cupertino widgets, Montserrat |
| Backend API | ASP.NET Core 7, C#, RESTful Controllers, Swagger/OpenAPI |
| Database | Microsoft SQL Server, Entity Framework Core 7, Code-First Migrations |
| Authentication | ASP.NET Core Identity, CryptoHelper password hashing, role-based admin menus |
| Notifications & email | Firebase Cloud Messaging (FCM), SendGrid transactional email |
| File storage | Static file middleware, wwwroot audio and image hosting |
Why Triaxo Solutions
Triaxo Solutions combines mobile engineering depth with media-heavy product delivery—exactly what a competitive music app demands. From FFmpeg-based trimming and dual-platform audio playback to genre-scoped API orchestration, vote integrity, and FCM engagement, Triaxo owned the full mobile experience and backend platform end to end and shipped Battle of Bands on iOS and Android.
“Fair battles, real votes, one app—built to perform on every device.”
Frequently Asked Questions
Common questions about the Battle of Bands platform. Have a music or entertainment app idea? Contact Triaxo Solutions to discuss mobile design, API integration, and launch planning.
Planning a music or entertainment app?
We scope Flutter mobile apps, REST APIs, and competition platforms end to end.
Fixed price model
A defined release—MVP, integration, or migration—with scope, timeline, and budget locked before build starts.
- Scope, milestones, and delivery dates agreed upfront
- Ideal when requirements are well defined
- Predictable budget with change-control for scope shifts
- Weekly demos and a working release at handover
Dedicated squad model
A Triaxo team embedded in your engineering org: your board, your channels, demos on your cadence.
- Embedded squad in your tools, rituals, and roadmap
- Preferred for longer engagements and product evolution
- Scales up or down as priorities change
- Senior PM, engineers, and QA on one team
- Best when you have a clear vision and need capacity
Hybrid & on-site model
Remote-first delivery plus on-site discovery, launch support, or co-located sprints when proximity matters.
- Blend of remote delivery with on-site workshops or sprints
- Helps hit deadlines with tight stakeholder alignment
- Cost-effective when you need periodic face-to-face collaboration
- Suited to regulated, enterprise, or multi-site rollouts
Tell us about your product
Share goals, timelines, and constraints—we'll respond with next steps and a suggested workshop.
Ready to scope your next release or refactor? Share your project brief
