{{ currentView === 'timeline' ? 'Calendar' : (currentView === 'bookings' ? 'All Bookings' : (currentView === 'cabins' ? 'Cabins & Rates' : (currentView === 'maintenance' ? 'Maintenance' : (currentView === 'housekeeping' ? 'Housekeeping' : 'Staff & Access')))) }}

Date:
Open Confirmed Occupied (In) Dirty (Out) Pending
๐Ÿ“… {{ selectedDatesSummary ? selectedDatesSummary.label : '' }} {{ selectedDatesSummary ? selectedDatesSummary.count : 0 }} {{ selectedDatesSummary && selectedDatesSummary.count === 1 ? 'NIGHT' : 'NIGHTS' }} {{ availableCabinIdsForSelection.length }} of {{ cabins.length }} Cabins Available
Date
{{ formatCabinId(cabin.id) }}
${{ (cabin.base_rate / 100).toFixed(0) }}
โ˜… FOCUS
โœ“ OPEN
{{ day.formattedDate }}
โœ“ {{ day.weekday }}
Guest Name Contact Info Address Cabin Stay Dates Billed / Paid Status Action
No active reservations found in database.
{{ b.first_name }} {{ b.last_name }}
{{ b.email }}
{{ b.phone || 'No phone' }}
{{ b.address || 'โ€”' }}
{{ b.city ? `${b.city}, ${b.state} ${b.zip}` : '' }} {{ b.country !== 'United States' ? b.country : '' }}
{{ formatCabinId(b.cabin_id) }} {{ b.cabin_name }}
{{ b.check_in }} → {{ b.check_out }}
+{{ b.extra_adults }} Extra Adult(s) ๐Ÿพ {{ b.pets }} Pet(s)
${{ (b.total_amount / 100).toFixed(2) }}
Paid: ${{ (b.paid_amount / 100 || 0).toFixed(2) }}
{{ b.status === 'CHECKED_IN' ? 'CHECKED IN (IN)' : (b.status === 'CHECKED_OUT' ? 'CHECKED OUT (DIRTY)' : b.status) }}
๐Ÿ”
Sort:
๐Ÿ“…
Beds:
Sleeps:
Showing {{ filteredCabins.length }} of {{ cabins.length }} units
๐Ÿ”

No cabins match your selected filters

Try relaxing your filter criteria or clearing your search query.

{{ formatCabinId(cabin.id) }} ๐ŸŒŠ Riverfront
${{ (cabin.base_rate / 100).toFixed(0) }} /nt

{{ cabin.name }}

Beds
๐Ÿ›๏ธ {{ getCabinBeds(cabin.amenities).total }}
{{ getCabinBeds(cabin.amenities).detail }}
Baths
๐Ÿšฟ {{ getCabinBaths(cabin.amenities).total }}
{{ getCabinBaths(cabin.amenities).detail }}
Sleeps
๐Ÿ‘ฅ {{ cabin.capacity }}
Max Guests
Avail: {{ cabinFilters.checkIn }}→{{ cabinFilters.checkOut }}
${{ getCabinStayPrice(cabin) }} total w/ tax
๐ŸŒŠ River ๐Ÿณ Kitchen ๐Ÿชต Fireplace ๐ŸŒ… Porch ๐Ÿพ Pets

{{ cabin.amenities }}

๐Ÿ”’ Notes Staff
Saving... Saved โœ“
Auto-saves on leave {{ (cabinNotes[cabin.id] || '').length }} chars
๐Ÿ”ง

Maintenance & Work Orders

Subdomain Ready
โ†— Subdomain
Total Units
{{ cabins.length }}
All registered cabins
Operational
{{ getMaintenanceCount('OPERATIONAL') }}
Ready for occupancy
Needs Attention
{{ getMaintenanceCount('ATTENTION') }}
Minor fixes required
Out of Order
{{ getMaintenanceCount('URGENT') }}
Active maintenance blocking

Unit Maintenance Status

Click any card to edit issues or dispatch
{{ formatCabinId(cabin.id) }} {{ cabin.name }}
{{ issue.priority }} {{ issue.category }}
{{ issue.description }}
Reported by {{ issue.reported_by }}
Issue: {{ getMaintenanceStatus(cabin.id).issue }}
No reported issues
Dispatch โ†—
Embed: {{ maintenanceUrl }}
๐Ÿงน

Housekeeping & Room Turnover

Subdomain Ready
โ†— Open Subdomain
Clean & Ready
{{ getHousekeepingCount('CLEAN') }}
Ready for check-in
Occupied
{{ getHousekeepingCount('OCCUPIED') }}
Guest checked in
Dirty / Checkout
{{ getHousekeepingCount('DIRTY') }}
Requires turnover
In Progress
{{ getHousekeepingCount('IN_PROGRESS') }}
Housekeeper cleaning
Inspected
{{ getHousekeepingCount('INSPECTED') }}
Supervisor verified
Click any card to cycle status or open subdomain
{{ sec.icon }}

{{ sec.title }}

{{ sec.cabins.length }} unit{{ sec.cabins.length === 1 ? '' : 's' }}
Guest currently checked in Requires turnover cleaning
No cabins currently in {{ sec.title }}.
{{ formatCabinId(cabin.id) }} {{ cabin.name }}
Assigned:
Beds/Baths: {{ getCabinBeds(cabin.amenities).total }} Beds โ€ข {{ getCabinBaths(cabin.amenities).total }} Bath
Subdomain โ†—
Embed: {{ housekeepingUrl }}
๐Ÿ‘ฅ

Employee Access & Staff Roster

Manage employee email authorizations and portal permissions for Maintenance and Housekeeping.

๐Ÿ”’ Zero Public Access Active: Only email addresses listed below can request a 6-digit PIN to access maintenance.skylinelodge.net and housekeeping.skylinelodge.net.
{{ employees.length }} Registered Staff
Employee Name Email Address Department Access Status Last Login Actions
No employees configured yet. Click "+ Add Employee" above to authorize a team member.
{{ emp.first_name }} {{ emp.last_name }} {{ emp.email }} โญ All Portals ๐Ÿ”ง Maintenance ๐Ÿงน Housekeeping {{ emp.status }} {{ emp.last_login_at ? new Date(emp.last_login_at).toLocaleString() : 'Never' }}
๐Ÿ‘ค

{{ employeeForm.id ? 'Edit Employee' : 'Add New Employee' }}

Verification PINs will be sent to this email when they log in on their mobile devices.

{{ formatCabinId(cabinContextMenu.cabin.id) }} | ${{ (cabinContextMenu.cabin.base_rate / 100).toFixed(0) }}/nt
{{ cabinContextMenu.cabin.name }}
โ†— maintenance.skylinelodge.net โ†— housekeeping.skylinelodge.net
๐Ÿ—บ๏ธ

{{ getCabinById(activeMapModal)?.name }} — Birdseye Grounds Map

{{ activeMapModal.toLowerCase().startsWith('cc') ? 'Conejos River Property' : 'Sky Line Lodge Resort Grounds' }}

Red pin and beacon highlight the exact location of {{ formatCabinId(activeMapModal) }}.

New Reservation

