A cost sheet holds hotels per city per night, visa, transport, tickets and your margin, and produces a selling price for every sharing basis.
It will not save with a missing hotel rate. Instead of quietly treating it as zero, it names the city and the sharing basis that is missing, because a group priced without one of its costs looks entirely normal until the money runs out.
Build a package once with its hotels and nights, then run it as many departures as you like, each with its own dates, capacity and price.
Every departure has one screen showing money outstanding, visas outstanding, passports expiring and rooms unallotted. It says ready only when all of them are clear.
A booking can only be taken against a saved price from a cost sheet, so nobody invents a figure at the counter and two staff cannot sell the same trip for different amounts.
Split it into a deposit and instalments with the balance always due before departure. Rounding lands on the last instalment so the parts add to the whole exactly.
Scan a passport and the machine readable strip fills the form. Nothing is saved without you looking at it, and a duplicate passport number is caught before the form opens rather than after the record exists.
Six months validity is checked against the travel date before a visa can be applied for, and the message names the date it must be valid until.
Every stage is recorded with who changed it and when, and the history is on the screen rather than buried in an audit log.
A refusal that gets fixed and resubmitted starts a fresh clock, so it does not sit on the board looking stuck forever.
Allot rooms in one pass with families kept together, men and women separated, and infants taking no bed. Anything you placed by hand is never overwritten.
Makkah and Madinah are handled separately, because they usually are.
Bank transfer works from the first day: the customer pays into your account and your staff confirm the slip. Wallets and cards work once your own merchant account is approved.
Every online attempt is recorded before the customer leaves for the bank, so a payment that never came back can still be matched against their statement. A repeated confirmation never credits a booking twice.
Real double entry underneath: a chart of accounts, journal entries that must balance to the paisa, a trial balance and a profit and loss.
Bookings and payments post themselves. Entries are never deleted, and corrections are posted as reversals so the history stands.
Give an agent a fixed amount off each ticket, a percentage off packages, or a contracted price. A floor stops a mistyped discount selling below cost.
Their statement is your ledger filtered to them, so there is no second set of figures to argue about. Credit is checked before the booking exists, because telling an agent afterwards means taking back a seat you already promised.
Your logo, your colours, your words, on your own domain. Packages, hotels and vehicles appear from your own records, and only the ones you chose to publish.
Nothing goes public by default: every hotel and package has a separate switch for advertising it, because agencies keep options they price with but do not sell openly.
Visitors price their own trip and get a printable quote on your letterhead with a reference number, an expiry date and the exchange rate used.
Every quote is recorded, so whatever reference a customer walks in holding, your office can look it up. That record is what makes it safe to put your name on the page.
Contact, transport and package enquiries land in one inbox showing how long each has waited. Anything over a day turns red, because that is the number that decides whether a website earns anything.
Your pilgrims sign in to see what they paid, what is left, their instalment dates, their visa status and their room. That is two phone calls a day your counter staff get back.