Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

31 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Meu Desafio

Monorepo do Meu Desafio, uma plataforma para criar desafios esportivos, registrar atividades, acompanhar progresso e integrar dados de corrida e pedalada.

O projeto usa Bun workspaces para organizar a API e o aplicativo mobile em um unico repositorio.

Tecnologias

  • Runtime e workspace: Bun
  • API: Elysia, Better Auth, Prisma, PostgreSQL, Redis
  • Mobile: Expo, React Native, Expo Router, React Query, Zustand
  • Observabilidade: Prometheus e Grafana

Estrutura

.
|-- apps
|   |-- api         Backend Elysia/Bun
|   `-- mobile      Aplicativo Expo/React Native
`-- package.json    Scripts do monorepo e workspaces

Pre-requisitos

  • Bun 1.3.14 ou superior compativel
  • Podman ou Docker com suporte a Compose
  • Node.js instalado para ferramentas do ecossistema Expo
  • Android Studio, Xcode ou um dispositivo fisico para rodar o app mobile

Instalacao

Instale as dependencias na raiz do monorepo:

bun install

Variaveis de ambiente

Crie os arquivos .env conforme necessario em cada app. Nao versione segredos reais.

API

Arquivo esperado: apps/api/.env

Variaveis usadas pela API:

PORT=3000
DATABASE_URL=postgresql://postgres:postgres@localhost:5432/meu_desafio?schema=public
REDIS_URL=redis://localhost:6379
BETTER_AUTH_SECRET=altere-este-segredo
BETTER_AUTH_URL=http://localhost:3000
FRONTEND_URL=http://localhost:8081
EXPO_SCHEME=meudesafio2
GOOGLE_CLIENT_ID=seu-client-id
GOOGLE_CLIENT_SECRET=seu-client-secret
RESEND_API_KEY=sua-chave-resend
EMAIL_HOST=smtp.exemplo.com
EMAIL_PORT=587
EMAIL_USER=usuario
EMAIL_PASS=senha
EMAIL_FROM="Meu Desafio <noreply@exemplo.com>"
R2_ACCOUNT_ID=account-id
R2_ACCESS_KEY_ID=access-key
R2_SECRET_ACCESS_KEY=secret-key
R2_PUBLIC_URL_AVATARS=https://exemplo.com/avatars
R2_PUBLIC_URL_DESAFIOS=https://exemplo.com/desafios
STRAVA_CLIENT_ID=12345
STRAVA_CLIENT_SECRET=seu-client-secret

Mobile

Arquivo esperado: apps/mobile/.env

Variaveis usadas pelo app Expo:

APP_ENV=development
API_URL_DEVELOPMENT=http://localhost:3000
API_URL_PRODUCTION=https://api.exemplo.com
GOOGLE_MAPS_API_KEY=sua-chave-google-maps

Para testar em um celular fisico, use em API_URL_DEVELOPMENT um host acessivel pelo dispositivo, como o IP da maquina na rede local ou um tunel HTTPS.

Banco e servicos locais

Suba PostgreSQL, Redis, Prometheus e Grafana:

bun run db:up

Aplique as migrations e gere o client Prisma:

bun run prisma:generate
bun run prisma:migrate

Para parar os servicos:

bun run db:down

Desenvolvimento

Inicie a API:

bun run dev:api

Inicie o app mobile:

bun run dev:mobile

Tambem e possivel executar comandos diretamente nos workspaces:

bun run --cwd apps/api dev
bun run --cwd apps/mobile start

URLs uteis

  • API local: http://localhost:3000
  • Documentacao OpenAPI/Scalar: http://localhost:3000/openapi
  • Metricas Prometheus da API: http://localhost:3000/metrics
  • Prometheus: http://localhost:9090
  • Grafana: http://localhost:3001

Credenciais locais padrao do Grafana, conforme apps/api/compose.yaml:

usuario: admin
senha: admin

Scripts principais

Execute a partir da raiz do monorepo:

bun run dev:api          # inicia a API em modo watch
bun run dev:mobile       # inicia o Expo com dev client
bun run start:api        # inicia a API sem watch
bun run lint:api         # roda ESLint na API
bun run lint:mobile      # roda ESLint no mobile
bun run prisma:generate  # gera o client Prisma
bun run prisma:migrate   # executa migrations em desenvolvimento
bun run db:up            # sobe servicos locais
bun run db:down          # derruba servicos locais

API

A API fica em apps/api e expoe modulos para:

  • Autenticacao com Better Auth, e-mail/senha, OTP e Google OAuth
  • Usuarios, perfil, avatar e ranking
  • Desafios e inscricoes
  • Tarefas/atividades dos desafios
  • Integracao com Strava
  • Metricas em /metrics

A documentacao interativa fica disponivel em /openapi quando a API esta rodando.

App mobile

O app fica em apps/mobile e usa Expo Router. Ele consome a API do workspace @meu-desafio/api e utiliza recursos nativos como mapas, localizacao, imagens e armazenamento seguro.

Comandos uteis do mobile:

bun run --cwd apps/mobile android
bun run --cwd apps/mobile ios
bun run --cwd apps/mobile web

Screenshots

intro login dashboard map rank password

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages