BON — Botinho Online Network
Rede social estilo messenger: GraphQL, AeroCoins, missões, PWA e stack Swarm dedicada.
BON — Botinho Online Network (AERO)
Rede social production no estilo messenger MSN/Frutiger: missões, AeroCoins, feed, carteira e painel admin — monorepo aero-glow-social.
Para que serve
Plataforma social própria com identidade visual Aero Glow, economia interna (AeroCoins / AC), gamificação por missões e experiência PWA instalável.
| URL | Papel |
|---|---|
| aero.botingnonlab.com.br | Web / PWA |
| aero-api.botingnonlab.com.br | GraphQL HTTP + WS |
| s3.botingnonlab.com.br | MinIO — assets Frutiger |
1. Infraestrutura
Stack Docker Swarm dedicada aero (deploy/stack.yml):
| Serviço | Imagem / runtime | Rede |
|---|---|---|
postgres | PostgreSQL 16 | aero_net (overlay) |
redis | Redis 7 AOF | aero_net |
minio | S3-compatible | aero_net + botinho_traefik-net |
api | Node 22 + entrypoint | overlay + Traefik |
web | Vite dev server :5173 | overlay + Traefik |
Overlay networks:
aero_net— isolamento interno (API ↔ Postgres ↔ Redis ↔ MinIO)botinho_traefik-net— TLS Let's Encrypt via Traefik do homelab
Deploy: ./deploy/up.sh — gera stack.env, sobe stack, corre migrations na API.
Volumes: node_modules em volumes Docker (sem npm ci no host em produção).
2. Backend (API GraphQL)
Monorepo workspace @aero/api — Clean Architecture:
- Domain — entidades, sanitização de conteúdo
- Application — use cases (
LoginUser,RegisterUser,AdjustWalletBalance, …) - Infrastructure — Drizzle ORM, Redis pub/sub, S3, SMTP, JWT
- Interfaces — GraphQL Yoga + graphql-ws (subscriptions)
API pública
POST https://aero-api.botingnonlab.com.br/graphql
WS wss://aero-api.botingnonlab.com.br/graphql
Mutations principais: login, register, createPost, claimMission, adjustWalletBalance
Queries: feed, missions, myTransactions, perfil
Realtime: canal Redis aero:feed → subscriptions GraphQL
Dados & auth
- PostgreSQL + Drizzle migrations (
npm run db:migrate) - Redis — sessões, pub/sub feed
- JWT cookie
aero_access+ refresh - Admin — TOTP (
X-Admin-TOTP), e-mails emADMIN_EMAILS - S3/MinIO — avatares, ícones Frutiger, notificações MSN-style
E-mail transacional (SMTP)
Nodemailer + templates HTML estilo Frutiger Aero (boas-vindas, reset de senha):
| Campo | Valor |
|---|---|
| SMTP | Titan (smtp.titan.email:465) |
| Remetente | contato@botinhodominios.site — BON - Aero network |
| Ícones no e-mail | EMAIL_ICONS_BASE_URL → MinIO /icons/frutiger/brand.ico |
Upload de ícones: npm run icons:upload-s3 -w @aero/api (define policy pública no bucket aero-assets).
3. Bots & integrações
- Feed pub/sub para notificações em tempo real (estilo messenger)
- Upload de ícones/assets via scripts (
icons:upload-s3) - Integração futura com homelab (mesma overlay
botinho_traefik-net)
4. Frontend (Web + PWA)
Workspace @aero/web:
- React 19 + TanStack Router + TanStack Query
- Tailwind v4 + design system Aero (
GlassCard,AeroButton,AeroPill) - PWA — service worker, instalável no Chrome/Edge
- Radix UI — componentes acessíveis
- Tema Frutiger / MSN nostalgia
Desktop: apps/desktop — shell Electron só para dev da equipa; utilizadores usam PWA.
Economia
- AeroCoins (AC) — moeda virtual, carteira e histórico de transações
- Missões — gamificação;
claimMissioncredita AC
Stack técnica resumida
| Camada | Tech |
|---|---|
| API | TypeScript, GraphQL Yoga, Drizzle, Vitest |
| Web | Vite, React 19, TanStack |
| Dados | PostgreSQL, Redis |
| Storage | MinIO (S3 API) |
| Infra | Docker Swarm, Traefik, overlay networks |
| Repo | aero-glow-social (npm workspaces) |