Personal engineering blog by Goga Koreli. Agentic engineering, open source developer tools, and building in public.
Built with @nisli/core — a zero-dependency reactive web component framework.
"Where excitement ends, depth begins."
- 117 Pull Requests Later, It Wasn’t a Task Manager Anymore
- ghx field notes
- All engineering articles
- Subscribe or follow the RSS feed
- ghx — auditable repository reconnaissance for coding agents
- backlog-mcp — local-first context, memory, and work history for agents
- @nisli/core — zero-dependency reactive web components
- Framework: @nisli/core — signals, templates, web components
- Content: Markdown + YAML frontmatter, or TypeScript for custom layouts, in
packages/blog/posts/ - Syntax highlighting: Shiki — dual themes, build-time, zero client JS
- Validation: Zod — frontmatter schema validation at build time
- Bundler: esbuild — JS + CSS bundling
- Hosting: Cloudflare Workers with static assets
- CI/CD: Cloudflare Workers Git integration — push to
main→ build → deploy
Static generation uses @nisli/ssg with ordinary @nisli/core templates; the blog owns content discovery, document metadata, and publication files. See ADR-0018.
pnpm install
pnpm dev # browser-sync dev server on localhost:3000
pnpm build # production build → packages/blog/dist/
pnpm -C packages/blog validate # validate Markdown frontmatter; nonzero exit on errors
pnpm typecheck # TypeScript verificationThe build warns and skips Markdown posts with invalid frontmatter. Run the explicit validation command above when invalid frontmatter must fail a check; the root package has no validate script.
packages/blog/
├── posts/ # Markdown and TypeScript blog posts
├── public/ # Static assets (icons, images, Cloudflare headers)
└── src/
├── pipeline/ # Build scripts (prod, dev, validate)
├── lib/ # Markdown, frontmatter, paths, fs utilities
├── templates/ # Shared shell, representations, RSS, structured data
├── pages/ # Home, articles, sections, stats, and other pages
├── client/ # @nisli/core components (theme toggle)
└── styles/ # Vanilla CSS — warm cream/dark palette
Raw author prompts and personal working notes are private. Public prompt pages have been retired; see the prompt publication decision.
pnpm install installs Git commit and push guards for author-prompt files and private archives. Use pnpm prepare in an existing checkout and pnpm check:private-prompts to inspect tracked paths. Push checks include intermediate commits, so adding a prompt and deleting it before pushing is rejected. These are file-path checks, not a classifier of private prose; review staged content and public messages too. Existing custom hooks are preserved and require integrating the checks.
AGENTS.md holds shared repository constraints. Agents discover task-specific guidance in .agents/skills/; project decisions route to the relevant ADRs. The instruction migration record preserves the locations of the accumulated guidance.
- Newsletter implementation, live acceptance and remaining work
- Analytics implementation and limits
- Completed Matomo comparison and agent-subscription research
- Article 024 launch measurements and accepted referrer capture
- September 9 analytics and research handoff
Research reports, reproducible methods, and sanitized results live in the repository. Credentials, raw operational captures, and session logs remain in private local storage; the relevant receipts describe their locations and limits.
This repository is dual-licensed:
- Source code is licensed under the MIT License.
- Blog posts, prompts, and images are licensed under Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International.