Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion README.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ ifdef::env-github[]
++++
<a id="readme-top"></a>
<div align="center">
<a href="https://docs.devcentr.org/devcentr-org/"><img src="https://img.shields.io/badge/docs-Dev--Centr-22c55e?style=for-the-badge" alt="Docs"></a>
<a href="https://github.com/dev-centr/devcentr.org/actions/workflows/ci.yml"><img src="https://img.shields.io/github/actions/workflow/status/dev-centr/devcentr.org/ci.yml?branch=main&style=for-the-badge&label=CI" alt="CI"></a>
<a href="https://github.com/dev-centr/devcentr.org/graphs/contributors"><img src="https://img.shields.io/github/contributors/dev-centr/devcentr.org.svg?style=for-the-badge" alt="Contributors"></a>
<a href="https://github.com/dev-centr/devcentr.org/network/members"><img src="https://img.shields.io/github/forks/dev-centr/devcentr.org.svg?style=for-the-badge" alt="Forks"></a>
<a href="https://github.com/dev-centr/devcentr.org/stargazers"><img src="https://img.shields.io/github/stars/dev-centr/devcentr.org.svg?style=for-the-badge" alt="Stars"></a>
Expand All @@ -25,6 +27,8 @@ Organization landing page for Dev-Centr — tools and resources to become a bett
endif::[]

ifndef::env-github[]
image:https://img.shields.io/badge/docs-Dev--Centr-22c55e?style=for-the-badge[Docs,link=https://docs.devcentr.org/devcentr-org/]
image:https://img.shields.io/github/actions/workflow/status/dev-centr/devcentr.org/ci.yml?branch=main&style=for-the-badge&label=CI[CI,link=https://github.com/dev-centr/devcentr.org/actions/workflows/ci.yml]
image:https://img.shields.io/github/contributors/dev-centr/devcentr.org.svg?style=for-the-badge[Contributors,link=https://github.com/dev-centr/devcentr.org/graphs/contributors]
image:https://img.shields.io/github/forks/dev-centr/devcentr.org.svg?style=for-the-badge[Forks,link=https://github.com/dev-centr/devcentr.org/network/members]
image:https://img.shields.io/github/stars/dev-centr/devcentr.org.svg?style=for-the-badge[Stars,link=https://github.com/dev-centr/devcentr.org/stargazers]
Expand Down Expand Up @@ -70,7 +74,7 @@ Site copies live in `public/brand/`. Canonical org-wide assets (including `logo.

* **URL:** link:https://devcentr.org/help[/help] (`/support` redirects to `/help#support`)
* Hub for self-help (docs) vs assisted support (coming soon), plus status, GitHub, and `support@devcentr.org`.
* Planning notes: `docs/help-and-support-plans.adoc`
* Planning notes: link:https://docs.devcentr.org/devcentr-org/latest/help-and-support-plans.html[Help & support plans] (Antora)

=== Status

Expand Down Expand Up @@ -111,6 +115,7 @@ pnpm dev
* `public/` — Static assets (includes generated feeds under `public/news/`)
* `src/lib/news-posts.generated.json` / `changelog-entries.generated.json` — build outputs from `pnpm news:build`
* `app.config.ts` — SolidStart/Vinxi configuration
* `docs/` — Antora component (published on link:https://docs.devcentr.org/devcentr-org/[docs.devcentr.org])
* `DESIGN.md` — Design philosophy and guidelines

== Site Generation
Expand Down
6 changes: 6 additions & 0 deletions docs/antora.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
name: devcentr-org
title: devcentr.org
version: master
start_page: ROOT:index.adoc
nav:
- modules/ROOT/nav.adoc
9 changes: 9 additions & 0 deletions docs/modules/ROOT/nav.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
* xref:index.adoc[Overview]
** xref:explanation/site-architecture.adoc[Site architecture]
** xref:explanation/news-and-changelog.adoc[News & changelog pipeline]
** xref:explanation/theme-reveal.adoc[Theme reveal]
** xref:explanation/toolchain-advisor.adoc[Toolchain Advisor]
** xref:how-to/local-development.adoc[Local development]
** xref:help-and-support-plans.adoc[Help & support plans]
** xref:walkthrough-vscode-and-ci.adoc[VS Code & CI walkthrough]
* xref:changelog.adoc[Changelog]
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
= 2026-08-10 — Antora component and site docs
:navtitle: 2026-08-10 Antora site docs

== Summary

First-class Antora documentation for the devcentr.org marketing site, covering architecture, build pipelines, and recently changed subsystems that previously lived only in README fragments or inline code comments.

== Added

=== Antora component

* `docs/antora.yml` — component `devcentr-org`, published on the org docs hub.
* Navigation and pages under `docs/modules/ROOT/`.

=== Explanation pages

* xref:explanation/site-architecture.adoc[Site architecture] — routes, static SolidStart build, CI sibling checkouts, Pages deploy.
* xref:explanation/news-and-changelog.adoc[News & changelog pipeline] — `build-news.mjs`, feeds, mirror sources, troubleshooting.
* xref:explanation/theme-reveal.adoc[Theme reveal] — View Transitions + WAAPI elliptical reveal from the mode toggle.
* xref:explanation/toolchain-advisor.adoc[Toolchain Advisor] — SDL sync from `dev-centr/toolchain-advisor`.

=== How-to

* xref:how-to/local-development.adoc[Local development] — prerequisites, sibling clones, common scripts.

=== Moved into Antora

* xref:help-and-support-plans.adoc[Help & support plans] (planning notes for `/help`).
* xref:walkthrough-vscode-and-ci.adoc[VS Code & CI walkthrough].

=== README

* Docs badge → `https://docs.devcentr.org/devcentr-org/`
* CI badge → GitHub Actions workflow status.

== Cross-repo

* `dev-centr/docs` playbook registers this component; activity log and xref:home::where-docs-live.adoc[Where documentation lives] updated.

== Knowledge gaps addressed

* How `/changelog` ingests sibling Antora files (previously only mentioned briefly in README).
* Theme reveal state machine and mobile constraints (previously only in code comments).
* Toolchain advisor data path from SDL to `public/catalog/advisor.json`.
29 changes: 29 additions & 0 deletions docs/modules/ROOT/pages/changelog.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
= Changelog

Timeline of notable documentation and site changes in the devcentr.org repository.

== 2026-08-10 — Antora component and site docs

* Added Antora component (`docs/antora.yml`) with overview, site architecture, news/changelog pipeline, theme reveal, toolchain advisor, and local development guides.
* README badges for docs portal and CI workflow.
* See xref:changelog-details/2026-08-10 - antora-site-docs.adoc[Detailed changelog].

== 2026-08-09 — News voice and API keys essay

* `content/news/README.adoc` — clarified news vs changelog voice; scene-driven writing checklist.
* News post on API keys vs tokens (narrative; canonical explanation lives in general-knowledge).

== 2026-08-08 — Business Bootstrap support-systems hub (news)

* News post announcing Business Bootstrap capability areas on docs.devcentr.org.

== 2026-08-06 — Theme reveal stabilization

* Restored elliptical View Transition reveal anchored to the mode toggle (`src/lib/theme-reveal.ts`).
* Mobile WebKit and Chrome fixes: px origins, unique keyframe names, WAAPI radii after `transition.ready`, reverse contract when returning to OS/load baseline.

== 2026-07-24 — Help hub, status probes, news CMS

* `/help` and `/status` community surfaces; changelog mirror from Antora sibling repos.
* Pages CMS config (`.pages.yml`) and `content/news/` authoring guide.
* GitHub Actions CI deploy to Pages with multi-repo changelog ingest.
81 changes: 81 additions & 0 deletions docs/modules/ROOT/pages/explanation/news-and-changelog.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
= News and changelog pipeline
:navtitle: News & changelog
:description: How authored news posts and mirrored Antora changelogs are built for devcentr.org.

devcentr.org separates **narrative news** from **shipping notes**:

* **News** (`/news`) — outward-facing essays and announcements authored in this repo.
* **Changelog** (`/changelog`) — day-to-day bullets mirrored from Antora changelogs in sibling repos.

Do not put changelog bullets in news posts, and do not hand-edit the generated JSON catalogs.

== News (authored)

=== Source

AsciiDoc files in `content/news/YYYY-MM-DD-slug.adoc`.

Each post should set:

[source,asciidoc]
----
= Post title
:description: One-line summary for feeds and meta
:revdate: 2026-08-10
:keywords: news, blog, optional-topic
----

=== Authoring options

* **Pages CMS** — GitHub-connected editor; config in `.pages.yml` at the repo root.
* **Git / PR** — create or edit files under `content/news/`, run `pnpm news:build`, open a PR.

Voice and checklist: see `content/news/README.adoc` in the repository (conversational, scene-driven; changelog bullets belong elsewhere).

=== Build output

`scripts/build-news.mjs` (also `predev` / `prebuild`) writes:

* `src/lib/news-posts.generated.json` — post metadata and rendered HTML for Solid routes
* `public/news/rss.xml` and `public/news/atom.xml` — syndication feeds

Routes: `src/routes/news/` (and `/blog` alias).

== Changelog (mirrored)

=== Sources

At build time, `build-news.mjs` ingests Antora timeline files from sibling checkouts:

[cols="1,2",options="header"]
|===
| Source ID | Antora file

| `devcentr`
| `devcentr/docs/modules/ROOT/pages/changelog.adoc`

| `general-knowledge`
| `general-knowledge/docs/modules/ROOT/pages/changelog.adoc`

| `docs-portal`
| `docs/docs/modules/ROOT/pages/activity-log.adoc` (monthly activity-log format)
|===

CI checks out `dev-centr/devcentr`, `dev-centr/general-knowledge`, and `dev-centr/docs` into the workspace before running the script.
Locally, place sibling clones next to this repo or rely on the `../<repo>` fallback paths.

=== Build output

* `src/lib/changelog-entries.generated.json` — deduplicated, date-sorted entries
* Route: `src/routes/changelog.tsx` renders the mirror index with links back to canonical docs URLs

=== Fixing a changelog entry

Edit the source `changelog.adoc` or `activity-log.adoc` in the owning repository — not `changelog-entries.generated.json`.
Rebuild (or push to `main` and let CI regenerate).

== Troubleshooting

* **Empty `/changelog` locally** — clone `dev-centr/devcentr`, `general-knowledge`, and `docs` as siblings, then `pnpm news:build`.
* **News post missing** — confirm filename ends in `.adoc`, is not `README.adoc`, and has `:revdate:`.
* **Feeds stale** — run `pnpm news:build`; feeds are regenerated from the news JSON, not hand-edited.
77 changes: 77 additions & 0 deletions docs/modules/ROOT/pages/explanation/site-architecture.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
= Site architecture
:navtitle: Site architecture
:description: SolidStart static shell, routes, CI sibling checkouts, and GitHub Pages deploy for devcentr.org.

devcentr.org is a **static** SolidStart (Vinxi) application.
`app.config.ts` sets `ssr: false` and `server.preset: "static"` so the build emits HTML under `.output/public` for GitHub Pages.

== Stack

* **SolidStart + Vinxi** — file-based routes under `src/routes/`
* **Tailwind CSS v4** — `src/app.css`, Kobalte primitives for accessible UI
* **AsciiDoc** — news posts (`content/news/`) compiled with `@asciidoctor/core` at build time
* **GitHub Actions** — `.github/workflows/ci.yml` builds and deploys on push to `main`

== Public routes

[cols="1,2",options="header"]
|===
| Path | Purpose

| `/`
| Landing — hero, ecosystem copy, toolchain diagram, apps teaser

| `/news`, `/blog`
| News index and posts (`/blog` is an SEO alias)

| `/changelog`
| Changelog mirror from Antora sibling repos

| `/help`, `/support`
| Help hub (`/support` redirects to `/help#support`)

| `/status`, `/health`
| Client-side endpoint probes (`/health` redirects to `/status`)

| `/apps`, `/apps/products`, `/apps/services`, `/apps/standards`
| Apps catalogue (data in `src/lib/apps-catalog.ts`)

| `/ideas/:slug`
| Idea pages for catalogue entries with `ideaSlug`

| `/toolchain-advisor`
| Interactive toolchain decision flow (SDL from `toolchain-advisor` repo)

| `/resting-lanczos`
| Image resampling comparison demo
|===

== Build pipeline

`pnpm run build` runs, in order:

. `prebuild` — `scripts/sync-advisor-catalog.mjs` then `scripts/build-news.mjs`
. `vinxi build` — static route artifacts
. `postbuild` — `scripts/spa-fallback.mjs` for client-side routing on Pages

CI (`.github/workflows/ci.yml`) additionally checks out sibling repos into the workspace root before `build-news.mjs`:

* `toolchain-advisor/` — SDL catalog for `/toolchain-advisor`
* `general-knowledge/`, `devcentr/`, `docs/` — Antora changelogs and activity log for `/changelog`

Locally, the same scripts fall back to `../<repo>` paths when CI checkouts are absent.

== Deploy

On push to `main`, the `deploy` job uploads `.output/public` via `actions/deploy-pages`.
A `.nojekyll` file is added so GitHub Pages serves `_build` and `_server` paths correctly.
Custom domain `devcentr.org` is configured in the repository's Pages settings.

== Key source locations

* `src/routes/` — page components
* `src/components/` — shared UI (header, footer, diagrams, advisor widget)
* `src/lib/` — catalog data, changelog loader, theme reveal, site links
* `content/news/` — authored news (see xref:explanation/news-and-changelog.adoc[News & changelog pipeline])
* `public/brand/` — SVG logo marks (canonical org assets live in `.github` profile repos)
* `scripts/` — news/changelog build, advisor sync, SPA fallback, logo rasterize
36 changes: 36 additions & 0 deletions docs/modules/ROOT/pages/explanation/theme-reveal.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
= Theme reveal
:navtitle: Theme reveal
:description: Light/dark toggle animation using View Transitions, CSS variables, and WAAPI on devcentr.org.

The header **mode toggle** (`src/components/mode-toggle.tsx`) applies light/dark theme changes with an elliptical reveal anchored to the toggle button center.

Implementation lives in `src/lib/theme-reveal.ts` with styles in `src/app.css`.

== Behavior

* **Expand** — when the user picks a theme different from the load/OS baseline (State A), an ellipse grows from the toggle to cover the viewport.
* **Contract** — when returning to the load/OS baseline, the ellipse shrinks back into the toggle.
* **Reduced motion** — if `prefers-reduced-motion: reduce`, the theme applies instantly with no animation.
* **No View Transitions** — browsers without `document.startViewTransition` also apply instantly.

== Mechanics

. On click, `mode-toggle.tsx` captures the toggle center synchronously via `elementCenter()` (never `clientX`/`clientY` — zero is a valid coordinate on mobile edges).
. `applyThemeWithCircleReveal()` sets CSS custom properties on `<html>`:
** `--theme-reveal-x`, `--theme-reveal-y` — origin in layout-viewport pixels
** `--theme-reveal-rx`, `--theme-reveal-ry` — elliptical radii (wider than tall to cover corners)
. `document.startViewTransition()` runs the Kobalte `setColorMode` callback.
. After `transition.ready`, the Web Animations API animates only the radii (`easeOutSine`, 450ms).
. `transition.finished` clears the reveal dataset and CSS variables.

`src/components/theme-system-sync.tsx` calls `syncThemeRevealBaseline()` on load and when the OS color scheme changes so expand/contract direction stays correct.

== Constraints

* Only one reveal at a time — if `data-theme-reveal` is already set on `<html>`, subsequent toggles are ignored until cleanup.
* The toggle must expose `data-theme-toggle` (or pass an explicit `origin`) so the anchor is stable on mobile WebKit and Chrome.

== Related

* Brand motion assets: `public/brand/README.adoc`
* Design notes: `DESIGN.md` at the repository root
28 changes: 28 additions & 0 deletions docs/modules/ROOT/pages/explanation/toolchain-advisor.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
= Toolchain Advisor
:navtitle: Toolchain Advisor
:description: Public toolchain decision flow on devcentr.org, synced from dev-centr/toolchain-advisor SDL definitions.

`/toolchain-advisor` hosts an interactive decision flow that matches the SDL definitions used by the DevCentr desktop app.

== Data flow

. `scripts/sync-advisor-catalog.mjs` copies `catalog/advisor.sdl` from a `toolchain-advisor` checkout.
. It compiles SDL to JSON via `toolchain-advisor/scripts/compile-sdl.mjs`.
. Outputs land in `public/catalog/advisor.json` and `public/catalog/advisor.sdl`.
. `src/components/ToolchainAdvisor.tsx` loads the JSON at runtime.

CI checks out `dev-centr/toolchain-advisor` into `toolchain-advisor/` before sync.
Locally, place a sibling clone at `../toolchain-advisor` or run `pnpm sync-advisor` after cloning.

If compilation fails but a committed `advisor.json` exists in the definitions repo, the sync script falls back to that file.

== Route

* Page: `src/routes/toolchain-advisor.tsx`
* Styles: `src/toolchain-advisor.css`
* Definitions repo: https://github.com/dev-centr/toolchain-advisor

== Related docs

* xref:general-knowledge::explanation/infrastructure/toolchain-management.adoc[Toolchain management] (general-knowledge)
* xref:devcentr::index.adoc[DevCentr] — desktop host for the same advisor definitions
Loading
Loading