Booking Without Package
Description / Background
Some restaurants, like Katsuki Midori, want to let customers book a table without choosing a package in advance. Instead, guests will order and pay at the restaurant. Currently, Hungry Hub requires users to select a package when booking, which doesn’t suit all dining styles. To solve this, we’re adding a “Booking Without Package” option that restaurants can enable in the Admin Dashboard. This will let users reserve a table without picking a package, with clear messaging that they’ll order and pay on-site. The goal is to offer more flexibility to restaurants and make booking easier for customers.
Objectives
- User can book the restaurant without package
- Admin can set the restaurant without having a package
- User did not get point when book without package
- User will get the point after review the booking without package
Scope
booking process
Location
admin dashboard edit page, restaurant page, booking process
How to set booking without package
- Open Admin Dashboard
- Open Restaurant List menu

- Pick the restaurant → Action → Edit
- Search the
Accept Booking without Package?and check the box

- Click Save
- The restaurant will be receive booking without package
Sequence Diagram / Flow

ERD

Backend Implementation
- New Column:
allow_booking_without_packageadded to restaurants.- Migration:
20250519085808_add_allow_booking_without_package_to_restaurants.rb - Model: Updates in
restaurant.rb
- Migration:
- Partner & v5 APIs: Adjustments to support and process non-package bookings:
reservations_controller.rbtmp_reservation.rb- Filter update:
exclude_no_packageparam inreservations_filter.rb
- Expose the new flag in:
- Staff:
staff_serializer.rb - Restaurant:
restaurant_serializer.rb - Common fields:
restaurant_common_fields_serializer.rb
- Staff:
- Admin/Partner Form: Checkbox to toggle booking without packages:
- Slim template:
_form_fields.html.slim - Vue form:
form.vue
- Slim template:
- Booking Flow & AJAX: JS refactors and support for minimum booking time:
- Email Notifications: New/updated templates for no-package bookings:
- Bug Fixes:
- Channel selection on owner booking based on eligibility:
create_booking_for_owner.rb - Logging and method overrides:
update.rb
- Channel selection on owner booking based on eligibility:
- Internationalization: Label and translation tweaks in
views.en.ymland related files. - Refactoring and Minor Additions: Several files updated for consistency, improved validation, and better metadata handling.
-
- The quantity selectors on both desktop and mobile booking pages are now always enabled (not disabled by conditional logic).
- Files updated:
- BookingPageDesktop.vue
- BookingPageMobile.vue
- The code that conditionally disabled these selectors was removed, so users can always adjust quantities.
- TMA sync storage shortcut and related checks were removed.
- In paxQuantity.ts, logic related to TMA was deleted, including checks and calculations for totalMaximumAllowance.
- The logic for paxMaxSize was simplified, now ignoring TMA constraints.
[
github.com
https://github.com/hungryhub-team/hh-server/pull/6690
](https://github.com/hungryhub-team/hh-server/pull/6690)
[
github.com
https://github.com/hungryhub-team/hh-server/pull/6776
](https://github.com/hungryhub-team/hh-server/pull/6776)
[
github.com
https://github.com/hungryhub-team/hh-server/pull/6777
](https://github.com/hungryhub-team/hh-server/pull/6777)
Hybrid Implementation
- Adds a new boolean field,
allowBookingWithoutPackage, in restaurant-related types and schemas (e.g.,Restaurant, booking detail API, Pinia stores). - This flag is propagated through API responses, store states, and props to various components.
- Updates the booking and confirmation components to check the
allowBookingWithoutPackageflag. - When this flag is
true:- Users can book a restaurant without selecting a package.
- The UI and flow are adapted to hide package selection, payment, offers, and gift card sections as appropriate.
- Checkout validation is relaxed: booking is allowed as long as required fields like date, time, and party size are filled, even if no package is selected.
- Many components (e.g.,
BookingCardImage.vue,BookingHeader.vue,BookingConfirmation.vue, etc.) receive new props and conditional logic to support the new booking mode. - New components are introduced:
RestaurantBookWithoutPackage.vue: Handles booking in the "without package" mode.RestaurantBranchView.vue,RestaurantLocationView.vue, andRestaurantInformation.astro: Help display relevant restaurant information and navigation in the new flow.
- Navigation (section nav) and layout are updated to support and highlight the new experience, especially for desktop/mobile parity.
- Restaurant and booking-related Pinia stores are extended to track and react to the new flag.
- Bookings, confirmation, and summary logic are updated to consider the "book without package" scenario when determining what to show or require.
- The booking and confirmation pages adapt their content and available actions when
allowBookingWithoutPackageis enabled. - Section navigation is updated to show/hide relevant sections based on this mode.
- Edge cases (like button visibility, form validation, or summary display) are handled to avoid errors or confusion for users.
[
github.com
https://github.com/hungryhub-team/hh-pegasus/pull/1736
](https://github.com/hungryhub-team/hh-pegasus/pull/1736)
[
github.com
https://github.com/hungryhub-team/hh-pegasus/pull/1767
](https://github.com/hungryhub-team/hh-pegasus/pull/1767)
Partner Portal Implementation
- The PR simplifies the logic and removes checks related to package presence and custom error messages.
- Now, the action is determined only by whether the restaurant allows bookings without a package.
- Error handling for missing or inappropriate package parameters is removed or delegated to update_package_booking.
[
github.com
https://github.com/hungryhub-team/hh-server/pull/6762
](https://github.com/hungryhub-team/hh-server/pull/6762)
PRD & Task
PRD: Private (https://app.clickup.com/9003122396/docs/8ca1fpw-7922/8ca1fpw-50816)
Private (https://app.clickup.com/t/86cyygefq) Private (https://app.clickup.com/t/86cz91ccm) Private (https://app.clickup.com/t/86cz5969c) Private (https://app.clickup.com/t/86cz418r3)
Design
[
www.figma.com
https://www.figma.com/design/T9kSuAj3GZW7khySGNq84m/Store-Page-Update?node-id=9818-7238&t=gGBlyFDELt6OyVj5-1
](https://www.figma.com/design/T9kSuAj3GZW7khySGNq84m/Store-Page-Update?node-id=9818-7238&t=gGBlyFDELt6OyVj5-1)
API Blueprint
| Method | Path | URL | Description | Payload |
|---|---|---|---|---|
| ALL | /restaurants | Add new param allow_booking_without_package on the response |
New Query
-
DB Schema / Database Migration
- Add new
allow_booking_without_packagecolumn on restaurants table
Improvement:
| Feature Name | Date | What Changed | Description |
|---|---|---|---|