Apollusia
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: Star this project on GitHub — it motivates me a lot!
Screenshots
View Your Polls and Participations in the Dashboard

Create Polls with Advanced Options

Choose Available Dates and Times

Participate and Find the Best Option

Features
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.
Participation
- 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
Poll Options
- 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
Productivity
- 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
Poll Management
- 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
Setup
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:
+
.
- 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:
To get the Keycloak public key, follow these steps: