This is the multi-page printable view of this section. .
OINK Case
- 1: pgsty.com
- 2: pigsty.cc
- 3: pigsty.io
- 4: silo.pgsty.com
- 5: oink.pgsty.com
- 6: caps.vonng.com
- 7: pig.pgsty.com
- 8: sow.pgsty.com
- 9: exp.pgsty.com
- 10: ddia.vonng.com
- 11: tpme.vonng.com
- 12: pgint.vonng.com
- 13: PostgreSQL ecosystem library
- 14: pgsty.pro
- 15: ext.pgsty.com
Fifteen site projects, from a two-page utility to a multilingual documentation estate and three books. Open a card to read the case, then follow its site or source link. Use the Case Guide to compare examples by the kind of site you want to build.
1 - pgsty.com
pgsty.com is the bilingual corporate site behind Pigsty.
It has only about ten pages: a type: home front page assembled from
data/home/{en,zh}.yaml, followed by focused pages for solutions, company
information, and pricing.
What it demonstrates
- Using OINK as a landing-page theme with almost no documentation tree.
- Maintaining compact English and Chinese marketing pages as peers.
- Building the home-page narrative from reusable data sections.
This pattern is appropriate when a project wants OINK’s brand, navigation, search, and multilingual conventions but primarily needs a small public-facing site rather than a manual.
2 - pigsty.cc
pigsty.cc publishes Pigsty in Simplified Chinese. The case snapshot counted more than 1,490 content files and over 300 blog posts, with its own data-driven pricing page and Chinese as the default content language.
What it demonstrates
- Splitting a very large bilingual corpus into two independently deployed, single-language sites.
- Connecting the pair through the alternate-site control and version menu.
- Letting each language keep its own publishing cadence and landing-page data.
This pattern trades same-domain language switching for clearer ownership and smaller builds. It is useful when both languages are already substantial products rather than occasional translations.
3 - pigsty.io
pigsty.io is the English home of Pigsty, the open-source PostgreSQL distribution. At the snapshot used for this case, it contained more than 1,400 Markdown files, over 200 blog posts, an extension catalogue, and a data-driven pricing page.
What it demonstrates
- A large documentation tree and editorial blog living in one Hugo site.
- Structured catalogues whose content and data are maintained separately.
- A
layout: landingpricing page assembled fromdata/landing. - Taxonomies and a version menu that also link to sibling and historical sites.
Choose this pattern when one English-first site must serve reference material, news, catalogues, and commercial landing pages without splitting the toolchain.
4 - silo.pgsty.com
silo.pgsty.com documents SILO, an S3-compatible
object store. The case snapshot counted 411 pages per language. A migration
manifest covering 387 upstream pages generates data/docs_nav.json, which then
drives the documentation sidebar. The site also has module taxonomy and a
download page.
What it demonstrates
- Migrating a large upstream manual without flattening its information design.
- Generating navigation from a checked manifest instead of hand-maintaining it.
- Layering local bilingual content, taxonomy, and downloads around imported docs.
Use this pattern when the upstream corpus remains authoritative but the local site needs its own navigation, language peers, and product surfaces.
Follow the navigation data boundary
The committed data/docs_nav.json
records its inputs in meta.generated_from (migration/reports/navigation.csv)
and meta.manifest (migration/minio-docs-manifest.csv). The migration process
owns those inputs and the generated navigation; OINK consumes the resulting
tree. Those input paths describe provenance, not a generator bundled with OINK.
This trades a second, site-maintained navigation artifact for control over an imported manual’s order. Use the ordinary content tree for a small original manual; adopt generated navigation only when you also maintain its source and regeneration procedure.
5 - oink.pgsty.com
oink.pgsty.com is the site you are reading. It is the theme’s public manual and a real consumer used for regression coverage. Its component pages render live examples; the same repository also carries design contracts, Book fixtures, download data, and home and landing-page data.
What it demonstrates
- Documentation examples that are executable regression fixtures, not screenshots.
- One site serving users, content authors, theme developers, and reviewers.
- Component, Docs, Blog, Book, Case, download, and landing surfaces together.
- Bilingual content checked against a pinned Hugo Module dependency.
Use this repository as the broad reference implementation; use the narrower cases when starting a site that needs only one or two OINK content models.
6 - caps.vonng.com
caps.vonng.com is a two-page-per-language
site for the Capslock keyboard enhancement: a home page and an interactive
configuration generator. The generator reads data/capslock-v3.json and uses
a custom customizer shell type alongside the regular documentation shell.
What it demonstrates
- The practical lower bound of an OINK site: a tiny project needs no front-end application just to publish a tool and its introduction.
- Extending the shell registry for one purpose-built interactive page.
- Keeping generator data separate from its presentation and bilingual prose.
Use this pattern when documentation is small but one interactive tool deserves the same navigation, theme, and language controls as the rest of the site.
Keep the application at the site layer
The site’s hugo.yaml
includes customizer in params.ui.shell_types.
content/customizer.md
selects type: customizer and layout: customizer, then invokes the site’s
capslock-configurator shortcode.
The configurator, JavaScript, and keyboard data are site code; OINK does not
include this application.
Reuse this boundary when a small custom tool needs the documentation shell. You must maintain its interaction code yourself; a two-page site does not make that application maintenance disappear.
7 - pig.pgsty.com
pig.pgsty.com documents PIG, the PostgreSQL extension
package manager. Its core manual is deliberately compact—18 pages per language
in the case snapshot—while a 50-post bilingual blog carries updates and deeper
explanations. The home page is assembled from data/home.
What it demonstrates
- A shallow, mostly single-file documentation tree for a focused CLI product.
- English and Chinese peers without duplicating navigation design.
- A data-driven home page paired with a larger stream of blog content.
Choose this pattern when the reference manual is small and stable but product news, tutorials, and release context need room to grow.
Reuse the separation, not the product data
The Docs root
selects the documentation type. Separately,
data/home/metrics.yaml
keeps product counters outside the prose. The site maintains those facts and
the templates that consume them; OINK supplies the reading shell.
For a small product, start with ordinary Docs files and add structured home data only for facts reused elsewhere. Copy the organization, not PIG’s package counts or product-specific home implementation.
8 - sow.pgsty.com
sow.pgsty.com documents SOW, an APT and YUM repository manager. The case snapshot contained 55 pages per language and a dedicated download page whose versions, tags, and release artifacts are generated from structured release data.
What it demonstrates
- Keeping operational documentation bilingual at a moderate scale.
- Giving downloads their own content type instead of embedding links in prose.
- Reusing release data so package metadata has one source of truth.
This pattern fits software that distributes many platform-specific artifacts and needs installation instructions, repositories, and downloads to evolve together.
9 - exp.pgsty.com
exp.pgsty.com documents PG Exporter, a Prometheus metrics collector for PostgreSQL. The case snapshot counted 15 pages per language and 37 bilingual blog posts. Generated navigation, home-page data, and a structured metric catalogue do most of the organizational work.
What it demonstrates
- Using
data/docs_nav.jsonfor a small but deliberately ordered manual. - Rendering a domain catalogue from structured data rather than repeated prose.
- Selecting
typography: systemwhen a site should make no brand-font request.
This pattern suits technical products whose reference data is as important as their narrative documentation, especially where a lightweight font stack is preferred.
10 - ddia.vonng.com
ddia.vonng.com publishes Designing Data-Intensive Applications as a multilingual book. The case snapshot includes 24 chapters each in Simplified and Traditional Chinese, 23 chapters of the English second edition, and two 21-chapter first-edition sets.
What it demonstrates
- A complete
type: bookreading shell with chapter-level navigation. - More than 130 numbered figure, table, equation, and example targets.
- Stable cross-references and generated book indexes across several editions.
- Multiple written-language variants inside one publication.
Use this pattern for long-form works where numbering, citations, and movement between chapters matter more than documentation-style sidebars.
11 - tpme.vonng.com
tpme.vonng.com publishes The Product-Minded
Engineer in English and Chinese, with 18 chapters per language in the case
snapshot. Its configuration narrows the supported shell types to [book].
What it demonstrates
- A publication with exactly one content model and no documentation shell.
- Bilingual chapter peers with a shared visual and navigational system.
- A smaller Book implementation than the multi-edition DDIA site.
This is the clearer starting point for a single-title tutorial or translated book: keep the site architecture narrow, then add numbering and indexes only as the manuscript needs them.
Limit the site to the reading model it needs
The site’s hugo.yaml
sets the relevant options under params.ui:
This keeps the shared shell focused on a book and uses system fonts. It does not convert arbitrary pages into chapters: the site still owns its manuscript, language configuration, and Book front matter. Start from the Book root pattern and add another shell type only when a separate documentation or publishing section needs it.
12 - pgint.vonng.com
pgint.vonng.com publishes PG 技术内幕, the 2018 Chinese translation of Hironobu Suzuki’s The Internals of PostgreSQL. The site carries two prefaces, eleven chapters, a generated table of contents, and a licensing page — all in Simplified Chinese, with no English peer.
What it demonstrates
- A deliberately monolingual OINK site: one language tree, and a language switcher that stays out of the way because there is nothing to switch to.
- The Book shell carrying a finished translation rather than a living manual — chapter navigation, whole-book print output, and a landing page in one site.
- A landing page that credits an upstream author alongside the translators, and links outward to the continuously updated English original.
Use this pattern for a completed translation or a stable published text: the content will not grow, so the site’s job is orientation, reading comfort, and honest attribution rather than change management.
→ Writing a book · TPME case · DDIA case
13 - PostgreSQL ecosystem library
The PostgreSQL ecosystem library brings the operating manuals for Patroni, HAProxy, etcd, PgBouncer, pgBackRest, and pgBadger into one PostgreSQL-focused library. The case snapshot counted 217 English pages and 80 Chinese pages.
This case describes the Hugo component library. The PGSQL.CC public portal is a separate Django application.
What it demonstrates
- Giving several upstream products a consistent local information architecture.
- Publishing English first while Chinese coverage grows over time.
- Keeping partial translation useful instead of blocking publication on parity.
- Using subtrees to preserve clear product boundaries inside an aggregate site.
Choose this pattern for a curated technical library where sources and translation maturity vary, but readers benefit from one search and one visual system.
14 - pgsty.pro
pgsty.pro documents Pigsty v5 in English and Chinese. The
case snapshot counted 343 documentation pages per language and 67 bilingual
blog posts. Its release archive is the distinctive part: 128 localized pages
render version data through the reusable release-card component.
What it demonstrates
- Keeping a long product history navigable without hand-building every card.
- Sharing structured release data between download, archive, and detail pages.
- Maintaining documentation and editorial posts as bilingual peers.
Use this pattern for products with many supported or historical versions where release metadata must stay consistent across several surfaces.
15 - ext.pgsty.com
ext.pgsty.com is the PostgreSQL Extension Catalog: search across extensions, package families, dependencies, and the exact PostgreSQL and operating-system combinations each one is available for. The catalogue indexes 2,241 extensions, 576 of them packaged, across 16 Linux platforms and 5 major PostgreSQL versions.
What it demonstrates
- A queryable dataset presented as the primary object of a site, with the reading shell kept out of its way.
- A catalogue and its prose living in one OINK site, the same arrangement PG Exporter and pigsty.io use for their own structured data.