Skip to content

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.evaluate to limit Chrome DevTools Protocol transfer size

/iseeevents Command (Tasks #550–#582)

  • New Telegram command: /iseeevents triggers 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/Chicago added to .env and 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-eventchip alongside data-eventid
  • _meetUrl now 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