sábado, 12 de septiembre de 2026

[Python] Quiet Stream

Aplicación TUI (Terminal User Interface) para gestionar y reproducir streams de audio y videos, construida con Textual, SQLModel, SQLite, python-vlc, yt-dlp y httpx.

## Funciones principales

- Gestión de streams y videos: agregar, editar y eliminar entradas.
- Reproducción integrada: streams de audio (URL directa) y videos (YouTube y similares vía yt-dlp).
- Controles de reproducción: anterior, siguiente, detener y volumen.
- Búsqueda y filtros: por nombre y por categoría.
- Importar / exportar JSON: backup y carga de listas, con omisión automática de duplicados por nombre o link.
- Validación de enlaces: comprueba si los streams responden; permite detener el proceso, seleccionar cuáles eliminar y confirmar.
- Temas Gruvbox Light / Dark: se alternan con Ctrl+T y la preferencia se guarda entre sesiones.
- Interfaz responsive: tablas y menú se adaptan al tamaño de la terminal.
- Persistencia local: los datos se guardan en SQLite (`streams.db`).

## Capturas de pantalla


 
 
 




## Requisitos

- Python 3.8+
- VLC Media Player instalado en el sistema

## Instalación

1. Clonar el repositorio:
 

git clone https://github.com/IsmaelHeredia/quiet-stream-python.git

cd quiet-stream-python

2. Instalar dependencias:

pip install -r requirements.txt

3. Ejecutar:

   ```bash
   python main.py
   ```

## Importación y exportación (Formato JSON)

Los respaldos exportados utilizan una lista con la siguiente estructura por cada elemento, la cual también se requiere para importar datos:

[
  {
    "nombre": "Mi stream",
    "link": "https://ejemplo.com/stream.mp3",
    "categorias": "rock, radio",
    "tipo": "stream"
  },
  {
    "nombre": "Video de ejemplo",
    "link": "https://www.youtube.com/watch?v=...",
    "categorias": "musica",
    "tipo": "video"
  }
]

 Link del proyecto 

sábado, 5 de septiembre de 2026

[FastAPI + Jinja2] Fenix Downloader

Una aplicación web moderna y ligera para descargar y convertir contenido de YouTube, orientada a un uso local y sencillo. Permite gestionar canciones en MP3, videos en MP4, listas de reproducción completas, búsqueda directa por nombre y conversión de archivos locales, con progreso en tiempo real y control total de cancelación.

## Stack Tecnológico

| Capa | Tecnologías |
|------|-------------|
| Backend | FastAPI + Jinja2 |
| Frontend | HTMX + Tailwind CSS + JavaScript |
| Extracción y media | yt-dlp + FFmpeg |

---

## Funcionalidades Principales

### Descarga desde YouTube

 
* Links sueltos: Soporte para uno o varios URLs simultáneos (canciones o videos).
* Playlists: Lectura y descarga secuencial de listas completas (audio o video).
* Exportar playlist: Genera un archivo .txt con todos los links de una playlist, sin necesidad de descargar el contenido.
* Búsqueda integrada: Búsqueda directa por nombre de canción (obteniendo el primer resultado relevante).
* Calidad de video: Selección entre 720p, 1080p (recomendado) o máxima calidad (evitando formatos AV1 pesados cuando aplica).
* Audio en español: Preferencia automática de doblaje si YouTube lo ofrece.
* Subtítulos optimizados: Español (oficial o automático) con fallback a inglés.
* Cookies opcionales: Soporte para formato Netscape (data/cookies.txt o variables de entorno) para evitar restricciones de edad, rate limits o bloqueos por región.

### Conversión Local


* MP4 / Video / Audio a MP3: Conversión flexible indicando la ruta del archivo en disco, con nombre y carpeta de salida personalizados, acompañado de una barra de progreso impulsada por FFmpeg.

### Experiencia de Uso

 
* Interfaz dinámica (HTMX): Sin recargas de página completas; incluye consolas de logs y barras de progreso independientes por cada job.
* Cancelación cooperativa: Un único botón inteligente para iniciar y detener la descarga o conversión en curso.
* Tema Claro / Oscuro: Diseño elegante con acentos verdes estilo *Gruvbox*, patrones de fondo sutiles y formularios totalmente adaptados.
* Toasts y alertas sonoras: Notificaciones visuales y de audio al finalizar una tarea (éxito, error, parcial o cancelada), incluso con la pestaña en segundo plano.
Omitir duplicados: Si el archivo final (MP3/MP4) ya existe en el disco, la descarga se omite automáticamente.

---

## Capturas de Pantalla 

 


---

## Requisitos del Sistema

* Python: 3.10+ (se recomienda 3.11+)
* yt-dlp: Con soporte para extensiones (yt-dlp-ejs)
* Runtime de JavaScript (para YouTube moderno): Deno 2.3 o superior (o Node 22 o superior)
* Opcional: curl_cffi para simulación de cliente (impersonation y reducción de errores 403)
* FFmpeg y FFprobe: Disponibles en el PATH del sistema

---

## Instalación y Configuración

### 1. Clonar el repositorio


git clone https://github.com/IsmaelHeredia/fenix-downloader-fastapi-jinja2.git
cd fenix-downloader-fastapi-jinja2
 

 ### 2. Crear entorno virtual e instalar dependencias

python -m venv .venv
# En Linux/macOS:
source .venv/bin/activate
# En Windows (CMD/PowerShell):
# .venv\Scripts\activate

pip install -U pip
pip install -r requirements.txt
pip install -U "yt-dlp[default]" yt-dlp-ejs "curl_cffi>=0.10"


### 3. Instalar Deno (Recomendado para la extracción de YouTube)

 
curl -fsSL https://deno.land/install.sh | sh

(Reiniciá tu terminal y comprobá la instalación con `deno --version`).

### 4. Ejecutar en modo desarrollo

uvicorn app.main:app --reload --host 127.0.0.1 --port 8000

Abrí en tu navegador: http://127.0.0.1:8000

 

Link del proyecto  

martes, 1 de septiembre de 2026

[NextJS] Fenix Forge

Fenix Forge es una aplicación web de uso local diseñada para unir archivos MP3 y generar videos MP4 personalizados. Está desarrollada con Next.js 16 y Tailwind CSS, y realiza todo el procesamiento multimedia utilizando FFmpeg nativo de forma directa en tu computadora.

## Funcionalidades principales

* Combinador de audio: Permite seleccionar múltiples MP3, reordenarlos mediante drag & drop, preescuchar cualquier track antes de procesar, seguir la lectura con barras de progreso individuales y visualizar la línea de tiempo con tiempos acumulados. Incluye detección automática de compatibilidad para concatenar audio en segundos sin reencodear (con fallback seguro si los formatos difieren).
* Generador de video: Permite asignar una imagen de fondo por canción o utilizar una global para todo el proyecto. Incluye texto centrado personalizable (con color de fuente y borde configurables, o bien la opción de exportar sin texto) y vista previa en vivo antes del render.
* Tema Gruvbox: Soporte nativo para modo claro y oscuro.
* Notificaciones: Feedback sonoro y toast emergente al completar el renderizado, junto con el tiempo total de conversión en formato legible.
* Diseño responsive: Adaptable a móviles, tablets y escritorio, con un panel de vista previa fijo en pantallas grandes.

## Capturas de pantalla


 
 

## Desarrollo local

### 1. Requisitos previos


* Node.js 18 o superior.
* FFmpeg instalado y disponible en el PATH del sistema (ffmpeg -version).
* Una fuente TrueType (.ttf) disponible para superponer texto en los videos (ej. fonts-dejavu-core).

En sistemas Debian/Ubuntu podés instalar las dependencias con:

sudo apt install ffmpeg fonts-dejavu-core

### 2. Instalación

Cloná el repositorio e instalá las dependencias:

git clone https://github.com/IsmaelHeredia/fenix-forge-nextjs.git
cd fenix-forge-nextjs
npm install


### 3. Configuración

Creá el archivo de variables de entorno:

cp .env.example .env.local

Si ffmpeg no está en el PATH global o tu fuente se encuentra en una ruta personalizada, definí las variables en .env.local:

FFMPEG_PATH=/usr/bin/ffmpeg
FFMPEG_FONT_PATH=/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf


### 4. Ejecución

Iniciá el servidor de desarrollo:

npm run dev

Accedé a la aplicación en http://localhost:3000.

 

 Link del proyecto 

sábado, 15 de agosto de 2026

[Angular] Light Pomodoro

Light Pomodoro es una aplicación de temporizador Pomodoro con gestión de tareas, cuyo diseño y experiencia de usuario están inspirados en Pomofocus, construida en Angular y estilizada con TailwindCSS bajo la paleta Gruvbox Light. Todo el estado (tareas, configuración y progreso del temporizador) persiste localmente en el navegador, sin necesidad de backend ni base de datos.

## Funcionalidades principales

### Temporizador Pomodoro


- Tres modos de trabajo: Pomodoro, Descanso Corto y Descanso Largo, con cambio instantáneo entre ellos.
- Theming dinámico: Toda la interfaz se adapta automáticamente según el modo activo.
- Conteo real: El temporizador calcula el tiempo restante contra un timestamp real, por lo que no se desincroniza si se cierra o recarga la pestaña mientras corre.
- Transición automática: Al completar un pomodoro, la app avanza sola a Descanso Corto o Descanso Largo según el intervalo configurado, y viceversa.
- Notificaciones: Sonido y notificación del sistema operativo al finalizar cada ciclo, incluso con la pestaña en segundo plano.

### Gestión de tareas

- Control total: Creación, edición inline, marcado como completada y eliminación de tareas.
- Reordenamiento: Organización de tareas mediante Drag & Drop.
- Persistencia: Las tareas y su orden se mantienen guardadas en el navegador aunque se cierre la aplicación.

### Configuración

- Modal de ajustes: Duración personalizada (en minutos) de Pomodoro, Descanso Corto y Descanso Largo.
- Auto Inicio: Activación opcional de inicio automático para breaks y pomodoros.
- Intervalo de Descanso Largo: Configuración de cada cuántos pomodoros corresponde un descanso largo.
- Validación: Los campos numéricos solo aceptan enteros positivos.

## 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/light-pomodoro-angular.git
cd light-pomodoro-angular

 
2. Instalación de dependencias

npm install

 
3. Ejecución del proyecto en modo desarrollo

ng serve

Una vez iniciado, se podrá acceder desde la siguiente URL:

http://localhost:4200

 
4. Build de producción

ng build

### Pruebas E2E

El proyecto incluye tests end-to-end reales sobre la interfaz, cubriendo navegación entre modos, conteo del temporizador, CRUD de tareas, drag & drop, persistencia en `localStorage` y validación de configuración.

Para ejecutar los tests:

npm run test:e2e

También están disponibles los siguientes modos:

npm run test:e2e:ui
npm run test:e2e:headed

Link del proyecto  

miércoles, 22 de julio de 2026

[NextJS] Fenix Music

Fenix Music es una aplicación web full-stack pensada para gestionar tu biblioteca multimedia local. Está construida con Next.js 14 y estructurada bajo una arquitectura Domain-Driven Design (DDD), lo que permite mantener el código ordenado y escalable a medida que el proyecto crece.

Funcionalidades principales

Reproductor multimedia avanzado: Barra de control persistente para audio. Incluye visualización de ondas (waveform) para canciones, soporte para reproducción de videos locales, estaciones de radio, videos de YouTube y transmisiones de YouTube en vivo.

Listas personalizadas: Creación, edición y gestión completa de tus propias listas de reproducción.

Escaner inteligente: Sistema integrado para indexar automáticamente tu biblioteca local de música y videos, manteniendo todo organizado.

Biblioteca centralizada: Acceso rápido a todo tu contenido, con búsqueda ágil por artista o título.

Estructura del proyecto

Para mantener todo bajo control, se dividió la lógica en módulos dentro de `src/modules/`. Es una estructura clara donde cada pieza tiene su lugar:

src/modules/[modulo]/
├── application/     # Casos de uso (la lógica de la app)
├── domain/          # Entidades y reglas de negocio
└── infrastructure/  # Implementación técnica (Drizzle + SQLite)

 

Capturas de pantalla

 







Desarrollo local
 

1. Requisitos

* Node.js 18+
 

2. Instalación

Clona el repositorio, instala las dependencias y prepara las variables de entorno:

git clone https://github.com/IsmaelHeredia/fenix-music-nextjs.git
cd fenix-music-nextjs
npm install
cp .env.example .env.local

 
3. Configuración de la base de datos

Prepara la base de datos SQLite y ejecuta las migraciones necesarias:

npm run db:setup

 
4. Ejecución

Ejecuta la aplicación en modo desarrollo:

npm run dev

El proyecto va a estar disponible en http://localhost:3000.

 

 Link del proyecto 

miércoles, 20 de mayo de 2026

[NodeJS + VueJS] StreamCat

StreamCat es una aplicación SaaS full-stack dedicada al streaming de audio. El proyecto está estructurado de forma independiente en tres repositorios: documentación general, API backend y cliente frontend.

Stack Tecnológico

  • Backend: Node.js, Express, Prisma ORM.

  • Base de datos: PostgreSQL.

  • Frontend: Vue 3, Vite, Tailwind CSS, Pinia.

  • Servicios externos: Cloudinary (gestión de imágenes) y Resend (correos transaccionales).

Funcionalidades Principales

  • Autenticación y Roles: Registro, login con JWT, verificación por correo y recuperación de contraseña. Roles diferenciados para usuarios (USER) y administradores (ADMIN).

  • Reproductor de Audio: Navegación entre tracks, control de volumen, modos shuffle y repeat, junto con un visualizador de audio.

  • Gestión de Contenido (CRUD): Control de streams (creación, edición y borrado), administración global de géneros y subida de portadas mediante Cloudinary.

  • Filtros y Paginación: Buscador por nombre y filtrado por género musical con paginación procesada en el servidor.

  • Perfil: Modificación de datos de usuario, avatar y cambio de contraseña con cierre de sesión automático por seguridad.

  • Interfaz: Soporte nativo para modo claro y modo oscuro con persistencia.

Capturas de pantalla

 









 

Repositorios y Código Fuente

sábado, 31 de enero de 2026

[NextJS] Light Board

Light Board es una plataforma de gestión visual basada en metodologías Kanban, diseñada para organizar flujos de trabajo mediante una estructura jerárquica de espacios de trabajo, tableros y tarjetas interactivas.

## Funcionalidades principales

### Gestión de workspaces

- Espacios independientes: Creación, edición y eliminación de áreas de trabajo personalizadas.

- Personalización visual: Asignación de wallpapers únicos por workspace mediante una galería integrada.

- Organización dinámica: Reordenamiento global de workspaces mediante Drag & Drop.

### Tablero kanban dinámico

- Flujos de trabajo: Gestión de columnas con soporte para edición de títulos y eliminación en cascada de contenidos.

- Tarjetas: Control total sobre tareas (creación, edición de descripción y gestión de estados).

- Etiquetas: Sistema integrado directamente en la tarjeta que permite asignar etiquetas únicas por workspace, garantizando una organización coherente y aislada.

