feat(databases): dedicated-database ecosystem guides + integration entries#3042
feat(databases): dedicated-database ecosystem guides + integration entries#3042abnegate wants to merge 6 commits into
Conversation
…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 WebsiteProject ID: Website (appwrite/website)Project ID: Tip Silent mode disables those chatty PR comments if you prefer peace and quiet |
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>
Greptile SummaryAdds 19 dedicated-database ecosystem guides and 5 integration catalog entries on top of the existing
Confidence Score: 4/5Safe to merge once the three issues already flagged in prior threads are resolved; the guides and integration entries are otherwise accurate and complete. The
Important Files Changed
Reviews (3): Last reviewed commit: "docs(databases): replace PostgreSQL-only..." | Re-trigger Greptile |
|
|
||
| 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 |
There was a problem hiding this comment.
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.
| "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", |
There was a problem hiding this comment.
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.
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>


Summary
Adds the ecosystem integration layer on top of the dedicated-database foundation already on
feat-dedicated-db. Targetsfeat-dedicated-db(notmain).19 docs guides under
docs/products/databases/dedicated/, grouped in the nav as:5
/integrationscatalog entries — Prisma, Drizzle (databases), Next.js, Vercel, Cloudflare (deployments).Plus
src/lib/utils/code.ts: registersprisma(→ graphql) andtoml(→ ini) highlight.js aliases so ORM/infra fences render. Thetomlalias also fixes a latent unknown-language throw infunctions/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
prettier --check+eslintclean oncode.tsand+layout.svelte.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)
static/images/integrations/<slug>/cover.avif+static/images/integrations/avatars/<slug>.avifforprisma,drizzle,nextjs,vercel,cloudflare. Until then the catalog cards show broken images. Brand sources: Prisma/Drizzle/Next.js/Vercel/Cloudflare press kits.Out of scope / follow-ups
appwrite_dedicated_databaseresources) and MCP DB tools are blocked on the public SDKs: bothterraform-provider-appwrite(pinssdk-for-go/v5) andappwrite/mcp(PythonappwriteSDK) consume the generated SDKs, which have no Compute service yet. Unblock path: dedicated-DB API → public spec → regenerate SDKs → then add provider resources / registerappwrite.services.computein the MCP server.prompt.mdsurfaces are future passes.🤖 Generated with Claude Code