{"id":21513847,"url":"https://github.com/nihalgonsalves/expenses","last_synced_at":"2025-07-26T09:12:31.924Z","repository":{"id":261490845,"uuid":"661063309","full_name":"nihalgonsalves/expenses","owner":"nihalgonsalves","description":"Shared expense tracking app with support for multiple personal and shared sheets","archived":false,"fork":false,"pushed_at":"2025-04-21T21:51:29.000Z","size":7055,"stargazers_count":4,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-24T01:45:54.521Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://expenses.nihalgonsalves.com","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nihalgonsalves.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":"2023-07-01T17:12:11.000Z","updated_at":"2025-04-14T07:30:10.000Z","dependencies_parsed_at":"2024-12-02T09:24:24.064Z","dependency_job_id":"1a7730fb-1ab6-4ba1-adc0-3f64c29e44e1","html_url":"https://github.com/nihalgonsalves/expenses","commit_stats":null,"previous_names":["nihalgonsalves/expenses"],"tags_count":0,"template":false,"template_full_name":"nihalgonsalves/node-typescript-eslint-template","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nihalgonsalves%2Fexpenses","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nihalgonsalves%2Fexpenses/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nihalgonsalves%2Fexpenses/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nihalgonsalves%2Fexpenses/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nihalgonsalves","download_url":"https://codeload.github.com/nihalgonsalves/expenses/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250546045,"owners_count":21448255,"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":[],"created_at":"2024-11-23T23:18:37.924Z","updated_at":"2025-04-24T01:45:59.120Z","avatar_url":"https://github.com/nihalgonsalves.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# expenses\n\nShared expense tracking app with support for multiple personal and shared\nsheets.\n\n| Main data table         | Add transaction dialog         |\n| ----------------------- | ------------------------------ |\n| ![Main data table][i01] | ![Add transaction dialog][i02] |\n\n[i01]: ./docs/01-home.webp\n[i02]: ./docs/02-add-transaction.webp\n\n## Summary\n\nThe primary motivation for building this app was to consolidate my expense\ntracking across different apps for personal and shared expenses. I was using a\nsimple iOS app to enter my personal expenses, while also manually copying over\nexpenses from shared expense tracking apps/web apps.\n\nThis app gives you a unified view of how much you _spent_, regardless of whether\nyou spent it directly or somebody paid on your behalf.\n\nIt's also designed to not be linked directly to bank or debit/credit card\ntransactions, as that required a lot of manual fixing up of categories or\ndescriptions, in my experience.\n\n[ecb_data]: https://www.ecb.europa.eu/stats/policy_and_exchange_rates/euro_reference_exchange_rates/html/index.en.html\n\n## Features\n\n- Installable mobile app with offline capability (PWA)\n- Themes and light/dark/system mode\n- Push Notifications for shared transactions\n- Multi currency support with automatic conversion ([ECB data][ecb_data])\n- Split transactions evenly, or by participants, shares, percentages, or exact\n  amounts\n- Schedule personal transactions on a monthly or weekly schedule\n- Settle up with automatically calculated amounts\n- Expense import (CSV) and export (CSV/JSON)\n\n## Built with\n\n- React, Vite, Tailwind CSS, Radix/shadcn, Motion\n- tRPC, React Query\n- Hono, BullMQ, Prisma, Postgres, Redis\n- Playwright, Vitest\n- Prettier, ESLint\n\n## Initial dev setup\n\nIf using GitHub Codespaces or a Dev Container, skip to step 5.\n\n1. Configure local environment variables\n\n   ```sh\n   yarn be prepare:local\n   ```\n\n2. Start dev services\n\n   ```sh\n   docker compose -f compose.local.yml up\n   ```\n\n3. Migrate databases\n\n   ```sh\n   yarn be prisma migrate dev\n   ```\n\n4. Start dev servers\n\n   ```sh\n   yarn dev\n   ```\n\n5. Optional: Generate demo data\n\n   Dev server must be running\n\n   ```sh\n   yarn be prepare:demo\n   ```\n\n   Login with `user@example.com` and `password1234` (see\n   `packages/backend/bin/demo.ts` for more details)\n\n## Additional deployment setup\n\nDocker build args:\n\n- GIT_COMMIT_SHA\n- VITE_GIT_COMMIT_SHA\n- VITE_ENV_NAME\n- VITE_SENTRY_DSN\n- SENTRY_AUTH_TOKEN\n- SENTRY_ORG\n- SENTRY_PROJECT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnihalgonsalves%2Fexpenses","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnihalgonsalves%2Fexpenses","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnihalgonsalves%2Fexpenses/lists"}