{"id":50970484,"url":"https://github.com/sht/spends","last_synced_at":"2026-06-19T01:37:04.889Z","repository":{"id":337272216,"uuid":"1145581043","full_name":"sht/spends","owner":"sht","description":"Self-hosted purchase \u0026 warranty tracker with spending analytics. Track expenses, monitor warranties, and visualize your spending patterns. Built with FastAPI + Alpine.js","archived":false,"fork":false,"pushed_at":"2026-03-19T22:09:49.000Z","size":1735,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-06-19T01:37:03.208Z","etag":null,"topics":["alpinejs","expense-manager","fastapi","personal-finance","purchase-tracker","self-hosted","vitejs","warranty-tracker"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","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/sht.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-30T00:38:17.000Z","updated_at":"2026-03-19T22:09:54.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/sht/spends","commit_stats":null,"previous_names":["sht/spends"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/sht/spends","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sht%2Fspends","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sht%2Fspends/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sht%2Fspends/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sht%2Fspends/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sht","download_url":"https://codeload.github.com/sht/spends/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sht%2Fspends/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34514282,"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-06-18T02:00:06.871Z","response_time":128,"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":["alpinejs","expense-manager","fastapi","personal-finance","purchase-tracker","self-hosted","vitejs","warranty-tracker"],"created_at":"2026-06-19T01:37:04.253Z","updated_at":"2026-06-19T01:37:04.875Z","avatar_url":"https://github.com/sht.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Spends Tracker\n\nA personal purchase and warranty tracking application with receipt/file management.\n\n## Overview\n\nTrack your purchases, manage warranties, and analyze spending patterns. Upload receipts, manuals, and photos with automatic deduplication storage.\n\n## Tech Stack\n\n| Frontend         | Backend              | Storage                          |\n| ---------------- | -------------------- | -------------------------------- |\n| Vite + Alpine.js | FastAPI + SQLAlchemy | SQLite (dev) / PostgreSQL (prod) |\n| Bootstrap 5      | Pydantic             | Hash-sharded files               |\n| Chart.js         | Uvicorn              | Reference counting               |\n\n## Documentation\n\n- [Documentation Hub](docs/) - Complete documentation collection\n  - [API Documentation](docs/API.md) - Complete REST API reference\n  - [System Architecture](docs/ARCHITECTURE.md) - Architecture overview and design\n  - [Development Plan](docs/DEVELOPMENT.md) - Roadmap and development phases\n  - [Security Policy](docs/SECURITY.md) - Security guidelines and vulnerability reporting\n  - [Architecture Diagram](docs/DIAGRAM.md) - Visual system architecture\n- [Backend Documentation](backend/README.md) - Backend-specific implementation details\n\n## Security\n\nFor security vulnerabilities, please report to **oss@mailite.com** or create a private GitHub security advisory.\n\n## Quick Start\n\n### Prerequisites\n\n- Node.js 16+\n- Python 3.10+\n\n### Installation\n\n```bash\n# Install frontend dependencies\nnpm install\n\n# Install backend dependencies\ncd backend\npython -m venv venv\nsource venv/bin/activate\npip install -r requirements.txt\ncd ..\n```\n\n### Configure Ports (Optional)\n\nDefault ports are **3030** (frontend) and **3031** (backend). To customize, edit the `.env` files:\n\n**`.env`** (frontend):\n\n```env\nVITE_PORT=3030\nVITE_API_URL=http://localhost:3031\n```\n\n**`backend/.env`** (backend):\n\n```env\nPORT=3031\nFRONTEND_URL=http://localhost:3030\n```\n\n### Run Development Environment\n\n**Terminal 1 - Frontend:**\n\n```bash\nnpm run dev -- --host 0.0.0.0\n```\n\n**Terminal 2 - Backend:**\n\n```bash\ncd backend\nsource venv/bin/activate\nuvicorn app.main:app --reload --host 0.0.0.0 --port 3031\n```\n\n| Service     | Default URL                |\n| ----------- | -------------------------- |\n| Frontend    | http://localhost:3030      |\n| Backend API | http://localhost:3031/api  |\n| API Docs    | http://localhost:3031/docs |\n\n## Features\n\n- **Purchase Tracking**: Product details, price, retailer, brand\n- **File Management**: Upload receipts, manuals, photos with deduplication\n- **Warranty Tracking**: Auto-expiry detection\n- **Analytics**: Spending trends, retailer/brand distribution\n- **Data Import/Export**: JSON and CSV support\n\n## Project Structure\n\n```\nspends/\n├── src-modern/          # Frontend source (Vite + Alpine.js)\n│   ├── scripts/         # Alpine.js components\n│   └── styles/scss/     # SCSS styles\n├── backend/             # FastAPI backend\n│   ├── app/             # Routes, models, schemas\n│   └── migrations/      # Alembic migrations\n├── dist-modern/         # Production build (auto-generated)\n└── uploads/             # File storage (hash-sharded)\n```\n\n## Key Commands\n\n```bash\n# Frontend\nnpm run dev              # Development server\nnpm run build            # Production build\n\n# Backend\ncd backend\nalembic upgrade head     # Run database migrations\nuvicorn app.main:app --reload --host 0.0.0.0 --port 3031\n\n# Testing\npytest                   # Run backend tests\n```\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsht%2Fspends","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsht%2Fspends","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsht%2Fspends/lists"}