Budget overview
The finance page displays five key metrics at the top:| Metric | Description | Source |
|---|---|---|
| Total Budget | Full trip budget in base currency | finance.budgetTotal |
| Spent | Sum of all expenses converted to base currency | Sum of expense.amount * exchangeRate |
| Remaining | Budget minus spent (can be negative) | budgetTotal - spent |
| Daily Pace | Actual daily spending vs planned | spent / daysElapsed vs budgetTotal / totalDays |
| Per Person | Estimated cost per traveler | budgetTotal / travelerCount |
frontend/components/trips/pages/finance-page-content.tsx:504-544.
Setting up your budget
Enter budget total
Input your total trip budget. This is the baseline for all guardrail calculations.
Select currency
Choose your base currency (e.g., CAD, USD, EUR). All totals and guardrails use this currency.
The currency field accepts any 3-letter ISO code. Make sure it matches your primary spending currency.
Set buffer percentage
Enter a buffer (e.g., 10%) to allow for unexpected costs. This is currently informational and not used in calculations.
Multi-currency conversion
TripLoom supports expenses in multiple currencies. You must set exchange rates manually for accurate totals. How it works:- System detects all currencies used in your expenses
- Displays conversion rate inputs for each foreign currency
- Converts each expense to base currency:
expense.amount * exchangeRate - Sums all converted expenses for budget totals
frontend/components/trips/pages/finance-page-content.tsx:267-274:
Missing rates default to 1:1. A warning banner appears if any currencies lack conversion rates.
Tracking expenses
Expenses are organized by date with support for multiple payers, categories, and split modes.Adding an expense (quick mode)
Enter basic details
In the Expense Ledger section:
- Date: Select the expense date
- Title: Short description (e.g., “Lunch at Markthalle”)
- Amount: Numeric value
- Category: Select from Flights, Hotels, Transit, Food, Activities
Adding an expense (advanced mode)
Click Advanced fields to access:- Payer: Name of person who paid
- Currency: Expense currency (if different from base)
- Split mode: Equal or Custom
- Notes: Optional context (e.g., “Includes tip”)
- Custom splits: Allocate exact amounts per traveler (only if split mode = Custom)
frontend/components/trips/pages/finance-page-content.tsx:949-1028.
Expense validation
Before saving, the system validates:- Date is not empty
- Title is not empty
- Payer name is not empty
- Currency is not empty
- Amount is greater than 0
- Custom split sum equals total amount (within 1 cent)
frontend/components/trips/pages/finance-page-content.tsx:308-325.
Major expense categories
The finance page breaks down spending by category with visual budget share indicators. Supported categories:| Category | Description | Use Case |
|---|---|---|
| Flights | Airfare and flight-related fees | All flight bookings |
| Hotels | Accommodation costs | Nightly hotel rates (use Hotel Split tool for multi-day stays) |
| Transit | Local transportation | Trains, buses, taxis, metro passes |
| Food | Meals and dining | Estimated or actual meal costs |
| Activities | Tours, tickets, experiences | Museum entry, guided tours, events |
frontend/components/trips/pages/finance-page-content.tsx:49-55.
Budget share visualization
Each category shows:- Progress bar: Visual representation of category spend vs total budget
- Spent amount: Total in base currency
- Percentage: Share of total budget
frontend/components/trips/pages/finance-page-content.tsx:276-284:
Automation guardrails
TripLoom’s guardrail system monitors spending pace and provides proactive alerts.Guardrail status
Three status levels:| Status | Meaning | Tone |
|---|---|---|
| On Track | Spending pace is within budget | Green |
| Watch | Approaching budget limits | Amber |
| Over | Exceeded budget or pace threshold | Red |
frontend/components/trips/pages/finance-page-content.tsx:58-67.
Enabling guardrails
Set thresholds
- Warn %: Percentage of daily budget pace that triggers “Watch” status (default: 100%)
- Critical %: Percentage that triggers “Over” status (default: 120%)
How guardrails calculate status
Fromlib/trips.ts (implementation inferred from usage):
- Planned daily pace:
budgetTotal / totalDays - Actual daily pace:
totalSpent / daysElapsed - Pace ratio:
actualDaily / plannedDaily - Status:
on_track: Pace ratio <warnAtPercent / 100watch: Pace ratio >=warnAtPercent / 100and <criticalAtPercent / 100over: Pace ratio >=criticalAtPercent / 100
Projected exceed day
If current pace continues, guardrails estimate the day you’ll exceed your budget. Fromfrontend/components/trips/pages/finance-page-content.tsx:741-744:
Guardrail insights
The finance page displays actionable insights based on status:- On Track: “Pace is healthy. Consider setting aside buffer for unexpected costs.”
- Watch: “Daily spending is 15% above plan. Review food and activities categories.”
- Over: “Budget exceeded by 50/day.”
frontend/components/trips/pages/finance-page-content.tsx:874-884.
Hotel cost allocator
The Hotel Split tool simplifies multi-day hotel expense entry.Use case
You book a hotel for 5 nights at $600 total. Instead of manually creating 5 expenses, the allocator:- Divides 120/night)
- Creates one expense per day with proper date offsets
- Labels each as “Hotel stay 1/5”, “Hotel stay 2/5”, etc.
How to use
Enter stay details
- Full stay price: Total cost (e.g., $600)
- Price entered for: Select pricing mode:
- One person: Price is per person, will multiply by traveler count
- X people: Price is for X people, enter people count
- Entire booking total: Price is final total for all travelers
Configure split range
- Nights: Number of nights stayed
- Days: Number of days (usually nights + 1)
- Split across: Choose “Nights” or “Days” to determine expense count
- Start date: First day of hotel stay
Allocation logic
Fromfrontend/components/trips/pages/finance-page-content.tsx:432-491:
- Total split exactly equals booking total (no rounding loss)
- Remainder cents are distributed to first N expenses
Expense ledger
All expenses are displayed in a chronological table grouped by date.Table columns
- Date: Expense date (short format)
- Title: Expense description
- Category: Flights, Hotels, Transit, Food, Activities
- Payer: Name of person who paid
- Split: Equal or Custom (with split count)
- Status: Normal or High-impact (if expense exceeds daily budget)
- Amount: Cost in original currency
- Actions: Edit and Delete buttons
frontend/components/trips/pages/finance-page-content.tsx:1039-1119.
Day subtotals
Each date group shows a subtotal in base currency:High-impact expenses
Expenses that exceed the planned daily budget (excluding flights) are flagged with a “High-impact” badge. Fromfrontend/components/trips/pages/finance-page-content.tsx:1063-1067:
Editing and deleting expenses
Edit workflow
Modify fields
The expense form populates with current values. Modify any field (date, title, amount, category, payer, currency, split mode, notes).
Delete workflow
From
frontend/components/trips/pages/finance-page-content.tsx:380-404.
AI finance guidance
The AI copilot on the finance page provides budget-aware recommendations.Finance-specific AI behavior
Frombackend/internal/ai/prompt.go:101-103:
Finance: Focus on budget adherence, major cost drivers, and practical cutback levers. Quantify impact when possible; avoid vague financial advice.Example prompts:
- “Am I over budget?”
- “Which category is driving my spending?”
- “How can I cut $100/day?”
AI context for finance
The AI receives:- Trip budget total and currency
- All expenses with amounts and categories
- Current spending pace (actual vs planned)
- Guardrail status and projected exceed day
backend/internal/ai/service.go:358-361:
Best practices
- Set budget early: Establish your budget and currency before adding expenses
- Configure exchange rates immediately: Avoid 1:1 defaults by setting rates as soon as you use a foreign currency
- Use hotel allocator for multi-day stays: Saves time and ensures accurate daily splits
- Enable guardrails from day 1: Proactive monitoring prevents budget overruns
- Review high-impact expenses weekly: Identify and adjust overspending categories
- Leverage AI for cutback suggestions: Ask the AI which categories have the most reduction potential
- Keep payer names consistent: Use the same name format (e.g., “Sarah” not “Sarah K.” then “Sarah”) for easier settlement tracking
Technical details
Expense data structure
Fromlib/trips.ts (types inferred from usage):
Finance summary calculation
ThegetFinanceSummary function computes:
budgetTotal: From trip finance settingsspent: Sum of all expenses converted to base currencyremaining:budgetTotal - spentplannedDaily:budgetTotal / totalDaysactualDaily:spent / daysElapsedperPersonEstimate:budgetTotal / travelerCountmissingRateCurrencies: List of currencies without conversion rates
Guardrail automation triggers
When finance automation is enabled, the system runs guardrail checks:- On every expense save: Recalculates status and projected exceed day
- On manual check: User clicks “Run Check Now”
- Status change detection: Compares previous status to new status, triggers toast if changed
frontend/components/trips/pages/finance-page-content.tsx:227-241: