{"id":51654876,"url":"https://github.com/mr-karan/chavanni","last_synced_at":"2026-07-14T08:04:50.382Z","repository":{"id":244509723,"uuid":"794187257","full_name":"mr-karan/chavanni","owner":"mr-karan","description":"A no-frills expense tracker app enabling quick logging of expenses in natural language, using LLMs for parsing and categorization.","archived":false,"fork":false,"pushed_at":"2026-07-13T05:34:32.000Z","size":28579,"stargazers_count":123,"open_issues_count":3,"forks_count":11,"subscribers_count":4,"default_branch":"main","last_synced_at":"2026-07-13T06:08:53.820Z","etag":null,"topics":["budget-app","budgeting","expense-tracker","personal-finance"],"latest_commit_sha":null,"homepage":"https://mrkaran.dev/posts/gullak/","language":"Vue","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mr-karan.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2024-04-30T16:13:44.000Z","updated_at":"2026-07-13T05:34:49.000Z","dependencies_parsed_at":"2025-01-31T16:53:41.629Z","dependency_job_id":"8a9e008c-9a66-4ebf-94c1-0275c129e9ed","html_url":"https://github.com/mr-karan/chavanni","commit_stats":null,"previous_names":["mr-karan/gullak"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/mr-karan/chavanni","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mr-karan%2Fchavanni","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mr-karan%2Fchavanni/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mr-karan%2Fchavanni/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mr-karan%2Fchavanni/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mr-karan","download_url":"https://codeload.github.com/mr-karan/chavanni/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mr-karan%2Fchavanni/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35451905,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-14T02:00:06.603Z","response_time":114,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["budget-app","budgeting","expense-tracker","personal-finance"],"created_at":"2026-07-14T08:04:45.011Z","updated_at":"2026-07-14T08:04:50.370Z","avatar_url":"https://github.com/mr-karan.png","language":"Vue","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Gullak - Expense Tracking App\n\n_A minimalist expense tracker enabling quick logging of expenses in natural language, using LLMs for parsing and categorization._\n\n![Gullak Transaction Logger](./screenshots/log.png)\n\nGullak is a minimalist expense tracker designed to make logging expenses effortless. Input your expenses in natural language, and let the integrated AI handle categorization. Gullak focuses on quick expense logging with the ability to export to CSV for analysis in tools like Actual Budget.\n\n## Why Gullak?\n\nI originally developed Gullak for personal use. I had a habit of recording my expenses on Apple Notes — a quick and simple method that just got the job done. However, I needed a tool that could not only store these entries but also parse and organize them effectively. Gullak is designed as a \"log and forget\" expense tracker that focuses on making expense logging fast and effortless, then exporting to CSV for analysis in dedicated budgeting tools. While Gullak was created out of my own necessity, I decided to open source it to help others who might be seeking similar solutions.\n\n## Features\n\n- **Natural Language Input**: Simply type your expenses as you would in a notebook or notes app.\n- **Smart Categorization**: AI learns from your categories and maintains consistency across transactions.\n- **Multi-Currency Support**: Automatically detects currency from context ($, ₹, €, £) - perfect for travel.\n- **Quick Confirmation**: Inline checkbox to confirm transactions instantly without modals.\n- **Bulk Operations**: Select multiple transactions to edit, confirm, or delete at once.\n- **Advanced Filters**: Filter by date ranges, amounts, and categories before export.\n- **CSV Export**: Export filtered transactions for analysis in Actual Budget or similar tools.\n- **Dense Table UI**: Compact, fast interface focused on efficiency.\n\n## Philosophy\n\nGullak is designed as a \"log and forget\" expense tracker. Instead of trying to be an all-in-one budgeting tool with charts and analytics, it focuses on what it does best: making expense logging fast and effortless.\n\nThe workflow is simple:\n\n1. **Log** expenses quickly using natural language\n2. **Confirm** transactions with a single click\n3. **Export** to CSV when ready\n4. **Analyze** in dedicated tools like Actual Budget\n\nThis keeps Gullak lean, fast, and focused on its core purpose.\n\n## Self Hosting\n\nGullak is easy to self-host using Docker. Multi-architecture images are available for both `amd64` and `arm64` platforms.\n\n### Using Docker Compose (Recommended)\n\n1. Create a `.env` file with your API keys:\n\n```bash\ncp .env.sample .env\n# Edit .env and add your OpenAI or Groq API token\n```\n\n2. Start Gullak:\n\n```bash\ndocker-compose up -d\n```\n\n3. Access Gullak at `http://localhost:3333`\n\nThe database will be persisted in the `./data` directory. You can customize the configuration by editing environment variables in `docker-compose.yml` or by mounting a custom `config.toml` file.\n\n**Production notes:**\n\n- The healthcheck monitors container health by checking the HTTP endpoint every 30 seconds\n- Customize the `TZ` environment variable to set your timezone (default: Asia/Kolkata)\n- Consider pinning to a specific version tag instead of `latest` for production deployments\n\n### Using Docker CLI\n\nFor a quick setup without docker-compose:\n\n```bash\ndocker run --name gullak \\\n  -e GULLAK_OPENAI_TOKEN=your-api-key-here \\\n  -e GULLAK_APP_DB_PATH=/app/data/expenses.db \\\n  -v gullak-data:/app/data \\\n  -p 3333:3333 \\\n  -d ghcr.io/mr-karan/gullak:latest\n```\n\nThis setup will expose Gullak on port 3333, storing the SQLite database in a named volume.\n\n## Apple Shortcut Integration\n\n[Download Shortcut](https://www.icloud.com/shortcuts/f9039ea721ca4cdeac31fb9b7983450a)\n\nGullak supports integration with Apple Shortcuts, enabling you to log expenses quickly and effortlessly using Siri. This workflow is especially useful for hands-free operation, such as logging expenses on the go.\n\n### Setting Up the Apple Shortcut\n\nFollow these steps to configure it:\n\n### Download the published shortcut:\n\n- Download a copy of the shortcut from [here](https://www.icloud.com/shortcuts/f9039ea721ca4cdeac31fb9b7983450a).\n- Add the shortcut to your library in the Shortcuts app on your iOS device.\n- Customize the GULLAK_API endpoint.\n\n  - Open the Shortcuts app and find the newly added shortcut.\n  - Tap on the shortcut to open the editing interface.\n  - Look for the `gullak_api_endpoint` variable within the actions list.\n  - Edit the variable to point to your specific Gullak self hosted installation.\n\n- Run the shortcut via Siri:\n  - After setting up, invoke Siri and use the shortcut by saying a phrase like \"Log expense.\"\n  - Narrate the details of your expense, such as \"Spent 150 Rs on groceries.\"\n\n### Configuration\n\nGullak allows you to customize various settings through a configuration file in `.toml` format. Please refer to the provided [sample](./config.sample.toml) config file. Below is a description of each section and their respective settings:\n\n| Section | Key      | Default Value            | Description                                                                   |\n| ------- | -------- | ------------------------ | ----------------------------------------------------------------------------- |\n| app     | debug    | true                     | Enables debug mode for more verbose output.                                   |\n|         | currency | \"INR\"                    | Sets the currency for your expenses.                                          |\n|         | db_path  | \"./expenses.db\"          | The path where the SQLite database is stored.                                 |\n| http    | enabled  | true                     | Enables the HTTP server to run.                                               |\n|         | address  | \":3333\"                  | The address and port on which the server listens.                             |\n|         | timeout  | \"30s\"                    | The timeout duration for HTTP requests.                                       |\n| openai  | base_url | \"https://api.openai.com/v1\" | The base URL for the OpenAI API. Change this if you use a different endpoint. |\n|         | token    | \"REDACTED\"               | Your OpenAI API token for accessing models.                                   |\n|         | model    | \"gpt-4o\"                 | Specifies the OpenAI model used for processing inputs.                        |\n|         | timeout  | \"10s\"                    | The timeout duration for OpenAI API requests.                                 |\n\n### Using Groq with the Llama3 Model\n\nIf you prefer to use a different provider like Groq for OpenAI services, you can specify this in the openai section:\n\n```toml\n[openai]\nbase_url = \"https://api.groq.com/openai/v1\"\nmodel = \"llama3-70b-8192\"\ntoken = \"\"\n```\n\n### Environment Variables\n\nGullak supports configuration overrides using environment variables. This is the recommended approach for Docker deployments to keep sensitive data like API tokens secure. All environment variables must be prefixed with `GULLAK_`.\n\nCommon environment variables (see `docker-compose.yml` for complete list):\n\n```bash\n# Required: LLM API Configuration\nGULLAK_OPENAI_TOKEN=your_api_token_here\nGULLAK_OPENAI_MODEL=gpt-4o-mini\nGULLAK_OPENAI_BASE_URL=https://api.openai.com/v1\n\n# Optional: App Settings\nGULLAK_APP_CURRENCY=INR\nGULLAK_APP_DB_PATH=/app/data/expenses.db\nGULLAK_APP_DEBUG=false\n```\n\nYou can also override any config.toml setting using environment variables with the pattern `GULLAK_\u003cSECTION\u003e_\u003cKEY\u003e`. For example, `http.timeout` becomes `GULLAK_HTTP_TIMEOUT`.\n\n## Local Dev Setup\n\nTo set up Gullak for development on your local machine, follow these steps:\n\n1. Clone the repository:\n\n```bash\ngit clone https://github.com/mr-karan/gullak\n```\n\n2. Build the UI (a Vue3 app):\n\n```bash\nmake build-ui\n```\n\n3. Compile the Go binary:\n\n```bash\nmake build\n```\n\n4. Start the application:\n\n```bash\nmake fresh\n```\n\n## LICENSE\n\nGullak is licensed under the [AGPL v3](./LICENSE) license.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmr-karan%2Fchavanni","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmr-karan%2Fchavanni","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmr-karan%2Fchavanni/lists"}