- Interactividad avanzada: Sistema de arrastre suave para reordenar columnas y desplazar tarjetas entre ellas de forma intuitiva.

## 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/nextjs-light-board.git
cd nextjs-light-board


2. Instalación de dependencias
 
npm install

3. Variables de entorno

Crea un archivo .env en la raíz del proyecto:

NODE_ENV=development
 
4. Inicializar la base de datos

Para crear la bd:
 
npm run generate
npm run migrate


5. Para ejecutar los seeds de prueba:

npm run seed

6. Ejecución del proyecto en modo desarrollo
 
npm run dev

7. Build de producción
 
npm run build
npm start


### Pruebas de integración

El proyecto incluye tests de integración reales sobre las rutas API.

Para ejecutar los tests:
 
npm test

### Uso con Docker

Para poner en marcha el servicio de NextJS usando Docker, se debe ejecutar el siguiente comando:
 
docker compose up -d --build

Una vez que el servicio esté activo, se podra acceder desde las siguiente URL:
 
http://localhost:3000

 Link del proyecto 

viernes, 2 de enero de 2026

[NextJS] Light Notes

Light Notes es una aplicación web minimalista para la gestión de workspaces y notas, construida con Next.js, persistencia local con SQLite, Drizzle ORM, y pruebas de integración usando Vitest.

El proyecto está pensado para ser simple, rápido, sin depender de servicios externos.

Funcionalidades principales

Gestión de Workspaces

- Crear workspaces

- Listar todos los workspaces

- Actualizar el nombre de un workspace

- Eliminar workspaces
 

Gestión de Notas

- Crear notas asociadas a un workspace

- Listar notas por workspace

- Actualizar el contenido de una nota

- Eliminar notas
 

Buscador

El buscador permite filtrar las notas dentro del workspace activo, combinando distintos criterios de texto y fecha.

Los filtros disponibles son:


Búsqueda por texto

- Filtra las notas cuyo contenido incluya el texto ingresado.
 

Filtros rápidos por fecha

- Hoy: muestra notas creadas en el día actual.

- Ayer: muestra notas creadas el día anterior.

- Esta semana: muestra notas desde el inicio de la semana hasta hoy.

- Este mes: muestra notas del mes y año actuales.

- Los filtros rápidos son excluyentes entre sí.
 

Filtro por año

- Permite mostrar solo notas creadas en un año específico.

- Puede combinarse con otros filtros.
 

Rango de fechas personalizado

- Desde: fecha mínima de creación de la nota.

- Hasta: fecha máxima de creación de la nota.
 

Combinación de filtros

- Los filtros pueden combinarse (por ejemplo: texto + mes, o texto + rango de fechas).

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/nextjs-light-notes.git
cd light-notes

 
2. Instalación de dependencias

npm install
 

3. Variables de entorno

Crea un archivo .env en la raíz del proyecto:

NODE_ENV=development

 
4. Inicializar la base de datos

Para crear la bd:

npm run generate
npm run migrate

 
5. Para ejecutar los seeds de prueba:

npm run seed

 
6. Ejecución del proyecto en modo desarrollo

npm run dev

 
7. Build de producción

npm run build
npm start

 

Pruebas de integración

El proyecto incluye tests de integración reales sobre las rutas API.

Para ejecutar los tests:

npm test

Uso con Docker

Para poner en marcha el servicio de NextJS usando Docker, se debe ejecutar el siguiente comando:

docker compose up -d --build

Una vez que el servicio esté activo, se podra acceder desde las siguiente URL:

http://localhost:3000


viernes, 7 de noviembre de 2025

[NestJS + Angular] Game Library

Este proyecto es un sistema de gestión de juegos, construido con NestJS para el backend, Angular (integrado con Material Design) para el frontend, y una base de datos PostgreSQL.

## Funcionalidades principales

