Skip to content

Catalog refresh, brand mark, blog positioning and the pg-partsmith post - #5

Merged
AlexeyShalaev merged 11 commits into
masterfrom
docs/catalog-refresh
Sep 6, 2026
Merged

Catalog refresh, brand mark, blog positioning and the pg-partsmith post#5
AlexeyShalaev merged 11 commits into
masterfrom
docs/catalog-refresh

Conversation

@AlexeyShalaev

Copy link
Copy Markdown
Member

Summary

Everything on docs/catalog-refresh since the redesign, in the order it happened:

  • the library and tool catalog refreshed and turned into compact rows with section anchors, the runtime group ordered;
  • external links open in a new tab, same-host links stay in the current one;
  • blog posts wider but still centred, smaller article body text;
  • a brand mark, favicons and a social card;
  • a Recommended section for aiofence and d9d under Libraries, and a Recommended reading card for Stanislav Shimovolos's article on client disconnects in FastAPI;
  • the welcome post rewritten as the story of why the libraries exist, and the blog positioned as guides and articles rather than release notes: the empty Releases category is gone;
  • a long post on managing PostgreSQL partitions with pg-partsmith, featured on the home page and listed under Libraries and Tools.

zensical build --clean reports no issues. Merging deploys through docs.yml.

The catalog still described the ecosystem as of May: eight libraries and
two tools. Four libraries shipped since (servicewright, clientwright,
grpc-server-kit, grpc-client-kit) and every package has released again.

- Libraries page: twelve packages in four layers (service runtime and
  transports, data and messaging foundations, reliability patterns,
  database operations and testing), blurbs rewritten from each repo's
  current README and pyproject. Two claims that were wrong are gone:
  redis-client-kit never had OpenTelemetry spans, and idempotency-kit
  gives once-per-key execution, not at-most-once.
- A facts line under each card: version, Python floor, one shape word.
  The version is the one current at writing time and is refreshed from
  PyPI's JSON API on load (CORS is open there), so the page does not go
  stale between deploys; offline, the static text stays.
- Tools page: mr-review is a web UI plus API behind docker compose now,
  not a CLI; mattermind gained the TUI chat and JSON mode; the
  pg-partsmith CLI and container image get a card of their own.
- Home hero, home teasers and the footer column follow the new list.
- A card for python-library-template, the Copier template every
  library starts from.
The libraries page reserved a navigation column it never used, so the
content sat off-centre, and twelve tall two-column cards took several
screens to scan. Hovering a card also underlined every word in it.

- Libraries and Tools hide the navigation sidebar like the home page
  does, and sit in a 64rem column.
- One row per package: name and one sentence on the left, version pill,
  Python floor, one shape word and a GitHub link on the right. The row
  is the docs link (stretched link on the name); the version pill links
  to PyPI and still refreshes live.
- Groups keep their headings, gain a one-line note, and get anchors; a
  chip row under the hero jumps to each group with its item count.
- Home teasers use the same rows, so the three pages share one
  component; the old card-list CSS is gone.
- Chips are neutral again (Material's link colour was winning), and
  block links no longer underline on hover.
- Service runtime & transports reads servicewright, clientwright,
  grpc-server-kit, grpc-client-kit: the runtime first, then the HTTP
  client, then the gRPC pair. The home teaser follows.
- Every absolute http(s) link opens in a new tab with rel="noopener".
  Internal navigation is always relative here (Material emits it that
  way), so an absolute href means leaving the site -- a library's own
  docs, GitHub, PyPI. Done once in bedrock.js so blog posts get it too;
  an author-set target is left alone.
Every library's docs live under bedrock-python.github.io, the same host
as this site, so a click there is not leaving. Only links to another
host (GitHub, PyPI, Zensical) open in a new tab. The host comes from the
canonical link so a local zensical serve behaves like production.
A post is not in the nav, so with navigation tabs its primary sidebar
is "lifted" with no active section to show and renders as a blank
column. That column stays: it mirrors the TOC and keeps the article
centred on the page. Instead, the grid widens to 1440px on pages with
no active nav item, so the text column grows and the TOC moves outward.

The reading measure is 42rem: Material scales the root font with the
viewport (20px from 1220px, 22px from 1600px), so that is 840-924px,
about 80 characters of body text -- the old "44rem, ~704px" comment
assumed a 16px rem that this theme never has. Code blocks, admonitions,
details and tab sets share the measure so they line up with the prose.
Body text was 1rem, which under Material's viewport-scaled root font is
20-24px -- larger than it looks in the stylesheet, where the comments
assume a 16px rem. It is .8125rem now: 16px on a 1440px laptop, 18px
from 1600px, 19.5px from 2000px. Code blocks drop to .75rem so the mono
face stays a step below the prose, as the theme intended.
The site used the theme's stock book icon. It now carries the
bedrock-python mark: logo.svg in the header and the drawer, and a
lifted-palette logo-dark.svg for the slate scheme (the SVG loads through
<img>, so it cannot follow currentColor, and the graphite faces vanished
on the dark header). The footer shows the dark mark on its slab.

Icons: favicon-32.png from config, logo.svg declared after it so
browsers that render SVG icons take it and Safari keeps the PNG, plus a
180px apple-touch-icon on the cream ground since iOS paints black behind
transparency. Open Graph and Twitter card meta on every page with one
1200x630 social card: the horizontal lockup on cream. Title and
description follow the page; posts are og:type article.

docs/assets also hosts the brand kit -- the 1024px mark, horizontal,
alternate, mono and stacked lockups -- so other repos can link to it.
…ay what the blog is for

The welcome post now tells why the libraries exist instead of listing them,
and its last section no longer promises a post per release. Two third-party
libraries and one Medium article get a Recommended section of their own.
Changelogs cover releases. The blog's lede, its description and the category
table say so, and the empty Releases category goes.
Two ways a partitioned table gets you out of bed, and the library that grew
out of them, one failure at a time: the plan you read first, ownership by
catalog bounds, async and sync, the command line and the image, hooks from a
document, and the page written for an assistant. Featured on the home page,
listed under Libraries and Tools.
@AlexeyShalaev
AlexeyShalaev merged commit 437ee8b into master Sep 6, 2026
@AlexeyShalaev
AlexeyShalaev deleted the docs/catalog-refresh branch September 6, 2026 15:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant