Reports & Settings

Last updated on 2026-04-05

The reports page provides structured financial analysis through multiple report types. The settings page lets users configure preferences, switch between color themes, and manage data exports.

Financial Reports

Route: /reports

The reports page uses a tabbed layout with three report views.

Tab Structure

Tab Content
Overview Monthly summary cards with income, expenses, net income, savings, and savings rate
Profit & Loss Full P&L statement table with period selector
Balance Sheet Assets vs liabilities breakdown with net worth
<Tabs defaultValue="overview">
  <TabsTrigger value="overview">Overview</TabsTrigger>
  <TabsTrigger value="pl">Profit & Loss</TabsTrigger>
  <TabsTrigger value="balance-sheet">Balance Sheet</TabsTrigger>
</Tabs>

Overview Tab

A grid of MonthlySummaryCard components showing key metrics for each recent month:

Each card displays:

  • Month label (e.g., "Jan 2026")
  • Income -- total income for the month
  • Expenses -- total expenses for the month
  • Net income -- income minus expenses with color coding
  • Savings -- amount saved
  • Savings rate -- percentage of income saved with visual indicator
import { MonthlySummaryCard } from "@/components/reports/monthly-summary-card"

{monthlyReports.map((report) => (
  <MonthlySummaryCard key={report.month} report={report} />
))}

Profit & Loss Tab

A detailed P&L statement rendered as a table with multiple time columns.

  • Report header with title, description, and period selector (YTD, last quarter, custom)
  • P&L table with hierarchical rows:
    • Revenue section with income line items
    • Expense section with category breakdowns
    • Subtotals for gross income and total expenses
    • Net income/loss total row
  • Column headers showing recent months (e.g., Nov 2025 through Apr 2026)
  • Row styling -- headers are bold, totals have top borders, indented rows for subcategories
import { ReportHeader } from "@/components/reports/report-header"
import { PLTable } from "@/components/reports/pl-table"

<ReportHeader
  title="Profit & Loss Statement"
  description="Revenue and expense breakdown over time."
  period={plPeriod}
  onPeriodChange={setPlPeriod}
/>
<PLTable data={plData} months={plMonths} />

Balance Sheet Tab

A snapshot of assets and liabilities at a point in time.

  • Report header with period selector (this month, last month, custom)
  • Balance sheet table with two sections:
    • Assets -- checking, savings, investments, cash, property, etc.
    • Liabilities -- credit cards, loans, mortgages, etc.
    • Net worth -- total assets minus total liabilities
import { BalanceSheetTable } from "@/components/reports/balance-sheet-table"

<BalanceSheetTable items={balanceSheetItems} />

Report TypeScript Interfaces

interface PLRow {
  label: string
  values: number[]
  isHeader: boolean
  isTotal: boolean
  indent: number
}

interface BalanceSheetItem {
  label: string
  amount: number
  type: "asset" | "liability"
  category: string
}

interface MonthlyReport {
  month: string
  income: number
  expenses: number
  netIncome: number
  savings: number
  savingsRate: number
}

Settings

Route: /settings

The settings page uses a tabbed layout with three sections for managing application preferences.

Tab Structure

Tab Content
General Currency, date format, fiscal year, density preferences
Appearance Color theme selection with live preview
Data & Export Export functionality for financial data
<Tabs defaultValue="general">
  <TabsTrigger value="general">General</TabsTrigger>
  <TabsTrigger value="appearance">Appearance</TabsTrigger>
  <TabsTrigger value="data">Data & Export</TabsTrigger>
</Tabs>

General Settings

The SettingsForm component provides configuration for:

  • Currency -- select currency format (USD, EUR, GBP, etc.)
  • Date format -- choose date display format
  • Fiscal year start -- configure when the fiscal year begins (affects reports)
  • Finance mode -- toggle between Personal and Business modes
  • Display density -- comfortable or compact layout
import { SettingsForm } from "@/components/settings/settings-form"

<SettingsForm />

Appearance Settings

The ThemeSwitcher component lets users choose from 6 built-in color themes:

Theme Hue Description
Mint Ledger 170 Default teal theme
Midnight 250 Deep blue/indigo
Sunset 25 Warm coral/orange
Emerald 150 Rich green
Lavender 290 Soft purple
Slate 0 Neutral monochrome

Each theme includes full light and dark mode token definitions. The selected theme is applied as a CSS class on the root element.

import { ThemeSwitcher } from "@/components/settings/theme-switcher"

<ThemeSwitcher />

Data & Export

The ExportSection component provides data management tools:

  • Export transactions -- download transaction history as CSV
  • Export reports -- download financial reports
  • Data management -- options for data handling
import { ExportSection } from "@/components/settings/export-section"

<ExportSection />

Settings TypeScript Interface

interface AppSettings {
  currency: string
  dateFormat: string
  fiscalYearStart: number
  theme: ColorTheme // "mint" | "midnight" | "sunset" | "emerald" | "slate"
  mode: FinanceMode // "personal" | "business"
  density: "comfortable" | "compact"
}

Data Sources

Data Source Location
Monthly reports monthlyReports data/seed.ts
P&L data plData data/seed.ts
Balance sheet balanceSheetItems data/seed.ts

Next Steps