Skip to content

feat(databases): dedicated-database ecosystem guides + integration entries#3042

Open
abnegate wants to merge 6 commits into
feat-dedicated-dbfrom
dedicated-db-ecosystem
Open

feat(databases): dedicated-database ecosystem guides + integration entries#3042
abnegate wants to merge 6 commits into
feat-dedicated-dbfrom
dedicated-db-ecosystem

Conversation

@abnegate

@abnegate abnegate commented Jun 9, 2026

Copy link
Copy Markdown
Member

Summary

Adds the ecosystem integration layer on top of the dedicated-database foundation already on feat-dedicated-db. Targets feat-dedicated-db (not main).

19 docs guides under docs/products/databases/dedicated/, grouped in the nav as:

  • Connect your stack — Node.js drivers, Prisma, Drizzle, Auth.js, Better Auth, Laravel, Rails, Django, FastAPI, Spring Boot, EF Core, GORM
  • Deploy — Next.js, Vercel, Cloudflare
  • Analytics & BI — Metabase, Grafana, Retool, dbt

5 /integrations catalog entries — Prisma, Drizzle (databases), Next.js, Vercel, Cloudflare (deployments).

Plus src/lib/utils/code.ts: registers prisma (→ graphql) and toml (→ ini) highlight.js aliases so ORM/infra fences render. The toml alias also fixes a latent unknown-language throw in functions/examples (highlight.js throws on unregistered languages).

Grounding

Every guide uses the real connection model from the product code: connection string postgres://appwrite:…@db-<project>-<db>.<region>.appwrite.center:5432/appwrite?sslmode=require, pooler ports 6432/6033, transaction vs session pool modes and their prepared-statement implications, scoped read-only connection users for BI tools, the HTTP SQL API for edge runtimes, and branches for preview/CI. Each agent-authored guide verified its third-party tool's API against the tool's live docs.

Validation

  • ✅ Markdoc schema validation — 0 errors across all 24 pages
  • ✅ Fence-language audit — only registered languages (highlight.js throws otherwise)
  • ✅ Internal link + anchor integrity — all resolve
  • prettier --check + eslint clean on code.ts and +layout.svelte
  • ⚠️ Full site build not run locally — this worktree has no backend .env, so the dev server 500s on every route (Client.setEndpoint(undefined) in the root layout). CI runs the real build.

Before merge (why this is a draft)

  • Add image assets for the 5 integration entries — each needs static/images/integrations/<slug>/cover.avif + static/images/integrations/avatars/<slug>.avif for prisma, drizzle, nextjs, vercel, cloudflare. Until then the catalog cards show broken images. Brand sources: Prisma/Drizzle/Next.js/Vercel/Cloudflare press kits.
  • Green CI.

Out of scope / follow-ups

  • Terraform (appwrite_dedicated_database resources) and MCP DB tools are blocked on the public SDKs: both terraform-provider-appwrite (pins sdk-for-go/v5) and appwrite/mcp (Python appwrite SDK) consume the generated SDKs, which have no Compute service yet. Unblock path: dedicated-DB API → public spec → regenerate SDKs → then add provider resources / register appwrite.services.compute in the MCP server.
  • Remaining hosting providers (Netlify, Railway, Render, Fly.io, Deno Deploy), more integration-catalog entries, and AI prompt.md surfaces are future passes.

🤖 Generated with Claude Code

abnegate and others added 2 commits June 9, 2026 19:39
…BI guides

Guides for connecting external tooling to dedicated databases, grouped in the
nav as Connect your stack / Deploy / Analytics & BI: Node.js drivers, Prisma,
Drizzle, Auth.js, Better Auth, Laravel, Rails, Django, FastAPI, Spring Boot,
EF Core, GORM, Next.js, Vercel, Cloudflare, Metabase, Grafana, Retool, dbt.

Grounded in the real connection model: pooled vs direct endpoints, transaction-
vs session-mode pooling and its prepared-statement implications, scoped
read-only connection users for BI tools, and the HTTP SQL API for edge runtimes.

Registers prisma and toml highlight.js aliases so ORM/infra code fences render;
the toml alias also fixes a latent unknown-language throw in functions/examples.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Adds /integrations entries for Prisma, Drizzle (databases) and Next.js, Vercel,
Cloudflare (deployments) that link into the dedicated-database guides. Cover and
avatar image assets still need to be added before these render in the catalog.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@appwrite

appwrite Bot commented Jun 9, 2026

Copy link
Copy Markdown

Appwrite Website

Project ID: 69d7efb00023389e8d27

Sites (1)
Site Status Logs Preview QR
 website
69d7f2670014e24571ca
Ready Ready View Logs Preview URL QR Code

