fedorthinks
Todos los trabajos
En curso2025 — presente

PenFreely — escribir libros enteros con un LLM

Un estudio de escritura para obra de largo aliento. Un LLM escribe una gran página pero pierde el hilo a lo largo de un libro entero; PenFreely lo mantiene coherente con una cascada de planes de arriba abajo (libro → parte → capítulo → sección → página) más resúmenes de abajo arriba, generando prosa solo a nivel de página. Model-agnostic, con un puente multiplataforma para correr tu propio modelo local. Backend en Rust, SvelteKit, PostgreSQL + pgvector.

Abrir
Rol
Solo founder-engineer
Stack
Rust · SvelteKit · TypeScript · PostgreSQL · pgvector · Ollama · WebSocket · Tailwind
Período
2025 — presente

El problema

Un LLM escribe un gran párrafo y una página sólida. Se desmorona a la longitud de un libro. Para el capítulo nueve el protagonista ha cambiado de color de ojos, una subtrama se ha esfumado en silencio y el final contradice el planteamiento. El modelo no tiene memoria del conjunto — solo la ventana que tiene delante. Así que «escríbeme una novela» te da o bien una deriva incoherente o bien una sinopsis vaga, nunca un libro real y consistente.

PenFreely está hecho justo para ese hueco: mantener coherente un libro entero usando un modelo que solo puede ver una pequeña parte de él a la vez.

Qué hace el producto

Tú describes el libro; PenFreely construye un plan estructurado de arriba abajo — libro → parte → capítulo → sección → página — y solo genera prosa a nivel de página, con cada página condicionada por el plan más resúmenes acumulativos de todo lo que vino antes. La estructura sostiene la historia; el modelo solo escribe una página a la vez, bien.

Es model-agnostic por diseño: tú eliges el proveedor y el modelo y cambias cuando quieras — nube (OpenAI, Anthropic, OpenRouter) o tu propio modelo local. Cada generación informa de su coste, velocidad y uso de tokens, así que mantienes el control de la factura. Y es tu libro en tu modelo — sin censura impuesta, sin que ninguna plataforma decida lo que puedes escribir.

Qué construí

El motor de coherencia. La idea central es la cascada de planes de arriba abajo más los auto-resúmenes de abajo arriba. Como la prosa solo se genera a nivel de página — condicionada por el plan y resúmenes cortos, no por el manuscrito entero — la ventana de contexto se mantiene pequeña y el coste acotado, mientras el libro permanece consistente a cualquier longitud.

Un puente de modelos locales — gratis y privado. Un pequeño binario multiplataforma (penfreely-bridge) permite a un usuario correr su propio modelo vía Ollama y usarlo dentro del estudio. Hace solo una conexión WebSocket segura saliente hacia el backend, así que funciona detrás de routers y firewalls sin abrir ningún puerto, y el texto nunca sale de la máquina del usuario. Binarios para macOS (Apple Silicon e Intel), Windows y Linux.

Una superficie de producto real. Un estudio en SvelteKit para planificar y escribir, selección de proveedor/modelo, telemetría por generación y el flujo de plan-a-página — respaldado por una API en Rust.

Decisiones arquitectónicas

Los planes son el artefacto; la prosa es derivada. La fuente de verdad es el plan estructurado, no el texto generado. Es la misma disciplina spec-driven que aplico en todas partes: posee el plan, y cualquier página puede regenerarse sin romper el libro.

Genera poco, mantén la coherencia. Solo se genera prosa a nivel de página, siempre condicionada por el plan más resúmenes — nunca el libro entero en contexto. Eso es lo que hace que una salida de longitud de libro sea a la vez coherente y asequible.

LLM-agnostic hasta el núcleo. El proveedor y el modelo viven detrás de un puerto; local y nube son la misma interfaz para el resto del sistema. Cambiar de modelo es una elección, no una migración — el mismo argumento que no dejo de repetir sobre no casarse nunca con un solo modelo.

Clean architecture, estricta. El backend en Rust es un workspace de capas — un crate de dominio puro sin IO, casos de uso de aplicación y puertos, adaptadores de infraestructura, y la interfaz HTTP/WS — con migraciones sqlx y un protocolo de cable tipado compartido con el puente. El frontend en SvelteKit está testeado con vitest y Playwright. PostgreSQL + pgvector desde el primer día, para que la recuperación y la escala no se atornillen después.

Estado actual

PenFreely está en vivo y en desarrollo activo en penfreely.com. Lo construí en solitario — el planteamiento de producto, la arquitectura y la revisión son míos — dirigiendo agentes de AI (Claude Code en Opus, Codex) contra una especificación por etapas, cada etapa construida de principio a fin con tests. Es otro ejemplo funcionando de lo que no dejo de defender: elige la estructura correcta, ancla el modelo en ella, y déjalo hacer el único trabajo en el que de verdad es bueno — escribir la siguiente página.