PHP Developer for Radio Airplay Monitoring System

Job ID: 40032982

Budget: $30 – $250 USD

Project: Build Phase 1 of “Needletime” – Radio Airplay Monitoring Platform (PHP/MySQL + ACRCloud)

I’m looking for an experienced PHP/MySQL developer (ideally with Laravel) to build Phase 1 of a web platform called Needletime.

Needletime uses ACRCloud to detect when songs are played on radio/online stations and provides airplay reports to:

CMOs / PROs (e.g. IMPRA – South African rights organization)

Individual artists (independent or CMO members)

Phase 1 is a working MVP with real data, not a prototype.

Tech Stack

Preferred:

Backend: PHP 8+ (Laravel preferred, but open to other modern MVC frameworks)

Database: MySQL 8+

Frontend: Blade/Twig + basic JS (and a simple chart library like Chart.js)

Background Jobs: Cron + queue worker (Supervisor or similar)

Integration: ACRCloud (I will provide API keys & docs)

Core Functional Scope (Phase 1)

Below is the must-have feature set for this project.

1. Authentication & Roles

Email/password login

Password reset (email link)

Role-based access:

Platform Admin (my team)

Org Admin (CMO/Label admin, or Indie owner)

Member/Artist (CMO member or indie artist)

2. Organizations & Users

organizations table with:

Fields: name, type (CMO, LABEL, INDIE), contact email, logo, status

Platform Admin can:

Create/edit organizations

Assign Org Admin users

Independent artist signup:

Self-register → auto-create an INDIE organization and set them as its Org Admin

3. Stations & ACRCloud Integration

stations table with:

name, code, type (FM/ONLINE/TV), region, stream_url, is_active

Platform Admin screens to:

Create/edit/delete stations

Attach ACRCloud config (project/keys) per station (or globally)

Background worker:

Continuously read audio from station stream_url

Send chunks to ACRCloud identify endpoint

Parse the response and insert into play_logs

4. Data Model: Repertoire & Members

organization_members:

organization_id, name, membership_number, email, status

works:

organization_id, ISRC, title, artist_name, ACRID (optional), release_year

work_members (many-to-many):

work_id, organization_member_id, share_percentage (optional)

CMO Admin:

Upload CSV of members (name, membership_number, email)

Upload CSV of works (title, artist_name, ISRC, membership_number)

UI to view:

Member list & detail (with linked works)

Works list & detail (with linked members)

Independent artist:

Simple “Add Track” form:

title, artist_name (pre-filled), ISRC (optional)

Stored as works under their INDIE organization

Internally you may link them via organization_members or a simplified pattern

5. Play Logs & Mapping Logic

play_logs table:

station_id

work_id (nullable)

acrid

detected_at (DATETIME)

duration_seconds

confidence

raw_title

raw_artist

When inserting play_logs from ACRCloud:

Try to match to a work by ISRC (if returned) or ACRID

If matched → set work_id

If not, leave work_id null, but keep raw title/artist

(Aggregate tables for performance are nice-to-have; if needed we can discuss.)

6. Dashboards & Reports
6.1 Org Admin (CMOs, Labels, Indie Owners)

Org Dashboard

Stats for the current month:

Total members

Total works

Total plays

Number of stations with plays

Charts:

Top 10 works by number of plays

Top 10 stations by plays

Play Reports

Filter form:

Date range

Station (multi-select)

Member (optional)

Work (optional)

On-screen summary:

Grouped by work:

work title, main member, total plays, total duration

Export detailed CSV:

One row per play with:

work_title

work_isrc

member_name (if any)

station_name

play_date

play_time

duration_seconds

confidence

6.2 Member / Artist Portal

Member Dashboard

For that member (or indie org user) only:

Total plays in last 30 days

Number of tracks with any plays

Number of stations where their tracks got plays

Top 5 tracks by plays

My Works

List of works belonging to that member/indie:

Title, ISRC, total plays (for selected period), number of stations

Work detail:

Summary stats (total plays, total duration)

Chart: plays over time (last 30 days or selected period)

Table: plays per station (aggregated)

Export CSV:

Per-play detailed log:

station_name, play_date, play_time, duration_seconds, confidence

My Stations

Table of:

Station name, number of works played, total plays

Clicking a station:

List of works with plays on that station

7. Platform Admin Console

Global dashboard:

Total organizations by type

Total stations

Total plays (last 30 days)

Recent global play logs (last N rows)

Stations list:

Show last_detection_at per station

Basic flag if no detections within a threshold

Milestones (For Planning / Bidding)

You can propose your own structure, but roughly:

Setup & Auth

Framework setup, user/organization models, auth & roles, basic layout

Organizations & Stations

Org management, station CRUD, ACRCloud service setup

ACR + Play Logs

Stream worker, identify calls, play_logs creation, basic global recent-plays view

Members & Works

Member & works imports, linking to repertoire, indie track creation

Dashboards & Reports

Org admin dashboard + reports, member/artist dashboard + works/stations, CSV exports

Platform Admin, Polish & UAT

Global admin dashboard, basic health checks, permission hardening, bug fixes

Please include milestone-based payments in your proposal.

What I’ll Provide

ACRCloud credentials and docs

Initial station list (stream URLs)

Example CSVs for:

Member import

Works import

Brand name, basic logo & colors

What I Expect From You

Strong PHP/MySQL experience (Laravel or similar framework preferred)

Proven experience integrating with external APIs (bonus if you’ve worked with streaming or ACRCloud/Gracenote/etc.)

Ability to design clean database schemas and efficient queries

Good communication and ability to ask the right questions early

Clear documentation:

Basic setup guide (README)

Brief explanation of cron/jobs for monitoring stations

When you bid, please:

Share relevant projects: anything with APIs, streaming, reporting dashboards, etc.

Suggest how long you estimate for Phase 1 and how you’d break down milestones.

Confirm if you’re comfortable handling:

Continuous stream monitoring

ACRCloud integration

CSV imports & exports