Oriz Financial Cards

August 19, 2026 · View on GitHub

India financial-card intelligence — credit, debit, prepaid, travel/forex, corporate, and business card profiles for every major Indian issuer, with a static catalog and comparison UI.

License: MIT GitHub stars Last commit CI Astro React

What it is / why it exists

There's no single free place to look up, filter, and compare every financial card issued in India — the data is scattered across bank sites, aggregators, and paywalled comparison portals. Oriz Financial Cards is a static, searchable directory of credit, debit, prepaid, travel/forex, corporate, and business cards from every major Indian issuer. Card data lives as versioned JSON under data/cards/, so the catalog is transparent, forkable, and deploys to Cloudflare Pages at $0.

⭐ If this is useful, please star the repo — it helps others find it.

Architecture

flowchart TD
  A[data/cards/*.json<br/>per issuer, per category] --> B[Astro content collection<br/>schema.ts validation]
  B --> C[static build<br/>astro build]
  C --> D[card directory<br/>+ detail routes]
  C --> E[cards.json<br/>data endpoint]
  F[@chirag127/astro-shell<br/>astro-chrome / astro-data] --> C
  G[React 19 islands] --> D
  H[Clerk<br/>optional, gates paid only] -.-> G
  I[Firebase<br/>optional] -.-> G
  C --> J[Cloudflare Pages<br/>financial-cards.oriz.in]
  C --> K[GitHub Pages mirror]

Features

  • Searchable directory of Indian financial cards — Amex, Axis, AU SFB, BoB, Canara, Federal, HDFC, HSBC, ICICI, IDFC, IndusInd, Kotak, PNB, RBL, SBI, StanChart, Yes Bank, plus wallets/fintechs.
  • Card categories: credit (750+ profiles, live), debit / prepaid / travel-forex / corporate / business (seeded, expanding). Schema also covers student, metal, virtual tiers.
  • Detail pages per card (credit/[issuer]/[slug]) + a cards.json data endpoint.
  • Card data as versioned JSON under data/cards/{credit,debit,prepaid,travel,corporate,business}/<bank>/ — transparent and forkable.
  • Public content reads without auth — Clerk gates only paid/account features (fleet SSO rule).
  • Optional AI polish that degrades gracefully if unavailable.
  • Full test matrix: Vitest (unit) + Playwright (e2e) + Biome (lint/format).

Tech stack

  • Framework: Astro 6 · React 19 · Tailwind CSS 4
  • Shared: @chirag127/astro-shell, @chirag127/astro-chrome, @chirag127/astro-data, @chirag127/astro-test-utils
  • Auth/data (optional): Clerk (@clerk/clerk-react) · Firebase
  • Tooling: Biome · Vitest (+ v8 coverage) · Playwright · Wrangler · pnpm@10, Node ≥22.12
  • Hosting: Cloudflare Pages (deploy via Wrangler) + GitHub Pages mirror

Repo structure

src/                     # Astro pages, React islands, content collections
  content/cards/schema.ts   # maximal card schema
data/cards/              # per-issuer, per-category card JSON  (the catalog)
data/cards/debit/pnb/    # PNB debit catalog — scraped from pnb.bank.in/card-index.html
                         #   pdf/           benefit PDFs per card
                         #   manifest.json  scrape output (tab text + pdf mapping)
                         #   scrape_pnb_cards.py / build_pnb_cards.py  (repo root)
knowledge/               # app-specific decisions, runbooks, services

## PNB debit-catalog pipeline

`scrape_pnb_cards.py` fetches [pnb.bank.in/card-index.html](https://pnb.bank.in/card-index.html),
resolves each card tab's benefits PDF (direct `uploadfile/` link → "Benefits Cured with
Card" fid → shared RuPay contactless doc), downloads them into
`data/cards/debit/pnb/pdf/`, and writes `manifest.json`. `extract_pnb_pdf_benefits.py`
parses each PDF's two-column "Benefits | Offer Description" table into
`pdf-extracted.json`. `build_pnb_cards.py` folds the page spec + PDF content into
schema-compliant per-card JSONs (`benefits`, `documents[].extracted`, raw `text`)
and upgrades `data/cards.json`. Re-run all three in order to refresh (idempotent).
tests/                   # vitest + playwright
astro.config.mjs         # shell() → financial-cards.oriz.in
wrangler.toml            # Cloudflare Pages deploy config
.github/workflows/       # ci · codeql · megalinter · scorecard · gh-pages mirrors

Quick start

pnpm i                 # install (Node >=22.12)
pnpm dev               # local dev server
pnpm build             # static build
pnpm preview           # preview the build
pnpm test              # unit tests (vitest)
pnpm test:e2e          # e2e tests (playwright)
pnpm lint              # biome check
pnpm deploy            # wrangler deploy to Cloudflare Pages

On Windows, if a pnpm build crashes on the missing @esbuild/win32-x64 binary, use npm install --legacy-peer-deps && npm run build.

Configuration

Env vars are drawn from the family-wide .env.example (names only — never commit values). App-relevant keys:

Env varPurpose
PUBLIC_CLERK_PUBLISHABLE_KEYClerk publishable key (browser-safe) — gates paid/account features only
PUBLIC_FIREBASE_API_KEYFirebase web config (client)
PUBLIC_FIREBASE_AUTH_DOMAINFirebase auth domain (auth.oriz.in)
PUBLIC_FIREBASE_PROJECT_IDFirebase project id
PUBLIC_FIREBASE_APP_IDFirebase app id
PUBLIC_BASE_PATHBase path override (e.g. /oriz-cards/ for the GH Pages mirror)
CLOUDFLARE_API_TOKENCloudflare Pages deploy (CI/deploy only)
CLOUDFLARE_ACCOUNT_IDCloudflare account for deploy

PUBLIC_* are client-only by convention; secret keys are server/deploy-only and never prefixed PUBLIC_.

Part of the oriz family

One of ~80 oriz sites. Read how the fleet is built solo at blog.oriz.in.

Cost: $0 on the Cloudflare free tier.

Security

No secrets in the repo; sops+age vault (Doppler upstream). PUBLIC_* vars are client-only; secret keys live in GitHub org secrets / Cloudflare / Firebase runtime config. Never expose a PUBLIC_*_SECRET.

Contributing

Issues and PRs welcome. Add or correct a card by editing the JSON under data/cards/ (validated against schema.ts). Terse, conventional commits. This site has its own visual identity — reuse @chirag127/* for mechanism only, not another site's look.

Status

Production. Credit catalog live (750+); debit/prepaid/travel/corporate/business expanding; side-by-side comparison planned.

Changelog

Conventional commits are the changelog.

Disclaimer

General information, not investment advice. Card details, fees, and reward structures change — always verify with the issuer before applying.

License

MIT © 2026 Chirag Singhal — see LICENSE.

Author

Chirag Singhal · chirag@oriz.in