Overview
How it works
- Brief: in the React dashboard, the user picks an influencer, a subject, a category (meeting, negotiation, follow-up or collaboration) and a short description.
- Generation: the Flask API asks OpenAI to write the email in a professional, concise voice, using the influencer's name.
- Fallback: if the model is unavailable or no key is configured, a simple template is used instead, so the workflow never blocks.
- Tracking: each email is stored in MongoDB with a generated task ID (TASK_YYYYMMDD_NNN), its category and a timestamp.
- Views: sent-email list, timeline, calendar and analytics pages, filterable by influencer, category and date range.
Engineering decisions
- Structured requests and responses: every call uses typed request and response types (for example send_email and send_email_response), so the backend can be driven by the UI or by another agent.
- Degrade gracefully: an outreach tool that stops working when the LLM does is worse than no tool, so there is always a fallback path.
Tech stack
Python
OpenAI
MongoDB
React