Last updated: 2026-03-09
Canonical project root: /home/clawdbot/clawd/Event_management (all edits must resolve under this root).
This is the single source of truth for operating and maintaining the Event Management system.
Scope: Event Management only.
---
The system collects event data from three sources, enriches contact details, stores everything in a central SQLite DB, and prepares outreach drafts (draft-only, never auto-send).
Primary goals:
event-management-email/home/clawdbot/clawd/Event_management/scripts/event_management_email_drafter.py/home/clawdbot/clawd/docs/adhoc-newsletter.pdfEmail structure used:
See full details in section 8.5 event-management-email below.
---
/home/clawdbot/clawd/Event_management/event_management_app/main.py/home/clawdbot/clawd/Event_management/data/event_management.db/home/clawdbot/clawd/Event_management/scripts//home/clawdbot/clawd/skills//home/clawdbot/clawd/Event_management/logs/http://127.0.0.1:8001https://alex-xps-13-9360.tailb94929.ts.net/api-docs---
/ — event list and filters (primary operator view)?status=needs_contact_optimization/events/{event_id} — single event details (incl. draft content if present)/settings — source scope + scrape run overview/daily — daily summary/collisions — conflict/collision visibility/follow-up — follow-up buckets by age/reports — generated run reports/docs — this documentation/bugs — bug log view (separate page by requirement)---
/logs/meeting-vienna-info/runs/meeting-vienna-info/{run_id}/run-logs/meeting-vienna-info/{run_id}/logs/salzburgcongress/runs/salzburgcongress/{run_id}/run-logs/salzburgcongress/{run_id}/logs/expo-experts/runs/expo-experts/{run_id}/run-logs/expo-experts/{run_id}---
/downloads/meeting-vienna-info.skill/downloads/meeting-vienna-info.skill.zip/downloads/salzburgercongress-scraper.skill/downloads/expo-experts-at-scraper.skill/downloads/event-manager-scraper-pipeline.skill/downloads/event-management-email.skillCurrent packaged versions are tracked in:
Detailed export inventory (paths + checksums) is in:
---
eventsSchema (current):
id (TEXT, PK)title (TEXT)event_date (TEXT)location (TEXT)event_link (TEXT) — official external event URL when foundevent_link_secondary (TEXT) — source-side/secondary URLdiscovered_at (TEXT)summary (TEXT)contact_email (TEXT, comma-separated when multiple)contact_form (TEXT)email_draft (TEXT)email_created_at (TEXT)source (TEXT)status (TEXT, tag-like comma-separated state)participants (TEXT)topic (TEXT)meeting.vienna.infosalzburgcongress.atexpo-experts.atStatus is a comma-separated tag set, not a single enum. Common tags observed/used:
draftemail draftedawaiting_mailbox_approvalflaggedoeticketmissing_official_linkdefault_contact_emailneeds_contact_optimizationdefault_contact_email_resolvedrecovered_email_candidate_reviewedExample combined statuses:
draft,email drafted,awaiting_mailbox_approvaldraft,oeticket,flaggeddraft,flagged,missing_official_link,default_contact_email,email drafted,awaiting_mailbox_approval---
Applied across source scrapers, with source-scoped safeguards:
source + title + event_date (date-aware first)source + event_link or source + event_link_secondary depending on source and availability)source + title + locationsource + titleIf existing field is non-empty and new value differs:
---
Skill file: /home/clawdbot/clawd/skills/meeting-vienna-info/SKILL.md
Scrape meeting calendar events and enrich each with details + contact data.
(at)/(dot), [at]/[dot], at / dot )obfuscated_email_detected in structured run logscontact_email after phase 3oeticket.com targets in phase 4 policyevent_timeout or event_page_capPage not found (error 404)flagged,missing_official_linkconvention@vienna.info as low-quality (keep but flag)Event_management/logs/meeting-vienna-info.jsonlEvent_management/logs/meeting-vienna-info.ndjsonEvent_management/logs/meeting-vienna-info-anomalies.ndjsonEvent_management/logs/meeting-vienna-info-manual-phase4.ndjsonEvent_management/logs/meeting-vienna-info-manual-phase4-anomalies.ndjsonEvent_management/tmp/meeting_vienna_missing_contacts_after_manual_phase4.jsonEvent_management/logs/meeting-vienna-info-progress.txtIn meeting summary logs, the normal per-run sequence is:
*-meta → baseline calendar metadata snapshot (count + source last-update)*-full → main scrape pass (phase 1+2)*-deep-dive → enrichment/recovery for missing emails*-meeting-vienna-info-manual-phase4 → manual browser recovery (last resort)Note: meta is not enrichment; enrichment is the deep-dive run.
In meeting summary logs, the normal per-run sequence is:
*-meta → baseline calendar metadata snapshot (count + source last-update)*-full → main scrape pass (phase 1+2)*-deep-dive → enrichment/recovery for missing emails*-meeting-vienna-info-manual-phase4 → manual browser recovery (last resort)Note: meta is not enrichment; enrichment is the deep-dive run.
---
Skill file: /home/clawdbot/clawd/skills/salzburgercongress-scraper/SKILL.md
Scrape Salzburg Congress calendar events and enrich contacts.
(at)/(dot), [at]/[dot], at / dot )obfuscated_email_detected in structured run logscontact_email after phase 3oeticket.com targets in phase 4 policyevent_timeout or event_page_capNormalizes month/day text into canonical date strings (DD.MM.YYYY or ranges).
Multi-layer extraction (HTML/text/mailto/contact links/forms), with deep-dive retries.
Event_management/logs/salzburgcongress.jsonlEvent_management/logs/salzburgcongress.ndjsonEvent_management/logs/salzburgcongress-anomalies.ndjsonEvent_management/logs/salzburgcongress-deep-dive*.ndjsonEvent_management/logs/salzburgcongress-manual-phase4*.ndjsonEvent_management/tmp/salzburg_missing_contacts_after_manual_phase4.jsonEvent_management/logs/salzburgcongress-progress.txt---
Skill file: /home/clawdbot/clawd/skills/expo-experts-at-scraper/SKILL.md
Scrape expo-experts calendar and enrich from official external event sites.
(at)/(dot), [at]/[dot], at / dot )obfuscated_email_detected in structured run logscontact_email after phase 3oeticket.com targets in phase 4 policyevent_timeout or event_page_capContact discovery must rely on official event sites, not expo listing pages as final truth.
Event_management/logs/expo-experts.jsonlEvent_management/logs/expo-experts.ndjsonEvent_management/logs/expo-experts-anomalies.ndjsonEvent_management/logs/expo-experts-deep-dive*.ndjsonEvent_management/logs/expo-experts-manual-phase4*.ndjsonEvent_management/tmp/expo_experts_missing_contacts_after_manual_phase4.jsonEvent_management/logs/expo-experts-progress.txt---
Skill file: /home/clawdbot/clawd/skills/event-manager-scraper-pipeline/SKILL.md
Script: /home/clawdbot/clawd/Event_management/scripts/event_manager_pipeline.py
Run all sources in strict sequence with resilient continue-on-error behavior.
The orchestrator runs phase-first across all sources:
/tmp/event-manager-pipeline.lockstatus=lock_conflictrunningdry_run_okpreflight_failedlock_conflictokfailed (at least one stage failed, pipeline still completed remaining stages)okfailed/home/clawdbot/clawd/Event_management/logs/event-manager-pipeline.jsonl/home/clawdbot/clawd/Event_management/reports/---
Skill file: /home/clawdbot/clawd/skills/event-management-email/SKILL.md
Script: /home/clawdbot/clawd/Event_management/scripts/event_management_email_drafter.py
Generate multilingual outreach drafts safely with ranking and duplicate guards.
event_idtitleevent_datelocationevent_link (official URL if available)contact_email and/or contact_formsourceSelects events with draft-like status and available contact_email.
Boosts:
info, media, etc.)Penalizes:
webmaster, noreply, convention, etc.)convention@vienna.infoDRAFT_HASHemail drafted,awaiting_mailbox_approval/home/clawdbot/clawd/Event_management/tmp/email_draft_batch_*.jsoncontact_email is parsed, normalized to lowercase, validated, and deduplicated before ranking.TO list always contains unique addresses only.DRAFT_HASH is computed from full recipient list + subject + body, so identical drafts are skipped unless --force is used.Use exactly this block in drafts:
ad hoc interpreters for <EVENT TITLE> (<EVENT DATE>)/home/clawdbot/clawd/docs/adhoc-newsletter.pdfNever send email automatically.
---
cd /home/clawdbot/clawd/event_management_app
nohup .venv/bin/uvicorn main:app --host 0.0.0.0 --port 8001 > /home/clawdbot/clawd/Event_management/tmp/uvicorn-8001.log 2>&1 &
curl -s -o /dev/null -w "%{http_code}\n" http://127.0.0.1:8001/
curl -s -o /dev/null -w "%{http_code}\n" https://alex-xps-13-9360.tailb94929.ts.net/
/home/clawdbot/clawd/.venv-scrape/bin/python /home/clawdbot/clawd/Event_management/scripts/event_manager_pipeline.py
/home/clawdbot/clawd/.venv-scrape/bin/python /home/clawdbot/clawd/Event_management/scripts/event_manager_pipeline.py --only meeting
/home/clawdbot/clawd/.venv-scrape/bin/python /home/clawdbot/clawd/Event_management/scripts/event_manager_pipeline.py --only salzburg
/home/clawdbot/clawd/.venv-scrape/bin/python /home/clawdbot/clawd/Event_management/scripts/event_manager_pipeline.py --only expo
/home/clawdbot/clawd/.venv-scrape/bin/python /home/clawdbot/clawd/Event_management/scripts/event_manager_pipeline_report.py
---
/settings and verify latest runs per source./daily for summarized outcomes./collisions for unresolved conflicts./follow-up for aging tasks./run-logs/.../{run_id})--only/ and collisions pageemail_draft content)---
---
/bugs is intentionally separate.skill_versions.md, skill_exports.md).