Skip to main content

Configuration

These are all environment variables that can be used to configure the application.

Environment variables

Variable NameServicesDefault ValueDescription
SPRING_DATASOURCE_URLserverjdbc:postgresql://localhost:5444/thesis-managementPostgres connection url
SPRING_DATASOURCE_USERNAMEserverthesis-management-postgresPostgres username
SPRING_DATASOURCE_PASSWORDserverthesis-management-postgresPostgres password
POSTGRES_IMAGE_TAGdocker compose18.4-alpinePostgreSQL Docker image tag used by the compose files. Non-secret; optional (defaults to the bundled tag). See Database & Liquibase.
KEYCLOAK_HOSTserver, clienthttp://localhost:8181Keycloak hostname
KEYCLOAK_REALM_NAMEserver, clientthesis-managementKeycloak realm name
KEYCLOAK_CLIENT_IDserver, clientthesis-management-appKeycloak client id
PASSKEY_RP_IDclientwindow.location.hostnameWebAuthn 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_NAMEclientTUM AETWebAuthn relying party display name shown by the browser during passkey registration.
PASSKEY_PROMPT_APPSclientComma-separated app names shown as badges in the passkey registration prompt. Leave empty unless those apps share the same passkey setup.
KEYCLOAK_SERVICE_CLIENT_IDserverKeycloak service client id
KEYCLOAK_SERVICE_CLIENT_SECRETserverKeycloak service client secret
POSTFIX_HOSTserverlocalhostPostfix host to send emails. Only required if emails are enabled.
POSTFIX_PORTserver25Postfix port
POSTFIX_USERNAMEserverPostfix username
POSTFIX_PASSWORDserverPostfix password
CLIENT_HOSTserver, clienthttp://localhost:3100Hosting url of client
SERVER_HOSTclienthttp://localhost:8180Hosting url of server
MAIL_ENABLEDserverfalseIf set to true, the application will try to send emails via Postfix
MAIL_SENDERservertest@ios.ase.cit.tum.deSender email address
UPLOAD_FOLDERserveruploadsFolder where uploaded files will be stored
APPLICATION_TITLEclientThesis ManagementHTML title of the client
GENDERSclient{"MALE":"Male","FEMALE":"Female","OTHER":"Other","PREFER_NOT_TO_SAY":"Prefer not to say"}Available genders that a user can configure
STUDY_DEGREESclient{"BACHELOR":"Bachelor","MASTER":"Master"}Available study degrees
STUDY_PROGRAMSclient{"COMPUTER_SCIENCE":"Computer Science","INFORMATION_SYSTEMS":"Information Systems","GAMES_ENGINEERING":"Games Engineering","MANAGEMENT_AND_TECHNOLOGY":"Management and Technology","OTHER":"Other"}Available study programs
THESIS_TYPESclient{"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
LANGUAGESclient{"ENGLISH":"English","GERMAN":"German"}Available languages for presentations
CUSTOM_DATAclient{"GITHUB":{"label":"Github Profile","required":false}}Additional data the user can add to the profile
THESIS_FILESclient{"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_CRONserver0 0 4 * * *Cron expression for the nightly data retention cleanup job. Set to - to disable.
REJECTED_APP_RETENTION_DAYSserver365Number of days to retain rejected applications before automatic deletion.
DATA_EXPORT_PATHserverdata-exportsDirectory where data export ZIP files are stored. Should be backed up if persistent exports are needed.
DATA_EXPORT_RETENTION_DAYSserver7Number of days to keep data export files before automatic deletion.
DATA_EXPORT_COOLDOWN_DAYSserver7Minimum number of days between data export requests per user.
INACTIVE_USER_DAYSserver365Number of days of inactivity after which student accounts are automatically disabled.
LIQUIBASE_CONTEXTSserverprodComma-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_NAMEclientThesis ManagementChair name
CHAIR_URLclientwindow.originURL to chair website
AI_FEATURES_ENABLEDserver, clientfalseMaster 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_IMAGESserver(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_KEYserverAPI 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_URLserverhttps://gpu.aet.cit.tum.de/apiBase URL of the OpenAI-compatible endpoint used by the AI feedback module.
OPENAI_CHAT_MODELservergoogle/gemma-4-26B-A4B-itChat model name passed to the OpenAI-compatible endpoint.
OPENAI_CHAT_TEMPERATUREserver1.0Sampling temperature passed to the chat model for AI reviews. Lower values make findings more deterministic. Only consulted when AI_FEATURES_ENABLED=true.