🌅 PSOTS Admin
Chhath 2026 · Committee Panel
← View Site
📥 Import CSV
Committee workspace · Chhath 2026

Committee dashboard

Registrations, contributions and the event desk, together in one place.

⚡ Event Operations
💰 Contributions & Finance
📣 Communications
👥 Community
⚙️ Admin
Chhath 2026 · Vrati seva

Vrati workspace

Help families register, coordinate their Ghaat and follow up on this year's plans.

🙏 All Contributors
Mark payments as verified (✅) once you confirm the UPI transfer in your PhonePe/GPay app. Data loads from D1 — no Firestore or Google Sheets dependency.
Filter:
All
Pending
Verified ✅
Rejected
🌅 Loading contributors…
Total Verified—
📲 Payment Reminder Blast
Select a tower to see paid vs remaining, compose your message, then send to all or selected flats.
Message (edit before sending):
PSOTS Chhath Puja · Treasurer workspace

Finance & expense tracker

Contributions, spending and remaining balances first. Every saved payment follows, with older references and settings below.

● Financial year ${ACTIVE_YEAR}
Funding position · emergency reserve protected

Can we cover confirmed arrangements?

Loading…

Calculating confirmed unpaid bills against spendable event funds—not the emergency reserve.

Event money: —Unpaid confirmed: —
Admin only · funding gap if reserve is also used—
Protecting the emergency reserve—
Emergency reserve policy
—

Protecting the entire previous-year carry-forward is the default planning assumption until explicitly saved.

You may protect all or part of the carry-forward. This changes planning only, never recorded payments.
View resident-friendly funding summary ↗
Carried forward
—
Available from the previous year
Verified contributions
—
Confirmed resident contributions
Total funds available
—
Carried forward + verified contributions
Expenses already paid
—
Saved payment records only
Balance available
—
Previous carry + contributions − spending
Known payments still pending
—
Based on confirmed vendor agreements and bills
View by category and topic
Budget status updates when financial records load. Pending bills are not counted as spent. Only payments already made reduce the available balance.

Committed amounts & payments due

Agreed costs organised by category and work item. Track how much is committed, already paid and still outstanding—for ghat boxes, decoration, prasad and every other recorded bill.

01 / COMMITMENTS
Total committed —
Paid toward commitments —
Unpaid confirmed commitments —
After protecting emergency reserve — Confirmed amounts are reserved; planned quotes are separate
Including emergency reserve · Admin only — How much is still needed to pay confirmed bills after using all available cash, including the reserve. Planning comparison only.
Category → work / topic → payment status Loading agreed commitments…
Loading agreed commitments…

Confirmed agreements, including prices under negotiation and ₹0 paid, are reserved once. Planned/quoted work is shown separately; an unknown bill amount is never guessed. Unpaid amounts do not reduce the available balance.

Saved payments & expense records

Every recorded payment is readable in full. Edit old descriptions without changing what was paid, and review work-order balances across instalments.

02 / PAYMENTS
Loading expense records… Existing notes and saved amounts are preserved

Record a payment

Include the purpose of the payment so every expense remains identifiable. Advance and part-payments stay separate from unpaid commitments.

03 / ADD PAYMENT
Payment commitment preview
Committed bill—
Paid previously—
Paying now—
Remaining after payment—

Enter the agreed amount for this work to see the remaining balance.

Tracking an advance? Enter the full agreed bill and use the same work reference for every instalment. The ledger shows how much is paid and what is pending. Only amounts actually paid count as expenses.
Attach receipt & add optional notes
Saved directly to the database · No second Save needed
Previous years & administration · expand for details
💰 Financial Overview
These numbers show on the public website financial section. Update them as contributions come in.
₹
Verified carry-forward from last year
₹
Auto-updates from verified contributions
₹
₹
📋 Planned Budget Allocation
How you plan to split this year's budget. Fills as a "Where your money goes" chart on the public Finance page — only shows once you enter values.
₹
₹
₹
₹
₹
₹
📊 Expense Breakdown
Adjust category totals here and select Save Finance Data; every change creates a traceable expense record. For individual vendor bills, use Record a payment above. Both update the public total.
₹
₹
₹
₹
₹
₹
📊 Analytics Dashboard
🔄 Year Rollover
Use this once the current year's event is complete to archive this year's data and prepare for next year. The carry-forward balance is auto-calculated.
Load finance data first, then run rollover.
₹
= Available − Expenses for this year

📋 Meeting Notes

Create and manage meeting documentation. Admin can make notes public for residents to view.

📝 New Meeting Note

📋 Meeting Details

Residents can view

👥 Attendees

💬 Discussion & Suggestions

📊 Outcomes

🙏 Vrati/Volunteer Notes

🔍 Search & Filter

📅 Date 📝 Title 👥 Attendees 📊 Status ⚙️ Actions
No meeting notes yet. Create one above!
📢 Manage Announcements
Add, edit or remove announcements. These show on the public website and dashboard tile. Drag to reorder (coming soon).
⚙️ Arghya and Kharna timings are edited in Settings → Event Configuration (saved to D1 for cross-device sync).
🗓 All Four Days — Quick Edit
👥 WhatsApp Subscribers
Residents who opted in to WhatsApp updates from their portal account. Use their numbers to create a WhatsApp broadcast list.
📲 WhatsApp Broadcast Message
Compose a message to send to your WhatsApp broadcast list. The message opens in WhatsApp ready to send — you select the broadcast list and hit send.
0 characters
Your message will appear here…

"Send via Fonnte" delivers directly to all opted-in subscribers — no manual steps needed. Requires FONNTE_TOKEN set as a Cloudflare Pages secret.

💬 WhatsApp Group Broadcast
Send a message directly to the society WhatsApp group (120363027473206726). Message is delivered instantly via Fonnte — no manual steps.
0 characters
Your message will appear here…

⚠️ This sends to all 250+ group members immediately. Double-check your message before sending.

⏰ Reminder Scheduler
Set up key reminder dates. On each date, the broadcast message will be pre-composed and ready to send. You'll see a notification on the dashboard.
📧 Email Broadcast
Send an email to all residents with an email on file, or only to those who haven't paid yet. Uses ZeptoMail — no WhatsApp credits consumed.
0 characters
✍️ Manual Contribution Entry
Record a contribution you personally received as cash or UPI (or bank transfer/cheque). Name, Flat, Mobile and Amount are required. If you confirm the payment was received, it is verified immediately and appears on the portal. Every entry records who entered it.
💵 Cash
📲 UPI (helped them)
👴 Senior Citizen
🏢 Corporate/Group
₹
"Received" entries are auto-reconciled: marked Verified and counted on the portal immediately.
Email receipt sent via ZeptoMail — preferred over WhatsApp to conserve credits
📋 Recent Manual Entries
Loading…
🤝 Volunteer Management
View all volunteer sign-ups, assign tasks, and track event-day attendance. Data syncs from the volunteer sign-up page.
—
Total Volunteers
—
Sandhya Arghya
—
Usha Arghya
—
Checked In
#NameFlatMobileDaysTasksStatusActions
Click Refresh to load volunteers…
📷 Volunteer Check-In
Volunteer check-in QRs (sent via the "✉️ Send Check-in QR" button per row) are scanned from the Prasad Scan tab's camera — it recognizes both Prasad and Volunteer passes automatically, no separate scanner needed. Or paste a scanned code manually here.
🕉️ Vrati Registrations 2026
One registration per flat covers Sandhya and Usha Arghya. Contact details are visible to full admins only.
—
Flats registered
—
Total Vratis
FlatContactMobileVrati name(s)Updated
Loading…
🤝 Register Prasad for a Resident
Help senior citizens or residents who cannot register online. Find the flat first, review any existing RSVP, then create or update it explicitly.
🙏 Prasad RSVP Summary
Aggregated prasad requirements from resident RSVPs. Use this to order the right quantities.
—
Total RSVPs
—
People Attending
—
Kharna Plates
—
Thekua Packets
—
Kharna Collected
—
Thekua Collected
🙏 Prasad Distribution List
Auto-generated from verified contributions + Vrati registrations. Use on event day for prasad distribution. Filter by tower or Vrati status, then print.
Tower:
All
🕉️ Vratis Only
#Name(s)FlatTowerAmountVratiPrasad
Click Refresh to load list…
📋 Prasad Activity Log
Every scan/approval/rejection/undo, newest first. Undo appears only where it's actually allowed.
Time (IST)FlatVolunteer CounterDayQty MethodResultReason
Loading…
📷
Prasad Scan
Select station and day, then scan QR or use flat fallback.
Checking connection…
🏷️ Counter Station Not selected yet
Tap to select your counter — switch anytime. Logged with every pickup.
Manual fallback — real residents only
Use when a resident's QR is unavailable. For PPMS staff or anonymous walk-ins, use Quick Counters below instead — this panel is just for a real flat number, known or newly-registering.
Enter a real flat number to look it up or register a new walk-in resident by name.
Quick Counters No names, no lookup
For PPMS staff and anonymous walk-ins. Counts follow the selected Kharna/Thekua day.
0 Today
🏢 PPMS Staff
Property/housekeeping/security staff — one shared code for all of them today.
0 Today
🎫 Walk-in (anonymous)
Unknown visitors, no flat/name asked — today's unique code: —
— / —Flats collected / registered
— / —People collected / registered
📦 Plate Stock — received · — scanned · — left
Batch will be tagged to your active counter station (or shared if none selected)
🏢 PPMS Allocation — allocated · — given · — left
⚪ Standard mode
Save all committee changes

Saves finance, announcements and event configuration together. Individual screens also have their own save buttons.

WhatsApp:
⏳ Checking…
🐛 Client Errors
Uncaught JavaScript errors reported automatically from any page — added 2026-07-16 after a real payment-page crash went unnoticed for 9 days with no way to detect it. A new error type also emails all admins once, the first time it appears.
Loading…
🗓 Event Configuration
Dates, timings, and UPI details — saved to D1 and applied site-wide instantly.
🌅 Sandhya Arghya (Day 3)
🌄 Usha Arghya (Day 4)
🍽️ Kharna Prasad (Day 2)
📱 WhatsApp Numbers
🪔 Footer Committee
Names and titles shown in the site footer and the public committee page. Positions change each year — update freely. Phone numbers appear as tap-to-call links.
📣 Prasad Day Broadcasts
📣 Prasad Alert Broadcast
Notify all verified residents that distribution is starting. Edit the message, then send.
▸
📲 Nudge Uncollected Flats
Late-day reminder to flats who haven't collected prasad yet today
▸
👥 WhatsApp Group Broadcast
Send one message to a WhatsApp group (e.g. Volunteers) instead of a DM per member.
▸
🙏 Contribution Thank-You Cards
Sends every verified resident a personalized thank-you card image over WhatsApp. Skips anyone already sent one this year — safe to click again to resume.
▸
🎚️ AI On/Off Switch
One switch controls every Claude API call in this app — the WA helpline bot's AI fallback, keyword disambiguation, onboarding name/flat extraction, and ticket-reply AI (email/portal/WhatsApp). Turning this off falls back to each feature's existing non-AI behavior (menu/keyword replies, first-guess disambiguation, plain ticket creation) — nothing breaks, it just stops spending on Claude.
🤖 WA Helpline Bot Health
Real response-time and usage stats from the helpline bot — actual numbers instead of "it felt slow" guessing.
—
Messages
—
Avg Response
—
P95 Response
—
Success Rate
☁️ Anthropic Ledger Cost (live token counts from Anthropic's Admin API × list pricing — not app logs)
—
Loading…
🔒 Blocked WhatsApp Numbers
Auto-blocked for claiming 3+ different flats via the helpline bot — likely impersonation-probing, but unblock here if this was a mistake (e.g. a shared family phone).
👤 Resident Profiles D1
Search by name, flat, email, or phone. Add new residents (without a contribution) or edit existing contact details.
💳 Contributions D1
View and edit all contribution records stored in D1. Shows email and phone. Filter by year, status, or search by name/flat/email.
🧩 Orphan Contributions D1
Contributions with no confirmed flat yet — e.g. paid but never gave real household details. Click ✏️ once they confirm a real flat, or leave here otherwise.
🔐 Login Activity D1
Residents who signed in within the selected window.
Name Flat Contact Provider Last Login First Joined
Loading…

📲 Confirm WhatsApp Send

Message preview
Recipients ()
🎫 Support Tickets
Complaints raised via WhatsApp, email, or web — assign, update status, resident is notified automatically
Ticket Resident Category Description Status Raised Actions
Loading…

🎫 Ticket

📝 Description
🕐 Activity
👤 Assign To
💬 Add Comment / Internal Note
🔄 Change Status
➕ Grant or Update Access
Search for a resident — their email, name and flat auto-fill from their profile.
🛡️ Current Access
People with dashboard access right now. Use Revoke to remove access.
🔑 Full Admins (keep to 2–3)
🤝 Volunteers
🎭 Committee Roles
Assign flat numbers to roles shown on the public committee page and in communications.
🔐 Volunteer Access & Permissions
Control which tabs volunteers can open and which Prasad actions they can perform. Admins always have full access. Enforced server-side immediately — the frontend tab list refreshes on next login.
▸ 🛡️ Full access reference (admin vs volunteer)
Read-only — backend-enforced gates in _shared/adminAuth.js. Volunteers can't reach a ❌ feature even by calling the API directly.
Feature 🔑 Admin 🤝 Volunteer Notes