Follow these steps to configure HotelLedger for your hotel. Complete each step before going live.
Core system settings that apply across all modules
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.
Configure the outlet names that appear across F&B and Cash Reconciliation
Define room categories and default rack rates
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.
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.
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.
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.
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.
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.
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).
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.
Guest is charged this % of the room rate, based on how early before standard check-in time they actually arrive.
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.
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).
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.
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.
Manage PINs for all system roles
These are the shared PINs used to log into each department from the landing page
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.
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.
Each agent has their own PIN, separate from department PINs above. Add a new agent or reset an existing one's PIN.
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.
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.
One QR code per room, linking straight to that room's self-order page. Print and place one in each room (on the desk, nightstand, or door).
Your own booking page β guests book straight into HotelLedger, no OTA, no commission, no third party in between.
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.
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.
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.
Type your hotel's real Paystack keys in directly β nobody else ever needs to handle them.
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.
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.
Control which OTA channels Front Desk can connect to β different properties sell through different OTAs.
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).
All staff across every department in one place
One place to create any staff login β pick the department first, the right fields appear below.
Individual F&B logins with personal PINs
Individual Housekeeping logins with personal PINs
Who is currently logged into the system
A correct PIN alone is no longer enough for Front Desk, F&B, Housekeeping, or department logins β the device itself must be approved here first. Admin/GM's own login is separate and unaffected.
Every action across all modules β Front Desk, F&B, AP, Maintenance, Petty Cash and more
Every guest SMS sent (reservation confirmations, check-in/out, receipts) and its delivery status, once Africa's Talking reports back
Data integrity, sync status, and flags across all modules
Automated nightly backups, manual triggers, and per-module exports
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.
Just the backup-related entries from the system audit trail β for the complete log across every module, see π Audit Trail.
Export data from any module as CSV β or everything at once as JSON
All invoices across all months
Complete vendor master list
All F&B orders and payments
Reservations and folios
All disbursements and replenishments
All job orders and history
Complete system audit log
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.
Everything β all modules, all data, as JSON, downloaded straight to your browser right now
Correct rate_per_night on existing reservations saved with wrong rates. Updates total_amount automatically.
Irreversible actions. Always backup first.
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.
Delete all invoices for one month
Wipe the AP payment transaction log only
Delete all F&B order history
Delete all maintenance job orders
Delete ALL data across ALL modules β AP, F&B, Front Desk, Maintenance, Petty Cash, Inventory. Cannot be undone.