Colección de utilidades para developers que corre 100% en el navegador. Cada herramienta resuelve micro-tareas de debugging (decodificar Base64, validar JSON, decodificar JWT, etc.) en una sola UI consistente.
Lee este archivo antes de explorar el código. Para el roadmap por fases consulta README.md.
- SvelteKit + Svelte 5 (runes:
$state,$derived,$derived.by,$props,$effect) - shadcn-svelte (preset
b6rt8ttCM, temamist) — componentes ensrc/lib/components/ui/ - Tailwind CSS 4
- TypeScript estricto
- Bun como package manager (no usar
npm/pnpm) - Vitest para tests, Prettier + ESLint para lint
- 100% shadcn-svelte sin modificar. No edites archivos dentro de
src/lib/components/ui/. Si necesitas un patrón nuevo, compón con primitivos existentes (Card,Tabs,Select,Table,ScrollArea, etc.). - Íconos solo desde
@lucide/svelte. Import por archivo:import KeyRoundIcon from '@lucide/svelte/icons/key-round';. - Svelte 5 runes únicamente. Nada de
letreactivo legacy, ni storeswritable/readablesalvo que ya estén en el proyecto. - Lógica pura separada de UI. Toda la lógica de una tool vive en
tool.ts, no inline en el.svelte. - No introducir librerías de UI alternativas (nada de DaisyUI, Flowbite, Skeleton, etc.). El estilo lo da shadcn + Tailwind.
- Idioma: copy de la UI en inglés, comentarios y respuestas al usuario en español.
Cada herramienta sigue exactamente este patrón:
src/lib/tools/<id>/tool.ts → funciones puras exportadas (reutilizables en futuro dataflow)
src/lib/tools/<id>/<Id>Tool.svelte → UI con <ToolShell> + shadcn-svelte
src/lib/tools/registry.ts → fuente única de verdad (sidebar, command palette, dashboard)
src/routes/(app)/tools/<id>/+page.svelte → wrapper de 9 líneas que importa el componente
registry.ts alimenta automáticamente sidebar, command palette (⌘K) y dashboard. No hardcodees menús en otros archivos.
ToolShell (en src/lib/components/tool-shell/) provee el header común (icono, nombre, descripción, badges, botón Clear). Cada *Tool.svelte envuelve su contenido en <ToolShell {tool} onClear={clearAll}>.
Convenciones internas:
- Lógica síncrona →
$derived(funcionPura(input)). - Lógica async (Web Crypto, fetch) →
$effectcon flagcancelledo funciónasyncen el handler. Evita asignar dentro de$effectsi puedes usar$derived.by. - Errores se devuelven en el resultado (
{ result, error? }), no se lanzan, salvo en cómputos triviales que el componente atrapa con try/catch dentro de$derived.by. - Tipos compartidos en
src/lib/tools/types.ts(ToolDefinition,ToolCategory,NodeSpec). El campo opcionalrun()ynodeestán reservados para Fase 4 (dataflow editor).
- Crear
src/lib/tools/<id>/tool.tscon funciones puras exportadas (con tipos explícitos). - Crear
src/lib/tools/<id>/<Id>Tool.sveltecon<ToolShell>+ componentes shadcn. - Registrar la tool en
src/lib/tools/registry.ts(icono Lucide,category,keywords,nodeconinputs/outputs). - Crear ruta en
src/routes/(app)/tools/<id>/+page.svelte(wrapper mínimo). - Marcar el item en el roadmap del
README.md. - Correr
bun run check && bun run lint.
El sidebar, command palette y dashboard se actualizan solos.
Tools en producción: Base64, JSON, URL, JWT, Hash + HMAC, Timestamp, UUID/NanoID/ULID, Regex, Text Diff, Markdown, CSV, Cron, Color, Image, QR Code. Ver tabla detallada en README.md.
Fase activa: Fase 4 — Dataflow editor. Próximo paso: instalar @xyflow/svelte y conectar el catálogo de nodos desde el registry.
Fases pendientes: 4 Dataflow editor (@xyflow/svelte), 5 Persistencia/share, 6 PWA + tests.
bun install
bun run dev # http://localhost:5173
bun run check # svelte-check (type-check)
bun run lint # prettier --check + eslint
bun run format # prettier --write
bun run build # build de producción
bun run test # vitest --runAntes de cerrar cualquier cambio: bun run check && bun run lint.
- Adapter:
@sveltejs/adapter-vercel. - Toda la app es prerenderizada (
src/routes/+layout.tsexportaprerender = true). El build sube HTML estático al CDN de Vercel; no se generan serverless functions. - Si agregas una ruta o tool con datos dinámicos en server (
+page.server.ts,+server.ts,loadserver-only), debes desactivar el prerender en esa ruta o moverla fuera del prerender global. Mantén la regla del proyecto: todo en el cliente. - No hace falta
vercel.jsonni variables de entorno. - Verificación local: tras
bun run build, en.vercel/output/static/deben aparecer los HTML de cada ruta (index.html,tools/base64.html, etc.). Existe uncatchall.funcque actúa solo como fallback 404 — es normal aunque todo esté prerenderizado; lo que NO debe aparecer son funciones por ruta.
- Language: TypeScript
- Package Manager: bun
- Add-ons: prettier, eslint, vitest, tailwindcss, mcp
You are able to use the Svelte MCP server, where you have access to comprehensive Svelte 5 and SvelteKit documentation. Here's how to use the available tools effectively:
Use this FIRST to discover all available documentation sections. Returns a structured list with titles, use_cases, and paths. When asked about Svelte or SvelteKit topics, ALWAYS use this tool at the start of the chat to find relevant sections.
Retrieves full documentation content for specific sections. Accepts single or multiple sections. After calling the list-sections tool, you MUST analyze the returned documentation sections (especially the use_cases field) and then use the get-documentation tool to fetch ALL documentation sections that are relevant for the user's task.
Analyzes Svelte code and returns issues and suggestions. You MUST use this tool whenever writing Svelte code before sending it to the user. Keep calling it until no issues or suggestions are returned.
Generates a Svelte Playground link with the provided code. After completing the code, ask the user if they want a playground link. Only call this tool after user confirmation and NEVER if code was written to files in their project.