Website (appwrite/website)

Project ID: 684969cb000a2f6c0a02

Sites (1)
Site Status Logs Preview QR
 website
68496a17000f03d62013
Queued Queued View Logs Preview URL QR Code


Tip

Silent mode disables those chatty PR comments if you prefer peace and quiet

abnegate and others added 2 commits June 9, 2026 21:35
Adds WebP avatar (448x448) and cover (1200x675) tiles for the Prisma, Drizzle,
Next.js, Vercel, and Cloudflare integration entries — official marks (via Simple
Icons) on brand-color backgrounds — and points their frontmatter at the .webp
assets. Resolves the missing-image pre-merge item on the integration cards.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The website asset pipeline (`bun run optimize`) converts all raster images to
AVIF and rewrites references; the assets CI check enforces it. Ran it on the
integration logos/covers, so WebP was converted to AVIF, the five entries' image
references updated, and the optimize cache refreshed.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@abnegate abnegate marked this pull request as ready for review June 10, 2026 05:16
Copilot AI review requested due to automatic review settings June 10, 2026 05:16

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@greptile-apps

greptile-apps Bot commented Jun 10, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

Adds 19 dedicated-database ecosystem guides and 5 integration catalog entries on top of the existing feat-dedicated-db branch, covering ORMs, auth libraries, backend frameworks, edge runtimes, and BI tools. Also registers toml and prisma highlight.js aliases in code.ts and adds the corresponding nav sections to the databases layout.

  • 19 new docs guides under dedicated/ (Node.js drivers, Prisma, Drizzle, Auth.js, Better Auth, Laravel, Rails, Django, FastAPI, Spring Boot, EF Core, GORM, Next.js, Vercel, Cloudflare, Metabase, Grafana, Retool, dbt) with consistent pooling/direct-URL patterns, TLS guidance, and branch-for-CI sections across all guides.
  • 5 integration catalog entries (Prisma, Drizzle, Next.js, Vercel, Cloudflare) with matching .avif cover and avatar assets; the optimize-cache entries for those assets use .webp extensions and will miss the real .avif files on every build — already flagged in a prior thread.
  • code.ts correctly extends the existing alias registration pattern; +layout.svelte wires all 19 routes into the sidebar with consistent isNewUntil('31 Aug 2026') badges.

Confidence Score: 4/5

Safe to merge once the three issues already flagged in prior threads are resolved; the guides and integration entries are otherwise accurate and complete.

The .optimize-cache.json entries all use .webp keys while the committed image files are .avif, so the image-optimization pipeline will never match any of the ten new entries. The Auth.js guide is missing the required type String field on the Account model (every OAuth sign-in will fail with a column-not-found error), and the Drizzle MySQL/MariaDB initial drizzle.config.ts points DATABASE_URL at what the guide's own pooling section defines as the transaction-mode pooler URL. All three findings were raised in prior review threads and are tracked; nothing new surfaced in this pass.

.optimize-cache.json (wrong extensions on all 10 new image cache entries), auth-js/+page.markdoc (incomplete Account schema), and drizzle/+page.markdoc (MySQL config section uses pooled URL for migrations).

Important Files Changed

Filename Overview
src/lib/utils/code.ts Adds toml to the existing HCL/Terraform alias group and registers prismagraphql; both changes are well-scoped and correctly extend the existing pattern.
src/routes/docs/products/databases/+layout.svelte Adds four new nav sections (Connect your stack, Deploy, Analytics & BI) with 19 guide entries pointing to the new dedicated-db routes; all hrefs and isNewUntil dates are consistent.
.optimize-cache.json All 10 new cache entries use .webp extensions while the actual committed files are .avif; the cache keys will never match the real file paths, causing cache misses on every build.
src/routes/docs/products/databases/dedicated/drizzle/+page.markdoc Comprehensive Drizzle guide; the initial MySQL/MariaDB drizzle.config.ts in the Config section uses DATABASE_URL (which maps to the pooler URL), while the Pooling section correctly switches to DIRECT_URL — a latent inconsistency already flagged in a prior review thread.
src/routes/docs/products/databases/dedicated/auth-js/+page.markdoc Auth.js guide with Prisma adapter; the Account model schema omits the required type String field, which will cause runtime failures for any OAuth sign-in — already flagged in a prior review thread.
src/routes/docs/products/databases/dedicated/prisma/+page.markdoc Well-structured Prisma guide; correctly separates DATABASE_URL (pooler, transaction mode, pgbouncer=true) from DIRECT_URL (engine port) and wires both into the datasource block.
src/routes/docs/products/databases/dedicated/cloudflare/+page.markdoc Detailed Cloudflare Workers + Hyperdrive + SQL API guide; wrangler.toml example still uses ini fence despite toml now being registered — a cosmetic issue already noted in a prior review thread.
src/routes/docs/products/databases/dedicated/better-auth/+page.markdoc Better Auth guide correctly uses DIRECT_URL for CLI schema generation and migration, and pooled DATABASE_URL for the runtime driver pool.
src/routes/docs/products/databases/dedicated/nextjs/+page.markdoc Next.js App Router guide; correctly splits pooled and direct URLs, handles the Edge runtime via SQL API, and uses globalThis singleton pattern for hot-reload safety.
src/routes/docs/products/databases/dedicated/spring-boot/+page.markdoc Spring Boot + HikariCP guide; accurately documents JDBC URL formation with TLS, pool sizing guidance, and Flyway/Liquibase migration paths against the direct endpoint.
src/routes/docs/products/databases/dedicated/dbt/+page.markdoc dbt-postgres guide; correctly warns against transaction-mode pooler and recommends direct endpoint or session-mode pooler for DDL-heavy transformation workloads.

