Part 4 of Be Your Own Identity Provider — the UI package binds all eight auth view contracts to Lattice pages, and ships its React through Composer. The first real consumer of a mechanism I built for something else.
Part 3 of Be Your Own Identity Provider — the client package: Authorization Code + PKCE against any provider, strict id_token validation, and trading a login session for short-lived, audience-scoped API tokens.
Part 2 of Be Your Own Identity Provider — Passport gives you an OAuth2 authorization server, not an OIDC one. What the gap actually is, and how the server package fills it without reimplementing the protocol.
Part 1 of Be Your Own Identity Provider — what OAuth2 and OIDC actually are, why MCP put both in front of every backend developer, and why I built a Laravel package instead of paying a vendor.
Part 13 of Building Lattice — an experimental POC where a page embeds a component whose data comes from a different application, exchanged through short-lived, audience-scoped browser tokens. Including the parts I'm not sure about.
Part 12 of Building Lattice — a server-driven UI is more testable, not less. Tests assert against the exact schema the user receives and drive the real endpoints, with no browser and no duplicated contract.
Part 11 of Building Lattice — every wire type the server can emit is generated into TypeScript from the PHP classes themselves, so drift between backend and frontend is a compile error, not a runtime surprise.
Part 10 of Building Lattice — distribute a custom component's PHP class and its React renderer as a single Composer package. No npm publish; the Vite plugin compiles the renderer straight into the consuming app.
Part 9 of Building Lattice — a notification bell built on Laravel's native notifications table, where each notification is a self-describing payload the bell renders, actions and all.
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.