Skip to content

Commit a641799

Browse files
committed
feat(site): magazine-style redesign with custom Bedrock theme
1 parent 82a1fb3 commit a641799

10 files changed

Lines changed: 1161 additions & 200 deletions

File tree

docs/blog/index.md

Lines changed: 68 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,71 @@
1-
# Blog
2-
3-
News, release notes, and deep dives from the **Bedrock Python** ecosystem — the
4-
infrastructure libraries and developer tools that power our backend services.
5-
6-
What you'll find here:
7-
8-
- **Releases** — what changed and why for each library and tool
9-
- **Design** — the reasoning behind our architectural choices
10-
- **Tutorials** — how to use the libraries in real production scenarios
11-
- **Libraries** — focused write-ups on individual PyPI packages
12-
- **Tools** — posts about standalone developer tools like `mr-review` and `mattermind`
13-
14-
## Browse
15-
16-
- [Archive](archive/index.md) — every post by year
17-
- [Categories](category/index.md) — browse by topic
18-
- [Libraries](category/libraries.md)
19-
- [Tools](category/tools.md)
20-
- [Design](category/design.md)
21-
- [Tutorials](category/tutorials.md)
22-
- [Releases](category/releases.md)
23-
- [Meta](category/meta.md)
24-
1+
---
2+
title: Blog
3+
description: News, release notes, and deep dives from the Bedrock Python ecosystem.
4+
hide:
5+
- toc
256
---
267

27-
## Latest posts
28-
29-
### [Introducing mr-review: AI-powered merge request reviews](posts/2026-05-28-introducing-mr-review.md)
30-
31-
*2026-05-28 · Tools*
32-
33-
A new CLI tool that runs locally and uses an LLM to walk through a merge request
34-
diff the way a thorough engineer would — staged review with brief, dispatch,
35-
polish, and post phases, plus presets for thorough, security, style, and
36-
performance reviews.
37-
38-
### [The Transactional Outbox pattern in Python: omni-box](posts/2026-05-15-transactional-outbox-with-omni-box.md)
39-
40-
*2026-05-15 · Libraries, Design*
41-
42-
How `omni-box` solves the classic dual-write problem between Postgres and Kafka
43-
using the Transactional Outbox pattern, plus the Inbox side for idempotent
44-
consumers.
45-
46-
### [Welcome to the Bedrock Python Blog](posts/2026-05-30-welcome.md)
47-
48-
*2026-05-30 · Meta*
8+
# Blog
499

50-
An introduction to the ecosystem — what Bedrock Python is, the libraries that
51-
form the foundation, reliability, and testing layers, and what you can expect
52-
from this blog.
10+
<style>
11+
.md-content__inner > h1:first-of-type { display: none; }
12+
</style>
13+
14+
<section class="bdr-hero" markdown="0">
15+
<div class="bdr-hero__eyebrow">Bedrock Python</div>
16+
<h1 class="bdr-hero__title">Blog</h1>
17+
<p class="bdr-hero__lede">
18+
Release notes, design decisions, and deep dives from the libraries and tools
19+
that power our backend services — the infrastructure layer, in writing.
20+
</p>
21+
</section>
22+
23+
<nav class="bdr-chips" data-bdr-chips markdown="0">
24+
<a class="bdr-chip is-active" data-bdr-filter="all" href="#">All</a>
25+
<a class="bdr-chip" data-bdr-filter="libraries" href="category/libraries/">Libraries</a>
26+
<a class="bdr-chip" data-bdr-filter="tools" href="category/tools/">Tools</a>
27+
<a class="bdr-chip" data-bdr-filter="design" href="category/design/">Design</a>
28+
<a class="bdr-chip" data-bdr-filter="tutorials" href="category/tutorials/">Tutorials</a>
29+
<a class="bdr-chip" data-bdr-filter="releases" href="category/releases/">Releases</a>
30+
<a class="bdr-chip" data-bdr-filter="meta" href="category/meta/">Meta</a>
31+
<a class="bdr-chip" data-bdr-filter="archive" href="archive/">Archive</a>
32+
</nav>
33+
34+
<div class="bdr-grid" data-bdr-grid markdown="0">
35+
<a class="bdr-card" data-bdr-cat="meta" href="posts/2026-05-30-welcome/">
36+
<div class="bdr-card__visual bdr-card__visual--meta"></div>
37+
<div class="bdr-card__eyebrow">Meta</div>
38+
<h3 class="bdr-card__title">Welcome to the Bedrock Python Blog</h3>
39+
<p class="bdr-card__lede">
40+
An introduction to the ecosystem — what Bedrock Python is, the libraries that
41+
form the foundation, reliability, and testing layers, and what you can expect
42+
from this blog.
43+
</p>
44+
<div class="bdr-card__meta">May 30, 2026</div>
45+
</a>
46+
47+
<a class="bdr-card" data-bdr-cat="tools" href="posts/2026-05-28-introducing-mr-review/">
48+
<div class="bdr-card__visual bdr-card__visual--tools"></div>
49+
<div class="bdr-card__eyebrow">Tools</div>
50+
<h3 class="bdr-card__title">Introducing mr-review: AI-powered merge request reviews</h3>
51+
<p class="bdr-card__lede">
52+
A new CLI tool that runs locally and uses an LLM to walk through a merge request
53+
diff the way a thorough engineer would — staged review with brief, dispatch,
54+
polish, and post phases, plus presets for thorough, security, style, and
55+
performance reviews.
56+
</p>
57+
<div class="bdr-card__meta">May 28, 2026</div>
58+
</a>
59+
60+
<a class="bdr-card" data-bdr-cat="libraries design" href="posts/2026-05-15-transactional-outbox-with-omni-box/">
61+
<div class="bdr-card__visual bdr-card__visual--libraries"></div>
62+
<div class="bdr-card__eyebrow">Libraries · Design</div>
63+
<h3 class="bdr-card__title">The Transactional Outbox pattern in Python: omni-box</h3>
64+
<p class="bdr-card__lede">
65+
How <code>omni-box</code> solves the classic dual-write problem between Postgres
66+
and Kafka using the Transactional Outbox pattern, plus the Inbox side for
67+
idempotent consumers.
68+
</p>
69+
<div class="bdr-card__meta">May 15, 2026</div>
70+
</a>
71+
</div>