- Autenticación segura: Autenticación obligatoria basada en JWT con opciones para actualizar el perfil del usuario (nombre de usuario, contraseña y foto de perfil).

- Gestión integral de géneros: Operaciones CRUD completas (Crear, Leer, Actualizar, Eliminar) para géneros.

- Gestión avanzada de juegos:

    - Operaciones CRUD completas para juegos.

    - Motor de Búsqueda y Paginación: Búsqueda eficiente por nombre y géneros.

    - Filtros Persistentes: Utilización de Angular Signals para mantener los filtros de búsqueda activos (incluyendo la opción de favoritos) mientras el usuario navega por la aplicación, mejorando la coherencia y la usabilidad.

    - Gráficos Interactivos: Visualización clara de la distribución de juegos, mostrando de forma gráfica cuántos juegos hay por cada género.

## Capturas de pantalla

A continuación, se muestran algunas imágenes del sistema en funcionamiento:

 
 
 
 
 
 

## Instalación del proyecto

### Backend (NestJS)


Sigue estos pasos para configurar el backend de NestJS:

1. Configuración del entorno:

- Renombra el archivo .env.example a .env.

- Configura los parámetros de conexión a tu base de datos PostgreSQL dentro del archivo .env.

2. Instalación de dependencias:

- Ejecuta el siguiente comando para instalar todas las dependencias del proyecto:

npm install --legacy-peer-deps

3. Configuración de JWT:

Dentro del archivo .env, añade o verifica las siguientes variables necesarias para la autenticación:

JWT_SECRET=supersecret
JWT_EXPIRES_IN=1d


4. Configuración de la base de datos:

- Ejecuta las migraciones para crear las tablas en tu base de datos :

npm run migration:run:dev

- Carga los datos iniciales en la base de datos :

npm run seed:dev

5. Ejecución del Servidor

Una vez instaladas las dependencias, inicia la aplicación en modo desarrollo ejecutando:

npm run start:dev

### Frontend (Angular)

1. Instalación de Dependencias

- Abre tu terminal en el directorio raíz del proyecto frontend.

- Ejecuta el siguiente comando para instalar todas las dependencias de Angular:

npm install

2. Ejecución del Servidor

Una vez instaladas las dependencias, inicia la aplicación en modo desarrollo ejecutando:

ng serve

## Pruebas unitarias

#### Backend (NestJS)


Para ejecutar las pruebas unitarias de NestJS (usando Jest), ejecuta el siguiente comando:

npm run test:e2e --verbose

#### Frontend (Angular)

Para ejecutar las pruebas unitarias de Angular (usando Karma y Jasmine):

Configuración de Headless Browser

Si ejecutas las pruebas en un entorno sin interfaz gráfica, es posible que necesites configurar la ruta del navegador. 

Por ejemplo, para Chromium:

export CHROME_BIN=$(which chromium)
 

Ejecución

Ejecuta todas las pruebas de los componentes y servicios de Angular:

ng test

### Uso con Docker

Para poner en marcha los servicios de NestJS y Angular usando Docker, se deben seguir los siguientes pasos:

Configuración del entorno:

1. Renombra el archivo .env.example ubicado en la raíz del proyecto a .env.

2. Dentro del archivo .env que acabas de crear, establece la variable de entorno DOCKER_OP a 1. Esto es fundamental para que la aplicación se adapte a los servicios definidos en Docker Compose.

3. Iniciar servicios: Ejecuta el siguiente comando en tu terminal desde la raíz del proyecto para construir y levantar todos los servicios configurados:

docker compose up -d --build

Una vez que los servicios estén activos, se podran acceder desde las siguientes URLs:

Backend NestJS: http://localhost:7777

Frontend Angular: http://localhost:9991 

 Github 

[Python] Quiet Stream

Aplicación TUI (Terminal User Interface) para gestionar y reproducir streams de audio y videos, construida con Textual, SQLModel, SQLite, py...