Integration Runtime Layer
search
Full-text + vector search — pgvector (Postgres). BM25 keyword search and vector cosine search over your own database, no external search infra.
Billing v2 migration playbook
0.94Step-by-step migration from legacy invoices to the new metering pipeline.
posts/2024/billing-v2.mdMigration checklist for billing tenants
0.89Verify RLS, secrets rotation, and webhook backfill before cutover.
docs/billing/migration.mdxCreem + WeChat Pay billing adapter notes
0.81One billing contract keeps customer code stable across both rails.
changelog/2026/adapters.mdZero-downtime migration patterns
0.76Dual-write, shadow-read, then flip — applies to billing data too.
docs/patterns/migration.mdx
Searched 12,401 docs in 38ms · Postgres backend38ms
In code
search.ts
1import { getSearch } from "@nebutra/search";
2
3// Postgres pgvector + full-text — no separate search cluster to run.
4const search = await getSearch();
5
6await search.indexDocument("posts", {
7 id: post.id,
8 title: post.title,
9 body: post.body,
10 tenantId: post.tenantId,
11});
12
13const results = await search.search("posts", {
14 query: "billing migration",
15 tenantId: org.id,
16});More in nebutra.com
- admin-toolingSelf-serve operator dashboards — tenants, billing overrides, feature-flag flips — all gated by @nebutra/permissions.
- cacheTag-based cache with Redis, Upstash, or in-memory backend. Same get/set/invalidate(tags) for serverless and self-hosted.
- collabRealtime co-editing primitives — Yjs CRDT, WebSocket transport, presence cursors. The piece every multi-user app eventually needs.
- emailRender React Email templates, dispatch through Resend / SES / SMTP. One sendEmail(template, props, recipient) for every transactional flow.
- event-busIn-process pub/sub with cross-app fanout. Used by audit, billing, and notifications to react to commerce events without circular imports.
- integration-vaultPer-tenant credential store for OAuth integrations and API keys — Creem, Gmail OAuth, Notion API. KMS-wrapped, refresh-rotated.