# 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.

- **Author:** Fedor Chishchin
- **Role:** Solo founder-engineer
- **Period:** 2025 — presente
- **Stack:** Rust · SvelteKit · TypeScript · PostgreSQL · pgvector · Ollama · WebSocket · Tailwind
- **Source:** https://fedorthinks.com/es/work/penfreely

---

## 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](https://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.
