YOUbot

Estrutura de código

Onde vive cada peça do YOUbot

A organização abaixo segue a estrutura proposta. Como o app roda em TanStack Start, o backend usa server functions em vez de supabase/functions — a intenção de cada função foi preservada e o equivalente real está indicado.

Implementado

17

Parcial

9

Planejado

0

Árvore

src/
  routes/            (app/ — rotas e telas)
  components/
  lib/
    <feature>/       (features/)
    ai/ documents/ reminders/  (services/)
    integrations/
    orchestrator/
  hooks/
  types/             (co-localizado: lib/<feature>/types.ts)
server functions (TanStack Start)
  lib/orchestrator/orchestrator.functions.ts   → assistant
  lib/calendar/service.ts                      → calendar-sync
  lib/reminders/engine.ts + jobs/scheduler.ts  → notifications
  lib/documents/service.ts                     → document-generation
  lib/messaging/service.ts                     → whatsapp
  lib/briefing/service.ts                      → daily-briefing

Mapa por camada

Camada de experiência: rotas, shell e design system

src/app/

implementado

Entrada do aplicativo, rotas e layout raiz.

  • src/routes/
  • src/routes/__root.tsx
  • src/router.tsx
  • src/start.ts

TanStack Start usa roteamento por arquivo em src/routes; é o equivalente direto de app/.

src/components/

implementado

Componentes compartilhados e primitivas de UI.

  • src/components/youbot/AppShell.tsx
  • src/components/youbot/ui-kit.tsx
  • src/components/ui/

src/hooks/

implementado

Hooks reutilizáveis (sessão, viewport).

  • src/hooks/useAuth.ts
  • src/hooks/use-mobile.tsx

src/types/

parcial

Tipos de domínio.

  • src/lib/youbot/types.ts
  • src/lib/med/types.ts
  • src/lib/fin/types.ts
  • src/lib/casa/types.ts

Tipos ficam junto do domínio, não em uma pasta global — menos import cruzado.

Convenções

Sufixos de borda

*.functions.ts expõe RPC tipado ao app; *.server.ts guarda o que nunca pode ir ao navegador. Telas importam só o primeiro.

Domínio não conhece fornecedor

Serviços falam com portas (CalendarProvider, WhatsAppProvider…). Trocar de fornecedor mexe só no registro.

IA interpreta, backend autoriza

Nenhuma escrita nasce no cliente: plano, política e execução ficam no servidor, com auditoria.

Tipos junto do domínio

Cada feature carrega types.ts, store e regras — mover a pasta move o módulo inteiro.