# Personal Knowledge Graph

> The connected source of truth for my work and an incubator for ideas, projects, and products

- HTML version: https://robbiepalmer.me/projects/personal-knowledge-graph
- Status: live
- Started: 2025-11-02
- Updated: 2026-09-13
- Source code: https://github.com/Robbie-Palmer/personal-site
- Live demo: https://robbiepalmer.me
- Technologies: TypeScript, Zod, Lucide React, Vale, GitHub, React, Next.js, Mise, Tailwind CSS, Turbopack, pnpm, Vitest, CodeRabbit, Terraform, Cloudflare Pages, Claude Code, Husky, GitHub Actions, Terraform Cloud, GitHub Secrets, shadcn/ui, MDX, Shiki, Fuse.js, Tailwind CSS Typography, Renovate, Mermaid, Recharts, Cloudflare DNS, Cloudflare Images, Cloudflare Terraform Provider, Embla Carousel, CodeQL, Shortcut, Doppler, CLA Assistant, cosmos.gl, Cloudflare R2, PostHog, Greptile, Codex, Trivy, zizmor, actionlint, Simple Icons, SVGL, TFLint, Knip, OpenSSF Scorecard, Gitleaks, typos
- Built on: Base, Web application, Infrastructure, Observability, TypeScript
- Platform technologies: TypeScript, Zod, Terraform, PostHog

# Vision

The Personal Knowledge Graph is the connected source of truth for my work. The
site is its public interface. Writing, experience, ideas, decisions, research,
demos, and projects remain connected as they change and grow.

The graph is inspired by tools like Roam Research and Obsidian, but gives me
full control over the interface, richer relations between content, and no
vendor lock-in. Those tools promised compounding returns from connected
thinking but fell short for me. I found them too inflexible and siloed, and
they did not lead to meaningful engagement.

The deeper aim is to turn documentation into an active system. Content begins
as prose, but structured frontmatter and explicit relationships also make it a
database of what exists, why it exists, how it changed, and what it affects.
That database can become a control plane: first surfacing gaps and stale
decisions, then recommending bounded work, and eventually coordinating
authorised changes through agents and review workflows.

It creates a second path from thought to delivery. An observation can become
an idea, research, a decision, a demo, and eventually an independent project
or product without losing the history that explains it. The products move
into their own bounded contexts while their provenance and lessons remain
connected here.

# Problem Statement

I want:

* **A Unified presence**: One place for blog, resume, and projects instead of fragmented profiles across LinkedIn, Substack and GitHub
* **Low context-switching cost**: Self-documenting architecture so I can drop in and out of this codebase without losing momentum
* **Rich content**: A platform that supports long-form writing, diagrams, and interactive content

# User Stories

**For the audience:**

* As a friend, I want the highlights from research on topics like personal finance, so I can benefit from his research obsessions
* As a colleague, I want to understand Robbie's mental models on common engineering challenges, so we can align faster and avoid repeated debates
* As a developer evaluating this stack, I want to see architectural decisions documented, so I can learn from the tradeoffs
* As a hiring manager, I want to see evidence of systematic thinking beyond resume bullets, so I can assess seniority and culture fit

**For the author:**

* I want self-documenting projects, so I can context-switch efficiently when returning to the codebase
* I want ideas to retain their provenance as they become demos, projects, and products
* I want the knowledge graph to identify useful work and eventually coordinate authorised changes
* I want the Personal Engineering Platform to provide production-ready defaults when an idea becomes a project
* I want a forcing function to ship end-to-end

# Platform Capabilities

## Knowledge Sharing & Collaboration

The blog serves multiple audiences with different needs:

* **Colleagues**: Engineering patterns, addressing recurring anti-patterns, reducing repeated debates. I can link to a thoroughly researched post instead of trying to re-establish the case from the ground up
* **Friends & family**: Personal finance insights, investing principles, life lessons
* **Public**: Thought leadership on topics I care about. Writing publicly forces an extra level of rigor.

## Content Publishing

* Long-form writing with MDX supporting diagrams, code blocks, and interactive components
* Multi-audience blog serving both technical and non-technical readers
* SEO-optimized for discoverability

## Professional Presence

* Interactive resume with structured experience data and technology breadth
* Project highlights with linked PRDs and [ADRs](/projects/personal-knowledge-graph?tab=adrs) demonstrating technical leadership
* Visual communication and data visualization demos

## Meta-Benefits

