Aplicacao web para rastreamento de encomendas dos Correios com autenticacao Google OAuth.
- Frontend: React 18, TypeScript, Vite, Material-UI, React Query
- Backend: Fastify, Prisma ORM, SQLite, Zod
- Autenticacao: Google OAuth 2.0 + JWT (access + refresh token)
- API de Rastreamento: RapidAPI (Correios)
- Deploy: GitHub Actions, PM2, Nginx, Cloudflare Tunnel
- Node.js >= 18
- pnpm 9
Crie o arquivo backend/.env:
DATABASE_URL="file:./prisma/dev.db"
GOOGLE_CLIENT_ID="seu_google_client_id"
GOOGLE_CLIENT_SECRET="seu_google_client_secret"
JWT_SECRET="string_aleatoria_com_pelo_menos_32_caracteres"
JWT_REFRESH_SECRET="string_aleatoria_com_pelo_menos_32_caracteres"
RAPIDAPI_KEY="sua_chave_rapidapi"
PORT=3007
FRONTEND_URL="http://localhost:3006"
BACKEND_URL="http://localhost:3007"Crie o arquivo frontend/.env:
VITE_API_URL="http://localhost:3007"# Instalar dependencias
pnpm install
# Gerar Prisma Client e criar banco
pnpm --filter tracker-backend db:generate
pnpm --filter tracker-backend db:push
# Rodar frontend e backend juntos
pnpm dev
# Ou separadamente
pnpm dev:backend # http://localhost:3007
pnpm dev:frontend # http://localhost:3006pnpm build # Build completo
pnpm build:backend # Apenas backend
pnpm build:frontend # Apenas frontendO deploy e automatico via GitHub Actions ao fazer push na branch main. O workflow:
- Builda backend e frontend
- Envia os arquivos para a VPS via SSH (Cloudflare Tunnel)
- Instala dependencias de producao
- Sincroniza o schema do banco (Prisma)
- Configura Nginx e reinicia o PM2
| Secret | Descricao |
|---|---|
VPS_SSH_KEY |
Chave SSH privada para acesso a VPS |
VPS_HOST |
Hostname da VPS (Cloudflare Tunnel) |
VPS_USER |
Usuario SSH |
APP_DIR |
Diretorio da aplicacao na VPS |
GOOGLE_CLIENT_ID |
Client ID do Google OAuth |
GOOGLE_CLIENT_SECRET |
Client Secret do Google OAuth |
JWT_SECRET |
Secret para tokens de acesso |
JWT_REFRESH_SECRET |
Secret para refresh tokens |
RAPIDAPI_KEY |
Chave da API RapidAPI |
FRONTEND_URL |
URL publica do frontend |
BACKEND_URL |
URL publica do backend |
| Metodo | Rota | Auth | Descricao |
|---|---|---|---|
| GET | /health |
Nao | Health check |
| GET | /auth/google |
Nao | Inicio do fluxo OAuth |
| GET | /auth/google/callback |
Nao | Callback do OAuth |
| POST | /auth/refresh |
Nao | Renovar access token |
| POST | /auth/logout |
Sim | Logout |
| GET | /users/me |
Sim | Dados do usuario logado |
| GET | /packages |
Sim | Listar encomendas |
| POST | /packages |
Sim | Cadastrar encomenda |
| GET | /packages/:id |
Sim | Detalhes da encomenda |
| PUT | /packages/:id |
Sim | Atualizar encomenda |
| DELETE | /packages/:id |
Sim | Remover encomenda |
| GET | /packages/:id/track |
Sim | Rastrear encomenda |
tracker/
├── backend/
│ ├── prisma/ # Schema e banco SQLite
│ └── src/
│ ├── config/ # Variaveis de ambiente e constantes
│ ├── controllers/ # Handlers HTTP
│ ├── modules/ # Rotas por modulo
│ ├── plugins/ # Plugins Fastify (auth)
│ ├── schemas/ # Validacao com Zod
│ ├── services/ # Logica de negocio e integracao RapidAPI
│ └── utils/ # Utilitarios
├── frontend/
│ └── src/
│ ├── components/ # Componentes React
│ ├── config/ # Constantes
│ ├── hooks/ # Custom hooks
│ ├── pages/ # Paginas
│ ├── services/ # Cliente HTTP
│ └── types/ # Tipos TypeScript
├── deploy/
│ └── nginx.conf # Configuracao Nginx
└── .github/
└── workflows/
└── deploy.yml # CI/CD