Offline-first financial management desktop app for Ugandan schools
Overview • Features • Tech Stack • Getting Started • Project Structure • Contributing • License
SmartBursar is a proprietary offline-first desktop application designed to streamline financial management for Ugandan educational institutions. Built for bursars, headteachers, and school proprietors, it replaces manual cashbooks and spreadsheets with a secure, auditable, and printable financial system.
- Student registry with class and term enrollment
- Staff registry and monthly payroll disbursement workflow
- User-defined fee structures per class per term
- Payment collection with official receipt generation (
YYYY/T#/NNNN) - Partial payments, payment plans, and fee adjustments (bursary/discounts)
- Automatic cashbook population from every transaction
- Expenditure management with approval workflow
- Bank deposit recording
- Financial reports: daily collections, fee balances, student statements, term summaries, payroll
- Term lifecycle management: open, close, freeze, carry-forward balances
- Role-based access control (Super Admin, Headteacher, Bursar, Data Entry)
- Full audit trail: every action logged with user, timestamp, old and new values
- A4 PDF printing: receipts, vouchers, reports
- Excel import for student data
- Encrypted local backup and restore
- 100% offline — no internet required
The application is optimized for low-spec school computers to ensure smooth performance in all environments.
- Processor: Dual-core 2.0GHz or similar (Legacy Core 2 Duo era and above)
- Memory: 2GB RAM (4GB recommended)
- Storage: 500MB available space (HDD or SSD)
- Display: 1280x720 minimum resolution
| Platform | Minimum Version | Notes |
|---|---|---|
| Windows | Windows 10 | WebView2 Runtime required (standard in Win 10+) |
| Linux | Modern Distro | WebKit2GTK required |
| macOS | High Sierra (10.13) | Support for older WebKit versions included |
| Layer | Technology |
|---|---|
| Desktop Shell | Tauri (Rust) |
| Backend | Python 3.11+ |
| Database | SQLite via SQLAlchemy |
| Migrations | Alembic |
| PDF Generation | ReportLab |
| Excel Import | openpyxl |
| IPC Transport | JSON-RPC over stdin/stdout pipes |
| Layer | Technology | Purpose |
|---|---|---|
| Desktop Shell | Tauri | Native window, system tray, print dialog, file system access |
| UI Framework | React 18 | Component tree, state management |
| Build Tool | Vite | Fast dev server and production bundler |
| Styling | TailwindCSS | Utility-first styling |
| Routing | React Router v6 | Client-side navigation |
| State | Zustand | Lightweight global state (auth, active term, institution) |
| API Client | Axios | HTTP calls to FastAPI backend |
| Forms | React Hook Form | Form state and validation |
| Tables | TanStack Table | Sortable, filterable data tables |
| Date Handling | date-fns | Date formatting and arithmetic |
| PDF Trigger | Tauri shell API | Opens system print dialog on backend-generated PDFs |
| Icons | Lucide React | Consistent icon set |
| Notifications | React Hot Toast | Non-blocking feedback toasts |
Shell architecture: React runs inside the Tauri window. The Python FastAPI backend runs as a sidecar process connecting over a local loopback. Tauri handles OS-level operations; React handles all UI; Python handles all data and business logic.
First time? Start here: Developer Setup
cd frontend
bun install
bun tauri devThen navigate to http://localhost:19173/status to test the IPC connection.
See DEVELOPMENT_PLAN.md for the full roadmap and task list.
smartbursar/
├── src-tauri/ # Tauri desktop shell (Rust)
├── frontend/ # React + TailwindCSS UI
│ └── src/
│ ├── main.jsx # React entry point
│ ├── App.jsx # Root component, router setup
│ ├── assets/ # Logos, images, fonts (bundled — no CDN)
│ ├── styles/ # Tailwind directives + CSS custom properties
│ ├── store/ # Zustand stores (auth, institution, term)
│ ├── hooks/ # useApi, useAuth, useTerm, usePrint
│ ├── api/ # One file per backend module (Axios calls)
│ ├── components/
│ │ ├── layout/ # AppShell, Sidebar, Topbar, PageHeader
│ │ ├── ui/ # Button, Input, Table, Modal, Badge, etc.
│ │ └── shared/ # StudentPicker, RoleGuard, PrintButton, etc.
│ └── pages/ # One folder per module (auth, dashboard, students…)
├── backend/ # Python FastAPI backend + SQLite
│ ├── app/
│ │ ├── api/ # Route handlers
│ │ ├── models/ # SQLAlchemy models
│ │ ├── schemas/ # Pydantic schemas
│ │ ├── services/ # Business logic
│ │ ├── reports/ # PDF generation
│ │ └── utils/ # Helpers
│ ├── migrations/ # Alembic migrations
│ └── tests/ # Backend tests
├── docs/ # Product, developer, backend, frontend, and reference documentation
└── scripts/ # Build and utility scripts
Fonts (bundled, no CDN): Geist (body text) · Syne (headings & display) · JetBrains Mono (receipt numbers, amounts, IDs)
Theme: Light and dark mode from day one via CSS custom properties ([data-theme]). OS preference respected on first launch; persisted via Tauri.
Light palette: --color-primary: #1B4F72 · --color-accent: #1A7A4A · --color-surface: #FFFFFF · --color-background: #F4F6F9
Dark palette: --color-primary: #2E86C1 · --color-accent: #27AE60 · --color-surface: #1A2235 · --color-background: #0F1623
| Module | Status |
|---|---|
| Institution Setup | Planned |
| Academic Structure | Planned |
| Student Registry | Planned |
| Staff & Payroll | Planned |
| Fee Management | Planned |
| Payment Collection | Planned |
| Daily Collection Report | Planned |
| Cashbook | Planned |
| Banking | Planned |
| Expenditure Management | Planned |
| Financial Reports | Planned |
| Term Management | Planned |
| RBAC and User Management | Planned |
| Audit Trail | Planned |
| Backup and Restore | Planned |
Proprietary software. All rights reserved.
Copyright (c) 2025 A-Von Computer Solutions.
Unauthorized copying, distribution, or modification is strictly prohibited.