diff --git a/README.md b/README.md index 374bfe3..2513a4b 100644 --- a/README.md +++ b/README.md @@ -1,35 +1,37 @@ # SummerCMS (Go) -A Go rewrite of the WinterCMS/OctoberCMS content management framework, built for the Golem15 stack. +## Framework, not the application -SummerCMS keeps what makes WinterCMS productive — plugins that extend each other, YAML-driven admin forms, models/controllers/components, scaffolding commands — and drops the parts that do not survive a compiled language. +SummerCMS is the Go framework for the Golem15 stack: compiled plugins, configuration, data primitives, HTTP routing, the admin shell, and parity tooling. The Płytarium application and its binary live in the sibling [`fonoteka.go`](../fonoteka.go) repository, so this checkout is not the application binary. -## Status +## Two-repository development layout -Pre-alpha. Planning and research. Nothing runs yet. +This repository has one `go.mod`; framework libraries live under [`modules/`](modules/). During development, `fonoteka.go/go.mod` uses a `replace git.golem15.com/golem15/summercms => ../summercms.go` directive to use this checkout. The same local-replace pattern is shown in [`examples/hello/go.mod`](examples/hello/go.mod), alongside the example's compiled plugin modules. -## Why Go +## Recreate the Phase 10 admin login -The first SummerCMS attempt was Scala 3. Three infrastructure modules were built (config, i18n, console) before the effort stalled on ecosystem depth: proven, reusable libraries for things like an OAuth2/OIDC server did not exist, and building them from scratch was out of budget. Go's ecosystem covers every concern in the Illuminate module map with maintained, widely used libraries. See `.planning/notes/why-go-not-scala.md` and `.planning/research/go-ecosystem.md`. +Follow the [Fonoteka database setup](../fonoteka.go/README.md#database-setup) to create a `pl-PL` Postgres database and set `SUMMER_DATABASE__DSN`; the app repository owns its configuration and credentials. From `fonoteka.go`, run: -## v1 target - -Port **Płytarium** (the `fonoteka` project): a headless WinterCMS backend with a Nuxt 4 frontend, 160 API routes, its own OAuth2 provider, Discogs and AI integrations, queued jobs, realtime notifications, and organization-scoped collections. - -Definition of done for v1: `vue-fonoteka-app` runs unchanged against the Go backend. - -See `.planning/notes/v1-target-plytarium.md`. - -## Architecture decisions so far - -- Compiled plugins, Caddy/xcaddy style: a `plugins/` workspace of Go modules, a generated import list, scaffold and rebuild commands, watch-rebuild in dev. -- A sandboxed WASM extension API for untrusted third-party extensions comes later, behind a stable core plugin API. -- Headless first. Admin is a schema-driven SPA. Server-rendered themes come with the second port target (keios.eu). - -## Layout - -``` -.planning/ GSD planning artifacts (notes, research, seeds, roadmap) +```bash +summer build +./bin/fonoteka migrate +./bin/fonoteka serve ``` -Everything else will be created by the GSD roadmap phases. +The admin SPA is embedded with `embed.FS` in that Fonoteka binary. Its configured backend URI is `/plytadmin`, so open the running app at that path; do not use `summer serve` from this framework repository to open the admin. + +## Honest cutover status + +A working local admin login is not a DNS flip of `plytarium.com`. The production flip is Phase 15, after jobs and search in Phase 11 and the remaining API routes in Phases 12–14. Until then, directing production to this binary would take the public Nuxt application and MCP service offline. The operator procedure remains in the PHP `docs/deploy/plytarium.com.md`; this is not a production deployment runbook. + +## Framework modules + +Each framework library has its own short onboarding note: + +- [`backpack`](modules/backpack/README.md), [`boardwalk`](modules/boardwalk/README.md), [`bonfire`](modules/bonfire/README.md), [`bouncer`](modules/bouncer/README.md), [`cabana`](modules/cabana/README.md), [`compass`](modules/compass/README.md) +- [`festival`](modules/festival/README.md), [`fetchguard`](modules/fetchguard/README.md), [`lagoon`](modules/lagoon/README.md), [`pact`](modules/pact/README.md), [`party`](modules/party/README.md), [`phrasebook`](modules/phrasebook/README.md) +- [`postcard`](modules/postcard/README.md), [`surf`](modules/surf/README.md), [`tide`](modules/tide/README.md), [`towel`](modules/towel/README.md), [`wire`](modules/wire/README.md), [`wristband`](modules/wristband/README.md) + +## Why Go and the v1 target + +SummerCMS replaces the earlier Scala attempt with a deliberately conventional Go stack; see [why Go, not Scala](.planning/notes/why-go-not-scala.md). Its v1 target is Płytarium: the existing Nuxt app and MCP server must run unchanged against the Go backend. See [the v1 target note](.planning/notes/v1-target-plytarium.md).