## 1. Project Overview & Quickstart (alextselegidis/easyappointments) ## File: README.md

Easy!Appointments

A powerful, self-hosted appointment scheduling platform built for flexibility.

--- --- ## ๐Ÿš€ Why Easy!Appointments **Easy!Appointments** is an open-source scheduling system that gives you full control over your booking workflow. It is designed to adapt to your business โ€” whether you need simple appointment booking or more advanced scheduling logic. **Key advantages:** - Fully self-hosted โ€” your data stays under your control - Highly customizable and flexible - Integrates with your existing website and database - Free for both personal and commercial use --- ## โœจ Features Built to support a wide range of scheduling needs: - Appointment and customer management - Service and provider organization - Working plans and booking rules - Google Calendar synchronization - Email notification system - Multi-language interface - Self-hosted deployment - Active open-source community --- ## โšก Quick Start (Development) Clone and run the project locally using the provided Docker Compose environment: ```bash # Clone the repository git clone https://github.com/alextselegidis/easyappointments.git # Navigate into the project cd easyappointments # Start the Docker environment docker compose up ```` Then open a second terminal and enter the application container: ```bash id="app-shell" docker compose exec app bash ``` Inside the container, install dependencies: ```bash id="deps" npm install && composer install ``` Start the development watcher: ```bash id="dev" npm start ``` Build production assets: ```bash id="build" npm run build ``` > Note: Works on Windows (WSL recommended), macOS, and Linux using Docker Compose. --- ## ๐Ÿ—๏ธ Installation (Production) ### Requirements * Apache or Nginx * PHP 8.2+ * MySQL database ### Steps 1. Create a database (or use an existing one) 2. Upload the `easyappointments` folder to your server 3. Ensure the `storage` directory is writable 4. Rename `config-sample.php` to `config.php` 5. Update configuration values 6. Open the application in your browser and follow the setup wizard Once completed, the system is ready to use. --- ## ๐Ÿ“š Resources * Website: [https://easyappointments.org](https://easyappointments.org) * Issues: [https://github.com/alextselegidis/easyappointments/issues](https://github.com/alextselegidis/easyappointments/issues) * Support Group: [https://groups.google.com/forum/#!forum/easy-appointments](https://groups.google.com/forum/#!forum/easy-appointments) * Discord: [https://discord.com/invite/UeeSkaw](https://discord.com/invite/UeeSkaw) --- ## ๐Ÿ“œ License * Code: GPL v3.0 * Content: CC BY 3.0 --- ## ๐Ÿ‘ค Author * Website: [https://alextselegidis.com](https://alextselegidis.com) * GitHub: [https://github.com/alextselegidis](https://github.com/alextselegidis) * Twitter: [https://twitter.com/AlexTselegidis](https://twitter.com/AlexTselegidis) --- ## ๐Ÿ”ฅ More Projects * [Plainpad ยท Self-Hosted Note Taking](https://github.com/alextselegidis/plainpad) * [Clientverse ยท CRM Application](https://github.com/alextselegidis/clientverse) * [Timecrack ยท Time Tracking](https://github.com/alextselegidis/timecrack) --- ## File: docs/caldav-calendar-sync.md # CalDAV Calendar Sync This guide explains how to set up a local CalDAV server (Baikal) for testing calendar sync with Easy!Appointments. > **Note:** This guide uses the Docker development setup from `docker-compose.yml`. ## Setting Up Baikal Baikal is a free, self-hosted calendar server. In the Docker setup, it runs at http://localhost:8100. ### First-Time Setup 1. Open http://localhost:8100 in your browser. 2. You'll see a setup form. Fill it in: - **Time zone:** Choose your local time zone (must match Easy!Appointments). - **WebDAV authentication type:** Select **Basic**. - **Admin password:** Set something simple like `admin` for local testing. 3. On the next page, keep the default settings and submit. ### Create a Test User 1. After setup, go to **Users and resources** in Baikal. 2. Create a new user (e.g. username: `testuser`, password: `testpass`). ## Connecting Easy!Appointments to Baikal 1. In Easy!Appointments, go to the **Calendar** page. 2. Click **Enable Sync** โ†’ **CalDAV**. 3. Enter the following: - **URL:** `http://baikal/dav.php/calendars/testuser/default/` (replace `testuser` with your Baikal username) - **Username:** `testuser` - **Password:** `testpass` That's it โ€” your appointments will now sync with the Baikal CalDAV server. *This document applies to Easy!Appointments v1.6.0.* [Back](readme.md) --- ## File: docs/console.md # Console Easy!Appointments includes a set of command-line tools you can run from a terminal. These are useful for automating tasks like backups and database updates. ## Before You Start Make sure PHP is installed and available in your terminal. You can check by running: ``` php -v ``` This should print the PHP version number. If it doesn't, you need to install PHP or add it to your system's PATH. ## Available Commands All commands start with `php index.php console` and are run from the Easy!Appointments root folder. ### Migrate Updates your database to the latest version: ``` php index.php console migrate ``` To reset the database and re-run all migrations from scratch: ``` php index.php console migrate fresh ``` > **Warning:** The `fresh` option deletes all existing data. ### Seed Adds sample data (a test admin, provider, customer, and service) so you can try things out: ``` php index.php console seed ``` ### Install Runs the installer from the command line (instead of using the browser): ``` php index.php console install ``` Make sure you've already filled in your `config.php` file before running this. ### Backup Creates a backup of your data in the `storage/backups` folder: ``` php index.php console backup ``` To save the backup to a different folder: ``` php index.php console backup /path/to/your/folder ``` ### Sync Syncs calendars for all providers who have calendar sync enabled: ``` php index.php console sync ``` **Tip:** Set this up as a [cron job](https://en.wikipedia.org/wiki/Cron) to run automatically (e.g. every hour) so your calendars stay up to date without manual work. ### Cleanup Runs storage and data cleanup tasks: ``` php index.php console cleanup ``` This command removes expired sessions, old logs and cache files, and deletes old customer data based on your configured data retention settings. **Tip:** Add this command to a [cron job](https://en.wikipedia.org/wiki/Cron) so cleanup runs automatically. ### Help Shows a summary of all available commands: ``` php index.php console help ``` *This document applies to Easy!Appointments v1.6.0.* [Back](readme.md) --- ## File: docs/docker.md # Docker Docker lets you run Easy!Appointments on your computer without installing Apache, PHP, or MySQL manually. Everything runs inside containers โ€” isolated mini-environments that are easy to start and stop. ## Getting Started 1. Make sure you have [Docker](https://www.docker.com/) installed. 2. Clone or download the project. 3. Edit the `config.php` file in the root folder to match the Docker setup: ```php class Config { // GENERAL SETTINGS const BASE_URL = 'http://localhost'; const LANGUAGE = 'english'; const DEBUG_MODE = TRUE; // DATABASE SETTINGS const DB_HOST = 'mysql'; const DB_NAME = 'easyappointments'; const DB_USERNAME = 'user'; const DB_PASSWORD = 'password'; // GOOGLE CALENDAR SYNC const GOOGLE_SYNC_FEATURE = FALSE; const GOOGLE_CLIENT_ID = ''; const GOOGLE_CLIENT_SECRET = ''; } ``` 4. Start everything with: ```bash docker compose up ``` ## What's Included Once running, you can access these services in your browser: | Service | URL | Credentials | |---------|-----|-------------| | **Easy!Appointments** | http://localhost | (your admin account) | | **phpMyAdmin** (database manager) | http://localhost:8080 | `root` / `secret` | | **Mailpit** (email testing) | http://localhost:8025 | (no login needed) | | **Baikal** (CalDAV testing) | http://localhost:8100 | `admin` / `admin` | | **phpLDAPadmin** (LDAP testing) | http://localhost:8200 | `cn=admin,dc=example,dc=org` / `admin` | ## CalDAV Sync with Baikal To test CalDAV syncing locally: 1. Open Baikal at http://localhost:8100 and create a new user. 2. In Easy!Appointments, click **Enable Sync** โ†’ **CalDAV** and enter: - **URL:** `http://baikal/dav.php/calendars//default/` - **Username:** your Baikal username - **Password:** your Baikal password ## LDAP OpenLDAP runs on the `openldap` container (ports `389` and `636`). You can manage it through phpLDAPadmin at http://localhost:8200. > **Note:** This Docker setup is for **development only**. Don't use it in production. For a production Docker image, see: https://github.com/alextselegidis/easyappointments-docker *This document applies to Easy!Appointments v1.6.0.* [Back](readme.md) --- ## File: docs/faq.md # FAQ ## How do I check that my server has Apache, PHP, and MySQL installed? Easy!Appointments needs three things on your server: **Apache** (the web server), **PHP** (the programming language), and **MySQL** (the database). You also need the PHP **curl** extension and the Apache **mod_rewrite** module enabled. **Two ways to check:** 1. **Ask your hosting company** โ€” they can confirm what's installed. 2. **Create a test file** โ€” make a file called `phpinfo.php` in your website's root folder with this content: ```php ``` Then open `http://your-domain.com/phpinfo.php` in your browser. It will show everything installed on your server. **Delete this file when you're done** for security reasons. ## How do I create a Google Calendar API key? See the [Google Calendar Sync](google-calendar-sync.md) guide for detailed step-by-step instructions. ## The Installation Page Is Not Working This usually happens for one of two reasons: **1. Wrong config settings** Open `config.php` and double-check: - `BASE_URL` is set to your exact installation URL (e.g. `http://your-domain.com/easyappointments`) - Your database name, username, and password are correct **2. Server is blocking requests** Some hosting providers need an `.htaccess` fix. Create or edit the `.htaccess` file in your installation folder and add: ``` RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?/$1 [L] ``` If that doesn't work, check the **Apache error log** and the **browser console** (press F12 โ†’ Console tab) for error messages. Contact your hosting company with those details. ## The Booking Page Won't Show Any Available Hours **If no hours appear at all:** This is usually a server issue. Check the Apache error log and browser console (F12 โ†’ Console) for errors. Contact your hosting company with the details you find. **If you see "There are no available appointment hours for the selected date":** This often happens because the **default working plan includes breaks** that don't leave enough room for your service. For example, if your service lasts 3โ€“4 hours but there are lunch breaks in between, no slot is long enough. **Fix:** Go to **Users** โ†’ **Providers**, select the provider, and adjust their working plan. Remove or shorten breaks so there's enough continuous time for your services. ## Installing on a Subdomain Doesn't Show Available Hours If Easy!Appointments is on a subdomain like `http://book.mysite.com`, make sure `BASE_URL` in `config.php` uses the **subdomain URL** โ€” not the folder path. **Correct:** `BASE_URL = 'http://book.mysite.com'` **Wrong:** `BASE_URL = 'http://mysite.com/book'` Using the wrong URL causes a browser security error that blocks the booking page from loading appointment hours. ## How Do I Change the Time Slot Interval? By default, available appointment times are shown every **15 minutes** (e.g. 9:00, 9:15, 9:30โ€ฆ). You can change this from the backend service settings by editing the **Slot Interval (Minutes)** field. ## I'm Getting a Timezone Warning If you see an error like `DateTime::__construct(): It is not safe to rely on the system's timezone settings...`, it means PHP doesn't have a timezone set. **Fix:** Open your `php.ini` file and set the timezone: ```ini date.timezone = America/New_York ``` Use your own timezone from the [PHP timezone list](https://www.php.net/manual/en/timezones.php). If you can't edit `php.ini`, add this line to the top of `index.php`: ```php date_default_timezone_set('America/New_York'); // Use your own timezone ``` ## How Do I Use Caddy Instead of Apache? If you prefer [Caddy](https://caddyserver.com/) as your web server: 1. Install Caddy 2. Install PHP-FPM: `sudo apt install php-fpm` 3. Set up Easy!Appointments in a folder (e.g. `/var/www/html/easyappointments`) 4. Add this to `/etc/caddy/Caddyfile`: ```Caddyfile easyappointments.example.com { root * /var/www/html/easyappointments encode gzip zstd php_fastcgi unix//run/php/php-fpm.sock file_server } ``` 5. Restart Caddy: `sudo systemctl restart caddy.service` *This document applies to Easy!Appointments v1.6.0.* [Back](readme.md) --- ## File: docs/get-involved.md # Get Involved Easy!Appointments is open source, and there are several ways you can help make it better. ### Report Bugs Found something broken? Let us know! The more bugs we find and fix, the more reliable the app becomes for everyone. ### Suggest Features Have an idea for a new feature or improvement? We'd love to hear it. Submit your suggestions through the [E!A Submission Form](https://easyappointments.org/submission.php). ### Help Translate The app is already available in many languages, but new features need new translations. You can submit your translations via a [pull request on GitHub](https://github.com/alextselegidis/easyappointments) or email them to [alextselegidis@gmail.com](mailto:alextselegidis@gmail.com). ### Share Your Feedback Take a few minutes to fill out the [E!A Feedback Form](https://docs.google.com/forms/d/15dw1jl7lUgw4q-XXMn13Gx_e8zJxAiyWYMOdqtZqIHU/viewform). Your experience helps shape the future of the project. *This document applies to Easy!Appointments v1.6.0.* [Back](readme.md) --- ## File: docs/google-calendar-sync.md # Google Calendar Sync Easy!Appointments can sync appointments with Google Calendar in both directions. When a provider links their Google Calendar, any changes made in either system will be reflected in the other. ## What You Need - A working Easy!Appointments installation with at least one service and provider set up. - A Google account. ## Step 1: Create Google API Credentials You need to tell Google that your Easy!Appointments installation is allowed to access calendar data. 1. Go to the [Google Cloud Console](https://console.cloud.google.com/) and **create a new project** (or select an existing one). 2. In the project dashboard, go to **APIs & Services** > **Library** and search for **Google Calendar API**. Click on it and press **Enable**. 3. Go to **APIs & Services** > **Credentials** and click **Create Credentials** > **OAuth client ID**. 4. If prompted, fill in the **OAuth consent screen** information first. 5. Select **Web Application** as the application type and give it a name. 6. Under **Authorized JavaScript origins**, add your domain (just the domain, e.g. `http://mywebsite.com`). 7. Under **Authorized redirect URIs**, add: ``` https://your-domain.com/easyappointments/index.php/google/oauth_callback ``` Replace `your-domain.com/easyappointments` with your actual installation URL. 8. Click **Create**. Google will show you a **Client ID** and **Client Secret** โ€” copy both. ## Step 2: Configure Credentials in Easy!Appointments You can now configure the Google **Client ID** and **Client Secret** directly from the Easy!Appointments user interface (Backend **Settings** โ†’ **Google Calendar** section). As an alternative, you can still define them in `config.php`: ```php const GOOGLE_SYNC_FEATURE = TRUE; const GOOGLE_CLIENT_ID = 'your-client-id-here'; const GOOGLE_CLIENT_SECRET = 'your-client-secret-here'; ``` ## Step 3: Link a Provider's Google Calendar 1. Log in to the Easy!Appointments backend and go to the **Calendar** page. 2. Select a provider and click **Enable Sync**. 3. A Google sign-in window will appear. Log in with the provider's Google account and grant permission. 4. The sync is now active! ## Good to Know - Sync is triggered from the Easy!Appointments backend or whenever appointments change. - Each provider can only be linked to **one** Google Calendar account. - Recurring events are supported during sync, but they cannot be created or managed directly from Easy!Appointments. ## Useful Links - [Google Calendar API Docs](https://developers.google.com/google-apps/calendar) - [E!A Support Group](https://groups.google.com/forum/#!forum/easy-appointments) *This document applies to Easy!Appointments v1.6.0.* [Back](readme.md) --- ## File: docs/installation-guide.md # Installation Guide This guide walks you through installing and setting up Easy!Appointments on your server. ## What You Need Easy!Appointments runs on a web server, just like a regular website. Before you begin, make sure you have: - **Apache** (v2.4 or newer) โ€” the web server software - **PHP** (v8.2 or newer) โ€” the programming language that runs the app - **MySQL** (v5.7 or newer) โ€” the database that stores your data Most web hosting companies already include all three. If you're installing on your own computer, use a free bundle like [XAMPP](https://www.apachefriends.org/), [MAMP](https://www.mamp.info/), or [WAMP](https://www.wampserver.com/) โ€” they install everything for you. If you plan to use Google Calendar sync, you'll also need the **php_curl** PHP extension enabled. ## Installation Steps ### 1. Create a Database You need a MySQL database to store appointment data. If your hosting plan includes one, use that. Otherwise, create a new one through your hosting control panel (e.g. cPanel or phpMyAdmin). Write down the **database name**, **username**, and **password** โ€” you'll need them soon. ### 2. Upload the Files Upload the Easy!Appointments files to your server using FTP or your hosting's file manager. Place them in a folder like `easyappointments`, `appointments`, or `book`. Take note of the URL. For example, if you uploaded to a folder called `easyappointments`, the URL will look like: `http://your-domain.com/easyappointments` ### 3. Make the Storage Folder Writable The `storage` folder is where the app saves logs and temporary files. It needs write permissions. If you're on Linux, you can run: ``` chmod -R 755 storage ``` Or set permissions through your hosting's file manager. ### 4. Edit the Config File Open the `config.php` file in the root folder and fill in: - **BASE_URL** โ€” the URL to your installation (from Step 2) - **DB_HOST** โ€” usually `localhost` - **DB_NAME** โ€” your database name - **DB_USERNAME** โ€” your database username - **DB_PASSWORD** โ€” your database password You can also add Google Calendar API keys here if you want to use that feature later. ### 5. Run the Installer Open your browser and go to your Easy!Appointments URL (e.g. `http://your-domain.com/easyappointments`). You'll see a setup wizard. Fill in your admin account details and company info, then click **Install**. That's it โ€” Easy!Appointments is now installed! ## Setting Up Your Business After installation, the app comes with some test data. Here's how to set things up for your business: ### 1. Set Your Working Hours Go to the backend by visiting `http://your-url/index.php/calendar` and log in. Click **Settings** โ†’ **Business Logic** and set your company's working days and hours. Click **Save**. This becomes the default schedule for any new providers you add. ### 2. Add Your Services Click **Services** and add the services your customers can book (e.g. "Haircut", "Consultation", "Massage"). Fill in the name, duration, and price for each one. You can organize services into categories if you like. ### 3. Add Your Providers Click **Users** โ†’ **Providers** and add the people who provide your services. For each provider, set their working hours and which services they offer. **Tip:** If you run a one-person business, just create a single provider with your company name. ### 4. Add Secretaries (Optional) If someone manages bookings for your team, click the **Secretaries** tab and add them. Choose which providers they can manage. ### 5. You're Ready! Click **Go To Booking Page** at the bottom of the page to see your public booking page. Try creating a test appointment โ€” it will show up in your **Calendar**. Finally, add a link to your website (e.g. "Book an Appointment") that points to your Easy!Appointments URL so customers can find it. Happy Bookin'! *This document applies to Easy!Appointments v1.6.0.* [Back](readme.md) --- ## File: docs/ldap.md # LDAP Integration LDAP lets you import users from a central directory (like your company's employee directory) into Easy!Appointments. It also enables single sign-on (SSO), so users can log in with their existing company credentials. > **Note:** This guide uses the Docker development setup. For production, replace the example values with your own LDAP server details. ## Local Development Setup (Docker) The Docker setup includes OpenLDAP and phpLDAPadmin, ready to use with no extra configuration. | Service | URL | Credentials | |---------|-----|-------------| | **phpLDAPadmin** | http://localhost:8200 | `cn=admin,dc=example,dc=org` / `admin` | | **OpenLDAP** | `openldap:389` (inside Docker) | Same as above | ## Creating a Test User in phpLDAPadmin Before you can log in via LDAP, the directory needs at least one user entry. With a fresh OpenLDAP container the tree is empty, so you have to create a group first (otherwise phpLDAPadmin's user form leaves the **GID Number** dropdown empty and refuses to save) and then the user. ### 1. Create a group 1. Open phpLDAPadmin at and log in with `cn=admin,dc=example,dc=org` / `admin`. 2. In the tree on the left, click `dc=example,dc=org` โ†’ **Create a child entry**. 3. Choose the **Generic: Posix Group** template. 4. Fill in: - **Group** (cn): `users` - **GID Number**: leave the suggested value (e.g. `500`) or set `10000`. 5. Click **Create Object** โ†’ **Commit**. ### 2. Create the user account 1. Click `dc=example,dc=org` โ†’ **Create a child entry** again. 2. Choose the **Generic: User Account** template. 3. Fill in: - **First name**: `Jane` - **Last name**: `Doe` - **Common Name**: `Jane Doe` - **User ID** (uid): `janedoe` โ€” this is what you will type at the EA login screen. - **GID Number**: pick the `users` group you just created. - **Home directory**: leave the default. - **Login shell**: `/bin/bash` (or any value). - **Password**: `password` (choose **SSHA** as the hash type). 4. Click **Create Object** โ†’ **Commit**. 5. Open the new entry and copy its full **Distinguished Name**, e.g. `cn=Jane Doe,dc=example,dc=org`. You will need it in the next step. > **Tip:** If you don't need POSIX attributes, you can skip the group and create the user with only the `inetOrgPerson` + `top` object classes. The GID dropdown then disappears entirely. ### 3. Link the LDAP entry to an Easy!Appointments user 1. Log in to the EA backend as admin. 2. Open **Users โ†’ Providers** (or Admins / Secretaries depending on the role) and edit **Jane Doe**. 3. Set the **Username** field to the same value as the LDAP `uid`, e.g. `janedoe`. The username **must match exactly** โ€” EA looks up the account by username before it ever attempts an LDAP bind, so a mismatch results in a generic "invalid credentials" response. 4. Paste the DN from step 2.5 into the **LDAP DN** field. 5. Save the user. 6. You can now log in at the EA login screen with `janedoe` / `password`. ## Enabling LDAP in Easy!Appointments 1. Log in to the backend. 2. Go to **Settings** โ†’ **Integrations** โ†’ **LDAP**. 3. Turn on the integration and fill in the connection settings: | Setting | Docker Value | Description | |---------|-------------|-------------| | **Host** | `openldap` | Your LDAP server address | | **Port** | `389` | Your LDAP server port | | **User DN** | `cn=admin,dc=example,dc=org` | The admin account used to connect | | **Password** | `admin` | The admin account password | | **Base DN** | `dc=example,dc=org` | Where to start searching for users | | **Filter** | (default is fine) | Controls which LDAP entries are returned. The `{{KEYWORD}}` placeholder is replaced with your search term | ### Field Mapping You can map LDAP fields to Easy!Appointments fields so that user information is automatically filled in when importing. This is a JSON object, for example: ```json {"first_name": "givenName", "last_name": "sn", "email": "mail"} ``` ## Importing Users 1. On the LDAP settings page, use the **search** box to find users in your LDAP directory. 2. Click **Import** on a user to open a form with their details pre-filled. 3. Review and adjust the information, then save. > **Note:** Backend users (admins, secretaries, providers) need a local password before import. If you only plan to use LDAP login, set a long random password. Make sure the **LDAP DN** field points to the correct LDAP entry, and the **username** matches the LDAP username (usually the `cn` attribute). ## Single Sign-On (SSO) Once LDAP is enabled, users can log in with their LDAP credentials: 1. Easy!Appointments first tries the **local password**. 2. If that doesn't work, it checks the password against **LDAP**. 3. If the LDAP password matches, the user is logged in. For this to work: - The user must already be imported into Easy!Appointments. - The **username** must match between both systems. - The **LDAP DN** field must point to the correct LDAP entry. *This document applies to Easy!Appointments v1.6.0.* [Back](readme.md) --- ## File: docs/manage-translations.md # Manage Translations Easy!Appointments supports multiple languages. You can modify existing translations or add your own. ## How Translations Work Each language has its own folder inside `/application/language/` (e.g. `english`, `german`, `french`). Inside each folder, the `translations_lang.php` file contains all the text shown in the app. ## Adding a New Translation ### 1. Create the Language Folder Inside `/application/language/`, create a new folder named after your language (e.g. `french`). Copy all files from the `english` folder into it. Also copy the `migration_lang.php` file from another language folder (e.g. `german`) โ€” the app needs this file to run database updates. ### 2. Translate the Strings Open `translations_lang.php` in your new folder and replace the English text with your translation: ```php $lang['page_title'] = 'Your translation here!'; ``` Keep the key names (the part in square brackets) exactly the same โ€” only change the text after the `=` sign. ### 3. Register Your Translation Open `/application/config/config.php` and find the `available_languages` array. Add your language to it: ```php $config['available_languages'] = ['english', 'german', 'greek', 'your-language']; ``` To change the default language for all users, update: ```php $config['language'] = 'english'; // Change to your language ``` ## Sharing Your Translation If you'd like to contribute your translation to the project, you can submit a [pull request on GitHub](https://github.com/alextselegidis/easyappointments) or email it to [alextselegidis@gmail.com](mailto:alextselegidis@gmail.com). *This document applies to Easy!Appointments v1.6.0.* [Back](readme.md) ## 2. Official Technical Reference & Guides (alextselegidis/alextselegidis.github.io)

