Every folder has one job. Every partner is config, not code. Your business logic stays 100% hidden behind the proxy layer.
Every folder has one job. You always know where to look.
When something breaks at 2am, you know exactly where to look.
x-sdk-key, resolves the partner, and maps their public key to the internal token — silently./v1/ folder structure is the versioning strategy.v2/ folder. Old partners keep working on v1. No scrambling. No outages.response-filter.ts is the last line — nothing internal ever leaks out to a partner.amountRequested with default 25000. Razorpay makes businessType mandatory. All config, no code changes.onComplete() in the browser isn't reliable — tabs close, users navigate away.isolation/ prevents CSS conflicts. feature-flags.ts lets you roll out to 1 partner before all 5,000.redact.ts means a developer can't accidentally log an SSN in a debug line. SOC2 audit prep takes hours, not weeks.No code changes. No deployments. No risk of breaking other partners.
These aren't rules. They're the reason this structure works at scale.
auth/ only does auth. mapper/ only maps. encryption/ only encrypts. When something breaks at 2am, you know exactly which folder to open. No hunting across 10 files trying to find where validation lives.fields.yaml. Zero code changes. Zero deployments. Zero risk of accidentally breaking another partner while adding a new one.cache/ was designed in from day one — not added when things got slow at partner #200. events/ was designed in from day one — not hacked in when partners complained their webhooks were unreliable. The pain of retrofitting is worse than building it right.revenued-middleware and revenued-mcp-server are never exposed. The proxy is the only bridge. It strips, encrypts, and maps. response-filter.ts is the last checkpoint — nothing internal ever leaks out regardless of what the middleware returns.docs/security/soc2-controls.md maps every SOC2 control to the file that satisfies it. docs/adr/ explains every major decision ever made. A new engineer on day one can understand the whole system from the docs/ folder without asking anyone.Every requirement maps to an exact file. No guessing where something lives.
| # | Requirement | Where It Lives |
|---|---|---|
| 1 | Partner config management | partners/[slug]/config.yaml · src/config/ |
| 2 | Mask internal fields | src/mapper/field-strip.mapper.ts · src/proxy/response-filter.ts |
| 3 | Hide tech stack | src/proxy/response-filter.ts · WAF strips X-Powered-By |
| 4 | SDK health check | src/health/ · src/routes/v1/health.route.ts |
| 5 | Unit test SDK | tests/unit/ · tests/integration/ |
| 6 | Document verticals | docs/sdk/field-reference.md |
| 7 | Origin whitelist | partners/[slug]/origins.yaml · src/middleware/cors.middleware.ts |
| 8 | Access controls | src/auth/ · src/middleware/sdk-auth.middleware.ts |
| 9 | UAT vs PROD envs | src/config/env.resolver.ts · infra/terraform/uat + prod/ |
| 10 | Allowed flows per partner | partners/[slug]/flows.yaml · src/routes/v1/flows.route.ts |
| 11 | RSA field encryption | src/encryption/rsa.service.ts · src/encryption/field-encryptor.ts |
| 12 | Mandatory / optional / default fields | src/schema/fields.registry.ts · partners/[slug]/fields.yaml |
| 13 | WAF rules | infra/cloudflare/waf/ · infra/cloudflare/workers/ |
| 14 | SDK authentication | src/auth/api-key.service.ts · src/auth/sdk-auth.middleware.ts |
| 15 | URL naming conventions | src/routes/v1/ structure · docs/sdk/url-naming.md |
| 16 | Versioning management | src/routes/v1/ → v2/ pattern · docs/sdk/versioning.md |
| 17 | Best folder structure | This document |
| 18 | IPO standards | docs/security/ipo-checklist.md · src/logger/audit.logger.ts |
| 19 | SOC2 standards | docs/security/soc2-controls.md · src/middleware/audit-log.middleware.ts |
| 20 | Business logic in middleware | src/proxy/middleware-client.ts — SDK maps and calls, never owns logic |
| 21 | Performance / load testing | tests/performance/ — k6 scripts |
| 22 | Cross-browser compatibility | tests/browser/ Playwright · src/embed/compat/ |
| 23 | Cross-language compatibility | src/embed/compat/lang-compat.ts · docs/sdk/cross-language.md |
| 24 | View-based SDKs | src/widget/views/ |
| 25 | Headless SDKs | src/widget/headless/ · docs/sdk/headless-sdk.md |
| 26 | Tech stack decision | docs/adr/001-sdk-language.md |
| 27 | External integrations | partners/[slug]/integrations.yaml · src/events/ |
| + | Redis cache at scale | src/cache/ — added for 5K partner scale |
| + | Reliable webhooks | src/events/webhook.service.ts — added for partner reliability |
| + | Automated onboarding | scripts/partner-onboard.sh — 1 command per partner |
| + | DB migrations | db/migrations/ — schema changes are version-controlled |