OpenAthlete
AGPLv3 endurance training platform: EU-oriented hosting, transparent CTL/ATL/TSB logic in code, self-hosting, and full export. Built in Grenoble.
Crie, encontre e organize peladas de futebol.
Translation pending
Sports & fitnessTypeScript · PLpgSQLGitHub @victorrafaelsm15OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
Racha — PWA para organização de peladas Criar → Convidar → Organizar → Sortear → Jogar → Registrar → Finalizar. Conta de demonstração (dados simulados): [email protected] / racha123 Os dados simulados ficam no localStorage do navegador (chave racha:mockdb). Para restaurar o estado inicial: Configurações → Restaurar dados de demonstração, ou limpe o armazenamento do site.Read the full README ↗
Criar → Convidar → Organizar → Sortear → Jogar → Registrar → Finalizar.
npm install
cp .env.example .env
npm run dev # desenvolvimento
npm run build # build de produção (gera o service worker)
npm run preview # testar o build, inclusive a instalação do PWA
Conta de demonstração (dados simulados): [email protected] / racha123
Os dados simulados ficam no localStorage do navegador (chave racha:mockdb).
Para restaurar o estado inicial: Configurações → Restaurar dados de demonstração, ou limpe o armazenamento do site.
src/
types/ Entidades (User, PeladaEvent, Participant, Team, Game, Invitation, Notification)
domain/ Regras puras: permissões, sorteio, rodízio, cronômetro, mapas
services/
contracts.ts Interfaces que a interface consome (Auth, User, Event, Game, Notification, Storage)
mock/ Implementação simulada (localStorage)
http/ Cliente HTTP para o backend real
index.ts Seleciona a implementação conforme VITE_DATA_SOURCE
stores/ Estado global (sessão, toasts, invalidação)
hooks/ useAsync, useTimer, useInstallPrompt, useDebounced
components/ ui/ (primitivos) e app/ (componentes do produto)
layouts/ AppLayout (barra inferior no celular, lateral no desktop)
features/ Módulos compostos (pelada)
pages/ auth/ e app/ — as 15 telas
app/router.tsx
A interface depende exclusivamente de src/services/contracts.ts. Para conectar um backend
(PostgreSQL, Supabase, Neon ou API própria), implemente esses contratos e defina
VITE_DATA_SOURCE=api. Nenhuma tela precisa ser alterada.
.env.example em Project Settings → Environment Variables.vercel.json já redireciona as rotas para o SPA.VITE_GOOGLE_MAPS_API_KEY: usa a Maps Embed API oficial.