Skip to content

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

Releases

Contributors

Languages