Sign inSign up

mcpringle/apus

By mcpringle

•Updated about 12 hours ago

Apus is a social media wall for conferences.

Image
1

7.9K

mcpringle/apus repository overview

⁠Apus

⁠About

Apus is a social media wall for conferences.

The name Apus is based on Apus Apus, Latin for common swift. This is a bird species that is extremely adapted to a life in the air and can stay in the air for around ten months almost without interruption and can reach speeds of more than 200 km/h during flight maneuvers. This bird breeds in a wall, flies reliably for extremely long periods without crashing and is also extremely fast. Hopefully all of this also applies to Apus: fast execution, uninterrupted and reliable operation!

See:

⁠Mission Statement

🇬🇧
Apus connects conference attendees in real time: Our application displays the up-to-date program with current and upcoming presentations as well as live-shared impressions from social networks. We provide orientation, foster interaction, and turn every event into a connected experience.

🇩🇪
Apus bringt Konferenzteilnehmer in Echtzeit zusammen: Unsere Anwendung zeigt das aktuelle Programm mit laufenden und bevorstehenden Vorträge sowie live geteilte Eindrücke aus sozialen Netzwerken. So schaffen wir Orientierung, fördern Interaktion und machen jede Veranstaltung zu einem vernetzten Erlebnis.

⁠Features

⁠Show posts from Social Media
PlatformStatus
BlueSkySUPPORTED
MastodonSUPPORTED
⁠Show event agenda
EventPlugin
BaselOneSessionizePlugin
CloudLandDoagPlugin
CyberLandDoagPlugin
DevoxxDevoxxPlugin
Java Forum NordSessionizePlugin
Java Forum StuttgartJavaForumStuttgartPlugin
JavaLandDoagPlugin
KI NavigatorDoagPlugin
Voxxed DaysDevoxxPlugin
⁠And more
FeatureStatus
Running text with updates- TODO -
Show sponsor informationSUPPORTED
Use event based stylingSUPPORTED

⁠Running in Production

It is highly recommended to use Docker⁠ or Podman⁠ to run Apus in production. Here follows a very short explanation of the example commands below. Consult the Docker or Podman documentation for more information about all available options for running an image.

OptionExplanation
--name apusSpecify the name for the running instance.
-p 80:8080Make Apus available on host port 80
-e KEY=valueConfigure Apus using environment variables.
-dRun Apus in daemon mode (background).
--rmRemove the container when stopping Apus.
mcpringle/apusThe Docker image to be started.

Modify the following commands according to your needs and consult the configuration section⁠ below for more information about how to configure Apus. The Docker image of Apus will be pulled from Docker Hub⁠ automatically when not available locally.

⁠Using Docker
docker run \
    --name apus \
    -p 80:8080 \
    -e APUS_SOCIAL_HASHTAGS=java \
    -e APUS_TIMEZONE=Europe/Zurich \
    -d \
    --rm \
    mcpringle/apus
⁠Using Podman

The parameters are the same like in in the Docker example, but the image must be prefixed with docker.io/:

podman run \
    --name apus \
    -p 80:8080 \
    -e APUS_SOCIAL_HASHTAGS=java \
    -e APUS_TIMEZONE=Europe/Zurich \
    -d \
    --rm \
    docker.io/mcpringle/apus

⁠Configuration

Apus can be started without any specific configuration. All configuration options have working default values.

⁠Configuration Options

To modify the default configuration values, just specify environment variables with the following names:

Environment VariableDefaultDescription
APUS_BLUESKY_HASHTAG_URL[1]The URL of the BlueSky API to get the posts containing a hashtag (empty = disabled).
APUS_BLUESKY_INSTANCEapi.bsky.appThe BlueSky instance used to read the posts from (empty = disabled).
APUS_BLUESKY_MENTIONS_URL[2]The URL of the BlueSky API to get the posts mentioning a profile (empty = disabled).
APUS_BLUESKY_POST_LIMIT30The limit for the number of BlueSky posts when accessing the API.
APUS_BLUESKY_PROFILEThe profile (without the @) of a BlueSky user to get the mentions (empty = disabled).
APUS_DEMOfalseEnable (true) or disable (false) the demo mode to show demo data only.
APUS_DEVOXX_EVENT_API[3]The URL of the Devoxx API to read the conference agenda.
APUS_DEVOXX_EVENT_IDThe ID of the Devoxx event to read the conference agenda.
APUS_DEVOXX_WEEKDAYThe day of the week of the Devoxx event to read the conference agenda.
APUS_DOAG_EVENT_API[4]The URL of the DOAG event API to read the conference agenda.
APUS_DOAG_EVENT_ID0The ID of the DOAG event to read the conference agenda (0 = disabled).
APUS_EVENT_DATE_ADJUSTP0DAdjust the date of the event, ISO-8601 formatted (P0D = disabled).
APUS_EVENT_IMAGE_URLThe URL of the image to be shown below the event agenda (empty = no image).
APUS_EVENT_NEXT_SESSION_TIMEOUT60Number of minutes a session is shown before it starts (0 = disabled).
APUS_EVENT_SHOW_EMPTY_ROOMStrueShow (true) or hide (false) empty event rooms.
APUS_EVENT_SHOW_LEGENDtrueShow (true) or hide (false) the event room legend.
APUS_EVENT_TIME_ADJUSTPT0DAdjust the time of the event, ISO-8601 formatted (PT0D = disabled).
APUS_EVENT_UPDATE_FREQUENCY5How often (in minutes) to update event data (0 = disabled).
APUS_JFS_JSON_URLThe URL of the JSON file for Java Forum Stuttgart.
APUS_LANGUAGEenLanguage code of the language used for the UI.
APUS_MASTODON_ACCESS_TOKENThe Mastodon access token. Only needed for the notification API (see below).
APUS_MASTODON_INSTANCEijug.socialThe Mastodon instance used to read the posts from (empty = disabled).
APUS_MASTODON_LIMIT30The limit for the number of results when accessing the Mastodon API.
APUS_MASTODON_NOTIFICATION_API[5]The URL of the Mastodon API to read the notifications (empty = disabled).
APUS_MASTODON_POST_API[6]The URL of the Mastodon API to read the posts (empty = disabled).
APUS_PASSWORDThe hashed password to get admin access (empty = disabled).
APUS_SOCIAL_FILTER_LENGTH500Hide social media posts which exceed this length (0 = disabled).
APUS_SOCIAL_FILTER_REPLIEStrueHide social media posts which are replies.
APUS_SOCIAL_FILTER_SENSITIVEtrueHide social media posts which contain sensitive information.
APUS_SOCIAL_FILTER_WORDSHide social media posts which contain these words.
APUS_SOCIAL_COLUMNS3How many columns to be used for social media posts.
APUS_SOCIAL_HASHTAGSA list of comma separated hashtags for social media posts (empty = disabled).
APUS_SOCIAL_HEADLINEOverwrite the headline for social media posts (empty = don't overwrite).
APUS_SOCIAL_IMAGE_LIMIT1Limit number of images per social media post (0 = no limit).
APUS_SOCIAL_IMAGES_ENABLEDtrueEnable or disable images in social media posts.
APUS_SESSIONIZE_EVENT_API[7]The URL of the Sessionize API to read the conference agenda.
APUS_SESSIONIZE_EVENT_ID0The ID of the Sessionize event to read the conference agenda (0 = disabled).
APUS_SESSIONIZE_SPEAKER_API[8]The URL of the Sessionize API to read the speaker information.
APUS_STYLESInject custom styles into the user interface (see explanations below).
APUS_TIMEZONEEurope/ZurichThe timezone used for date and time calculations.

The environment variables will override the default values. Some default values might be too long to be displayed in this table. They are marked with a number in square brackets and can be looked up in the following list:

  1. https://${instance}/xrpc/app.bsky.feed.searchPosts?q=%23${hashtag}&tag=${hashtag}&limit=${limit}
  2. https://${instance}/xrpc/app.bsky.feed.searchPosts?q=%40${profile}&mentions=${profile}&limit=${limit}
  3. https://${event}.cfp.dev/api/public/schedules/${weekday}
  4. https://meine.doag.org/api/event/action.getCPEventAgenda/eventId.${event}
  5. https://${instance\/api/v1/notifications?types[]=mention&limit=${limit}
  6. https://${instance}/api/v1/timelines/tag/${hashtag}?limit=${limit}
  7. https://sessionize.com/api/v2/${event}/view/Sessions
  8. https://sessionize.com/api/v2/${event}/view/Speakers
⁠Adjusting Event Dates and Times

The APUS_EVENT_DATE_ADJUST option uses the ISO-8601 period formats PnYnMnD and PnW. Examples:

ExampleDescription
P5D+5 days
P3M+3 months
P2Y+2 years
P4W+4 weeks
P1Y2M3D+1 year, +2 months, +3 days
P1Y2M3W4D+1 year, +2 months, +25 days (3 weeks and 4 days)
P-1Y2M-1 year, +2 months (minus is valid for the year only)
-P1Y2M-1 year, -2 months (minus is valid for the whole expression)

The APUS_EVENT_TIME_ADJUST option uses the ISO-8601 duration formats PTnHnMnS. Examples:

ExampleDescription
PT5H+5 hours
PT3M+3 minutes
PT2S+2 seconds
PT1H2M3S+1 hour, +2 minutes, +3 seconds
PT-1H2M-1 hour, +2 minutes (minus is valid for the hours only)
-PT1H2M-1 hour, -2 minutes (minus is valid for the whole expression)
⁠Create Mastodon Access Token
  1. Please log in at https://YOUR.INSTANCE/⁠.
  2. Open the page https://YOUR.INSTANCE/settings/applications/new⁠.
  3. Fill out the form:
    • Application name: Apus
    • Application website: https://APUS_DOMAIN/
    • Adjust the permissions as follows:
      • Enable only "read:notifications"
      • Disable everything else
  4. Scroll to the bottom and click "Save".
  5. The new application "Apus" will now appear in the table.
  6. Click on the name "Apus".
  7. Copy the access token (third line).

Replace the placeholder YOUR.INSTANCE with the domain of the Mastodon instance where your account is registered (e.g. mastodon.social or ijug.social) and replace APUS_DOMAIN with the domain where your Apus installation is accessible (e.g. apus.ijug.eu).

⁠Custom Styles

You can modify the styles of the user interface using CSS variables. The CSS variables must be set using the environment variable APUS_STYLES in key and value pairs. The key is the variable to be set and must start with two dashes (--). Keys and values must be separated by a colon (:). Multiple key and value pairs are separated by a semicolon (;). Example:

--name-of-variable-one:value1;--name-of-variable-two:value2

The following table contains the CSS variables you can modify to change the user interface and their default values:

CSS VariableDefaultDescription
--event-background-color#e7eaeeThe color for the background of the event agenda.
--event-title-color#262626The color for the title of the event agenda.
--event-text-color#262626The color for the text of the event agenda.
--event-running-session-color#ffffffThe color for the background of rooms with running sessions.
--event-running-session-bordervar(--event-room-border)The border for rooms with running sessions.
--event-next-session-color#eeeeeeThe color for the background of rooms with sessions starting next.
--event-next-session-bordervar(--event-room-border)The border for rooms with sessions starting next.
--event-closed-room-color#ccccccThe color for the background of closed rooms.
--event-closed-room-bordervar(--event-room-border)The border for closed rooms.
--event-room-border1px solid #909090The border for the event room.
--event-image-position-bottom10pxThe position of the optional event image relative to the bottom.
--event-image-position-left10pxThe position of the optional event image relative to the left.
--event-image-widthautoThe width of the optional event image.
--event-image-heightautoThe height of the optional event image.
--social-background-color#e7eaeeThe color for the background of the social wall.
--social-title-color#262626The color for the title of the social wall.
--social-text-color#262626The color for the text of the social wall.
--social-post-background-color#ffffffThe color for the background of social posts.
--social-post-border1px solid #909090The border for the social posts.
--speaker-avatar-background-colortransparentThe color for the background of speaker avatars.
--speaker-avatar-bordernoneThe border for the speaker avatars.

Note

Default values may change in newer versions of *Apus*. Compare your custom styles before and after an update.
⁠Example Styles
⁠BaselOne
--event-background-color: #9a1445;
--event-title-color: #ffffff;
--event-text-color: #ffffff;
--event-running-session-color: #7248f0;
--event-next-session-color: #7248f0;
--event-closed-room-color: #7248f0;
--event-room-border: 1px solid #000000;
--event-image-border: 1px solid #000000;
--event-image-width: 250px;
--event-image-height: 250px;

--social-background-color: #7248f0;
--social-title-color: #ffffff;
--social-text-color: #000000;
--social-post-background-color: #ffffff;
--social-post-border: 1px solid #000000;

--speaker-avatar-background-color: transparent;
--speaker-avatar-border: none;
⁠Java Forum Stuttgart
--event-background-color: #fcb913;
--event-title-color: #000000;
--event-text-color: #000000;
--event-running-session-color: #fff8dd;
--event-next-session-color: #fff8dd;
--event-closed-room-color: #fff8dd;
--event-room-border: 1px solid #000000;
--event-image-border: 1px solid #000000;
--event-image-width: 852px;

--social-background-color: #fff8dd;
--social-title-color: #000000;
--social-text-color: #000000;
--social-post-background-color: #ffffff;
--social-post-border: 1px solid #fcb913;
⁠JavaLand
--event-running-session-color: #e1f1f2;
--event-running-session-border: 1px solid #36928f;
--event-next-session-color: #bde1e2;
--event-next-session-border: 1px solid #36928f;
--event-closed-room-color: #efe3f0
--event-closed-room-border: 1px solid #d479af;

--social-post-border: 1px solid #36928f;
⁠Voxxed Days Zürich
--event-background-color: #4c4f53;
--event-title-color: #8ed1fc;
--event-text-color: #000000;
--event-running-session-color: #ebfffc;
--event-next-session-color: #ebfffc;
--event-closed-room-color: #ebfffc;
--event-room-border: none;
--event-image-position-bottom: 10px;
--event-image-position-left: 10px;
--event-image-width: 425px;

--social-background-color: #58c3f0;
--social-title-color: #ffffff;
--social-text-color: #000000;
--social-post-background-color: #ebf7ff;
--social-post-border: none;

--speaker-avatar-background-color: transparent;
--speaker-avatar-border: none;
⁠Create Hashed Password

For security reasons the password is not stored in cleartext. Apus requires the password to be hashed using bcrypt⁠. Of course, Apus can do this for you. Start the JAR file providing the parameter -p followed by the password you want to create a hash for. The output will show you two lines of code. The first line contains the hashed password and the second line contains the same hashed password, but with the dollar signs escaped ready to copy and paste it into a docker-compose.yaml. Examples:

⁠Using the Command Line
java -jar apus.jar -p 12345
Hashed password for environment variable: $2a$10$nybQbl/iY8SRJkfHJVncS.L5.OC3KJ6VRBYVAID7qnUqwylmn/BtK
Hashed password for Docker Compose file: $$2a$$10$$nybQbl/iY8SRJkfHJVncS.L5.OC3KJ6VRBYVAID7qnUqwylmn/BtK
⁠Using Docker
docker run mcpringle/apus java -jar /usr/app/app.jar -p 12345
Hashed password for environment variable: $2a$10$nybQbl/iY8SRJkfHJVncS.L5.OC3KJ6VRBYVAID7qnUqwylmn/BtK
Hashed password for Docker Compose file: $$2a$$10$$nybQbl/iY8SRJkfHJVncS.L5.OC3KJ6VRBYVAID7qnUqwylmn/BtK
⁠Using Podman
podman run docker.io/mcpringle/apus java -jar /usr/app/app.jar -p 12345
Hashed password for environment variable: $2a$10$nybQbl/iY8SRJkfHJVncS.L5.OC3KJ6VRBYVAID7qnUqwylmn/BtK
Hashed password for Docker Compose file: $$2a$$10$$nybQbl/iY8SRJkfHJVncS.L5.OC3KJ6VRBYVAID7qnUqwylmn/BtK
⁠Configuration Files

All configuration files are completely optional and stored in an .apus subdirectory of the home directory of the user running Apus.

FileDescription
blockedProfilesThis file contains blocked profiles, one per line.
hiddenPostIdsThis file contains IDs of hidden posts, one per line.

If you are running Apus in a Docker or Podman container and want to keep your configuration files between restarts, you can bind the .apus directory of the running container to an existing directory on your host system. Important: The directory on your host system must exist and must be writeable by the Apus user inside the container (which is user ID 1000 and group ID 1000). Consult the documentation of your host operating system if you need information about how to set the correct access rights.

Examples for binding the .apus directory of the running container to an existing directory on your host system using the -v option of Docker or Podman:

⁠Using Docker
docker run \
    --name apus \
    -p 80:8080 \
    -v $HOME/mydir:/home/apus/.apus \
    -e APUS_SOCIAL_HASHTAGS=java \
    -e APUS_TIMEZONE=Europe/Zurich \
    -d \
    --rm \
    mcpringle/apus
⁠Using Podman
podman run \
    --name apus \
    -p 80:8080 \
    -v $HOME/mydir:/home/apus/.apus \
    -e APUS_SOCIAL_HASHTAGS=java \
    -e APUS_TIMEZONE=Europe/Zurich \
    -d \
    --rm \
    docker.io/mcpringle/apus

⁠Communication

⁠Matrix Chat

There is a channel at Matrix for quick and easy communication. This is publicly accessible for everyone. For developers as well as users. The communication in this chat is to be regarded as short-lived and has no documentary character.

You can find our Matrix channel here: @project-apus:ijug.eu⁠

⁠GitHub Discussions

We use the corresponding GitHub function for discussions. The discussions held here are long-lived and divided into categories for the sake of clarity. One important category, for example, is that for questions and answers.

Discussions on GitHub: https://github.com/McPringle/apus/discussions⁠
Questions and Answers: https://github.com/McPringle/apus/discussions/categories/q-a⁠

AGPL License⁠

Copyright (C) Marcus Fihlon and the individual contributors to Apus.

This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License along with this program. If not, see http://www.gnu.org/licenses/⁠.

Tag summary

Content type

Image

Digest

sha256:0b1c815a4…

Size

205.7 MB

Last updated

about 12 hours ago

docker pull mcpringle/apus