Skip to content
ernestoacostamePublic

About

Gestor de notas ligero, seguro y responsive. PHP puro, sin base de datos.

Resources

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

NoteVault 📝

Gestor de notas ligero, seguro y responsive. PHP puro, sin base de datos y con diseño moderno inspirado en Apple Notes.

Características

  • 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.

Instalación Rápida

1. Requisitos

  • Nginx (o Apache)
  • PHP 8.0+ con php-fpm
  • Módulos PHP: json, session, fileinfo (incluidos habitualmente)

2. Copiar archivos

# 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

3. Configurar Nginx

# 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 nginx

4. HTTPS (Recomendado)

sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d notas.tudominio.com

5. ¡Listo!

Abre https://notas.tudominio.com en tu navegador y crea tu cuenta.


Estructura de Archivos

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
                └── ...

Seguridad

  • 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.

API Endpoints

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

Instalación vía Docker Compose

1. Clonar el repositorio:

git clone https://github.com/ernestoacostame/notevault.git
cd notevault

2. Configuración:

Edita nginx.conf si deseas cambiar el dominio o la configuración predeterminada:

nano nginx.conf

3. Iniciar contenedores:

docker compose up -d
  • Para ver los registros en tiempo real:
docker compose logs -f

4. Acceso:

Abre tu navegador en http://localhost:8080 (o la IP de tu servidor en el puerto 8080).

About

Gestor de notas ligero, seguro y responsive. PHP puro, sin base de datos.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages