Configuration
These are all environment variables that can be used to configure the application.
Environment variables
| Variable Name | Services | Default Value | Description |
|---|---|---|---|
| SPRING_DATASOURCE_URL | server | jdbc:postgresql://localhost:5444/thesis-management | Postgres connection url |
| SPRING_DATASOURCE_USERNAME | server | thesis-management-postgres | Postgres username |
| SPRING_DATASOURCE_PASSWORD | server | thesis-management-postgres | Postgres password |
| POSTGRES_IMAGE_TAG | docker compose | 18.4-alpine | PostgreSQL Docker image tag used by the compose files. Non-secret; optional (defaults to the bundled tag). See Database & Liquibase. |
| KEYCLOAK_HOST | server, client | http://localhost:8181 | Keycloak hostname |
| KEYCLOAK_REALM_NAME | server, client | thesis-management | Keycloak realm name |
| KEYCLOAK_CLIENT_ID | server, client | thesis-management-app | Keycloak client id |
| PASSKEY_RP_ID | client | window.location.hostname | WebAuthn relying party ID used for passkey registration/login. Must match Keycloak's WebAuthn Passwordless RP ID. Use a hostname only, without protocol or port. |
| PASSKEY_RP_NAME | client | TUM AET | WebAuthn relying party display name shown by the browser during passkey registration. |
| PASSKEY_PROMPT_APPS | client | Comma-separated app names shown as badges in the passkey registration prompt. Leave empty unless those apps share the same passkey setup. | |
| KEYCLOAK_SERVICE_CLIENT_ID | server | Keycloak service client id | |
| KEYCLOAK_SERVICE_CLIENT_SECRET | server | Keycloak service client secret | |
| POSTFIX_HOST | server | localhost | Postfix host to send emails. Only required if emails are enabled. |
| POSTFIX_PORT | server | 25 | Postfix port |
| POSTFIX_USERNAME | server | Postfix username | |
| POSTFIX_PASSWORD | server | Postfix password | |
| CLIENT_HOST | server, client | http://localhost:3100 | Hosting url of client |
| SERVER_HOST | client | http://localhost:8180 | Hosting url of server |
| MAIL_ENABLED | server | false | If set to true, the application will try to send emails via Postfix |
| MAIL_SENDER | server | test@ios.ase.cit.tum.de | Sender email address |
| UPLOAD_FOLDER | server | uploads | Folder where uploaded files will be stored |
| APPLICATION_TITLE | client | Thesis Management | HTML title of the client |
| GENDERS | client | {"MALE":"Male","FEMALE":"Female","OTHER":"Other","PREFER_NOT_TO_SAY":"Prefer not to say"} | Available genders that a user can configure |
| STUDY_DEGREES | client | {"BACHELOR":"Bachelor","MASTER":"Master"} | Available study degrees |
| STUDY_PROGRAMS | client | {"COMPUTER_SCIENCE":"Computer Science","INFORMATION_SYSTEMS":"Information Systems","GAMES_ENGINEERING":"Games Engineering","MANAGEMENT_AND_TECHNOLOGY":"Management and Technology","OTHER":"Other"} | Available study programs |
| THESIS_TYPES | client | {"BACHELOR":{"long":"Bachelor Thesis","short":"BA"},"MASTER":{"long":"Master Thesis","short":"MA"},"INTERDISCIPLINARY_PROJECT":{"long":"Interdisciplinary Project","short":"IDP"},"GUIDED_RESEARCH":{"long":"Guided Research","short":"GR"}} | Available thesis types |
| LANGUAGES | client | {"ENGLISH":"English","GERMAN":"German"} | Available languages for presentations |
| CUSTOM_DATA | client | {"GITHUB":{"label":"Github Profile","required":false}} | Additional data the user can add to the profile |
| THESIS_FILES | client | {"PRESENTATION":{"label":"Presentation","description":"Presentation (PDF)","accept":"pdf","required":true},"PRESENTATION_SOURCE":{"label":"Presentation Source","description":"Presentation Source (KEY, PPTX)","accept":"any","required":false},"FEEDBACK_LOG":{"label":"Feedback Log","description":"Feedback Log (PDF)","accept":"pdf","required":false}} | Additional files the student can add to the thesis |
| DATA_RETENTION_CRON | server | 0 0 4 * * * | Cron expression for the nightly data retention cleanup job. Set to - to disable. |
| REJECTED_APP_RETENTION_DAYS | server | 365 | Number of days to retain rejected applications before automatic deletion. |
| DATA_EXPORT_PATH | server | data-exports | Directory where data export ZIP files are stored. Should be backed up if persistent exports are needed. |
| DATA_EXPORT_RETENTION_DAYS | server | 7 | Number of days to keep data export files before automatic deletion. |
| DATA_EXPORT_COOLDOWN_DAYS | server | 7 | Minimum number of days between data export requests per user. |
| INACTIVE_USER_DAYS | server | 365 | Number of days of inactivity after which student accounts are automatically disabled. |
| LIQUIBASE_CONTEXTS | server | prod | Comma-separated list of Liquibase contexts to execute on startup. Must be prod (or unset) in production — the value dev activates the 23_seed_dev_test_data.xml changelog, which seeds fake users, topics, applications, and theses, and application-dev.yml already sets this to dev for the dev profile. Never set this to dev (or include dev) on a production deployment. |
| CHAIR_NAME | client | Thesis Management | Chair name |
| CHAIR_URL | client | window.origin | URL to chair website |
| AI_FEATURES_ENABLED | server | false | Master switch for the AI feedback module (/v2/ai-review/**, ReviewService, PdfService). Work in progress — not yet fully integrated or guaranteed to work. Leave at false in production. When true, also set OPENAI_API_KEY / OPENAI_BASE_URL / OPENAI_CHAT_MODEL to point at a reachable LLM endpoint. Enabled by default in application-dev.yml for local development. |
| OPENAI_API_KEY | server | API key used by Spring AI's OpenAI client. Only consulted when AI_FEATURES_ENABLED=true; the prod default placeholder exists only so the OpenAI auto-configuration can construct its bean. | |
| OPENAI_BASE_URL | server | https://gpu.aet.cit.tum.de/api | Base URL of the OpenAI-compatible endpoint used by the AI feedback module. |
| OPENAI_CHAT_MODEL | server | google/gemma-4-26B-A4B-it | Chat model name passed to the OpenAI-compatible endpoint. |