Releases: gumslone/doba
Release list
v0.4.0
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/datavolume, the same wizard; updating is pulling a newer image.docker compose up -dworks 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.phpguesses 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
.envwith 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
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/Apartmentfor 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-passwordfor 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
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-ableinstall.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.jsonand 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
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.