Appointment scheduling/booking application that aims to be super-simple, and open source!
- Privacy-friendly
- Deployable in minutes!
- Easy docker deployment
- Few dependencies
- Timeblock detection through ical references
- Highly Configurable (via yaml)
- Creates Jit.si meetings by default.
- No Log-in needed!
- Timezone detection/selection
block/YYY/MM/DDselection to make appointment choosing easy ("Choose a time to meet tomorrow" →30min/2022/9/30)
Copy the example config to your project directory.
Modify anything with the @REPLACEME tag. The server will warn you if it
contains invalid values.
services:
iit:
image: damngoodtech/ink-in-time:latest
# This is required to provide a configuration
volumes:
- "./iit.yml:/app/iit.yml"
ports:
- "5000:5000" # exposes the port to the host
web: # or whatever your "main" server service is
depends:
- iitNow just configure your server to let some path like /schedule refer
to port 5000 and you're golden!
Copy config/iit-example.yml to config/iit.yml. Modify it accordingly. There
are many options that are required. If something isn't configured correctly
the service won't start.
Install packages:
> pypi installRun the server.
> pypi run python -m src.mainYou may also provide custom configs by provding the IIT_YML environment variable:
> IIT_YML='/path/to/my/iit.yml' pypi run python -m src.mainIf an IIT_YML file is not provide it will poll the following paths to
find the first available config:
/app/iit.yml(NOTE: for docker installs ONLY!)/etc/ink-in-time/iit.yml$HOME/.ink-in-time/config/iit.yml$PROJ_DIR/config/iit.yml
Additional environment variables that may be of interest:
FLASK_DOTENV- Override the current environment with the
.envfile FLASK_DEBUG- Run flask in DEBUG mode
Because this service uses jinja2 for templating, you can absolutely override any template you want!
To do this, copy the /app/templates directory (from the docker container) to a local file on the host, then add the directory as a volume:
services:
# ...
iit:
# ...
volumes:
- "./my-awesome-templates:/app/templates"
# ...- File and issue
- Make sure to include details on the issue. If it's cosmetic, attach screenshots.
- If you think you'd like to take on the issue, say so.
- Promote a lively discussion & healthy debate.
- Fork this repository
- Start a new branch based off the format
<your_username><year>WW<work_week>_<ticket>_<summary_of_issue>, e.g.rickastley2022WW42_123_email-generates-zoom-links. - Make sure you start up the mock docker containers.
- Once you have a bug fix, run the unit tests (see Running the tests below).
- Push your fix to your branch.
- Create a pull request, detailing your fixes.
- Donate money to the project at KoFi. Donors will be listed in the README. Minumum donation $1, SUGGESTED: $10 OR MORE
- Hire me! I'm a senior developer with over 10 years experience. Currently open to clients tackling the impossible!
If you'd like customizations for your organization, I'd love to help you out. Please pick a time to chat at https://damngood.tech/schedule/60min/.
Hint: if you want to test the calendar blocking feature, it's HIGHLY recommended you pull from an ics mock server. See below.
> pypi run pytest src/tests.py
Since the server runs a background process to compile the time blocks,
sometimes this will result in a failure. See the debug messages for details.
This usually involves a race condition to detect that the .compilepid has
been created.
The mock server uses node-mock-server to serve ICS files at localhost:5002/ics.
To use the mock server, do the following:
> npm i
> npm run ics # starts the ICS mock server.Go to localhost:5002/ui if it isn't open already. There you see the endpoints
Copy one of those endpoints to the calendars configuration.
Just keep the server up and you'll pull from those endpoints for testing!
Note you will see errors from icalendar during the compilation process. These can be ignored.
WARNING: Any data you place in the
mockingdirectory will be commited to git! A safer directory ismock_data, which is ignored.
To generate your own mock data, run:
> pypi -m main.fakeicsThe data is stored in <project_dir>/mock_data/ics/<funny-name>.ics.
The files can then be copied to new endpoints if you wish.
