Skip to content

Sergio-Bustos/NoteFlow

Repository files navigation

NoteFlow: Bloc de notas

Logo NoteFlow     

Sistema web de gestión de notas personales — Proyecto SENA

Python Flask Jinja2 PostgreSQL Supabase Docker React Vite JavaScript Fetch API Web Audio API Canvas API MediaRecorder Google OAuth Railway GitHub Actions HTML5 CSS3


📖 ¿Qué es NoteFlow?

NoteFlow es una aplicación web de gestión de notas personales que permite crear, organizar y personalizar notas en múltiples formatos: texto, imágenes, audios, videos y dibujos. Los usuarios pueden agruparlas en carpetas, asignarles etiquetas y elegir entre modo claro u oscuro según sus preferencias.

Proyecto desarrollado como evidencia de aprendizaje del Técnico en Programación de Software en el SENA, integrando conocimientos de frontend, backend y base de datos bajo la metodología SCRUM.


👥 Equipo de desarrollo

Nombre Rol
Javier Steven Solís Ruiz Desarrollador
Johan Sebastian Jojoa Meneses Desarrollador
Juan Diego Monsalve Martínez Desarrollador
Sergio Andrés Bustos Mondragón Líder funcional
Juan Alejandro Tamayo Manzano Documentador

🧩 Características principales

  • 🔐 Autenticación — Registro e inicio de sesión con validaciones de correo, alias y contraseña. Verificación por código al registrarse. Login con Google OAuth.
  • 🌙 Temas — Modo claro / oscuro personalizable por usuario.
  • 📝 Notas multiformat — Texto enriquecido, imágenes editables, audios con forma de onda, videos con reproductor, y dibujos en pizarra interactiva.
  • 🗂️ Organización — Carpetas, etiquetas personalizadas y categorías.
  • 🗑️ Papelera — Eliminación segura con restauración y vaciado automático a los 30 días.
  • 🔍 Búsqueda avanzada — Por notas o carpetas, con filtros dinámicos.
  • 🌐 API REST — Backend con Flask y comunicación vía Fetch API.
  • 📄 Documentación SCRUM — Product Backlog, Sprints e Historias de Usuario.

⚙️ Tecnologías utilizadas

🖥️ Frontend

Tecnología Uso
HTML5 Estructura semántica de todas las vistas
CSS3 Sistema de diseño propio con variables y animaciones
JavaScript ES6+ Lógica de cada editor, validaciones y eventos
React 18 Panel administrativo con componentes reutilizables (admin-react)
Vite 5 Empaquetado del panel administrativo React
Fetch API Comunicación asíncrona con el backend (sin recargar página)
Web Audio API Decodificación y visualización de forma de onda en el editor de audio
MediaRecorder API Grabación de audio y video desde el micrófono/cámara del usuario
Canvas API Editor de dibujo e imagen con trazos, filtros y transformaciones
Recharts Gráficos y estadísticas en el panel de administración
Lucide React Iconografía del panel React

⚙️ Backend

Tecnología Uso
Python 3.10+ Lenguaje principal del servidor
Flask 2.x Framework web — rutas, sesiones y API REST
Jinja2 Motor de plantillas HTML renderizadas desde el servidor
psycopg2 Driver Python para conectar y operar con PostgreSQL
Flask-Mail Envío de correos (verificación de cuenta, recuperación de contraseña)
Werkzeug Hashing seguro de contraseñas y utilidades HTTP
python-dotenv Carga de variables de entorno desde el archivo .env
APScheduler Tareas programadas en segundo plano (limpieza, seguridad)
Bleach Sanitización de HTML para prevenir XSS
Flask-Talisman Cabeceras de seguridad HTTP (CSP, HSTS)
Flask-Limiter Límite de peticiones para prevenir abusos
Flask-WTF Protección CSRF en formularios
google-api-python-client Envío de correos mediante Gmail API (OAuth, sin SMTP)

🔐 Autenticación

Tecnología Uso
Google OAuth 2.0 Inicio de sesión con cuenta Google
google-auth-oauthlib Manejo del flujo OAuth desde Flask
Códigos de verificación Validación del correo al registrarse (6 dígitos, expira en 15 min)
Tokens de reset Recuperación segura de contraseña con enlace de un solo uso

🗄️ Base de datos e infraestructura

Tecnología Uso
Supabase DB Base de datos relacional (PostgreSQL administrado en la nube con SSL)
Supabase Storage Almacenamiento seguro en la nube para audios, videos, fotos y dibujos
Supabase Dashboard Panel en la nube para la gestión de base de datos y almacenamiento
Docker Contenedorización del backend (Flask)
Docker Compose Orquestación de los contenedores locales de la aplicación
Railway Plataforma de despliegue en producción
GitHub Container Registry Registro de imágenes Docker publicadas automáticamente
GitHub Actions CI/CD — build y push de imagen Docker en cada push a main

🛠️ Herramientas y metodología

Herramienta Uso
Git / GitHub Control de versiones y colaboración del equipo
Pytest Pruebas automatizadas del backend (rutas, configuraciones, utilidades)
Draw.io Diagramas de casos de uso, flujo y base de datos
SCRUM Metodología ágil — Backlog, Sprints, Historias de Usuario
Word Documentación técnica y requerimientos

