The Kogen website: landing page, Origins, Notes, and announcements. Built with Astro and intended for Cloudflare Pages.
Use Node.js 22.12 or newer.
npm ci
npm run devnpm run build
npm run previewThe static site is generated in dist/. Cloudflare Pages uses npm run build
as its build command and dist as its output directory.
The reusable Kogen brand bundle owns the social-preview master. This repository keeps synchronized deployment copies:
public/brand/kogen-social-preview.svg— editable website copy.public/og.png— 1280×640 deployed Open Graph/Twitter image.
When the preview changes, update the canonical SVG and PNG in the Kogen brand bundle first, copy both files here, confirm the canonical and website copies have identical SHA-256 hashes, and run the normal build. Do not treat this repository as a second master. GitHub repository-preview uploads are separate from deploying these website files.
Write posts in src/content/announcements/. Each post needs title, summary,
author, and status (draft or published). Published posts also need
publishedAt. Optional updatedAt cannot precede the publication date.
Published URLs use /announcements/YYYY-MM-DD/slug/, with dates in UTC.
Drafts appear during development and in npm run build:preview; the normal
build excludes them. Run the normal build again before deploying after a draft
preview.
Write practical findings from building Kogen in src/content/notes/. Notes use
the same draft and publication fields as announcements, but published URLs use
/notes/YYYY-MM-DD/slug/. Add supporting media under public/notes/ and use
root-relative paths from the Markdown source.
Notes can include a saved .tweet-card HTML block styled in src/styles/global.css.
Keep the exact post text, author, original URL and ISO timestamp in the block;
store its avatar under public/notes/<note-slug>/ with explicit image dimensions.
Do not include X widget scripts or engagement counts that would become stale.
A Note's web page going live is not "published" on its own: the Kogen website workflow's default is that publishing a Note includes its established social distribution unless Almir explicitly excludes it. The Kogen project workspace's website workflow owns the complete procedure; check it before reporting a Note as published. Once a social textarea is filled, wait several seconds before submitting and require a fresh visual check that the intended preview or attached card is present. A success toast, permalink or direct asset HTTP 200 does not replace verification of the saved live presentation. For multi-paragraph LinkedIn copy, use real paste or keyboard input in the rich-text editor rather than a programmatic value setter, and visibly confirm the separate paragraph blocks before saving and again on the live post.
The Astra note snapshot was checked against X syndication post
2073527099952881756 on 13 September 2026. The source timestamp is
2026-07-04T21:59:19Z, displayed as 5 July in Africa/Nairobi (EAT).
To refresh, verify the original post, update its HTML and local avatar, run
npm run build, and inspect the note at desktop and mobile widths with
npm run preview. Keep the saved content if X is unavailable; ordinary builds
make no request to X. Publication uses the separate approval workflow.
Copyright 2026 Optimum Tech, LLC. Licensed under Apache 2.0.
Third-party font licenses are included in public/fonts/.
The normal build derives Markdown page twins, agent-content/, and llms.txt
from the public Astro pages. Cloudflare Pages middleware negotiates Markdown
for HTML routes; agent-site.json owns the site description and discovery
guidance, while the About, Contact, and Privacy pages own their visible facts.
The build also uses Python 3.