{"id":51083156,"url":"https://github.com/ekoindia/eps-platform","last_synced_at":"2026-06-23T20:01:44.360Z","repository":{"id":366778743,"uuid":"1165431024","full_name":"ekoindia/eps-platform","owner":"ekoindia","description":"EPS Monorepo — Eko's AI-native developer platform, REST API documentation, MCP servers, mock servers and marketing website","archived":false,"fork":false,"pushed_at":"2026-06-23T08:37:37.000Z","size":11064,"stargazers_count":1,"open_issues_count":4,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-23T10:12:27.146Z","etag":null,"topics":["agentic-workflows","ai-skills","developer-portal","marketing-website","mcp-servers","openapi-spec","rest-api-documentation"],"latest_commit_sha":null,"homepage":"https://eps.eko.in","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ekoindia.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-02-24T06:44:52.000Z","updated_at":"2026-06-23T08:37:42.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/ekoindia/eps-platform","commit_stats":null,"previous_names":["ekoindia/eps-platform"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/ekoindia/eps-platform","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ekoindia%2Feps-platform","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ekoindia%2Feps-platform/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ekoindia%2Feps-platform/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ekoindia%2Feps-platform/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ekoindia","download_url":"https://codeload.github.com/ekoindia/eps-platform/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ekoindia%2Feps-platform/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34704748,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-23T02:00:07.161Z","response_time":65,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agentic-workflows","ai-skills","developer-portal","marketing-website","mcp-servers","openapi-spec","rest-api-documentation"],"created_at":"2026-06-23T20:01:41.320Z","updated_at":"2026-06-23T20:01:44.353Z","avatar_url":"https://github.com/ekoindia.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n\u003cimg src=\"public/eps-logo-color.svg\" alt=\"Eko Platform Services\" width=\"96\"\u003e\n\n# Eko Platform Services\n\n\u003c!-- Build \u0026 meta --\u003e\n[![CI](https://github.com/ekoindia/eps-platform/actions/workflows/ci.yml/badge.svg)](https://github.com/ekoindia/eps-platform/actions/workflows/ci.yml)\n[![Release](https://github.com/ekoindia/eps-platform/actions/workflows/release.yml/badge.svg)](https://github.com/ekoindia/eps-platform/actions/workflows/release.yml)\n[![License: MIT](https://img.shields.io/badge/license-MIT-green)](LICENSE)\n[![Node](https://img.shields.io/badge/node-%3E%3D20-brightgreen)](https://nodejs.org)\n[![API Docs](https://img.shields.io/badge/API%20Docs-1A5366)](https://eps.eko.in/docs)\n\n\u003c!-- Published packages: version · monthly downloads --\u003e\n[![eps-sdk](https://img.shields.io/npm/v/%40ekoindia%2Feps-sdk?label=%40ekoindia%2Feps-sdk)](https://www.npmjs.com/package/@ekoindia/eps-sdk)\n[![eps-context-mcp](https://img.shields.io/npm/v/%40ekoindia%2Feps-context-mcp?label=%40ekoindia%2Feps-context-mcp)](https://www.npmjs.com/package/@ekoindia/eps-context-mcp)\n[![eps-mock-server](https://img.shields.io/npm/v/%40ekoindia%2Feps-mock-server?label=%40ekoindia%2Feps-mock-server)](https://www.npmjs.com/package/@ekoindia/eps-mock-server)\n\n\n\u003c/div\u003e\n\n**The AI-ready developer platform for [Eko Platform Services](https://eps.eko.in) — India's fintech APIs** (AePS, DMT, BBPS, PPI wallets, KYC \u0026 verification, agent banking).\n\nA single source-of-truth **data layer** describes every EPS API once. From it, the build generates everything a developer — or their AI coding agent — needs to integrate: backend SDKs, an MCP server, drop-in AI context packs, an offline mock server, OpenAPI + Postman, LLM-readable docs, and the marketing + developer-docs website itself. Edit the data, and every artifact regenerates in sync.\n\n## Why this exists\n\n- **One source of truth, zero drift.** Specs, SDKs, MCP, docs, OpenAPI and code samples all derive from the same data layer (`src/lib/data/`). No hand-maintained copies that fall out of date.\n- **AI-ready by design.** Ships an MCP server plus drop-in context packs (`CLAUDE.md`, `AGENTS.md`, `.cursorrules`, `copilot-instructions.md`) so agents integrate EPS correctly — including the tricky parts: per-request HMAC-SHA256 signing and multi-step recipes (e.g. the DMT `463 → onboard sender` branch).\n- **Backend-safe SDKs.** JS and PHP SDKs are generated from an SDK surface with signing built in and cross-language golden-vector conformance tests. Coverage is a growing subset — see the [API coverage roadmap](docs/api-coverage-roadmap.md).\n- **Open \u0026 offline.** The MCP runs locally with a baked-in bundle (no hosted service, no secrets); an offline mock server replays recorded fixtures for tests.\n\n## Use EPS\n\n```bash\n# AI agent context (any MCP-capable harness)\nnpx -y @ekoindia/eps-context-mcp\n\n# Backend SDKs (server-side only — signing key must stay secret)\nnpm install @ekoindia/eps-sdk          # Node.js\ncomposer require ekoindia/eps-sdk      # PHP 8.1+\n\n# Offline mock server for local dev \u0026 tests\nnpx -y @ekoindia/eps-mock-server\n```\n\nFor Claude Code, install the bundled plugin (wires the MCP + skills + `/eps` command). Point any agent at the site's `/llms.txt` and `/ai` hub for the full machine-readable index.\n\n## Project structure\n\n```\nsrc/\n  lib/\n    data/        # ← source-of-truth data layer (specs, products, recipes, industries, solutions, pricing)\n    agent/       # generators: agent bundle, fixtures, install matrix, context packs\n    sdk/         # generators: SDK surface, Postman collection\n    openapi/     # generator: OpenAPI 3.1 document\n    markdown/    # generators: /llms.txt, /index.md, /products.md, per-page markdown\n    config/      # site-wide config constants (site URL, API endpoints)\n  components/ hooks/ pages/ assets/   # the React website\n  App.tsx / AppServer.tsx / entry-server.tsx / main.tsx   # SPA + SSG entry points\nssg/             # custom Vite plugin for static pre-rendering\npublic/          # static files served as-is (robots.txt, _redirects)\ndocs/            # detailed documentation (index below)\nvite-plugin-generate-*.ts   # build-time emitters (openapi, agent bundle, markdown, xlsx)\n\npackages/        # published artifacts (each baked from the build output):\n  eps-context-mcp/   # @ekoindia/eps-context-mcp — local MCP server (npm)\n  sdk-js/            # @ekoindia/eps-sdk — Node.js backend SDK (npm)\n  eps-mock-server/   # @ekoindia/eps-mock-server — offline mock server (npm)\n  sdk-php/           # ekoindia/eps-sdk — PHP backend SDK (Composer/Packagist)\n  claude-plugin-eps/ # Claude Code plugin bundle (manifest + skills + /eps command; not an npm package)\n\ndist/                  # build output (generated, gitignored)\npackages/*/data/       # baked artifacts copied here at build time (generated, gitignored — never hand-edit)\n```\n\nThat's **3 npm packages, 1 Composer package, and 1 Claude Code plugin bundle**.\n\n\u003e [!CAUTION]\n\u003e The `packages/*/data/` files are generated outputs — they may be present in your working tree but are gitignored and **must never be hand-edited or committed**.\n\n## Data \u0026 configuration\n\n**Source-of-truth data** (`src/lib/data/`):\n\n| File | Role |\n|------|------|\n| [`api-specs.ts`](src/lib/data/api-specs.ts) | Technical REST specs, one entry per API (deltas only) |\n| `api-auth.ts` / `api-error-codes.ts` / `api-specs-common.ts` | Shared auth headers, error catalog, common params/envelopes + resolvers |\n| [`api-products.ts`](src/lib/data/api-products.ts) | API product registry + metadata |\n| [`api-product-pages.ts`](src/lib/data/api-product-pages.ts) | Product-page marketing content (hero, features, FAQs, SEO) — no technical data |\n| `api-recipes.ts` | Multi-step integration recipes (e.g. DMT onboard-then-transfer) |\n| [`industries.ts`](src/lib/data/industries.ts) / [`solutions.ts`](src/lib/data/solutions.ts) | Industry pages + solution/pack definitions |\n| `api-pricing.ts` / `payments-pricing.ts` | Pricing data (drives pricing page + xlsx calculator) |\n| `docs-registry.ts` | Merges MDX guides + API endpoints into the docs nav |\n\n**Config files** (root): `package.json` (npm workspaces), `vite.config.ts`, `vitest.config.ts`, `tsconfig*.json`, `eslint.config.js`, `components.json`, the `vite-plugin-generate-*.ts` emitters, and per-platform deploy rewrites (`vercel.json`, `netlify.toml`, `nginx.conf`, `.htaccess`).\n\n\u003e [!TIP]\n\u003e A full index of **every** configuration file lives in [docs/configuration.md](docs/configuration.md).\n\n## How it works\n\n```\nsrc/lib/data/ ──▶ npm run build\n                   ├─ vite build   → dist/ (website, openapi.json, /agent/*.json + per-API \u0026 per-topic slices,\n                   │                  context packs, /llms.txt, /index.md, /products.md, pricing xlsx)\n                   └─ bake:all     → copies the relevant artifacts into each packages/*/data/\n                                     (then each package builds \u0026 publishes from there)\n```\n\n`npm run build` runs the Vite build and then invokes `bake:all` automatically — you don't run them separately.\n\n## Develop this repo\n\n**Setup** (Node `\u003e=20`):\n\n```bash\nnpm install\nnpm run dev          # local dev server\nnpm run build        # full build + bake (generates all artifacts)\nnpm test             # vitest run\nnpm run lint         # eslint\n```\n\n`npm install`, `npm run build`, `npm run lint`, and `npm test` all run **without any\ncredentials** — no API keys are needed to build the site or run the suite. Sandbox\ncredentials are only required to exercise the `/docs` **\"Try it\"** console live: copy\n[`.env.example`](.env.example) → `.env.local` and fill in your own Eko UAT/sandbox keys.\nThose values are read only during `vite dev` (gated by `import.meta.env.DEV`), are never\nbundled into production, and the access key is used purely for in-browser HMAC signing.\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for the full contributor workflow.\n\n**How to add things:**\n\n| Add a… | Edit | Guide |\n|--------|------|-------|\n| API product | `api-products.ts` + `api-product-pages.ts`, then add it to `ProductsSection.tsx` tabs | [docs/configuration.md](docs/configuration.md) |\n| API spec | `api-specs.ts` (set `productId`) | [docs/api-specs.md](docs/api-specs.md) |\n| Dev-docs API reference | (auto from `api-specs.ts`) | [docs/developer-docs/api-documentation.md](docs/developer-docs/api-documentation.md) |\n| Dev-docs guide (MDX prose) | add MDX guide | [docs/developer-docs/mdx-guides.md](docs/developer-docs/mdx-guides.md) |\n| Industry / Solution pack | `industries.ts` / `solutions.ts` | [docs/industry-and-packs-plan.md](docs/industry-and-packs-plan.md) |\n| AI artifact / context pack | `src/lib/agent/` generators | [docs/ai-agent-platform.md](docs/ai-agent-platform.md) |\n\n**Gotchas:**\n- `packages/*/data/` and `dist/` are **generated** by the build/`bake:all` — never hand-edit, never commit (gitignored). If a preview shows changes there, that's build output, not source.\n- The site builds to **static pre-rendered HTML** (SSG) for every known route; unknown routes fall back to the SPA shell (`__spa-fallback.html`) via each platform's catch-all rewrite. See [docs/static-page-generation.md](docs/static-page-generation.md) and [docs/ssg-hydration.md](docs/ssg-hydration.md).\n- After a redeploy, stale JS chunks auto-reload — see [docs/chunk-error-auto-reload.md](docs/chunk-error-auto-reload.md).\n- **Deploy:** build locally, then deploy `dist/` to any of Vercel / Netlify / Apache / Nginx — each reads only its own rewrite file (`vercel.json` / `netlify.toml` / `.htaccess` / `nginx.conf`), so they don't conflict.\n\n## Documentation\n\n**Platform \u0026 AI**\n- [AI agent platform](docs/ai-agent-platform.md)\n- [API coverage roadmap](docs/api-coverage-roadmap.md)\n\n**API \u0026 data model**\n- [API technical specifications](docs/api-specs.md)\n- [Markdown / LLM content generation](docs/markdown-generation.md)\n- [Developer-docs portal architecture](docs/developer-docs/)\n- [Industries \u0026 solution packs plan](docs/industry-and-packs-plan.md)\n\n**SDKs \u0026 release**\n- [SDK golden-vector conformance](docs/sdk-golden-vector.md)\n- [Releasing the agent packages](docs/releasing-agent-packages.md)\n\n**Site build \u0026 ops**\n- [Configuration — every config file](docs/configuration.md)\n- [Static page generation (SSG)](docs/static-page-generation.md) · [hydration rules](docs/ssg-hydration.md)\n- [Pricing calculator](docs/pricing-calculator.md) · [Command palette (⌘K)](docs/command-palette-search.md) · [Stale-chunk auto-reload](docs/chunk-error-auto-reload.md)\n\n## Tech stack\n\nVite · React · TypeScript · Tailwind CSS · shadcn-ui · npm workspaces.\n\n## Contributing \u0026 security\n\n- [CONTRIBUTING.md](CONTRIBUTING.md) — dev setup, branch/commit conventions, PR workflow.\n- [SECURITY.md](SECURITY.md) — how to report a vulnerability (please do **not** open a\n  public issue for security reports).\n- [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) — community standards.\n\n## License\n\nSource code is released under the [MIT License](LICENSE). The MIT grant\ncovers the **code** only. The **\"Eko\" name, logos, and brand assets** are trademarks of\ntheir owner and are **not** licensed for reuse. Marketing copy, page content, and design\nassets under `src/` and `public/` may be subject to separate terms — see `LICENSE` for the\nexact scope before reusing non-code material.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fekoindia%2Feps-platform","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fekoindia%2Feps-platform","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fekoindia%2Feps-platform/lists"}