Fenix Notes es una aplicación de notas ligeras, cifradas y organizadas por espacios de trabajo, pensada para guardar ideas y recordatorios de forma simple, rápida y 100% offline. Está construida con FastAPI y Uvicorn en el backend, plantillas Jinja2 e interactividad en el frontend con Alpine.js. Los datos viven en una base SQLite en memoria, que se serializa y se cifra con cryptography (AES-256-GCM + Scrypt), mientras que las sesiones se gestionan con cookies firmadas mediante itsdangerous.
## Funcionalidades principales
### Gestión de workspaces
- Espacios independientes: Creación, edición y eliminación de áreas de notas separadas (por ejemplo "Trabajo" y "Personal").
- Búsqueda rápida: Filtrado de workspaces por nombre desde el selector integrado.
- Organización dinámica: Reordenamiento de workspaces mediante Drag & Drop, con guardado automático al soltar.
### Notas
- Creación ágil: Campo de escritura fijo en la parte inferior con atajo Ctrl + Enter para enviar.
- Edición completa: Editor a pantalla completa para modificar el contenido, con confirmación antes de eliminar.
- Historial por fechas: Notas agrupadas por día, con carga progresiva al hacer scroll y botones para ir rápidamente arriba o abajo.
- Búsqueda avanzada: Filtros por texto, rangos predefinidos (hoy, ayer, esta semana, este mes), año o rango de fechas personalizado.
### Seguridad y experiencia de uso
- Cifrado en reposo: Toda la base de datos se cifra con AES-256-GCM. La clave se deriva de la contraseña maestra mediante Scrypt.
- Escritura atómica: Los cambios se guardan de forma segura en un archivo cifrado (data/notas.enc), evitando corrupción de datos.
- Bloqueo automático por inactividad: Tras 20 minutos sin actividad, la sesión expira y el vault se bloquea (se libera la clave y la base en memoria). El vault vive solo en memoria, por lo que al reiniciar el servidor es necesario volver a ingresar la contraseña maestra.
- Protección contra fuerza bruta: Tras 5 intentos fallidos desde la misma IP, el acceso se bloquea durante 5 minutos.
- Acceso concurrente seguro: Las operaciones sobre la base de datos están sincronizadas mediante un lock. Debe ejecutarse con un único worker.
- Tema claro / oscuro: Alternancia de tema con preferencia guardada en el navegador.
## Capturas de pantalla
A continuación, se muestran algunas imágenes de la aplicación en funcionamiento:
### Instalación del proyecto
1. Clonar el repositorio
git clone https://github.com/IsmaelHeredia/fenix-notes-fastapi-jinja2.git
cd fenix-notes-fastapi-jinja2
2. Crear y activar un entorno virtual
python -m venv venv
source venv/bin/activate
En Windows:
venv\Scripts\activate
3. Instalación de dependencias
pip install -r requirements.txt
4. Ejecución del proyecto en modo desarrollo
uvicorn main:app --reload
5. Ejecución en producción
uvicorn main:app --host 127.0.0.1 --port 8000
Una vez que el servicio esté activo, se podrá acceder desde la siguiente URL:
http://localhost:8000
6. Configuración del sistema
Al ingresar por primera vez, la aplicación solicitará crear una **contraseña maestra** (mínimo 12 caracteres). Esta contraseña se usa para cifrar todas las notas y **no existe forma de recuperarla** si se olvida.
Las notas se almacenan cifradas en:
data/notas.enc




















































