[Playgrounds P4] Text layer — SpikerSoft-authored prose per section (our own book, in-shell) #327

Closed
opened 2026-07-02 00:50:57 +00:00 by spikerj · 2 comments
Owner

Phase P4 of epic #323. Second content layer (after books #326).

What: SpikerSoft's own written material about each section — we are writing our own book on these subjects. Editorial angle, consistently: you're new, we're old school, you have the tools — use them, here's how. Distinct from tutorial panels (which are step instructions); this is the narrative/why layer a student reads before or alongside the exercise.

Model (backend):

  • Authored-text entity per section/lesson (and optionally per TutorialPanel block) — markdown body, revision-aware (author, updated-at) so chapters can be drafted incrementally alongside SpikerSoft.Data/Mongos/Lesson.cs
  • Decide storage: embedded on the lesson document vs separate collection keyed by lesson/section — separate is likely better since the same chapter text can span a lesson range and be edited without touching lesson definitions
  • Serve through the anonymous-readable catalog/detail endpoints (LessonsController)
  • Staff authoring path: minimal admin CRUD (a new section under the existing admin surfaces) — seeding via Mongo seed files is acceptable for the first chapters

Frontend:

  • Render in the shared shell's Reading surface (shared with P3's books — books = external reading, text = our chapter)
  • Markdown rendering consistent with existing tutorial panel body rendering
  • i18n: authored content is en-first with es translations flowing through the established Transloco patch/review-queue workflow — the content model must carry language variants, not just UI chrome

Acceptance: a section with SpikerSoft text shows our chapter in the shell across all five playgrounds; the voice/angle guideline above is documented for authors (e.g. a CONTRIBUTING note or admin-page hint).

Phase P4 of epic #323. Second content layer (after books #326). **What:** SpikerSoft's own written material about each section — we are writing our own book on these subjects. Editorial angle, consistently: *you're new, we're old school, you have the tools — use them, here's how.* Distinct from tutorial panels (which are step instructions); this is the narrative/why layer a student reads before or alongside the exercise. **Model (backend):** - [ ] Authored-text entity per section/lesson (and optionally per `TutorialPanel` block) — markdown body, revision-aware (author, updated-at) so chapters can be drafted incrementally alongside `SpikerSoft.Data/Mongos/Lesson.cs` - [ ] Decide storage: embedded on the lesson document vs separate collection keyed by lesson/section — separate is likely better since the same chapter text can span a lesson range and be edited without touching lesson definitions - [ ] Serve through the anonymous-readable catalog/detail endpoints (`LessonsController`) - [ ] Staff authoring path: minimal admin CRUD (a new section under the existing admin surfaces) — seeding via Mongo seed files is acceptable for the first chapters **Frontend:** - [ ] Render in the shared shell's **Reading** surface (shared with P3's books — books = external reading, text = our chapter) - [ ] Markdown rendering consistent with existing tutorial panel body rendering - [ ] i18n: authored content is en-first with es translations flowing through the established Transloco patch/review-queue workflow — the content model must carry language variants, not just UI chrome **Acceptance:** a section with SpikerSoft text shows our chapter in the shell across all five playgrounds; the voice/angle guideline above is documented for authors (e.g. a CONTRIBUTING note or admin-page hint).
spikerj added the enhancement label 2026-07-02 00:50:57 +00:00
Author
Owner

PRs open, stacked on the #326 pair — backend spikersoft-backend#54 (base: #53's branch) + frontend spikersoft-angular#97 (base: #96's branch). Merge order: #53#54, #96#97 (Gitea retargets stacked PRs to master automatically when the base branch merges).

Against this issue's checklist:

  • Authored-text entityCurriculumText, revision-aware (Author, UpdatedAt), keyed by (language, category) with "*" intro chapters so one chapter spans a lesson range
  • Storage decision — separate curriculumTexts collection (as the ticket leaned): long prose stays out of the catalog list payload, chapters edit without touching lesson definitions
  • Serving — new anonymous GET /api/Lessons/reading with the same locale-resolution/profile-fallback as the catalog; 204 + intro-fallback semantics
  • Authoring path — code-authored seed (CurriculumTextSeed, upserts every boot: edit + deploy = publish). Admin CRUD deferred — seeding was the accepted starting point per the ticket; file a follow-up when chapter volume outgrows code review
  • First chapters — six shipped in the agreed voice (you're new, we're old school, you have the tools — here's how): intros for all five core languages + a C# Output section chapter; fully bilingual en+es (the content model carries language variants, not just UI chrome)
  • Rendering — chapter above the book picks in the shared Reading surface, through the same safe inline-markdown renderer as tutorial panels (no HTML path); guard tests enforce the markdown subset + bilingual completeness

Voice guideline is documented in the seed's remarks block for future authors. Will close when the stacked PRs merge.

PRs open, **stacked on the #326 pair** — backend spikersoft-backend#54 (base: #53's branch) + frontend spikersoft-angular#97 (base: #96's branch). Merge order: #53 → #54, #96 → #97 (Gitea retargets stacked PRs to master automatically when the base branch merges). Against this issue's checklist: - [x] **Authored-text entity** — `CurriculumText`, revision-aware (`Author`, `UpdatedAt`), keyed by (language, category) with `"*"` intro chapters so one chapter spans a lesson range - [x] **Storage decision** — separate `curriculumTexts` collection (as the ticket leaned): long prose stays out of the catalog list payload, chapters edit without touching lesson definitions - [x] **Serving** — new anonymous `GET /api/Lessons/reading` with the same locale-resolution/profile-fallback as the catalog; 204 + intro-fallback semantics - [x] **Authoring path** — code-authored seed (`CurriculumTextSeed`, upserts every boot: edit + deploy = publish). Admin CRUD deferred — seeding was the accepted starting point per the ticket; file a follow-up when chapter volume outgrows code review - [x] **First chapters** — six shipped in the agreed voice (*you're new, we're old school, you have the tools — here's how*): intros for all five core languages + a C# Output section chapter; **fully bilingual en+es** (the content model carries language variants, not just UI chrome) - [x] **Rendering** — chapter above the book picks in the shared Reading surface, through the same safe inline-markdown renderer as tutorial panels (no HTML path); guard tests enforce the markdown subset + bilingual completeness Voice guideline is documented in the seed's remarks block for future authors. Will close when the stacked PRs merge.
Author
Owner

Done — merged to master. Backend our-own-book chapters (CurriculumText + anonymous reading endpoint) in PR #54, and frontend chapters in the Reading pane in PR #97. Closing P4.

Done — merged to `master`. Backend our-own-book chapters (CurriculumText + anonymous reading endpoint) in PR #54, and frontend chapters in the Reading pane in PR #97. Closing P4.
Sign in to join this conversation.