* LLM-readable codebase optimized for AI-assisted development workflows
* Self-documenting architecture reducing context-switching cost
* Structured content that serves as both public documentation and a queryable database
* Explicit provenance and authority boundaries for explainable recommendations
* Incubation path from connected ideas to independent projects and products

# Building Philosophy

This project follows my [building philosophy](/projects?tab=philosophy).
Each ADR references specific principles to explain why certain trade-offs were accepted and others rejected.

# What This Is Not

* **Not a CMS with a GUI**: Content is code, managed via git. This is intentional. It keeps everything in one workflow and makes the site itself a demonstration of development practices
* **Not a finished product**: It's a living platform that evolves with my needs. The backlog is always longer than the changelog
* **Not a template for others to fork**: Though you're welcome to learn from it. The decisions here reflect my specific needs and preferences
* **Not a walled garden**: Content is meant to be shared, referenced, and built upon

# Future Direction

This graph is infrastructure for future work:

* **Idea incubator**: Research and writing can become decisions, demos, and independent products while preserving their lineage in the graph
* **Knowledge control plane**: Use structured decisions, lifecycle state, provenance, and project authority to recommend upgrades and other bounded work; later decisions may allow agents to execute approved migrations
* **Personal Engineering Platform integration**: Link incubated projects to reusable engineering defaults without making generic platform decisions part of the Personal Knowledge Graph's own history
* **Expanded project documentation**: More PRDs and ADRs as case studies in technical decision-making
* **Enhanced data visualization**: Richer interactive content and visual communication
* **Self-maintaining knowledge**: Find missing, weak, and stale content; gather supporting evidence; propose changes; and publish accepted updates through the same review path as code

# Knowledge maintenance plan

The current graph makes gaps visible but does not yet close them. Only four of
the eight roles have linked project pages. Many technology nodes have a name and
relations but little useful detail. Ideas and workflows often remain inside the
agent session that developed them instead of becoming durable public writing.

The self-maintenance loop should:

1. Inventory missing and stale project, role, technology, ADR, and blog content.
2. Extract candidate entities, claims, and relationships from repository files,
   agent sessions, commits, pull requests, and cited external sources.
3. Preserve provenance so a reader or reviewer can inspect where each claim
   came from.
4. Propose bounded updates through pull requests rather than silently rewriting
   the public graph.
5. Check links, dates, relations, prose rules, and claims with the cheapest
   reliable layer available.
6. Ask for human judgment when publication depends on taste, uncertain evidence,
   or a statement made in my voice.
7. Publish accepted changes and use the review outcome to improve the next
   proposal.

Private knowledge follows the same general shape under different access rules.
Notes that cannot be public can live in the Home Lab. Personal application data
belongs in its owning database behind narrow user and agent authorization.

## Initiatives

- [Semi-autonomous Software Development](https://robbiepalmer.me/initiatives/semi-autonomous-software-development.md): A connected system that keeps useful work moving, asks for human judgment when it matters, and learns how to need less intervention next time

## Architecture Decision Records

- [ADR 000: Github Public Repo](https://robbiepalmer.me/projects/personal-knowledge-graph/adrs/000-github-public-repo.md) — Accepted, 2025-10-18
- [ADR 001: Monorepo](https://robbiepalmer.me/projects/personal-knowledge-graph/adrs/001-monorepo.md) — Accepted, 2025-10-18
- [ADR 002: React](https://robbiepalmer.me/projects/personal-knowledge-graph/adrs/002-react.md) — Accepted, 2025-10-18
- [ADR 003: Next.js](https://robbiepalmer.me/projects/personal-knowledge-graph/adrs/003-next-js.md) — Accepted, 2025-10-18
- [ADR 004: Mise En Place](https://robbiepalmer.me/projects/personal-knowledge-graph/adrs/004-mise.md) — Accepted, 2025-10-18
- [ADR 005: Tailwind CSS](https://robbiepalmer.me/projects/personal-knowledge-graph/adrs/005-tailwindcss.md) — Accepted, 2025-10-18
- [ADR 006: Turbopack](https://robbiepalmer.me/projects/personal-knowledge-graph/adrs/006-turbopack.md) — Accepted, 2025-10-18
- [ADR 007: Pnpm](https://robbiepalmer.me/projects/personal-knowledge-graph/adrs/007-pnpm.md) — Accepted, 2025-10-18
- [ADR 008: Vitest](https://robbiepalmer.me/projects/personal-knowledge-graph/adrs/008-vitest.md) — Accepted, 2025-10-18
- [ADR 009: CodeRabbit](https://robbiepalmer.me/projects/personal-knowledge-graph/adrs/009-code-rabbit.md) — Accepted, 2025-10-19
- [ADR 010: Terraform](https://robbiepalmer.me/projects/personal-knowledge-graph/adrs/010-terraform.md) — Accepted, 2025-10-19
- [ADR 011: Cloudflare Pages](https://robbiepalmer.me/projects/personal-knowledge-graph/adrs/011-cloudflare-pages.md) — Accepted, 2025-10-19
- [ADR 012: Claude Code](https://robbiepalmer.me/projects/personal-knowledge-graph/adrs/012-claude-code.md) — Accepted, 2025-10-19
- [ADR 013: Dependabot](https://robbiepalmer.me/projects/personal-knowledge-graph/adrs/013-dependabot.md) — Deprecated, 2025-10-19
- [ADR 014: Husky Precommit](https://robbiepalmer.me/projects/personal-knowledge-graph/adrs/014-husky-precommit.md) — Accepted, 2025-10-19
- [ADR 015: Static Site Generation](https://robbiepalmer.me/projects/personal-knowledge-graph/adrs/015-ssg.md) — Accepted, 2025-10-19
- [ADR 016: GitHub Actions](https://robbiepalmer.me/projects/personal-knowledge-graph/adrs/016-github-actions.md) — Accepted, 2025-10-19
- [ADR 017: Terraform Cloud](https://robbiepalmer.me/projects/personal-knowledge-graph/adrs/017-terraform-cloud.md) — Accepted, 2025-10-19
- [ADR 018: GitHub Secrets](https://robbiepalmer.me/projects/personal-knowledge-graph/adrs/018-github-secrets.md) — Accepted, 2025-10-19
- [ADR 019: Shadcn](https://robbiepalmer.me/projects/personal-knowledge-graph/adrs/019-shadcn.md) — Accepted, 2025-10-19
- [ADR 020: MDX](https://robbiepalmer.me/projects/personal-knowledge-graph/adrs/020-mdx.md) — Accepted, 2025-10-19
- [ADR 021: Shiki](https://robbiepalmer.me/projects/personal-knowledge-graph/adrs/021-shiki.md) — Accepted, 2025-10-19
- [ADR 022: Fuse.js](https://robbiepalmer.me/projects/personal-knowledge-graph/adrs/022-fuse-js.md) — Accepted, 2025-10-26
- [ADR 023: Tailwind CSS Typography](https://robbiepalmer.me/projects/personal-knowledge-graph/adrs/023-typography.md) — Accepted, 2025-10-26
- [ADR 024: Renovate](https://robbiepalmer.me/projects/personal-knowledge-graph/adrs/024-renovate.md) — Accepted, 2025-11-02
- [ADR 025: Mermaid](https://robbiepalmer.me/projects/personal-knowledge-graph/adrs/025-mermaid.md) — Accepted, 2025-11-02
- [ADR 026: Recharts](https://robbiepalmer.me/projects/personal-knowledge-graph/adrs/026-recharts.md) — Accepted, 2025-11-08
- [ADR 027: CCPM](https://robbiepalmer.me/projects/personal-knowledge-graph/adrs/027-ccpm.md) — Deprecated, 2025-11-24
- [ADR 028: Cloudflare DNS](https://robbiepalmer.me/projects/personal-knowledge-graph/adrs/028-cloudflare-dns.md) — Accepted, 2025-11-26
- [ADR 029: Cloudflare Images](https://robbiepalmer.me/projects/personal-knowledge-graph/adrs/029-cloudflare-images.md) — Accepted, 2025-12-14
- [ADR 030: Downgrade Cloudflare Terraform Provider](https://robbiepalmer.me/projects/personal-knowledge-graph/adrs/030-downgrade-cloudflare-tf.md) — Accepted, 2025-11-26
- [ADR 031: Embla Carousel](https://robbiepalmer.me/projects/personal-knowledge-graph/adrs/031-embla-carousel.md) — Accepted, 2025-12-14
- [ADR 032: CodeQL](https://robbiepalmer.me/projects/personal-knowledge-graph/adrs/032-codeql.md) — Accepted, 2025-12-18
- [ADR 033: In-Memory Content Graph](https://robbiepalmer.me/projects/personal-knowledge-graph/adrs/033-content-graph-indexes.md) — Accepted, 2025-12-30
- [ADR 034: Shortcut](https://robbiepalmer.me/projects/personal-knowledge-graph/adrs/034-shortcut.md) — Accepted, 2025-12-28
- [ADR 035: Doppler](https://robbiepalmer.me/projects/personal-knowledge-graph/adrs/035-doppler.md) — Accepted, 2025-12-31
- [ADR 036: Cloudflare Rulesets for Subdomain Routing](https://robbiepalmer.me/projects/personal-knowledge-graph/adrs/036-cloudflare-rulesets.md) — Rejected, 2026-01-11
- [ADR 037: AGPL-3.0 License](https://robbiepalmer.me/projects/personal-knowledge-graph/adrs/037-agpl-license.md) — Accepted, 2026-01-11
- [ADR 038: Content Knowledge Graph Visualization](https://robbiepalmer.me/projects/personal-knowledge-graph/adrs/038-content-graph.md) — Accepted, 2026-02-07
- [ADR 039: Cloudflare R2 Object Storage](https://robbiepalmer.me/projects/personal-knowledge-graph/adrs/039-cloudflare-r2.md) — Accepted, 2026-02-14
- [ADR 040: PostHog Analytics](https://robbiepalmer.me/projects/personal-knowledge-graph/adrs/040-posthog-analytics.md) — Accepted, 2026-02-14
- [ADR 041: Gemini Code Assist](https://robbiepalmer.me/projects/personal-knowledge-graph/adrs/041-gemini-code-assist.md) — Deprecated, 2026-06-20
- [ADR 042: Greptile](https://robbiepalmer.me/projects/personal-knowledge-graph/adrs/042-greptile.md) — Accepted, 2026-06-20
- [ADR 043: Codex](https://robbiepalmer.me/projects/personal-knowledge-graph/adrs/043-codex.md) — Accepted, 2026-06-21
- [ADR 044: Codex Code Review](https://robbiepalmer.me/projects/personal-knowledge-graph/adrs/044-codex-code-review.md) — Accepted, 2026-06-21
- [ADR 045: Qodo](https://robbiepalmer.me/projects/personal-knowledge-graph/adrs/045-qodo.md) — Deprecated, 2026-06-21
- [ADR 046: Custom Agentic Code Review](https://robbiepalmer.me/projects/personal-knowledge-graph/adrs/046-custom-agentic-code-review.md) — Deprecated, 2026-06-21
- [ADR 047: Trivy Security Scanner](https://robbiepalmer.me/projects/personal-knowledge-graph/adrs/047-trivy.md) — Accepted, 2026-06-21
- [ADR 049: Zizmor & actionlint (GitHub Actions Security)](https://robbiepalmer.me/projects/personal-knowledge-graph/adrs/049-zizmor.md) — Accepted, 2026-06-27
- [ADR 050: Simple Icons and SVGL](https://robbiepalmer.me/projects/personal-knowledge-graph/adrs/050-simple-icons-and-svgl.md) — Accepted, 2026-06-30
- [ADR 051: TFLint (Terraform Linting)](https://robbiepalmer.me/projects/personal-knowledge-graph/adrs/051-tflint.md) — Accepted, 2026-07-20
- [ADR 052: Knip (Dead Code & Dependency Hygiene)](https://robbiepalmer.me/projects/personal-knowledge-graph/adrs/052-knip.md) — Accepted, 2026-07-20
- [ADR 053: OpenSSF Scorecard (Repo Security Posture)](https://robbiepalmer.me/projects/personal-knowledge-graph/adrs/053-openssf-scorecard.md) — Accepted, 2026-07-20
- [ADR 054: Gitleaks (Secret Scanning)](https://robbiepalmer.me/projects/personal-knowledge-graph/adrs/054-gitleaks.md) — Accepted, 2026-07-20
- [ADR 055: typos (Spell Checking)](https://robbiepalmer.me/projects/personal-knowledge-graph/adrs/055-typos.md) — Accepted, 2026-07-20
- [ADR 056: Stateful AI Code Review](https://robbiepalmer.me/projects/personal-knowledge-graph/adrs/056-stateful-ai-code-review.md) — Proposed, 2026-07-25
- [ADR 057: Food Ontology Alignment](https://robbiepalmer.me/projects/personal-knowledge-graph/adrs/057-food-ontology-alignment.md) — Proposed, 2026-08-23
- [ADR 058: Project Pitch Decks](https://robbiepalmer.me/projects/personal-knowledge-graph/adrs/058-project-pitch-decks.md) — Proposed, 2026-08-30
- [ADR 059: Model Shared Defaults as Temporal Platform Layers](https://robbiepalmer.me/projects/personal-knowledge-graph/adrs/059-temporal-platform-layers.md) — Accepted, 2026-09-12

---

Markdown index of this site: https://robbiepalmer.me/llms.txt
