Concepts, value, and typical clone scenarios — less code.
Concepts, value, and typical clone scenarios — less code.
Preparing Ring Platform content
Preparing Ring Platform content
Preparing Ring Platform content
One article, two lenses. Use the Founder / Developer tabs in the docs sidebar to filter this page. Shared sections stay visible for both audiences; wrapped blocks show concepts or integration detail respectively.
Ring Platform stores almost all application data in PostgreSQL using a JSONB-first document shape: every row is id + data + timestamps. That gives founders a flexible product model (add fields without migrations for every tweak) and gives developers a single db() contract across every Ring clone.
| Domain | What founders configure | Typical clone scenarios |
|---|---|---|
| Users & auth | Roles, profiles, credit balance | Member portals, gated content, admin consoles |
| Entities | Organizations, vendor profiles, verified listings | Directory, marketplace sellers, NGO profiles |
| Opportunities | Jobs, grants, bounties, RFPs | Job board, grant matcher, project marketplace |
| Store & orders | Multi-vendor catalog, inventory, checkout | White-label shop, B2B catalog, subscription boxes |
| Wallet & payments | Ledger, WayForPay/Stripe, membership credits | Token-gated perks, prepaid credits, affiliate payouts |
| Messaging & notify | Conversations, in-app + FCM push | Buyer–seller chat, opportunity alerts |
| Content & CRM | News, email sequences, AI matcher hooks | Community hub, publisher ring, opportunity notifications |
| Platform settings | AI provider keys, branding, web3 oracle | SUPERadmin namespace config per clone |
When you ringize a deployment, you are not buying a rigid CRM schema. You inherit a proven marketplace + community skeleton that already connects:
Next-step: Zod schemas at the route boundary before JSONB lands.
Prerequisite: when Postgres is primary vs Firebase-full; shared pool SSOT.
Deep-dive: PostGIS setup, pool tuning, K8s deployment.
Same-workflow: Auth.js tables live in the same JSONB model.
One article, two lenses. Use the Founder / Developer tabs in the docs sidebar to filter this page. Shared sections stay visible for both audiences; wrapped blocks show concepts or integration detail respectively.
Ring Platform stores almost all application data in PostgreSQL using a JSONB-first document shape: every row is id + data + timestamps. That gives founders a flexible product model (add fields without migrations for every tweak) and gives developers a single db() contract across every Ring clone.
| Domain | What founders configure | Typical clone scenarios |
|---|---|---|
| Users & auth | Roles, profiles, credit balance | Member portals, gated content, admin consoles |
| Entities | Organizations, vendor profiles, verified listings | Directory, marketplace sellers, NGO profiles |
| Opportunities | Jobs, grants, bounties, RFPs | Job board, grant matcher, project marketplace |
| Store & orders | Multi-vendor catalog, inventory, checkout | White-label shop, B2B catalog, subscription boxes |
| Wallet & payments | Ledger, WayForPay/Stripe, membership credits | Token-gated perks, prepaid credits, affiliate payouts |
| Messaging & notify | Conversations, in-app + FCM push | Buyer–seller chat, opportunity alerts |
| Content & CRM | News, email sequences, AI matcher hooks | Community hub, publisher ring, opportunity notifications |
| Platform settings | AI provider keys, branding, web3 oracle | SUPERadmin namespace config per clone |
When you ringize a deployment, you are not buying a rigid CRM schema. You inherit a proven marketplace + community skeleton that already connects:
Next-step: Zod schemas at the route boundary before JSONB lands.
Prerequisite: when Postgres is primary vs Firebase-full; shared pool SSOT.
Deep-dive: PostGIS setup, pool tuning, K8s deployment.
Same-workflow: Auth.js tables live in the same JSONB model.
One article, two lenses. Use the Founder / Developer tabs in the docs sidebar to filter this page. Shared sections stay visible for both audiences; wrapped blocks show concepts or integration detail respectively.
Ring Platform stores almost all application data in PostgreSQL using a JSONB-first document shape: every row is id + data + timestamps. That gives founders a flexible product model (add fields without migrations for every tweak) and gives developers a single db() contract across every Ring clone.
| Domain | What founders configure | Typical clone scenarios |
|---|---|---|
| Users & auth | Roles, profiles, credit balance | Member portals, gated content, admin consoles |
| Entities | Organizations, vendor profiles, verified listings | Directory, marketplace sellers, NGO profiles |
| Opportunities | Jobs, grants, bounties, RFPs | Job board, grant matcher, project marketplace |
| Store & orders | Multi-vendor catalog, inventory, checkout | White-label shop, B2B catalog, subscription boxes |
| Wallet & payments | Ledger, WayForPay/Stripe, membership credits | Token-gated perks, prepaid credits, affiliate payouts |
| Messaging & notify | Conversations, in-app + FCM push | Buyer–seller chat, opportunity alerts |
| Content & CRM | News, email sequences, AI matcher hooks | Community hub, publisher ring, opportunity notifications |
| Platform settings | AI provider keys, branding, web3 oracle | SUPERadmin namespace config per clone |
When you ringize a deployment, you are not buying a rigid CRM schema. You inherit a proven marketplace + community skeleton that already connects:
Next-step: Zod schemas at the route boundary before JSONB lands.
Prerequisite: when Postgres is primary vs Firebase-full; shared pool SSOT.
Deep-dive: PostGIS setup, pool tuning, K8s deployment.
Same-workflow: Auth.js tables live in the same JSONB model.
You do not need separate databases per feature. Postgres + JSONB lets each clone emphasize store, opportunities, or community without forking the codebase. Schema SSOT: data/schema.sql (v4.0.3).
| Ring token oracle | web3 | features/wallet/services/native-token-oracle.ts |
Never write raw SQL or instantiate a private pg.Pool for platform_settings. The adapter hybrid path is the only supported write surface.
All server code goes through db() from @/lib/database — never raw SQL in route handlers (except PostGIS via getSharedPgPool()).
readDoc / queryDocs return { success, data, error }. error is an Error object, not a string. Throw on failure in services; Server Actions may map to { error: string } for forms only.
The email CRM feature does not open its own database connection. features/email-crm/lib/jsonb-collection.ts wraps db().*Doc:
| Helper | Delegates to |
|---|---|
readDoc | db().readDoc |
upsertDoc | db().readDoc + updateDoc or createDoc |
queryDocs | db().queryDocs |
deleteDoc | db().deleteDoc |
Repositories (jsonb-contact-repository.ts, jsonb-draft-repository.ts, etc.) import from jsonb-collection.ts — same JSONB row shape as other collections.
Single file: data/schema.sql (v4.0.3). Do not use deprecated scripts/postgres-schema.sql.
Production rings use DB_BACKEND_MODE=k8s-postgres-fcm. See Backend modes and databases.
(data->>'status') = 'open' with btree expression indexes on hot keys.lib/geolocation/geolocation-service.ts and getSharedPgPool() — not private pools.Deep dive: AI-CONTEXT/concepts/database/query-patterns.json and Discovery & mutation sync.
Depends-on: orders and payments JSONB plus webhook idempotency.
You do not need separate databases per feature. Postgres + JSONB lets each clone emphasize store, opportunities, or community without forking the codebase. Schema SSOT: data/schema.sql (v4.0.3).
| Ring token oracle | web3 | features/wallet/services/native-token-oracle.ts |
Never write raw SQL or instantiate a private pg.Pool for platform_settings. The adapter hybrid path is the only supported write surface.
All server code goes through db() from @/lib/database — never raw SQL in route handlers (except PostGIS via getSharedPgPool()).
readDoc / queryDocs return { success, data, error }. error is an Error object, not a string. Throw on failure in services; Server Actions may map to { error: string } for forms only.
The email CRM feature does not open its own database connection. features/email-crm/lib/jsonb-collection.ts wraps db().*Doc:
| Helper | Delegates to |
|---|---|
readDoc | db().readDoc |
upsertDoc | db().readDoc + updateDoc or createDoc |
queryDocs | db().queryDocs |
deleteDoc | db().deleteDoc |
Repositories (jsonb-contact-repository.ts, jsonb-draft-repository.ts, etc.) import from jsonb-collection.ts — same JSONB row shape as other collections.
Single file: data/schema.sql (v4.0.3). Do not use deprecated scripts/postgres-schema.sql.
Production rings use DB_BACKEND_MODE=k8s-postgres-fcm. See Backend modes and databases.
(data->>'status') = 'open' with btree expression indexes on hot keys.lib/geolocation/geolocation-service.ts and getSharedPgPool() — not private pools.Deep dive: AI-CONTEXT/concepts/database/query-patterns.json and Discovery & mutation sync.
Depends-on: orders and payments JSONB plus webhook idempotency.
You do not need separate databases per feature. Postgres + JSONB lets each clone emphasize store, opportunities, or community without forking the codebase. Schema SSOT: data/schema.sql (v4.0.3).
| Ring token oracle | web3 | features/wallet/services/native-token-oracle.ts |
Never write raw SQL or instantiate a private pg.Pool for platform_settings. The adapter hybrid path is the only supported write surface.
All server code goes through db() from @/lib/database — never raw SQL in route handlers (except PostGIS via getSharedPgPool()).
readDoc / queryDocs return { success, data, error }. error is an Error object, not a string. Throw on failure in services; Server Actions may map to { error: string } for forms only.
The email CRM feature does not open its own database connection. features/email-crm/lib/jsonb-collection.ts wraps db().*Doc:
| Helper | Delegates to |
|---|---|
readDoc | db().readDoc |
upsertDoc | db().readDoc + updateDoc or createDoc |
queryDocs | db().queryDocs |
deleteDoc | db().deleteDoc |
Repositories (jsonb-contact-repository.ts, jsonb-draft-repository.ts, etc.) import from jsonb-collection.ts — same JSONB row shape as other collections.
Single file: data/schema.sql (v4.0.3). Do not use deprecated scripts/postgres-schema.sql.
Production rings use DB_BACKEND_MODE=k8s-postgres-fcm. See Backend modes and databases.
(data->>'status') = 'open' with btree expression indexes on hot keys.lib/geolocation/geolocation-service.ts and getSharedPgPool() — not private pools.Deep dive: AI-CONTEXT/concepts/database/query-patterns.json and Discovery & mutation sync.
Depends-on: orders and payments JSONB plus webhook idempotency.