See how fast you can be debt-free
Enter your debts and any extra money you can pay each month. We compare three approaches so you can pick the one that works for you. Nothing you type leaves your device.
Paid on top of all minimums.
How to build and run OwedToZero
OwedToZero is a fully static site: every calculation runs in the visitor’s browser, so no backend, database, or server is needed. The plan below covers building, hosting, and monetizing it that way.
1. Architecture
- Front end: static HTML/CSS/JS in an S3 bucket served by CloudFront (HTTPS, caching, gzip). Domain and certificate through Route 53 and ACM. Free alternatives: Netlify, Cloudflare Pages, or GitHub Pages.
- Calculations: JavaScript inside the page. There is no API to build or pay for.
- Saving plans (optional, still no backend): browser
localStorage, a downloadable file, or a shareable link that encodes the debts in the URL. - No accounts: nothing to sign in to, so no passwords or personal data for you to protect.
- Reminders: a downloadable calendar (.ics) file instead of server-sent email.
- Ops: a free uptime monitor and privacy-friendly analytics (Plausible or Cloudflare Web Analytics).
2. Build phases
- Week 1 – Core logic: finalize the simulation (monthly interest, minimums, rollover of freed payments), write unit tests for edge cases: zero APR, minimum below interest, overpayment, one debt, 50 debts.
- Week 2 – UI and accessibility: this two-view site. Test with keyboard only, NVDA/VoiceOver, 200% zoom, and a contrast checker.
- Week 3 – Hosting: create the S3 bucket and CloudFront distribution (or pick a free static host), then attach the domain and HTTPS certificate.
- Week 4 – Enhancements: local save, shareable links, print-friendly view, and charts with text equivalents.
- Week 5 – SEO and compliance: landing-page copy, meta tags, privacy policy, cookie-consent banner,
ads.txt. - Week 6 – Launch: automatic deploys from GitHub (lint, test, upload to host), monitoring, soft launch.
3. The algorithm
- Total monthly budget = sum of minimums + extra.
- Each month: add interest (balance × APR ÷ 12) to every debt.
- Pay each minimum (capped at the balance).
- Send all leftover money to the target debt: highest APR (avalanche) or lowest balance (snowball).
- When a debt is cleared, its minimum rolls into the leftover pool. Repeat until all balances are zero or 100 years pass.
4. Accessibility checklist (WCAG 2.2 AA)
- Text contrast of at least 4.5:1 (this palette is about 8:1 or better); borders and controls at least 3:1.
- One consistent high-contrast light theme; meaning is never conveyed by color alone.
- Every input has a real label; results announced via
aria-live; errors in text, not color alone. - Visible 3px focus ring, skip link, 44px minimum targets, reflows at 320px, respects reduced motion.
5. Security and privacy
- Validate all inputs in the browser and escape debt names before showing them, as the page already does.
- No financial account numbers are ever collected, only balances, rates, and payments.
- Enforce HTTPS, add security headers (CSP, X-Content-Type-Options), and limit third-party scripts to your ad network.
6. Testing
- Unit tests (Jest or pytest) against known amortization results; property tests (total paid equals principal plus interest).
- Accessibility: axe-core in CI plus manual screen-reader pass.
- End-to-end: Playwright flow of add debts, calculate, read results.
7. Estimated cost
Static hosting is nearly free: GitHub Pages, Netlify, or Cloudflare Pages cost $0, and S3 plus CloudFront typically runs a dollar or two a month at low traffic. Your main fixed cost is the domain, around $10–15 a year.
8. Ad monetization
- Placements: top banner, a 300×250 unit below the results, and a bottom banner. Each slot has a fixed size so the page doesn’t jump when ads load.
- Network: apply to Google AdSense (or Ezoic, Mediavine, Raptive once traffic grows), then paste their script and slot code into the three placeholder blocks on your own CloudFront-hosted site.
- Privacy and consent: add a cookie-consent banner (a Google-certified CMP for EU/UK visitors), a privacy policy, and an
ads.txtfile in the S3 bucket root. - Accessibility and trust: keep ads clearly labeled “Advertisement”, away from the Calculate and Remove buttons to prevent accidental clicks, and never inside the results table.
- Revenue levers: SEO landing pages (“snowball vs avalanche”, “credit card payoff calculator”), then affiliate offers for balance-transfer cards or consolidation loans, which pay more than display ads in this niche.
9. Future ideas
- Chart of balance over time (with a data table alternative)
- Downloadable PDF plan
- "What if I pay $50 more?" slider
- Spanish and other language versions