Current Tasks & Status¶
Project Status¶
Deployed and operational on do-web (DigitalOcean 104.131.17.141).
The bot runs continuously under PM2. All core features are implemented and have been tested end-to-end.
Core Features — Completed¶
| Feature | Status |
|---|---|
| Google login + session persistence | ✅ Complete |
| Google Calendar polling (browser-based) | ✅ Complete |
| Automatic meeting join via Puppeteer | ✅ Complete |
| Audio recording via PulseAudio + FFmpeg | ✅ Complete |
| Transcription via OpenAI Whisper API | ✅ Complete |
| Transcript delivery via Telegram | ✅ Complete |
/login, /status, /join, /iseeevents commands |
✅ Complete |
| Status dashboard (recorder.nicnames.dev) | ✅ Complete |
| Status API (api.recorder.nicnames.dev) | ✅ Complete |
| Event log (JSONL) + screenshot persistence | ✅ Complete |
| PM2 process management + auto-restart | ✅ Complete |
| Let's Encrypt SSL (both domains) | ✅ Complete |
| Timezone fix (TZ=America/Chicago) | ✅ Complete |
Recent Work¶
Debug Cleanup (Tasks #682–#691)¶
- Removed
Body preview:section from Telegram landing-page captions - Landing page body text moved to the API event log (type:
debug) — visible in dashboard, not in Telegram - Body text capped at 3000 chars inside
page.evaluateto limit Chrome DevTools Protocol transfer size
/iseeevents Command (Tasks #550–#582)¶
- New Telegram command:
/iseeeventstriggers a full debug snapshot - Bot navigates to Meet landing, takes screenshot, sends to Telegram
- Logs
type: "error"event to the API event log
Notification Dialog Dismiss (Tasks #570–#582)¶
- "Receive desktop notifications from Meet" dialog now dismissed before candidate scan
- Prevents the dialog from covering event cards and causing false "0 events found" results
Timezone Fix (Tasks #562–#568)¶
TZ=America/Chicagoadded to.envand PM2 ecosystem config- Chrome now renders meeting times in Central Time
Calendar Chip Fallback (Tasks #590–#628)¶
- Click re-query selector broadened to include
data-eventchipalongsidedata-eventid _meetUrlnow extracted from child anchor inside each chip
FFmpeg PulseAudio Retry (Tasks #596–#628)¶
- FFmpeg now retries once if it exits immediately (PulseAudio sink not ready)
- On retry: wait 3s, re-run
setupPulseAudio(), re-spawn FFmpeg - If retry fails: throws error — no silent missing audio files
Known Issues¶
| Issue | Description |
|---|---|
| Calendar polling navigation timeout | Navigation timeout of 30000 ms exceeded fires on every poll cycle; browser auto-recovery runs continuously |
| PulseAudio sink unavailable | FFmpeg failed to start after retry — PulseAudio sink unavailable — audio recording pipeline currently broken |
| Browser notification popup | "Receive desktop notifications from Meet" dialog appears intermittently after crash-restarts; dismiss logic partially mitigates but doesn't always fire first |
Next Steps¶
- [ ] Fix navigation timeout in
src/scheduler.js— investigate selector wait logic and slow page load handling - [ ] Restore PulseAudio virtual sink — diagnose why FFmpeg consistently fails to find the sink
- [ ] Verify notification dialog dismiss fires reliably after every browser restart
- [ ] Improve join reliability — better detection of the in-meeting state
- [ ] Add health check alerts when restart count exceeds threshold