Skip to content

Text polish: comprehensive copy review for clarity, consistency, and SEO #347

Description

@NikolayS

This issue tracks a comprehensive copy review to polish all user-facing text in PgQue for clarity, correct American English, consistency with the postgres-ai writing standards, and SEO/LLM friendliness. The goal is prose that reads as if written by a careful native technical writer for engineers, while preserving 100% of the technical meaning (no changes to code, SQL, commands, flags, identifiers, versions, or benchmark numbers).

Fixes will arrive as a pull request for review and are not merged automatically. Work is grouped into edit tasks below; files marked Fable get the highest-polish prose treatment, the rest get a technical copy edit.

Status: copy review complete. PR: #348. Every file below was reviewed against the style contract; files with prose defects were edited, and files already at native quality were reviewed and left as-is (noted per task).

Files to polish

Critical prose (Fable-level treatment)

Task readme (Fable):

  • README.md

Task landing (Fable) -- landing page; edit only human-readable text nodes and the prose in the feature/comparison content strings, never markup, classes, imports, or code:

  • web/src/pages/index.astro

Task docs-guides-1 (Fable):

  • docs/README.md
  • docs/tutorial.md
  • docs/concepts.md
  • docs/examples.md

Task docs-guides-2 (Fable):

  • docs/installation.md
  • docs/monitoring.md
  • docs/latency-and-tuning.md

Task clients (Fable) -- user-facing client-library READMEs:

  • clients/README.md
  • clients/go/README.md
  • clients/python/README.md
  • clients/ruby/README.md
  • clients/typescript/README.md

Technical copy edit (Opus-level treatment)

Task docs-reference (Opus) -- function reference; leave signatures, parameter names, and code untouched:

  • docs/reference.md

Task meta (Opus) -- reviewed; already native-quality, no edits needed:

  • CONTRIBUTING.md
  • web/README.md
  • devel/sql/README.md

Task bench-1 (Opus) -- benchmark docs; never alter numbers, tables, or hardware/config values:

  • benchmark/README.md (reviewed, already clean)
  • benchmark/METHODOLOGY.md
  • benchmark/HARDWARE.md (reviewed, already clean)
  • benchmark/OPS_GOTCHAS.md (reviewed, already clean)
  • benchmark/R10.md

Task bench-2 (Opus) -- benchmark run READMEs; numbers/tables are data:

  • benchmark/install/README.md (reviewed, already clean)
  • benchmark/subconsumer-scaling/README.md
  • benchmark/tick-rate/README.md (reviewed, already clean)
  • benchmark/xmin-horizon/README.md

Task brief (Opus) -- published design brief; edit only human-readable HTML text nodes and metadata (title, meta description), never tags, styles, or structure:

  • web/public/briefs/partition-keys.html

Deliberately not modified

Internal working documents, generated output, legal text, and code whose strings are asserted by tests:

  • blueprints/ (all: SPECx.md, PHASES.md, BENCH_XMIN_HORIZON.md, BETTER_DOCS.md, COOPERATIVE_CONSUMERS.md, idempotency/DESIGN.md, idempotency/SPEC.md, partition-keys/SPEC.md, partition-keys/decisions.md) -- internal design specs and working docs.
  • CLAUDE.md -- AI agent engineering instructions, not user-facing.
  • clients/go/RELEASE.md, clients/python/RELEASE.md, clients/ruby/RELEASE.md, clients/typescript/RELEASE.md -- internal release-process runbooks.
  • web/public/briefs/partition-keys/index.html and v0.1.html through v0.8.html -- frozen, superseded version-history snapshots of the design brief (internal draft iterations); only the live brief is polished.
  • benchmark/xmin-horizon/results/results.md -- generated benchmark results; the tables are load-bearing data.
  • NOTICE, LICENSE -- legal attribution and license text.
  • web/src/components/docs/SocialIcons.astro, web/src/components/docs/ThemeSelect.astro -- UI widget markup with standard icon/theme labels.
  • web/src/styles/custom.css -- pure CSS, no prose.
  • sql/ and devel/sql/ SQL sources, tests/ -- SQL RAISE messages and client sentinel error strings (e.g. clients/go/errors.go) are asserted verbatim by the test suite; see the note below.

