A cross-platform desktop tray app that monitors local folder sizes and submits storage statistics to freispace on a daily schedule.
- Runs silently in the system tray
- Walks configured local folders recursively and sums file sizes
- POSTs storage statistics to
https://api.freispace.com/v1/storages/{id}/projects/{id}/statistics/{date} - Retries failed submissions automatically (up to 10 attempts, every 5 minutes)
- Shows run status via five tray icon states: Idle, Active, OK, Warning, Error
- Streams a live event log to the UI with info/warning/error filtering
- Create an API key in freispace. Required permission:
Storage Statistics : Update - Paste it in the the freispace Storage Collector
- Update the list of Project Storages, select and, and select the folders to monitor
| Layer | Technologies |
|---|---|
| Frontend | Svelte 5 (runes), TypeScript, Tailwind CSS 4, Vite 6 |
| Backend | Rust, Tauri 2, SQLite (sqlx), tokio, reqwest |
| Scheduler | tokio-cron-scheduler |
| Distribution | GitHub Actions → native installers (Windows, macOS, Linux) |
- Rust (MSRV 1.77.2)
- Node.js ≥ 20
- pnpm
- Platform build deps per Tauri prerequisites
pnpm install
pnpm dev # full Tauri dev mode (frontend + backend)
pnpm dev:frontend # frontend only (Vite on port 1420)pnpm build # produces native installer in src-tauri/target/release/bundle/pnpm check # svelte-check (frontend TypeScript)
cd src-tauri && cargo clippy # Rust lintsAll settings are persisted in SQLite in the OS app data directory (com.freispace.storage-collector).
| Setting | Description |
|---|---|
| API Key | freispace API key for authentication |
| Schedule time | Daily run time (local timezone, default 17:55) |
| Auto-run | Enable/disable the daily scheduler |
| Folder configs | Mappings of (storage_id, project_id) → local folder path |
- Enter your freispace API key in the Settings tab
- The app fetches your available storages and projects from the API
- Map each storage project to a local folder path
- Set a daily schedule time and enable auto-run
- Use "Trigger All" to run a manual collection at any time
The app window hides to the tray on close. Right-click the tray icon to show the window or quit.
Four SQLite tables in 0001_initial.sql:
settings— key/value store (api_key, schedule, auto-run flag)folder_configs— storage/project/folder mappings with optional per-folder schedule overridepending_submissions— failed API calls queued for retrylog_entries— append-only audit log, pruned to 10,000 rows
GitHub Actions workflows in .github/workflows/:
ci.yml— type-check, Rust tests, Clippy on every pushrelease.yml— builds native installers for Windows, macOS, and Linux viatauri-apps/tauri-action

