MarketMind — Developer Portal
The revenue seat of the platform: a developer portal where anyone can open an account, generate API keys for Indian market intelligence, watch quota burn down against plan limits, and pay for more — through a real Razorpay flow. Deployed on Vercel with no build step.

Overview
developers.marketmind-hub.in is where the relationship with the product actually lives: signup, API-key management, quota tracking, API reference, and billing. It's a dark, terminal-flavored console that deliberately reuses none of the light marketing sites' code — it's its own hand-written system with its own config, partials, and auth — because the audience and the job are different: engineers, not browsers.
It's the only one of the three sites that touches real money, and it does so through two real pipelines: a server-approved Razorpay checkout for paid plans, and a backend enquiry form for enterprise deals.
Design & layout
- Fixed dark console: tokens in
:rootblocks —--dev-bg #080c10,--dev-surface #0d1117, green#00ff88, cyan#00d4ff, red for destructive states — with the block duplicated per page so each page is fully standalone. - Type pairing: Syne for headings and nav, JetBrains Mono for code and labels; inline SVG icons plus emoji in the API cards — no icon font.
- Terminal flavor: blinking cursors, grid-and-glow background layers, API cards with hover glow, a sticky frosted header that gains a blur
.scrolledstate, and a mobile hamburger — with no theme toggle (deliberately a different vibe from the light sub-sites).
Architecture
- Multi-page static:
index,docs,dashboard,pricing,contact,legal,404, and an OAuth callback page — no framework, no build step, no package.json. - Runtime partials:
utils.jsfetches the header, footer, and login/signup modals into shared placeholders; the dashboard opts out (data-skip-utils) and mounts its own chrome because it has a sidebar instead of a nav. - One config global:
window.APP_CONFIGcentralizes the portal API base, the contact/enquiry backend, the Google client id, and shared URLs — though several modules hardcode their base URL instead of reading it, which is exactly the drift that bites. - Per-page CSS: a
header.css/footer.csscore plus index/docs/dashboard/pricing/contact/legal page styles, with separate modal sheets for checkout and enterprise.
Auth & sessions
- Custom API auth against
api.marketmind-hub.in— signup, login, logout, plus Google OAuth. No Firebase/Supabase dependency. - Two-part session: the server sets an httpOnly
api_keycookie while the client mirrorsuserEmailin localStorage for UI state; every call sendscredentials:'include'. - Google sign-in flow: Google Identity Services with a redirect-mode code flow →
google-redirect.htmlexchanges?codeat the portal's/api/google-auth→ bounce to home, where the session restores. - Guard rails: protected moments stash a
pendingRedirectand prompt login; after a successful login the flow tries to resume the interrupted plan selection or deep link.
Dashboard & API keys
- Auth-guarded, data-driven — the tenant profile (id, company editable inline, plan, member-since), usage meters, and the key table all come from backend calls, updated live.
- Complete key lifecycle: generate (label + portal context) → the raw
mm_live_…key is revealed exactly once in a modal with copy and an "I've saved it" handshake → rotate/regenerate and revoke, the destructive ones gated behind a permanence confirm. - Quota engine: today/month progress bars that shift to warning at 70% and danger at 90%, an all-plans comparison grid, and consistent 401 handling that boots you to login when a session dies.
- Full-screen chrome: a sidebar plus a mobile tab bar driven by
data-panelattributes — completely different layout from the marketing pages.
API documentation
docs.html is a hand-authored static reference (not generated) — a feature for exactness, a cost for maintenance:
- Auth:
X-API-Keyheader withmm_live_keys, error codes 400/401/402/503/504, per-account daily quotas resetting at midnight UTC, and quota echoed in every response. - Ticker Extractor —
POST /v1/signals/ticker-extract, Mistral-7B, 70K+ training rows. - Price Prediction —
POST /v1/signals/price-predict, Chronos-Bolt, 7-day forecast with median + p10–p90 band, 1-hour Redis cache on identical inputs. - RAG Retrieval —
POST /v1/intelligence/rag, ONNX embeddings + Redis HNSW, token-budget depth tiers and filters (ticker / event type / days back). - Presentation: four-language code tabs (curl / Python / JavaScript / Node) with copy buttons, full JSON schemas, an IntersectionObserver scroll-spy, and a mobile search/dropdown — developer-grade UX on a static page.
Pricing & billing
- Plans: Sandbox ₹0 (100 cr/day) · Starter ₹499 (500/day) · Builder ₹999 (1,500/day, "Most Popular", 99.5% SLA) · Scale ₹2,499 (5,000/day, 99.9% SLA) · Enterprise custom.
- Credit model: the marketplace is metered in credits — RAG = 3, Price Predict = 2, Ticker = 1, MCP tools 0.5–3 — and the pricing page marks the newest APIs (sentiment, earnings, sector) as coming soon.
- Real Razorpay flow: logged-in user →
POST /api/payment/init(server prices the plan) → Razorpay Checkout (INR, prefilled email, company/use-case notes, green theme) →POST /api/payment/verify→ success overlay. Upgrading changes your quota instantly. - Enterprise: a separate scoped enquiry form (company, designation, timeline, credits, needed APIs) POSTs to the contact backend on Render — a proper sales path, distinct from self-serve checkout.
Deployment & SEO
- Vercel with a minimal
vercel.json(cleanUrls+ no trailing slash), so/docs,/pricing, and/dashboardserve without extensions; the static404.htmlis auto-served for unknown routes. - SEO is thin but present: per-page titles plus descriptions on the core pages, a
sitemap.xmlof clean URLs, and Google Search Console verified via a legacy file token — but no Open Graph, canonical, or JSON-LD, and no robots.txt.
State & honest gaps
Live: signup / login / Google OAuth, the full API-key lifecycle (generate, once-only reveal, rotate, revoke), quota tracking, Razorpay billing, and three documented APIs.
Coming soon (publicly marked): news sentiment scoring, earnings-call intelligence, and a real-time market alerts WebSocket stream.
Known rough edges, stated plainly: the dashboard's Rotate-All and Delete-Account are "coming soon" toasts; the forgot-password link is unwired; the homepage notify input is client-side only; the docs page's plan numbers lag the pricing page; a pending-plan resume flow references a function that doesn't exist; and a few config values are defined but never read. These are exactly the things a production-launch pass would sweep up — and the reason this site is positioned as in development, not done.
The marketing front door lives on the main website, and the agent-facing layer on the MCP site.