Milestone 7 of the Static Pages Module sprint.
- app.routes.ts: /backoffice/static-pages now redirects to /edit/static-pages
(absolute redirectTo) instead of rendering BackofficeComingSoonPageComponent
- Static Pages is a first-class Project Editor module, not a second CRUD
surface over the same bootstrap.staticPages data.
- New docs/StaticPages.md: full field reference (General/Localization/SEO/
Media/Publishing), the enabled+status storefront-gating story and its
backward-compat default (existing/legacy data normalizes to
enabled+published so nothing gets silently un-published; only new pages
default to draft), CRUD/search/filter/bulk, the "mutate from the
unfiltered list" implementation note, rich-text/HTML-mode contract
(pointer to EDITOR.md), nav integration, and the export/import/draft/
publish compatibility statement.
- docs/EDITOR.md: Static Pages row in the Sections table (was previously
absent - the row lived implicitly in Footer's description), HTML editor
section updated with the Sprint X+2 toolbar additions + validation
contract, redirect noted near the route line. `docs/Project-Editor.md`
(named in the original brief) no longer exists - superseded by EDITOR.md
per that file's own header; documentation went there + the new file
instead.
- docs/PROJECT.md: doc index entry for StaticPages.md.
Gate: tsc --noEmit, npm test (57/57), arch:check, build all green.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
4.9 KiB
4.9 KiB
PROJECT
What this is
A configuration-driven, multi-tenant SaaS marketplace platform (Angular 18+, standalone components). One frontend codebase serves unlimited tenants ("marketplaces"). Tenant identity, theme, navigation, page/section/widget composition, and static content are all resolved from a per-tenant bootstrap.json fetched at runtime — no tenant-specific code paths exist in the frontend. See docs/ARCHITECTURE.md and docs/BOOTSTRAP.md for the mechanics.
Every tenant conceptually has three surfaces on this one codebase:
- Website — the public storefront (catalog, product pages, cart, static pages).
- Builder (Project Editor) — an in-app editor that edits the tenant's
BootstrapConfig(seedocs/EDITOR.md). - Backoffice (Admin) — an admin area for products, and (as of Sprint 19) a dashboard; more domains are placeholders pending backend (see
docs/ADMIN.md).
Tenant / marketplace model
- Tenant is resolved only by request domain/host — never by query param, localStorage, or hardcoded ID.
- The frontend loads
GET /bootstrap(tenant resolved server-side by host) and renders entirely from that JSON: theme, layout, navigation, pages, sections, widgets, static pages, feature flags. - Widgets never call APIs directly; they receive resolved data through facades/resolvers.
- New tenants are onboarded by domain + bootstrap config + backend data, not by forking the frontend.
- Full contract:
docs/BOOTSTRAP.md.
Doc index
- ARCHITECTURE.md — layered architecture, container/facade/service pattern, bootstrap/theme/widget engines, links to the enforced ADRs.
- BACKEND.md — the backend punch list: every mocked/local-only feature, its gap, and the endpoint needed to make it real. Start here if you're a backend engineer picking up this project.
- FRONTEND.md — app structure, routing, i18n, theming, state management (signals/facades, no NgRx), dynamic rendering.
- BOOTSTRAP.md — the
BootstrapConfigmodel, field-by-field, with a representative example JSON. - EDITOR.md — the Project Editor: every section, the save/publish/draft/reset model, and the field-description/dropdown UX.
- StaticPages.md — the Static Pages module: full field reference, per-page draft/publish gating, CRUD/search/filter/bulk, rich text, device preview, nav integration (Sprint X+2).
- PROJECT-STRUCTURE.md — folder-by-folder tour of
src/app/**with a worked "add a new feature" example (admin dashboard). - ADMIN.md — Sprint 19 admin dashboard: routing, architecture, data sources, known gaps.
docs/architecture/foundation/**— the enforced ADRs (ADR-001…ADR-010) and standards docs (Coding-Standards, Naming-Conventions, Dependency-Rules, Folder-Blueprint, Import-Boundary-Matrix, State-Management-Standards, Configuration-Standards, Component-Standards, Service-Standards). These are governance, not narrative — read them directly;ARCHITECTURE.mdonly links to them.docs/context/**— Barry Cache's own source-backed memory system. Infrastructure, not project documentation; do not edit by hand.
How to run it
From package.json:
npm install
npm run start # ng serve
npm run start:dexar # ng serve --configuration=development --port 4200
npm run build # ng build
npm run build:dexar # ng build --configuration=production
npm run watch # ng build --watch --configuration development
npm run arch:check # boundary + circular-dependency checks (tools/architecture/check-boundaries.mjs, madge)
Barry Cache (repo memory, optional but recommended before/after non-trivial work):
npm run barry -- resume --task "<task>"
npm run barry -- validate
See root CLAUDE.md for the full Barry Cache workflow and memory policy.
Current status (this sprint)
- Sprint 19 shipped the production Admin Dashboard (
src/app/features/admin/dashboard/) as the default/:lang/backofficelanding page, wired the previously-unroutedadmin/productsfeature into routing, and addedlastPublishedAttracking toProjectEditorFacade. Seedocs/ADMIN.md. - Sprint 18 added Project Editor autosave (localStorage draft), section/draft reset, admin QR-login reuse (shared Telegram session API/component, separate cookie/guard), and Ed25519 verification scaffolding (no crypto implemented yet — fails closed). See
docs/EDITOR.md. - Draft/publish for the Project Editor is still frontend-only (localStorage), with no backend persistence. This is the single largest backend gap — see
docs/BACKEND.md. - This documentation set (
docs/PROJECT.md,ARCHITECTURE.md,BACKEND.md,FRONTEND.md,BOOTSTRAP.md,EDITOR.md,PROJECT-STRUCTURE.md) replaces ~35 previously scattered files underdocs/platform/,docs/backend-platform/, and various one-off sprint reports, which have been consolidated and removed.