Inspiration

After a trip, I usually come home with hundreds of photos and fragments of memory, but very little patience to turn them into something I can share. Existing tools can produce polished layouts, yet I wanted more control over the workflow, an output I could keep editing, and a format that felt closer to a visual story than a template.

That became Plog: a local-first, block-based composer for turning selected travel photos into an editable long-form story.

What it does

Plog lets me load selected photos, add or import text, arrange everything on a continuously growing canvas, and export the finished story as one continuous JPG, PNG, or WebP.

For the Build Week workflow, I can give GPT-5.6 up to twelve selected photos, optional trip notes, and optional writing guidance. Plog first creates one labeled, compressed contact sheet in the browser. GPT-5.6 then proposes a title, chapters, concise copy, and photo order.

The proposal is shown as a preview before it changes anything. I can review it, apply it, and continue editing every heading, paragraph, image, and layout choice. AI proposes; I review, revise, and refine.

How I built it

The editor is organized around a versioned block document and a set of pure document commands. Manual UI actions, Markdown import, structured JSON import, and an approved GPT plan all compile into the same underlying operations. A deterministic layout engine measures content, preserves image aspect ratios, flows blocks vertically, and extends the canvas when the document grows.

For the AI step, the browser reduces the selected images to one adaptive JPEG contact sheet instead of uploading every original file. A server-side endpoint calls the OpenAI Responses API with GPT-5.6 Terra and Structured Outputs. The API key never enters client-side JavaScript, and the model cannot mutate the document directly.

Plog stores documents and Blob-backed image assets locally in IndexedDB. The public app is deployed with OpenAI Sites, while the AI-enabled demo runs with a server-side key.

Challenges

The hardest part was not generating text. It was preserving an editing contract across AI, layout, rendering, history, and export.

A long visual document has to handle measured text height, mixed image ratios, automatic block flow, canvas growth, rerendering, and large raster exports without cutting through content. The AI path added another constraint: a model response had to become ordinary editable blocks, not a flattened image or an irreversible replacement.

Another challenge was keeping the image request useful without sending twelve full-resolution photographs. The adaptive contact sheet keeps photo labels and enough visual context for planning while substantially reducing the payload.

Accomplishments that I am proud of

  • One document model now supports manual editing, Markdown, JSON, and GPT-generated plans.
  • GPT output is validated, previewed, and only applied after explicit user approval.
  • Twelve selected photographs are reduced locally to one labeled contact sheet.
  • Long documents export as one continuous image that preserves the document's reading flow.
  • Automated tests cover the AI failure path, Preview, Apply, editing history, import, and raster export.

What I learned

The useful role for AI here is not autonomous publishing. It is reducing the blank-page and sequencing work while keeping the author responsible for meaning and taste.

I also learned that a command boundary is more valuable than a collection of AI-specific UI features. Once the editor has stable blocks and operations, a human, an importer, or a model can use the same layout system without creating separate document formats.

What's next

Plog currently starts after human curation: the Kyoto demo uses twelve photos I already selected. The larger problem is a trip with hundreds or a thousand images.

The next step would be local-first reduction using timestamps, GPS, perceptual hashes, duplicate and blur detection, and burst clustering. Those signals would reduce a large library into time-and-place event groups. Only small labeled contact sheets of representative candidates would reach a vision model for final selection and chapter suggestions, and only the chosen photos would reach Plog's drafting and layout flow. That pipeline remains future work; Plog does not currently claim to ingest or automatically curate a thousand-photo library.

Built With

Share this project:

Updates