Skip to content

Latest commit

 

History

323 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CI

Touvie

Seu Life OS pessoal — rotina, metas, diário, finanças, treino e dieta num app só.

Ver ao vivo   Licença MIT

Next.js 15 TypeScript Supabase Tailwind PWA Telegram Bot


O que é

Touvie é um sistema operacional de vida — um único app, privado, que reúne os módulos que normalmente ficam espalhados em cinco apps diferentes: agenda de rotina, metas, diário, controle financeiro, treino e dieta. Construído como PWA (instala no celular, funciona offline) com um bot de Telegram acoplado pra lançar gasto e consultar saldo sem abrir o app.

Não é um clone de tutorial — é um produto pessoal real, em produção na Vercel, com 18 migrations de banco, modelo de segurança próprio e identidade visual autoral.

▶ Demo ao vivo: touvie.vercel.app

Módulos

Módulo O que faz
🗓️ Rotina Blocos de hábito/tarefa do dia com marcação de conclusão
🎯 Metas Objetivos de curto e longo prazo com acompanhamento
📓 Diário Entradas + humor, protegido por PIN de dois níveis (ler ≠ escrever)
💰 Finanças Lançamentos, contas a pagar, caixinhas (envelopes) e gráficos
🏋️ Treino Séries, cargas, recordes pessoais (PRs) e progressão
🥗 Dieta Refeições, macros e medidas corporais
📝 Notas Bloco de notas rápido
🔔 Notificações Lembretes via Telegram com templates editáveis pela UI
🔍 Busca Busca global entre os módulos

Stack & arquitetura

Next.js 15 (App Router, RSC)  ──┐
   ├─ middleware de auth + trust ├─►  Supabase (Postgres + RLS + Auth)
   ├─ Server Actions             │         18 migrations versionadas
   └─ Route Handlers (API)       │
                                 ├─►  Bot de Telegram (webhook)
   Tailwind + temas CSS          └─►  Crons (Vercel + externos)
   Recharts · next-intl (pt/en)
  • Framework: Next.js 15 (App Router, React Server Components, Server Actions)
  • Banco/Auth: Supabase (Postgres com Row Level Security, Auth nativo)
  • UI: Tailwind CSS + sistema de temas trocável + Recharts pros gráficos
  • i18n: next-intl com pt-BR e inglês
  • Integrações: Bot de Telegram (webhook) + crons agendados
  • Qualidade: TypeScript estrito com tipos do Supabase gerados, Biome (lint+format)

Decisões técnicas que valem destacar

Estas são as partes em que o "porquê" importa mais que o "o quê":

  • Modelo de confiança por dispositivo. O middleware.ts libera escrita só em dispositivos marcados como confiáveis — no celular o app fica somente-leitura por padrão. A confiança é um cookie assinado com HMAC-SHA256 (lib/crypto.ts), validado server-side via Web Crypto pra rodar igual no edge e no node.
  • Diário com PIN de dois níveis. Um hash destrava a leitura, outro destrava a escrita — separados de propósito, pra você poder revisitar o diário sem habilitar edição num aparelho emprestado.
  • Brute-force barrado no servidor. O PIN tem rate limit no banco (pin_attempts + pin_locked_until): depois de N erros, o destrave trava por minutos. Não dá pra forçar pelo client.
  • Notificações como dados, não código. Os lembretes do bot usam templates no Postgres com sintaxe {{variavel}} — dá pra editar o texto na UI e publicar sem deploy. Cada variável some sozinha quando não tem dado.
  • Arquitetura de crons híbrida. Os 2 crons mais críticos ficam no vercel.json (limite do plano Hobby); os demais ficam num scheduler externo autenticado por Bearer $CRON_SECRET. O cron financeiro mensal é blindado server-side pra só disparar no dia certo.

Rodando localmente

pnpm install
cp .env.local.example .env.local   # preencha as chaves do Supabase
pnpm dev                           # http://localhost:3007

O passo a passo completo — criar o projeto Supabase, rodar as 18 migrations, configurar o bot de Telegram e agendar os crons — está em docs/OPERATIONS.md.

Roadmap (entregue)

  • P1 — scaffold, auth, rotina e metas
  • P2 — diário com PIN + autosave
  • P3 — finanças completo + gráficos
  • P4 — bot de Telegram + crons de lembrete
  • P5 — treino avançado (séries, PRs, progressão)
  • P6 — dieta (refeições, macros, medidas)

Feito por João Marcos Vilela · Portfólio · GitHub

Licença MIT

About

Life OS pessoal: rotina, metas, finanças e treino num app só — Next.js 15 + Supabase + bot de Telegram.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages