Skip to content

Releases: gumslone/doba

v0.4.0

v0.4.0 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 22 Sep 18:20

What's new since v0.3.0

Easy install, for people who are not technical

  • Docker image ghcr.io/gumslone/doba (amd64 and arm64): one container, one /data volume, the same wizard; updating is pulling a newer image. docker compose up -d works out of the box.
  • No cron? No problem. Where a host offers no cron, visitor traffic runs the scheduler after the response has gone out; a real cron always wins, and the health page says which one is doing the work.
  • The installer explains PHP versions. On a host running an older PHP, doba-installer.php guesses the control panel (cPanel, Plesk, DirectAdmin, IONOS) and shows where the setting lives, step by step.

Getting users

  • Public demo mode (DOBA_DEMO=true): builds a living demo hotel on first boot, prints the admin login on every page, keeps the desk working while the dangerous half of the admin is read-only, and rebuilds itself nightly.
  • A landing page for hoteliers at gumslone.github.io/doba, in English and German, with a commission calculator.
  • Contributing guide, security policy with private reporting, issue forms (including one for a stuck installation), a changelog, a page for web agencies.

For the hotel

  • The admin panel and the install wizard in six languages, chosen per member of staff.
  • Gift vouchers — ordered online in six languages, paid to the hotel directly, activated in the admin and mailed as a PDF; or sold at the desk. Redeemed by code on the booking page as a payment, never a discount. FEATURE_VOUCHERS=true.
  • Online check-in — the registration form for the whole party, filled in from three days before arrival, printed at the desk for the signature. Encrypted at rest, in GDPR exports, destroyed a year after departure. FEATURE_ONLINE_CHECKIN=true.
  • Unfinished-booking reminder — one mail about an hour after an unpaid hold expires, only while the room is still free. Off by default: check your country's consent rules. DOBA_MAIL_RECOVERY=true.
  • Google rates — the column to copy into the Google Business Profile so the hotel's own site gets a free booking link with a price next to the portals.
  • The admin installs as a phone app; the thank-you mail tells a returning guest their discount.

Quality

  • Accessibility (WCAG 2.1 AA) and Lighthouse run in CI on every push. The first audit found 47 contrast failures on one page; the theme now derives readable text colours from any preset or brand colour.

Fixed

  • Production forced every URL to https even when the site address was http, so a first look on localhost redirected to a port that speaks no TLS.
  • The env writer replaced a symlinked .env with a plain file.
  • The directory's ETag could be cut a second before its install id was stored.
  • The guest theme's headings restyled the whole admin.
  • A timestamp was printed above the checkout title.

656 tests on SQLite, 655 on MySQL. Still pre-release: no hotel has run on this yet.

Installing fresh

Upload doba-installer.php to your webspace by FTP and open it in a browser — or with Docker:

docker run -d -p 8080:80 -v doba-data:/data -e DOBA_URL=http://localhost:8080 ghcr.io/gumslone/doba

or with a shell:

curl -fsSL https://raw.githubusercontent.com/gumslone/doba/main/scripts/install.sh | bash

Updating from v0.3.0

Download the tarball, extract it over your install, then open Admin → Update and press Run the update. It checks the server first, snapshots your database, migrates, and refuses to reopen the site unless it actually serves. With a shell: php artisan doba:update. With Docker: pull the newer image.

Migrations: gift vouchers, booking registrations, a reply on enquiries, a recovery stamp on bookings, and a language on users. Every new feature is off until you switch it on.

v0.3.0

v0.3.0 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 08 Sep 23:23

What's new since v0.2.0

  • Apartments — a room type is a room or an apartment, sold through the same funnel. An apartment carries a cleaning fee charged once per unit per stay (its own invoice line, inside the deposit, outside every discount), a minimum stay of its own under the calendar's per-date minimum, bedrooms and bathrooms on the page, and schema.org/Apartment for search engines. The API, the OpenAPI contract and the directory quote carry the fee so an aggregator cannot make a flat look cheaper than the room beside it.
  • The admin account — a TOTP second factor with recovery codes, a remember-me that means it, and doba:admin:reset-password for the way back in from the shell.
  • The desk — bookings taken by phone or walk-in, stays moved without breaking the calendar, hotel settings and room types editable in the panel, and credit notes for what a cancelled stay left behind.
  • Offsite backups and alerts — snapshots copied to any Laravel disk (S3 included), and a mail to the hotel when a job fails, a backup fails or availability drifts.
  • Two rooms on one booking, verified reviews, a returning-guest discount, and four feature flags that had never actually been read.
  • Hardening — sanitised HTML on every editor field, no inline script under the CSP, erasure takes reviews with it.
  • The four small things — an enquiries inbox whose answers go out as the hotel's own mail, the guest mails in the hotel's own words, a phone-sized housekeeping list with one button per door, and the invoice CSV the accountant asks for, VAT split by rate.
  • Bugs found on the way — eight places that counted "today" on the server's clock instead of the hotel's, a primed search dropping its departure row for a hotel-timezone check-out, and a timestamp printed above the checkout title.

593 tests on SQLite, 592 on MySQL. Still pre-release: no hotel has run on this yet.

Installing fresh

Upload doba-installer.php to your webspace by FTP and open it in a browser — or with a shell:

curl -fsSL https://raw.githubusercontent.com/gumslone/doba/main/scripts/install.sh | bash

Updating from v0.2.0

Download the tarball, extract it over your install, then open Admin → Update and press Run the update. It checks the server first, snapshots your database, migrates, and refuses to reopen the site unless it actually serves. With a shell: php artisan doba:update.

Two migrations land: apartment fields on room types and bookings, and the reply columns on enquiries. Existing room types stay rooms with no fee and no minimum.

The tarball carries vendor/ and the built assets, so no Composer or Node is needed on the server. Your .env, database and uploads are untouched by extracting it.

v0.2.0

v0.2.0 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 30 Aug 17:21

What's new since v0.1.0

  • Partner API hardened — hand-written OpenAPI 3.1 contract enforced by tests, and the idempotency race fixed: one key could take two rooms when a retry overtook its original; the key is now claimed before the work.
  • Updates that cannot leave a broken hotel — health checks refuse to start on a copy that cannot serve or run the new release, and after migrating the site must prove it answers (from a fresh process) before it reopens.
  • Two installers for the mile before the wizard — doba-installer.php, one file uploaded by FTP and opened in a browser, and a curl-able install.sh. Both are attached below and were smoke-tested against this exact tarball.
  • Money, finished — the guest pays the balance from their manage page; city tax is computed, shown before booking and invoiced on its own line; pre-arrival and post-stay mail send themselves and can never mail anyone twice.
  • The guest book — profiles with stay history and lifetime value, GDPR export and erasure as buttons, a retention clock, and marketing consent staff can withdraw but never grant.
  • Physical rooms — numbers and floors, front-desk assignment with a no-double-booking guarantee, and check-out putting the door on housekeeping's list.
  • Directory listing (opt-in) — /.well-known/doba.json and a credential-free live-quote endpoint, so an aggregator can find the hotel without ever taking the booking.
  • Ukrainian and Polish across the whole guest surface, Cyrillic URLs included, with key parity across all six languages pinned by a test.

489 tests on SQLite, 488 on MySQL. Still pre-release: no hotel has run on this yet.

Installing fresh

Upload doba-installer.php to your webspace by FTP and open it in a browser — or with a shell:

curl -fsSL https://raw.githubusercontent.com/gumslone/doba/main/scripts/install.sh | bash

Updating from v0.1.0

Download the tarball, extract it over your install, then open Admin → Update and press Run the update. It checks the server first, snapshots your database, migrates, and refuses to reopen the site unless it actually serves. With a shell: php artisan doba:update.

The tarball carries vendor/ and the built assets, so no Composer or Node is needed on the server. Your .env, database and uploads are untouched by extracting it.

v0.1.0

v0.1.0 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 18 Aug 18:49

Download the tarball, extract it over your install, then open
Admin → Update and press Run the update. It snapshots your
database first and puts the snapshot back if anything fails.

With a shell: php artisan doba:update.

The tarball carries vendor/ and the built assets, so no Composer
or Node is needed on the server. Your .env, database and uploads
are untouched by extracting it.