BikeControl (SwiftControl)
Use Zwift Click, Zwift Play, Shimano Di2, or any Bluetooth controller with MyWhoosh, Rouvy, Zwift, and more. Free to try on iOS, Android, Windows, and macOS.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Portal esportivo do futebol urucuiense — notícias, classificações, jogos, transmissões ao vivo e galeria de fotos. Acesse http://localhost:3000.README 전문 보기 ↗
Portal esportivo do futebol urucuiense — notícias, classificações, jogos, transmissões ao vivo e galeria de fotos.
| Camada | Tecnologia |
|---|---|
| Framework | Next.js 15 (App Router, Turbopack) |
| Linguagem | TypeScript 5 |
| Banco de dados | PostgreSQL 16 + Drizzle ORM |
| Estilização | Tailwind CSS v4 |
| Autenticação | JWT (jose) + Refresh Tokens + bcryptjs |
| Validação | Zod |
| Testes | Vitest |
| Monitoramento | Sentry |
| Infra | Docker + Docker Compose |
| CI | GitHub Actions |
# 1. Clone o repositório
git clone https://github.com/Lucier/urucuisports.git
cd urucuisports
# 2. Instale as dependências
pnpm install
# 3. Configure as variáveis de ambiente
cp .env.example .env.local
# Edite .env.local com suas credenciais
# 4. Execute as migrações
pnpm db:migrate
# 5. (Opcional) Popule o banco com dados de exemplo
pnpm db:seed
# 6. Inicie o servidor de desenvolvimento
pnpm dev
Acesse http://localhost:3000.
| Variável | Descrição |
|---|---|
DATABASE_URL | URL de conexão PostgreSQL |
JWT_SECRET | Segredo para assinatura JWT (mín. 32 bytes) |
NEXT_PUBLIC_API_URL | URL pública da aplicação (sem barra final) |
SENTRY_DSN | DSN do Sentry (servidor) — opcional |
NEXT_PUBLIC_SENTRY_DSN | DSN do Sentry (cliente) — opcional |
SENTRY_ORG | Organização no Sentry — opcional |
SENTRY_PROJECT | Projeto no Sentry — opcional |
SENTRY_AUTH_TOKEN | Token para upload de source maps — opcional |
Gere o JWT_SECRET com:
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
pnpm dev # Servidor de desenvolvimento (Turbopack)
pnpm build # Build de produção
pnpm start # Inicia o servidor de produção
pnpm lint # ESLint
pnpm type-check # TypeScript sem emitir arquivos
pnpm test # Testes unitários (Vitest)
pnpm test:coverage # Cobertura de testes
pnpm db:generate # Gera nova migração a partir do schema
pnpm db:migrate # Executa migrações pendentes
pnpm db:studio # Abre o Drizzle Studio (UI visual do banco)
pnpm db:seed # Popula o banco com dados de exemplo
# Copie e configure o arquivo de ambiente
cp .env.example .env
# Edite .env com DB_PASSWORD, JWT_SECRET e NEXT_PUBLIC_API_URL
# Suba todos os serviços (app + postgres + backup automático)
docker compose up -d
A aplicação ficará disponível em http://localhost:3000.
O serviço db-backup gera backups diários comprimidos em ./backups/ e remove automaticamente os arquivos com mais de 7 dias.
src/
├── app/ # Rotas e páginas (App Router)
│ ├── admin/ # Painel administrativo (protegido)
│ ├── api/ # API Routes (auth, health)
│ ├── estatisticas/ # Classificação e artilharia por liga
│ ├── fotos/ # Galeria de fotos
│ ├── noticias/ # Listagem e detalhe de notícias
│ └── transmissoes/ # Transmissões ao vivo
├── components/ # Componentes reutilizáveis
│ ├── admin/ # Componentes do painel admin
│ ├── home/ # Seções da página inicial
│ ├── layout/ # Navbar, Footer
│ └── ui/ # Componentes genéricos (SafeImage, etc.)
├── database/
│ ├── schema.ts # Definição de todas as tabelas
│ ├── migrations/ # Migrações SQL geradas pelo Drizzle
│ └── seed.ts # Dados de exemplo
├── lib/ # Utilitários do servidor (auth, jwt, rate-limit)
├── modules/ # Módulos de domínio (auth, users)
├── shared/ # Tipos e utilitários compartilhados
└── tests/ # Testes unitários
| Tabela | Descrição |
|---|---|
users | Usuários e administradores |
refresh_tokens | Tokens de refresh com rotação e revogação |
leagues | Ligas e torneios |
rounds | Rodadas de cada liga |
matches | Partidas com placar e status |
standings | Tabela de classificação |
top_scorers | Artilharia |
teams | Times participantes |
players | Jogadores vinculados a times |
posts | Notícias com soft delete |
categories | Categorias de notícias |
streams | Transmissões ao vivo (YouTube) |
photo_albums | Álbuns de fotos |
advertisers | Anunciantes exibidos na home |
httpOnly)SessionKeepAlive renova o access token automaticamente 5 minutos antes do vencimento, sem interromper a sessão do administradorO pipeline do GitHub Actions (.github/workflows/ci.yml) executa em cada push/PR:
tsc --noEmitnext build (depende dos dois jobs anteriores)