diff --git a/README.md b/README.md index 8cd1b08..7bf2dab 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [![license](https://img.shields.io/badge/license-AGPL--3.0-22863A?style=flat-square)](LICENSE) [![go](https://img.shields.io/badge/Go-1.26+-00ADD8?style=flat-square&logo=go&logoColor=white)](https://go.dev) -[![modules](https://img.shields.io/badge/modules-14-5C4EE5?style=flat-square)]() +[![modules](https://img.shields.io/badge/modules-15-5C4EE5?style=flat-square)]() > *For those who come after.* @@ -54,6 +54,7 @@ API requires exactly three: **`core` + `web` + one `db-*`**. | [`worker`][worker] | v1.0.0 | Concurrent background worker pool | `contracts` | | [`httpclient`][httpclient] | v1.0.0 | Resilient outbound HTTP client | `contracts` `core` | | [`smtp`][smtp] | v1.0.0 | SMTP email delivery with no-op fallback | `contracts` `core` | +| [`spa-server`][spa-server] | v1.0.0 | Container-first static server for SPAs / PWAs (Docker base image) | `contracts` `core` | --- @@ -76,6 +77,7 @@ graph TD worker["worker\nv1.0.0"] httpclient["httpclient\nv1.0.0"] smtp["smtp\nv1.0.0"] + spa_server["spa-server\nv1.0.0"] contracts --> core contracts --> web @@ -106,6 +108,8 @@ graph TD core --> httpclient contracts --> smtp core --> smtp + contracts --> spa_server + core --> spa_server classDef foundation fill:#b45309,stroke:#78350f,color:#fff classDef weblayer fill:#1d4ed8,stroke:#1e3a8a,color:#fff @@ -117,7 +121,7 @@ graph TD class web,auth,auth_jwt weblayer class auth_firebase deferred class db_postgres,db_mysql,db_sqlite,cache_valkey,storage_minio datalayer - class telemetry,worker,httpclient,smtp standalone + class telemetry,worker,httpclient,smtp,spa_server standalone ``` **Arrow direction:** dependency flows downward — a module above provides interfaces consumed by the module below it. @@ -127,7 +131,7 @@ graph TD | Amber | Foundation — `contracts`, `core` | | Blue | Web layer — `web`, `auth`, `auth-jwt` | | Green | Data layer — `db-*`, `cache-*`, `storage-*` | -| Purple | Standalone — `telemetry`, `worker`, `httpclient`, `smtp` | +| Purple | Standalone — `telemetry`, `worker`, `httpclient`, `smtp`, `spa-server` | | Grey (dashed) | Deferred — not yet released | Data modules (`db-*`, `cache-*`, `storage-*`) never import `web`. Repositories do @@ -135,6 +139,16 @@ not know HTTP exists. This boundary is absolute. --- +## Tooling + +Companion tooling for developing *on* Einherjar — not framework modules; nothing imports these. + +| Tool | Version | Purpose | +|---|---|---| +| [`mcp`][mcp] | v1.0.0 | Model Context Protocol server — teaches AI assistants the framework: modules, symbols, ADRs, wiring conventions, and a ready-to-write project scaffold | + +--- + ## The Law `contracts` is the constitution of this framework — pure interfaces, zero @@ -189,3 +203,5 @@ Contributions are accepted under the terms of the [Contributor License Agreement [worker]: https://code.nochebuena.dev/einherjar/worker [httpclient]: https://code.nochebuena.dev/einherjar/httpclient [smtp]: https://code.nochebuena.dev/einherjar/smtp +[spa-server]: https://code.nochebuena.dev/einherjar/spa-server +[mcp]: https://code.nochebuena.dev/einherjar/mcp