尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證HLPL-Expense-Dashboard
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
Cash expense control for Hivefy Lifestyle Pvt Ltd. Replaces the three separate
FY26-27 workbooks (warehouse, head office, founder) with one system where each team
records only its own spend, and the founder sees everything consolidated.
The three workbooks could not be added up. The importer surfaced three concrete problems:檢視完整 README ↗Cash expense control for Hivefy Lifestyle Pvt Ltd. Replaces the three separate FY26-27 workbooks (warehouse, head office, founder) with one system where each team records only its own spend, and the founder sees everything consolidated.
The three workbooks could not be added up. The importer surfaced three concrete problems:
Pani Puri-Maulik,
cake, Chair and Krinesh Sir as categories, with 15 of 58 rows in "Other".| Role | Sees | Does |
|---|---|---|
| Warehouse manager | Warehouse expenses only | Records spend, declares cash in hand |
| Accounts manager | Head-office expenses only | Records spend, declares cash in hand |
| Founder | Everything | Records own spend, moves cash, sets budgets, analyses |
Teams cannot see each other's entries or the founder's, and cannot reach the founder's
screens. The scope is applied server-side on every query (expenseScope in
src/lib/auth.ts) — it is not a UI filter, so editing the URL does not defeat it.
Cash flows in a closed loop, which is what makes month-end add up:
Cash received (supplier refund, billing recovery, collection)
│
▼
Founder's chest ──── issues float ────► WH float ──► WH expenses
│ └► HO float ──► HO expenses
├──── founder's own expenses
└──── director drawings (out of the business, never an expense)
Float balance = issued + locally received − spent. Each team periodically declares the cash it is physically holding; the gap against the book is the control number.
Three taps and a number: type the amount, tap a category chip, tap save. Categories are ordered by how often that user has picked them in the last 90 days, so the common ones sit first. Date defaults to today, payment mode to cash, everything else is optional.
Two things happen automatically at entry:
requiresBill demand a bill number above their threshold.One taxonomy for all three teams, 25 heads in 9 groups. Each head carries:
its Tally ledger name (so month-end exports import straight into Tally),
which teams may book to it, a monthly budget, and bill requirements.
The founder edits all of this at /categories.
Old sheet labels are mapped through CategoryAlias, so migrated rows land on the right
head — Pani Puri-Maulik, cake and Staff Food & Tea all become Staff Food & Tea.
Unclassified (re-tag) holds migrated rows whose original label carried no meaning
(mostly "Office Operations" and "Other"). It cannot be picked for new entries, and the
dashboard nags until the backlog is cleared.
It installs to the home screen as a Progressive Web App and keeps working without signal — an expense recorded in a dead spot is held on the phone and sent when the connection returns, with a device-generated id making the write idempotent so a retry cannot double-record it. Nothing from the network is cached, so a stale float balance is never shown; the offline page says so plainly instead.
An optional 6pm reminder tells each person what they have recorded that day and what cash they are still holding. Setup is in docs/DEPLOY.md.
Export for Tally on the dashboard produces a CSV with one row per voucher, carrying
the ledger name, cost centre, narration, bill number and a capex flag.
npm install
cp .env.example .env # set DATABASE_URL and AUTH_SECRET
npx prisma migrate deploy
npm run seed # category master + three users
npm run dev
Seeded logins (password Change@123 — change it immediately):
[email protected] (founder), [email protected], [email protected].
Put founder.xlsx, wh.xlsx and ho.xlsx in data/, then:
npm run import
It is idempotent — it clears previously imported rows (those carrying a legacyRef)
and re-imports, so it can be re-run after adjusting category mappings. Entries made in
the app are never touched.
The import loaded 692 expenses and 92 cash transactions covering FY24-25 and FY26-27. It reconciles exactly to the source books: warehouse ₹2,14,581 spent, head office ₹30,428 spent with ₹13,984 in hand — both matching the team sheets to the rupee. The warehouse shows ₹50,205 against the sheet's ₹20,205, the ₹30,000 difference being the unacknowledged 01-Sep hand-over.
Step-by-step Neon + Vercel instructions are in docs/DEPLOY.md, including the two connection strings Neon needs and the common failure messages.
Any Node host works. The app needs DATABASE_URL (pooled), DIRECT_URL (unpooled, for
migrations) and AUTH_SECRET.
There is no user admin screen yet; both jobs are one command:
npm run set-password -- [email protected] 'new-password'
npm run add-user -- "Ravi Patel" [email protected] WH 'their-password'
To revoke access, untick active on the user in npx prisma studio — they are signed
out on their next request and their past entries keep their author.