diff --git a/.planning/ROADMAP.md b/.planning/ROADMAP.md index f80a6875..8c0f82d6 100644 --- a/.planning/ROADMAP.md +++ b/.planning/ROADMAP.md @@ -38,7 +38,7 @@ Decimal phases appear between their surrounding integers in numeric order. - [x] **Phase 19.1: Chat satellites** - Port chatbots, chatvideo, forum, herald and userfriends (completed 2026-10-18) - [ ] **Phase 19.3: Framework transport and infrastructure for WavePath** - Cookie refresh, credentialed CORS, cache and Redis rate limits, S3 option, OpenAPI page, Turnstile - [x] **Phase 19.4: OIDC provider on wristband** - Discovery, JWKS with key rotation, id_token, userinfo, consent and pairwise subjects (completed 2026-10-20) -- [ ] **Phase 19.4.1: Early public demo on demo.summercms.io** - sm-demo-app with today's shared plugins on rome: demo accounts, journal, presentations, quizzes and an OIDC sample; backend by request +- [ ] **Phase 19.4.1: Early public demo on demo.summercms.io** - sm-demo-app with today's shared plugins on rome: open registration, guided tour, journal, bm's presentation system, quizzes, payments; backend by request - [ ] **Phase 19.5: Social login in sm-user-plugin** - Google and Facebook login with the SPA one-time-code handoff - [ ] **Phase 19.6: Two-factor auth and device flow in sm-user-plugin** - TOTP, WebAuthn, email and recovery codes, trusted devices, device authorization - [ ] **Phase 19.7: Generic MCP module** - Opt-in MCP endpoint, plugin-declared tools filtered by permissions, one connector per person via OAuth and a verified account link @@ -1326,8 +1326,8 @@ Plans: 1. `sm-demo-app` is pushed to git.golem15.com, and its `go.mod` requires tagged versions of the framework and every shared plugin, so a release build compiles without the local `go.work`. 2. `https://demo.summercms.io` serves the Nuxt site and the Go backend from rome (nginx, supervisor, Postgres, TLS), with `DEPLOY.md` covering build, upload, release and rollback. `/backend` is refused by nginx, and the site carries a "want to see the backend? contact Golem15" call to action. - 3. Visitors sign in with prepared demo accounts whose credentials the login page shows; public sign-up is off. Demo data is reset nightly by `demo:seed`. - 4. The site has pages for the journal (blog), presentations and quizzes, plus a "Log in with SummerCMS" sample that runs the OIDC provider's flow end to end, alongside the existing home, FAQ and subscriptions pages. Templates come from `sm-bm-app`'s frontend where it has them. + 3. Visitors register themselves (Turnstile and rate limits, no credentials shown on the site); a banner on every page says the data may be reset and payments use Stripe test mode. A configurable reset job that wipes and reseeds through `demo:seed` exists and ships disabled. + 4. The homepage is a guided tour (journal, presentations, quizzes, payments, FAQ, accounts) in the summercms.io look, in English and Polish. The full bm presentation system (public, speaker, phone remote, own decks) runs on its own Centrifugo, and a roadmap deck generated from ROADMAP.md shows the features with links and the OIDC provider as screenshots. Quizzes keep logged-in attempts. 5. The new code has unit tests, delivered in the phase's last plan. **Plans:** 0 plans diff --git a/.planning/phases/19.4.1-early-public-demo-on-demo-summercms-io/19.4.1-CONTEXT.md b/.planning/phases/19.4.1-early-public-demo-on-demo-summercms-io/19.4.1-CONTEXT.md new file mode 100644 index 00000000..d96e0548 --- /dev/null +++ b/.planning/phases/19.4.1-early-public-demo-on-demo-summercms-io/19.4.1-CONTEXT.md @@ -0,0 +1,132 @@ +# Phase 19.4.1: Early public demo on demo.summercms.io - Context + +**Gathered:** 2026-10-20 +**Status:** Ready for planning + + +## Phase Boundary + +Clients can be shown a live demo at `https://demo.summercms.io` now, before the chat family lands (Phase 20). `sm-demo-app` with today's 16 shared plugins is pushed to git.golem15.com, builds against tagged framework and plugin versions, and runs on rome. Its public Nuxt site (`vue-demo-app`) is a guided tour of what SummerCMS does: journal, presentations (the full bm presentation system), quizzes, payments (subscriptions as the showcase), FAQ and accounts. The admin backend stays private. + +Not in this phase: the chat family (Phase 20), a live OIDC "log in with" relying party (screenshots in the deck instead), a public or read-only admin. + + + + +## Implementation Decisions + +### Roadmap and hosting +- **D-01:** Inserted as 19.4.1, after 19.4 and before 19.5-19.7. Phase 20 narrows to adding the chat family to this live demo. +- **D-02:** Hosted on rome (`ssh debian@10.8.3.118 -p 2222`, passwordless sudo), next to summercms.io and bm, following `sm-summercmsio-app/DEPLOY.md` (nginx, supervisor, PostgreSQL 15 database and role of its own, TLS via certbot, a `DEPLOY.md` with build, upload, release, rollback). The DNS record for `demo.summercms.io` is created by the user. +- **D-03:** `sm-demo-app` gets a git.golem15.com remote, and its `go.mod` requires tagged versions of the framework and every shared plugin, so a release build compiles without `go.work`. Plugins without a suitable tag get one (additive changes are patch tags, potentially breaking ones minor) — **Reversibility:** one-way — pushed Go module tags are cached by proxies and cannot be reused. +- **D-04:** `/backend` is refused by nginx. The site carries a "want to see the backend? contact Golem15" call to action that opens a contact form on the `golem15.feedback` plugin (submissions land in its admin and by mail). + +### Accounts, registration and reset +- **D-05:** Frontend registration is open, as in bm. No demo credentials are shown anywhere on the site. +- **D-06:** `demo:seed` creates one known visitor account whose credentials live only in `.env`/`DEPLOY.md`, for the user's own walkthroughs (including the subscribe flow). +- **D-07:** Register and login are protected by Cloudflare Turnstile (`bouncer.Turnstile`, `turnstile:closed` in production) plus the existing per-IP rate limits. No email verification. +- **D-08:** Payments run in Stripe test mode; checkout uses the test card. Stripe webhooks point at `demo.summercms.io`. +- **D-09:** A reset job wipes and reseeds all demo data (users, posts, quiz attempts, subscriptions, uploads) via `demo:seed`. Its schedule is configurable and it ships **disabled**. +- **D-10:** A banner on every page says this is a demo, data may be reset at any time, and payments use Stripe test mode with card `4242 4242 4242 4242`. + +### Home page and look +- **D-11:** The homepage is a guided tour: a hero, then one card per feature (journal, presentations, quizzes, **payments**, FAQ, accounts), each with a sentence and a link to try it, then the backend call to action. The card says "Payments", not "Subscriptions": the Payment Gateway supports all kinds of payments, and subscriptions are the showcase flow. +- **D-12:** The look matches summercms.io (palette, type, header style); reuse `sm-summercmsio-app/vue-summercmsio-app` components and CSS tokens where practical. +- **D-13:** English and Polish with a language switcher. `demo:seed` writes both languages of the seeded content (posts, quiz, deck slides, FAQ) through the translate plugin, so switching changes content as well as UI. + +### Presentations and quizzes +- **D-14:** The full presentation system comes over from bm's frontend: public view, speaker view, phone remote (pilot), My Presentations. bm is a Vite + Vue Router SPA, so its views and components are ported into Nuxt pages in `vue-demo-app`. +- **D-15:** Any registered user can create decks and present them with the remote; the seeded roadmap deck is public to everyone. +- **D-16:** The roadmap deck is generated by `demo:seed` from the framework's `.planning/ROADMAP.md` (phases done and next) plus a curated feature list with links to the demo pages and the docs. The OIDC provider is shown on slides with screenshots and no links. The deck stays current with each deploy. +- **D-17:** The demo runs its own Centrifugo instance on rome (own secrets and namespace) for speaker and remote sync through `lighthouse`, separate from bm's. +- **D-18:** Quizzes need a login: a registered user takes a seeded quiz and sees score and past attempts; anonymous visitors see the quiz list and a "register to take it" prompt. + +### Claude's Discretion +- How the Nuxt app is served on rome (SSR under Node/supervisor like the summercms.io changelog, or prerendered where pages allow), and the nginx split between Go and Nuxt routes (`sm-demo-app/DEPLOY.md` sketches the Go paths). +- Where the ROADMAP.md text comes from at seed time (embedded at build, or fetched from the framework tag), and how the OIDC screenshots are captured and stored. +- The reset job's mechanism (conga/River scheduled job or a console command under cron) and its config key names. +- Journal page layout (list, post, author card, categories) within the summercms.io look. + +### Folded Todos +- **Expose author subtitle, description and avatar on the Journal author API** (`.planning/todos/pending/journal-author-profile-fields.md`, g15office `esrp4qtx`): the demo's journal pages show author cards, which need these fields. +- **Prompt open admin and site tabs to reload when a new version is deployed** (`.planning/todos/pending/2026-10-11-reload-open-apps-when-a-new-version-is-deployed.md`, g15office `ltcvqext`): the demo is redeployed often; port bm's implementation (`sm-bm-app/frontend/src/stores/pwa.ts`, `src/pwa/sw.js`, the version check in `src/api/http.ts`). + + + + +## Canonical References + +**Downstream agents MUST read these before planning or implementing.** + +### The demo app +- `../sm-demo-app/README.md` — plugins, local run (`scripts/dev.sh`), ports, seed +- `../sm-demo-app/DEPLOY.md` — deployment sketch: Go route list for nginx, `.env`, Stripe webhook, tags before deploy +- `../sm-demo-app/deploy/env.example` — environment keys +- `../sm-demo-app/summer.yaml` — the 16 plugins and their modules +- `../sm-demo-app/plugins/demo/console/seed.go` — `demo:seed` +- `../sm-demo-app/vue-demo-app/` — Nuxt 4 site extending vue-journal-layer, vue-menu-layer, vue-faq-layer, vue-paymentgateway-layer + +### Templates to port (bm) +- `../sm-bm-app/frontend/src/views/` — `PresentationPublicView.vue`, `PresentationSpeakerView.vue`, `PresentationRemoteView.vue`, `MyPresentationsView.vue`, `QuizzesView.vue`, `QuizView.vue`, `LoginView.vue`, `RegisterView.vue` +- `../sm-bm-app/frontend/src/components/deck/`, `src/components/remote/`, `src/deck/` — deck rendering and remote +- `../sm-bm-app/frontend/src/lib/realtime.ts` — Centrifugo client; `../sm-bm-app/realtime_test.go` — token route and proxy contract +- `../sm-bm-app/frontend/src/stores/pwa.ts`, `src/pwa/sw.js` — reload-on-deploy +- `../sm-bm-app/DEPLOY.md` — Centrifugo and supervisor setup on rome + +### Look and deploy pattern (summercms.io) +- `../sm-summercmsio-app/vue-summercmsio-app/app/components/` — header, hero, feature sections, footer to mirror +- `../sm-summercmsio-app/DEPLOY.md` — rome layout, nginx, supervisor, certbot, release and rollback steps + +### Framework +- `modules/bouncer/README.md` — Turnstile verifier and `turnstile:open`/`turnstile:closed` middleware +- `modules/lighthouse/README.md` — realtime channels on Centrifugo +- `.planning/ROADMAP.md` — source of the roadmap deck (D-16) +- `.planning/notes/2026-10-18-roadmap-reorder-demo-release-wavepath.md` — why the demo exists and its open questions (answered here) + + + + +## Existing Code Insights + +### Reusable Assets +- `demo:seed` already fills journal, menu, FAQ, presentations ("getting-started"), quizzes ("summercms-basics"), subscription plans (starter, professional) and the sitemap; it is idempotent ("exists" on rerun). +- The Nuxt layers (journal v0.5.0, menu v0.3.0, faq v0.3.0, paymentgateway v0.2.1) provide data fetching, pages and the shared site-cache purge route. +- bm's presentation and quiz views are complete and tested against the same `sm-presentations-plugin` and `sm-quizzes-plugin` APIs. +- `golem15.feedback` provides the contact form backend. + +### Established Patterns +- Apps require tagged framework and plugin versions and replace them locally (CLAUDE.md "Sibling repositories"); plugin push first, pointer bump second. +- rome deployments: binary under supervisor, Nuxt output under Node supervisor where SSR is needed, nginx sending `/backend` nowhere and Go paths to the binary. +- Site cache purge after admin saves is framework-level since 19.3-04 (`cooler`), so content edits show at once. + +### Integration Points +- nginx route split between Go (`/_user/`, `/_journal/`, `/_menu/`, `/_faq/`, `/_paymentgateway/`, `/_paymentgatewaysubscriptions/`, `/_feedback/`, `/webhook/stripe/`, `/storage/app/uploads/public`, `/sitemap.xml`, the presentations and quizzes APIs, the realtime token route) and Nuxt. +- `storage.uploads.serve: true` is set in `config/storage.yaml` (quick task 261020-13e era); public uploads are served by the app. +- Stripe test keys and webhook secret in the server `.env`. + + + + +## Specific Ideas + +- The roadmap presentation doubles as the sales deck: ROADMAP.md plus the feature list with links into the demo; the OIDC provider appears as screenshots (consent page, branded error page, Clients admin) without links. +- The user will personally walk through the subscribe flow with the seeded visitor account. +- "Payments" is the label everywhere on the tour; subscriptions are presented as one flow the Payment Gateway supports. + + + + +## Deferred Ideas + +- A live "Log in with SummerCMS" relying-party sample — replaced by screenshots for now; revisit when a client asks to try it. +- Chat, channels, video calls, chatbots, forum, herald, friends on the demo — Phase 20. + +### Reviewed Todos (not folded) +- **Purge the Nuxt site cache on menu and FAQ admin saves** (`site-cache-purge-for-menu-and-faq.md`, g15office `zugdxorb`) — already implemented in 19.3-04 (folded there as D-10/D-11); the todo closes when Phase 19.3 completes. + + + +--- + +*Phase: 19.4.1-early-public-demo-on-demo-summercms-io* +*Context gathered: 2026-10-20* diff --git a/.planning/phases/19.4.1-early-public-demo-on-demo-summercms-io/19.4.1-DISCUSSION-LOG.md b/.planning/phases/19.4.1-early-public-demo-on-demo-summercms-io/19.4.1-DISCUSSION-LOG.md new file mode 100644 index 00000000..6b89d26a --- /dev/null +++ b/.planning/phases/19.4.1-early-public-demo-on-demo-summercms-io/19.4.1-DISCUSSION-LOG.md @@ -0,0 +1,157 @@ +# Phase 19.4.1: Early public demo on demo.summercms.io - Discussion Log + +> **Audit trail only.** Do not use as input to planning, research, or execution agents. +> Decisions are captured in CONTEXT.md — this log preserves the alternatives considered. + +**Date:** 2026-10-20 +**Phase:** 19.4.1-early-public-demo-on-demo-summercms-io +**Areas discussed:** Pre-discussion (at insertion), Folded todos, Demo accounts & reset, Home page & look, Presentations & quizzes + +--- + +## Pre-discussion (when the phase was inserted) + +| Option | Description | Selected | +|--------|-------------|----------| +| Insert 19.4.1 now | New decimal phase after 19.4, before 19.5-19.7; Phase 20 shrinks | ✓ | +| Pull Phase 20 forward | One demo phase run next, chat later | | +| Quick task, no phase | Deploy as-is, no new pages | | + +| Option | Description | Selected | +|--------|-------------|----------| +| Prepared demo accounts | Seeded accounts, no sign-up, nightly reset | ✓ (later revised, see below) | +| Open sign-up | Visitors register | | + +| Option | Description | Selected | +|--------|-------------|----------| +| Closed, by request | nginx blocks /backend, contact call to action | ✓ | +| Read-only demo admin | Public restricted admin login | | + +Pages (multi): Journal ✓, Presentations ✓, Quizzes ✓, OIDC sample ✓. +**Notes:** "We have templates for most in bm and we can reuse them." Hosting: "this will go to rome". + +## Folded todos + +| Option | Description | Selected | +|--------|-------------|----------| +| Purge Nuxt cache on menu/FAQ saves | Framework purge service | | +| Journal author API fields | Author subtitle, description, avatar | ✓ | +| Reload prompt after deploy | Prompt tabs to reload on new version | ✓ | +| None | Keep separate | | + +**Notes:** "Purge Nuxt cache should be done by now? If it's still in todos, review it. Reload should be easily portable from bm too." Review: the purge shipped in 19.3-04 (D-10/D-11 of 19.3); the todo closes with 19.3. + +## Areas selected + +Demo accounts & reset ✓, Home page & look ✓, Presentations & quizzes ✓, OIDC sample (not as a live flow). +**Notes:** "OIDC - do some screenshots and include in a presentation. Presentation will be presentation of our ROADMAP.md + list of features with links, OIDC won't have links. Full presentation system, can be copied over from BM. Pilot, both views etc." + +## Demo accounts & reset + +| Option | Description | Selected | +|--------|-------------|----------| +| 2: visitor + subscriber | Plain user and active subscriber | | +| 1 shared account | One login for everyone | | +| 3+: add presenter | Presenter account drives the deck | | + +**User's choice:** "visitor (i'll try to go trough subscribe flow myself) + frontend open register like on bm." + +| Option | Description | Selected | +|--------|-------------|----------| +| One-click 'Log in as' buttons | Buttons plus visible credentials | | +| Credentials shown, typed by hand | Printed on the page | | + +**User's choice:** "They are not." (no credentials shown) + +| Option | Description | Selected | +|--------|-------------|----------| +| Stripe test mode, 4242 card | Real test checkout | ✓ | +| Browse only, no checkout | No Stripe on rome | | + +| Option | Description | Selected | +|--------|-------------|----------| +| Everything, at 04:00 | Drop and reseed all demo data | ✓ (modified) | +| Only visitor-made data | Keep seeded content | | + +**Notes:** "1 but time configurable and disabled for now + clean warn on demo homepage." + +| Option | Description | Selected | +|--------|-------------|----------| +| Turnstile + rate limits | No email verification | ✓ | +| Email verification too | Activation email | | +| Rate limits only | No captcha | | + +| Option | Description | Selected | +|--------|-------------|----------| +| Seed one, credentials private | Known visitor for walkthroughs | ✓ | +| No seeded user | Register like anyone | | + +| Option | Description | Selected | +|--------|-------------|----------| +| Demo notice + test payments, every page | Banner site-wide | ✓ | +| Homepage only | Section on home | | + +## Home page & look + +| Option | Description | Selected | +|--------|-------------|----------| +| Guided plugin tour | Hero, feature cards, call to action | ✓ (modified) | +| Fake product site | Fictional company | | +| Lead with the presentation | Home opens the deck | | + +**Notes:** "1 but payments instead of subscriptions? showcase is subscriptions but we support all kind of payments with Payment Gateway." + +| Option | Description | Selected | +|--------|-------------|----------| +| summercms.io look | Same palette, type, header | ✓ | +| bm's look | Port bm styles | | +| Neutral starter theme | Plain theme | | + +| Option | Description | Selected | +|--------|-------------|----------| +| Feedback plugin form | Contact form on golem15.feedback | ✓ | +| mailto / golem15.com contact | Plain link | | + +| Option | Description | Selected | +|--------|-------------|----------| +| English only | One locale | | +| English + Polish | Two locales, switcher | ✓ | + +| Option | Description | Selected | +|--------|-------------|----------| +| Seed both languages | Content translated too | ✓ | +| UI only in Polish | Content stays English | | + +## Presentations & quizzes + +| Option | Description | Selected | +|--------|-------------|----------| +| Any registered user, own decks | My Presentations, speaker, remote | ✓ | +| Seeded deck only | View-only for visitors | | + +| Option | Description | Selected | +|--------|-------------|----------| +| Generated from ROADMAP.md at seed | Current with each deploy | ✓ | +| Hand-written once | Fixed slides | | + +| Option | Description | Selected | +|--------|-------------|----------| +| Own Centrifugo for the demo | Separate from bm | ✓ | +| Share bm's Centrifugo | Shared instance | | + +| Option | Description | Selected | +|--------|-------------|----------| +| Logged-in, attempts kept | Like bm | ✓ | +| Anonymous allowed | No stored results | | + +## Claude's Discretion + +- Nuxt serving mode on rome and the nginx route split +- Source of ROADMAP.md text at seed time; capturing and storing the OIDC screenshots +- Reset job mechanism and config keys +- Journal page layout + +## Deferred Ideas + +- Live "Log in with SummerCMS" relying-party sample (screenshots instead) +- Chat family on the demo (Phase 20)