Un bloc de notas moderno, elegante y seguro con cifrado de extremo a extremo (E2EE), organización avanzada y sincronización en la nube.
Para mantener la consistencia visual y un diseño limpio en cualquier pantalla, puedes visualizar la interfaz aquí:
![]() Vista Principal | ![]() Editor | ![]() Búsqueda y Filtros |
- Español (VE) - Traducción nativa completa.
- Português (BR) - Tradução nativa completa.
- Français (FR) - Traduction complète des sections légales.
- English (US/UK) - Default locale with complete support.
- Material Design 3 Expresivo: Una interfaz limpia, moderna y altamente responsiva que sigue las directrices oficiales de diseño de Material Desing 3 Expresive.
- Modo Oscuro / Claro Automático: Soporte completo para temas claros y oscuros respetando la configuración del sistema, adaptando los colores de las notas para una lectura sumamente cómoda.
- Vista en Rejilla y Lista: Alternancia fluida entre visualización en cuadrícula o lista compacta (preferencia guardada automáticamente).
- Settings Hub: Pantalla central de configuración con secciones organizadas: Apariencia, Idioma, Privacidad y Seguridad, Almacenamiento y Datos, Información.
- Contraseña Maestra: Protege tus notas confidenciales con una contraseña maestra única de alta seguridad.
- Algoritmo de Grado Militar (AES-256): Las notas marcadas como cifradas se encriptan de forma segura utilizando derivación de claves mediante PBKDF2, generando un Salt y un Vector de Inicialización (IV) aleatorios por cada nota.
- Privacidad Absoluta: Los datos cifrados se almacenan localmente en la base de datos de Room. Sin la contraseña maestra, es matemáticamente imposible descifrar o leer el contenido de las notas.
- Pantalla de Privacidad: Sección dedicada para configurar o eliminar la contraseña maestra con confirmación de seguridad.
- Editor WYSIWYG por Bloques: Editor fluido estilo Notion con bloques (texto, títulos H1–H4, listas, tablas, citas…) y formato enriquecido en línea (negrita, color, subíndice, superíndice, ecuaciones, enlaces…).
- Formato Limpio: Editor de texto fluido y minimalista con soporte para títulos y cuerpo de notas amplios.
- Asociación de Etiquetas: Permite asignar múltiples etiquetas personalizadas para categorizar las notas.
- Personalización de Fondo (Colores): Cambia el color de fondo de tus notas individuales utilizando una paleta pastel optimizada para legibilidad (Azul, Verde, Amarillo, Rosa, Púrpura, Naranja) o el color por defecto del sistema.
📖 Documentación completa del editor (bloques, formato y referencia técnica): docs/EDITOR.md
- Historial de Búsquedas Recientes: Guarda y gestiona de forma interactiva tus búsquedas previas con chips de sugerencias rápidas.
- Búsqueda en Tiempo Real: Busca instantáneamente dentro del título y contenido de tus notas (incluyendo notas cifradas si se ha desbloqueado la sesión).
- Filtros Dinámicos e Interactivos:
- ⭐ Favoritos: Filtra rápidamente para mostrar solo notas destacadas.
- 📦 Archivadas: Muestra u oculta notas archivadas para mantener tu espacio limpio.
- 🏷️ Etiquetas: Menú desplegable interactivo para filtrar notas por cualquier etiqueta existente.
- 🎨 Colores: Filtra notas de manera visual por su color de fondo específico.
- Sincronización con Google Drive: Vincula tu cuenta para realizar copias de seguridad automáticas y restaurar tus notas de forma segura en cualquier dispositivo.
- Múltiples Formatos de Exportación: Guarda tus notas localmente o compártelas en formatos estándar de la industria:
- Texto Plano (
.txt) - Markdown (
.md) - PDF de alta fidelidad
- HTML Web enriquecido
- Respaldo crudo JSON
- Texto Plano (
- Chat IA 100% Local: Conversa con un modelo de lenguaje directamente desde la app, sin que tus notas o mensajes lleguen a servicios en la nube. Función opcional, desactivada por defecto.
- Dos Backends Seleccionables:
- 📱 On-Device (llama.cpp): Chat basado en llama.cpp — inferencia nativa de modelos GGUF ejecutada en el propio dispositivo (arm64-v8a), sin conexión de red.
- 🖥️ Backend llama.cpp / Ollama (HTTP Local): Conexión configurable por URL a un servidor LLM en tu red local (Ollama, LM Studio). Ningún dato abandona tu LAN.
- Acciones de Escritura Inteligente: Generar texto, resumir, reescribir con estilos (formal, casual, poético, profesional), traducir, acortar, corregir gramática y explicar — sobre toda la nota o la selección actual.
- Contexto por Adjuntos: Adjunta otras notas o archivos de texto al chat como contexto adicional; se muestran como chips removibles antes de enviar el mensaje.
- Historial de Chats: Sesiones persistentes en Room con renombrado, fijado, borrado y exportación de conversaciones.
- Streaming e Inserción: Respuestas generadas token a token en tiempo real, con opción de insertar el resultado directamente en tu nota.
Secure Notes incluye una pantalla "Términos y Privacidad" accesible desde Ajustes > Legal y desde Acerca de > Enlaces Útiles.
- Autenticación: Google OAuth maneja la autenticación. La pantalla de consentimiento de Google rige los permisos de cuenta.
- Términos de Uso: La app se proporciona "tal cual". El usuario es responsable de su contraseña maestra.
- Privacidad: Sin contraseña maestra, es matemáticamente imposible descifrar las notas.
La asistencia de IA es opcional y se ejecuta íntegramente en tu dispositivo o en tu red local, según el backend seleccionado. Declaración completa en la app (Ajustes > Legal):
- Funciones de IA OPCIONALES, desactivadas por defecto y con consentimiento explícito.
- Backend On-Device (llama.cpp): el modelo se ejecuta en el dispositivo; no requiere conexión de red.
- Backend Ollama / LM Studio: conexión HTTP a un servidor LLM local; ningún dato sale de tu LAN.
- Nunca se envían datos a APIs en la nube ni a terceros, y nada se usa para entrenar modelos externos.
| Aspecto | Detalle |
|---|---|
| Cifrado | AES-256-GCM con autenticación integrada |
| Derivación de clave | PBKDF2 con HMAC-SHA256, 200,000 iteraciones |
| Sal e IV | Aleatorios por nota (SecureRandom) |
| Contraseña maestra | Nunca sale del dispositivo, solo en memoria durante la sesión |
| Backups cloud | Cifrados localmente antes de subir a Google Drive |
| Acceso de terceros | Imposible sin la contraseña maestra |
La integración con Google Drive es opcional y se usa exclusivamente para:
- Copia de seguridad en la carpeta AppData (inaccesible para el usuario).
- Autenticación OAuth 2.0 via Credential Manager.
- Cifrado client-side: los backups se cifran con tu contraseña maestra antes de transmitirse.
- Desconexión total: puedes revocar el acceso en cualquier momento desde Ajustes.
Pantalla dedicada en Ajustes > Legal > Licencias listando todas las dependencias principales:
| Librería | Licencia |
|---|---|
| Kotlin | Apache 2.0 |
| Jetpack Compose | Apache 2.0 |
| Material 3 | Apache 2.0 |
| Room | Apache 2.0 |
| OkHttp | Apache 2.0 |
| Retrofit | Apache 2.0 |
| Moshi | Apache 2.0 |
| Coil | Apache 2.0 |
| Firebase (Google) | Apache 2.0 |
| Kotlin Coroutines | Apache 2.0 |
| WorkManager | Apache 2.0 |
| Android Biometric | Apache 2.0 |
| llama.cpp | MIT |
| compose-markdown | Apache 2.0 |
| Robolectric | MIT |
| JUnit 4 | EPL 2.0 |
| visor-pdf | MIT - ESTRIN217 |
| App (MIT) | MIT — ESTRIN217 |
- Lenguaje: Kotlin
- UI: Jetpack Compose (Material Design 3 Expressive)
- Persistencia Local: Room Database (SQLite con migraciones robustas)
- Seguridad: API de Criptografía de Android, PBKDF2 y AES-256
- IA Local: llama.cpp nativo (JNI/NDK, arm64-v8a) · OkHttp para backends HTTP locales (Ollama / LM Studio)
- Arquitectura: MVVM (Model-View-ViewModel) con flujos reactivos
StateFlow
This project is developed following industry‑standard practices to ensure maintainability, testability, and long‑term quality:
Shared Compose widgets (SettingsSectionTitle, SettingsCardGroup, SettingsSwitchTile, SettingsListTile) centralize repeated UI patterns. Rich‑text parsing and rendering logic lives in RichTextParser — a single source of truth for the custom tag system.
| Principle | How it's applied |
|---|---|
| SRP | ViewModels handle one screen; NoteDao owns DB access; EncryptionUtils owns crypto; Composables are pure UI. |
| OCP | New note formats or export types are added by extending parameters, not modifying existing functions. |
| LSP | DarkModeOption enum values are fully substitutable; BackupViewModel treats local and cloud backups uniformly. |
| ISP | Fine‑grained composable parameters instead of wide interfaces. UI callbacks use single‑method Kotlin lambdas. |
| DIP | Dependencies injected via constructor (no static singletons). GoogleDriveSyncService, NoteDao, and EncryptionUtils are test‑friendly abstractions. |
- Functions ≤ 20 lines with single responsibility.
- Intention‑revealing names (
encryptContent,toggleDarkMode,searchNotes). - Guard clauses replace deep nesting.
- Comments document why (edge cases, design trade‑offs), never what.
- Single‑module app with manual constructor DI — no framework overhead.
StateFlow+collectAsState()for reactive UI — no additional reactive libraries.- Room as the sole persistence layer — no separate cache, no ORM.
- No repository abstraction until a second data source is introduced.
- Interfaces declared only when substitution (testing, alternate impl) is actually required.
- No feature flags, dead code, or speculative navigation routes.
- All async operations return sealed
UiState(Loading / Success / Error). - Input validated at the UI boundary; encryption failures surfaced as explicit
EncryptionResulttypes. - No silent exception swallowing — every
catcheither logs or re‑wraps. - Room I/O and file operations run on
Dispatchers.IO; crypto failures never crash the UI.
Este proyecto está licenciado bajo la Licencia MIT. Consulta el archivo LICENSE para obtener más detalles.
Desarrollado con pasión por ESTRIN217.
Hecho con ❤️ en Venezuela.


