Aplicativo de gerenciamento de medicamentos em português brasileiro
Gerencie seus medicamentos, protocolos de tratamento e estoque de forma simples e eficiente. Agora com Autenticação Multi-usuário, Planos de Tratamento complexos e Titulação de Dose.
- ✅ Navegação por Hash: URLs amigáveis com
#/dashboard,#/medicamentos, etc. - ✅ 9 Rotas Implementadas: Dashboard, medicamentos, estoque, histórico, protocolos, perfil, onboarding
- ✅ Deep Links: Links do Telegram abrem diretamente rotas específicas
- ✅ Histórico do Navegador: Botões voltar/avançar funcionam corretamente
- ✅ Instalável: App pode ser instalado no Android (Chrome) e iOS (Safari)
- ✅ Offline Support: Service Worker com estratégias de cache (CacheFirst, StaleWhileRevalidate)
- ✅ Manifest.json: Ícones em 8 tamanhos (72x72 a 512x512), tema e metadados
- ✅ Lighthouse Score: PWA >= 90, Performance >= 90
- ✅ Notificações Nativas: Lembretes de dose mesmo com app fechado
- ✅ VAPID Security: Chaves de segurança em variáveis de ambiente
- ✅ 3 Tipos de Notificações: Lembretes de dose, alertas de dose atrasada (t+15min), estoque baixo
- ✅ LGPD Compliant: Dados de subscription protegidos com RLS
- ✅ Privacy-First: Sem PII, dados apenas em localStorage
- ✅ Eventos Trackeados: Instalação PWA, opt-in/opt-out push, sessões offline, deep links
- ✅ Métricas de Uso: Visualizações de tela, interações com notificações
- ✅ Code Quality: 49 testes unitários para utilities do bot
- ✅ Message Formatter: Escape centralizado de MarkdownV2
- ✅ Error Handler: Tratamento padronizado de erros com recovery strategies
- ✅ Duplicação Reduzida: >30% de código duplicado eliminado
- ✅ Estrutura por Feature:
src/features/com 5 domínios (adherence, dashboard, medications, protocols, stock) - ✅ Shared Resources:
src/shared/para componentes, hooks, services e utilitários reutilizáveis - ✅ Path Aliases: Import limpo com
@/,@features/,@shared/,@dashboard/, etc. - ✅ 150+ Arquivos Migrados: Código reorganizado sem breaking changes
- ✅ Autenticação Segura: Login e registro via Supabase Auth (Email/Senha).
- ✅ Isolamento de Dados: Sistema multi-usuário com Row-Level Security (RLS) rigoroso.
- ✅ Perfil de Usuário: Gerenciamento de conta, troca de senha e vínculo de Telegram.
- ✅ Migração Pilot-to-Auth: Ferramenta automática para migrar dados da fase piloto para conta autenticada.
- ✅ ~783 linhas de código removidas através da consolidação de 6 grupos de componentes
- ✅ MedicineForm Unificado: Consolidado com FirstMedicineStep via props de onboarding (
autoAdvance,onSuccess) - ✅ ProtocolForm com Modos: Suporte a
mode='full'|'simple'para formulários completos e onboarding simplificado - ✅ Calendar Consolidado: Features opcionais via props (
enableLazyLoad,enableSwipe,enableMonthPicker) - ✅ AlertList Componente Base: Componente genérico em
ui/para SmartAlerts e StockAlertsWidget - ✅ LogForm UX Padronizada: Experiência unificada entre Dashboard e History (botão "Plano Completo")
- ✅ 100% Backward Compatibility: Todas as mudanças mantêm compatibilidade total com código existente
- ✅ Zero Breaking Changes: APIs públicas preservadas, apenas adições de props opcionais
- ✅ Glassmorphism Hierárquico: 4 níveis de intensidade (light, standard, heavy, hero) com diferentes opacidades e blur
- ✅ Gradientes Temáticos: Gradientes para insight (cyan→purple), hero, alert-critical e success
- ✅ Micro-interações: Scale effects, glow transitions, hover/active states em todos os componentes interativos
- ✅ Tokens CSS Completos: Sistema de tokens para colors, borders, shadows, spacing e transitions
- ✅ InsightCard: Componente com 11 variantes de insight dinâmico (streak_motivation, stock_alert, adherence_drop, etc.)
- ✅ useAdherenceTrend: Hook para cálculo de tendência de adesão
- ✅ useInsights: Hook para geração dinâmica de insights do usuário
- ✅ adherenceTrendService: Serviço para processamento de dados de tendência
- ✅ insightService: Serviço com 11 variantes de insight
- ✅ Validação Zod Runtime: 23 testes de validação eliminando erros silenciosos.
- ✅ Cache SWR: 95% de melhoria no carregamento do dashboard (30s stale time).
- ✅ Onboarding 4 Steps: Wizard guiado para novos usuários:
- Boas-vindas - Apresentação do app
- Medicamento - Cadastro do primeiro remédio
- Protocolo - Configuração da primeira rotina
- Telegram - Integração com bot de lembretes
- ✅ View Otimizada de Estoque:
medicine_stock_summarycom 5x mais performance. - ✅ Persistência de Sessões Bot: TTL 30min para sessões conversacionais do Telegram.
- ✅ Integração Telegram 2.0: Vínculo seguro via token temporário e suporte multi-usuário no bot.
- ✅ DLQ Admin Interface: Interface administrativa para gerenciar notificações falhadas em
/admin/dlq. - ✅ Daily DLQ Digest: Digest diário enviado às 09:00 para o admin com notificações falhadas.
- ✅ Simple Retry: Retry automático de 2 tentativas para erros transitórios (network, rate limit, HTTP 5xx).
- ✅ Correlation IDs: Rastreamento end-to-end de notificações com UUIDs.
- ✅ Error Categorization: Identificação automática de erros retryable vs non-retryable.
- ✅ Calendário Interativo: Visualização mensal de doses tomadas com navegação e seleção de data.
- ✅ Histórico Completo: Visualização detalhada integrada ao calendário com suporte a edições rápidas.
- ✅ Edição e Exclusão: Flexibilidade total para ajustar registros passados com restauração automática de estoque.
- ✅ Registros Retroativos: Registro de doses em qualquer data/hora com ajuste de fuso horário local.
- ✅ Dashboard Premium: Interface Neo-Glass com saudações dinâmicas e indicadores em tempo real.
- ✅ Garantia de Qualidade: Suíte de testes unitários com Vitest (1520+ testes) e linting rigoroso.
- 🤖 IA Médico-Assistente: Insights sobre os protocolos com base em diretrizes médicas.
- 📊 Relatórios de Titulação: Gráficos de evolução da dosagem ao longo do tempo.
- 🔒 Backup Criptografado: Exportação e importação de dados de forma segura.
- Linguagem: TypeScript 5.9 — monorepo 100% TS desde julho/2026 (épico 040): web, mobile, packages compartilhados, API serverless e bot. Regime incremental:
strict: falsena base + strict islands (strictNullChecks) nos módulos clínicos críticos, com ratchet automatizado (scripts/strict-island.sh) impedindo regressão de dívida de tipos - Frontend: React 19 + Vite (ES Modules nativo)
- Backend: Supabase (PostgreSQL + REST API + Auth) — tipos do banco gerados (
database.types.ts) e cliente tipadoSupabaseClient<Database> - Validação: Zod 4.x (schemas runtime; tipos estáticos derivados via
z.infer<>) - Cache: SWR (Stale-While-Revalidate) customizado - 95% mais rápido
- Styling: CSS Vanilla com design system customizado
- Deployment: Vercel (Frontend, API Webhooks & Serveless Functions) + Supabase (Database)
- Testes: Vitest + React Testing Library (1520+ testes)
- Custo: R$ 0 (tier gratuito)
- Node.js 22+ instalado
- Conta no Supabase (gratuita)
- Conta no Vercel (gratuita, opcional para deploy)
- Conta no GitHub (gratuita, para versionamento)
-
Clone o repositório:
git clone https://github.com/SEU-USUARIO/dosiq.git cd dosiq -
Instale as dependências:
npm install
-
Configure o Supabase:
- Siga o guia completo em SETUP.md
- Crie um projeto no Supabase
- Execute o SQL para criar as tabelas
- Copie as credenciais
-
Configure as variáveis de ambiente:
cp .env.example .env
Edite o arquivo
.enve adicione suas credenciais do Supabase:VITE_SUPABASE_URL=https://seu-projeto.supabase.co VITE_SUPABASE_ANON_KEY=sua-chave-aqui -
Rode o servidor de desenvolvimento:
npm run dev
-
Acesse o app: Abra http://localhost:5173 no navegador
- SETUP.md: Guia completo de configuração do Supabase, GitHub e Vercel
- docs/QUICKSTART.md: Início rápido para desenvolvedores (inclui onboarding)
- docs/ARQUITETURA.md: Visão geral da arquitetura do projeto
- docs/PADROES_CODIGO.md: Padrões e convenções de código
- docs/past_deliveries/DECISOES_TECNICAS.md: Decisões técnicas da Onda 1 (Zod, SWR, React 19)
- docs/API_SERVICES.md: APIs internas dos services (com exemplos)
- docs/HOOKS.md: Hooks customizados documentados
- docs/past_deliveries/SCHEMAS_VALIDACAO.md: Documentação dos schemas Zod (23 testes)
- docs/database-schema.md: Esquema completo do banco de dados
- docs/past_deliveries/BENCHMARK_CACHE_SWR.md: Performance do cache SWR (95% melhoria)
- docs/past_deliveries/BENCHMARK_STOCK_VIEW.md: Otimização de consultas de estoque
- docs/GUIA_TITULACAO.md: Tutorial prático de protocolos em titulação
- docs/TRANSICAO_AUTOMATICA.md: Sistema de transição automática de doses
- docs/user-guide.md: Guia do usuário em português
dosiq/
├── src/
│ ├── features/ # 🆕 NOVO: Organização por feature (F4.6)
│ │ ├── adherence/ # Componentes, hooks, services, utils de adesão
│ │ ├── dashboard/ # Dashboard widgets e utilitários
│ │ ├── medications/ # Domínio: Medicamentos
│ │ ├── protocols/ # Domínio: Protocolos
│ │ └── stock/ # Domínio: Estoque
│ ├── shared/ # 🆕 NOVO: Recursos compartilhados
│ │ ├── components/ # UI components, log, gamification, onboarding
│ │ ├── hooks/ # Hooks customizados (useCachedQuery, etc)
│ │ ├── services/ # Services com cache SWR
│ │ ├── constants/ # Schemas Zod centralizados
│ │ ├── utils/ # Utilitários puros
│ │ └── styles/ # CSS tokens e temas
│ ├── components/ # [LEGACY] Componentes - migrando para features/
│ │ ├── ui/ # Componentes reutilizáveis consolidados
│ │ │ ├── Button, Card, Modal, Loading
│ │ │ ├── Calendar.tsx # Features opcionais: lazyLoad, swipe
│ │ │ └── AlertList.tsx # Componente base para alertas 🆕
│ │ ├── medicine/ # Componentes de medicamentos
│ │ │ └── MedicineForm.tsx # Consolidado com FirstMedicineStep
│ │ ├── protocol/ # Componentes de protocolos
│ │ │ └── ProtocolForm.tsx # Modo 'full'|'simple'
│ │ ├── stock/ # Componentes de estoque
│ │ ├── log/ # Componentes de registro
│ │ │ └── LogForm.tsx # UX padronizada
│ │ ├── dashboard/ # Widgets do dashboard
│ │ │ ├── SmartAlerts.tsx # Usa AlertList
│ │ │ └── StockAlertsWidget.tsx # Usa AlertList
│ │ ├── adherence/ # Componentes de adesão
│ │ └── onboarding/ # Wizard de onboarding (4 steps)
│ │ ├── FirstMedicineStep.tsx # Wrapper de MedicineForm
│ │ └── FirstProtocolStep.tsx # Wrapper de ProtocolForm
│ ├── hooks/
│ │ └── useCachedQuery.ts # Hook SWR para cache de queries
│ ├── lib/
│ │ ├── supabase.ts # Cliente Supabase
│ │ └── queryCache.ts # Implementação SWR (Stale-While-Revalidate)
│ ├── schemas/ # Validação Zod
│ │ ├── index.ts # Exportações dos schemas
│ │ ├── medicineSchema.ts
│ │ ├── protocolSchema.ts
│ │ ├── stockSchema.ts
│ │ ├── logSchema.ts
│ │ └── validationHelper.ts
│ ├── services/
│ │ ├── api/ # Serviços da API com validação Zod
│ │ │ ├── cachedServices.ts # Wrappers com cache SWR
│ │ │ ├── medicineService.ts
│ │ │ ├── protocolService.ts
│ │ │ ├── stockService.ts
│ │ │ ├── logService.ts
│ │ │ └── treatmentPlanService.ts
│ │ └── api.ts # Exportações principais
│ ├── styles/
│ │ ├── tokens.css # Design tokens (cores, espaçamentos)
│ │ └── index.css # Estilos globais
│ ├── views/ # Páginas principais
│ ├── App.tsx # Componente principal
│ └── main.tsx # Entry point
├── docs/ # Documentação técnica expandida 📚
│ ├── ARQUITETURA.md # Visão arquitetural incluindo padrões consolidados
│ ├── PADROES_CODIGO.md # Convenções e padrões de componentes
│ ├── API_SERVICES.md # APIs dos services
│ ├── CSS_ARCHITECTURE.md # Arquitetura CSS com AlertList patterns
│ └── HOOKS.md # Hooks customizados
├── server/ # Bot do Telegram (Node + tsx)
│ └── bot/
├── api/ # API Serverless (Vercel)
├── .migrations/ # Migrações SQL
├── .env.example # Template de variáveis de ambiente
├── SETUP.md # Guia de configuração
└── README.md # Este arquivo
🆕 = Componentes consolidados na Fase 3.6 (Component Consolidation Wave)
O projeto utiliza uma suíte de testes unitários moderna para garantir a confiabilidade das regras de negócio:
- Framework: Vitest (Velocidade e compatibilidade com Vite)
- Library: React Testing Library
- Cobertura: Services (API/Lógica de Negócio) e Componentes Críticos.
- Type-safety: 100% TypeScript com typecheck limpo no web (
tsc --noEmit) e strict islands nos módulos clínicos (dose, estoque, adesão, schemas, notificações) — erros de shape/null pegos em compile-time.
npm run dev # Servidor de desenvolvimento
npm run build # Build de produção
npm run preview # Preview do build
npm run lint # Linter ESLint
npm test # Executa a suíte de testes unitários (Vitest)
npm run bot # Inicia o bot do Telegram localmente (para desenvolvimento)- Conecte seu repositório GitHub ao Vercel
- Configure as variáveis de ambiente no dashboard do Vercel
- Deploy automático a cada push na branch
main
Veja instruções detalhadas em SETUP.md
Este é um projeto piloto em desenvolvimento. Sugestões e feedback são bem-vindos!
GNU Affero General Public License v3.0 ou posterior (AGPL-3.0-or-later) — veja LICENSE para detalhes.
O código é livre para usar, estudar, modificar e redistribuir. Se você hospedar uma versão modificada do Dosiq como serviço, a AGPL exige que o código dessa versão também seja disponibilizado aos usuários. Para licenciamento comercial alternativo (uso em produto fechado), entre em contato: contact@dosiq.app.
Contribuições externas: ao abrir um PR, você concorda em licenciar sua contribuição sob a AGPL-3.0-or-later e concede ao mantenedor o direito de relicenciá-la em ofertas comerciais do Dosiq (dual licensing).
Desenvolvido com ❤️ usando Claude Code & Google Antigravity
Para dúvidas ou problemas:
- Verifique a documentação em SETUP.md
- Abra uma issue no GitHub
- Entre em contato com o desenvolvedor
F4.1: Hash Router & Deep Linking
- Implementação de hash-based routing para navegação SPA
- 9 rotas completas:
#/dashboard,#/medicamentos,#/medicamento/:id,#/estoque,#/historico,#/historico/:periodo,#/protocolos,#/perfil,#/onboarding - Deep links funcionam a partir do Telegram
- Suporte a histórico do navegador (voltar/avançar)
F4.2: PWA Infrastructure
- Configuração completa do vite-plugin-pwa
- Manifest.json com ícones em 8 tamanhos
- Service Worker com Workbox strategies
- Suporte a instalação em Android (Chrome) e iOS (Safari)
- Lighthouse PWA score >= 90
F4.3: Push Notifications
- Sistema de notificações push com VAPID
- 3 tipos: lembretes de dose, alertas de atraso, estoque baixo
- API endpoints:
/api/push-subscribe,/api/push-send - Componente
PushPermissionpara gerenciamento de permissões - Hook
usePushSubscriptionpara controle de inscrições - LGPD compliant com RLS policies
F4.4: Analytics PWA Integration
- Tracking de eventos PWA (instalação, push opt-in, sessões offline)
- Privacy-first: sem PII, dados em localStorage apenas
- 7 novos eventos:
pwa_installed,push_opted_in/out,offline_session, etc.
F4.5: Bot Standardization
- Utilities
messageFormatter.tseerrorHandler.ts - 49 testes unitários para bot
- MarkdownV2 escaping centralizado
-
30% redução de código duplicado
F4.6: Feature Organization
- Nova estrutura
src/features/com 5 domínios - Pasta
src/shared/para recursos compartilhados - Path aliases configurados no Vite:
@,@features/,@shared/,@dashboard/, etc. - 150+ arquivos migrados sem breaking changes
- Total de testes: 1520+ (incluindo testes críticos, smoke e componentes)
- Cobertura Phase 4: 100% dos novos features
- Bundle size: 762KB (gzipped: 219KB)
- Build time: ~9.5s
- ✅ Corrigido: Bot agora funciona com múltiplos usuários (removido MOCK_USER_ID)
- ✅ Corrigido: Cron jobs notificam todos os usuários com Telegram vinculado
- ✅ Adicionado: Sistema de logs estruturados (ERROR → TRACE)
- ✅ Adicionado: Health checks via comando
/health - ✅ Adicionado: Reconexão automática em erros de rede
- ✅ Adicionado: Validação de token do Telegram na inicialização
- ✅ Melhorado: Tratamento de erros nos comandos do bot
- ✅ Melhorado: Cache de protocolos por usuário
- ✅ Configuração: Compatível com cron-job.org (GET requests com Authorization header)
- ✅ Autenticação segura via Supabase Auth
- ✅ Isolamento de dados com RLS
- ✅ Integração Telegram 2.0 com tokens temporários
Versão: 4.15.4 (040: monorepo 100% TypeScript) Última atualização: 09 Julho 2026