DEV Community

Cover image for Still Charging: The Zombie Subscriptions That Keep Coming Back
BHAVYA GOTHI
BHAVYA GOTHI

Posted on

Still Charging: The Zombie Subscriptions That Keep Coming Back

This is a submission for the Hacktoberfest Open-Source AI Challenge Week 4: Ghost in the Machine

A subscription can outlive the reason it started.

A free trial ends. A price changes. A service you meant to cancel keeps appearing on the statement. Still Charging helps you spot those recurring charges and decide what to do with them—without connecting to your bank or handing your statement to an AI service.

What I Built

Still Charging is a privacy-first subscription review tool. Import a CSV or text-based PDF bank statement, and the app looks for recurring charges and possible price increases.

It shows the evidence behind each candidate: the observed dates and amounts, the estimated billing cadence, and a confidence label. The pattern is still only a suspicion until you review it.

From there, you can:

  • Keep a charge in your ledger.

  • Mark it “Plan to cancel”—a reminder, not a completed cancellation.

  • Record “Cancelled by you” after you cancel it yourself.

  • Print a plain, black-and-white review list.

  • Check fixed guidance for UPI AutoPay and card mandates.

In Halloween mode, the review queue has a small “ghosts spotted” detail. Keep a charge and its ghost rises back into the ledger; mark it “Cancelled by you” and it settles away. These are visual responses to your choices. Still Charging never cancels a subscription or sends a message for you.

The app also has a gentler remembrance mode and three selectable color themes: Midnight plum, Haunted slate, and Candlelight.

Demo

Try the live app:

Choose Explore synthetic sample data to see the dashboard without importing a real statement. To try your own data, import a CSV or text-based PDF. Scanned and password-protected PDFs aren’t supported.

The hosted demo works in No-AI mode. Cloud Groq requires an API key configured by the operator, and the hosted service currently has no key configured. Local Gemma requires Ollama on the machine running the backend, so it isn’t available on the default hosted setup.
**
Code**

Source code:

GitHub logo Bhavya4523 / still-charging

Still Charging — privacy-first recurring-charge detection with deterministic analysis, local Gemma, and optional Groq AI.

Still Charging

A privacy-first recurring-charge ledger with open-weight AI where it helps and deterministic rules where transaction evidence matters. Built for Hacktoberfest 2026, “Ghost in the Machine.”

Still Charging parses CSV and text-based PDF statements in your browser, detects recurring charges and possible price increases with deterministic code, and helps you review what to keep or plan to cancel. AI is optional and has three explicit modes: No AI, local Gemma through Ollama, or cloud Groq. The app never cancels a subscription or sends a message.

Project structure

still-charging/
├── frontend/                 React + Vite app
│   ├── src/App.jsx           Dashboard, mode selection, consent, review actions
│   ├── src/parsing.js        Browser-only CSV/PDF parsing and recurrence rules
│   └── src/styles.css        Responsive haunted-ledger UI and print styles
├── backend/                  Express AI API; no statement upload route
│   ├── src/providers/        Ollama local Gemma and Groq cloud providers
│   ├── src/routes/ai.js      Strict field allowlist, output validation, rate
…

The project is released under the MIT License.

How I Built It

  • The important boundary is between financial evidence and language assistance.

  • Statement parsing stays in the browser. CSV and PDF text are processed on the user’s device. The backend has no statement-upload endpoint.

  • Recurring-charge detection is deterministic. The app compares normalized merchant descriptions, dates, intervals, and amounts. Price increases are based on observed charges, not model guesses.

  • AI is optional. Users can choose No AI, local Gemma through Ollama, or Cloud Groq. The providers do not switch automatically.

  • AI requests are narrow and confirmed. Before a request, the user sees the operation, language, and sanitized merchant description. The backend accepts no statement, transaction list, dates, amounts, or account identifiers. Model results remain suggestions for the user to review.

  • The interface keeps the decision with the person. “Plan to cancel” is not presented as a cancellation, and the fixed cancellation guide is not generated by AI.

The project uses React and Vite for the frontend, Express for the AI API, PDF.js for local PDF text parsing, and open-weight Gemma through Ollama. The optional Cloud Groq provider uses openai/gpt-oss-20b. The current test suite has 11 passing automated tests, and the production frontend build succeeds.

Why Open Innovation Matters

A financial tool should make its data boundaries easy to inspect. The source is public, the recurrence rules are deterministic, and the AI request schema is narrow enough to review. People can run the core analysis without AI, inspect the code, fork it, and improve the matching rules without sending a bank statement to a model.

Open models also give users a choice about where language assistance runs. Gemma can run locally through Ollama; Cloud Groq is a separate, explicit option when configured. That choice stays visible instead of being hidden behind an automatic provider switch.

The Spirit of It

One of Still Charging’s epitaphs reads: “The season ended. The bill did not.” It’s a small joke about a serious uncertainty: the app can show that a payment keeps returning, but it can’t know whether that subscription still matters to you.

The “ghost” in Still Charging is a recurring payment that keeps returning after its context has faded. The app makes that pattern visible, but it doesn’t decide what the person should do with it.
So a “ghost” is only an invitation to look closer. You can inspect the dates and amounts, keep the service, or make a plan to cancel. Even “Cancelled by you” is just a note—the app never acts on your account.

A charge can be worth keeping. A charge can be worth cancelling. The ledger can help you see it clearly; the choice remains yours.

A subscription may haunt the ledger. It doesn’t get the last word.

Top comments (0)