From 1666e3230dff3e9fc6c5a875c3d339315c1e910b Mon Sep 17 00:00:00 2001
From: napalm255
Date: Sat, 26 Sep 2026 02:59:45 -0400
Subject: [PATCH 1/4] feat: add QuickClip to the project list
---
AGENTS.md | 6 +++---
docs/index.html | 20 +++++++++++++++++++-
tests/site.spec.js | 1 +
3 files changed, 23 insertions(+), 4 deletions(-)
diff --git a/AGENTS.md b/AGENTS.md
index 5ed4eed..e18433d 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -11,9 +11,9 @@ holds the rules that are not obvious from the code.
- **Everything in `docs/` is public, and nothing outside it is.** Keep tooling, tests,
the design notes and the source logo out of `docs/`.
- `docs/.nojekyll` disables Jekyll. Do not remove it.
-- The project docs at `/quickmusic/`, `/quickrem/`, `/quicktiler/` and `/quickts/` are
- published from those projects' own repositories. Never create `docs/quickrem/` (or any
- other project name) here — it would collide with them.
+- The project docs at `/quickclip/`, `/quickmusic/`, `/quickrem/`, `/quicktiler/` and
+ `/quickts/` are published from those projects' own repositories. Never create
+ `docs/quickrem/` (or any other project name) here — it would collide with them.
## Hard constraints
diff --git a/docs/index.html b/docs/index.html
index 14e0052..3a2b52c 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -6,7 +6,7 @@
Ghost Assembly
@@ -89,6 +89,24 @@ GNOME Shell extensions
Quick Settings tiles and keyboard tiling for GNOME Shell.
+
+ QuickClip
+ GNOME 50
+
+ A private clipboard history in Quick Settings. Memory
+ only, skips password-manager copies, and transforms
+ JSON, base64, URLs and timestamps.
+
+
+ Docs for QuickClip
+ Source for QuickClip
+
+
+
QuickMusic
GNOME 50
diff --git a/tests/site.spec.js b/tests/site.spec.js
index 5024d04..30f188a 100644
--- a/tests/site.spec.js
+++ b/tests/site.spec.js
@@ -7,6 +7,7 @@ const pages = 'https://ghost-assembly.github.io';
// Every project on the page, and the links its card must carry. A project with
// no docs site has `docs: null`, and its card must not grow a Docs link.
const projects = [
+ { name: 'QuickClip', slug: 'quickclip', docs: true },
{ name: 'QuickMusic', slug: 'quickmusic', docs: true },
{ name: 'QuickRem', slug: 'quickrem', docs: true },
{ name: 'QuickTiler', slug: 'quicktiler', docs: true },
From fd04cbd6050d29fd33e2a92f5b580598e74709f3 Mon Sep 17 00:00:00 2001
From: napalm255
Date: Sat, 26 Sep 2026 07:34:15 -0400
Subject: [PATCH 2/4] docs: add domain, GhostDock and three-place guidance
Document the ghost-assembly.com domain (CNAME ownership, inherited by
project docs sites, https_enforced as an account setting, never
hardcode the old github.io host), spell out the three places a
project must appear including the org profile README, add the
American English rule, and note GhostDock has no docs site. Append a
short amendment to the org hub design note recording the domain move
and the new project.
---
AGENTS.md | 22 ++++++++++++++++++----
README.md | 15 ++++++++++-----
design/2026-09-24-org-hub-design.md | 13 +++++++++++++
3 files changed, 41 insertions(+), 9 deletions(-)
diff --git a/AGENTS.md b/AGENTS.md
index e18433d..f8a538f 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -1,7 +1,7 @@
# AGENTS.md
Guidance for coding agents working on the Ghost Assembly organization site,
-. Read `README.md` for the human overview; this file
+. Read `README.md` for the human overview; this file
holds the rules that are not obvious from the code.
## What gets published
@@ -14,6 +14,18 @@ holds the rules that are not obvious from the code.
- The project docs at `/quickclip/`, `/quickmusic/`, `/quickrem/`, `/quicktiler/` and
`/quickts/` are published from those projects' own repositories. Never create
`docs/quickrem/` (or any other project name) here — it would collide with them.
+ GhostDock has no docs site, so it has no slug here; its card is Source only.
+
+## Domain
+
+- The site is served at `https://ghost-assembly.com/`, set by `docs/CNAME`. Do not
+ remove or edit that file as routine work.
+- Each project's docs site inherits the same domain, `https://ghost-assembly.com//`,
+ from that project's own repository and `CNAME` — not from anything in this repo.
+- HTTPS enforcement (`https_enforced`) is a GitHub Pages account/repository setting, not
+ something this repo configures or assumes.
+- Never hardcode `ghost-assembly.github.io` in new content. The old host still resolves
+ and redirects, but new links and metadata point at `ghost-assembly.com`.
## Hard constraints
@@ -65,9 +77,9 @@ WebKit is not supported on the maintainer's Fedora base, so do not add it.
A project appears in three places, and all three must change together:
-1. `docs/index.html` — an `` in the right group. Link Docs to
- `https://ghost-assembly.github.io//` only if that project publishes a docs
- site; otherwise give it Source only.
+1. `docs/index.html` — an `` in the right group. Docs link
+ only where a docs site exists, at `https://ghost-assembly.com//`; otherwise
+ Source only.
2. `tests/site.spec.js` — the `projects` list at the top, so its links are checked.
3. The org profile README, `profile/README.md` in the separate
[Ghost-Assembly/.github](https://github.com/Ghost-Assembly/.github) repository.
@@ -87,5 +99,7 @@ recipe are the measured bounds of the emblem and the whole logo in the 1254px so
- Branch from `main`, open a pull request, and squash-merge once the `ci` job (which
runs `just ci`) passes.
- Conventional Commits, imperative subject, no trailing period.
+- American English spelling throughout (color, behavior, license, organization,
+ standardize). Keep third-party identifiers and quoted messages as they are.
- Third-party GitHub Actions are pinned by commit SHA with the version in a comment.
- `design/` holds the agreed design notes. Update them when the design changes.
diff --git a/README.md b/README.md
index cd9576b..7398b7e 100644
--- a/README.md
+++ b/README.md
@@ -2,14 +2,14 @@
[](https://github.com/Ghost-Assembly/ghost-assembly.github.io/actions/workflows/ci.yml)
-The Ghost Assembly organization site: ****.
+The Ghost Assembly organization site: ****.
One hand-written page listing the org's projects, with links to each one's docs and
source. No framework, no build step and no JavaScript on the page — `docs/` is what
GitHub Pages serves, as-is.
Each project publishes its own docs from its own repository's `docs/` folder, at
-`https://ghost-assembly.github.io//`. This repository only owns the root.
+`https://ghost-assembly.com//`. This repository only owns the root.
## Develop
@@ -25,9 +25,14 @@ just ci # everything CI runs: lint, test, security, build
## Adding a project
-Add an `` to the right group in `docs/index.html`, and add it
-to the `projects` list at the top of `tests/site.spec.js` so the suite checks its
-links. A project with no docs site gets a Source link only.
+A project appears in three places, and all three must change together:
+
+1. An `` in the right group in `docs/index.html`. A project
+ with no docs site gets a Source link only.
+2. An entry in the `projects` list at the top of `tests/site.spec.js`, so the suite
+ checks its links.
+3. The org profile README, `profile/README.md` in the separate
+ [Ghost-Assembly/.github](https://github.com/Ghost-Assembly/.github) repository.
## Images
diff --git a/design/2026-09-24-org-hub-design.md b/design/2026-09-24-org-hub-design.md
index 9f75f8e..9100224 100644
--- a/design/2026-09-24-org-hub-design.md
+++ b/design/2026-09-24-org-hub-design.md
@@ -130,3 +130,16 @@ Pattern sources to copy/adapt: `quickrem/justfile`, `quickrem/mise.toml`,
shared with the user.
- After Pages is enabled: `xh -h https://ghost-assembly.github.io/` returns 200, and the
existing `/quickrem/`, `/quicktiler/`, `/quickts/` docs still resolve.
+
+## Amendment — 2026-09-26: custom domain and GhostDock
+
+- The org bought `ghost-assembly.com`. `docs/CNAME` now points GitHub Pages at it, and
+ every absolute URL on the page (og:url, og:image, project Docs links) points at the
+ new domain instead of `ghost-assembly.github.io`. Each project's own docs site
+ inherits the domain the same way, from its own repository.
+- The project list grew to seven: QuickClip, QuickMusic, QuickRem, QuickTiler and
+ QuickTS (GNOME Shell extensions), awsdiag (command-line), and GhostDock, a new
+ self-hosted Docker Compose manager, in a third group, "Self-hosted services", placed
+ after "Command-line tools". GhostDock publishes no docs site, so its card is Source
+ only, like awsdiag.
+- Footer text and copyright year are unchanged.
From e9df2df98106f4727bd16b557fbd9ee70f83795f Mon Sep 17 00:00:00 2001
From: napalm255
Date: Sat, 26 Sep 2026 07:34:20 -0400
Subject: [PATCH 3/4] feat: add GhostDock and move site links to
ghost-assembly.com
Point og:url, og:image and every project Docs link at
ghost-assembly.com instead of the github.io host, and update the
Playwright suite's base to match. Add a new "Self-hosted services"
group after Command-line tools with a GhostDock card (Source only, no
docs site yet), and refresh the QuickMusic, QuickTiler and QuickTS
blurbs to open with their canonical one-liner. Reword the GNOME group
intro so it no longer reads as if QuickTiler lacks a Quick Settings
tile.
---
docs/index.html | 64 +++++++++++++++++++++++++++++++---------------
tests/site.spec.js | 5 ++--
2 files changed, 47 insertions(+), 22 deletions(-)
diff --git a/docs/index.html b/docs/index.html
index 3a2b52c..625ce51 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -6,7 +6,7 @@
Ghost Assembly
@@ -28,10 +28,10 @@
property="og:description"
content="Small, sharp tools for the Linux desktop and the cloud."
/>
-
+
@@ -85,9 +85,7 @@ Projects
+
+
+ Self-hosted services
+ Software you run on your own hardware.
+
+
+ GhostDock
+ Rust · Docker Compose
+
+ A self-hosted, mobile-first manager for Docker Compose
+ stacks, with Git-backed deploys and update checks. It
+ follows Docker’s own events, so the board updates live
+ as containers start, stop or turn unhealthy.
+
+
+ Source for GhostDock
+
+
+
+
diff --git a/tests/site.spec.js b/tests/site.spec.js
index 30f188a..73a3034 100644
--- a/tests/site.spec.js
+++ b/tests/site.spec.js
@@ -2,10 +2,10 @@ import { test, expect } from '@playwright/test';
import AxeBuilder from '@axe-core/playwright';
const org = 'https://github.com/Ghost-Assembly';
-const pages = 'https://ghost-assembly.github.io';
+const pages = 'https://ghost-assembly.com';
// Every project on the page, and the links its card must carry. A project with
-// no docs site has `docs: null`, and its card must not grow a Docs link.
+// no docs site has `docs: false`, and its card must not grow a Docs link.
const projects = [
{ name: 'QuickClip', slug: 'quickclip', docs: true },
{ name: 'QuickMusic', slug: 'quickmusic', docs: true },
@@ -13,6 +13,7 @@ const projects = [
{ name: 'QuickTiler', slug: 'quicktiler', docs: true },
{ name: 'QuickTS', slug: 'quickts', docs: true },
{ name: 'awsdiag', slug: 'awsdiag', docs: false },
+ { name: 'GhostDock', slug: 'ghostdock', docs: false },
];
test('loads every asset from its own origin, without errors', async ({
From 09cd14aee13a0f1f97568a8d23240078e4745881 Mon Sep 17 00:00:00 2001
From: napalm255
Date: Sat, 26 Sep 2026 07:40:52 -0400
Subject: [PATCH 4/4] docs: fix hero lede and card blurbs from review
Update the hero lede to cover all three project groups, now that
Self-hosted services exists. Make the QuickClip, QuickRem and awsdiag
card blurbs open with the brief's canonical one-liner byte-for-byte,
each followed by one sentence drawn from that project's README. Say
"tailscaled refuses its socket" on the QuickTS card instead of "the
daemon refuses the connection", matching the README's actual failure
mode (the local operator permission on the tailscaled socket).
---
docs/index.html | 31 +++++++++++++++++--------------
1 file changed, 17 insertions(+), 14 deletions(-)
diff --git a/docs/index.html b/docs/index.html
index 625ce51..bbf5c75 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -67,8 +67,9 @@
Small, sharp tools for the Linux desktop and the cloud.
- Open-source GNOME Shell extensions and command-line tools. Each one
- does a single job and stays out of your way.
+ Open-source GNOME Shell extensions, command-line tools and
+ self-hosted services. Each one does a single job and stays out of
+ your way.
Browse projects
@@ -91,9 +92,10 @@
GNOME Shell extensions
QuickClip
GNOME 50
- A private clipboard history in Quick Settings. Memory
- only, skips password-manager copies, and transforms
- JSON, base64, URLs and timestamps.
+ A private clipboard history in Quick Settings, with
+ developer transforms. Copies are kept in memory only,
+ and anything a password manager marks as secret is
+ skipped.
QuickMusic
QuickRem
GNOME 49–50
- Your saved Remmina connections in the Quick Settings
- panel. The list follows Remmina’s profile folder as it
- changes, so a new connection appears without a reload.
+ Your saved Remmina connections in Quick Settings,
+ following the profile folder as it changes. It never
+ reads Remmina’s stored passwords.
QuickTS
Tailscale in Quick Settings: toggle the tailnet, pick an
exit node, switch profiles, ping nodes and send or
- receive Taildrop files. If the daemon refuses the
- connection, it says so in the menu rather than showing a
- tailnet that looks silently disconnected.
+ receive Taildrop files. If tailscaled refuses its
+ socket, the menu says so instead of showing a tailnet
+ that looks silently disconnected.
Command-line tools
awsdiag
Rust
- Fast, compact AWS diagnostic data collection. Built to
- be driven by an AI agent during troubleshooting, and
- just as usable by hand.
+ Fast, compact AWS diagnostic data collection, built to
+ be driven by an AI agent and rendered into a single
+ self-contained HTML report. It is just as usable by
+ hand.