SwissKnife Docs
Entender SwissKnife

Arquitectura

Cómo se compone, sirve y despliega SwissKnife.

SwissKnife es una única aplicación cliente. No tiene API de aplicación, base de datos ni servicio de autenticación.

Navegador
  → aplicación React
    → imágenes: Canvas 2D
    → audio / vídeo: FFmpeg WASM (un hilo, cola secuencial)
    → núcleo FFmpeg: /ffmpeg/ffmpeg-core.js y /ffmpeg/ffmpeg-core.wasm

En producción con Docker:

Nginx sin privilegios (puerto 2501)
  → archivos estáticos de dist/
  → fallback de la SPA a index.html
  → cabeceras COOP / COEP / CSP (SharedArrayBuffer)

Stack verificado

CapaElección actual
InterfazReact 19, TypeScript estricto
BuildVite 6, Tailwind CSS 4
ImágenesAPI Canvas
Audio / vídeo@ffmpeg/ffmpeg 0.12 y copia local de @ffmpeg/core 0.12.6
ContenedorNode 22 Alpine para compilar, Nginx unprivileged 1.27 Alpine en ejecución
ControlesESLint, Vitest (npm test), tsc --noEmit

Dos artefactos distintos

ArtefactoComandoUso
Producto estándarnpm run buildDocker, GHCR y despliegue normal
Demo públicanpm run build:demodemo pública en Vercel únicamente

El Dockerfile ejecuta npm run build. El vercel.json del repositorio del producto ejecuta npm run build:demo. No deben intercambiarse.

Archivos Compose del repositorio

ArchivoOrigen de la imagen
docker-compose.ymlghcr.io/lucas-lepajollec/swissknife:latest
docker-compose.build.ymlbuild local desde el Dockerfile

La instalación predeterminada para homelab descarga la imagen publicada en lugar de recompilar el checkout cada vez.

En esta página