Reviews (3): Last reviewed commit: "docs(databases): replace PostgreSQL-only..." | Re-trigger Greptile

Comment on lines +62 to +82

model Account {
userId String
provider String
providerAccountId String
access_token String?
expires_at Int?
user User @relation(fields: [userId], references: [id], onDelete: Cascade)

@@id([provider, providerAccountId])
}

model Session {
sessionToken String @id
userId String
expires DateTime
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
}

model VerificationToken {
identifier String

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Auth.js Account model missing required type field

The Account model in the Prisma schema omits the type field, which the @auth/prisma-adapter requires to distinguish OAuth, OIDC, email, and credentials accounts. Every sign-in attempt with an OAuth provider will fail with a database column-not-found error because the adapter always writes the provider type into that column. The official authjs.dev Prisma adapter schema lists type String as mandatory.

Comment thread src/routes/docs/products/databases/dedicated/drizzle/+page.markdoc
Comment thread .optimize-cache.json
"static/images/integrations/avatars/appsignal.png": "69e569f5c89b86a073f4f6ad8c2c33119a1de5e7991353d8be345c11bcdf32c0",
"static/images/integrations/avatars/aws.png": "7306ef5be26cf0d3fc0d9a50512828af4e69d6c7d53b835c17982d7db554cb65",
"static/images/integrations/avatars/claude.png": "4cf4f4c37eb4c306bade50c50529bb8d00a16b5b888693190c2e2988f3bbf8b8",
"static/images/integrations/avatars/cloudflare.webp": "f7d4cbbb53f7dcf160dbc6aca2b15c1359b2ba57c613a0adf17548263b94982f",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Optimize-cache keys use .webp but actual files are .avif

All existing cache entries use the source file's real extension (.png). The five new avatar entries and two cover entries added here use .webp, while the actual binary files committed in this PR are .avif (e.g., static/images/integrations/avatars/cloudflare.avif). The image-optimization pipeline will look up each source path and won't find a match, so the cached results are effectively unreachable and the pipeline will reprocess the files on every build — or silently skip them, depending on how cache misses are handled.

Three cover entries are also absent (nextjs/cover, prisma/cover, vercel/cover) while their .avif files are present in the diff, so those covers have no cache entry at all. The cache should use .avif keys for all ten new images.

abnegate and others added 2 commits June 11, 2026 12:43
The ecosystem guides told readers to download a CA certificate from the
Network page for verify-full, a flow that doesn't exist: the wildcard
proxy front presents a certificate signed by a well-known public CA, so
full verification works against the trust store the runtime already
has. Correct each stack: Node verifies via its built-in store (a custom
ca bundle is only for images without a trust store), Go drivers fall
back to the system pool, libpq stacks point sslrootcert at system
(libpq 16+) or the OS bundle, pgJDBC uses DefaultJavaSSLFactory for the
JVM store, and Npgsql and Grafana validate against OS roots with no
extra parameter.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The connect-your-stack guides opened with "This guide uses PostgreSQL,
to use MySQL or MariaDB swap X" and buried the actual swap in a trailing
appendix, leaving non-PostgreSQL readers to translate every snippet
themselves. Engine-specific content (connection strings, drivers,
dialects, TLS parameters) now lives in tabs so readers pick their
engine once per block, like the SDK multicode examples.

Also corrects guidance the tab restructuring surfaced: retool, metabase,
and fastapi still told readers to download a CA bundle that does not
exist (missed by the verify-full fix), the cloudflare Hyperdrive MySQL
example carried a ?ssl=true parameter Hyperdrive's connection strings
do not accept, and django claimed its ORM does not fully support
MySQL/MariaDB when both are officially supported backends.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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.

2 participants