Uma base TypeScript, dois clientes. npm workspaces com Turborepo guardam o web app React 18 (apps/web), o app mobile React Native 0.85 + Expo (apps/mobile) e oito pacotes compartilhados consumidos como código-fonte cru, então uma única edição recarrega os dois apps.
O estado (17 slices Redux e a lógica de gamificação), a camada de API atrás de uma interface HttpClient estreita, os tokens de tema, as traduções, os schemas de validação e o registro de ícones são uma implementação só. Cada plataforma mantém apenas o que precisa diferir: persistência, navegação, armazenamento de tokens e toda a camada de renderização. O site de marketing vive na raiz do repositório, deliberadamente fora do workspace, e vai sozinho para o Cloudflare Pages.
Um único grafo de CI faz typecheck, build e testes de cada workspace, e então roda a suíte e2e Playwright contra a stack completa. Um push na main publica a imagem web no GHCR (o Watchtower a implanta) e, quando o app mobile ou qualquer pacote compartilhado mudou, constrói um APK Android assinado publicado em um release rolante do GitHub.
Os tópicos de arquitetura do monorepo, componentes de UI, Redux e dados, idioma e tema, e segurança na UI documentam este repositório.