O coffe to relax é um app Next.js 16 (App Router) quase todo client-side, sem banco de dados. Os dez sons ambientes não são arquivos: são sintetizados em tempo real por um motor próprio sobre a Web Audio API, com buffers de ruído branco e marrom, filtros biquad, reverb por convolução e compressor no master. Os players de mídia integram a IFrame Player API do YouTube (via youtube-nocookie.com), o embed oficial do Spotify, HTMLAudioElement para links diretos e Object URLs para arquivos locais. O estado do usuário vai para o localStorage por meio de uma camada que só grava depois do consentimento. O servidor cuida da documentação em MDX (Fumadocs), do formulário de contato com Server Action e de rotas de SEO.
- Front-end
- Next.js 16.3React 19.2TypeScript 5Tailwind CSS 4shadcn/ui sobre Radix UIMotionlucide-react
- Áudio e mídia
- Web Audio API (motor próprio, 769 linhas)YouTube IFrame Player APIembed do SpotifyoEmbed do YouTube e do Spotify
- Back-end
- Server Actions do NextRoute Handlers (/api/status, /api/search)e-mail pela API REST do Resend
- Documentação
- Fumadocs (core, mdx e ui 16) com busca indexada no build
- Infra e SEO
- Vercel com redirect 301 do domínio antigo para coffe.lotmhub.com.brMetadata APIJSON-LDsitemaprobotsllms.txtmanifest e imagens OG geradas com next/og
Arquitetura
Som sintetizado, não baixado
Um AudioEngine próprio cria dois barramentos (interface e ambiente) que passam por reverb de convolução e um DynamicsCompressor antes da saída. Cada camada é ruído branco ou marrom gerado em buffer e moldado com filtros biquad e osciladores, então não há arquivo de áudio, requisição, CORS nem licença.
Segurança
Consentimento aplicado no armazenamento
Toda leitura e escrita de preferência passa por uma camada sobre o localStorage que fica bloqueada até o usuário aceitar. O único registro gravado antes disso é a própria escolha, versionada para o banner reaparecer quando o texto mudar, e 'apagar meus dados' limpa também as chaves de versões antigas.
Segurança
Privacidade por construção
Não há analytics nem pixels, as fontes são servidas pelo próprio domínio, o YouTube toca por youtube-nocookie.com e o player do Spotify só carrega quando um item do Spotify entra num canal. Arquivos locais tocam por URL.createObjectURL e nunca saem do navegador.
Segurança
Formulário de contato sem banco e com anti-spam
A Server Action valida tipo, tamanho e formato no servidor, usa honeypot e tempo mínimo de preenchimento de 3 s, e limita a 3 envios por IP a cada 10 minutos em memória. O HTML do e-mail escapa toda entrada, e o envio usa fetch direto na API do Resend, sem SDK.
Arquitetura
Players heterogêneos com uma interface só
Um parser reconhece vídeo e playlist do YouTube, os tipos do Spotify, links de áudio e arquivos locais, e cada canal escolhe a engine correspondente. Volume, velocidade de 0,75x a 2x e repetição são por canal, e itens de 10 minutos ou mais guardam a posição para retomar depois.
SEO
Dois layouts raiz e SEO completo
O site e a documentação Fumadocs usam layouts raiz separados com globalNotFound do Next para a 404. A busca da documentação é indexada no build, /api/status responde sem cache com versão e commit, e o site expõe JSON-LD WebApplication e WebSite, sitemap, llms.txt e imagens OG geradas no build.