Suite de herramientas profesionales con cifrado zero-knowledge.
Cifrado en cliente • Sync entre dispositivos • Open Source • Privacidad total
🇪🇸 Español |
🇬🇧 English |
Web Tools es una colección de herramientas de edición y productividad con cifrado zero-knowledge. Tus datos se cifran con AES-256-GCM directamente en el navegador antes de guardarse o sincronizarse.
| 🔒 | Zero-Knowledge | Cifrado AES-256-GCM en cliente. El servidor solo almacena blobs cifrados |
| 🔄 | Sync Cross-Device | Sincroniza datos cifrados entre dispositivos via API REST |
| 🚀 | Sin Instalación | Accede desde cualquier dispositivo con navegador |
| 🌐 | Open Source | Código abierto, transparente y auditable |
| 🎨 | UI Moderna | Interfaz Liquid Glass inspirada en macOS |
| Herramienta | Descripción | Tecnología |
|---|---|---|
| 🖼️ Image Editor | Filtros, recortes, ajustes de color, rotación, volteo y herramientas de dibujo | Canvas API |
| 🎵 Audio Editor | Corta, une y aplica efectos. Visualización de ondas en tiempo real | WaveSurfer.js |
| 🎮 3D Playground | Escenas 3D interactivas, shaders personalizados, controles orbitales | Three.js |
| ✏️ SVG Editor | Crea y edita gráficos vectoriales con herramientas profesionales | SVG API |
| Herramienta | Descripción | Tecnología |
|---|---|---|
| 📕 PDF Editor | Combina, divide, rota, reordena y anota documentos PDF | pdf-lib, PDF.js |
| 📊 Spreadsheet Editor | Hojas de cálculo con fórmulas, estilos y exportación a Excel | ExcelJS |
| 📝 Markdown Editor | Editor con preview en vivo, syntax highlighting y exportación | Marked, DOMPurify |
| Herramienta | Descripción | Tecnología |
|---|---|---|
| 🔧 Dev Tools | Formatea JSON/YAML, playground HTML/CSS/JS con preview en vivo | CodeMirror 6, js-yaml |
| 📱 Phone Tester | Prueba llamadas SIP WebRTC, genera código para Vue y React | @tbisoftware/phone |
| 🔐 CyberSecurity | JWT Debugger, Base64 Encoder/Decoder, Hash Generator | Web Crypto API |
| Herramienta | Descripción | Tecnología |
|---|---|---|
| 📏 Unit Converter | Convierte longitud, peso, temperatura, tiempo y monedas en tiempo real | Frankfurter API |
| 🎨 Color Picker | Rueda de colores, armonías cromáticas, gradientes, múltiples formatos | Canvas API |
| Herramienta | Descripción |
|---|---|
| 📖 CheatSheets | +50 guías rápidas: macOS, Windows, Linux, Bash, Git, Python, TypeScript, Docker, Kubernetes, Laravel, Vue, React, Tailwind, Photoshop, y más |
# Clonar el repositorio
git clone https://github.com/christianpasinrey/tools.git
# Entrar al directorio
cd tools
# Instalar dependencias
npm install
# Iniciar servidor de desarrollo
npm run devTip
El servidor estará disponible en http://localhost:5173
| Comando | Descripción |
|---|---|
npm run dev |
Servidor de desarrollo con HMR |
npm run build |
Build de producción en /dist |
npm run preview |
Preview de la build localmente |
npm test |
Ejecuta tests en modo watch |
npm run test:run |
Ejecuta todos los tests una vez |
📦 Ver todas las dependencias
| Paquete | Versión | Descripción |
|---|---|---|
| Vue | 3.5.24 | Framework progresivo para UI |
| Vue Router | 4.6.4 | Enrutamiento oficial para Vue |
| VueUse | 14.1.0 | Colección de utilidades para Composition API |
| Paquete | Versión | Descripción |
|---|---|---|
| Vite | 7.2.4 | Build tool ultrarrápido |
| Tailwind CSS | 4.1.18 | Framework CSS utility-first |
| Paquete | Versión | Descripción |
|---|---|---|
| CodeMirror | 6.x | Editor de código extensible |
| WaveSurfer.js | 7.12.1 | Visualización de audio |
| Three.js | 0.182.0 | Gráficos 3D con WebGL |
| Paquete | Versión | Descripción |
|---|---|---|
| pdf-lib | 1.17.1 | Crear y modificar PDFs |
| PDF.js | 5.4.530 | Renderizar PDFs |
| ExcelJS | 4.4.0 | Leer y escribir Excel |
| Marked | 17.0.1 | Parser de Markdown |
| DOMPurify | 3.3.1 | Sanitización de HTML |
| Paquete | Versión | Descripción |
|---|---|---|
| js-yaml | 4.1.1 | Parser YAML |
| @tbisoftware/phone | 2.0.6 | Componente teléfono SIP |
tools/
├── 📂 public/
│ └── .htaccess # Config Apache para SPA
├── 📂 src/
│ ├── 📂 components/
│ │ ├── 📂 audio/ # Editor de audio
│ │ ├── 📂 image/ # Editor de imagen
│ │ ├── 📂 pdf/ # Editor de PDF
│ │ ├── 📂 three/ # Playground 3D
│ │ ├── 📂 common/ # Componentes compartidos
│ │ │ ├── SyncAccountButton.vue # Botón cloud sync
│ │ │ ├── AuthForm.vue # Login/registro
│ │ │ └── SyncStatusPanel.vue # Estado de sync
│ │ ├── Dock.vue # Navegación principal
│ │ ├── DockButton.vue # Botones del dock
│ │ ├── DockSubmenu.vue # Submenús interactivos
│ │ └── BentoGrid.vue # Grid estilo bento
│ ├── 📂 composables/
│ │ ├── useAppCrypto.js # Cifrado AES-256-GCM
│ │ ├── useAuth.js # Autenticación JWT
│ │ ├── useCloudSync.js # Sync zero-knowledge
│ │ ├── useVault.js # IndexedDB + sync hooks
│ │ ├── useCheatsheets.js # Lógica de cheatsheets
│ │ ├── useMultimedia.js # Navegación multimedia
│ │ ├── useTechnology.js # Navegación technology
│ │ └── useTools.js # Navegación tools
│ ├── 📂 data/
│ │ └── 📂 cheatsheets/ # +50 archivos JSON
│ ├── 📂 views/ # Páginas principales
│ │ ├── ForgotPassword.vue # Solicitar reset
│ │ └── ResetAccount.vue # Nuevo password + wipe
│ ├── 📂 router/ # Configuración rutas
│ ├── App.vue
│ ├── main.js
│ └── style.css
├── index.html
├── package.json
├── vite.config.js
└── README.md
Apache (con .htaccess)
El proyecto incluye .htaccess en /public que se copia a /dist durante el build.
npm run build
# Subir contenido de /dist al servidorNginx
server {
listen 80;
server_name tu-dominio.com;
root /var/www/tools/dist;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
}Vercel / Netlify
vercel.json:
{
"rewrites": [{ "source": "/(.*)", "destination": "/index.html" }]
}netlify.toml:
[[redirects]]
from = "/*"
to = "/index.html"
status = 200Los datos se cifran en el navegador con AES-256-GCM antes de guardarse en IndexedDB o sincronizarse con el backend. El servidor nunca tiene acceso a los datos en claro.
Password del usuario
├─ PBKDF2 (salt fijo) ──→ authKey ──→ servidor (autenticación)
└─ PBKDF2 (salt aleatorio/item) ──→ AES key ──→ cifra datos localmente
| Concepto | Detalle |
|---|---|
| Cifrado | AES-256-GCM con PBKDF2 (100k iteraciones) |
| Auth | JWT access 15min (memory-only) + refresh 7d (HttpOnly cookie) |
| Sync | Last-Write-Wins basado en timestamps del cliente |
| Offline | Cola de cambios en localStorage, flush al reconectar |
| Cambiar password | Re-cifra todos los items con la nueva clave |
| Reset account | Email con token (1h), borra vault, nuevo password |
| Backend | Node.js + Express + MongoDB (tools-sync-api) |
Note
El servidor solo almacena blobs { salt, iv, data } en Base64. La clave de cifrado nunca sale del navegador.
Warning
Si pierdes tu password, tus datos cifrados son irrecuperables. Puedes restablecer tu cuenta (via email), pero esto elimina permanentemente todos los datos anteriores. Esto es inherente al diseño zero-knowledge.
Note
¡Las contribuciones son bienvenidas! Este proyecto crece gracias a la comunidad.
- Fork el repositorio
- Crea una rama para tu feature (
git checkout -b feature/nueva-herramienta) - Commit tus cambios (
git commit -m 'feat: añadir nueva herramienta') - Push a la rama (
git push origin feature/nueva-herramienta) - Verifica que los tests pasan (
npm run test:run) - Abre un Pull Request
Important
Todos los Pull Requests deben pasar la suite de tests antes de ser mergeados. Si tu PR añade nueva funcionalidad, incluye tests que la cubran. Ejecuta npm run test:run antes de abrir tu PR para verificar que todo funciona correctamente.
| Tipo | Descripción |
|---|---|
| 🐛 Bug Fix | Corrige errores existentes |
| ✨ Feature | Añade nueva funcionalidad |
| 📝 Docs | Mejora la documentación |
| 🌐 i18n | Traducciones y localización |
| 🎨 UI/UX | Mejoras de interfaz |
| ⚡ Performance | Optimizaciones de rendimiento |
| 🧪 Tests | Añade o mejora tests |
feat: nueva funcionalidad
fix: corrección de bug
docs: cambios en documentación
style: formato, sin cambios de código
refactor: refactorización de código
perf: mejoras de rendimiento
test: añadir o corregir tests
chore: tareas de mantenimiento
Este proyecto está bajo la licencia MIT. Ver el archivo LICENSE para más detalles.
Web Tools is a collection of editing and productivity tools with zero-knowledge encryption. Your data is encrypted with AES-256-GCM directly in the browser before being stored or synced.
| 🔒 | Zero-Knowledge | Client-side AES-256-GCM encryption. The server only stores encrypted blobs |
| 🔄 | Cross-Device Sync | Sync encrypted data across devices via REST API |
| 🚀 | No Installation | Access from any device with a browser |
| 🌐 | Open Source | Open, transparent and auditable code |
| 🎨 | Modern UI | Liquid Glass interface inspired by macOS |
| Tool | Description | Technology |
|---|---|---|
| 🖼️ Image Editor | Filters, cropping, color adjustments, rotation, flip and drawing tools | Canvas API |
| 🎵 Audio Editor | Cut, merge and apply effects. Real-time waveform visualization | WaveSurfer.js |
| 🎮 3D Playground | Interactive 3D scenes, custom shaders, orbital controls | Three.js |
| ✏️ SVG Editor | Create and edit vector graphics with professional tools | SVG API |
| Tool | Description | Technology |
|---|---|---|
| 📕 PDF Editor | Merge, split, rotate, reorder and annotate PDF documents | pdf-lib, PDF.js |
| 📊 Spreadsheet Editor | Spreadsheets with formulas, styles and Excel export | ExcelJS |
| 📝 Markdown Editor | Editor with live preview, syntax highlighting and export | Marked, DOMPurify |
| Tool | Description | Technology |
|---|---|---|
| 🔧 Dev Tools | Format JSON/YAML, HTML/CSS/JS playground with live preview | CodeMirror 6, js-yaml |
| 📱 Phone Tester | Test SIP WebRTC calls, generate code for Vue and React | @tbisoftware/phone |
| 🔐 CyberSecurity | JWT Debugger, Base64 Encoder/Decoder, Hash Generator | Web Crypto API |
| Tool | Description | Technology |
|---|---|---|
| 📏 Unit Converter | Convert length, weight, temperature, time and currencies in real-time | Frankfurter API |
| 🎨 Color Picker | Color wheel, chromatic harmonies, gradients, multiple formats | Canvas API |
| Tool | Description |
|---|---|
| 📖 CheatSheets | +50 quick guides: macOS, Windows, Linux, Bash, Git, Python, TypeScript, Docker, Kubernetes, Laravel, Vue, React, Tailwind, Photoshop, and more |
# Clone the repository
git clone https://github.com/christianpasinrey/tools.git
# Enter the directory
cd tools
# Install dependencies
npm install
# Start development server
npm run devTip
Server will be available at http://localhost:5173
| Command | Description |
|---|---|
npm run dev |
Development server with HMR |
npm run build |
Production build to /dist |
npm run preview |
Preview build locally |
npm test |
Run tests in watch mode |
npm run test:run |
Run all tests once |
📦 View all dependencies
| Package | Version | Description |
|---|---|---|
| Vue | 3.5.24 | Progressive framework for UI |
| Vue Router | 4.6.4 | Official router for Vue |
| VueUse | 14.1.0 | Collection of Composition API utilities |
| Package | Version | Description |
|---|---|---|
| Vite | 7.2.4 | Ultrafast build tool |
| Tailwind CSS | 4.1.18 | Utility-first CSS framework |
| Package | Version | Description |
|---|---|---|
| CodeMirror | 6.x | Extensible code editor |
| WaveSurfer.js | 7.12.1 | Audio visualization |
| Three.js | 0.182.0 | 3D graphics with WebGL |
| Package | Version | Description |
|---|---|---|
| pdf-lib | 1.17.1 | Create and modify PDFs |
| PDF.js | 5.4.530 | Render PDFs |
| ExcelJS | 4.4.0 | Read and write Excel |
| Marked | 17.0.1 | Markdown parser |
| DOMPurify | 3.3.1 | HTML sanitization |
| Package | Version | Description |
|---|---|---|
| js-yaml | 4.1.1 | YAML parser |
| @tbisoftware/phone | 2.0.6 | SIP phone component |
tools/
├── 📂 public/
│ └── .htaccess # Apache config for SPA
├── 📂 src/
│ ├── 📂 components/
│ │ ├── 📂 audio/ # Audio editor
│ │ ├── 📂 image/ # Image editor
│ │ ├── 📂 pdf/ # PDF editor
│ │ ├── 📂 three/ # 3D playground
│ │ ├── 📂 common/ # Shared components
│ │ │ ├── SyncAccountButton.vue # Cloud sync button
│ │ │ ├── AuthForm.vue # Login/register
│ │ │ └── SyncStatusPanel.vue # Sync status
│ │ ├── Dock.vue # Main navigation
│ │ ├── DockButton.vue # Dock buttons
│ │ ├── DockSubmenu.vue # Interactive submenus
│ │ └── BentoGrid.vue # Bento-style grid
│ ├── 📂 composables/
│ │ ├── useAppCrypto.js # AES-256-GCM encryption
│ │ ├── useAuth.js # JWT authentication
│ │ ├── useCloudSync.js # Zero-knowledge sync
│ │ ├── useVault.js # IndexedDB + sync hooks
│ │ ├── useCheatsheets.js # Cheatsheets logic
│ │ ├── useMultimedia.js # Multimedia navigation
│ │ ├── useTechnology.js # Technology navigation
│ │ └── useTools.js # Tools navigation
│ ├── 📂 data/
│ │ └── 📂 cheatsheets/ # +50 JSON files
│ ├── 📂 views/ # Main pages
│ │ ├── ForgotPassword.vue # Request reset
│ │ └── ResetAccount.vue # New password + wipe
│ ├── 📂 router/ # Route configuration
│ ├── App.vue
│ ├── main.js
│ └── style.css
├── index.html
├── package.json
├── vite.config.js
└── README.md
Apache (with .htaccess)
The project includes .htaccess in /public that gets copied to /dist during build.
npm run build
# Upload /dist contents to serverNginx
server {
listen 80;
server_name your-domain.com;
root /var/www/tools/dist;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
}Vercel / Netlify
vercel.json:
{
"rewrites": [{ "source": "/(.*)", "destination": "/index.html" }]
}netlify.toml:
[[redirects]]
from = "/*"
to = "/index.html"
status = 200Data is encrypted in the browser with AES-256-GCM before being stored in IndexedDB or synced to the backend. The server never has access to plaintext data.
User password
├─ PBKDF2 (fixed salt) ──→ authKey ──→ server (authentication)
└─ PBKDF2 (random salt/item) ──→ AES key ──→ encrypts data locally
| Concept | Detail |
|---|---|
| Encryption | AES-256-GCM with PBKDF2 (100k iterations) |
| Auth | JWT access 15min (memory-only) + refresh 7d (HttpOnly cookie) |
| Sync | Last-Write-Wins based on client timestamps |
| Offline | Change queue in localStorage, flush on reconnect |
| Change password | Re-encrypts all items with the new key |
| Reset account | Email with token (1h), wipes vault, new password |
| Backend | Node.js + Express + MongoDB (tools-sync-api) |
Note
The server only stores { salt, iv, data } blobs in Base64. The encryption key never leaves the browser.
Warning
If you lose your password, your encrypted data is unrecoverable. You can reset your account (via email), but this permanently deletes all previous data. This is inherent to the zero-knowledge design.
Note
Contributions are welcome! This project grows thanks to the community.
- Fork the repository
- Create a branch for your feature (
git checkout -b feature/new-tool) - Commit your changes (
git commit -m 'feat: add new tool') - Push to the branch (
git push origin feature/new-tool) - Verify that tests pass (
npm run test:run) - Open a Pull Request
Important
All Pull Requests must pass the test suite before being merged. If your PR adds new functionality, include tests covering it. Run npm run test:run before opening your PR to verify everything works correctly.
| Type | Description |
|---|---|
| 🐛 Bug Fix | Fix existing bugs |
| ✨ Feature | Add new functionality |
| 📝 Docs | Improve documentation |
| 🌐 i18n | Translations and localization |
| 🎨 UI/UX | Interface improvements |
| ⚡ Performance | Performance optimizations |
| 🧪 Tests | Add or improve tests |
feat: new feature
fix: bug fix
docs: documentation changes
style: formatting, no code changes
refactor: code refactoring
perf: performance improvements
test: add or fix tests
chore: maintenance tasks
Este proyecto está construido con las siguientes librerías open source:
- Vue.js - Progressive JavaScript Framework
- Vue Router - Official router for Vue.js
- @vueuse/core - Collection of essential Vue.js composition utilities
- Vite - Next generation frontend tooling
- Tailwind CSS - Utility-first CSS framework
- @tailwindcss/vite - Vite plugin for Tailwind CSS
- CodeMirror - Versatile text editor
- @codemirror/autocomplete - Autocompletion support for CodeMirror
- @codemirror/lang-html - HTML language support
- @codemirror/lang-javascript - JavaScript language support
- @codemirror/lang-css - CSS language support
- @codemirror/theme-one-dark - One Dark theme
- Three.js - JavaScript 3D library
- WaveSurfer.js - Interactive audio waveform player
- PDF-lib - Create and modify PDF documents
- pdfjs-dist - Mozilla's PDF reader library
- ExcelJS - Excel workbook/spreadsheet manipulation
- Marked - Markdown parser and compiler
- js-yaml - JavaScript YAML parser
- DOMPurify - XSS sanitizer for HTML, MathML and SVG
- @tbisoftware/phone - Phone number validation and formatting
This project is licensed under the MIT License. See the LICENSE file for details.
Agradecemos sinceramente a:
- GitHub - Por proporcionar un excelente servicio de alojamiento de repositorios y herramientas colaborativas
- La comunidad open source - Por mantener y contribuir a las librerías que hacen este proyecto posible
- Todos los contribuidores que han ayudado a mejorar este proyecto