# Personal Engineering Platform

> Shared, dated engineering defaults for personal projects

- HTML version: https://robbiepalmer.me/projects/personal-engineering-platform
- Status: live
- Started: 2026-09-12
- Technologies: TypeScript, Python, Zod, Pydantic, pytest-cases, Cloudflare Workers, Terraform, PostHog, Netdata, PostgreSQL, Neon, DuckDB

# Purpose

The Personal Engineering Platform owns reusable engineering policy. Projects
opt into named layers and keep their own decision histories for product choices
and deliberate overrides.

The manifest below the project introduction is the source of truth for current
defaults. Every policy and selection has an effective period and a deciding
ADR, so historical project stacks do not change when the platform does.

# Scope

The platform records choices that apply across projects: repository and CI
defaults, language tooling, application runtimes, infrastructure, telemetry,
and data stores. It does not own product architecture or employer policy.

Required slots apply to every project that uses their layer. Preferred slots
apply only after a project records that it needs the capability.

## Current layer manifest

### Base

Repository, task-running, CI, and common security defaults.

- project.primary-language: required

### TypeScript

Defaults for projects whose primary language is TypeScript. Activated when project.primary-language resolves to typescript.

- typescript.schema-validation: required

### Python

Defaults for projects whose primary language is Python. Activated when project.primary-language resolves to python.

- python.data-validation: required
- python.test-cases: required

### Web application

Defaults for browser-delivered applications.

### Backend API

Defaults for network APIs and server-side application code.

- backend-api.runtime: preferred

### Infrastructure

Defaults for provisioning and infrastructure management.

- infrastructure.provisioner: preferred

### Observability

Defaults for application telemetry and node monitoring.

- observability.application-telemetry: preferred
- observability.node-monitoring: preferred

### Database

Conditional defaults for transactional and analytical data.

- database.relational-engine: preferred
- database.relational-host: preferred
- database.olap-engine: preferred

## Default history

### Primary language

The language that determines the project's language-tooling layer.

- [typescript](https://robbiepalmer.me/technologies/typescript.md): Accepted, 2026-09-12T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/001-language-defaults.md); driven by [personal-site](https://robbiepalmer.me/projects/personal-site.md)
- Users: [agent-first-writing](https://robbiepalmer.me/projects/agent-first-writing.md), [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-site](https://robbiepalmer.me/projects/personal-site.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md)
- Overrides: [agent-first-writing:009-primary-language-python](https://robbiepalmer.me/projects/agent-first-writing/adrs/009-primary-language-python.md)

### TypeScript schema validation

Runtime validation at TypeScript data boundaries.

- [zod](https://robbiepalmer.me/technologies/zod.md): Accepted, 2026-09-12T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/001-language-defaults.md); driven by [personal-site](https://robbiepalmer.me/projects/personal-site.md)

### Python data validation

Typed validation for Python inputs and configuration.

- [pydantic](https://robbiepalmer.me/technologies/pydantic.md): Accepted, 2026-09-12T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/001-language-defaults.md); driven by [agent-first-writing](https://robbiepalmer.me/projects/agent-first-writing.md)

### Python test cases

Reusable and parameterised Python test cases.

- [pytest-cases](https://robbiepalmer.me/technologies/pytest-cases.md): Accepted, 2026-09-12T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/001-language-defaults.md); driven by [agent-first-writing](https://robbiepalmer.me/projects/agent-first-writing.md)

### Backend API runtime

The managed runtime for an HTTP API.

- [cloudflare-workers](https://robbiepalmer.me/technologies/cloudflare-workers.md): Accepted, 2026-09-12T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/002-cloudflare-workers.md); driven by [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md)
- Users: [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md)

### Infrastructure provisioner

Declarative provisioning for managed infrastructure.

- [terraform](https://robbiepalmer.me/technologies/terraform.md): Accepted, 2026-09-12T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/003-terraform.md); driven by [personal-site](https://robbiepalmer.me/projects/personal-site.md)
- Users: [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-site](https://robbiepalmer.me/projects/personal-site.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md)

### Application telemetry

Product analytics, traces, logs, and application-level signals.

- [posthog](https://robbiepalmer.me/technologies/posthog.md): Accepted, 2026-09-12T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/004-observability.md); driven by [personal-site](https://robbiepalmer.me/projects/personal-site.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md)
- Users: [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-site](https://robbiepalmer.me/projects/personal-site.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md)

### Node monitoring

Host and node health metrics for operated machines.

- [netdata](https://robbiepalmer.me/technologies/netdata.md): Accepted, 2026-09-12T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/004-observability.md); driven by [homelab](https://robbiepalmer.me/projects/homelab.md)
- Users: [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [personal-site](https://robbiepalmer.me/projects/personal-site.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md)

### Relational database engine

Transactional relational storage when a project needs it.

- [postgresql](https://robbiepalmer.me/technologies/postgresql.md): Accepted, 2026-09-12T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/005-database-defaults.md); driven by [recipe-site](https://robbiepalmer.me/projects/recipe-site.md)
- Users: [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md)

### Managed relational host

A managed host for the selected relational engine.

- [neon](https://robbiepalmer.me/technologies/neon.md): Accepted, 2026-09-12T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/005-database-defaults.md); driven by [recipe-site](https://robbiepalmer.me/projects/recipe-site.md)
- Users: [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md)

### OLAP engine

Analytical SQL processing when a project needs it.

- [duckdb](https://robbiepalmer.me/technologies/duckdb.md): Accepted, 2026-09-12T00:00:00Z to present; [decision](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/005-database-defaults.md); driven by [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md)
- Users: [agentic-code-review](https://robbiepalmer.me/projects/agentic-code-review.md), [recipe-site](https://robbiepalmer.me/projects/recipe-site.md)


## 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: Temporal platform layers](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/000-temporal-platform-layers.md) — Accepted, 2026-09-12
- [ADR 001: TypeScript and Python language defaults](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/001-language-defaults.md) — Accepted, 2026-09-12
- [ADR 002: Cloudflare Workers for backend APIs](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/002-cloudflare-workers.md) — Accepted, 2026-09-12
- [ADR 003: Terraform for infrastructure provisioning](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/003-terraform.md) — Accepted, 2026-09-12
- [ADR 004: Separate application telemetry from node monitoring](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/004-observability.md) — Accepted, 2026-09-12
- [ADR 005: Capability-specific database defaults](https://robbiepalmer.me/projects/personal-engineering-platform/adrs/005-database-defaults.md) — Accepted, 2026-09-12

---

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