docs/blog/posts/2026-05-30-welcome.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,25 +30,25 @@ The libraries grew out of real production needs. When you build multiple service
3030

3131
### Foundation layer
3232

33-
[**sqlalchemy-foundation-kit**](https://github.com/bedrock-python/sqlalchemy-foundation-kit) provides async session factories, base ORM models with UUIDs and UTC timestamps, and the `AsyncSession` lifecycle wired to a Unit of Work.
33+
[**sqlalchemy-foundation-kit**](https://bedrock-python.github.io/sqlalchemy-foundation-kit/) provides async session factories, base ORM models with UUIDs and UTC timestamps, and the `AsyncSession` lifecycle wired to a Unit of Work.
3434

35-
[**redis-client-kit**](https://github.com/bedrock-python/redis-client-kit) wraps `redis-py` with optional Pydantic serialization and OpenTelemetry spans on every command.
35+
[**redis-client-kit**](https://bedrock-python.github.io/redis-client-kit/) wraps `redis-py` with optional Pydantic serialization and OpenTelemetry spans on every command.
3636

37-
[**aiokafka-foundation-kit**](https://github.com/bedrock-python/aiokafka-foundation-kit) gives you a clean producer/consumer abstraction over `aiokafka` with structured logging and metrics.
37+
[**aiokafka-foundation-kit**](https://bedrock-python.github.io/aiokafka-foundation-kit/) gives you a clean producer/consumer abstraction over `aiokafka` with structured logging and metrics.
3838

3939
### Reliability layer
4040

41-
[**omni-box**](https://github.com/bedrock-python/omni-box) implements the Transactional Outbox and Inbox patterns — write events to the same database transaction as your business data, publish to Kafka asynchronously.
41+
[**omni-box**](https://bedrock-python.github.io/omni-box/) implements the Transactional Outbox and Inbox patterns — write events to the same database transaction as your business data, publish to Kafka asynchronously.
4242

43-
[**idempotency-kit**](https://github.com/bedrock-python/idempotency-kit) provides idempotency key guards for HTTP endpoints and Kafka consumers — at-most-once semantics where you need them.
43+
[**idempotency-kit**](https://bedrock-python.github.io/idempotency-kit/) provides idempotency key guards for HTTP endpoints and Kafka consumers — at-most-once semantics where you need them.
4444

45-
[**deadline-budget**](https://github.com/bedrock-python/deadline-budget) propagates deadline and budget context across async task chains so no task runs longer than it should.
45+
[**deadline-budget**](https://bedrock-python.github.io/deadline-budget/) propagates deadline and budget context across async task chains so no task runs longer than it should.
4646

4747
### Testing & tooling
4848

49-
[**alembic-gauntlet**](https://github.com/bedrock-python/alembic-gauntlet) runs stairway tests on your Alembic migrations — every upgrade and downgrade, in order, against a real database.
49+
[**alembic-gauntlet**](https://bedrock-python.github.io/alembic-gauntlet/) runs stairway tests on your Alembic migrations — every upgrade and downgrade, in order, against a real database.
5050

51-
[**pg-partsmith**](https://github.com/bedrock-python/pg-partsmith) helps manage PostgreSQL declarative table partitioning from Python code.
51+
[**pg-partsmith**](https://bedrock-python.github.io/pg-partsmith/) helps manage PostgreSQL declarative table partitioning from Python code.
5252

5353
## What to expect from this blog
5454

docs/index.md

Lines changed: 149 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,153 @@
1-
# Bedrock Python
2-
3-
**Production-grade Python libraries and tools for engineers.**
4-
5-
Bedrock Python is a collection of carefully crafted open-source projects that form the infrastructure layer of modern backend services — from database foundations to message queues, from Redis clients to AI-powered developer tools.
6-
71
---
8-
9-
## Libraries
10-
11-
Reusable packages published to PyPI.
12-
13-
| Library | Description |
14-
|---|---|
15-
| [sqlalchemy-foundation-kit](https://github.com/bedrock-python/sqlalchemy-foundation-kit) | SQLAlchemy async session management and base models |
16-
| [redis-client-kit](https://github.com/bedrock-python/redis-client-kit) | Redis client with Pydantic and OpenTelemetry support |
17-
| [aiokafka-foundation-kit](https://github.com/bedrock-python/aiokafka-foundation-kit) | asyncio Kafka producer/consumer foundations |
18-
| [omni-box](https://github.com/bedrock-python/omni-box) | Transactional Outbox / Inbox implementation |
19-
| [idempotency-kit](https://github.com/bedrock-python/idempotency-kit) | Idempotency keys for HTTP and message handlers |
20-
| [alembic-gauntlet](https://github.com/bedrock-python/alembic-gauntlet) | Alembic migration testing (stairway tests) |
21-
| [pg-partsmith](https://github.com/bedrock-python/pg-partsmith) | PostgreSQL table partitioning helpers |
22-
| [deadline-budget](https://github.com/bedrock-python/deadline-budget) | Deadline and budget propagation for async tasks |
23-
24-
[See all libraries →](libraries/index.md)
25-
2+
title: Bedrock Python
3+
description: Production-grade Python libraries and developer tools for the infrastructure layer of modern backend services.
4+
hide:
5+
- navigation
6+
- toc
267
---
278

28-
## Tools
29-
30-
Standalone developer tools. Install and run — no integration into your codebase required.
31-
32-
| Tool | Description |
33-
|---|---|
34-
| [mr-review](https://github.com/bedrock-python/mr-review) | AI-powered merge request review for GitLab, GitHub, Gitea, and more |
35-
| [mattermind](https://github.com/bedrock-python/mattermind) | Ask natural-language questions about your Mattermost workspace |
36-
37-
[See all tools →](tools/index.md)
38-
39-
---
40-
41-
## Blog
42-
43-
Release notes, design decisions, and deep dives into each project.
9+
# Bedrock Python
4410

45-
- [Latest posts](blog/index.md)
46-
- [Browse by category](blog/category/index.md)
47-
- [Archive](blog/archive/index.md)
11+
<style>
12+
/* Landing page — hide the page H1 (we render our own hero) and the edit button. */
13+
.md-content__button { display: none !important; }
14+
.md-content__inner > h1:first-of-type { display: none; }
15+
.md-main__inner { margin-top: 0; }
16+
</style>
17+
18+
<section class="bdr-hero" markdown="0">
19+
<div class="bdr-hero__eyebrow">The Bedrock Python ecosystem</div>
20+
<h1 class="bdr-hero__title">Foundations for serious Python services.</h1>
21+
<p class="bdr-hero__lede">
22+
A focused set of open-source libraries and developer tools — Postgres, Redis, Kafka,
23+
Outbox, idempotency, partitioning, migrations, AI-powered code review — built for
24+
the same production stack, versioned together, tested together.
25+
</p>
26+
<div class="bdr-hero__actions">
27+
<a class="bdr-btn bdr-btn--primary" href="libraries/">Browse libraries →</a>
28+
<a class="bdr-btn bdr-btn--ghost" href="blog/">Read the blog</a>
29+
</div>
30+
</section>
31+
32+
<section class="bdr-featured" markdown="0">
33+
<div class="bdr-featured__visual"></div>
34+
<div>
35+
<div class="bdr-featured__eyebrow">Featured · Tools</div>
36+
<h2 class="bdr-featured__title">
37+
<a href="blog/posts/2026-05-28-introducing-mr-review/">Introducing mr-review: AI-powered merge request reviews</a>
38+
</h2>
39+
<p class="bdr-featured__lede">
40+
A new CLI tool that runs locally and walks through merge-request diffs the way a
41+
thorough engineer would — staged review with brief, dispatch, polish and post phases,
42+
plus presets for thorough, security, style, and performance.
43+
</p>
44+
<div class="bdr-featured__meta">
45+
<span>May 28, 2026</span>
46+
<span>·</span>
47+
<span>Tools</span>
48+
</div>
49+
</div>
50+
</section>
51+
52+
<section markdown="0">
53+
<div class="bdr-section-head">
54+
<h2 class="bdr-section-head__title">Latest from the blog</h2>
55+
<a class="bdr-section-head__link" href="blog/">See all posts →</a>
56+
</div>
57+
58+
<div class="bdr-grid">
59+
<a class="bdr-card" href="blog/posts/2026-05-30-welcome/">
60+
<div class="bdr-card__visual bdr-card__visual--meta"></div>
61+
<div class="bdr-card__eyebrow">Meta</div>
62+
<h3 class="bdr-card__title">Welcome to the Bedrock Python Blog</h3>
63+
<p class="bdr-card__lede">
64+
An introduction to the ecosystem — what Bedrock Python is, the libraries that
65+
form the foundation, reliability, and testing layers, and what you can expect.
66+
</p>
67+
<div class="bdr-card__meta">May 30, 2026</div>
68+
</a>
69+
70+
<a class="bdr-card" href="blog/posts/2026-05-28-introducing-mr-review/">
71+
<div class="bdr-card__visual bdr-card__visual--tools"></div>
72+
<div class="bdr-card__eyebrow">Tools</div>
73+
<h3 class="bdr-card__title">Introducing mr-review</h3>
74+
<p class="bdr-card__lede">
75+
A new CLI tool that runs locally and uses an LLM to walk through a merge
76+
request diff the way a thorough engineer would.
77+
</p>
78+
<div class="bdr-card__meta">May 28, 2026</div>
79+
</a>
80+
81+
<a class="bdr-card" href="blog/posts/2026-05-15-transactional-outbox-with-omni-box/">
82+
<div class="bdr-card__visual bdr-card__visual--libraries"></div>
83+
<div class="bdr-card__eyebrow">Libraries · Design</div>
84+
<h3 class="bdr-card__title">The Transactional Outbox pattern in Python</h3>
85+
<p class="bdr-card__lede">
86+
How <code>omni-box</code> solves the classic dual-write problem between Postgres
87+
and Kafka using the Transactional Outbox pattern, plus the Inbox side for
88+
idempotent consumers.
89+
</p>
90+
<div class="bdr-card__meta">May 15, 2026</div>
91+
</a>
92+
</div>
93+
</section>
94+
95+
<section markdown="0">
96+
<div class="bdr-section-head">
97+
<h2 class="bdr-section-head__title">Libraries</h2>
98+
<a class="bdr-section-head__link" href="libraries/">All libraries →</a>
99+
</div>
100+
101+
<div class="bdr-list">
102+
<a class="bdr-list__item" href="https://bedrock-python.github.io/sqlalchemy-foundation-kit/">
103+
<p class="bdr-list__name">sqlalchemy-foundation-kit</p>
104+
<p class="bdr-list__desc">Async SQLAlchemy session management, base ORM models, Unit of Work.</p>
105+
</a>
106+
<a class="bdr-list__item" href="https://bedrock-python.github.io/redis-client-kit/">
107+
<p class="bdr-list__name">redis-client-kit</p>
108+
<p class="bdr-list__desc">Redis client with optional Pydantic serialization and OpenTelemetry spans.</p>
109+
</a>
110+
<a class="bdr-list__item" href="https://bedrock-python.github.io/aiokafka-foundation-kit/">
111+
<p class="bdr-list__name">aiokafka-foundation-kit</p>
112+
<p class="bdr-list__desc">asyncio Kafka producer / consumer foundations with structured logging.</p>
113+
</a>
114+
<a class="bdr-list__item" href="https://bedrock-python.github.io/omni-box/">
115+
<p class="bdr-list__name">omni-box</p>
116+
<p class="bdr-list__desc">Transactional Outbox and Inbox patterns for SQLAlchemy + Kafka stacks.</p>
117+
</a>
118+
<a class="bdr-list__item" href="https://bedrock-python.github.io/idempotency-kit/">
119+
<p class="bdr-list__name">idempotency-kit</p>
120+
<p class="bdr-list__desc">Idempotency key guards for HTTP endpoints and Kafka consumers.</p>
121+
</a>
122+
<a class="bdr-list__item" href="https://bedrock-python.github.io/alembic-gauntlet/">
123+
<p class="bdr-list__name">alembic-gauntlet</p>
124+
<p class="bdr-list__desc">Stairway migration testing — every upgrade and downgrade, against a real DB.</p>
125+
</a>
126+
<a class="bdr-list__item" href="https://bedrock-python.github.io/pg-partsmith/">
127+
<p class="bdr-list__name">pg-partsmith</p>
128+
<p class="bdr-list__desc">PostgreSQL declarative table partitioning helpers for SQLAlchemy projects.</p>
129+
</a>
130+
<a class="bdr-list__item" href="https://bedrock-python.github.io/deadline-budget/">
131+
<p class="bdr-list__name">deadline-budget</p>
132+
<p class="bdr-list__desc">Deadline and budget propagation for async task chains.</p>
133+
</a>
134+
</div>
135+
</section>
136+
137+
<section markdown="0">
138+
<div class="bdr-section-head">
139+
<h2 class="bdr-section-head__title">Tools</h2>
140+
<a class="bdr-section-head__link" href="tools/">All tools →</a>
141+
</div>
142+
143+
<div class="bdr-list">
144+
<a class="bdr-list__item" href="https://bedrock-python.github.io/mr-review/">
145+
<p class="bdr-list__name">mr-review</p>
146+
<p class="bdr-list__desc">AI-powered merge request review for GitLab, GitHub, Gitea, and more.</p>
147+
</a>
148+
<a class="bdr-list__item" href="https://bedrock-python.github.io/mattermind/">
149+
<p class="bdr-list__name">mattermind</p>
150+
<p class="bdr-list__desc">Ask natural-language questions about your Mattermost workspace.</p>
151+
</a>
152+
</div>
153+
</section>

docs/javascripts/bedrock.js

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/* Bedrock Python — small enhancements.
2+
*
3+
* 1. Client-side category filter for the blog index chips.
4+
* The "All" chip and category chips (data-bdr-filter="<slug>") filter
5+
* cards in the grid by their data-bdr-cat (space-separated).
6+
* Real category-page links (e.g. category/libraries/) still navigate.
7+
*
8+
* 2. Wire `document$` for instant-navigation compatibility.
9+
*/
10+
11+
const initBedrock = () => {
12+
// Filter chips on the blog index. Only intercept clicks for the "All" chip;
13+
// category chips link to real category pages so they work without JS too,
14+
// but if we're on the blog index, prefer client-side filtering.
15+
const chipsRoot = document.querySelector("[data-bdr-chips]");
16+
const grid = document.querySelector("[data-bdr-grid]");
17+
if (!chipsRoot || !grid) return;
18+
19+
const chips = chipsRoot.querySelectorAll("[data-bdr-filter]");
20+
const cards = grid.querySelectorAll(".bdr-card");
21+
22+
chips.forEach((chip) => {
23+
chip.addEventListener("click", (event) => {
24+
const filter = chip.dataset.bdrFilter;
25+
// Don't intercept the Archive chip — it has its own page.
26+
if (filter === "archive") return;
27+
event.preventDefault();
28+
29+
chips.forEach((c) => c.classList.remove("is-active"));
30+
chip.classList.add("is-active");
31+
32+
cards.forEach((card) => {
33+
const cats = (card.dataset.bdrCat || "").split(/\s+/);
34+
const match = filter === "all" || cats.includes(filter);
35+
card.style.display = match ? "" : "none";
36+
});
37+
});
38+
});
39+
};
40+
41+
if (typeof document$ !== "undefined") {
42+
// Material's instant-navigation observable: re-run on every page load.
43+
document$.subscribe(initBedrock);
44+
} else {
45+
document.addEventListener("DOMContentLoaded", initBedrock);
46+
}

0 commit comments

Comments
 (0)