Part 8 of Building Lattice — declare a page's websocket listeners in PHP (channel, events, and the effects to run) and Lattice wires up the subscription. Server-driven realtime, no hand-written JS.
Part 7 of Building Lattice — a fragment is a reusable chunk of schema with its own endpoint, so heavy parts of a page load on demand instead of blocking the first render.
Part 6 of Building Lattice — layouts are server-described schemas with an Outlet where the page renders, and menus are PHP definitions that resolve their own routes.
Part 5 of Building Lattice — an action is a definition plus a handle() that returns effects, so a button click runs server code and dispatches a toast, a redirect or a refresh back to the client.
Part 4 of Building Lattice — declare columns in PHP and let Lattice handle sorting, filtering and pagination, backed by a data source that doesn't have to be Eloquent.
Part 3 of Building Lattice — a form is fields you declare and a handle() you write, validated live with Precognition and never bound to a model's columns.
Part 2 of Building Lattice — the contract underneath it all: PHP serializes a typed tree of nodes, and one React component renders it through a registry.
A walkthrough of how I deploy christlieb.eu — a Laravel app running on FrankenPHP, managed by Coolify on a Hetzner VPS. Multi-stage Dockerfile, three Docker Compose services, and a deployment workflow that stays out of the way.