Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

31 Commits

Folders and files

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

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages