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, client | false | Master switch for the AI feedback module (/v2/ai-review/**, ReviewService, AIFeedbackService). Shared setting — set the same value on both services. The server registers/serves the endpoints; the client uses it to decide whether to render the AI buttons (students get a "Get AI Feedback" button on their proposal and thesis sections, supervisors get a "Generate with AI" button inside the Request Changes dialog). If the two disagree, the client shows buttons the server answers with 404, or hides features the server exposes. When true, also set OPENAI_API_KEY / OPENAI_BASE_URL / OPENAI_CHAT_MODEL on the server to point at a reachable LLM endpoint. Enabled by default for local development (server: application-dev.yml; client: pnpm dev). |
| AI_REVIEW_INCLUDE_IMAGES | server | (auto-detect) | Force per-page image rendering on (true) or off (false). Unset lets the review pipeline enable images automatically when the configured OPENAI_CHAT_MODEL is a known vision-capable family (e.g. gpt-4o, claude-3+, gemini-1.5+, qwen-vl, pixtral). Turn off explicitly to shorten prompts and save tokens on text-only models. |
| 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. |
| OPENAI_CHAT_TEMPERATURE | server | 1.0 | Sampling temperature passed to the chat model for AI reviews. Lower values make findings more deterministic. Only consulted when AI_FEATURES_ENABLED=true. |