The purpose of this document is to define the software requirements for a bill-sharing web application similar to Splitwise. This document outlines the functionalities, interfaces, and constraints of the system.
This document covers the requirements for developing a web-based application that allows users to share and manage expenses within groups or directly between individuals. It includes features such as user registration, expense management, notifications, and reporting.
- SRD: Software Requirements Document
- UI: User Interface
- API: Application Programming Interface
This application is intended to be a standalone web-based solution for managing shared expenses among individuals and groups. It aims to simplify the process of splitting bills and settling expenses.
The primary focus of this phase to set up the backend side logic.
Primary Features:
- User Registration and Login
- Group Creation and Management
- Expense Adding and Sharing
- Expense Settlement
- Report Generation
Some of the Features in the pipeline are:
- Build the frontend and work on the UI
- Building API to connect the backend to the frontend
- Notifications and Reminders
- Dashboard and Reporting
The application will run on modern web browsers (Chrome, Firefox, Safari, Edge) and be accessible on both desktop and mobile devices.
- Users will have internet access.
- Users will have a basic understanding of web applications.
- Users can register using an email address and password.
- Users can log in using their registered credentials.
- Users can create groups and add members by email.
- Users can edit group details (name, description).
- Users can add expenses with details such as amount, date, and description.
- Users can specify participants for the expense and split amounts unevenly (e.g., 30% for Person A, 50% for Person B).
- Users can edit or delete expenses.
- Users can record payments made to settle expenses.
- Users can view outstanding balances with other users and groups.
- Users can record offline payments.
- Users can categorize expenses (e.g., food, travel, utilities).
- Users can filter expenses by category.
- Users can set up recurring expenses (e.g., monthly rent).
- Users can search for specific expenses or transactions.
- Users can filter expenses by date, category, or participant.
- The system tracks all changes and transactions for transparency.
- Users can view a log of all activities related to their account.
- Users can generate reports to determine the split between group members to make settling up offline easy
- The report will contain information about the sum owed by different users to each other
- Users can see an overview of all expenses, balances, and group activities.
- Users can view recent transactions and pending settlements.
- Users receive email and/or push notifications for new expenses, payments, and reminders.
- Users can manage notification preferences.
- Users can add notes to expenses for additional details.
- Users can attach receipts or images to expenses.
- Users can add expenses in different currencies.
- The system will convert and display expenses in a common currency based on exchange rates.
- Users can generate summary reports for individual or group expenses over a specified period.
- Reports can be exported as PDF or Excel files.
- Users can update their profile details, including name, email, and profile picture.
- Users can change their password and manage account settings.
- The system should handle up to 500 concurrent users.
- The average page load time should be under 5 seconds.
- The system should handle data securely, complying with data protection regulations.
- User data must be encrypted both in transit and at rest.
- Implement multi-factor authentication for added security.
- Users must agree to the terms and conditions during registration.
The UI should be intuitive and user-friendly, with a clean and responsive design.
No specific hardware interfaces are required beyond a device capable of running a modern web browser.
- The system will interact with payment gateways for transaction processing.
- The system will use APIs for currency conversion rates.
The system will use HTTPS for secure communication between the client and server.
POST /api/register
Description: Register a new user.
Request:
{
"email": "[email protected]",
"password": "securepassword",
"name": "John Doe"
}
Response:
{
"success": true,
"message": "User registered successfully"
}
POST /api/login
Description: Authenticate a user and generate a token.
Request:
{
"email": "[email protected]",
"password": "securepassword"
}
Response:
{
"success": true,
"token": "jwt-token"
}
POST /api/password-recovery
Description: Initiate password recovery process.
Request:
{
"email": "[email protected]"
}
Response:
{
"success": true,
"message": "Password recovery email sent"
}
POST /api/groups
Description: Create a new group.
Request:
{
"name": "Vacation Trip",
"description": "Trip to Hawaii"
}
Response:
{
"success": true,
"groupId": "group-id"
}
GET /api/groups/{groupId}
Description: Get details of a specific group.
Response:
{
"groupId": "group-id",
"name": "Vacation Trip",
"description": "Trip to Hawaii",
"members": ["user-id-1", "user-id-2"]
}
PUT /api/groups/{groupId}
Description: Update group details.
Request:
{
"name": "New Group Name",
"description": "Updated description"
}
Response:
{
"success": true,
"message": "Group updated successfully"
}
DELETE /api/groups/{groupId}
Description: Delete a group.
Response:
{
"success": true,
"message": "Group deleted successfully"
}
POST /api/groups/{groupId}/members
Description: Add a member to a group.
Request:
{
"email": "[email protected]"
}
Response:
json
Copy code
{
"success": true,
"message": "Member added successfully"
}
6.3 Expense Management
POST /api/expenses
Description: Add a new expense.
Request:
json
Copy code
{
"groupId": "group-id",
"description": "Dinner at restaurant",
"amount": 100.0,
"date": "2023-01-01",
"participants": [
{ "userId": "user-id-1", "share": 50.0 },
{ "userId": "user-id-2", "share": 50.0 }
]
}
Response:
json
Copy code
{
"success": true,
"expenseId": "expense-id"
}
GET /api/expenses/{expenseId}
Description: Get details of a specific expense.
Response:
json
Copy code
{
"expenseId": "expense-id",
"groupId": "group-id",
"description": "Dinner at restaurant",
"amount": 100.0,
"date": "2023-01-01",
"participants": [
{ "userId": "user-id-1", "share": 50.0 },
{ "userId": "user-id-2", "share": 50.0 }
]
}
PUT /api/expenses/{expenseId}
Description: Update an expense.
Request:
json
Copy code
{
"description": "Updated description",
"amount": 120.0,
"date": "2023-01-02",
"participants": [
{ "userId": "user-id-1", "share": 60.0 },
{ "userId": "user-id-2", "share": 60.0 }
]
}
Response:
json
Copy code
{
"success": true,
"message": "Expense updated successfully"
}
DELETE /api/expenses/{expenseId}
Description: Delete an expense.
Response:
json
Copy code
{
"success": true,
"message": "Expense deleted successfully"
}
6.4 Clearing Expenses and Transactions
POST /api/transactions
Description: Record a payment transaction to settle an expense.
Request:
json
Copy code
{
"fromUserId": "user-id-1",
"toUserId": "user-id-2",
"amount": 50.0,
"method": "PayPal"
}
Response:
json
Copy code
{
"success": true,
"transactionId": "transaction-id"
}
GET /api/transactions/{transactionId}
Description: Get details of a specific transaction.
Response:
json
Copy code
{
"transactionId": "transaction-id",
"fromUserId": "user-id-1",
"toUserId": "user-id-2",
"amount": 50.0,
"method": "PayPal",
"date": "2023-01-01"
}
6.5 Notifications
POST /api/notifications
Description: Send a notification.
Request:
json
Copy code
{
"userId": "user-id",
"message": "You have a new expense",
"type": "email"
}
Response:
json
Copy code
{
"success": true,
"notificationId": "notification-id"
}
6.6 Reports
GET /api/reports
Description: Generate an expense report.
Request:
json
Copy code
{
"userId": "user-id",
"groupId": "group-id",
"startDate": "2023-01-01",
"endDate": "2023-01-31"
}
Response:
json
Copy code
{
"reportUrl": "https://example.com/reports/report-id"
}