// Interactive SIP calculator const fmtCr = (n) => { if (n >= 1e7) return `₹${(n / 1e7).toFixed(2)} Cr`; if (n >= 1e5) return `₹${(n / 1e5).toFixed(2)} L`; return `₹${Math.round(n).toLocaleString("en-IN")}`; }; const fmtINR = (n) => `₹${Math.round(n).toLocaleString("en-IN")}`; const Slider = ({ label, value, onChange, min, max, step, format, suffix }) => { const pct = Math.max(0, Math.min(100, ((value - min) / (max - min)) * 100)); const track = `linear-gradient(to right, var(--gold-500) 0%, var(--gold-500) ${pct}%, rgba(250,246,236,0.18) ${pct}%, rgba(250,246,236,0.18) 100%)`; return (
{label} {format ? format(value) : value}{suffix}
onChange(Number(e.target.value))} style={{ width: "100%", accentColor: "var(--gold-500)", background: track }}/>
{format ? format(min) : min} {format ? format(max) : max}
); }; const Calculator = () => { const [monthly, setMonthly] = useState(25000); const [years, setYears] = useState(20); const [rate, setRate] = useState(12); const [stepUp, setStepUp] = useState(8); const { final, invested, growth, series } = useMemo(() => { const r = rate / 100 / 12; let bal = 0, inv = 0, sip = monthly; const pts = []; for (let y = 1; y <= years; y++) { for (let m = 0; m < 12; m++) { bal = bal * (1 + r) + sip; inv += sip; } pts.push({ y, bal, inv }); sip = sip * (1 + stepUp / 100); } return { final: bal, invested: inv, growth: bal - inv, series: pts }; }, [monthly, years, rate, stepUp]); const W = 600, H = 260, P = 20; const maxY = series.length ? series[series.length - 1].bal : 1; const xAt = (i) => P + (i / (series.length - 1 || 1)) * (W - P * 2); const yAt = (v) => H - P - (v / maxY) * (H - P * 2); const balPath = "M " + series.map((s, i) => `${xAt(i)} ${yAt(s.bal)}`).join(" L "); const invPath = "M " + series.map((s, i) => `${xAt(i)} ${yAt(s.inv)}`).join(" L "); const balArea = balPath + ` L ${xAt(series.length - 1)} ${H - P} L ${P} ${H - P} Z`; return (

What does discipline actually buy you?

A real SIP calculator with an annual step-up — most online versions skip the step-up, which is exactly what makes a long horizon work. Move the dials.

Projected corpus in {years} years
{fmtCr(final)}
Total invested
{fmtCr(invested)}
Wealth gained
{fmtCr(growth)}
{[0.25, 0.5, 0.75].map(t => ( ))}
━ CORPUS ┄ INVESTED

SIP Calculator

STEP-UP ENABLED
Common goals
{[ { l: "Retirement", m: 30000, y: 25, r: 12, s: 10 }, { l: "Child education", m: 15000, y: 15, r: 11, s: 8 }, { l: "FIRE @ 45", m: 75000, y: 18, r: 13, s: 12 }, { l: "First home", m: 40000, y: 7, r: 10, s: 5 }, ].map(p => ( ))}
Build me a real plan

✱ Returns are illustrative. Past performance does not guarantee future results.

); }; window.Calculator = Calculator;