gray.bot is a live editorial site about apparel, tech, home objects, vehicles, art and film. Behind it is a pipeline that finds material, drafts posts, evaluates them and leaves the publishing decision with a person.
The architecture
A TypeScript worker scrapes sources into immutable files. Sharp analyzes the pixels of each image to detect gray. Tags and captions do not decide the subject matter. The system decides by looking at the image itself.
An LLM drafts posts, then an automated stage evaluates draft quality. Everything is gated for human review before publish. The automated stages prepare and challenge the work, but they do not make the final editorial call.
No database, no hidden state
Data moves from raw/, which holds immutable scraped data, to wiki/, which holds editable posts, then into a static build. Files are the source of truth and git is the audit trail. Every editorial decision is therefore visible as a diff.
The boundary between raw and editable material matters. Scraped inputs remain intact while editorial changes accumulate in the wiki. The static build consumes that visible state without introducing another store that can drift away from the files.
The publishing layer
Astro builds the static site for Cloudflare Pages, with images stored on Cloudflare R2. The code is MIT licensed. The content is licensed CC BY-NC 4.0.
Current state
The pipeline and the interface are built and running. The published archive is still small.
Ken Faiman · Applied AI, agent & evaluation systems · faiman.com