🚀 Instalación y puesta en marcha

Requisitos previos

1. Clonar el repositorio

git clone https://github.com/Sergio-Bustos/NoteFlow
cd NoteFlow

2. Obtener el archivo .env

El archivo .env contiene las credenciales de la base de datos y configuración del entorno. Solo los programadores oficiales del proyecto tienen acceso.

🔒 Acceso restringido: Descargar .env desde Google Drive

Coloca el archivo .env en la raíz del proyecto una vez descargado.

3. Levantar los servicios con Docker

Opción A — Build local (tradicional):

docker-compose up --build

Opción B — Imagen ya empaquetada (más rápido):

git clone https://github.com/Sergio-Bustos/NoteFlow
cd NoteFlow
docker pull ghcr.io/sergio-bustos/noteflow:latest
docker run -p 5000:5000 --env-file .env ghcr.io/sergio-bustos/noteflow

⚠️ El --env-file usa una ruta desde donde ejecutas el comando. Debes ejecutarlo desde la raíz del proyecto (donde está el .env). Sin el .env la imagen no podrá conectarse a la base de datos.

La imagen se actualiza automáticamente con cada push a main. Cualquiera de las dos opciones levanta Flask en el puerto 5000 conectándose a Supabase.

4. Acceder a la aplicación

Servicio URL
🖥️ Aplicativo principal local http://127.0.0.1:5000
🗄️ Consola de Supabase https://supabase.com/dashboard
🌐 Aplicativo principal web https://noteflow-production-a5ed.up.railway.app

5. Acceso en red local

Para que otros dispositivos en tu red puedan acceder, obtén tu IP local:

# Windows
ipconfig

# Linux / macOS
ip addr

Luego accede desde cualquier dispositivo con:

http://<tu-ip-local>:5000
# Ejemplo: http://192.168.1.100:5000

6. Verificar la base de datos

Asegúrate de que el contenedor de Flask esté corriendo correctamente y de que las credenciales de Supabase en el archivo .env estén bien configuradas. Puedes verificar el estado con:

docker ps
docker logs "noteflow-app"

📁 Estructura del proyecto

NoteFlow/
├── app.py                      # Aplicación principal Flask
├── Dockerfile                  # Build de Docker
├── docker-compose.yml          # Servicios Docker
├── requirements.txt            # Dependencias Python
├── .env                        # Variables de entorno (no incluido en el repo)
├── .gitignore                  # Ignorados de Git
│
├── admin-react/                # Panel admin en React (Vite)
│   ├── package.json
│   ├── vite.config.js
│   ├── index.html
│   └── src/
│       ├── main.jsx
│       ├── App.jsx
│       ├── index.css
│       └── components/
│           ├── AnalyticsReport.jsx
│           ├── DashboardStats.jsx
│           ├── NfModal.jsx
│           ├── SupportChat.jsx
│           ├── UserActivityModal.jsx
│           └── UsersManagement.jsx
│
├── init-db/
│   └── schema.sql              # Schema de la base de datos
│
├── scratch/
│   └── cleanup_storage.py      # Limpieza de archivos huérfanos en Supabase
│
├── Manuales-NoteFlow/          # Documentación PDF
│   ├── Manual de Instalacion - NoteFlow- V01.pdf
│   ├── Manual de Usuario - NoteFlow - V01.pdf
│   └── Manual Tecnico - NoteFlow - V01.pdf
│
├── static/
│   ├── admin-react/dist/       # Build del panel React
│   ├── css/                    # Hojas de estilo
│   ├── js/                     # Lógica de cada editor
│   ├── images/                 # Assets gráficos
│   ├── video/                  # Videos promocionales
│   ├── perfil/                 # Fotos de perfil
│   └── uploads/                # Archivos subidos por usuarios
│       ├── audios/
│       ├── dibujos/
│       ├── imagenes/
│       ├── textos/
│       ├── videos/
│       └── profile/
│
├── templates/                  # Plantillas HTML (Jinja2)
│   ├── partials/
│   │   ├── head_design.html
│   │   └── support_widget.html
│   ├── errors/
│   │   ├── 404.html
│   │   └── 500.html
│   ├── dashboard.html
│   ├── notas.html
│   ├── editoraudio.html
│   ├── editorvideo.html
│   ├── editorimagen.html
│   ├── editortexto.html
│   ├── editormixta.html
│   ├── dibujo.html
│   ├── papalera.html
│   ├── pasarela.html
│   ├── perfil.html
│   ├── planes.html
│   └── ... (+ otros)
│
└── tests/                      # Pruebas automatizadas
    ├── conftest.py
    ├── test_config.py
    ├── test_rutas.py
    └── test_utilidades.py

📜 Licencia

Proyecto académico desarrollado en el SENA — Servicio Nacional de Aprendizaje.
Uso educativo. Todos los derechos reservados por el equipo de desarrollo.


"NoteFlow... la solución de tu desorden digital, próximamente en la web..."
Hecho con 💜 por el equipo NoteFlow · SENA 2025

About

Repositorio del proyecto FullStack NoteFlow; gestor de notas web

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors