{"id":30646222,"url":"https://github.com/ktcotz/splitlier","last_synced_at":"2025-08-31T04:20:35.279Z","repository":{"id":308600009,"uuid":"1020368760","full_name":"ktcotz/Splitlier","owner":"ktcotz","description":"Splitlier - backend for Splitly","archived":false,"fork":false,"pushed_at":"2025-08-15T08:56:49.000Z","size":381,"stargazers_count":0,"open_issues_count":2,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-08-15T10:27:13.798Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ktcotz.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}},"created_at":"2025-07-15T18:58:06.000Z","updated_at":"2025-08-15T08:56:49.000Z","dependencies_parsed_at":"2025-08-06T21:17:41.910Z","dependency_job_id":null,"html_url":"https://github.com/ktcotz/Splitlier","commit_stats":null,"previous_names":["ktcotz/splitlier"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ktcotz/Splitlier","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ktcotz%2FSplitlier","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ktcotz%2FSplitlier/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ktcotz%2FSplitlier/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ktcotz%2FSplitlier/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ktcotz","download_url":"https://codeload.github.com/ktcotz/Splitlier/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ktcotz%2FSplitlier/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272938920,"owners_count":25018676,"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","status":"online","status_checked_at":"2025-08-31T02:00:09.071Z","response_time":79,"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":[],"created_at":"2025-08-31T04:20:29.303Z","updated_at":"2025-08-31T04:20:35.265Z","avatar_url":"https://github.com/ktcotz.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Splitlier Backend\n\nBackend API for the Splitlier mobile application, built with [NestJS](https://nestjs.com/).  \nSplitlier helps groups easily track and share expenses, settle debts, and have fun while doing it.  \nUsers can create groups, add expenses, scan receipts, and send humorous GIFs to remind friends who owe money.\n\n---\n\n## 🚀 Features\n\n- **Authentication \u0026 Authorization**\n  - Secure JWT-based authentication\n  - Role-based access control for users and admins\n- **User Management**\n  - Create, read, update, and delete user accounts\n  - Retrieve user profiles with activity history\n- **Group Expense Sharing**\n  - Create and join groups\n  - Add and split expenses among group members\n  - Track balances in real-time\n- **Receipt Scanning**\n  - OCR-based receipt scanning for automatic expense creation\n- **Debt Reminders**\n  - Send fun GIFs to group members who owe money\n- **Security**\n  - Helmet for secure HTTP headers\n  - Throttler for API rate limiting\n  - Environment-based configuration for production \u0026 development\n- **Developer Friendly**\n  - Centralized exception handling\n  - Validation pipes for request payloads\n  - CORS support for mobile applications\n\n---\n\n## 🛠 Tech Stack\n\n- **Backend Framework:** [NestJS](https://nestjs.com/) (Node.js + TypeScript)\n- **Database:** PostgreSQL (via [Prisma](https://www.prisma.io/))\n- **Authentication:** JWT with refresh tokens\n- **Security:** Helmet, Throttler, ValidationPipe, CORS\n- **Receipt Scanning:** OCR integration (Tesseract.js / external API)\n- **Testing:** Cucumber + Gherkin\n- **Deployment Ready:** Environment-driven config for cloud or on-prem\n\n---\n\n## 📦 Requirements\n\n- Node.js 18+\n- npm or yarn\n- PostgreSQL database\n\n---\n\n## ⚙️ Installation\n\n```bash\ngit clone https://github.com/\u003cyour-repo\u003e/splitlier-backend.git\ncd splitlier-backend\nnpm install\n```\n\n## 🔧 Configuration\n\nCopy .env.example to .env and set the environment variables\n\n```bash\n  NODE_ENV=development\n  PORT=3000\n  DATABASE_URL=postgresql://user:pass@localhost:5432/splitlier\n  JWT_SECRET=super_secret_key\n  JWT_EXPIRATION=1h\n```\n\n## ▶️ Running the App\n\n- Development\n\n```bash\n  npm run start:dev\n```\n\n- Production\n\n```bash\n  npm run build\n  npm run start:prod\n```\n\n## 🧪 Testing\n\n```bash\n  npm run test\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fktcotz%2Fsplitlier","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fktcotz%2Fsplitlier","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fktcotz%2Fsplitlier/lists"}