Ir para o conteúdo

Repositórios

Versão: 1.0.0 | Data: 2026-03-21 | Status: ✅ Aprovado


Visão geral

O FluentLoop é dividido em três repositórios com responsabilidades bem separadas:

Repositório Tecnologia URL
fluentloop-docs MkDocs + Material github.com/goliverpro/fluentloop-docs
fluentloop-core Python + FastAPI github.com/goliverpro/fluentloop-core
fluentloop-web Next.js + React github.com/goliverpro/fluentloop-web

fluentloop-core — Backend

Responsabilidade: Toda a lógica de negócio e orquestração de serviços de IA.

fluentloop-core/
├── app/
│   ├── main.py           # FastAPI entry point, CORS, rate limiting
│   ├── config.py         # Settings via pydantic-settings (.env)
│   ├── db/
│   │   └── supabase.py   # Cliente Supabase singleton
│   ├── middleware/
│   │   └── auth.py       # Validação de JWT em toda requisição autenticada
│   ├── routers/          # Endpoints por domínio
│   │   ├── users.py      # GET /me, PATCH /me, PATCH /me/level
│   │   ├── sessions.py   # CRUD de sessões + encerramento
│   │   ├── chat.py       # POST /message (SSE streaming com Claude)
│   │   ├── speech.py     # POST /transcribe (Azure STT) + /tts (OpenAI)
│   │   ├── scenarios.py  # GET /scenarios
│   │   └── billing.py    # Stripe checkout + webhook
│   ├── services/         # Lógica de negócio e integrações externas
│   └── models/           # Schemas Pydantic (request/response)
├── tests/
├── .env.example
├── Dockerfile
└── requirements.txt

O que NÃO faz: - Não serve assets estáticos - Não gerencia autenticação (delega ao Supabase Auth) - Não processa pagamentos diretamente (delega ao Stripe)


fluentloop-web — Frontend

Responsabilidade: Interface do usuário e experiência de conversação.

fluentloop-web/
├── src/
│   ├── app/
│   │   ├── (auth)/           # Rotas públicas: login, cadastro
│   │   │   ├── login/
│   │   │   └── register/
│   │   ├── (app)/            # Rotas protegidas (requerem auth)
│   │   │   ├── dashboard/
│   │   │   ├── chat/
│   │   │   ├── history/
│   │   │   ├── profile/
│   │   │   └── scenarios/
│   │   ├── onboarding/       # Seleção de nível (pós-cadastro)
│   │   ├── layout.tsx        # Layout raiz
│   │   ├── page.tsx          # Landing page
│   │   └── globals.css
│   ├── components/
│   │   ├── ui/               # Primitivos: Button, Input, Badge, Modal
│   │   ├── chat/             # MessageBubble, CorrectionCard, ChatInput
│   │   ├── voice/            # PushToTalkButton, AudioPlayer, WaveVisualizer
│   │   └── layout/           # BottomNav, Header, PageWrapper
│   ├── lib/
│   │   ├── supabase.ts       # Cliente Supabase (browser)
│   │   └── api.ts            # Fetch wrapper com JWT automático
│   ├── hooks/                # useSession, useChat, useVoice, useAudio
│   └── types/
│       └── index.ts          # Tipos TypeScript de todo o domínio
├── tailwind.config.ts        # Design tokens do style guide
├── tsconfig.json
└── package.json

O que NÃO faz: - Não chama APIs de IA diretamente (passa sempre pelo backend) - Não guarda chaves de API (apenas as chaves públicas do Supabase e Stripe)


Comunicação entre repositórios

fluentloop-web  ──HTTPS──►  fluentloop-core  ──►  Anthropic API
                                             ──►  Azure Speech
                                             ──►  OpenAI TTS
                                             ──►  Stripe

fluentloop-web  ──HTTPS──►  Supabase Auth (direto, sem passar pelo backend)
fluentloop-core ──────────►  Supabase DB + Storage (service role key)

Regra importante: O frontend nunca chama APIs de IA diretamente. Todo tráfego de IA passa pelo backend, onde ficam as chaves secretas e o rate limiting.


Variáveis de ambiente

fluentloop-core (Railway — nunca expostas):

Variável Serviço
SUPABASE_URL + SUPABASE_SERVICE_ROLE_KEY Supabase
ANTHROPIC_API_KEY Claude
AZURE_SPEECH_KEY + AZURE_SPEECH_REGION Azure Speech
OPENAI_API_KEY OpenAI TTS
STRIPE_SECRET_KEY + STRIPE_WEBHOOK_SECRET Stripe

fluentloop-web (Vercel — apenas chaves públicas):

Variável Serviço
NEXT_PUBLIC_SUPABASE_URL + NEXT_PUBLIC_SUPABASE_ANON_KEY Supabase
NEXT_PUBLIC_API_URL Backend
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY Stripe