HotelLedger
βš™οΈ System Admin
🏨 Front Desk 🍽️ F&B πŸ“‹ Procurement πŸ“¦ Store / Inventory πŸ“Š Reports

Hotel Identity

Guest Services Hub

Shown on the guest-facing page reached by scanning a room's QR code β€” "Wi-Fi Password" and "View Hotel Information" read directly from here.

Financial Settings

F&B Outlets

Configure the outlet names that appear across F&B and Cash Reconciliation

Room Types & Rates

Define room categories and default rack rates

Floor Options

The valid floor names Room Inventory and the Front Desk Room Board filter can use. Edit, remove, or add to this list to match this property's real layout.

Bank Accounts

Real, individually-tracked bank accounts β€” each gets its own line on the Balance Sheet under "Bank" and its own running balance, instead of everything lumping into one generic figure. Tag each one by what it's actually used for: only accounts tagged Operational can be chosen as a payment source when AP pays a vendor.

Bank Name
Purpose
Active

Room Inventory

The actual, individual rooms staff see on the Front Desk Room Board β€” adding real property inventory is an Admin decision, not a front desk task.

Loading…
Room Number
Room Class
Floor
Rate / Night (₦)

Rate Plans / Packages

One package rate per plan (matching real hotel industry practice) β€” with a configured Room/F&B split so tax posts correctly behind the scenes. Guests just see one clean nightly rate.

Procurement & Store Operations

On by default. Turn this off if the Cost Controller role isn't staffed yet β€” Store and Procurement will then act on requisitions directly again, exactly as they did before Cost Controller existed. Any request already sitting in the Cost Controller queue also unlocks immediately once this is switched off.