Personal Website (CSS-only Implementation)

Welcome to my personal website repository, holding the code behind [alextselegidis.com](https://alextselegidis.com)

## About The main purpose of this repository is to demonstrate the creation of a modern web design, without the use of JavaScript. The final result is a lightweight web page with sleek design and animations that solely work with CSS. The project is using PostCSS to process the styles with supporting plugins such as Autoprefixes, Precss and Color Functions processing the final stylesheet. ## Setup To clone and run this application, you'll need [Git](https://git-scm.com) and [Node.js](https://nodejs.org/en/download/) (which comes with [npm](http://npmjs.com)) installed on your computer. From your command line: ```bash # Clone this repository $ git clone https://github.com/alextselegidis/alextselegidis.github.io.git # Go into the repository $ cd alextselegidis.github.io # Install dependencies $ npm install # Run the app $ npm start ``` Note: If you're using Linux Bash for Windows, [see this guide](https://www.howtogeek.com/261575/how-to-run-graphical-linux-desktop-applications-from-windows-10s-bash-shell/) or use `node` from the command prompt. ## License Code Licensed Under [GPL v3.0](https://www.gnu.org/licenses/gpl-3.0.en.html) | Content Under [CC BY 3.0](https://creativecommons.org/licenses/by/3.0/) --- Website [alextselegidis.com](https://alextselegidis.com)  ·  GitHub [alextselegidis](https://github.com/alextselegidis)  ·  Twitter [@alextselegidis](https://twitter.com/AlexTselegidis) ###### More Projects On Github ###### โ‡พ [Easy!Appointments · Open Source Appointment Scheduler](https://github.com/alextselegidis/easyappointments) ###### โ‡พ [Plainpad · Self Hosted Note Taking App](https://github.com/alextselegidis/plainpad) ###### โ‡พ [Integravy · Service Orchestration At Your Fingertips](https://github.com/alextselegidis/integravy)