LocalLens
Walkthrough

Construa do zero

Um walkthrough de dez passos que começa numa pasta vazia e termina com um app de chat com IA local funcionando.

O walkthrough reconstrói o LocalLens de dentro para fora. Cada passo adiciona um arquivo (o passo 0 monta o shell do projeto), explica por que o arquivo existe, mostra o código mínimo e te aponta para o próximo passo.

A ordem é deliberada. Espelha a direção de imports da base de código, então nenhum passo depende de um arquivo que você ainda não escreveu.

Os dez passos

  1. Setup do projetobun init, instalar dependências, configurar os configs e scripts.
  2. Tipos de domínio e AppError — o vocabulário compartilhado que todo outro arquivo importa.
  3. Chunking e o prompt embasado — os helpers do lado de recuperação que ainda não sabem sobre o SDK.
  4. O gateway QVAC — carregar modelos, ingerir, buscar, fazer stream de completions.
  5. O JSON store — persistir brains e chunks em .locallens/store.json.
  6. Adaptadores de arquivo — caminhada pela pasta local e normalização do file picker do navegador.
  7. O workflow da aplicação — conectar tudo em LocalLensApp.
  8. A CLI — o ponto de entrada sem UI.
  9. O servidor Bun — a superfície HTTP opcional.
  10. A UI do navegador — uma camada fina sobre o servidor.

O caminho didático

O walkthrough cobre as partes que ensinam a arquitetura. Não explica toda regra de CSS ou todo helper de UI. O código fonte completo está no GitHub — leia depois que você tiver passado por essas páginas.

Por que essa ordem

Cada passo depende só do que veio antes:

project shell → bun init, deps, configs (no source yet)
domain.ts     → no internal imports
rag.ts        → imports domain
qvac.ts       → imports domain
store.ts      → imports domain
files.ts      → imports domain
locallens.ts  → imports domain, files, qvac, rag, store
cli.ts        → imports domain, locallens
server.ts     → imports domain, locallens
ui/           → talks to server.ts over HTTP

Construa nessa ordem e o bun run typecheck continua verde depois de cada passo.

On this page