Nittei
is a self-hosted calendar and scheduler server built upon Nettu scheduler.
It supports authentication through api keys for server - server communication and JSON Web Tokens for browser - server communication.
- Booking: Create a
Service
and registerUser
s on it to make them bookable. - Calendar Events: Supports recurrence rules, flexible querying and reminders.
- Calendars: For grouping
Calendar Event
s. - Freebusy: Find out when
User
s are free and when they are busy. - Integrations: Connect your Nettu, Google and Outlook calendars
- Multi-tenancy: All resources are grouped by
Account
s. - Metadata queries: Add key-value metadata to your resources and then query on that metadata
- Webhooks: Notifying your server about
Calendar Event
reminders.
As this application is written in Rust, you first need to have it installed. The easiest is to use Rustup and the instructions can be found on the official website. The command is the following:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
This project uses Just as a task manager. To install it, you can use Homebrew (MacOS & Linux)
brew install just
Once Rust and Just are installed, a few more utility tools can be installed by running
just install_tools
This will compile and install
sqlx-cli
: CLI used for applying the SQL migrations & for generating the offline files for SQLx
You can launch the Postgres container required for local development and execute the migration by running
just setup
Now we are ready to start the nittei
server
just dev
There are a few environment variables that can be used to control the server.
DATABASE_URL
allows to specify the database the server should usePORT
allows to specify the port to be used by the serverACCOUNT_API_KEY
is going to create anAccount
(if it does not already exist) during server startup with the given key.Account
s act as tenants in the server, and it is possible to create multipleAccount
s by using theCREATE_ACCOUNT_SECRET_CODE
which you can provide as an environment variable.
Quick example of how to create and query a user
export SECRET_API_KEY="REPLACE ME WITH YOUR API KEY"
# Create a user with metadata
curl -X POST -H "Content-Type: application/json" -H "x-api-key: $SECRET_API_KEY" -d '{"metadata": { "groupId": "123" }}' http://localhost:5000/api/v1/user
# Get users by metadata
curl -H "x-api-key: $SECRET_API_KEY" "http://localhost:5000/api/v1/user/meta?key=groupId&value=123"
Please see below for links to more examples.
You can install additional tools by running
just install_all_tools
This will install
cargo-outdated
: CLI used to list the dependencies that are outdatedcargo-udeps
: CLI used to list the dependencies that are unused
Contributions are welcome and are greatly appreciated!
- fmeringdal for the initial project. This repository is a fork adapted to our needs.