Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
ff274f0
Refactor conference supervisor seeding to use supervisedDelegationMem…
ahsanfarooq210 Jan 11, 2026
7ea3749
added schema for messages in conference
ahsanfarooq210 Jan 11, 2026
72ae8f0
Add communication preferences and delegation email settings to user a…
ahsanfarooq210 Jan 11, 2026
338561f
Add canReceiveDelegationMail field to user input and update my-accoun…
ahsanfarooq210 Jan 11, 2026
31e54fe
Implement messaging feature with compose and history views, including…
ahsanfarooq210 Jan 13, 2026
01a5072
added basic UI for messaging
ahsanfarooq210 Jan 13, 2026
cd0bb8d
took a pull from main
ahsanfarooq210 Jan 13, 2026
a5b8632
added instruction to run project on windows
ahsanfarooq210 Jan 13, 2026
669105b
feat: complete messaging feature with opt-in and privacy controls
google-labs-jules[bot] Jan 14, 2026
a1951fe
feat: complete messaging feature with opt-in and privacy controls
google-labs-jules[bot] Jan 14, 2026
c5295ac
feat: complete messaging feature with opt-in and privacy controls
google-labs-jules[bot] Jan 15, 2026
997de75
feat: Implement conference delegation messaging with compose UI, emai…
ahsanfarooq210 Jan 16, 2026
ba287b0
feat: Enhance messaging functionality with MessageAudit inputs and up…
ahsanfarooq210 Jan 17, 2026
b2db8cb
feat: Update user retrieval logic in messaging compose handler to use…
ahsanfarooq210 Jan 17, 2026
723bb08
feat: Improve messaging compose functionality with recipient mail val…
ahsanfarooq210 Jan 17, 2026
150bdad
feat: Re-enable recipient mail validation in messaging compose handler
ahsanfarooq210 Jan 17, 2026
0d85571
feat: Enhance messaging compose UI with error handling and improved u…
ahsanfarooq210 Jan 17, 2026
06dcf93
feat: Implement messaging history and compose functionality with erro…
ahsanfarooq210 Jan 17, 2026
0c4dad4
feat: implement messaging reply functionality and composer pattern
google-labs-jules[bot] Jan 18, 2026
13a5704
Merge pull request #2 from ahsanfarooq210/messaging-reply-implementat…
ahsanfarooq210 Jan 23, 2026
7e5ea0e
Merge pull request #1 from ahsanfarooq210/messaging-feature-complete-…
ahsanfarooq210 Jan 23, 2026
adda470
added translations
ahsanfarooq210 Jan 23, 2026
0c76fae
fixed warnings in compose page
ahsanfarooq210 Jan 23, 2026
1aa01ee
added fixes
ahsanfarooq210 Jan 23, 2026
fb73ecd
improved the UI
ahsanfarooq210 Jan 23, 2026
eef3ab1
Merge branch 'main' into feat/messaging/role-based-email-messages
Strehk Jan 24, 2026
3e16062
Small enhancements
Strehk Jan 24, 2026
8864ea4
Merge branch 'main' into feat/messaging/role-based-email-messages
Strehk Feb 5, 2026
14d1934
Merge Main
Strehk Feb 19, 2026
ad8af25
wip
Strehk Feb 19, 2026
225440e
Streamline DaisyUI
Strehk Feb 19, 2026
816c2fc
wip
Strehk Feb 19, 2026
bd4499f
improve email
Strehk Feb 19, 2026
3d9dc36
Add modal preview for archive
Strehk Feb 19, 2026
5b75664
Refactor
Strehk Feb 19, 2026
e98a477
Security fixes
Strehk Feb 19, 2026
2ab30af
Add Inbox
Strehk Feb 20, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,21 @@ bun run dev:server # starts the actual dev server (vite&sveltekit)
bunx lefthook install
```

## Running on Windows

Some `package.json` scripts in this repository assume a Unix-like shell (bash) and may not work out of the box on Windows `cmd.exe` or PowerShell. If you develop on Windows, consider one of the options below:

- **Use WSL or Git Bash:** Install Windows Subsystem for Linux (WSL) or Git for Windows and run the development commands from there. This is the easiest option when scripts use shell operators (like `&&`, `rm`, or `sed`).
- **Modify `package.json` scripts for PowerShell / cmd:** Replace Unix-only commands with cross-platform equivalents or use Node-based packages.

if you are running on windows then change copy the following script tags and replace the cooresponding script tags in package.json

Comment thread
ahsanfarooq210 marked this conversation as resolved.
```bash
"dev": "concurrently \"bun run dev:server\" \"bun run dev:docker\"",
"dev:docker": "docker compose -f ./dev.docker-compose.yml up",
"dev:server": "bunx tsx -e \"const {spawn}=require('child_process'); const sleep=(ms)=>new Promise(r=>setTimeout(r,ms)); const run=(cmd,args)=>new Promise(res=>{const p=spawn(cmd,args,{stdio:'inherit',shell:process.platform==='win32'}); p.on('exit',c=>res(c??0));}); (async()=>{for(;;){let c=await run('bunx',['svelte-kit','sync']); if(c!==0){console.log('🔄 sync failed, retrying...'); await sleep(1000); continue;} c=await run('bunx',['vite']); console.log('🔄 Server exited, restarting...'); await sleep(1000);}})();\"",
```
Comment thread
ahsanfarooq210 marked this conversation as resolved.

## Deployment

The easiest way to deploy delegator on your own hardware is to use our provided [docker images](https://hub.docker.com/r/deutschemodelunitednations/delegator). You can find an example docker compose file in the [example](./example/) directoy. Please note that delegator relies on an [OIDC](https://auth0.com/intro-to-iam/what-is-openid-connect-oidc) issuer to be connected and properly configured. We recommend [ZITADEL](https://zitadel.com/) but any issuer of your choice will work. There are some additional instructions on this topic to be found in the example compose file.
Expand Down
114 changes: 114 additions & 0 deletions messages/de.json
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,9 @@
"allPiecesCollected": "Alle Puzzlestücke wurden gesammelt!",
"allRightsReservedby": "Alle Rechte vorbehalten von",
"allStudentsAcceptedMessage": "Alle deine Schüler*innen wurden angenommen!",
"allowDelegationMailer": "Nachrichten von anderen Delegierten empfangen",
"allowDelegationMailerDescription": "Wenn du dies aktivierst, können andere Delegierte dir Nachrichten per E-Mail senden. Deine E-Mail-Adresse wird dabei <strong>nicht</strong> weitergegeben. Du kannst direkt über die E-Mail-Benachrichtigung antworten.",
"allowMessaging": "Nachrichten für Teilnehmende erlauben",
Comment on lines +59 to +61
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Adjust new messaging strings to gender-inclusive forms.

New entries like allowDelegationMailer, allowDelegationMailerDescription, messageMessagePlaceholder, and messagingAboutDescription still use gendered nouns (e.g., “Delegierten”, “Delegierte”, “Akteuren”). Please switch these to gender-asterisk or neutral participle forms (e.g., “Delegierten”, “Nichtstaatlicher Akteur*in”, or another neutral phrasing consistent with your style).

Based on learnings: When changes are made to German translations in messages/de.json, verify that person-related nouns use gender-inclusive language with gender star (*) or neutral participle forms, while avoiding gendered forms like 'Teilnehmer', 'Benutzer', 'Betreuer', 'Administrator', 'Delegierter'.

Also applies to: 771-787

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@messages/de.json` around lines 59 - 61, Update the German translation entries
to use gender-inclusive forms: replace gendered nouns in the keys
allowDelegationMailer, allowDelegationMailerDescription,
messageMessagePlaceholder, messagingAboutDescription (and other person-related
entries around the same change set) with gender-asterisk or neutral participle
forms (e.g., "Delegierte*n" instead of "Delegierten/Delegierte",
"Nichtstaatliche*r Akteur*in" or similar consistent neutral phrasing),
preserving existing HTML/markup (like <strong>) and punctuation; scan nearby
entries mentioned in the review for other occurrences of 'Teilnehmer',
'Benutzer', 'Betreuer', 'Administrator', 'Delegierter' and change them to the
agreed gender-neutral style to keep translations consistent.

