Companies need a simple way to track employee expenses, set yearly spending budgets for each expense category, and get alerts before they overspend. This system serves multiple organisations at once — each organisation gets its own private workspace where only their team can see their data.
A single running application serves many organisations at the same time. Each organisation's expense data, categories, budgets, and users are completely private. One company cannot see another company's data — even though they are all using the same system.
TechCorp BD is a software company with 8 employees. The company owner, Rahim Ahmed, signs up for the platform, chooses the Pro Plan, and creates the company workspace. He sets up five expense categories and a yearly budget for each. He then invites his team — some as regular Members who add their own expenses, and one senior as a Manager who can review the team's full spending.
Every time a team member spends money — a taxi ride, a team lunch, a software subscription — they open the app and record the expense. The system checks if the spending is close to or over the budget, and alerts the Admin and Manager if needed. At the end of each month, the Manager opens the Monthly Summary to see how much each category has been spent, and whether the team is on track.
| Who | What They Do Daily |
|---|---|
| Admin Rahim Ahmed | Monitors budget health on the dashboard, manages team members, handles billing |
| Manager Nusrat Jahan | Reviews team expenses, approves over-budget entries, views monthly report |
| Member Fahmida, Tarek, Karim… | Adds their own expenses; can only see their own history |
| Category | Monthly Budget | Limit Type |
|---|---|---|
| Travel & Transport | ৳30,000 | Hard Limit |
| Meals & Entertainment | ৳25,000 | Soft Limit |
| Software Subscriptions | ৳40,000 | Soft Limit |
| Office Supplies | ৳20,000 | Soft Limit |
| Training & Courses | ৳35,000 | Soft Limit |
| Limit Type | What Happens When Budget Is Exceeded |
|---|---|
| Soft Limit | The expense is saved. The system marks it as "Over Budget" and sends an alert. No approval needed. |
| Hard Limit | The expense is held. The member cannot complete the entry until a Manager or Admin approves it. |
The system has four types of users. Each organisation has its own set of users, separate from all other organisations.
| Role | Who They Are | What They Can Do | What They Cannot Do |
|---|---|---|---|
| Super Admin | The platform operator (not part of any organisation) | View all organisations, manage subscription plans, monitor platform health | Cannot see any organisation's expense data |
| Tenant Admin | The organisation owner or IT lead | Invite & remove users, set roles, create categories, set budgets, view all expenses, manage billing | Cannot access other organisations' workspaces |
| Manager | Team lead or finance officer | View all team expenses, approve over-budget entries, view monthly report, add own expenses | Cannot manage users or change billing plan |
| Member | Regular employee | Add, edit, and view their own expenses only | Cannot see other members' expenses or reports |
Each organisation chooses a plan when they sign up. The plan determines how many users they can invite, how many expense categories they can create, and how far back they can see their history.
Each organisation gets a fully private workspace. Sign up, choose a plan, and your team's data is isolated from everyone else.
Admins invite team members by email and assign them a role. Invitation links expire after 48 hours. Accepted members can log in immediately.
Create named categories to organise expenses (Travel, Meals, Software, etc.). Categories can be deactivated without losing old expense history.
Members record daily expenses with date, category, amount, and a short description. The system warns if the same expense looks like a duplicate.
Admin sets a budget for each expense category for the year. Only the current year's budget can be changed. Past year budgets are locked.
The system checks every new expense against the category's budget. Alerts go out at 80% usage. Soft or Hard Limit rules apply at 100%.
When a Hard Limit budget is exceeded, the entry waits for Manager or Admin approval. The Manager can approve or reject with a note.
Managers and Admins see a full monthly report: total spent, budget vs actual per category, and which members spent what.
In-app alerts for budget thresholds, over-budget entries, approval requests, and plan events. Each alert fires only once per period — no spam.
If an expense was entered by mistake, the correction is recorded as a separate Adjustment Entry — the original record is never changed.
Example accounts: [email protected] (Admin) | [email protected] (Manager) | [email protected] (Member)
| Starter | Pro Popular | Enterprise | |
|---|---|---|---|
| Price | Free | $49 / month | Contact us |
| Users | 3 | 15 | Unlimited |
| Categories | 10 | Unlimited | Unlimited |
| History | 6 months | Full | Full + Archive |
| Date | Member | Category | Description | Amount | Status |
|---|---|---|---|---|---|
| 15 Jun | Fahmida | Travel | Taxi to client — Gulshan | ৳1,200 | Pending Approval |
| 12 Jun | Tarek | Meals | Team lunch | ৳3,800 | Saved |
| 10 Jun | Karim | Software | GitHub Pro | ৳1,500 | Saved |
| Name | Role | Status | Action | |
|---|---|---|---|---|
| Rahim Ahmed | [email protected] | Admin | Active | — |
| Nusrat Jahan | [email protected] | Manager | Active | |
| Fahmida Akter | [email protected] | Member | Active | |
| Karim Hasan | [email protected] | Member | Invited |
One budget per category per year. Budgets for previous years are locked and cannot be changed. Categories without a budget are treated as Unlimited — no alerts will fire for them.
| Category | Budget Amount (৳) | Limit Type | Status |
|---|---|---|---|
| Travel & Transport | Set | ||
| Meals & Entertainment | Set | ||
| Software Subscriptions | Set | ||
| Office Supplies | Set | ||
| Entertainment | Unlimited |
| Category | Budget | Spent | Remaining | Status |
|---|---|---|---|---|
| Travel & Transport | ৳30,000 | ৳32,100 | −৳2,100 | Over Budget |
| Meals & Entertainment | ৳25,000 | ৳20,400 | ৳4,600 | 82% Used |
| Software Subscriptions | ৳40,000 | ৳18,000 | ৳22,000 | On Track |
| Office Supplies | ৳20,000 | ৳9,400 | ৳10,600 | On Track |
| Training & Courses | ৳35,000 | ৳6,500 | ৳28,500 | On Track |
Fahmida Akter submitted ৳1,200 (Taxi — Gulshan). Travel is a Hard Limit category and is already over budget. Manager or Admin must approve.
Team spending ৳32,100 exceeds the ৳30,000 Hard Limit budget (107%). Two entries are now waiting for approval.
Team has spent ৳20,400 of the ৳25,000 budget (82%). This alert will not repeat until next month.
Fahmida Akter accepted the invitation and joined TechCorp BD as a Member.
Your Pro plan allows 15 users. You have 8 active members. 7 seats remaining before you need to upgrade.
1. Owner opens the website and clicks "Create Workspace".
2. Owner enters organisation name, email, and password.
3. System creates the organisation's private workspace.
4. Owner chooses a subscription plan (Starter / Pro / Enterprise).
5. Owner is automatically set as the Tenant Admin.
6. Onboarding wizard guides the owner: Create categories → Set budgets → Invite team.
7. Workspace is ready. Team members receive invitation emails.
1. Member logs in and opens the Add Expense screen.
2. Member selects date, category, enters amount and a short description.
3. System checks: amount must be positive; date cannot be in the future.
4. System checks for a duplicate entry (same date, amount, category, and description).
5. If duplicate found: system shows a warning. Member can still choose to save.
6. System checks the category's budget.
7a. Soft Limit: Expense is saved. If over budget, it is marked "Over Budget" and an alert is sent.
7b. Hard Limit exceeded: Expense is held as "Pending Approval". Manager/Admin is notified.
8. Member sees a confirmation or a "Waiting for Approval" message.
1. Manager opens the Notifications screen and sees an approval request.
2. Manager clicks "Review & Approve" to see the expense details and current budget status.
3a. If approved: Manager clicks Approve (optionally adds a note). Expense is saved. Member is notified.
3b. If rejected: Manager clicks Reject and enters a reason. Expense is discarded. Member is notified with the reason.
1. Admin opens the Manage Team screen.
2. System checks if the team has reached the plan's user limit.
3. If limit reached: system shows an upgrade prompt. Invitation is blocked.
4. Admin enters the new member's email and selects their role.
5. System sends an invitation email. The link expires in 48 hours.
6. Member clicks the link, sets a password, and joins the workspace.
7. Admin sees the member's status change from "Invited" to "Active".
1. Member or Admin identifies an expense that was entered incorrectly (e.g. a refund was received).
2. They open the Adjustment screen and link to the original expense.
3. They enter the correction amount and a reason.
4. System saves the Adjustment Entry. The original expense record is never changed.
5. The monthly report reflects the adjustment correctly. Negative amounts never appear anywhere.
| Category | Budget (৳) | Spent (৳) | Remaining (৳) | Status |
|---|---|---|---|---|
| Travel & Transport | 30,000 | 32,100 | −2,100 | Over Budget |
| Meals & Entertainment | 25,000 | 20,400 | 4,600 | 82% |
| Software Subscriptions | 40,000 | 18,000 | 22,000 | On Track |
| Office Supplies | 20,000 | 9,400 | 10,600 | On Track |
| Training & Courses | 35,000 | 6,500 | 28,500 | On Track |
| TOTAL | 1,50,000 | 86,400 | 63,600 |
| Member | Role | Total Expenses | Number of Entries |
|---|---|---|---|
| Rahim Ahmed | Admin | ৳12,400 | 8 |
| Nusrat Jahan | Manager | ৳18,200 | 11 |
| Fahmida Akter | Member | ৳22,100 | 14 |
| Tarek Mahmud | Member | ৳19,800 | 12 |
| Others (4 members) | ৳13,900 | 22 | |
| TOTAL | ৳86,400 | 67 entries |
| Organisation | Plan | Users | Status | Joined |
|---|---|---|---|---|
| TechCorp BD | Pro | 8 / 15 | Active | 01 Jun 2026 |
| Medicore Ltd | Starter | 3 / 3 | Plan Limit Reached | 14 May 2026 |
| NovaSoft Inc | Enterprise | 47 / ∞ | Active | 10 Apr 2026 |
| GreenLeaf Co | Starter | 2 / 3 | Active | 20 Jun 2026 |
You can use any programming language you want.
You can use any database — or even an in-memory data store for the first version.
The project can be a console, desktop, or web application.
Focus on the object design: how are Organisations, Users, Expense Categories, Expenses, and Budgets represented as classes, and how do the business rules connect them?
The three questions below are not part of the MVP. They are discussion topics for when the system grows into a large-scale SaaS product serving thousands of organisations and millions of daily expense entries. Think about them from a business and product perspective — not just a technical one.
Why does it get slow? Every time someone opens the Monthly Summary, the system currently reads every single expense entry for that month and adds them all up on the spot. With a small team this is fine. With millions of entries across thousands of organisations, it becomes very slow.
| Idea | How It Helps (in plain terms) |
|---|---|
| Pre-calculate daily totals in the background |
Instead of adding up all expenses every time a report is opened, the system quietly runs a background
job at the end of each day and stores the day's total per category. When someone opens the report,
it reads the pre-stored totals instead of scanning millions of rows from scratch. Think of it like a bank balance: your bank does not add up every transaction from day one every time you check your balance — it keeps a running total and just updates it. |
| Save a snapshot of each month's report | Once a month has ended, its report numbers will never change. The system can save a permanent copy of the finished monthly report. Future requests for that month just read the saved copy — no calculations needed at all. |
| Cache recent reports temporarily | If 50 people in the same organisation all open the June report in the same hour, the system should not recalculate it 50 times. It calculates once, saves the result briefly, and serves the saved result to everyone else who asks for it in the same window. |
| First Entry | Second Entry | Are They the Same? |
|---|---|---|
| Travel · ৳1,200 · "Taxi to Gulshan" | Travel · ৳1,200 · "Cab to client office Gulshan" | Probably yes |
| Meals · ৳3,800 · "Team lunch" | Meals · ৳3,800 · "Lunch — team meeting" | Probably yes |
| Software · ৳1,500 · "GitHub Pro subscription" | Software · ৳1,500 · "GitHub monthly fee" | Very likely yes |
| Travel · ৳1,200 · "Taxi to Gulshan" | Travel · ৳1,200 · "Taxi to Mirpur" | Probably no — different destination |
An AI system can be trained to read the description of a new expense and compare it to recent entries for the same user. If the descriptions are similar in meaning — even if the exact words are different — the AI can flag it as a possible duplicate and ask the member to confirm before saving.
The AI does not block the entry. It suggests: "This looks similar to an entry you saved on 14 June. Are you sure this is a different expense?" — and the member can confirm or cancel.
| Question (typed by user) | What the chatbot finds and shows |
|---|---|
| "What did we spend the most on last quarter?" | Travel & Transport — ৳98,400 (Q2 2026) |
| "Which team member has the highest expenses this month?" | Fahmida Akter — ৳22,100 across 14 entries in June 2026 |
| "Are we going to go over our Meals budget this month?" | At current pace, you will reach ৳26,400 against a ৳25,000 budget by month end. |
| "Show me all travel expenses above ৳2,000 in May." | Lists the matching entries directly in the chat |
| "How does this month compare to last month?" | June ৳86,400 vs May ৳74,200 — 16% higher this month. Biggest increase: Travel. |
| Role | How the Chatbot Helps Them |
|---|---|
| Admin | Get a quick budget health check without opening the report screen. Ask "are we on track?" at any time. |
| Manager | Compare member spending, spot patterns, and answer questions from team members without manually digging through data. |
| Member | Ask "how much budget is left in Travel this month?" and get an instant answer — scoped only to their own data. |