尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗Streaming de música profissional — minimal, glass, elegante, rápido.
O radinho.online (aura + aural) é uma plataforma de streaming de música completa e auto-hospedável: você envia seus arquivos de áudio, um pipeline FFmpeg transcodifica tudo para HLS adaptativo, e um player de nível profissional entrega a experiência — crossfade, gapless, equalizador e ReplayGain — em uma interface deep black + glass com um único verde exclusivo.
Web na edge (Vercel) + API em servidor próprio (Docker) = custo mínimo, controle total do áudio.
| Camada | Tecnologia |
|---|---|
| Web | React 19 · Vite · TypeScript · Tailwind · TanStack Query · Zustand · Framer Motion · Howler/Web Audio · vite-plugin-pwa |
| API | Node 22 · Express 5 · Prisma · Zod · socket.io · BullMQ · pino · OpenAPI 3.1 (Swagger em /api/docs) |
| Dados | PostgreSQL 16 · Redis 7 |
| Áudio | FFmpeg (HLS AAC 96/160/320, loudnorm, waveform) · sharp (capas WebP) |
| Auth | Firebase Auth (web SDK + firebase-admin) |
| Storage | Cloudflare R2 (S3) · Supabase Storage · disco local (dev) — via interface StorageProvider |
| Infra | Docker Compose · nginx · PM2 (alternativa bare-metal) · GitHub Actions · Vercel |
| Contrato | @radinho/shared — schemas Zod + DTOs compartilhados entre web e api |
flowchart LR
subgraph Edge
W["apps/web · SPA React<br/>(Vercel)"]
end
subgraph Servidor["Servidor Linux (Docker Compose)"]
N["nginx :80/:443<br/>rate limit · cache HLS"]
A["api :4000<br/>Express 5 · socket.io /ws"]
K["worker<br/>BullMQ · FFmpeg"]
P[("PostgreSQL 16")]
R[("Redis 7")]
end
S[("Storage<br/>R2 / S3 / Supabase")]
F["Firebase Auth"]
W -- "REST /api/v1 · WS /ws" --> N
N --> A
A --> P
A --> R
K --> P
R <--> K
A --> S
K --> S
W -.tokens.-> F
A -.verifica ID token.-> F
Decisões e regras completas em docs/ARCHITECTURE.md · design system em docs/DESIGN.md.
radinho/
├── apps/
│ ├── web/ # SPA React 19 + Vite (Vercel)
│ └── api/ # Node 22 + Express 5 + Prisma (Docker/PM2 no servidor)
├── packages/
│ └── shared/ # @radinho/shared — schemas Zod, DTOs, constantes
├── infra/
│ ├── docker/ # docker-compose.dev.yml (deps locais) · docker-compose.prod.yml (stack completa)
│ ├── nginx/ # reverse proxy de produção (rate limit, WS, cache HLS, TLS)
│ ├── pm2/ # ecosystem.config.cjs (deploy bare-metal alternativo)
│ └── scripts/ # setup-server.sh · deploy-api.sh · backup-db.sh · *.ps1 (Windows)
├── docs/ # ARCHITECTURE · DESIGN · DEPLOY · CONTRIBUTING
└── .github/ # CI + deploys (Actions), templates de PR/issue
.nvmrc) e pnpm 10 (corepack enable resolve)winget install ffmpeg / brew install ffmpeg)# 1. Dependências
pnpm install
# 2. Postgres + Redis locais (projeto docker: radinho-dev)
docker compose -f infra/docker/docker-compose.dev.yml up -d
# 3. Variáveis de ambiente (edite com suas credenciais Firebase)
cp .env.example apps/api/.env # bloco "API"
cp .env.example apps/web/.env.local # bloco "WEB" (VITE_*)
# 4. Banco: migrations + seed
pnpm db:migrate
pnpm db:seed
# 5. Sobe web + api em paralelo
pnpm dev
| Serviço | URL local |
|---|---|
| Web (SPA) | http://localhost:5173 |
| API | http://localhost:4000 |
| Swagger (OpenAPI) | http://localhost:4000/api/docs |
| Healthcheck | http://localhost:4000/healthz |
| PostgreSQL | postgresql://aurial:aurial@localhost:5432/aurial |
| Redis | redis://localhost:6379 |
Sem Docker? Suba Postgres/Redis nativos com o mesmo usuário/senha/banco (
aurial/aurial/aurial) e os mesmos ports — o.env.examplejá aponta para eles.
| Comando | Ação |
|---|---|
pnpm dev | web + api em modo dev (paralelo) |
pnpm dev:web / pnpm dev:api | apenas um dos apps |
pnpm build | build de todos os pacotes |
pnpm lint / pnpm lint:fix | ESLint |
pnpm format / pnpm format:check | Prettier |
pnpm typecheck | tsc --noEmit em todos os pacotes |
pnpm test / pnpm test:coverage | Vitest em todos os pacotes |
pnpm e2e | Playwright (web) |
pnpm --filter @radinho/web android:apk | build web + sync Capacitor + APK debug |
pnpm db:generate / db:migrate / db:seed | Prisma |
Pré-requisitos locais:
JAVA_HOME configurado)ANDROID_HOME ou local.properties em apps/web/android)pnpm --filter @radinho/web android:apk
APK gerado em apps/web/android/app/build/outputs/apk/debug/app-debug.apk.
pnpm testpnpm e2emain roda install → build shared → prisma generate → lint → typecheck → test → build (.github/workflows/ci.yml)Resumo (guia completo em docs/DEPLOY.md):
apps/web, config em apps/web/vercel.json); deploy automático via deploy-web.ymlinfra/docker/docker-compose.prod.yml): postgres + redis + api + worker + nginx; bootstrap com infra/scripts/setup-server.sh, deploy com infra/scripts/deploy-api.sh (ou deploy-from-windows.ps1 da máquina dev)infra/pm2/ecosystem.config.cjsProprietária — todos os direitos reservados. Uso, cópia ou distribuição apenas com autorização expressa. Este repositório não aceita contribuições externas sem convite (veja docs/CONTRIBUTING.md).