"alpha3Code": "ISO Alpha 3 Code",
"alphabetical": "Alphabetisch",
"alreadRegistered": "Bereits angemeldet",
Expand Down Expand Up @@ -347,6 +350,8 @@
"committeesAndAgendaItems": "Gremien und Themen",
"committeesSucessfullyAssigned": "Gremien wurden erfolgreich verteilt.",
"communication": "Kommunikation",
"communicationPreferences": "Kommunikationseinstellungen",
"communicationPreferencesDescription": "Wähle, welche Updates du zu deiner Delegation erhalten möchtest.",
"compareVersion": "Mit einer anderen Version vergleichen",
"compareVersions": "Versionen vergleichen",
"complete": "Vollständig",
Expand All @@ -364,6 +369,7 @@
"completeSignupWarningText": "Obwohl du bereits eine Delegation angelegt hast oder einer beigetreten bist, ist die Registrierung noch nicht abgeschlossen. Bitte schließe die Registrierung rechtzeitig vor Ablauf der Anmeldefrist ab, damit wir die Anmeldung deiner Delegation im Auswahlverfahren berücksichtigen können.",
"completeSignupWarningTextSingleParticipant": "Obwohl du dich bereits für eine Rolle beworben haben, ist die Registrierung noch nicht abgeschlossen. Bitte schließe deine Registrierung rechtzeitig vor Ablauf der Anmeldefrist ab, damit wir die Bewerbung im Auswahlverfahren berücksichtigen können.",
"completedFlags": "Vollständige Flaggen",
"compose": "Verfassen",
"conference": "Konferenz",
"conferenceAge": "Konferenzalter",
"conferenceCompleteMessage": "Wir hoffen, du hattest eine tolle Zeit und hast viel gelernt. Danke, dass du dabei warst!",
Expand Down Expand Up @@ -754,6 +760,114 @@
"mediaConsentStatus": "Fotostatus",
"members": "Mitglieder",
"membersPerDelegation": "Plätze pro Delegation",
"messageCancelButton": "Abbrechen",
"messageCompose": "Verfassen",
"messageComposeAnnouncement": "Ankündigung verfassen",
"messageComposeMessage": "Nachricht verfassen",
"messageDraft": "Entwurf",
"messageDraftAMessage": "Eine neue Nachricht entwerfen",
"messageHistory": "Verlauf",
"messageMessageBody": "Nachricht",
"messageMessagePlaceholder": "Sehr geehrte Delegierte,\n\nich möchte ein bilaterales Treffen vorschlagen, um über...",
"messageNoMessagesSent": "Noch keine Nachrichten versendet. Sende deine erste Nachricht von der Verfassen-Seite.",
"messageRecipient": "Empfänger*in",
"messageRecipientNotEnabled": "Empfänger*in hat Messaging nicht aktiviert.",
"messageReviewDeliveryStatus": "Überprüfe den Zustellungsstatus und die Nachrichtenaktivität für diese Konferenz.",
"messageReviewSent": "Gesendete überprüfen",
"messageSendButton": "Nachricht senden",
"messageSendToParticipants": "Eine Nachricht an Konferenzteilnehmende senden",
"messageSent": "Nachricht gesendet.",
"messageSentLog": "Sendelog",
"messageStatusDelivered": "Zugestellt",
"messageSubject": "Betreff",
"messageSubjectPlaceholder": "z.B. Vorschlag für bilaterales Treffen zu Resolution A/RES/1",
"messaging": "Nachrichten senden",
"messagingAboutDeliveryLog": "Jede Nachricht wird protokolliert — überprüfe deinen Sendverlauf jederzeit.",
"messagingAboutDescription": "Nutze die Konferenznachrichten, um mit anderen Delegierten, Nichtstaatlichen Akteuren und der Presse zu kommunizieren — vor und während der Konferenz.",
"messagingAboutGrouped": "Empfangende sind nach Gremium, Nichtstaatlichem Akteur und Rolle sortiert.",
"messagingAboutPrivacy": "Deine E-Mail-Adresse wird niemals weitergegeben — Empfangende sehen nur deine Konferenzrolle.",
"messagingAboutRecipientNotice": "Empfangende erhalten deine Nachricht als E-Mail-Benachrichtigung.",
"messagingAboutThreading": "Antworten enthalten die ursprüngliche Nachricht für einen nahtlosen Gesprächsverlauf.",
"messagingAboutTitle": "Konferenznachrichten",
"messagingActivationNotice": "Du musst E-Mail-Nachrichten in deinen Kontoeinstellungen aktivieren, um Nachrichten empfangen und senden zu können.",
"messagingBackToGroups": "Zurück zu Gruppen",
"messagingCannotReceiveReplies": "Du kannst keine weiteren Antworten empfangen.",
"messagingCategoryCommittee": "Gremium",
"messagingCategoryCustomRole": "Sonderrolle",
"messagingCategoryNSA": "Nichtstaatlicher Akteur",
"messagingCenter": "Nachrichtenzentrale",
"messagingCheckDeliveryStatus": "Zustellungsstatus prüfen",
"messagingClearActionDeadlines": "Fristen bei Bedarf angeben",
"messagingConferenceMessaging": "Konferenznachrichten",
"messagingDataNotice": "Nachrichten werden im Klartext (unverschlüsselt) zur Missbrauchsprävention und Compliance-Nachverfolgung gespeichert.",
"messagingDeliveryLog": "Zustellungsprotokoll",
"messagingDescription": "Tritt mit anderen Konferenzteilnehmenden in Kontakt.",
"messagingDisabledForAccount": "Messaging ist für dein Konto deaktiviert.",
"messagingEnableInSettings": "In den Einstellungen aktivieren",
"messagingGuidelineConcise": "Halte Nachrichten kurz und zielgerichtet",
"messagingGuidelineDeadlines": "Verwende klare Handlungsaufforderungen und Fristen, um Hin und Her zu reduzieren.",
"messagingGuidelineDiplomaticCode": "Wahre den diplomatischen Verhaltenskodex — bleibe professionell",
"messagingGuidelineNoSpam": "Kein Spam — sende nur relevante Nachrichten",
"messagingGuidelineOptIn": "Sende nur an Empfänger*innen, die zugestimmt haben, und vermeide Duplikate.",
"messagingGuidelineRespectful": "Sei respektvoll und höflich in aller Kommunikation",
"messagingGuidelineShort": "Halte Betreffzeilen kurz und spezifisch, um die Sichtbarkeit zu verbessern.",
"messagingGuidelines": "Richtlinien",
"messagingGuidelinesDescription": "Bitte beachte diese Regeln bei der Nutzung der Konferenznachrichten",
"messagingHideThread": "Gesprächsverlauf ausblenden",
"messagingInbox": "Posteingang",
"messagingInboxDescription": "Zeige Nachrichten an, die du von anderen Teilnehmenden erhalten hast.",
"messagingInboxEmpty": "Keine Nachrichten empfangen",
"messagingInboxEmptyDescription": "Du hast noch keine Nachrichten erhalten. Sobald andere Teilnehmende dir Nachrichten senden, erscheinen sie hier.",
"messagingInboxExplanation": "Der Posteingang ist ein schreibgeschütztes Archiv der an dich gesendeten Nachrichten. Alle Nachrichten werden auch per E-Mail zugestellt — diese Ansicht dient deiner Übersicht.",
"messagingInboxReceived": "Empfangen",
"messagingInboxSender": "Von",
"messagingInboxTitle": "Deine Nachrichten",
"messagingKeepConcise": "Halte es prägnant und handlungsorientiert",
"messagingLogsStored": "Nachrichtenprotokolle werden zur Prüfung und Compliance gespeichert.",
"messagingMessageDetails": "Nachrichtendetails",
"messagingMessaging": "Nachrichten",
"messagingNewMessage": "Neue Nachricht",
"messagingNoEligibleRecipients": "Keine geeigneten Empfänger*innen gefunden",
"messagingNoGroupsAvailable": "Keine Gruppen mit berechtigten Empfangenden gefunden",
"messagingNoMessagesYet": "Noch keine Nachrichten",
"messagingNoRecipientsInGroup": "Keine berechtigten Empfangenden in dieser Gruppe",
"messagingNoReplyWarning": "Du kannst keine Antworten erhalten.",
"messagingOnlyEnabledUsers": "Nur Nutzer*innen, die Messaging aktiviert haben, werden in dieser Liste angezeigt",
"messagingOriginalMessage": "Ursprüngliche Nachricht",
"messagingOverview": "Übersicht",
"messagingPreview": "Vorschau",
"messagingQuickActions": "Schnellaktionen",
"messagingRecipientCount": "{count} Empfangende",
"messagingRecipientLabel": "Empfänger*in",
"messagingRecipientNotEnabledToast": "Empfänger*in hat Messaging nicht aktiviert.",
"messagingRecipientRequired": "Empfänger*in auswählen...",
"messagingReply": "Antwort",
"messagingReplySent": "Antwort gesendet.",
"messagingReplyToMessage": "Auf Nachricht antworten",
"messagingRespondingTo": "Antwort an {recipientName}",
"messagingSavedInHistory": "Diese Nachricht wird im Zustellungsverlauf gespeichert",
"messagingSelectGroup": "Gruppe auswählen...",
"messagingSelectRecipient": "Empfänger*in auswählen...",
"messagingSelectRecipientDrawer": "Empfänger*in auswählen",
"messagingSendFirstMessage": "Sende deine erste Nachricht",
"messagingSendReply": "Antwort senden",
"messagingSenderNotEnabled": "Du musst Messaging in deinen Kontoeinstellungen aktivieren, bevor du Nachrichten senden kannst.",
"messagingSent": "Gesendet",
"messagingSentHistory": "Sendverlauf",
"messagingShowThread": "Gesprächsverlauf anzeigen",
"messagingStartTargetedMessage": "Starte eine gezielte Nachricht an Delegationen, Gremien oder einzelne Teilnehmende.",
"messagingStatus": "Status",
"messagingThreadTitle": "Gesprächsverlauf",
"messagingTipSubjectLine": "Tipp: Verwende klare Betreffzeilen wie \"Gremienagenda-Sperrung - 18:00\", um die Rücklaufquote zu verbessern",
"messagingTo": "An",
"messagingToggleDisabled": "E-Mail-Nachrichten sind deaktiviert — aktiviere sie, um Nachrichten senden und empfangen zu können.",
"messagingToggleEnabled": "E-Mail-Nachrichten sind aktiviert — du kannst Nachrichten senden und empfangen.",
"messagingUnableToLoadRecipients": "Empfänger*in konnte nicht geladen werden",
"messagingVerifyRecipient": "Empfänger*in und Konferenz überprüfen",
"messagingViewInbox": "Posteingang anzeigen",
"messagingViewSentHistory": "Sendverlauf anzeigen",
"messagingWriteReplyPlaceholder": "Schreibe deine Antwort hier...",
"messagingYou": "Du",
"missingInformation": "Fehlende Informationen",
"motivation": "Motivation",
"myAccount": "Mein Konto",
Expand Down
Loading