Spotify AI Checker — Beslisboom van meldingen

Overzicht van welke melding de gebruiker krijgt bij welke situatie. Drie flowcharts: per-track classificatie, waarschuwingsboxen op resultaatniveau, en de Verify-knop-flow. Onderaan een referentietabel met alle teksten.

1. Per-track classificatie — welk badge krijgt een track?

De checker bepaalt per track of die als 🤖 AI detected, ✓ Clean of ? Unknown getoond wordt. Volgorde van bronnen: eerst DigiMuziek-database (eigen lijst), dan Deezer.

flowchart TD Start([Track input: artiest + titel]) --> URLpaste{URL-paste mode?
track_id zonder
artist/title?} URLpaste -->|Ja| Spotify[Spotify API call:
haal artist + titel op] URLpaste -->|Nee, CSV| DBcheck Spotify --> Sok{Spotify lukt?} Sok -->|Ja| DBcheck[DigiMuziek DB lookup] Sok -->|Nee 429/error| DBcheck DBcheck --> URI{Match op
spotify_id?} URI -->|Ja| AIflag[AI: TRUE
via DB-URI] URI -->|Nee| Name{Match op naam?} Name -->|Ja, met URI| AIflag Name -->|Ja, alleen naam| Pending[AI: TRUE
maar 'pending verification'] Name -->|Nee| Deezer[Deezer check:
hasIdentifiedAIContent] AIflag --> ResultAI([🤖 AI detected]) Pending --> ResultAIp([🤖 AI detected
met ⏳ pending]) Deezer --> Dz{Deezer-resultaat} Dz -->|true| ResultAI2([🤖 AI detected]) Dz -->|false| ResultClean([✓ Clean]) Dz -->|null / no-match| ResultUnk([❔ Unknown]) classDef ok fill:#dff0d8,stroke:#3a7f3a,color:#1a4a1a; classDef ai fill:#fde0e0,stroke:#a00,color:#600; classDef pen fill:#fff3cd,stroke:#9a6500,color:#5a3a00; classDef unk fill:#eee,stroke:#888,color:#444; class ResultClean ok; class ResultAI,ResultAI2 ai; class ResultAIp pen; class ResultUnk unk;

2. Waarschuwingen op resultaatniveau — welke boxen verschijnen?

Boven of onder de resultaattabel kunnen één of meerdere gele boxen verschijnen, afhankelijk van wat er onderweg gebeurd is.

