{"repo":"cube-root/expenser","free":true,"listed":false,"github":"https://github.com/cube-root/expenser","clone":"git clone https://github.com/cube-root/expenser.git","description":"Manage you personal billing using Google Sheets","language":"TypeScript","stars":11,"topics":["nextjs","billing","expense-tracker","expenses","product"],"license":null,"category":"auth-billing-email","readme_excerpt":"MyExpense Track your spending in your own Google Sheet — the sheet is the database. How it works 1. Login with Google — the initial login requests only basic identity information. 2. Choose sheet access — authorize Google Sheets to create or connect sheets as yourself, or share one specific sheet with the optional service account. 3. Add expenses — entries are appended straight to your sheet. Dashboard, filters and budgets read from it live. The Google Sheets scope is requested incrementally only when a user chooses Google-account access. The service-account method does not require the user to grant that scope and can access only sheets explicitly shared with its email. The app does not request access to other Drive file types. There is also no database and no server-side storage : user settings live in a hidden Config tab, OAuth tokens live in an encrypted session cookie, and the connected sheet id lives in an httpOnly cookie. Stack - Next.js (App Router) + TypeScript - Auth.js with basic Google login and incremental spreadsheets authorization - Storage adapter over the Google Sheets API, with optional selected-sheet service-account access - Tailwind CSS + shadcn/ui, Recharts, SWR - PWA (installable on mobile) Sheet schema Expenses tab, columns A–O: Id CreatedAt Date Month Amount Currency Category Type PaymentMode Note Tags Source SplitTotal SplitWith SplitPaidBy ---- ----------- ------ ------- -------- ---------- ---------- ------ ------------- ------ ------ -------- ------","default_branch":null,"files":null,"tree":[],"storefront":"/r/cube-root","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/cube-root/expenser/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}