# ep-3 Bookingsystem

MIT court and facility booking calendar used by sports clubs, configured through PHP config files.

ep-3 Bookingsystem lets members check and book free slots of a facility (originally tennis courts) on one large calendar, with billing statuses, concurrent-booking limits, custom translations and a responsive layout. It is a LAMP application on Zend Framework 2; installation is renaming and editing config/init.php and config/autoload/local.php, then running the setup tool. No API is documented.

Alternative to: Skedda, Playtomic

- Capabilities: adaptable
- Vertical: scheduling-staffing
- Shape: business-app
- Form factor: web-app
- Execution model: deterministic
- Provenance: human-written (recorded, never ranked)
- Repo: https://github.com/tkrebs/ep3-bs (MIT), 216 stars, last commit 2026-08-15
- Last activity: 2026-08-15
- Page: apps/tkrebs--ep3-bs.html
- JSON: apps/tkrebs--ep3-bs.json

## Use it when

- our club needs members to reserve courts or rooms online and pay per slot, on cheap shared PHP hosting
- I want a booking calendar I can hand to a volunteer admin, with rules in a backend rather than in code

## Gotchas

- Zend Framework 2 with hand-patched components for PHP 8; composer install needs --ignore-platform-reqs
- Apache with mod_rewrite is assumed; the document root must be the public directory
- No API: an agent can only drive it through the browser
- Configuration behavior changed in 1.6.2; follow data/docs/update.txt when upgrading

## Editions

- Free: Free, open source
  - source: https://github.com/tkrebs/ep3-bs
  - binary: http://bs.hbsys.de/

## Adaptable: make it yours

Effort: config-only (5 things to edit)

Rename config/init.php.dist to init.php and config/autoload/local.php.dist to local.php; local.php carries the database credentials, the mail transport (sendmail, smtp, smtp-tls or file), the language choices, currency and fallback locale. Run public/setup.php once, then delete it. Booking rules, squares, prices and billing statuses are set in the backend UI. Branding is css-client/default.css, imgs-client/layout/logo.png and the favicon; custom modules drop into the modulex directory.

- Env vars: none
- Config files: config/init.php.dist, config/autoload/local.php.dist, config/autoload/global.php, public/css-client/default.css, public/imgs-client/layout/logo.png
- Prompt files: none
- Accounts you'll need: none

## Code stack

- Languages: PHP, JavaScript
- Frameworks: Zend Framework 2
- Package manager: composer
- Database: MySQL, MariaDB
- Hosting target: apache, lamp

## Evidence and confidence

- formFactor: README: web application on LAMP, Zend Framework 2, responsive layout (confidence 0.95)
- executionModel: no model SDK or AI feature (confidence 0.95)
- operability: no API, MCP or CLI in README, INSTALL.md or data/docs (confidence 0.85)
- effort: INSTALL.md names config/init.php.dist and config/autoload/local.php.dist; local.php.dist read this run (confidence 0.9)
- editions: README: MIT; website offers pre-made packages (confidence 0.9)
- active: shortlist pushedAt 2026-08-15; README: version 1.9.1 from August 2026
- reach:  (confidence 0)

## Open questions

- Does the 'pre-made package' on bs.hbsys.de differ from the GitHub tree?
- Is there an iCal or JSON export of bookings that an agent could read?

## Sources

- https://github.com/tkrebs/ep3-bs (sourcing:scheduling-staffing:github)
- https://github.com/tkrebs/ep3-bs/blob/master/INSTALL.md (analysis:scheduling-staffing)