flowchart TD Done([Scan voltooid]) --> CheckSpotify{Spotify-status?
(alleen URL-paste)} CheckSpotify -->|ok / cached / not_needed| NoSpotBox[Geen Spotify-melding] CheckSpotify -->|token_failed| BoxToken[/"⚠️ Spotify token request failed"/] CheckSpotify -->|rate_limited| BoxRate[/"⚠️ Spotify rate-limited (HTTP 429)
wait 30-60 seconds"/] CheckSpotify -->|all_failed| BoxAll[/"⚠️ Spotify lookups are failing"/] CheckSpotify -->|partial| BoxPart[/"⚠️ Spotify lookups are flaky"/] NoSpotBox --> CheckDeezer BoxToken --> CheckDeezer BoxRate --> CheckDeezer BoxAll --> CheckDeezer BoxPart --> CheckDeezer CheckDeezer{Deezer no-match
≥ 80% van tracks?} CheckDeezer -->|Ja| BoxDz[/"⚠️ Deezer is acting up
most tracks could not be matched"/] CheckDeezer -->|Nee| NoDzBox[Geen Deezer-melding] BoxDz --> CheckDB NoDzBox --> CheckDB CheckDB{DigiMuziek DB hits?} CheckDB -->|≥ 1 hit| LineDB[/"DigiMuziek DB hits:
X verified ID · Y pending · Z name-only"/] CheckDB -->|0 hits| NoDBLine[Geen DB-regel] LineDB --> CheckPending NoDBLine --> CheckPending CheckPending{Pending verification > 0?} CheckPending -->|Ja| RowVerify[/"X tracks match by name only.
🔍 Verify name matches"/] CheckPending -->|Nee| End([Tabel tonen]) RowVerify --> End classDef warn fill:#fff3cd,stroke:#9a6500,color:#5a3a00; classDef info fill:#d6eaf8,stroke:#1a4a6e,color:#1a3a5a; class BoxToken,BoxRate,BoxAll,BoxPart,BoxDz warn; class LineDB,RowVerify info;

3. Verify name matches — wat ziet de gebruiker bij klikken?

De Verify-knop verschijnt alleen als er name-only DB-matches zijn. Hij doet een AJAX-call naar verify-tracks.php die per track de Spotify-ID ophaalt en vergelijkt met de DB.

flowchart TD Klik([Klik op '🔍 Verify name matches']) --> AJAX[AJAX naar verify-tracks.php
max 50 IDs per call] AJAX --> Result{Response?} Result -->|rate_limited| Rate[/"⚠️ Spotify rate-limited (HTTP 429)
wait 30-60 seconds and click Retry
Knop: ↻ Retry verification"/] Result -->|spotify_error / no_token| Part[/"X verified, Y namesakes, Z still pending
Click to continue
Knop: ↻ Verify remaining"/] Result -->|alles verwerkt| Done2[/"✓ Verification complete
X confirmed AI · Y namesakes
(knop verdwijnt)"/] Result -->|netwerkfout| Net[/"Network error — please try again
(alert popup)"/] Rate --> Wacht[Gebruiker wacht en klikt opnieuw] Part --> Wacht2[Gebruiker klikt opnieuw] Wacht --> Klik Wacht2 --> Klik PerTrack{Per geverifieerde track:} Done2 -.->|status check| PerTrack Part -.->|status check| PerTrack PerTrack -->|verified_ai| Keep[Behoud 🤖 AI badge] PerTrack -->|false_positive| Switch[Wijzig naar ✓ Clean
= namesake] classDef warn fill:#fff3cd,stroke:#9a6500,color:#5a3a00; classDef ok fill:#dff0d8,stroke:#3a7f3a,color:#1a4a1a; classDef err fill:#fde0e0,stroke:#a00,color:#600; class Rate,Part warn; class Done2 ok; class Net err;

4. Volledige meldingenreferentie

Alle teksten die de gebruiker kan tegenkomen, gegroepeerd per situatie.

Per-track badges

BadgeWanneer?Bron
🤖 AI detectedDB-match op spotify_id, óf DB-naam-match (geverifieerd), óf Deezer flagt 'mDB / Deezer
✓ CleanGeen DB-match én Deezer zegt expliciet falseDeezer
? UnknownGeen DB-match én Deezer geeft null/no-match terug

Gele waarschuwingsboxen

Tekst (verkort)Wanneer?Tip aan gebruiker
"Spotify token request failed right now"Credentials kloppen niet of Spotify-auth onbereikbaarWachten + spotify-test.php openen
"Spotify rate-limited the app (HTTP 429)"Te veel API-calls te snel30–60 sec wachten en opnieuw
"Spotify lookups are failing"Alle calls mislukt (geen 429)Wachten en opnieuw
"Spotify lookups are flaky"Sommige calls gelukt, sommige nietWachten en opnieuw
"Deezer is acting up — most tracks could not be matched"≥ 80% no-match op DeezerEven wachten, JWT vernieuwt zichzelf

DigiMuziek DB-info-regel (blauw)

TekstBetekenis
"X verified ID"Aantal tracks waarvan de Spotify-ID exact matcht met een DB-rij — hoge zekerheid
"Y name match — pending verification"Naam matcht een DB-naam; Spotify-ID nog niet vergeleken (kan naamgenoot zijn)
"Z name-only (could be different artist)"Alleen-naam-match zonder URI in DB; minst zeker

Verify-knop balk

ToestandTekstKnop
Begin"X tracks match the database by name only. Verify their Spotify ID to be sure they're the actual AI artist (not a namesake)."🔍 Verify name matches
Na klik + 429"⚠️ Spotify rate-limited (HTTP 429) — wait 30-60 seconds and click Retry. X verified, Y namesakes, Z still pending."↻ Retry verification
Na klik + andere fout"X verified, Y namesakes, Z still pending. Click to continue."↻ Verify remaining (Z)
Compleet"✓ Verification complete — X confirmed AI · Y namesakes"(verdwijnt)
Netwerkfout"Network error — please try again."🔍 Verify name matches

Per-track na verificatie

verify-tracks.php statusEffect op de track in de tabel
verified_aiBehoudt 🤖 AI detected; "pending"-indicator verdwijnt
false_positiveVerandert in ✓ Clean (naamgenoot, geen AI)
rate_limitedBlijft pending; rij komt terug in volgende klik
no_token / spotify_errorBlijft pending; gebruiker krijgt foutmelding boven de tabel