App avançado de leitura com sistema de anotações offline-first
Arquitetura robusta para leitura inteligente, anotações categorizadas e sincronização offline
| 🔄 | Offline-First | Sistema robusto de sincronização com fila de operações pendentes |
| 📝 | Anotações Avançadas | Categorização, cores, posições e busca inteligente |
| 🏠 | Arquitetura Moderna | Expo Router, Context API e gerenciamento de estado avançado |
| 🔐 | Autenticação Segura | Supabase Auth com RLS e JWT tokens |
| 📈 | Performance | Inicialização otimizada e gerenciamento de memória |
| 🛠️ | Developer Experience | TypeScript, validação de schema e debug tools |
Nota: Screenshots e demo em vídeo serão adicionados em breve!
Noxus é um aplicativo de leitura mobile desenvolvido com React Native e Expo, que permite aos usuários ler livros, fazer anotações e gerenciar favoritos. O aplicativo possui recursos de funcionamento offline, sincronização com o backend Supabase, e fluxos de autenticação.
📱 React Native - Framework mobile multiplataforma
🛣️ Expo Router - Roteamento baseado em arquivos
🔷 TypeScript - Tipagem estática e segurança
🧩 Context API - Gerenciamento de estado reativo
💫 Expo - Plataforma de desenvolvimento
🔋 Supabase - Backend-as-a-Service
🔐 Supabase Auth - Autenticação JWT
💾 PostgreSQL - Banco relacional
📏 AsyncStorage - Persistência local
🌐 NetInfo - Detecção de conectividade
📋 AsyncStorage Queue - Fila de operações pendentes
🔄 Auto Sync - Sincronização automática
🔌 Offline Detection - Monitoramento de conectividade
📦 Data Persistence - Armazenamento local robusto
🧩 Schema Validation - Validação de banco de dados
🐛 Debug Tools - Ferramentas de debug
📄 Migration Scripts - Scripts de migração SQL
📊 Performance Monitor - Monitoramento de performance
project/
├── assets/
│ └── images/
├── src/
│ ├── app/ # Rotas e telas do Expo Router
│ │ ├── (auth)/ # Autenticação (login/registro)
│ │ ├── (tabs)/ # Navegação principal por abas
│ │ ├── reader/ # Tela de leitura
│ │ ├── annotations/ # Gerenciamento de anotações
│ │ └── _layout.tsx # Layout principal da aplicação
│ ├── components/ # Componentes reutilizáveis
│ ├── lib/ # Contextos e serviços
│ │ ├── AnnotationsContext.tsx # Contexto de anotações
│ │ ├── FavoritesContext.tsx # Contexto de favoritos
│ │ └── supabase.ts # Cliente Supabase
│ └── utils/ # Utilitários
│ └── checkDbStructure.ts # Verificação do esquema do banco de dados
├── supabase/ # Configurações e migrações do Supabase
│ └── migrations/ # Scripts SQL para migrações
├── .env # Variáveis de ambiente
├── app.json # Configuração do Expo
└── tsconfig.json # Configuração do TypeScript
- ✓ Login/registro com email e senha
- ✓ Sessão persistente com Supabase Auth
- ✓ Recuperação de senha
- ✓ Logout seguro
- ✓ CRUD Completo - Criar, ler, atualizar e deletar anotações
- ✓ Categorização - Importante, Dúvida, Revisão, Ideia, etc.
- ✓ Sistema de Cores - Organização visual por cores
- ✓ Posições Precisas - Anotações vinculadas a posições específicas
- ✓ Busca e Filtros - Encontre anotações por categoria ou conteúdo
- ✓ Export/Import - Backup e restauração de anotações
- ✓ Marcar/desmarcar livros favoritos
- ✓ Lista organizada de favoritos
- ✓ Acesso rápido aos livros preferidos
- ✓ Sincronização entre dispositivos
- ✓ Interface Intuitiva - Leitura por capítulos
- ✓ Multi-formato - Ebooks, light novels, mangás
- ✓ Navegação Rápida - Entre capítulos e livros
- ✓ Modo Escuro/Claro - Conforto visual
- ✓ Operações Offline - CRUD completo sem internet
- ✓ Fila de Sincronização - Operações pendentes organizadas
- ✓ Auto-Sync - Sincronização automática ao conectar
- ✓ Conflict Resolution - Resolução inteligente de conflitos
- ✓ Status Indicators - Indicadores visuais de status de sync
# Clone o repositório
git clone https://github.com/ademisson-Auto/Noxus.git
cd Noxus
# Instale as dependências
npm install
# Configure as variáveis de ambiente
cp .env.example .env
# Edite o .env com suas credenciais do Supabase
# Inicie o projeto
npx expo start- Node.js 18+
- npm ou yarn
- Expo CLI global:
npm install -g @expo/cli - Conta no Supabase (gratuita)
- Expo Go app no seu dispositivo (para testes)
# Executar no Android
npx expo run:android
# Executar no iOS
npx expo run:ios
# Executar na Web
npx expo start --web
# Limpar cache
npx expo start --clearEste contexto gerencia todas as operações relacionadas a anotações, incluindo:
-
Estado:
annotations: Lista de anotações carregadasisLoading: Indicador de operações em andamentoisOnline: Status de conexão do dispositivohasPendingSync: Se existem operações pendentes de sincronização
-
Métodos:
getBookAnnotations(bookId): Busca todas as anotações de um livrogetChapterAnnotations(chapterId): Busca anotações de um capítulo específicoaddAnnotation(bookId, chapterId, content, position, color, category): Adiciona uma nova anotaçãoupdateAnnotation(id, content, color, category): Atualiza uma anotação existentedeleteAnnotation(id): Remove uma anotaçãogetAnnotationsByCategory(bookId, category): Filtra anotações por categoriaforceSync(): Força a sincronização de operações pendentes
-
Sistema de Sincronização:
- Fila gerenciada via AsyncStorage usando
PENDING_ANNOTATIONS_KEY - Três tipos de operações pendentes:
add,updateedelete
- Fila gerenciada via AsyncStorage usando
-
Inicialização Segura:
- Sistema de atrasos controlados para evitar erros de UIManager
- Flags de montagem para evitar operações em componentes desmontados
Gerencia os livros favoritos do usuário, incluindo:
- Adicionar/remover favoritos
- Verificação de status de favorito
- Carregamento de livros marcados como favoritos
A integração com o Supabase inclui:
-
Tabelas:
annotations: Armazena anotações dos usuáriosbooks: Informações sobre livrosauth.users: Gerenciamento de usuários
-
Validação de Esquema: O utilitário
checkDbStructure.tsverifica se o banco de dados está configurado corretamente:- Verifica a existência e estrutura da tabela
annotations - Valida tipos de dados e constraints
- Fornece sugestões SQL para correções
- Verifica a existência e estrutura da tabela
-
Segurança:
- RLS (Row Level Security) para proteção de dados
- Autenticação via token JWT
Este utilitário verifica a integridade da estrutura do banco de dados:
-
Funções:
checkAnnotationsTable(): Verifica a existência e estrutura da tabela annotationsvalidateAnnotationsTable(): Valida o esquema contra o esperadologDbStructureCheck(): Exibe informações de diagnóstico no consoleverifyAndSuggestFixes(): Sugere correções para problemas detectados
-
Esquema Esperado: Define o esquema esperado para a tabela annotations, incluindo tipos de dados e nullability para cada coluna:
id,user_id,book_id,chapter_id,content,position,color,category,created_at,updated_at
generateUUID(): Gera identificadores únicos para anotações offlinegetCurrentUser(): Obtém o usuário autenticado atual via SupabaseloadPendingAnnotations(): Carrega operações pendentes do AsyncStorage
O aplicativo implementa um processo de inicialização em fases para evitar erros com módulos nativos:
-
Fase de Splash Screen:
- Mantém a tela de splash por 500ms para garantir inicialização segura
- Usa
SplashScreen.preventAutoHideAsync()eSplashScreen.hideAsync()
-
Inicialização de Contextos:
- AnnotationsContext é inicializado com atraso de 300ms
- Verificação de conexão de rede após 500ms
- Carregamento de dados locais após 200ms
-
Verificação de Banco de Dados:
- Em modo de desenvolvimento, verifica a estrutura da tabela annotations
- Exibe relatório detalhado em caso de problemas
Define a configuração do aplicativo Expo, incluindo:
- Nome e versão do aplicativo
- Icones e splash screen
- Configurações específicas para Android e iOS
- Permissões necessárias (ex: INTERNET)
- Otimização de Renderização: Implementar
React.memo()para componentes que não precisam de re-renderização frequente - Virtualização: Usar
FlatListcom otimizações para listas grandes de anotações - Paginação: Implementar paginação para carregar anotações em lotes
- Sincronização Visual: Indicadores mais claros do status de sincronização
- Modo Offline Aprimorado: Ícones e feedbacks visuais para operações offline
- Animações: Adicionar transições suaves para melhorar a experiência
- Testes Automatizados: Implementar testes unitários, de integração e E2E
- Migração para Redux ou Recoil: Para gerenciamento de estado mais escalável
- Cache Inteligente: Implementar estratégias de cache mais sofisticadas
- Criptografia Local: Criptografar dados sensíveis no AsyncStorage
- Renovação de Token: Implementar refresh token para sessões mais seguras
- Validação de Entrada: Melhorar validação de dados em formulários
- Exportação de Anotações: Para PDF ou formatos de texto
- Compartilhamento: Permitir compartilhar anotações com outros usuários
- Pesquisa Avançada: Busca em anotações com filtros avançados
O projeto implementa soluções para o erro "Attempt to invoke interface method 'void abi49_0_0.expo.modules.core.interfaces.services.UIManager.registerLifecycleEventListener'" através de:
- Inicialização sequencial e retardada de componentes
- Sistema de proteção contra acessos em componentes desmontados
- Uso de flags de montagem e timers para garantir inicialização correta
Implementação de scripts de migração e validação para garantir consistência do banco de dados:
- Verificação das colunas e tipos esperados
- Sugestões de correção com scripts SQL automáticos
- Logs detalhados para diagnóstico
- 📸 Screenshots & Demo - Adicionar imagens e vídeo demonstrativo
- 📊 Dashboard de Analytics - Estatísticas de leitura e anotações
- 🔍 Busca Global - Busca avançada em todo o conteúdo
- 📄 Export Avançado - PDF, Markdown, Notion
- 🔔 Notificações - Lembretes de leitura e metas
- 🎙️ Notas de Voz - Anotações em áudio
- 🤖 IA Reading Assistant - Sugestões inteligentes de anotações
- 👥 Social Reading - Compartilhamento e discussões
- 🎨 Temas Personalizados - Interface totalmente customizável
- ☁️ Multi-device Sync - Sincronização em tempo real
- 📚 Library Management - Organização avançada de biblioteca
Contribuições são muito bem-vindas! Este projeto prioriza qualidade de código e experiência do desenvolvedor.
- Verifique se o bug já foi reportado nas Issues
- Crie uma nova issue com:
- Descrição detalhada do problema
- Passos para reproduzir
- Screenshots ou vídeos
- Logs relevantes
- Informações do dispositivo
- Abra uma issue com o label
enhancement - Descreva a funcionalidade proposta
- Explique o caso de uso
- Sugira implementação se possível
- Faça um fork do projeto
- Crie uma branch:
git checkout -b feature/nova-funcionalidade - Siga os padrões de código (TypeScript, ESLint)
- Implemente testes quando aplicável
- Commit com mensagens descritivas
- Push para a branch:
git push origin feature/nova-funcionalidade - Abra um Pull Request
- TypeScript: Tipagem forte obrigatória
- Padrões: Siga os padrões existentes do projeto
- Performance: Considere impacto na performance
- Offline-First: Mantenha compatibilidade offline
- Testes: Adicione testes para novas funcionalidades
Este projeto está licenciado sob a Licença MIT - veja o arquivo LICENSE para detalhes.
📖 Noxus - Leitura inteligente com anotações avançadas
Arquitetura offline-first para uma experiência de leitura superior
Desenvolvido com ❤️ por Ademisson
Se este projeto te inspirou, deixe uma ⭐!