尚未检测到更新。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.