Apollusia is a calendar tool for coordinating events with multiple people. It is a web application written in Angular with NestJS as the backend. A running instance of the application can be found under https://apollusia.com/. Feel free to check it out!
⭐ Star this project on GitHub — it motivates me a lot!
Apollusia offers a variety of features to make event coordination as easy as possible. All features are completely free and can be used without registration.
- Anonymous participation
- Participants can vote without entering their name
- Editing participation
- Participants can edit their participation
- Blind participation
- Participants can't see other participants until they participate
- Comments
- Add comments to a poll
- Participation limit
- Limit the number of participants
- Maybe Option
- Friendlier event selection with a Maybe option
- Deadline
- Set a deadline for new participations
- Rich Text and Links in Description
- Add Markdown formatted text and links to the description
- Events of varying length
- Every event can have its own length
- Event Notes
- Add notes to events to provide additional information
- Autofill
- Create many sequential events automatically, with breaks and on multiple days
- Cloning polls
- Clone polls to start off with the same options
- Postponing events
- Move all events to a later date
- iCal Export
- Keep track of your polled events and 1-1 meetings using your favorite calendar app
- Invite Participants
- Invite participants via email or other means
- Notifications
- Receive quick updates to polls and participations via Push Notifications on all your devices
- Email Updates
- Receive detailed updates to polls and participations via Email
- History
- See all changes to a poll
Create an .env
file in the backend directory and add the following environment variables:
VAPID_PUBLIC_KEY=<vapid public key> # for push notifications
VAPID_PRIVATE_KEY=<vapid private key> # for push notifications
KEYCLOAK_CLIENT_SECRET=<keycloak client secret>
AUTH_PUBLIC_KEY=<keycloak public key>
CONTACT_OPERATOR=<contact operator>
CONTACT_MAIL=<contact email>
CONTACT_ADDRESS=<contact address>
VAPID keys can be generated using the following command:
npx web-push generate-vapid-keys
To set up Keycloak, follow these steps
- Run it with
docker compose up -d keycloak
- Go to
http://localhost:8080/auth
. - Create a new realm called
apollusia
- Create a client called
web
with the following options:- Valid Redirect URLs:
http://localhost:4200/*
- Valid Post Logout Redirect URLs:
+
- Web Origins:
+
.
- Valid Redirect URLs:
- Under "Realm Settings > Login", configure:
- User registration: On
- Forgot password: On
- Remember me: On
- Email as username: On
- Login with email: On
- Duplicate emails: Off
- Verify email: Off
- Under "Realm Settings > User profile", create these attributes:
-
- Attribute [Name]: pushTokens
- Display Name: Push Tokens
- Multivalued: On
- Attribute Group: user-metadata
- Who can edit?: User, Admin
- Who can view?: User, Admin
-
- Attribute [Name]: notifications
- Display Name: Notifications
- Multivalued: On
- Attribute Group: user-metadata
- Who can edit?: User, Admin
- Who can view?: User, Admin
-
- Create a user as follows:
- Email Verified: Yes
- Username/email: admin@apollusia.com
- First Name: Apollusia
- Last Name: Admin
- Hit Create
- Credentials > Set Password:
root
- Role Mapping > Assign Role > Filter by clients > Select all (the list may be long, change pagination to 100 elements to see all) > Assign
- Role Mapping > Assign Role > Filter by realm roles > Select all > Assign
You can get the Keycloak Client Secret like this:
- Go to http://localhost:8080/auth/admin/master/console/#/apollusia/clients
- Select admin-cli
- Under Settings, make sure Client authentication is enabled
- Hit Save
- Go to the Credentials tab and copy the Client Secret
To get the Keycloak public key, follow these steps:
- Go to http://localhost:8080/auth/admin/master/console/#/apollusia/realm-settings/keys
- Click on the RS256 Public Key
- Copy the base64 key