Gestor de notas ligero, seguro y responsive. PHP puro, sin base de datos y con diseño moderno inspirado en Apple Notes.
- Ligero y Modular: HTML5 semántico, CSS puro y JavaScript moderno separados limpiamente, sin frameworks ni dependencias pesadas.
- Diseño Apple Notes: Interfaz elegante en modo oscuro con acentos dorados, tres columnas responsivas (carpetas, listado y editor).
- Notas Protegidas con Contraseña: Bloqueo individual de notas mediante bcrypt, con identificación visual en tarjetas, filtros dedicados y bloqueo rápido.
- 6 Temas visuales: Obsidian (Apple Dark), Arctic, Forest, Midnight, Rosewood y Sand.
- Sin base de datos: Todo se guarda localmente en el servidor en archivos JSON y texto plano.
- Modo offline (PWA): Service Worker con estrategia network-first para sincronización instantánea y funcionamiento sin conexión.
- Markdown & Checklists: Editor interactivo con soporte Markdown, formato rápido, listas de tareas y vista previa.
- Papelera de reciclaje: Recuperación de notas borradas o eliminación permanente.
- Subida de imágenes: Arrastra o selecciona imágenes para integrarlas en tus notas.
- Carpetas & Etiquetas: Organiza tus notas en carpetas personalizadas y filtra por etiquetas
#tags. - Buscador global: Búsqueda en tiempo real por título y contenido, protegido contra autocompletado de contraseñas.
- Copia de seguridad: Exporta e importa tus notas en formato JSON con un solo clic.
- Responsive: Experiencia fluida en móvil, tablet y escritorio con menú desplegable.
- Nginx (o Apache)
- PHP 8.0+ con php-fpm
- Módulos PHP:
json,session,fileinfo(incluidos habitualmente)
# Crear directorio web
sudo mkdir -p /var/www/notevault
# Copiar archivos del proyecto
sudo cp index.html app.css app.js api.php sw.js manifest.json MaterialSymbolsOutlined.ttf /var/www/notevault/
# Crear directorios de datos y subidas con permisos correctos
sudo mkdir -p /var/www/notevault/data /var/www/notevault/uploads
sudo chown -R www-data:www-data /var/www/notevault/data /var/www/notevault/uploads
sudo chmod 700 /var/www/notevault/data /var/www/notevault/uploads# Copiar configuración
sudo cp nginx.conf /etc/nginx/sites-available/notevault
# Editar: ajustar server_name y root
sudo nano /etc/nginx/sites-available/notevault
# Activar sitio
sudo ln -s /etc/nginx/sites-available/notevault /etc/nginx/sites-enabled/
# Verificar sintaxis y recargar
sudo nginx -t
sudo systemctl reload nginxsudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d notas.tudominio.comAbre https://notas.tudominio.com en tu navegador y crea tu cuenta.
notevault/
├── index.html # Estructura base de la aplicación (SPA)
├── app.css # Sistema de diseño y temas visuales (Vanilla CSS)
├── app.js # Lógica del cliente, renderizado reactivo y eventos
├── api.php # Backend API REST (PHP puro)
├── sw.js # Service Worker (PWA, caché offline network-first)
├── manifest.json # Manifiesto de la aplicación web instalable (PWA)
├── MaterialSymbolsOutlined.ttf # Fuente local de iconos Material Symbols
├── nginx.conf # Configuración Nginx optimizada con seguridad y SPA
├── Dockerfile # Definición de contenedor para despliegue
├── docker-compose.yml # Orquestación con Docker Compose
├── README.md # Documentación del proyecto
├── uploads/ # ← Imágenes subidas por los usuarios
└── data/ # ← Almacenamiento seguro (creado automáticamente)
├── users.json # Credenciales de usuarios (hashed con bcrypt)
└── users/
└── <usuario>/
├── notes.json # Metadatos, estado y títulos de las notas
├── folders.json # Carpetas personalizadas
├── trash.json # Notas en la papelera
└── txt/ # Contenido de notas en texto plano
├── <id_nota>.txt
└── ...
- Contraseñas principales: Hasheadas con
bcrypt(cost 12) y regeneración de sesión (session_regenerate_id). - Notas con contraseña: Bloqueo individual cifrado por contraseña independiente con borrado automático de contenido no autorizado del payload del servidor.
- Protección contra autofill: Aislamiento de campos de búsqueda y contraseña para evitar que gestores de contraseñas inyecten credenciales en el buscador.
- Directorio
/data/restringido: Acceso denegado a nivel de servidor web (403 Forbidden). - Protección contra fuerza bruta: Retardo pseudoaleatorio en autenticación fallida.
- Headers HTTP seguros:
X-Frame-Options,X-Content-Type-Options: nosniff,Referrer-Policy. - Sanitización estricta: Limpieza de rutas de archivos y nombres de usuario para prevenir path traversal.
| Método | Endpoint | Descripción |
|---|---|---|
| POST | api.php?action=register |
Registro de nuevo usuario |
| POST | api.php?action=login |
Inicio de sesión |
| GET | api.php?action=logout |
Cierre de sesión |
| GET | api.php?action=session |
Estado de la sesión actual |
| GET | api.php?action=status |
Estado del servicio y registro |
| GET | api.php?action=notes |
Listar notas del usuario |
| POST | api.php?action=notes |
Crear una nueva nota |
| PUT | api.php?action=notes |
Actualizar contenido o metadatos de una nota |
| DELETE | api.php?action=notes&id=X |
Mover nota a la papelera |
| POST | api.php?action=lock_note |
Establecer contraseña en una nota |
| POST | api.php?action=unlock_note |
Desbloquear nota con contraseña |
| POST | api.php?action=relock_note |
Bloquear nota en la sesión activa |
| POST | api.php?action=remove_lock |
Quitar la contraseña de una nota |
| GET | api.php?action=folders |
Listar carpetas |
| POST | api.php?action=folders |
Crear carpeta personalizada |
| DELETE | api.php?action=folders&id=X |
Eliminar carpeta |
| GET | api.php?action=trash |
Listar notas en la papelera |
| POST | api.php?action=restore |
Restaurar nota desde la papelera |
| DELETE | api.php?action=trash_delete&id=X |
Eliminar nota definitivamente |
| DELETE | api.php?action=empty_trash |
Vaciar papelera por completo |
| POST | api.php?action=upload |
Subida de imágenes adjuntas |
| POST | api.php?action=import |
Importar notas y carpetas desde JSON |
git clone https://github.com/ernestoacostame/notevault.git
cd notevaultEdita nginx.conf si deseas cambiar el dominio o la configuración predeterminada:
nano nginx.confdocker compose up -d- Para ver los registros en tiempo real:
docker compose logs -fAbre tu navegador en http://localhost:8080 (o la IP de tu servidor en el puerto 8080).