JP / EN / PT
Kaimono
https://p0r6iz89.cloud
Github
Você já sentiu algo assim no dia a dia?
Registrar cada gasto é cansativo, o total fica difícil de entender e, quanto mais opções você reúne, mais difícil se torna decidir.
Para lidar com esse problema, criei o Kaimono, uma aplicação web localizada para planejamento de compras, visualização de orçamento e colaboração.
Essenciais são itens leves para compras recorrentes ou imediatas. O workspace pode registrar título, preço, quantidade e status da compra, mantendo os gastos pendentes visíveis.
Compras planejadas armazenam informações mais completas para itens que precisam de comparação ou orçamento antes da compra, incluindo prioridade, URL, imagem, descrição, comentários, curtidas e um projeto opcional.
Projetos agrupam compras planejadas por objetivo e facilitam a compreensão do orçamento total. Por exemplo, um projeto de reforma pode organizar opções de iluminação, móveis e decoração em um só lugar.
Proprietários e administradores podem convidar membros por e-mail. As verificações de membership e tenant são feitas no servidor para impedir acesso ou movimentação de registros entre workspaces.
Em vez de preencher todos os campos manualmente, o usuário pode enviar uma URL pública de produto. O Kaimono lê metadados estruturados, normaliza textos úteis com IA e importa uma imagem válida quando ela está disponível.
A rota de extração inclui validação de segurança da URL, limites de redirecionamento e resposta, timeout e rate limiting opcional. Um saldo simples de créditos controla o uso e evita solicitações ilimitadas de extração.
O Kaimono oferece login com GitHub, Google e magic link por e-mail usando Auth.js. O usuário também pode ativar a autenticação de dois fatores TOTP nas configurações da conta.
O processo de configuração gera um QR code para o aplicativo autenticador e códigos de recuperação de uso único. Contas com o recurso ativado precisam concluir o segundo fator antes de acessar rotas protegidas do workspace.
Em produção, o Kaimono usa um subdomínio para cada workspace:
workspace.p0r6iz89.cloud
workspace identifica o tenantp0r6iz89.cloud é o domínio raizO middleware combina tratamento de locale, verificação de autenticação, exigência do segundo fator e roteamento do workspace:
/{locale}/s/{subdomain}.middleware.ts Request Flow
Isso mantém a URL pública simples enquanto a aplicação utiliza uma única árvore localizada do App Router.
Escolhi Server Actions e Prisma para compartilhar validação tipada e acesso ao banco nos fluxos das páginas, sem manter uma camada REST separada para cada formulário.
Todas as operações de dados do tenant resolvem o usuário autenticado e sua membership no workspace no servidor. O Zod valida as mutações, enquanto relações compostas no banco impedem que uma compra planejada seja atribuída a um projeto de outro workspace.
O maior desafio foi fazer autenticação, roteamento localizado e subdomínios funcionarem como um único sistema. Implementar essas fronteiras diretamente trouxe experiência prática com roteamento baseado em host, autorização, processamento seguro de URLs e fluxos de autenticação com estado.
O Kaimono pode ser executado localmente com npm e Docker:
npm install
docker compose up -d db
npx prisma migrate dev
npm run dev
Links:
URLs locais:
http://localhost:3000/pt-BRhttp://workspace.localhost:3000/pt-BRO Docker Compose inicia o PostgreSQL, enquanto a aplicação Next.js roda com npm run dev.