Project pages: hub-and-spoke on coilysiren.me, not four standalone sites #133
Labels
No labels
autonomy
async-consult
autonomy
epic
autonomy
headless
autonomy
live-collab
burndown-2026-06
burndown-2026-08
icebox
priority
P0
priority
P1
priority
P2
priority
P3
priority
P4
role/ai
role/creator
role/design
role/director
role/engineer
role/exec
role/human
role/ops
role/qa
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
coilysiren/website#133
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Kai decided on 2026-08-25 that the site is worth investing in and tasked the Developer Advocate seat with the form and function. The investment question was hers and is settled, so this issue covers structure and content only.
Reads as a companion to
coilysiren/inbox#407, which owns the post program. Neither works as well alone, and the last section explains why.The decision: subdirectory pages, not standalone sites
coilysiren.me/projects/<name>/. Four pages. No new domains, no subdomains.Kai raised standalone sites per project. Recommending against, on four grounds.
Authority does not split well when there is not much of it. Subdirectories feed all traffic, backlinks, and authority into one domain, while a subdomain or separate domain is treated as a separate site that has to build authority from zero.
coilysiren.mehas exactly one small pool of authority, freshly verified in Search Console and Bing, with a corpus of two posts that already surface unprompted. Splitting that four ways is the worst available move for the stated goal.The stated goal is inbound to Kai, not to the projects.
#407establishes the site as the ungated surface that accrues authority while LinkedIn waits on the name change. Four product domains build four product entities. The thing that needs to rank is a person.These are evidence, not products with users. The standalone-domain pattern is real and works, and the reference case shows what it costs: Simon Willison runs
datasette.ioas its own site for a project with a user base, a hosted commercial product, and sponsorship, while everything else onsimonwillison.netlives as tag feeds. A project earns its own domain when it has users to serve and docs to host. None of these four has that yet, and the audience for all four is a hiring manager.Capacity is a confirmed constraint. Four sites is four deploys, four metadata surfaces, four sitemaps, four drift surfaces. 2026-08-24 was spent repairing drift across the three surfaces that already exist.
Graduation path, so this is not a door closing. If a project later earns a real user base, point its own domain at the section and 301 the subdirectory. That is a cheap, standard move and it is strictly easier than merging four scattered domains back together.
The defect this fixes
Verified on the live homepage 2026-08-25. All four showcase cards link directly to
github.com. The homepage's strongest content sends every interested visitor off the domain at the exact moment of highest interest.That is the whole argument for project pages in one line. Today the site's job ends at "here is a card, now go read a README on someone else's domain." GitHub should be where a reader goes after the case is made, not instead of it.
Function, and how it fits the existing program
#407establishes topic clusters as posts, buyer-framed, low cadence, extraction rather than invention. That is the spoke layer. It has no hub.#407.This is the standard shape for topic authority and it costs nothing extra, because
#407is already committing to the posts. Right now those posts would have nowhere to point.Second function: the hub is the page Kai controls. A GitHub README builds GitHub's entity. A project page with
SoftwareSourceCodemarkup, internal links, and a canonical on her own domain builds hers.Form: the page structure
Eight sections. Order matters and is not negotiable, because it is the buyer-framing order from
#407, which is a problem the reader already has, named in their terms, with the cost of leaving it unfixed attached.coilysiren/inbox#397. Never re-invented for this page.proofcopy insrc/data/projects.jsis already exactly this and is already Kai-authored.umbraatv0.126.0andagent-composeatv1.32.0have tagged releases.mcp-beaverandsirens-echodo not, and the page should say what is true rather than imply parity.#407produces posts.Source material, because this is extraction not invention
Confirmed present 2026-08-25. 573KB of documentation across the four repositories, and every one has a
FEATURES.md.umbra- README 3.4KB, docs 21 entries 57.9KB,v0.126.0mcp-beaver- README 6.1KB, docs 21 entries 41.6KB, no releaseagent-compose- README 4.9KB, docs 40 entries 178.8KB,v1.32.0sirens-echo- README 4.6KB, docs 41 entries 295.5KB, no releasePlus the four published banner claims, the four
prooflines inprojects.js, and thelore-method-*entries. Sections 1, 3, 6 and 8 are close to mechanical. Sections 2, 4 and 5 need writing, and that is Developer Advocate work.The sync trap, named so it is designed out
Adding four pages adds four surfaces that can drift, which is precisely the failure repaired across the resume, the profile README and the org profiles on 2026-08-24.
The rule: a project page never restates a fact that has a canonical home. The one-line claim comes from the repository description. The release tag and install line come from the release. Anything hand-written on the page must be content that exists nowhere else, which is sections 2, 4 and 5. If a page and a repository disagree about what a project is, the repository wins and the page is the bug.
Technical function
SoftwareSourceCodeorSoftwareApplicationJSON-LD per page, withauthorpointing at the existingPersonentity on the homepage.coilysiren/website#125is already fixing sitemap derivation for the post layer, and this must not repeat that failure.llms.txtgains the four pages. It currently declares four public pages and mentions no projects at all.Not in scope
coilysiren/inbox#406and its children. These pages composite whatever that lands, and must not block on it, since a page with the current mark is better than no page.#407.Done means
coilysiren.me/projects/<name>/github.comPersonllms.txtThe docs cluster published ahead of this issue's baseline box, on Kai's explicit call (website#135). Recording what the baseline should capture, and why today is the last clean moment to take it.
22 pages went live at
/projects/umbra/docs/with canonical, per-page descriptions,TechArticleandBreadcrumbList. The sitemap went from 11 URLs to 33 and is already serving. Google has not crawled them yet, so an indexing snapshot taken now is still effectively pre-cluster. That stops being true within days.What the baseline will show, and what it means
The property was verified around 2026-08-25 per this issue. Search Console does not backfill, so Performance is nearly empty by construction rather than by failure. Expect low-double-digit impressions, clicks at or near zero, brand-dominated queries, and whatever non-brand impressions the Azure OpenAI Terraform post draws. At that volume average position is noise.
The report worth recording is Pages, not Performance:
Discovered - currently not indexedfor most of the rest, which is ordinary for a young domain rather than a defect.Excluded by 'noindex' tagfor/cool-people/and the two dark posts. Record that those are deliberate, or a later reader files it as drift.The row that decides whether this worked
Duplicate, Google chose different canonical than userandAlternate page with proper canonical tag.The 21 vendored pages are byte-identical to copies already crawlable at
forgejo.coilysiren.meand atgithub.com, both stronger domains. Duplicate content across domains is a filter rather than a penalty: one copy is picked and the others are dropped from the result for a query. On identical body text the pick usually favours the stronger host.So the cluster's success condition is not impressions. It is whether those 22 URLs appear as indexed or as duplicates-with-another-canonical in six to eight weeks. If they land in the duplicate rows, more metadata will not fix it and the answer is to make this copy less identical to the markdown. That is a Developer Advocate question about the frame, not a platform one.
Capture list
Date, total indexed with the full breakdown by reason, Performance totals over a fixed 28-day window, the query and page lists however short, and the same from Bing Webmaster Tools. Screenshots suffice. The point is a timestamped record, not a dataset.
Discovery lands in days, indexing over two to six weeks, and the comparison is only readable at roughly eight weeks.
Baseline recorded 2026-08-27: 14 impressions over 90 days, clicks at or near zero.
Kai read it off Search Console directly. Correcting my previous comment: the property carries three months of history rather than the two days this issue's "freshly verified" line implied, so the zero is the real number rather than an artifact of the verification date. Better evidence for the same conclusion.
That is a clean baseline. Nothing to protect, nothing to disentangle, and any signal after this is attributable.
The success metric stands as stated: not impressions, but whether the 22 docs URLs reach indexed in the Pages report over the next six to eight weeks. Impressions cannot move before that, and the duplicate-canonical rows are where they land if the GitHub copy wins the pick.
Worth saying plainly against the maximum-SEO goal: the metadata work is finished and it is not the lever. Reference documentation serves readers who already found the project. Inbound to a person comes from the post program in coilysiren/inbox#407 and from links pointing in, which is Developer Advocate and Portfolio Director work rather than anything else the platform seat can add here.