Off by default. When on, a Store Requisition (after Cost Controller, if that's also required) waits for the GM to approve it on the Executive Dashboard before Store can issue it β€” replacing a paper sign-off with a digital one.

Off by default. When on, a PO that needs approval (see PO Approval Threshold below) can only be approved by the GM on the Executive Dashboard β€” Procurement's own Approve button is hidden, since the point is to replace that paper walk-over-to-GM step, not duplicate it.

On by default β€” money movement should always need sign-off. When on, an Accountant or FC's "Request Funds" submission sits pending until GM/MD approves it on the Executive Dashboard, at which point the funds are treated as received and post immediately. Turn this off to let Fund Requests post immediately on submission with no approval step.


On by default, threshold ₦500,000 β€” a manual Adjustment Entry (GL Admin β†’ General Ledger) is the only way to post a transaction with no invoice, PR, or PO behind it (e.g. booking a fixed asset paid outside the normal purchasing flow), so unlike AP batches it previously had no approval gate at all. When on, an entry at or above the threshold sits pending until GM approves it on the Executive Dashboard, then posts exactly as entered; entries below the threshold still post immediately, same as before. Turn the checkbox off to remove this gate entirely.

Front Desk Settings

If off (default), staff print the folio manually using the existing button β€” nothing changes for them. If on, a folio pops up ready to print right after every checkout, no extra click needed.

Front Desk staff can only tick "Breakfast Included" on a reservation β€” the value charged always comes from here, so nobody can type in a different amount at the point of booking.

Guest Service Hub Default Rates

Pre-fills the fee prompt Front Desk sees when marking these Guest Hub requests complete β€” still editable per request since real cost can vary (e.g. distance, load size).

Late Checkout Charge Brackets

Guest is charged this % of the room rate, based on how many hours past standard check-out time they actually leave. Checked in order β€” the first bracket whose "up to" hours covers the actual delay applies.

Early Check-in Charge Brackets

Guest is charged this % of the room rate, based on how early before standard check-in time they actually arrive.

πŸŒ™ Auto Night Audit (Failsafe)

Off by default. When on, the system checks every 15 minutes and β€” only within 30 minutes after the cutoff, and only if nobody's run it yet that night β€” runs Night Audit itself: posts room charges, marks no-shows, and advances the business date, exactly like the manual button. If that 30-minute window passes with nobody running it, it stays pending β€” it will NOT fire later in the day; either a human runs it or it waits for the next cutoff. The one thing it never does is auto-charge cards on file; those are counted for staff to collect manually instead, so a real card charge never goes out with nobody there to catch a problem. Whoever's contact info is set below gets a message the moment it fires.

πŸ›ŽοΈ New Website Booking Alert

Off by default. Today, a new online booking only shows up on Front Desk's dashboard and the Executive Dashboard β€” nobody is actively told unless they happen to be looking. When on, whoever's contact info is set below gets an SMS/email the moment a booking comes in (guest name, room type, dates, amount, and whether it's already paid or pending pay-at-hotel).

πŸŒ™ Night Audit Reset

For correcting a genuinely wrong Night Audit run β€” removes exactly what that date's audit posted (Room Charge, Complimentary Breakfast/Room entries) from every folio, and clears the audit record so it can be run again correctly. Front Desk staff have no access to this; every reset here is logged to the audit trail.

Enabled Modules

Untick anything this hotel doesn't use β€” that tile disappears completely from the login page, staff never see it at all. System Admin always stays visible, so you can never lock yourself out.

Department PINs

These are the shared PINs used to log into each department from the landing page

πŸ” Admin & GM Secure Login

Admin and GM can do the most damage if compromised β€” Admin can wipe the whole database, GM can override credit limits and approve real AR charges. A 4-digit PIN isn't proportionate for these two anymore. Set up a real email + password + SMS code login for each, replacing their PIN.

⚠️ SMS codes currently go through Africa's Talking's sandbox environment β€” real phone numbers won't receive them until that's switched to production credentials. Set this up now, but don't rely on it for real security until that's confirmed working with a real test message.

πŸ”’ Trusted Device Policy

Controls whether Admin/GM can skip the SMS code on a device they've already verified once. This is a real security-vs-convenience tradeoff β€” you decide where the line sits, not the code.

Front Desk Agents

Each agent has their own PIN, separate from department PINs above. Add a new agent or reset an existing one's PIN.

What each level can do
Pick a level below, tick what it's allowed to do, then save. Changes apply immediately to everyone at that level β€” no redeploy needed. Levels no longer auto-inherit from the one below: each level's capabilities are whatever is ticked for it, so if Level 4 should keep doing everything Level 3 can, tick those boxes for Level 4 too.
New agents are now created in Staff & Users, alongside every other department's staff β€” one place instead of several. To change an existing agent's role/level or reset their PIN, click "Edit / Reset PIN" on their card above.

PIN Change Log

Loading...

πŸ” Smart Lock Integration

Pick whichever lock vendor this hotel has installed, then fill in the credentials that vendor gives you. This is built as a plug-in β€” adding a second vendor later, or switching brands, never requires touching the rest of HotelLedger.

⚠️ Before choosing a vendor: confirm with them directly that their locks validate access offline (the door itself doesn't need live internet to unlock) β€” this matters for what happens if HotelLedger or the internet goes down. Ask about their REST API/webhook documentation before buying, not after.
Status: checking...

πŸ“§ Email Integration

Guest booking confirmations currently send automatically through this. The actual API key is a server secret, so it's configured in Netlify's environment variables, not here β€” this page is for setup guidance and testing.

Setup Steps (one-time)
  1. Create a free SendGrid account at sendgrid.com
  2. Under Settings β†’ Sender Authentication, verify the email address you'll send from (SendGrid rejects sending from an unverified address)
  3. Create an API Key under Settings β†’ API Keys
  4. In Netlify β†’ Environment variables, add SENDGRID_API_KEY with that key
  5. Also add SENDGRID_FROM_EMAIL and SENDGRID_FROM_NAME to match your verified sender
  6. Redeploy β€” environment variable changes only apply on the next deploy
Currently used for: guest booking confirmations (book.html). Checkout receipts and staff notifications can be added the same way once this is confirmed working.
Loading rooms…

Your Booking Page

Share or embed this link on your real website, social media, or Google Business listing β€” anyone who opens it can check real-time availability and book directly.

β†— Open

Room Rates

The booking page always quotes and charges the same rate your real rooms have in Room Management β€” there's nothing separate to configure here. To change a rate, update it in Room Management as usual and the booking page picks it up automatically.

πŸ“ž "Pay at Hotel" Bookings

A guest choosing to pay at check-in doesn't pay anything online, so those bookings land as Pending, not Confirmed β€” Front Desk sees a banner on their dashboard and must confirm each one (or call the guest to verify) before it's treated as a real reservation. "Pay in Full" and "Pay Deposit Now" are verified with Paystack automatically and confirm immediately.

Public Key

Safe to share β€” this is designed to sit in plain sight in the booking page's own code. It only opens the payment popup; it can't be used to charge or move money on its own.

Secret Key

This one actually verifies and moves money β€” never share it with anyone else. Once saved here, it's write-only: nobody, including HotelLedger's own developers, can read it back through this screen or any other.

Loading…

Configured Channels

Toggling off hides a channel from Front Desk without losing its saved connection β€” turn it back on and the same iCal/room mapping is still there. Removing it deletes it from this list entirely (the connection record itself is kept, in case it's ever re-added).

Loading…

+ Add Channel

+ Add New Staff

One place to create any staff login β€” pick the department first, the right fields appear below.

F&B Staff

Individual F&B logins with personal PINs

Loading...

Front Desk Agents

Loading...

Maintenance Staff

Loading...

Housekeeping Staff

Individual Housekeeping logins with personal PINs

Loading...

Recent Logins (Last 24 Hours)

Loading...

Pending Requests

Loading...

Approved Devices

Loading...
Loading...
Loading...

Module Status

Running checks...

Data Flags

Scanning...
⏳
Last Backup

πŸ“¦ Automated Backups

A full Realtime Database snapshot is saved automatically every night and kept for 30 days. Download any date below for safekeeping β€” actually restoring from one is a careful, hands-on operation (via the Firebase console or with assistance), not a one-click action from here.

Loading...

πŸ“œ Backup Activity Log

Just the backup-related entries from the system audit trail β€” for the complete log across every module, see πŸ“‹ Audit Trail.

Loading...

πŸ“€ Manual Module Exports

Export data from any module as CSV β€” or everything at once as JSON

πŸ“Š AP β€” Invoices

All invoices across all months

🏒 AP β€” Vendors

Complete vendor master list

🍽️ F&B Orders

All F&B orders and payments

🏨 Front Desk

Reservations and folios

πŸ’΅ Petty Cash

All disbursements and replenishments

πŸ”§ Maintenance

All job orders and history

πŸ“‹ Audit Trail

Complete system audit log

πŸ“Š Owner Data Export

The real handover package β€” AP, AR, Guest Profiles & Folio History, HR/Payroll, F&B Orders, Reservations, and GL Journals across every period, all as one Excel workbook any accountant or new system can actually open. This is what to give an owner migrating away β€” the JSON backup below is for disaster recovery, not this.

πŸ“¦ Full System Backup (Manual)

Everything β€” all modules, all data, as JSON, downloaded straight to your browser right now

πŸ”§ Fix Room Rates on Reservations

Correct rate_per_night on existing reservations saved with wrong rates. Updates total_amount automatically.

πŸ”§ Fix Paid Bill Dates β€” Safe, does not delete anything

A bill's date is only ever set once, when it's created β€” a bill created one day but paid days later shows up as "not counted today" on the F&B Dashboard and Reports, and only appears under its old creation date in a search. This scans every already-paid F&B order and corrects its date to match the day it was actually paid, so past bills report correctly too. Fixed going forward as of today β€” this only cleans up bills paid before that fix.

⚠️ WARNING: All actions on this page are permanent and cannot be undone. Export a full backup before proceeding with anything here.

Clear AP β€” Specific Month

Delete all invoices for one month

Clear Payment History

Wipe the AP payment transaction log only

Clear F&B Orders

Delete all F&B order history

Clear Maintenance Jobs

Delete all maintenance job orders

🚨 Reset Entire System

Delete ALL data across ALL modules β€” AP, F&B, Front Desk, Maintenance, Petty Cash, Inventory. Cannot be undone.