Files
summercms/.planning/phases/11.2-ready-to-share-summercms-io-website-and-newsletter-plugin/11.2-DISCUSSION-LOG.md

173 lines
7.5 KiB
Markdown

# Phase 11.2: Ready to share: summercms.io website and newsletter plugin - 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-09-29
**Phase:** 11.2-ready-to-share-summercms-io-website-and-newsletter-plugin
**Areas discussed:** Website build & hosting, Landing page content, Signup & opt-in flow, Plugin shape & future
---
## Website build & hosting
| Option | Description | Selected |
|--------|-------------|----------|
| Prerendered (vite-ssg) | Vite + Vue with build-time prerendering | |
| Nuxt 4 (static generate) | Same stack as vue-fonoteka-app, `nuxt generate` | ✓ |
| Plain Vue SPA | Empty HTML shell until JS runs | |
| Option | Description | Selected |
|--------|-------------|----------|
| Embedded in the Go binary | go:embed site + docs, one binary | ✓ |
| Served from disk by the binary | dist/ next to the binary | |
| Static host/CDN + API binary | Separate hosting, needs CORS | |
| Option | Description | Selected |
|--------|-------------|----------|
| English only | Docs are English | |
| English + Polish | vue-i18n + phrasebook for site and mail | ✓ |
| Option | Description | Selected |
|--------|-------------|----------|
| New framework module | Reusable public static handler in summercms.go | |
| In sm-summercms-app only | App-local handler | |
| You decide | Research picks | |
**User's choice:** Nuxt 4 static generate, embedded in the binary, EN + PL. Serving: "we do as we did in wintercms - sm-summercms-plugin that does all the stuff around serving data. this is proven approach, used in figs.org.pl, golem15.com etc".
**Notes:** The user first asked what "serving code" meant. After the explanation they chose a site plugin, which added a fourth repo.
---
## Landing page content
| Option | Description | Selected |
|--------|-------------|----------|
| Hero + signup | Pitch with signup in the hero | ✓ |
| What it is / features | Feature list | ✓ |
| Coming from WinterCMS | Side-by-side, links to the 11.1 concept map | ✓ |
| Status & roadmap | Honest pre-release block | ✓ |
**User's choice:** All four. Notes on the WinterCMS section: "nice if it would have some cool way that it started in October (OctoberCMS) went trough WinterCMS but now it's time for Summer".
**Other answers:** status tone was clear pre-release (the recommended option); no repo link yet (recommended); "Built by Golem15" credit (recommended).
---
## Signup & opt-in flow
| Question | Options | Selected |
|----------|---------|----------|
| Spam guard | Honeypot + rate limit / Cloudflare Turnstile | Honeypot + rate limit |
| Consent | Required checkbox / Notice text only | Required checkbox |
| Re-signup | Same neutral response / Tell the user their status | Same neutral response |
| After confirm | Thank-you page + welcome mail / Thank-you page only | Thank-you page + welcome mail |
---
## Plugin shape & future
| Question | Options | Selected |
|----------|---------|----------|
| Users | Standalone subscribers / Optional link to users | Standalone |
| Schema | Subscribers only, sending-ready / Port all PHP tables now | Subscribers only, sending-ready |
| Admin | List+filter+delete / Also CSV export / Also manual add/edit | Free text: "add/edit/delete are must be, csv export - i don't think we have that ready within framework so it waits." |
| Module path | git.golem15.com / github.com/golem15com | git.golem15.com |
| Admin add status | Pending + confirmation mail / Admin chooses | Pending + confirmation mail |
**Notes:** The first question batch in this area failed in the UI and was asked again.
---
## Claude's Discretion
- How long tokens stay valid, the resend throttle, the token format and the URL scheme.
- Visual design within the Direction C v2 brand, and the copy.
- Whether the plugin or the root app embeds the Nuxt build, and how the docs are mounted.
## Deferred Ideas
- CSV export of subscribers, which needs framework support.
- Sending newsletters and merging audiences, in a later phase.
- Renaming fonoteka.go to sm-fonoteka-app.
- A source repo link on the landing page.
- Polish docs.
---
---
# Update 2026-10-01: Alpha 0.1 landing page
**Date:** 2026-10-01
**Phase:** 11.2, reshaped into "summercms.io Alpha 0.1 landing page on SummerCMS" (newsletter split into 11.3)
**Areas discussed:** Database at runtime, Server and deploy flow, Design to Nuxt, Get started accuracy, Docs and release
## Database at runtime
| Option | Description | Selected |
|--------|-------------|----------|
| Run Postgres on server | Stock serve path, no framework change | ✓ (already installed) |
| Make DB optional in framework | surf serve skips lagoon without DB config | |
| Site plugin's own serve cmd | DB-less command for / and /docs | |
**User's choice:** Postgres 15.19 is already installed and running on rome (Debian 12).
| Option | Description | Selected |
|--------|-------------|----------|
| Use PG 15 on rome as-is | Deploy against 15, docs keep 16 | |
| Upgrade rome to PG 16 | PGDG repo | |
| Verify on 15, then relax the docs | Run DB tests on 15, document "15 or newer" | ✓ |
| Option | Description | Selected |
|--------|-------------|----------|
| Dedicated role + database | `summercms` role, `summercms_io` DB, migrate per deploy | ✓ |
| Peer auth over Unix socket | No password, OS user = DB role | |
## Server and deploy flow
| Question | Options | Selected |
|----------|---------|----------|
| Build where | Locally + rsync / On rome from git / CI | Locally + rsync |
| /backend exposure | Not exposed / Exposed / Restricted | Not exposed |
| TLS | Existing certbot / Something else | Existing certbot |
| Cutover | Replace nginx block in place / Staging subdomain | Replace in place |
| Port and user | You decide / I'll specify | You decide |
## Design to Nuxt
| Question | Options | Selected |
|----------|---------|----------|
| Fonts | @nuxt/fonts self-host / Google CDN | @nuxt/fonts self-host |
| CSS | Plain CSS with tokens / Tailwind v4 | Plain CSS with tokens |
| Sun art | From live site / I'll provide / Placeholder | From live site: `http://summercms.io/logo.png` |
| i18n | @nuxtjs/i18n en only / Hardcoded | @nuxtjs/i18n en only |
| SEO | Basic meta + OG / Full @nuxtjs/seo / Meta only | Full @nuxtjs/seo (like fonoteka) |
| showRays/scrollSpy | Hardcode on / App config | App config |
## Get started accuracy
Finding: `git.golem15.com/golem15/summercms` requires login, and the terminal card had no clone step.
| Question | Options | Selected |
|----------|---------|----------|
| Source repo | Make public at launch / Hide links / Public mirror | Make public at launch |
| Terminal copy | Add a clone line / Keep verbatim / go install @latest | Add a clone line |
| Verify commands | Scripted check / Manual UAT | Scripted check |
## Docs and release
| Question | Options | Selected |
|----------|---------|----------|
| Docs → landing link | Optional `site_url` in site.yaml / Leave as-is | Optional `site_url` |
| Release tag | Tag framework v0.1.0 / Track master | Tag v0.1.0 |
| Repo home | Sibling of summercms.go / Also meta-repo submodule | Sibling of summercms.go |
## Claude's Discretion (2026-10-01)
- The port, system user and paths on rome; where the embeds live (plugin or root app); 404 handling; image derivatives and the OG layout; where the command check lives; reduced-motion handling.
## Deferred Ideas (2026-10-01)
- `go install ...@latest` as the install path (needs a go-gettable module path).
- A CI build pipeline.
- An optional DB in `summer serve`.