←Filipe Vieira
Track Tidy
Projeto pessoal · WebPersonal project · Web

Track Tidy

Uma dor minha: 1.063 músicas curtidas e nenhuma playlist decente. Descrevi o que queria e deixei a IA separar.A pain of my own: 1,063 liked songs and no decent playlist. I described what I wanted and let the AI sort it out.

PapelRole
Tudo: ideia, produto, códigoEverything: idea, product, code
MotivoWhy
Entender IA em produção, não em demoUnderstanding AI in production, not in a demo
Stack
Next.js · NestJS · Redis · Spotify API · LLM
CódigoCode
github.com/Lippones/Track-Tidy ↗
Track Tidy landing page

01 · A dor01 · The itch

Organizar música à mão é trabalho chato de gente que gosta de música. Ninguém termina.Sorting music by hand is boring work for people who love music. Nobody ever finishes.

Eu queria "só as músicas do Mac DeMarco e do Vacations", "separa por idioma", "algo pra dormir". Toda vez a mesma coisa: abrir o Spotify, arrastar faixa por faixa, desistir no meio. Era um problema de intenção: eu sabia descrever o resultado, só não queria executar.I wanted "only Mac DeMarco and Vacations", "split by language", "something to sleep to". Every time the same thing: open Spotify, drag track by track, give up halfway. It was an intent problem: I could describe the result, I just didn't want to do the work.

Descrever resultado é exatamente o que um modelo de linguagem faz bem. Então o projeto virou duas coisas ao mesmo tempo: resolver a minha dor e me obrigar a colocar IA em algo que outras pessoas usariam, com conta de verdade, permissão de verdade e erro de verdade.Describing a result is exactly what a language model is good at. So the project became two things at once: fixing my own itch and forcing myself to put AI into something other people would use, with real accounts, real permissions and real failures.

02 · Três passos, nada mais02 · Three steps, nothing more

Conectar → escolher → descreverConnect → pick → describe
Seleção de playlists

A escolha vem antes do promptThe choice comes before the prompt

A primeira versão jogava a biblioteca inteira no modelo. Ficou caro, lento e impreciso. Deixar a pessoa escolher a fonte (as curtidas, uma playlist específica) cortou o custo e melhorou o resultado, porque restringiu o espaço de decisão antes de a IA entrar.The first version threw the entire library at the model. Expensive, slow, imprecise. Letting the person pick the source (liked songs, one specific playlist) cut cost and improved output, because it narrowed the decision space before the AI even started.

  • 01Login com Spotify, escopo mínimo de permissão.Spotify login, minimum permission scope.
  • 02Seleção da fonte: curtidas ou playlists específicas.Pick the source: liked songs or specific playlists.
  • 03Prompt em português comum: "separa por idioma", "só rock indie".A prompt in plain language: "split by language", "indie rock only".

03 · IA que falha bem03 · AI that fails gracefully

A parte interessante não é o modelo acertar. É o que acontece quando ele erra, demora ou devolve zero música.The interesting part isn't the model getting it right. It's what happens when it's wrong, slow, or returns zero songs.

Por isso cada pedido virou um job com estado visível: rascunho, processando, concluído. A pessoa vê o prompt que escreveu, quantas músicas entraram e quantas playlists saíram, inclusive quando o resultado foi zero. Um job que falha não some, ele fica na tela contando o que aconteceu.That's why every request became a job with visible state: draft, processing, done. You see the prompt you wrote, how many songs went in and how many playlists came out, including when the answer was zero. A failed job doesn't disappear; it stays on screen and says what happened.

Playlists criadas pela IA, com prompt e total de músicas
Assíncrono por padrãoAsync by default

Nenhuma requisição de IA vive dentro de um clique. Vira job, roda atrás e a tela conta o progresso.No AI request lives inside a click. It becomes a job, runs behind, and the screen reports progress.

Resultado auditávelAuditable output

O prompt fica guardado junto do resultado. Sem isso não existe como melhorar o que o modelo entende.The prompt is stored next to the result. Without that there's no way to improve what the model understands.

Nada destrutivoNothing destructive

A IA só cria playlists novas. Nenhuma faixa é removida da biblioteca de quem usa, porque erro de modelo não pode custar música.The AI only creates new playlists. Nothing is removed from anyone's library, because a model mistake can't cost you music.

04 · O que aprendi04 · What I learned

Colocar IA em produção é menos sobre prompt e mais sobre desenhar o que fazer com uma resposta que você não controla.Shipping AI is less about the prompt and more about designing what to do with an answer you don't control.

  • →Restringir a entrada é mais eficaz do que refinar o prompt: menos contexto, resposta melhor e mais barata.Constraining the input beats refining the prompt: less context, better and cheaper answers.
  • →Latência é design, não infra: sem estado visível, três segundos parecem quebra.Latency is design, not infra: with no visible state, three seconds feel like a crash.
  • →Ação de IA precisa ser reversível ou, de preferência, não destrutiva desde o começo.AI actions need to be reversible, or better, non-destructive from the start.