Lunergi Obras

Um Worker. Web e mobile chamam o mesmo.

TanStack Start, Expo, Better Auth, oRPC, Drizzle no Neon, arquivos no R2. Clone, rode pnpm setup e faça push.

A stack

Apps

  • apps/web

    TanStack Start, shadcn, i18n, SEO. Rotas baseadas em arquivos. A landing e esta sessão de arquitetura são públicas. As rotas do painel ficam atrás da autenticação.

  • apps/mobile

    Expo Router, NativeTabs, o mesmo tipo de cliente oRPC. Chaves de acesso e 2FA usam a mesma sessão do Worker.

Pacotes

  • packages/api

    Routers oRPC e contratos zod. Ferramentas MCP e webhooks ficam aqui. O tipo do cliente é importado apenas com import type.

  • packages/app-update

    Compara a versão do app em execução com a configuração do administrador e diz ao cliente se deve pedir atualização.

  • packages/auth

    Better Auth com Drizzle, chaves de acesso, 2FA e personificação por administradores. Os cookies de sessão vão para o Worker, não para um segundo host de autenticação.

  • packages/config

    tsconfig compartilhado e as regras de fronteira de cliente do oxlint. Sem runtime.

  • packages/db

    Schema Drizzle no Neon. O barrel do schema é o único agregado permitido, e só o código de servidor pode alcançá-lo.

  • packages/email

    Um único ponto sendEmail. Os templates são puros. Em produção usa Cloudflare Email ou Resend. Em desenvolvimento imprime no console.

  • packages/env

    env/server é exclusivo do Worker. env/web é o subconjunto público. O nativo tem sua própria folha para o Expo.

  • packages/errors

    Códigos de erro e chaves de i18n compartilhados. Os clientes mapeiam códigos para textos. Nunca importam a fábrica de erros do servidor.

  • packages/flags

    O registro de flags é uma folha. O repositório do banco é um subcaminho separado, para que um import do cliente não puxe o Drizzle.

  • packages/intl

    i18next mais um provider React. O idioma no servidor é resolvido a partir do cookie e da query.

  • packages/project-setup-cli

    pnpm setup. Renomeação, arquivos de env, Neon, secrets do GitHub e do Worker.

  • packages/storage

    R2 via files-sdk. Os arquivos pertencem à organização ativa. O Worker verifica a participação atual antes de emitir URLs ou repassar os bytes.

  • packages/ui

    Primitivos shadcn e ReUI. Tokens em globals.css. É a autoridade visual da web.

  • packages/widgets

    Widgets de tarefas na tela inicial do iOS e do Android. Controlados por uma feature flag e por um rebuild nativo.

Plugin de agente

  • plugins/agent-plugin

    agent-plugin. Pacote Agent Plugins 1.0: MCP via OAuth, escritas apenas como rascunho e skills. Fica em plugins/agent-plugin.

packages/api

api

Routers oRPC e contratos zod. Ferramentas MCP e webhooks ficam aqui. O tipo do cliente é importado apenas com import type.

Corte cliente / servidor

Client and server cutFour layers. Clients import leaves. The Worker owns api, auth, and email. Neon and R2 sit below the Worker.CLIENTSapps/web · apps/mobileLEAVESapi/client · *.enums.ts · *.schema.ts · errors · intlWORKERapi routers · auth · email · flags/repo · env/serverDATAdb / Neon · storage / R2

O que vem incluído

  • A autenticação já está pronta

    Senha, OAuth, chaves de acesso e 2FA. A personificação de usuários fica no painel de administração.

  • Um único corte tipado

    Entradas e saídas dos routers ficam em Zod. Web e mobile importam os mesmos contratos.

  • Um Worker por PR

    Abra um PR e o Actions sobe um Worker descartável. O merge na main publica em produção.