{"id":24612653,"url":"https://github.com/tiehfood/thrifty","last_synced_at":"2025-04-07T06:12:09.110Z","repository":{"id":273870774,"uuid":"920152150","full_name":"tiehfood/thrifty","owner":"tiehfood","description":"A simple monthly income and expenses tracker","archived":false,"fork":false,"pushed_at":"2025-03-24T08:58:43.000Z","size":1043,"stargazers_count":90,"open_issues_count":12,"forks_count":5,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-31T05:05:37.038Z","etag":null,"topics":["budgeting","docker-compose","expenses","finance","golang","income","money","open-source","personal-finance","svelte","sveltekit"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-2-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tiehfood.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-01-21T16:48:26.000Z","updated_at":"2025-03-26T15:36:57.000Z","dependencies_parsed_at":"2025-01-30T14:29:48.217Z","dependency_job_id":null,"html_url":"https://github.com/tiehfood/thrifty","commit_stats":null,"previous_names":["tiehfood/thrifty"],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tiehfood%2Fthrifty","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tiehfood%2Fthrifty/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tiehfood%2Fthrifty/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tiehfood%2Fthrifty/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tiehfood","download_url":"https://codeload.github.com/tiehfood/thrifty/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247601449,"owners_count":20964864,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["budgeting","docker-compose","expenses","finance","golang","income","money","open-source","personal-finance","svelte","sveltekit"],"created_at":"2025-01-24T20:23:41.407Z","updated_at":"2025-04-07T06:12:09.096Z","avatar_url":"https://github.com/tiehfood.png","language":"Go","funding_links":[],"categories":["Go"],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n    \u003cimg alt=\"Icon\" src=\"ui/src/icons/fox.svg\" width=\"25%\"\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/tiehfood/thrifty/releases/latest\"\u003e\n    \u003cimg alt=\"Release Version\" src=\"https://img.shields.io/github/release/tiehfood/thrifty.svg\"/\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://hub.docker.com/r/tiehfood/thrifty-ui\"\u003e\n    \u003cimg alt=\"Docker Pulls\" src=\"https://img.shields.io/docker/pulls/tiehfood/thrifty-ui\"/\u003e\n  \u003c/a\u003e\n  \u003ca href=\"LICENSE\"\u003e\n    \u003cimg alt=\"License\" src=\"https://img.shields.io/github/license/tiehfood/thrifty.svg\"/\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/tiehfood/thrifty\"\u003e\n    \u003cimg alt=\"Stars\" src=\"https://img.shields.io/github/stars/tiehfood/thrifty?style=flat\u0026label=github+stars\"/\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n# Thrifty\n\nPlease be gracious with me, this is my first ever app 🙈.  Thrifty is a simple web application that helps you manage your income and expenses.\nIt's focused on simplicity and is not aimed to track every single penny you spend.\nThe idea is to get a rough overview of your monthly cash flow and what's left to spend.\n\nFeatures:\n- Add income and expenses\n- Edit existing entries\n- Delete entries\n- Support for SVG icons (default: \u003cimg width=19 align=center alt=\"dollar\" src=\"doc/default-icon.svg\"/\u003e)\n- Two rows for income and expenses (collapse into single one on smaller devices)\n- API documentation at `/swagger/index.html`\n- Currency configurable via environment variable\n\nFrameworks used:\n\n- __UI__: SvelteKit and Flowbite\n- __API__: golang\n\n## Screenshots\n| ![Screenshot1](doc/screenshot_1.png) | ![Screenshot2](doc/screenshot_2.png) |\n|:------------------------------------:|:------------------------------------:|\n| ![Screenshot3](doc/screenshot_3.png) | ![Screenshot4](doc/screenshot_4.png) |\n\n## Running the app\n\nEvery release since 1.2.0 should create a docker image on DockerHub.\nUse [docker-compose.yaml](docker-compose.yaml) to run the app with the latest version.\n\n```bash\n# run the app\ndocker compose -f docker-compose.yaml up -d\n```\nThe app should now be available at `http://localhost:9090`.\n\nIf you want to build the image yourself, you can use the following commands.\n```bash\n# run the app\ndocker compose -f docker-compose-build.yaml build\n\n# run the app\ndocker compose -f docker-compose-build.yaml up -d\n```\n\n### Tips\n#### Want to use `$` as the currency symbol?\n\u003eSet `CURRENCY_ISO=USD` for the UI in the docker compose file and restart the UI container.\n#### How about other currencies?\n\u003e The step above should apply for any other currency ISO-code in this list: [ISO 4217](https://de.wikipedia.org/wiki/ISO_4217)\n#### Where is the data stored?\n\u003e The data is stored in a SQLite database in a docker volume. You can also use a custom path in the [docker-compose.yaml](docker-compose.yaml) to expose the database.\n#### I need a docker image for a different architecture.\n\u003e Currently amd64 and arm64 builds are created. For other architectures you can build the image yourself like described above.\n#### Want to use the app without a reverse proxy?\n\u003e The default internal port for both containers is port 8080.\n\u003e 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=8080` to the UI container.\n\u003e Change it to the desired external port of your docker compose file.\n\n\u003e If you want to use the containers for example in host network mode, you could also change the port the API is listening on.\n\u003e Set the variable `PORT=8081` on the API container to change the internal port to 8081.\n\u003e Depending on your setup you might need to set `LOCAL_API_PORT` to the same value.\n\n\u003e You can also set `LOACL_API_HOSTNAME` and `LOCAL_API_PROTOCOL` if needed.\n#### Want to have a single column all the time?\n\u003e Set the variable `USE_SINGLE_COLUMN=true` in the UI container to always use a single column layout.\n\n## Developing\n\n### Frontend\nInstall node and node modules.\nRunning locally requires you to change the API URL in [+page.svelte](ui/src/routes/+page.svelte).\nChange `currentProtocol`, `currentHostname` and `currentPort` in the _onMount_ method to where your API development is running on.\n```bash\ncd ui\n\n# install dependencies\npnpm i\n\n# run ui\npnpm dev\n```\nYou could also use regular npm instead of pnpm.\n### Backend\nInstall golang and run the following commands.\n```bash\ncd api\n\n# install dependencies\ngo get .\n\n# install swag (optional)\ngo install github.com/swaggo/swag/cmd/swag@latest\n\n# generate swagger documentation (optional)\nswag init\n\n# run api\ngo run .\n```\n\n## Credits\n- [NumberFlow](https://number-flow.barvian.me/svelte)\n- [Swag](https://github.com/swaggo/swag)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftiehfood%2Fthrifty","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftiehfood%2Fthrifty","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftiehfood%2Fthrifty/lists"}