╔═╗ ╦ ╦ ╦ ╦ ╦ ╔═╗ ╦═╗
║ ║ ║ ║ ║ ╚╗╔╝ ╠═ ╠╦╝
╚═╣ ╚═╝ ╩ ╚╝ ╚═╝ ╩╚═
An advanced SSH-accessible Terminal User Interface (TUI) application for personal and family management.
Quiver is a centralized, self-hosted TUI dashboard built with Wish, Bubble Tea, and Lipgloss. Originally created to fulfill a personal need for a robust local server application, it is specifically designed to be deployed via Docker Compose and accessed remotely using NeXterm (or any standard SSH client) for a secure, distraction-free management experience on any home server.
Quiver packs a wide array of tools to manage your daily life, finances, and tasks straight from the terminal.
- Salary Tracking: Keep track of Gross, Net, Deductions, and Tax percentages. Features year-over-year bar chart comparisons.
- Expense Management: Categorize and track Recurring and Daily expenses, complete with monthly bar chart analytics and impact calculation against your net salary.
- Transfers & Installments: Manage internal money transfers (Giroconti) and track multi-month installments with ease.
- Dynamic Dashboard: A fully responsive landing page summarizing your financial totals, upcoming deadlines, recent journal entries, and tasks.
- GTD Task Board: A Kanban-style "Getting Things Done" workflow (
TODO,DOING,DONE) featuring priority markers, projects, and deadlines. - Habit Tracker: Build good habits with a "Don't Break The Chain" visual ASCII heatmap.
- Daily Journal: A secure, date-based plain-text journal with automated Markdown export capabilities.
- Family Workspaces: Create shared workspaces to collaborate with family members. Switch between personal and family contexts instantly (
Ctrl+E). Shared entries automatically track the creator's username. - Real-Time Chat: An integrated real-time chat interface for all users within the same Quiver instance.
- Admin Control Panel: Manage users (create, edit, securely delete) via an exclusive administrative interface.
- Vehicle Management: Track services, road tax, and insurance deadlines, automatically synced to the Home Dashboard.
- Live Weather: Integrated weather widget utilizing
wttr.in.
- UI & Theming: Dynamically switchable color palettes (e.g., Catppuccin, Nord, Gruvbox). The UI features smart focus dimming and responsive layouts optimized for varying terminal sizes.
- i18n Support: Full support for both English and Italian languages.
The application is completely stateless and portable. All data is serialized as JSON files and stored safely on a mounted volume.
┌───────────────────────────────────────────┐
│ Alpine Linux Container │
│ │
│ ┌────────────────────────────────────┐ │
│ │ Quiver (Go binary) │ │
│ │ Wish SSH Server (:2222) │ │
│ │ └─ Bubble Tea TUI middleware │ │
│ └────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────┐ │
│ │ /data (volume) │◄── Persistent│
│ │ • host keys │ storage │
│ │ • app data │ │
│ └──────────────────┘ │
└───────────────────────────────────────────┘
Quiver is cross-platform and host-agnostic, perfect for a NAS, Raspberry Pi, or any standard Linux server.
Quiver is optimized for Portainer Stack deployments.
services:
quiver:
image: quiver:latest
build: .
container_name: quiver_app
ports:
- "2222:2222"
volumes:
- quiver_data:/data
restart: unless-stopped
volumes:
quiver_data:- In Portainer, navigate to Stacks -> Add stack.
- Paste the
docker-compose.ymlabove. - Click Deploy the stack.
- Connect via terminal:
ssh localhost -p 2222(Replacelocalhostwith your server's IP). Note: No password is required for the SSH connection. Authentication is handled internally by Quiver.
# Build the image
docker build -t quiver .
# Run the container
docker run -d \
--name quiver \
-p 2222:2222 \
-v quiver_data:/data \
--restart unless-stopped \
quiver# Install Go dependencies
go mod tidy
# Run the SSH server locally
QUIVER_DATA_DIR=./data go run .
# Connect via SSH in another terminal
ssh localhost -p 2222Minimal setup is required. Use environment variables to override defaults:
| Variable | Default | Description |
|---|---|---|
QUIVER_HOST |
0.0.0.0 |
IP address the SSH server listens on. |
QUIVER_PORT |
2222 |
Port the SSH server listens on. |
QUIVER_DATA_DIR |
/data |
Path to the persistent storage directory. |
The /data volume contains your SSH host keys (to prevent warnings on container recreation) and your data organized as follows:
users.json/families.json: Registries for users and family workspaces.users/{username}/: Personal JSON data stores (finances, tasks, journal, etc.).families/{familyID}/: Shared JSON data stores for collaboration.themes/: Drop custom.jsonthemes here to load them dynamically.
Backup & Restore Examples:
# Backup
docker run --rm -v quiver_data:/data -v $(pwd):/backup alpine tar czf /backup/quiver-backup.tar.gz -C /data .
# Restore
docker run --rm -v quiver_data:/data -v $(pwd):/backup alpine tar xzf /backup/quiver-backup.tar.gz -C /dataFor the ultimate remote experience, we highly recommend NeXterm. It provides a robust, web-based terminal that handles SSH connections beautifully, preventing shortcut conflicts and ensuring your TUI looks sharp from any browser.
During development, to avoid strict host key checking errors when tearing down containers, append this to your ~/.ssh/config:
Host localhost
Port 2222
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
LogLevel ERROR
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
See LICENSE for the full text.
Developed for personal use, shared with the community.