🎵 This tool was entirely built through pure vibe coding — no manual coding, just vibes and AI.
A lightweight always-on-top desktop app for tracking conference and journal submission deadlines. Built with Python + PyQt5. Data is stored in a plain Markdown file — no database, no cloud.
- Color-coded urgency — cards change color automatically based on days remaining
- 🔴 ≤ 7 days · 🟠 ≤ 14 days · 🟡 ≤ 30 days · 🟢 ≤ 60 days · 🔵 > 60 days · ⚫ past
- Always-on-top toggle — keep it visible over other windows, or disable when not needed
- Auto-resizing window — height adjusts to fit all entries, no scrollbar
- Add / Edit / Delete entries directly from the UI
- Live file watching — edit
deadlines.mdin any text editor and the app updates instantly - System tray — minimise to tray, double-click to restore
- Adjustable font size — A+ / A− via the ⚙ settings menu
- No installation required — single
.exefor Windows
- Download DDLTracker.zip from Releases
- Extract to any folder — keep
DDLTracker.exeanddeadlines.mdin the same folder - Edit
deadlines.mdto add your deadlines (see format below) - Double-click
DDLTracker.exe
⚠️ deadlines.mdmust be in the same directory asDDLTracker.exe. The app creates a blank one automatically if it doesn't exist.
Each deadline is one line:
- **Conference / Journal Name** | YYYY-MM-DD | optional notesExample:
- **CVPR 2027** | 2026-11-14 | Abstract due 1 week earlier
- **NeurIPS 2026** | 2026-05-21 |
- **ICLR 2027** | 2026-10-02 | Full paper, no abstract deadlineRules:
- Lines not matching the format are silently skipped
- Notes are optional (leave blank after the last
|) - Date must be
YYYY-MM-DD
| Button | Action |
|---|---|
| + | Add a new deadline |
| ⚙ | Settings menu — font size, always-on-top toggle, refresh, open file |
| ─ | Minimise to system tray |
| ✕ | Quit |
| ✎ (on card) | Edit notes for that entry |
| ✕ (on card) | Delete that entry |
Drag the title bar to move the window anywhere on screen.
Requirements: Python 3.9+
git clone https://github.com/<your-username>/ddlapp.git
cd ddlapp
pip install -r requirements.txt
python main.pyFull list of packages in the tested virtual environment (Python 3.14, Windows 11):
| Package | Version |
|---|---|
| PyQt5 | 5.15.11 |
| PyQt5-Qt5 | 5.15.2 |
| PyQt5_sip | 12.18.0 |
| watchdog | 6.0.0 |
| pillow | 12.1.1 |
| pyinstaller | 6.19.0 |
| pyinstaller-hooks-contrib | 2026.1 |
| altgraph | 0.17.5 |
| pefile | 2024.8.26 |
| pywin32-ctypes | 0.2.3 |
| packaging | 26.0 |
| setuptools | 82.0.0 |
For running the app, only PyQt5 and watchdog are required (see requirements.txt).
pillow and pyinstaller are only needed to build the exe.
pip install pyinstaller pillow
# Generate logo.ico from logo.png first (only needed once)
python -c "from PIL import Image; img=Image.open('logo.png').convert('RGBA'); img.save('logo.ico',format='ICO',sizes=[(16,16),(32,32),(48,48),(256,256)])"
# Build
pyinstaller --onefile --windowed --name DDLTracker --icon logo.ico --add-data "logo.png;." main.pyOutput: dist/DDLTracker.exe
MIT