Skip to content

fparadas/social_scribe

Repository files navigation

Social Scribe 🤖📝✨

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 ⬅️


🌟 Key Features Implemented

  • 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 /bots endpoint.
    • 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.

App Flow

  • Login With Google and Meetins Sync: Auth Flow

  • Creating Automations: Creating Automations

  • Meetings Recordings: Meetings Recording

  • Facebook Login: Facebook Login

  • Facebook Post: Facebook Post

  • LinkedIn Login & Post: LinkedIn Login and Post


📸 Screenshots & GIFs

  • Dashboard View: Dashboard View

  • Automation Configuration UI: Automation Configuration


🛠 Tech Stack

  • 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.

🚀 Getting Started

Follow these steps to get SocialScribe running on your local machine.

Prerequisites

  • Elixir
  • Erlang/OTP
  • PostgreSQL
  • Node.js (for Tailwind CSS asset compilation)

Setup Instructions

  1. Clone the Repository:

    git clone https://github.com/fparadas/social_scribe.git 
    cd social_scribe
  2. Install Dependencies & Setup Database: The mix setup command 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 ..)
  3. 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 .env file (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"
  4. 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.


⚙️ Functionality Deep Dive

  • 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 local Meeting, MeetingTranscript, and MeetingParticipant tables.
  • AI Content Generation:
    • Once a meeting is processed, an AIContentGenerationWorker is 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_template and calls Gemini to generate content (e.g., a LinkedIn post), saving it as an AutomationResult.
  • 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).

⚠️ Known Issues & Limitations

  • 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 hangoutLink or location field with a zoom or google meet link.

🛠️ CI/CD

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 main branch, the workflow runs tests, compilation checks (with warnings as errors), and formatting checks.
  • Continuous Deployment: On a push to the main branch (after tests pass), the workflow includes a step to deploy the application to Fly.io. This requires the FLY_API_TOKEN to be configured as a secret in the GitHub repository settings.

📚 Learn More (Phoenix Framework)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •