Give your agent a wallet you control.
Let your agents pay online using one-time-use cards or with machine payment protocols. You approve every request.
Free EMI calculator for Indian loans. ₹50 Lakh at 8.5% for 20 years = ₹43,391/month. See total interest, schedule and prepayment savings.
FinanceTypeScript · AstroGitHub @abhineet-deepOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗A fast, SEO-first EMI calculator for Indian borrowers. Astro (static output) + Tailwind CSS 4 + one small Preact island. 84 pages are generated at build time from data and one pure calculation module. No server, no database, no cookies.
| Command | What it does |
|---|---|
npm run dev | Dev server on http://localhost:4321 |
npm run build | Production build into dist/ (about 30 s; most of it is the 83 OG images) |
npm run verify | Checks dist/ the way a crawler sees it (see below). Run after every build. |
npm test | 421 unit tests (Vitest): maths, formatting, URL state, generated copy, SEO helpers |
npm run serve | Serves dist/ like Vercel does (clean URLs, Brotli, cache headers) on http://localhost:4400 |
npm run preview | Astro's own preview server (no compression, so use serve for performance numbers) |
Node 22.12 or newer is required (Astro 7).
src/config.ts (SITE_URL, SITE_NAME, SITE_TAGLINE). This is the only place the domain is written; robots.txt, the sitemap, canonicals, JSON-LD and OG images all read it.CONTACT_EMAIL in src/config.ts. It is empty on purpose, and the About and Privacy pages only show a contact line when it is set.src/pages/privacy-policy.astro and disclaimer.astro are sensible starting text, not legal advice. Have a qualified person review them, and update LEGAL_UPDATED in src/config.ts when they change.src/
config.ts domain, brand, contact, legal date
data/ loanTypes.ts amounts.ts tenures.ts faqs.ts nav.ts routes.ts
lib/
emi.ts pure maths: EMI, schedules, prepayment, comparison, effective rate
format.ts Indian number formatting, "50L"/"1.5cr" parsing, amount in words
calc-state.ts calculator state, slider scales, URL (de)serialisation, CSV
insights.ts plain-English summaries of prepayment/comparison results
content*.ts builds each page's copy from templates + emi.ts (never hand-typed numbers)
seo.ts og.ts og-image.ts titles, canonicals, JSON-LD, social images
components/ Calculator.tsx (the island), charts, table, FAQ, header/footer...
directives/paint.js `client:paint`: hydrate after first paint (or on first touch)
pages/ home, loan types, amounts, amount+tenure, support pages, 404, og/, robots.txt
scripts/ verify-dist.mjs serve-dist.mjs subset-font.py
vercel.json clean URLs, cache headers, one rewrite (see Deploying)
src/data/loanTypes.ts (defaults, typical ranges, lead, tips, one unique FAQ). Its page, sitemap entry, OG image and footer link appear automatically.amounts in src/data/amounts.ts (and to comboAmountSlugs for tenure pages). If its slug contains a dot, add a rewrite to vercel.json; npm run verify tells you.{placeholders}. fill() throws on an unknown placeholder, and the tests fail if two pages end up with the same title, first paragraph or FAQ answer.npm test enforces: titles at most 60 characters and descriptions at most 155 (without truncation), 300–600 words of prose per page, 5–7 FAQs, 6–8 valid internal links, unique titles/H1s/first paragraphs/FAQ answers across all pages, and no policy rates, tax limits or bank names in the copy.npm run verify enforces on the built HTML: one H1, no heading jumps, absolute canonicals, JSON-LD that parses and matches the visible FAQs and breadcrumbs exactly, OG images that exist, a sitemap that equals the set of canonical URLs, robots.txt, no broken internal links, unique ids and landmark names, focusable scroll regions, and vercel.json consistency.Measured with Lighthouse (mobile profile, simulated slow 4G, 4x CPU slowdown) against npm run serve:
Performance 98–100, Accessibility 100, Best Practices 100, SEO 100 on every page type; LCP about 1.1 s; CLS 0.000;
TBT at most 12 ms; JS on a calculator page about 19 KB gzipped (budget 40 KB).
What keeps it fast:
client:paint after the first paint (or immediately on first touch).scripts/subset-font.py.content-visibility: auto; the 360-row month-wise schedule renders only the rows in view (median interaction cost 43 ms instead of 117 ms, worst case 63 ms instead of 377 ms at 4x CPU slowdown)..gitignore is included):
git init
git add .
git commit -m "EMI calculator"
git branch -M main
git remote add origin <your-repo-url>
git push -u origin main
npm run build, Output Directory dist, Install Command npm install.
Use Node 22.x or newer (Project Settings → General → Node.js Version).SITE_URL in src/config.ts to your real domain before the production deploy, commit and push.vercel.json is already set up, so no further configuration is needed:
cleanUrls and trailingSlash: false serve /50-lakh-loan-emi for the built 50-lakh-loan-emi.html, matching the canonical URLs./_astro/* and /fonts/*; one-day caching for /og/*; HTML is revalidated on each request./1.5-crore-loan-emi (its file name contains a dot)./1.5-crore-loan-emi, /about, a made-up URL (should show the custom 404), and /50-lakh-loan-emi.html (should redirect to the clean URL).https://<your-domain>/sitemap-index.xml.lastmod date in the sitemap is the build time of every page, which is accurate because every deploy regenerates all pages.