Thrifty
A simple monthly income and expenses tracker
Install / Use
/learn @tiehfood/ThriftyREADME
Thrifty
Please be gracious with me, this is my first ever app 🙈. Thrifty is a simple web application that helps you manage your income and expenses. It's focused on simplicity and is not aimed to track every single penny you spend. The idea is to get a rough overview of your monthly cash flow and what's left to spend.
Features:
- Add income and expenses
- Edit existing entries
- Delete entries
- Support for SVG icons (default: <img width=19 align=center alt="dollar" src="doc/default-icon.svg"/>)
- Two rows for income and expenses (collapse into single one on smaller devices)
- API documentation at
/swagger/index.html - Currency configurable via environment variable
- Different number formats
- Support for multiple users
- Upload all icons once in the settings and reuse them later
- Auto-calculate monthly value from other payment periods (e.g. weekly, semi-annually)
- Use groups like streaming to group multiple entries for a cleaner dashboard
Frameworks used:
- UI: SvelteKit and Flowbite
- API: golang
Screenshots
|
|
|
|:--------------------------------------:|:--------------------------------------:|
|
|
|
|
|
|
|
|
|
|
|
|
Settings
- Multi user support: Allow multiple users (no login, just simple users).
- Number format: Choos different number formats on your preference.
- Icons: Upload and delete icons for entries
Running the app
Every release since 1.2.0 should create a docker image on DockerHub. Use docker-compose.yaml to run the app with the latest version.
# run the app
docker compose -f docker-compose.yaml up -d
The app should now be available at http://localhost:9090.
If you want to build the image yourself, you can use the following commands.
# run the app
docker compose -f docker-compose-build.yaml build
# run the app
docker compose -f docker-compose-build.yaml up -d
Tips
I have a bi-monthly or semi-annually payment, what should I do?
Check the
not monthlysetting on the new entry dialog. Then you can select your payment period and Thrifty will automatically calculate the corresponding monthly value for you.
Want to use $ as the currency symbol?
Set
CURRENCY_ISO=USDfor the UI in the docker compose file and restart the UI container.
How about other currencies?
The step above should apply for any other currency ISO-code in this list: ISO 4217
Where is the data stored?
The data is stored in a SQLite database in a docker volume. You can also use a custom path in the docker-compose.yaml to expose the database.
I need a docker image for a different architecture.
Currently amd64 and arm64 builds are created. For other architectures you can build the image yourself like described above.
Want to use the app without a reverse proxy?
The default internal port for both containers is port 8080. If you want to use docker compose and just want to change the external port of the API container, you could add the environment variable
LOCAL_API_PORT=8080to the UI container. Change it to the desired external port of your docker compose file.
If you want to use the containers for example in host network mode, you could also change the port the API is listening on. Set the variable
PORT=8081on the API container to change the internal port to 8081. Depending on your setup you might need to setLOCAL_API_PORTto the same value.
You can also set
LOACL_API_HOSTNAMEandLOCAL_API_PROTOCOLif needed.
Want to have a single column all the time?
Set the variable
USE_SINGLE_COLUMN=truein the UI container to always use a single column layout.
Developing
Frontend
Install node and node modules.
Running locally requires you to change the apiBase in sharedState.svelte.ts to where your API development is running on.
cd ui
# install dependencies
pnpm i
# run ui
pnpm dev
You could also use regular npm instead of pnpm.
Backend
Install golang and run the following commands.
cd api
# install dependencies
go get .
# install swag (optional)
go install github.com/swaggo/swag/cmd/swag@latest
# generate swagger documentation (optional)
swag init
# run api
go run .
Credits
Related Skills
xurl
340.5kA CLI tool for making authenticated requests to the X (Twitter) API. Use this skill when you need to post tweets, reply, quote, search, read posts, manage followers, send DMs, upload media, or interact with any X API v2 endpoint.
kubeshark
11.8kCluster-wide network observability for Kubernetes. Captures L4 packets, L7 API calls, and decrypted TLS traffic using eBPF, with full Kubernetes context. Available to AI agents via MCP and human operators via dashboard.
wanwu
4.3kChina Unicom's Yuanjing Wanwu Agent Platform is an enterprise-grade, multi-tenant AI agent development platform. It helps users build applications such as intelligent agents, workflows, and rag, and also supports model management. The platform features a developer-friendly license, and we welcome all developers to build upon the platform.
gin-vue-admin
24.5k🚀Vite+Vue3+Gin拥有AI辅助的基础开发平台,企业级业务AI+开发解决方案,内置mcp辅助服务,内置skills管理,支持TS和JS混用。它集成了JWT鉴权、权限管理、动态路由、显隐可控组件、分页封装、多点登录拦截、资源权限、上传下载、代码生成器、表单生成器和可配置的导入导出等开发必备功能。
