Back to Engineering Blog
Engineering9 min read

We Audited Our Own Product for Invented Numbers

An admin dashboard that showed ₹1,45,000 of revenue that did not exist, buttons that reported success for work nobody did, and what we changed so it cannot come back.

Glacro · Published August 15, 2026

Our admin dashboard reported ₹1,45,000 in monthly recurring revenue and 1,284 users. Both numbers were written into the source code as fallbacks, to be displayed whenever the real query failed. The real figures at the time were a small fraction of that.

How it happened

None of it was malicious. Each fallback was added to make a screen look finished during development, and then never removed. The revenue chart drew a rising curve when the backend returned nothing. A stats grid substituted plausible counts. Individually each was a placeholder; together they made an administrative view that could not be distinguished from a working one.

typescript
// The shape of the problem, simplified
const stats = await fetchStats();
return stats ?? { users: 1284, mrr: 145000 };  // <- removed

Zero is a real number

The subtler bug was the opposite one. A payment gateway returning an authentication error was caught, logged as a warning, and treated as an empty list — so a broken Razorpay key rendered as ₹0 of revenue, which reads exactly like a month with no sales. Reporting a failure as zero is the same lie as reporting it as 1,45,000, just quieter.

Key Takeaway
The rule we settled on: a value we could not fetch is null and renders as an em dash. A value we fetched successfully that happens to be zero renders as zero. The two must never look the same.

Buttons that did nothing

We also found controls that reported success for work that never ran — a cache flush across edge locations that do not exist, a build queue clear, and an admin password form that showed a confirmation while the old password kept working. Those were deleted rather than fixed. A control that is not wired to anything is worse than a missing feature, because the operator believes the thing happened.

Related Articles

Product Updates

What Glacro Actually Runs, and What It Doesn't

August 26, 2026 · 6 min read
Tutorials

Deploying a Next.js 14 Static Export

August 20, 2026 · 7 min read