Um reprodutor de música 100% client-side: sem upload, sem backend, sem conta. O usuário aponta uma pasta do próprio computador ou celular e o player lê, organiza e toca os arquivos de áudio direto do disco — a biblioteca inteira nunca sai do dispositivo.
Principais funcionalidades
- Importação de pastas completas via seletor nativo ou arrastar-e-soltar
- Fila de reprodução com busca e remoção, persistida entre sessões
- Waveform interativo para buscar posição na faixa
- Shuffle, repeat e controle de volume
- Capas de álbum geradas proceduralmente em canvas, a partir de uma seed derivada de cada arquivo
- Instalável como app (PWA), com cache offline do app shell
- Controles de mídia integrados ao sistema — play/pause/próxima direto na tela de bloqueio e em fones bluetooth
Desafios técnicos resolvidos
- Persistência sem duplicar arquivos: em vez de copiar os bytes do áudio pra um banco, o projeto usa a File System Access API pra guardar apenas uma referência (handle) à pasta original no IndexedDB. A biblioteca é restaurada entre sessões pedindo permissão de leitura de novo, sem inflar o armazenamento do navegador.
- Fallback progressivo: em navegadores sem suporte à File System Access API (Firefox, Safari, e todos os navegadores mobile), o app cai automaticamente pra um modo baseado em input de arquivos — sem persistência entre sessões, mas com a reprodução intacta.
- PWA completo: manifest + Service Worker cacheando o app shell (HTML/CSS/JS), permitindo instalação na tela inicial e uso offline — os arquivos de música continuam vindo do disco do usuário, o cache cobre só a aplicação em si.
Stack técnica
JavaScript (vanilla), Canvas API, IndexedDB, File System Access API, Media Session API, Service Worker / Web App Manifest, CSS Grid.
Design
Interface autoral em tema dark, com roxo (#7C5CFC) como cor de destaque sobre fundo quase preto, tipografia Space Grotesk, e elementos gerados dinamicamente (waveform, capas de álbum) que reforçam a identidade sem depender de assets externos.