Stop manually summarizing meetings and drafting social media posts! Social Scribe leverages AI to transform your meeting transcripts into engaging follow-up emails and platform-specific social media content, ready to share.
Social Scribe is a powerful Elixir and Phoenix LiveView application designed to connect to your calendars, automatically send an AI notetaker to your virtual meetings, provide accurate transcriptions via Recall.ai, and then utilize Google Gemini's advanced AI to draft compelling follow-up emails and social media posts through user-defined automation rules. This project was developed with significant AI assistance, as encouraged by the challenge, to rapidly build a feature-rich application.
➡️ Live Demo ⬅️
- Google Calendar Integration:
- Seamlessly log in with your Google Account.
- Connect multiple Google accounts to aggregate events from all your calendars.
- View your upcoming calendar events directly within the app's dashboard.
- Automated Meeting Transcription with Recall.ai:
- Toggle a switch for any calendar event to have an AI notetaker attend.
- The app intelligently parses event details (description, location) to find Zoom or Google Meet links.
- Recall.ai bot joins meetings a configurable number of minutes before the start time (currently default, setting to be added to UI).
- Bot ID Management: Adheres to challenge constraints by tracking individually created
bot_ids and not using the general/botsendpoint. - Polling for Media: Implements a robust polling mechanism (via Oban) to check bot status and retrieve transcripts/media, as webhooks cannot be used with the shared API key.
- AI-Powered Content Generation (Google Gemini):
- Automatically drafts a follow-up email summarizing key discussion points and action items from the meeting transcript.
- Custom Automations: Users can create, view, and manage automation templates, defining custom prompts, target platforms (LinkedIn, Facebook), and descriptions to generate specific marketing content or other post types.
- Social Media Integration & Posting:
- Securely connect LinkedIn and Facebook accounts via OAuth on the Settings page.
- Direct Posting: Generated content can be posted directly to the user's connected LinkedIn profile or a user-managed Facebook Page.
- Meeting Management & Review:
- View a list of past processed meetings, showing attendees, start time, and platform logo (platform logo to be enhanced).
- Click into any past meeting to view its full transcript, the AI-generated follow-up email draft, and a list of social media posts generated by configured automations.
- Copy & Post Buttons: Social media drafts are presented with a "Copy" button (implemented via JS Hooks) for easy content reuse and direct "Post" buttons for integrated platforms.
- Modern Tech Stack & Background Processing:
- Built with Elixir & Phoenix LiveView for a real-time, interactive experience.
- Utilizes Oban for robust background job processing (calendar syncing, bot status polling, AI content generation).
- Secure credential management for all connected services using Ueberauth.
- Backend: Elixir, Phoenix LiveView
- Database: PostgreSQL
- Background Jobs: Oban
- Authentication: Ueberauth (for Google, LinkedIn, Facebook OAuth)
- Meeting Transcription: Recall.ai API
- AI Content Generation: Google Gemini API (Flash models)
- Frontend: Tailwind CSS, Heroicons (via
tailwind.config.js) - Progress Bar: Topbar.js for page loading indication.
Follow these steps to get SocialScribe running on your local machine.
- Elixir
- Erlang/OTP
- PostgreSQL
- Node.js (for Tailwind CSS asset compilation)
-
Clone the Repository:
git clone https://github.com/fparadas/social_scribe.git cd social_scribe -
Install Dependencies & Setup Database: The
mix setupcommand bundles common setup tasks.mix setup
This will typically:
- Install Elixir dependencies (
mix deps.get) - Create your database if it doesn't exist (
mix ecto.create) - Run database migrations (
mix ecto.migrate) - Install Node.js dependencies for assets (
cd assets && npm install && cd ..)
- Install Elixir dependencies (
-
Configure Environment Variables: You'll need to set up several API keys and OAuth credentials.
- Copy the example environment file (if one is provided, e.g.,
.env.example) to.env. - Edit the
.envfile (or set environment variables directly) with your actual credentials:GOOGLE_CLIENT_ID: Your Google OAuth Client ID.GOOGLE_CLIENT_SECRET: Your Google OAuth Client Secret.GOOGLE_REDIRECT_URI:"http://localhost:4000/auth/google/callback"RECALL_API_KEY: Your Recall.ai API Key (as provided for the challenge).GEMINI_API_KEY: Your Google Gemini API Key.LINKEDIN_CLIENT_ID: Your LinkedIn App Client ID.LINKEDIN_CLIENT_SECRET: Your LinkedIn App Client Secret.LINKEDIN_REDIRECT_URI:"http://localhost:4000/auth/linkedin/callback"FACEBOOK_APP_ID: Your Facebook App ID.FACEBOOK_APP_SECRET: Your Facebook App Secret.FACEBOOK_REDIRECT_URI:"http://localhost:4000/auth/facebook/callback"
- Copy the example environment file (if one is provided, e.g.,
-
Start the Phoenix Server:
mix phx.server
Or, to run inside IEx (Interactive Elixir):
iex -S mix phx.server
Now you can visit localhost:4000 from your browser.
- Connect & Sync: Users log in with Google. The "Settings" page allows connecting multiple Google accounts, plus LinkedIn and Facebook accounts. For Facebook, after initial connection, users are guided to select a Page for posting. Calendars are synced to a database to populate the dashboard with upcoming events.
- Record & Transcribe: On the dashboard, users toggle "Record Meeting?" for desired events. The system extracts meeting links (Zoom, Meet) and uses Recall.ai to dispatch a bot. A background poller (
BotStatusPoller) checks for completed recordings and transcripts, saving the data to localMeeting,MeetingTranscript, andMeetingParticipanttables. - AI Content Generation:
- Once a meeting is processed, an
AIContentGenerationWorkeris enqueued. - This worker uses Google Gemini to draft a follow-up email.
- It also processes all active "Automations" defined by the user. For each automation, it combines the meeting data with the user's
prompt_templateand calls Gemini to generate content (e.g., a LinkedIn post), saving it as anAutomationResult.
- Once a meeting is processed, an
- Social Posting:
- From the "Meeting Details" page, users can view AI-generated email drafts and posts from their automations.
- "Copy" buttons are available.
- "Post" buttons allow direct posting to LinkedIn (as the user) and the selected Facebook Page (as the Page).
- Facebook Posting & App Review:
- Posting to Facebook is implemented via the Graph API to a user-managed Page.
- Full functionality for all users (especially those not app administrators/developers/testers) typically requires a thorough app review process by Meta, potentially including Business Verification. This is standard for apps using Page APIs.
- During development, posting will be most reliable for app admins to Pages they directly manage.
- Error Handling & UI Polish: While core paths are robustly handled, comprehensive error feedback for all API edge cases and advanced UI polish are areas for continued development beyond the initial 48-hour scope.
- Prompt Templating for Automations: The current automation prompt templating is basic (string replacement). A more sophisticated templating engine (e.g., EEx or a dedicated library) would be a future improvement.
- Agenda Integration: Currently we only sync when the calendar event has a
hangoutLinkorlocationfield with a zoom or google meet link.
This project includes a GitHub Actions workflow for CI/CD, as defined in .github/workflows/ci-cd.yml.
- Continuous Integration: On every push or pull request to the
mainbranch, the workflow runs tests, compilation checks (with warnings as errors), and formatting checks. - Continuous Deployment: On a push to the
mainbranch (after tests pass), the workflow includes a step to deploy the application to Fly.io. This requires theFLY_API_TOKENto be configured as a secret in the GitHub repository settings.
- Official website: https://www.phoenixframework.org/
- Guides: https://hexdocs.pm/phoenix/overview.html
- Docs: https://hexdocs.pm/phoenix
- Forum: https://elixirforum.com/c/phoenix-forum
- Source: https://github.com/phoenixframework/phoenix

