# Project pack: Easy!Appointments @ f6c8a4c

Facts about **Easy!Appointments** for an AI following the [BespokeAI handover guide](https://handoff.bespokeai.software/guide/v2.md). This pack is pinned to one version and never changes after publication.

> Easy!Appointments lets clients book your time online. You set services, working hours and breaks, and customers pick a slot on a booking page that you can embed in your own website. It syncs with Google Calendar, sends confirmation emails and has a simple back office for you and your staff.

## Version and source
- Repository: https://github.com/alextselegidis/easyappointments
- Pinned commit: `f6c8a4c2f364bf8c64b1f913a531a7134dcfd3c6`. Use exactly this version.
- Fresh checkout: use the setup below in an empty folder. If you already have this exact source checked out, keep your branch and use the development command instead; do not clone again or reset local changes.
- Or download a zip: https://github.com/alextselegidis/easyappointments/archive/f6c8a4c2f364bf8c64b1f913a531a7134dcfd3c6.zip
- Official docs: https://easyappointments.org/docs.html
- Live demo: https://demo.easyappointments.org/. Shared demo. Don't enter real data.
- Licence: **GPL-3.0-only**. Free to use and change. If you share your changed version with other people (give them the code or app), you must share your source code under the same licence. Using it privately for yourself or your household has no extra obligations.

## Running the pinned source
- Fresh pinned-source setup (skip clone and checkout in an existing worktree):

  ```sh
  git clone https://github.com/alextselegidis/easyappointments bespoke-easyappointments
  cd bespoke-easyappointments
  git checkout --detach f6c8a4c2f364bf8c64b1f913a531a7134dcfd3c6
  # Prepare development requirements and local configuration first.
  docker compose up -d
  docker compose exec php-fpm bash -c "npm install && composer install"
  docker compose exec php-fpm npm start
  ```

The commands below are a starting point from the reviewed source. Prepare the listed tools, local configuration and companion services before starting the app. These instructions have not yet been validated in participant sessions.

### Separate trial of the current release
This tries an upstream release, which may differ from the pinned source above. It does not run your source changes. Use only sample data and a separate data directory or volume. Check the upstream documentation before running it.

  ```sh
  Download the latest release zip from https://github.com/alextselegidis/easyappointments/releases, upload it to PHP hosting with MySQL, and open it in a browser to run the installer.
  ```

- Needs: Docker for development, or PHP 8.1+ with MySQL and a web server
- Develop: `docker compose up -d`
- Test: `composer test`
- Stack: php, javascript (CodeIgniter 3, Bootstrap, jQuery). Difficulty for a non-developer with an AI: **easy**. A classic PHP, CodeIgniter and MySQL app. Services, hours and email wording are settings; the booking page is plain views and JavaScript.

## The project's own AI instructions
Read these in the repository before changing code: `CLAUDE.md`.

## Customisation points (settings → extend → code)
- **services-and-hours** [settings]: What people can book, when you work, breaks and holidays. → `Back office → Services, Providers, Settings`
- **email-texts** [settings]: Wording of confirmations and reminders. → `Settings → Email templates`
- **booking-page-style** [extend]: Colours and layout of the public page. → `assets/css and application/views/pages/booking.php`
- **embed** [extend]: Put the booking page inside your own website. → `Booking page iframe code`
- **controllers-and-models** [code]: New fields and rules such as deposits. → `application/controllers, application/models`

## Must keep working
- Availability calculation, so double-booking never happens.
- Database migrations in application/migrations. Add new ones.
- Customer data validation and the booking confirmation flow.

## Staying updatable
Use settings and CSS first. Put new features in new controllers and models rather than editing core files.

## Data, costs and safety
- Personal data: **yes**. Stored in: A MySQL database. Contains customer names, emails and phone numbers. Back it up and handle it under your privacy laws.
- Service: Email (SMTP) (optional, usually free to a few dollars): Booking confirmations and reminders.
- Service: Google Calendar sync (optional, free): Keep your own calendar in step.
- It stores customer contact details. Use HTTPS and a strong admin password.
- Remove the installer after setup.

---

# Customising Easy!Appointments

Easy!Appointments is a CodeIgniter 3 app. The structure is conventional PHP, so most changes are quick.

## How the code is laid out

| You want to change… | Look in |
|---|---|
| Booking page and back office views | application/views/ |
| Pages and API endpoints | application/controllers/ |
| Database logic | application/models/ |
| Availability and email logic | application/libraries/ |
| Translations | application/language/ |
| Styles and scripts | assets/css/ and assets/js/ |
| Database migrations | application/migrations/ |

## Use the gentlest change first

1. **Settings (no code):** services, providers, working plans and email templates.
2. **Extend:** CSS for the booking page, and embed it by iframe.
3. **Code:** controllers, models and views.

## Recipes

- **New booking-form field:** add a migration, include it in the customers or appointments model, add it to the booking view and script, and show it in the back office.
- **Reminder emails:** add a command run by cron that looks up tomorrow's appointments and uses the existing email library.

## Running and checking your changes

- Book an appointment as a customer and check it in the back office.
- Try to book the same slot twice.
- `composer test` and `npm run build` where relevant.

## Pitfalls

- Do not edit `config.php` with live credentials into Git.
- Time zones matter. Test with providers and customers in different zones.

---
Machine-readable: [bespoke.yaml](https://handoff.bespokeai.software/p/easyappointments/f6c8a4c/r2/bespoke.yaml) · Hosting options: [hosting.md](https://handoff.bespokeai.software/p/easyappointments/f6c8a4c/r2/hosting.md) · Agent skill: [SKILL.md](https://handoff.bespokeai.software/p/easyappointments/f6c8a4c/r2/SKILL.md)
