{"id":15,"date":"2026-04-17T09:49:07","date_gmt":"2026-04-17T09:49:07","guid":{"rendered":"http:\/\/martinkendrick.co.uk\/?page_id=15"},"modified":"2026-04-17T09:49:07","modified_gmt":"2026-04-17T09:49:07","slug":"booking-board","status":"publish","type":"page","link":"https:\/\/martinkendrick.co.uk\/","title":{"rendered":"Booking Board"},"content":{"rendered":"    <div class=\"container\" id=\"app\">\n      <div class=\"card topbar\">\n        <div class=\"brand-wrap\"><img decoding=\"async\" src=\"https:\/\/martinkendrick.co.uk\/wp-content\/plugins\/thao-nguyen-booking-board-plugin\/assets\/logo-love-hotel.png\" alt=\"Thao Nguyen logo\" class=\"brand-logo\" \/><h1 class=\"title\" data-i18n=\"appTitle\">Thao Nguyen Homestay<\/h1><\/div>\n        <div class=\"toolbar-stack\">\n          <label class=\"language-toggle\"><span data-i18n=\"languageVietnamese\">Ti\u1ebfng Vi\u1ec7t<\/span><input id=\"languageToggle\" type=\"checkbox\" \/><span data-i18n=\"languageEnglish\">English<\/span><\/label>\n          <div class=\"toolbar-actions\">\n            <button id=\"exportBtn\" type=\"button\" class=\"btn-secondary\" data-i18n=\"exportBookings\">Export Bookings<\/button>\n            <button id=\"importBtn\" type=\"button\" class=\"btn-secondary\" data-i18n=\"importBookings\">Import Bookings<\/button>\n            <a href=\"https:\/\/martinkendrick.co.uk\/?page_id=134\" class=\"btn-secondary\" id=\"reportsBtn\">Reports<\/a>\n            <button id=\"signOutBtn\" type=\"button\" class=\"btn-danger hidden\" data-i18n=\"signOut\">Sign out<\/button>\n            <input id=\"importFileInput\" type=\"file\" accept=\"application\/json,.json\" style=\"display:none\" \/>\n          <\/div>\n          <div class=\"stats\">\n            <div class=\"stat\"><div class=\"stat-label\" data-i18n=\"statRooms\">Rooms<\/div><div class=\"stat-value\" id=\"roomsCount\">0<\/div><\/div>\n            <div class=\"stat\"><div class=\"stat-label\" data-i18n=\"statBookings\">Bookings<\/div><div class=\"stat-value\" id=\"bookingsCount\">0<\/div><\/div>\n            <div class=\"stat\"><div class=\"stat-label\" data-i18n=\"statHoursBooked\">Hours Booked<\/div><div class=\"stat-value\" id=\"hoursCount\">0<\/div><\/div>\n            <div class=\"stat\"><div class=\"stat-label\" data-i18n=\"statUtilisation\">Utilisation<\/div><div class=\"stat-value\" id=\"occupancyCount\">0%<\/div><\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <div id=\"authShell\" class=\"auth-wrap card section hidden\">\n        <div data-auth-panel=\"login\">\n          <h2 data-i18n=\"loginTitle\">Staff sign in<\/h2>\n          <p class=\"muted\" data-i18n=\"loginSubtitle\">Sign in to use the shared booking board.<\/p>\n          <form id=\"loginForm\" class=\"form-grid\">\n            <div><label data-i18n=\"email\">Email<\/label><input type=\"email\" name=\"email\" required><\/div>\n            <div><label data-i18n=\"password\">Password<\/label><input type=\"password\" name=\"password\" required><\/div>\n            <button class=\"btn\" type=\"submit\" data-i18n=\"signIn\">Sign in<\/button>\n          <\/form>\n          <div class=\"inline-actions\" style=\"margin-top:12px\">\n            <button class=\"btn-secondary\" type=\"button\" id=\"authShowRegister\" data-i18n=\"createAccount\">Create account<\/button>\n            <button class=\"btn-secondary\" type=\"button\" id=\"authShowReset\" data-i18n=\"forgotPassword\">Forgot password?<\/button>\n          <\/div>\n        <\/div>\n        <div data-auth-panel=\"register\" class=\"hidden\">\n          <h2 data-i18n=\"registerTitle\">Create staff account<\/h2>\n          <form id=\"registerForm\" class=\"form-grid\">\n            <div><label data-i18n=\"email\">Email<\/label><input type=\"email\" name=\"email\" required><\/div>\n            <div><label data-i18n=\"password\">Password<\/label><input type=\"password\" name=\"password\" required><\/div>\n            <div><label>Invite code<\/label><input type=\"text\" name=\"invite_code\" required><\/div>\n            <button class=\"btn\" type=\"submit\" data-i18n=\"register\">Register<\/button>\n          <\/form>\n          <button class=\"btn-secondary\" type=\"button\" id=\"authShowLogin\" style=\"margin-top:12px\" data-i18n=\"backToLogin\">Back to login<\/button>\n        <\/div>\n        <div data-auth-panel=\"reset\" class=\"hidden\">\n          <h2 data-i18n=\"resetTitle\">Reset password<\/h2>\n          <form id=\"resetForm\" class=\"form-grid\">\n            <div><label data-i18n=\"email\">Email<\/label><input type=\"email\" name=\"email\" required><\/div>\n            <button class=\"btn\" type=\"submit\" data-i18n=\"sendReset\">Send reset link<\/button>\n          <\/form>\n          <button class=\"btn-secondary\" type=\"button\" id=\"authShowLogin\" style=\"margin-top:12px\" data-i18n=\"backToLogin\">Back to login<\/button>\n        <\/div>\n        <div id=\"authMessage\" class=\"message\"><\/div>\n        \n      <\/div>\n\n      <div id=\"setupShell\" class=\"hidden\"><\/div>\n\n      <div id=\"appShell\" class=\"hidden\">\n        <div class=\"main-grid\">\n          <div class=\"card section\">\n            <h2 data-i18n=\"availabilityTitle\">Availability Search<\/h2>\n            <div class=\"filters\">\n              <div><label for=\"filterDate\" data-i18n=\"bookingDate\">Booking date<\/label><input id=\"filterDate\" type=\"date\" \/><\/div>\n              <div><label for=\"filterGuests\" data-i18n=\"guests\">Guests<\/label><input id=\"filterGuests\" type=\"number\" min=\"1\" max=\"4\" value=\"2\" \/><\/div>\n              <div><label for=\"filterTime\" data-i18n=\"startingTime\">Start time<\/label><input id=\"filterTime\" type=\"time\" step=\"300\" value=\"12:00\" \/><\/div>\n              <div><label for=\"filterDuration\" data-i18n=\"finishTime\">Period<\/label><select id=\"filterDuration\"><\/select><\/div>\n              <div><label for=\"filterRoom\" data-i18n=\"room\">Room<\/label><select id=\"filterRoom\"><\/select><\/div>\n            <\/div>\n            <div id=\"availabilityList\" style=\"margin-top:20px;\"><\/div>\n          <\/div>\n          <div class=\"card section\">\n            <h2 data-i18n=\"createBooking\">Create Booking<\/h2>\n            <form id=\"bookingForm\" class=\"form-grid\">\n              <div><label for=\"guestName\" data-i18n=\"guestName\">Guest name<\/label><input id=\"guestName\" type=\"text\" \/><\/div>\n              <div><label for=\"phoneNumber\" data-i18n=\"phoneNumber\">Phone Number<\/label><input id=\"phoneNumber\" type=\"text\" inputmode=\"tel\" autocomplete=\"tel\" \/><\/div>\n              <div><label for=\"roomId\" data-i18n=\"room\">Room<\/label><select id=\"roomId\"><\/select><\/div>\n              <div><label for=\"formDate\" data-i18n=\"bookingDate\">Booking date<\/label><input id=\"formDate\" type=\"date\" \/><\/div>\n              <div class=\"inline-grid-2\">\n                <div id=\"startTimeGroup\"><label for=\"startTime\" data-i18n=\"startTime\">Start time<\/label><input id=\"startTime\" type=\"time\" step=\"300\" value=\"12:00\" \/><\/div>\n                <div id=\"ratePlanGroup\"><label for=\"ratePlan\" data-i18n=\"ratePlan\">Rate plan<\/label><select id=\"ratePlan\"><\/select><\/div>\n              <\/div>\n              <div class=\"inline-grid-2\">\n                <div id=\"customDaysGroup\"><label for=\"customDays\" data-i18n=\"customDays\">Custom day booking<\/label><select id=\"customDays\"><\/select><\/div>\n                <div id=\"customHoursGroup\"><label for=\"customHours\" data-i18n=\"customHours\">Custom hour booking<\/label><input id=\"customHours\" type=\"number\" min=\"1\" step=\"1\" value=\"1\" \/><\/div>\n                <div id=\"customTotalGroup\"><label for=\"customTotal\" data-i18n=\"customTotal\">Custom total (VND)<\/label><input id=\"customTotal\" type=\"text\" inputmode=\"numeric\" placeholder=\"0\" \/><\/div>\n              <\/div>\n              <div class=\"inline-grid-2\">\n                <div id=\"supplementaryChargeGroup\"><label for=\"supplementaryCharge\" data-i18n=\"supplementaryCharge\">Supplementary Charges \/ Discount (VND)<\/label><input id=\"supplementaryCharge\" type=\"text\" inputmode=\"numeric\" placeholder=\"0\" \/><\/div>\n                <div id=\"supplementaryNoteGroup\"><label for=\"supplementaryNote\" data-i18n=\"supplementaryNote\">Supplementary note<\/label><input id=\"supplementaryNote\" type=\"text\" placeholder=\"Reason for cost\/discount\" \/><\/div>\n              <\/div>\n              <div class=\"inline-grid-2\">\n                <div id=\"depositPaidGroup\"><label for=\"depositPaid\" data-i18n=\"depositPaid\">Deposit Paid (VND)<\/label><input id=\"depositPaid\" type=\"text\" inputmode=\"numeric\" placeholder=\"0\" \/><\/div>\n                <div id=\"balanceToPayGroup\"><label for=\"balanceToPay\" data-i18n=\"balanceToPay\">Balance to pay (VND)<\/label><input id=\"balanceToPay\" type=\"text\" readonly value=\"\u2014\" \/><\/div>\n              <\/div>\n              <div><label for=\"formGuests\" data-i18n=\"guests\">Guests<\/label><input id=\"formGuests\" type=\"number\" min=\"1\" max=\"4\" value=\"2\" \/><\/div>\n              <div class=\"summary-box\">\n                <div class=\"summary-row\"><span data-i18n=\"durationLabel\">Duration<\/span><strong id=\"hoursValue\">\u2014<\/strong><\/div>\n                <div class=\"summary-row\"><span data-i18n=\"roomLabel\">Room<\/span><strong id=\"typeValue\">\u2014<\/strong><\/div>\n                <div class=\"summary-row\"><span data-i18n=\"totalLabel\">Total<\/span><strong id=\"totalValue\">\u2014<\/strong><\/div>\n              <\/div>\n              <div id=\"formMessage\" class=\"message\"><\/div>\n              <div class=\"form-actions\"><button type=\"submit\" class=\"btn\" data-i18n=\"addBooking\">Save<\/button><button type=\"button\" id=\"cancelBookingBtn\" class=\"btn-secondary btn-cancel\" data-i18n=\"cancelBooking\">Cancel<\/button><\/div>\n            <\/form>\n          <\/div>\n        <\/div>\n\n        <div id=\"plannerPanel\" class=\"card planner-card\" style=\"margin-bottom:20px;\">\n          <div class=\"planner-toolbar\">\n            <div>\n              <h2 style=\"margin:0 0 6px;\" data-i18n=\"boardTitle\">Bookings Board<\/h2>\n              <div class=\"planner-meta\" data-i18n=\"boardSubtitle\">The planner shows a normal 00:00 to 00:00 day. Custom day bookings still follow their own 11:00 to 11:00 stay rule.<\/div>\n            <\/div>\n            <div><label for=\"boardDate\" style=\"margin-bottom:6px;\" data-i18n=\"boardDate\">Board date<\/label><input id=\"boardDate\" type=\"date\" style=\"min-width:180px;\" \/><\/div>\n          <\/div>\n          <div class=\"planner-mobile-hint\" data-i18n=\"boardScrollHint\">On phone or tablet, swipe sideways to see the full planner timeline.<\/div>\n          <div id=\"plannerWrap\" class=\"planner-wrap\" tabindex=\"0\">\n            <div id=\"plannerGrid\" class=\"planner-grid\"><\/div>\n          <\/div>\n          <div class=\"planner-help\" data-i18n=\"boardHelp\">The planner shows a normal 00:00 to 00:00 day. Overnight bookings still run from 21:50 to 09:00 next day, and custom day stays still run 11:00 to 11:00 next day.<\/div>\n        <\/div>\n\n        <div class=\"card section\">\n          <div class=\"section-heading-row\"><h2 data-i18n=\"currentBookings\">Current Bookings<\/h2><label class=\"history-filter-label\"><span data-i18n=\"bookingHistoryView\">Booking history<\/span><select id=\"bookingHistoryView\"><option value=\"current\" data-i18n=\"historyCurrent\">Current<\/option><option value=\"past_week\" data-i18n=\"historyPastWeek\">Past week including current<\/option><option value=\"past_month\" data-i18n=\"historyPastMonth\">Past month including current<\/option><option value=\"past_year\" data-i18n=\"historyPastYear\">Past year including current<\/option><\/select><\/label><\/div>\n          <div class=\"table-wrap\"><table><thead><tr><th data-i18n=\"guest\">Guest<\/th><th data-i18n=\"room\">Room<\/th><th data-i18n=\"date\">Date<\/th><th data-i18n=\"time\">Time<\/th><th data-i18n=\"ratePlan\">Rate plan<\/th><th data-i18n=\"guests\">Guests<\/th><th data-i18n=\"balanceDue\">Balance Due<\/th><th data-i18n=\"action\">Action<\/th><\/tr><\/thead><tbody id=\"bookingsTableBody\"><\/tbody><\/table><\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n    \n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-15","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/martinkendrick.co.uk\/index.php?rest_route=\/wp\/v2\/pages\/15","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/martinkendrick.co.uk\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/martinkendrick.co.uk\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/martinkendrick.co.uk\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/martinkendrick.co.uk\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=15"}],"version-history":[{"count":1,"href":"https:\/\/martinkendrick.co.uk\/index.php?rest_route=\/wp\/v2\/pages\/15\/revisions"}],"predecessor-version":[{"id":47,"href":"https:\/\/martinkendrick.co.uk\/index.php?rest_route=\/wp\/v2\/pages\/15\/revisions\/47"}],"wp:attachment":[{"href":"https:\/\/martinkendrick.co.uk\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=15"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}