The Small Business Invoice Chase — Hackcache
Help a small business track unpaid invoices, follow up on time, send GST invoices and demand letters, and see a cash shortage coming before it hits.
- Track: Banking & Finance
Problem Statement 4: The Small Business Invoice Chase
Track: Finance & Banking
Focus: Small Businesses · Receivables · Cash Flow Management
The Challenge
Small businesses in India often supply goods or services on credit and receive payments days or weeks later. Tracking unpaid invoices, remembering payment deadlines, following up with customers, and managing expenses while waiting for payments can become difficult, especially for businesses without dedicated accounting teams.
Delayed payments can leave business owners struggling to pay suppliers, salaries, rent, and other expenses, even when their businesses are profitable on paper. Many lack a simple system to track outstanding dues, identify risky delays, forecast cash shortages, and escalate payment requests professionally.
Your challenge is to build a solution that helps small businesses manage receivables, automate payment follow-ups, generate appropriate invoice and payment-demand documents, and anticipate cash-flow problems before they become critical.
Possible Areas to Explore
Invoice Management: Organise invoices by customer, due date, payment status, GST details, and outstanding amount.
Automated Payment Reminders: Generate personalised payment reminders through email, WhatsApp, or other suitable channels based on how overdue an invoice is.
GST Invoice Generation: Help businesses generate GST-compliant tax invoices where applicable, with the necessary business, customer, tax, and transaction details.
Payment-Demand Notices: Generate formal payment-demand letters for overdue invoices, including the outstanding amount, invoice references, payment deadline, and payment instructions.
Escalation Workflow: Create a structured follow-up process that progresses from friendly reminders to stronger payment demands as invoices become overdue.
Evidence & Documentation: Maintain invoice copies, payment records, reminder history, and customer communications to help businesses document unpaid dues.
Payment Reconciliation: Match incoming payments against invoices and flag partial payments, unmatched transactions, or discrepancies.
Cash-Flow Forecasting: Estimate future cash availability using expected collections, supplier payments, salaries, rent, and other financial obligations.
Smart Prioritisation: Identify overdue invoices that need immediate attention based on their age, amount, customer payment history, and impact on business cash flow.
Dispute Handling: Allow customers to flag incorrect invoices, report payments already made, or raise billing disputes before further escalation.
Simple Financial Dashboard: Present total receivables, overdue amounts, expected collections, and upcoming expenses in an easy-to-understand format.
Expected Outcome
Build a working prototype that demonstrates how a small business can track unpaid invoices, automate payment reminders, generate GST-compliant invoices where applicable, prepare payment-demand notices, and forecast potential cash shortages.
Your solution should help business owners move from manually chasing customers and reacting to financial difficulties towards managing collections through a structured, transparent, and proactive process.
Important
You do not need to build a complete accounting or enterprise resource planning system. You may focus on one high-impact problem or combine multiple features. You can use sample invoices and simulated transaction data; integration with actual banking, accounting, GST, or messaging systems is not mandatory.
Generated payment-demand letters must be clearly distinguished from statutory GST notices or lawyer-issued legal notices. Do not misrepresent a document's legal status, and ensure tax calculations and invoice requirements are handled accurately.
Evaluation Focus
Practical usefulness, invoice management, payment-follow-up automation, accuracy of financial calculations, cash-flow forecasting, document generation, ease of use, technical execution, and real-world impact.
Build it with AI
- Build 1 · The whole prototype: Build a working web app prototype for a hackathon. Build the whole thing, not a plan: every screen below should work when I open it. OUR CHOICES (change these, or leave them as they are) - App name: Baaki - Business: Sharma Packaging, Pune (Maharashtra). It makes cartons, has 8 employees, is GST-registered (regular), and sells to 12 business customers on 30-day credit. The owner is Rakesh Sharma. - Part we go deepest on: knowing which invoices to chase this week so the business doesn't run short of cash THE PROBLEM Small businesses in India sell on credit and get paid weeks later. Without an accounts team, the owner loses track of who owes what, forgets to follow up, doesn't know how to escalate politely, and finds out about a cash shortage only when salaries are due. The app tracks every invoice, tells the owner exactly who to follow up with today and how, writes GST invoices and payment demand letters, matches incoming payments, and shows a cash shortage weeks before it happens. It does not connect to any bank, GST or messaging system. Every business, customer and transaction is made up. THE MONEY RULES (accuracy is judged) - Store every amount as…
- Build 2 · Finish what's missing: Go through the app you built and check it against this list. For each item, say whether it is done, partly done or missing. Then build everything that is partly done or missing, one item at a time, and keep everything that already works exactly as it is. - Money in whole paise, Indian formatting, the invoice total in words, IST dates, the April-March financial year - GST per line, rounded to the paisa; CGST + SGST or IGST chosen by state code; rates from config.js; a round-off line - Tax Invoice, Bill of Supply or plain invoice chosen by registration type, with every required field - GSTIN pattern and check-digit validation; the e-invoicing note above ₹5 crore turnover - Payment Demand Letter with the "not a GST or legal notice" line, invoice details, deadline, how to pay, the optional MSMED line and interest, and never the words "legal notice" - Dashboard with totals, ageing bar and top 5 to chase - Invoices list with statuses, filters and a timeline; New invoice with live totals, a UPI QR code and a print-ready preview - Customers with credit days, payment record and an A/B/C grade with the reason - Today's follow-ups with ready messages and one-…
- Add-on · Send reminders for real: Send reminders automatically instead of opening the owner's apps. - Add a small server (Node + Express, or serverless functions on Vercel or Netlify) with a daily job at 10:00 IST that sends the reminders due that day. - Email through [Resend / an SMTP account]: - The key lives in an environment variable, listed in a .env.example file. - Each email is sent in the business's name, with reply-to set to the owner's email, and includes the invoice and pay links. - WhatsApp: keep the one-tap wa.me link, which needs no approval. In the README, explain that sending WhatsApp messages automatically needs the WhatsApp Business Platform with approved message templates, and write the five templates we'd submit. - Auto-send only the stages the owner switches on in Settings (by default, only the friendly heads-up and the due-date reminder). Demand letters are never sent automatically; the owner always presses Send. - Never send the same stage twice, never send for a disputed or paused invoice, never send a customer more than one message a day, and end every message with who to contact. - Log every send with its status, and show failed ones in Today's follow-ups…
- Add-on · Add invoices from a photo: Let the owner add existing paper or PDF invoices by taking a photo, using [your AI provider, e.g. Gemini, OpenAI or Claude]. - Never put the API key in the frontend. Add a small server endpoint that reads the key from an environment variable, listed in a .env.example file. - Read: invoice number, date, customer, GSTIN, items, HSN/SAC codes, quantities, rates, taxable value, tax amounts, total, and the due date if one is shown. - Fill the New invoice form for the owner to check. Never save without review, and highlight every field the AI was unsure of. - Recalculate the GST from the items, and flag it if the result doesn't match the printed totals. Check the GSTIN's check digit, and flag it if it fails. - Accept JPG, PNG and PDF up to 5 MB, and don't keep the file after reading it. - Then tell me how to test it: print an invoice from the app, photograph it, and read it back.
- Add-on · Another language: Add [Marathi] to the app as a third language. - Translate every string in src/i18n, every reminder template and the customer link page. Use the plain words a shopkeeper would use, and keep terms like GST, GSTIN, HSN and UPI as they are. - Give each customer a preferred language, so their reminders and their pay link use it. - Keep invoices and demand letters in English by default, with a setting to add the new language under each heading. - Show each language's name in its own script in the language picker, and make sure longer words don't break any layout at 360px wide.
- Submit · README, link and demo: Get this ready to submit to the hackathon. 1. Write a README.md covering: - the problem in two lines, and who the app is for - what it does, one line per screen - how GST is worked out, and which invoice type is issued when - how the escalation ladder works, and why the demand letter is clearly not a legal or GST notice - how payments are matched, how the forecast and the "chase these first" score are worked out - how it improves on chasing payments by hand today - how to run it, what is simulated, and what we'd build next 2. Tell me step by step how to put it online on Vercel or Netlify from a GitHub repo, so the judges can open a link. Include the setting that stops a page refresh from showing a 404. 3. Write a 3-minute demo script for judges who score practical usefulness, invoice management, payment-follow-up automation, accuracy of financial calculations, cash-flow forecasting, document generation, ease of use, technical execution and real-world impact. Show: - the dashboard, then the forecast's shortfall week and the invoices that would cover it - today's follow-ups, sending one by WhatsApp - a customer disputing an invoice through their link,…
- Debug · An error message: I'm getting this error: [paste the full error message from the terminal or the browser console] It happens when: [what you did, e.g. pressed Save on a new invoice, ran npm run dev] The file it points to: [paste the file, or the part the error names] Explain in two lines what is causing it. Then fix only that: give me the corrected code for each file that changes, with its file name, and don't change anything unrelated. Tell me how to check it's fixed.
- Debug · Blank white screen: The app shows a blank white screen. The browser console (right-click the page, Inspect, Console) shows: [paste any red text, or write "nothing"] The terminal shows: [paste it] What I changed last: [describe it] Find the cause step by step: the console error first, then the entry files (main.jsx and App.jsx), the routes, any import that might be wrong, and saved data in localStorage that no longer matches what the code expects (and make Reset demo clear it). Fix the cause, not the symptom. Also add a simple error screen, so a crash in one screen shows a message instead of a blank page.
- Debug · The GST or totals are wrong: The invoice maths is wrong: [e.g. GST shows 1800.0000002 / IGST is used for a customer in our own state / the total doesn't match the items]. Check these one by one: - Every amount is in whole paise, and typed rupees are converted exactly once, when entered. - Each line's taxable value is quantity x rate - discount, worked out in paise. - Tax on each line is rounded to the paisa; CGST and SGST are each half the rate and rounded separately. They can differ from IGST by a paisa, which is expected. - Same state versus other state is decided by comparing the business's state code with the place of supply's state code. - The round-off line takes the total to the nearest rupee, and the amount in words matches the rounded total. Then run these cases and show me a table of expected against actual: - ₹10,000 at 18%, same state: CGST 900, SGST 900, total 11,800 - ₹10,000 at 18%, other state: IGST 1,800, total 11,800 - 3 x ₹333 at 5%, same state - an item with a 10% discount - a composition business (no GST) - a 0% item
- Debug · Reminders on the wrong day: Reminders show up on the wrong day or at the wrong stage: [e.g. the 7-days-overdue reminder appears on day 6 / a disputed invoice still gets reminders / the same reminder comes back every day]. Check these one by one: - Days overdue are counted in whole IST days from the due date, not in hours and not in UTC. - Each stage is due once, and is marked done when sent. - A dispute or a promise to pay pauses the ladder until it is resolved or the promised date passes. - A part payment keeps the stage but updates the amount in the message. - The stage days are read from config.js, not hard-coded. Use the Demo date setting to test, and show me a table of one invoice moving through every stage.
- Debug · Payments matched wrongly: Payment matching is wrong: [e.g. a payment matched to the wrong customer / a part payment marked as fully paid / the TDS shortfall isn't flagged]. Check these one by one: - The invoice number is found in the bank description even with different spacing or separators (INV/26-27/0012, INV 26-27 12, 0012). - Amounts are compared in paise. - Customer names match loosely (ignore M/s, Pvt Ltd and capital letters). - One payment can cover several invoices: oldest first, unless the description names them. - A part payment leaves the rest owed. - A shortfall of exactly 1%, 2% or 10% of the taxable value is flagged as possible TDS. - Nothing is marked paid until it is confirmed. - Importing the same file twice doesn't count anything twice (match on date, amount and reference). Run bank-statement.csv again and show me a table of each line, what it matched and why.
- Debug · A feature isn't working right: [The screen or feature, e.g. the cash forecast] isn't working properly. What I expected: [e.g. cash drops below the buffer in week 6 because salaries are due and two customers pay late] What happens instead: [e.g. it never drops, and one week's closing cash doesn't match the next week's opening cash] Steps to make it happen: [1, 2, 3] Read the code for this feature and work out why it behaves this way before changing anything. Explain the cause in plain words, then fix it with the smallest change that works, and tell me exactly how to test it.
- Debug · It broke after my last change: Everything worked until my last change. Now [what's broken]. The change I made, or asked you to make: [describe it or paste it] Compare the code before and after that change and find what broke. Fix it so the new change and everything that worked before both work. If the change can't work without breaking something, tell me and suggest another way to do it.
- Debug · The AI keeps going in circles: Stop. We've tried to fix this several times and it still isn't fixed. Don't write any more code yet. The problem: [describe it] 1. List what we've already tried, and why each attempt didn't work. 2. List three possible root causes, most likely first, and what would confirm each one. 3. Tell me exactly what to check or log (one console.log, or one thing to look at) to find out which it is. Once I tell you the result, make one focused fix.
- Debug · Broken on a phone: The app looks broken on a phone: [describe it, e.g. the invoice items table runs off the side of the screen]. Fix the layout so every screen works at 360px wide and at the largest text size: - nothing scrolls sideways, and no text or amount is cut off - wide tables become stacked cards on a phone - buttons are at least 48px tall and don't overlap - long Hindi words wrap The print-ready invoice and letter pages must still print correctly on A4. Check every screen, not only the one I named, and tell me which ones you changed.
- Debug · Broken after deploying: The app works on my laptop but not after deploying to [Vercel / Netlify / GitHub Pages]. What happens: [e.g. a blank page, a 404 when I open a customer's /pay link, reminders don't send] The build log or browser console shows: [paste it] Check the usual causes one by one: - the build command and output folder - the base path - a rewrite so every route (including /pay/:token) serves index.html - file names whose capital letters differ from their imports (my laptop may ignore case, but the server doesn't) - environment variables that exist on my laptop but were never added to the host - if we have a server, whether the app points at the server's live address instead of localhost Tell me exactly which settings to change and where.