Inspiration

An overdue bill tells you how much to pay and when. Figuring out whether you can dispute a charge, request financial assistance, or ask for more time takes more work—often when you’re already under financial pressure.

Research helped us understand this information gap. A 2024 Commonwealth Fund report, based on a nationally representative 2023 survey, found that among insured working-age adults who did not challenge a suspected incorrect medical bill:

  • Over half weren’t sure they had the right to challenge it.
  • 25% didn’t know whom to contact.
  • Among those who did challenge their bill, nearly 40% reported that their insurer reduced or eliminated it.

These findings concern medical bills, but they inspired our broader question: how can we make the next step easier for someone facing an unaffordable bill? Read the study.

We built MoreTime, an AI-powered bill assistance agent that helps people understand bills, discover relevant options, and prepare requests through iMessage.

What it does

Users upload a bill or describe their situation on our website, then verify their phone number to continue in iMessage.

MoreTime can:

  • Explain bill amounts, dates, line items, and uncertainties.
  • Remember a user’s budget, corrections, and circumstances across messages.
  • Calculate proposed installments without claiming that the biller has accepted them.
  • Search for relevant contacts, assistance programs, policies, and legal terminology, with cited sources.
  • Draft a payment-plan or dispute request for the user to review and send.
  • Send approved check-ins and optionally flag possible payment notices through read-only Gmail access.

MoreTime distinguishes between advice, prepared drafts, and completed actions. It does not claim to have contacted a company, negotiated an agreement, or secured a deadline extension.

How we built it

We built the backend with TypeScript and Node.js, using Photon’s iMessage integration to connect the assistant to a familiar messaging interface.

Gemini extracts structured facts from uploaded PDFs and images and generates conversational responses. Rather than relying on one open-ended prompt, we created a response contract validated with Zod. Replies contain a direct answer, a next step, contact guidance, and at most one necessary clarification question.

SQLite stores bill facts, conversation history, and persistent case memory. This allows MoreTime to remember information such as a monthly budget without repeatedly asking for it.

For questions requiring public information, a separate Gemini Google Search grounding request gathers attributed evidence. The assistant then produces a structured answer with source links and a checked date. Contact details must match the uploaded bill or cited evidence.

We also added an opt-in scheduling worker for check-ins and Google OAuth for read-only Gmail notice monitoring, with encrypted refresh-token storage.

Challenges we faced

Making answers useful and consistent

Early responses could repeat questions or provide general advice without a clear next step. We combined structured prompts with application-controlled formatting, persistent memory, and deterministic installment calculations.

Making web research work reliably

Routine Gemini chat working did not mean Search grounding would work with the same model and quota. We separated extraction, chat, and research configuration, tested them independently, and selected a research default that worked with our development project.

Checking contact details without blocking useful answers

Our validator rejected unsupported phone numbers, emails, and websites, but equivalent phone formatting could also cause a mismatch. We improved normalization and added one bounded repair attempt. If a detail still cannot be supported, MoreTime returns source links and department guidance.

Handling asynchronous messaging

Verification, duplicate deliveries, restarts, and disconnects all affect a messaging assistant. We added persistent reply handling and checks that prevent an in-flight response from being delivered after a user disconnects.

What we learned

We learned that finding information and helping someone act on it are separate problems. A useful response connects the bill, the person’s circumstances, the appropriate department, and a concrete request.

We also learned that structured output does not guarantee factual accuracy, and a citation does not guarantee that a policy applies to someone’s situation. Extraction needs confirmation, sources need review, and uncertainty needs to remain visible.

Finally, keeping budgets, corrections, calculations, and action status in application state made the assistant more dependable than asking the model to reconstruct everything each turn.

Accomplishments we’re proud of

We connected website intake, bill analysis, web research, persistent case memory, and follow-up conversations into a working iMessage flow.

At the latest validated implementation revision, 108 automated tests passed, alongside TypeScript checks. We also completed synthetic live Gemini checks for remembered budgets, sourced contacts, and legal-term explanations.

Those checks validate important behaviors, while leaving broader model accuracy and real-world usefulness as ongoing evaluation work.

What’s next for MoreTime

We want to add an editable email form that sends a request only after the user reviews and approves it, make check-ins respond to confirmed deadlines and planned actions, and connect users with specialist assistance services.

We also plan to evaluate more consented examples, improve source-quality checks, and preserve fuller research evidence with each case.

Our goal is to help someone move from “I don’t know what to do with this bill” to a clear, informed next step.

Share this project:

Updates

Submission history