App de foco minimalista em duas frentes que compõem o mesmo produto:
- Web — tela de foco no browser: relógio em destaque, busca no YouTube e player de áudio embutido (vídeo oculto, só o áudio toca).
- CLI — TUI de foco no terminal: relógio, interface limpa e rádios de foco via streams MP3.
MVP deliberadamente enxuto: sem contas de usuário e sem banco de dados (estado local). O foco está na qualidade de engenharia: testes, segurança, CI/CD, IaC e documentação.
Demo: https://focuzen.onrender.com — no free tier o serviço hiberna; o primeiro acesso pode levar ~30-60s (cold start).
- Web: relógio + data por extenso; busca no YouTube (com debounce e cache); player oculto com play/pause, anterior/próximo, repetir, mudo, volume e tela cheia; tema claro/escuro; i18n pt-BR/en.
- CLI: relógio centralizado; menu de rádios de foco (áudio via Beep); i18n pt-BR/en.
- Web: React + TypeScript (strict) + TailwindCSS (cores via CSS variables) + Vite.
- Backend: Go + chi +
log/slog— serve a SPA (embed.FS) e o proxy de busca do YouTube. - CLI: Go + Bubble Tea + Lip Gloss + Beep.
- Infra: Docker (distroless, non-root) + Render (Blueprint
render.yaml). CLI distribuída via GitHub Releases. - CI/CD: GitHub Actions; versionamento com Conventional Commits + release-please.
Monorepo com dois módulos Go (server/ sem CGO, cli/ com CGO) ligados por go.work,
além do frontend em web/.
focuzen/
├── server/ # backend Go (chi, embed da SPA, proxy de busca)
├── cli/ # CLI Go (Bubble Tea + Beep)
├── web/ # frontend React + TS + Tailwind + Vite
├── docs/ # ADRs, diagramas C4 e guia de deploy
└── render.yaml, Dockerfile, Makefile, .github/
- Go 1.26+
- Node 22+ e pnpm 10+
- Para a CLI no Linux:
libasound2-dev(CGO do áudio) - Uma chave da YouTube Data API v3 (apenas no backend) — veja como obter.
Backend e web rodam separados em dev (o Vite faz proxy de /api e /download para o backend):
# Terminal 1 — backend
cd server
YOUTUBE_API_KEY="sua-chave" go run ./cmd/server
# Terminal 2 — web
cd web
pnpm install
pnpm devCLI:
cd cli
go run ./cmd/focusmake build # builda a SPA, embute no binário do server, compila tudo
make test # testes de server, cli e web
make lint # golangci-lint + typecheck do webOu por módulo: cd server && go test ./..., cd web && pnpm test, etc. E2E do web: cd web && pnpm e2e.
A web roda na Render via Blueprint (render.yaml), com deploy disparado pelo CD.
Veja o guia em docs/deployment.md.
Baixe o binário do seu sistema em Releases
(ou pelo link /download no rodapé da web) e rode ./focus.
docs/c4/— diagramas C4 (contexto, containers, componentes).docs/adr/— decisões de arquitetura (ADRs).docs/deployment.md— deploy na Render.
Veja CONTRIBUTING.md. Reportes de segurança: SECURITY.md. Esperamos um ambiente acolhedor — ver CODE_OF_CONDUCT.md.
MIT © João Victor Ventura Martins