From c369beab924582355b540a10f578b3179bcdc9ed Mon Sep 17 00:00:00 2001 From: Padreug Date: Tue, 15 Sep 2026 23:19:05 +0200 Subject: [PATCH] =?UTF-8?q?feat(chatelet):=20book=20a=20room=20=E2=80=94?= =?UTF-8?q?=20hold,=20Lightning=20invoice,=20paid=20confirmation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Slice 2 of the guest UI. The Book button on the room page opens a dialog that collects guest count, optional contact and a note, asks the extension to hold the dates, then shows the bolt11 (QR, copy, open-in-wallet, pay from the LNbits wallet) and polls settlement until it is paid. useBookingFlow mirrors events' useTicketPurchase. Booking needs a Nostr identity (the extension DMs check-in details to the guest pubkey), so anonymous guests bounce through /login?redirect= and land back on the room with their dates in the query. Guest checkout without an account is a later slice. Settlement is polled on LNbits core's anonymous payment status until the extension grows a public booking-status endpoint; the paid-invoice listener on the extension is what confirms the booking server-side. Co-Authored-By: Claude Fable 5.1 --- .../chatelet/components/BookRoomDialog.vue | 332 ++++++++++++++++++ .../chatelet/composables/useBookingFlow.ts | 143 ++++++++ .../chatelet/views/ChateletDetailPage.vue | 62 +++- 3 files changed, 535 insertions(+), 2 deletions(-) create mode 100644 src/modules/chatelet/components/BookRoomDialog.vue create mode 100644 src/modules/chatelet/composables/useBookingFlow.ts diff --git a/src/modules/chatelet/components/BookRoomDialog.vue b/src/modules/chatelet/components/BookRoomDialog.vue new file mode 100644 index 0000000..eccdb5d --- /dev/null +++ b/src/modules/chatelet/components/BookRoomDialog.vue @@ -0,0 +1,332 @@ + + +