{{ formatCabinId(form.cabinId) }}
Stay Details {{ getDayOfWeek(form.checkIn, 'short') }} โ†’ {{ getDayOfWeek(form.checkOut, 'short') }} ({{ newResSummary ? newResSummary.nights : 1 }} nt)
Nights:
{{ newResSummary ? newResSummary.nights : 1 }}
{{ getDayOfWeek(form.checkIn) }}
๐Ÿ“… {{ formatDateWithDay(form.checkIn) }}
{{ getDayOfWeek(form.checkOut) }}
๐Ÿ“… {{ formatDateWithDay(form.checkOut) }}
${{ form.extraAdultFee }}/night
guests @
$ /nt
Nightly fee for guests age 6 and over
${{ form.petFee }}/night
pets @
$ /nt
Nightly fee for pets in designated units
Guest Information
Billing Summary
Base Stay: ${{ (newResSummary.rate / 100).toFixed(0) }} ร— {{ newResSummary.nights }} night(s):
{{ formatDateWithDay(form.checkIn) }} โ†’ {{ formatDateWithDay(form.checkOut) }}
${{ (newResSummary.baseSubtotal / 100).toFixed(2) }}
Extra Adults ({{ newResSummary.extraAdultsCount }}) ร— ${{ (newResSummary.extraAdultRateCents / 100).toFixed(0) }}/nt ร— {{ newResSummary.nights }} nts: ${{ (newResSummary.extraAdultsSubtotal / 100).toFixed(2) }}
Pets ({{ newResSummary.petsCount }}) ร— ${{ (newResSummary.petRateCents / 100).toFixed(0) }}/nt ร— {{ newResSummary.nights }} nts: ${{ (newResSummary.petsSubtotal / 100).toFixed(2) }}
Hotel & Lodging Tax (6.8%): ${{ (newResSummary.tax / 100).toFixed(2) }}
Total Amount: ${{ (newResSummary.total / 100).toFixed(2) }}

Reservation Details

{{ formatCabinId(detailsForm.cabinId) }}
Stay Details {{ getDayOfWeek(detailsForm.checkIn, 'short') }} โ†’ {{ getDayOfWeek(detailsForm.checkOut, 'short') }} ({{ detailsStayNights }} nt)
Nights:
{{ detailsStayNights }}
{{ getDayOfWeek(detailsForm.checkIn) }}
๐Ÿ“… {{ formatDateWithDay(detailsForm.checkIn) }}
{{ getDayOfWeek(detailsForm.checkOut) }}
๐Ÿ“… {{ formatDateWithDay(detailsForm.checkOut) }}
${{ detailsForm.extraAdultFee }}/nt
guests @
$ /nt
Nightly fee for guests age 6 and over
${{ detailsForm.petFee }}/nt
pets @
$ /nt
Nightly fee for pets in designated units
Billing & Payments
Total Billed
${{ (detailsForm.totalAmount / 100).toFixed(2) }}
incl. 6.8% tax
Total Paid
${{ (selectedBooking?.paid_amount / 100 || 0).toFixed(2) }}
recorded
Balance Due
${{ (detailsBalanceDue / 100).toFixed(2) }}
{{ detailsBalanceDue > 0 ? 'Pending' : 'Paid in Full' }}
Record New Payment
Payment History:
${{ (p.amount / 100).toFixed(2) }} {{ p.method }} ({{ p.note }})
{{ p.created_at ? p.created_at.slice(0, 10) : '' }}
Guest Information
๐Ÿ“ Record History Note / Event Tracked with timestamp & staff attribution
Staff:
Timeline Audit ({{ bookingHistory.length }} {{ bookingHistory.length === 1 ? 'event' : 'events' }})
โณ

Loading timeline events...

๐Ÿ“œ

No history logged yet

Actions such as reservation creation, check-in, check-out, payments, and emails will automatically appear here.

{{ getHistoryActionIcon(item.action_type) }} {{ item.action_type }} {{ item.description }}
{{ formatDateTime(item.created_at) }}
Recorded by: ๐Ÿ‘ค {{ item.actor || 'Staff' }}
๐Ÿ’ณ Paid ${{ (item.details.paymentCollected / 100).toFixed(2) }} ({{ item.details.paymentMethod }}) ๐Ÿ”‘ Keys: {{ item.details.keyLabel || item.details.returnedKeys }} โš ๏ธ {{ item.details.maintenanceIssues.length }} Issue(s) Reported โœ‰๏ธ {{ item.details.to }}
Reported Maintenance Issues:
[{{ iss.category }} - {{ iss.priority }}]: {{ iss.description }}
โœ‰๏ธ

Compose Guest Email #{{ emailForm.bookingId }}

From: frontdesk@skylinelodge.net (Skyline Lodge Front Desk)

Templates:
{{ emailToast.type === 'success' ? 'โœ…' : 'โš ๏ธ' }} {{ emailToast.message }}
โ„น๏ธ Porkbun Direct SMTP Secret Setup

To send background emails directly from the Cloudflare Worker, set your Porkbun mailbox password secret in Cloudflare using:

{{ smtpNotice.setupCommand || 'npx wrangler secret put PORKBUN_SMTP_PASSWORD' }}

In the meantime, you can instantly dispatch this email using Open in Mail App or Open Porkbun Webmail below!

Official check-in 4 PM MT โ€ข Check-out 10 AM MT
๐Ÿ›Ž๏ธ

Guest Check-In Procedure {{ formatCabinId(checkInForm.cabinId) }}

{{ checkInForm.cabinName }} โ€ข Guest: {{ checkInForm.guestName }}

Cabin Readiness Status
โœจCLEAN & READY ๐Ÿ›Ž๏ธCURRENTLY OCCUPIED ๐ŸงนDIRTY (Turnover Needed) โณCLEANING IN PROGRESS ๐Ÿ”INSPECTED & APPROVED โ„น๏ธ{{ (typeof checkInForm.cabinStatus === 'object' && checkInForm.cabinStatus !== null ? (checkInForm.cabinStatus.status || 'UNKNOWN') : checkInForm.cabinStatus) }}
โš ๏ธ Notice: Housekeeping has this cabin marked DIRTY. Verify unit turnover before handing keys to guest.
Party Details & Charges Verification
Auto-updates balance for extra guests & pets
On record: {{ checkInForm.origAdults }}
Free of charge
On record: {{ checkInForm.origPets }}
{{ checkInDiffFromOrig > 0 ? 'โš ๏ธ' : 'โ„น๏ธ' }} Party adjusted at check-in ({{ checkInDiffFromOrig > 0 ? '+' : '' }}${{ (checkInDiffFromOrig / 100).toFixed(2) }} diff with Colorado tax applied). {{ checkInForm.nights }} night(s)
Total Billed
${{ (checkInForm.computedTotal / 100).toFixed(2) }}
Paid to Date
${{ (checkInForm.paidAmount / 100).toFixed(2) }}
Balance Due
${{ (checkInBalanceDue / 100).toFixed(2) }}
๐Ÿ“‹ Check-In Procedure Checklist
Linked directly to cabin cards
๐Ÿšช

Guest Check-Out Procedure {{ formatCabinId(checkOutForm.cabinId) }}

{{ checkOutForm.cabinName }} โ€ข Guest: {{ checkOutForm.guestName }}

Check-Out Timing
๐Ÿ”‘ Returned Key Status
๐Ÿ› ๏ธ Report Customer Maintenance Issues
No maintenance issues reported by customer. Click "Add Issue" if any repair or housekeeping turnover concerns were noted.
๐Ÿ“‹ Check-Out Procedure Checklist
Linked directly to cabin cards
๐Ÿ› ๏ธ

Report & Manage Maintenance

{{ formatCabinId(maintenanceForm.cabinId) }}

Log work orders, report customer repairs, or update cabin condition

๐Ÿ› ๏ธ New Maintenance Issues
No new issues queued. Click "Add Issue" above to add a maintenance or repair item.
๐Ÿ“‹ Active Work Orders ({{ getMaintenanceIssuesForCabin(maintenanceForm.cabinId).length }}) Click Resolve when fixed
{{ activeIssue.priority }} {{ activeIssue.category }} โ€ข {{ new Date(activeIssue.reported_at).toLocaleDateString() }}
{{ activeIssue.description }}
Reported by {{ activeIssue.reported_by }}