Skip to content

aslon1213/gift

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

62 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

🎁 Gift

Your money. Your server. Your crew.

A self-hosted, multi-user spendings & incomes tracker built for groups who actually split things β€” roommates, couples, travel crews, small teams.

Go Vue 3 TypeScript MongoDB Fiber GoReleaser Release

πŸš€ Quick Start Β· ✨ Features Β· πŸ“¦ Install Β· πŸ› οΈ Stack Β· πŸ“š API Docs Β· 🀝 Contributing


πŸ”₯ Why Gift?

Ever tried to split a trip with 4 friends using a spreadsheet? Painful. Tried a SaaS tracker that suddenly wants $9/mo and owns your data? Worse.

Gift is the middle path: spin it up on your own box, invite your people, and start tracking. No subscriptions, no data sharing, no surprises. Cross-platform binaries for Linux, macOS and Windows β€” amd64 and arm64 β€” built on every tag.

πŸ’‘ Self-host in 5 minutes. Invite your crew in 5 seconds. Track forever.


✨ Features

πŸ‘₯ Groups β€” the core primitive

Create a group for anything you split: "Bali 2026", "Apartment 3B", "Sunday poker". Invite users, track shared expenses against it, see who's contributing what.

  • Create / rename / delete groups
  • Owner-managed membership β€” invite by user search, remove members anytime
  • A spending can be personal or group-scoped β€” one unified API, one unified feed
  • Query "groups I own" vs "groups I'm a member of" independently

πŸ’Έ Spendings

Log expenses with the fields that actually matter.

Field Notes
amount Decimal, any precision
currency Multi-currency ready
category Free-form, powers the donut chart
description Because "Starbucks $14" deserves context
date Time-range queries supported
group_id Optional β€” omit for personal spending

Filter by user, group, category, date range with pagination (limit / offset) baked into the API.

πŸ’° Incomes

Salary, freelance, dividends, a tip jar β€” log it, see it, net it against spendings.

🎯 Budgets, Goals, Alerts

  • Budgets β€” cap spending per category / group / period
  • Goals β€” "Save $3k for Bali by August" β€” progress-tracked
  • Alerts β€” opinionated nudges when things go sideways

🌐 Bring-your-own-server UX

  • First thing the web app asks: "Where's your server?" Point it at localhost, a Tailscale IP, a domain β€” whatever. No hardcoded backend. One frontend build can talk to any Gift instance.

πŸ–ΌοΈ Screenshots

Dashboard Groups Goals Server Setup
Dashboard Groups Goals Server Setup

πŸš€ Quick Start

Prerequisites

  • mise (handles Go, Node, air, swag, etc. automatically)
  • MongoDB running somewhere reachable β€” local, Atlas, or a container:
    docker run -d --name gift-mongo -p 27017:27017 mongo:latest

1. Clone & install tools

git clone https://github.com/aslon1213/gift.git
cd gift
mise install   # pulls Go 1.26, Node 25, air, swag, goreleaser, golangci-lint…

2. Configure the server

Create server/.env:

DB_URL=mongodb://localhost:27017
DB_AUTH=false
AUTH_JWT_SECRET=change-me-to-a-long-random-string
AUTH_JWT_REFRESH_SECRET=change-me-too
AUTH_JWT_EXPIRES_IN=15m
AUTH_JWT_REFRESH_EXPIRES_IN=720h

3. Run it πŸƒ

Open two terminals:

# Terminal 1 β€” API on :3000 (hot-reloading)
mise run api:dev
# Terminal 2 β€” Vue dev server on :5173 (proxies /api β†’ :3000)
mise run web:dev

Open http://localhost:5173, point the server setup at http://localhost:3000, register your first user β€” you're now the admin of your own finance tracker. πŸŽ‰


πŸ“¦ Install

Grab a release binary

# Pick your platform from the releases page
curl -L -o gift-api.tar.gz \
  https://github.com/aslon1213/gift/releases/latest/download/gift-api_<VERSION>_Linux_x86_64.tar.gz
tar -xzf gift-api.tar.gz
./gift-api

Releases include:

  • gift-api_* β€” server binary for Linux / macOS / Windows, amd64 + arm64
  • gift-web_* β€” static frontend bundle (serve with Nginx, Caddy, S3, anywhere)
  • docs/swagger.json + docs/swagger.yaml β€” OpenAPI spec
  • gift_*_checksums.txt β€” SHA256 sums

Or Docker

docker build -f deployment/Dockerfile.server -t gift-api .
docker build -f deployment/Dockerfile.web    -t gift-web .

Or build from source

mise run api:build     # β†’ server/bin/api_gateway
cd client/gift-web && npm ci && npm run build   # β†’ client/gift-web/dist

🀝 Contributing

PRs welcome

  1. Fork + branch
  2. mise install && mise run api:dev β€” make sure it runs locally
  3. Install pre-commit hooks: pre-commit install
  4. Open a PR with a clear description

Found a bug? Open an issue.


Built with β˜•, Go, and a healthy suspicion of subscription finance apps.

⭐ Star the repo if Gift saved you from a spreadsheet.

About

Self-hosted shared expense & income tracker. Spin up a server, invite people, track group finances.

Resources

Stars

1 star

Watchers

0 watching

Forks

Contributors