SEO and LLM friendliness ideas

The landing page (web/src/pages/index.astro) and every docs/*.md page already carry good metadata: a keyword-bearing <title> / frontmatter title, a self-contained <meta name="description"> / frontmatter description, a canonical URL, and OG/Twitter tags. The H1 ("Zero-bloat Postgres queue.") already leads with the primary search term. So the copy pass focused on tightening first paragraphs into self-contained, quotable summaries (done in this PR for docs/README.md, docs/tutorial.md, docs/examples.md, and clients/README.md). Concrete ideas for a follow-up, none of which touch code or invent claims:

Landing page (web/src/pages/index.astro)

  • Add JSON-LD structured data (<script type="application/ld+json">) describing a SoftwareApplication (or SoftwareSourceCode) with name: "PgQue", applicationCategory: "DeveloperApplication", operatingSystem, license (Apache-2.0), and sameAs pointing to the GitHub repo. Lets Google and LLMs recognize PgQue as a named software product. This is additive markup, so it was deferred out of the prose-only PR.
  • Add a FAQPage JSON-LD block built from questions the page already answers ("Does it work on RDS / Aurora / Supabase / Neon?", "Does it need a C extension or a daemon?", "How is it different from a SKIP LOCKED job queue?"). High-value for LLM answer extraction and Google rich results.
  • Add <meta name="twitter:title"> and <meta name="twitter:description"> (only twitter:card is present) so the Twitter/X card text is explicit rather than falling back to OG.
  • Add <meta property="og:image:alt"> describing the OG image for accessibility and card previews.

Docs pages

  • Emit TechArticle or Article JSON-LD per docs page from the existing frontmatter title + description (Starlight can inject this via a head config), reinforcing each page as a distinct indexable document.
  • Add BreadcrumbList JSON-LD (Home -> Docs -> page) to strengthen the site hierarchy in search results.
  • Tighten a few H2s toward searched phrasing where it stays natural, e.g. framing tutorial/monitoring headings around "Postgres queue" and "dead-letter queue" so section anchors carry the query terms.

Repo / README

  • Add an llms.txt at the site root (and a repo copy) listing the canonical docs URLs with one-line descriptions (tutorial, reference, examples, concepts, monitoring, latency-and-tuning), so LLM crawlers get a curated, low-noise map of the documentation.
  • Keep the README's one-logical-H1 structure and the "Contents" table of contents; both already help LLM chunking and internal linking. Consider ensuring every docs page cross-links back to the tutorial and reference (most already do) to strengthen internal linking.
  • Canonical naming is already consistent: pgque for schema/package/CLI/identifiers, PgQue for prose/headings, PgQ for the upstream engine. Worth keeping this exact convention in any new marketing or blog copy so search and LLMs disambiguate the three.

Brief page (web/public/briefs/partition-keys.html)

  • The <title> uses a middot breadcrumb form ("PgQue Brief · Partition Keys · v0.8"); it already has a strong <meta name="description">. If these briefs are meant to rank, add <link rel="canonical"> and an OG title/description mirroring the meta description.

Follow-ups (not part of this pass)

  • Source-code user-facing strings (SQL raise exception/notice text under devel/sql/, and Go/Python/Ruby/TypeScript client error strings) were reviewed but deliberately left out of the edit tasks: many are matched verbatim by the test suite (e.g. tests/test_*.sql, clients/go/errors_test.go), so touching them risks breaking tests and would require regenerating sql/pgque.sql via build/transform.sh. If desired, a separate, test-aware pass could clean up wording where no test asserts the string.
  • Structured-data (JSON-LD), llms.txt, and the extra social/OG meta tags listed above are additive markup/files, not prose, so they were deferred from this prose-only PR to a dedicated SEO follow-up.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions