Skip to the article
Aniq-UI

HollinaStays and the stay editor

Stays and the stay editor

What a stay holds, how the team adds and edits one in the dashboard, its photographs and prices, and how publishing decides what the website shows.

For the Full Stack package

What a stay holds

PartValues
Texts, in English and ArabicTitle (160 characters), short description (500), description (5000), the location hint guests read in place of an address (500), and up to 20 house rules. English is required for the title.
Typevilla, apartment, cabin, chalet, loft or cottage, each with its own icon on the website
DestinationOne of the company's destinations
CapacityBedrooms, beds, bathrooms, the most guests it sleeps, and an optional area in square metres
PricingA nightly rate and a cleaning fee, whole US dollars, and the minimum number of nights
ArrivalCheck-in and check-out times, 15:00 and 11:00 by default, from the company settings
AmenitiesAny of the 18 the seed creates: Wi-Fi, kitchen, pool, hot tub, parking, air conditioning, heating, washer, workspace, fireplace, sea view, mountain view, garden, barbecue, pet friendly, EV charger, gym, crib
PhotographsUp to 30, in the order the website shows them; the first is the card and cover photograph
Statusdraft or published
InternalA reference given in order (S001, S002 and on), an address slug made from the title, a homepage feature flag and notes the website never shows

There is one nightly rate per stay: no seasonal or weekend rates, taxes or service fees. A quote is the nightly rate times the nights plus the cleaning fee once, and the booking keeps the figures it was made with, so a later rate change never alters what a guest agreed to pay.

Publishing and what the website shows

StatusOn the website
DraftHidden, and answers as not found on every public route. Every new stay starts here.
PublishedListed, searchable, bookable, in the sitemap, and selectable for the home page. The first publish sets its publication date, which a later re-publish keeps.
  • Publishing is refused until the stay has three photographs ("Add three photographs before publishing this stay.") and its title, short description, description and location hint in both languages.
  • To take a stay off the website, return it to draft: it disappears from every public page and keeps its bookings, reviews and history. The dashboard has no delete button. The API's delete route removes a stay only while none of its bookings holds nights; any booking that is not cancelled, a completed one included, keeps it ("This stay still has bookings that are not cancelled, so it cannot be deleted.").
  • The home page's hero and featured stays are chosen under Settings, Homepage, among published stays.

The stay list

  • Counts of all, published and draft stays, a search by stay name or reference, and filters for status, type and destination, with the most recently updated first.
  • Each row's Open button opens the stay editor, and Add stay starts a new one.
  • The dashboard has no delete button: a stay leaves the website by going back to draft. The API's delete route is there for a developer's own tools.

The stay editor

/en/dashboard/stays/new adds a stay, saved as a draft, and /en/dashboard/stays/<id> changes one. The editor holds its parts on one page, with a publishing card beside them.

PartWhat it holds
ContentThe title, short description and description in both languages, and the address slug
Type and destinationThe kind of place, its destination, and the location hint in both languages
CapacityGuests, bedrooms, beds, bathrooms and area
Pricing and arrivalNightly rate, cleaning fee, minimum nights, check-in and check-out times
AmenitiesA checklist of the amenities
House rulesA list of rules, each in both languages, added and removed with the Add and Remove buttons
PhotographsUploaded from the computer and ordered with Move earlier and Move later; position one is the cover
PublishingSave, Publish or Unpublish, the homepage feature flag, and View stay once it is published

Photographs are uploaded as they are added and re-encoded by the API as JPEG, at most 1920 pixels wide, with a smaller copy for stay cards.

The editor checks the capacity as the API does: bedrooms 0 or more, for a studio; beds, bathrooms and guests 1 or more; and the area, which may be left empty, 1 or more when it is given. It has no fields for the map position or the SEO title and description and never sends them, so a save keeps the values the stay already holds.

Who can do what

PermissionAllows
stays.viewSeeing every stay, drafts included
stays.createAdding stays
stays.editChanging details, prices and photographs
stays.publishPublishing and unpublishing
stays.deleteDeleting stays through the API's delete route (the dashboard has no delete button)

Both seeded roles, Super Admin and Manager, hold all five.

What the API checks

  • The type, the destination and every amenity key are validated against their lists, and a count or an amount below its minimum is refused with the field named: bedrooms may be 0, and every other count starts at 1 (at least one bed, one bathroom, one guest and one night, and a nightly rate of one dollar). The area is optional, and one square metre at least when it is given; the cleaning fee may be 0.
  • A slug is made unique from the title when it is not given, a slug already in use is refused, and a reference is never handed out twice.
  • The API also takes a stay's map position (latitude, longitude), its SEO title and description in both languages and photograph captions; the seed fills them for the demo stays, and the stay page draws its map only when a position is set. The stay editor never sends the map position or the SEO texts, so they are set through the API, and a save from the editor leaves them as they are.
  • The website's list takes destination (slug), checkIn and checkOut (YYYY-MM-DD, both or neither), guests, type, sort (recommended, price_asc, price_desc, rating), and pages with page and page_size (6 by default, at most 24). An unknown value in one of them is refused rather than ignored.

Stuck on a step?

Find a fix before you start over.

Troubleshooting

Cookie Preferences

We use cookies to enhance your browsing experience, analyze site traffic, and personalize content. By clicking "Accept All", you consent to our use of cookies for analytics and personalized advertising.