Why Articles Can Stay Old After a Code Update

Three places to update

Page code lives in Git, runtime files live in an image, and projects and notes live in SQLite. Pulling a changed JSON file does not replace database records automatically.

A versioned draft and a live database

The content importer validates backend/content/portfolio.json and updates projects and notes by slug. New notes are published; existing notes keep their publication state. Unrelated records are retained.

The image has another copy

The Dockerfile copies content into the image. Updating the host directory leaves that copy unchanged unless the image is rebuilt or the current content directory is mounted into a one-off importer container.

Coordinate edits

Admin edits change the database directly. Importing an old draft can overwrite those changes, so reconcile edits or keep an export first. The importer creates a backup before writing, but does not automatically resolve editorial conflicts.