尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗A mobile-first progressive web app for managing a residential building's finances — tenant dues and payments, expenses, shared services (generator + water), building projects, and cash/reserve position. Runs in the browser on local storage, with optional Google Sheet sync and invoice-photo upload to Google Drive. Two roles: owner (full access) and tenant (read-only, PIN login).
node .\local-server.js
Then open http://localhost:4180. For phone testing on the same Wi-Fi, use the computer's IP instead of localhost. (The dev server also serves .pdf files inline, handy for checking generated statements.)
Deploy to a public HTTPS host (this project uses Vercel: vercel --prod from inside the project folder), open the URL on the phone, then:
Add to Home screen / Install app.Add to Home Screen.Open it from the home-screen icon afterwards.
On first launch the Setup wizard collects the language (English/Arabic), building name, owner password, collection mode, monthly budget / LBP rate, and tenants (with coefficient, breaker size, phone, and PIN). You can re-run it any time from Settings → App Setup → Setup wizard, and change the language any time in Settings → Building Details → Language.
Sync keeps a backup in a Google Sheet and lets multiple devices share data.
google-sheet-sync-only.gs, and Deploy → New deployment → Web app (Execute as: Me; Who has access: Anyone). Copy the /exec URL.SYNC_SECRET in Apps Script, and the same value in Settings → Sync secret. Requests without it are then rejected, so a leaked URL alone is useless.In Settings → Share access, copy the access code and send it to the tenant. On their phone they tap "Connect to a building" on the login screen and paste it — this configures sync and downloads the data, then they log in with their PIN.
On HTTPS, invoice photos upload through the Vercel function api/upload-invoice.js to a Drive folder (set the folder ID in Settings). Configure these Vercel environment variables (personal Gmail Drive):
GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, GOOGLE_REFRESH_TOKEN, GOOGLE_DRIVE_FOLDER_IDWorkspace Shared Drives can instead use GOOGLE_SERVICE_ACCOUNT_EMAIL + GOOGLE_PRIVATE_KEY + GOOGLE_DRIVE_FOLDER_ID. Keep private keys and refresh tokens in Vercel only — never in app Settings.
data/seed.json is an intentionally empty factory-reset template (no real data or credentials).APP_VERSION (src/app.js, shown in Settings) and CACHE_NAME (sw.js).CLAUDE.md for architecture, state schema, and conventions.