Build a Free AI Meeting Summarizer with React & FastAPI

Date:

Zero Budget, Full Stack: Building with Only Free LLMs

In the rapidly evolving landscape of artificial intelligence, developers and tech enthusiasts are constantly seeking innovative ways to leverage advanced technologies without incurring hefty costs. One such endeavor is creating a full-stack AI meeting summarizer using free Large Language Models (LLMs), React, and FastAPI. This article outlines the steps required to achieve this with zero budget while providing complete code snippets for reference.

Why Build a Meeting Summarizer?

With the increasing prevalence of virtual meetings in both professional and educational settings, the need for effective summarization tools has never been greater. An AI-powered meeting summarizer can:

  • Save time for participants by providing concise summaries.
  • Enhance productivity by allowing users to focus on discussions rather than note-taking.
  • Facilitate better retention of information through structured summaries.

Technology Stack Overview

The proposed solution utilizes the following technologies:

  • React: A powerful JavaScript library for building user interfaces.
  • FastAPI: A modern web framework for building APIs with Python.
  • Free LLMs: Open-source or freely available language models that can generate text based on input data.

Step-by-Step Guide

1. Setting Up the FastAPI Backend

To start, we need to create a FastAPI application that will handle requests from the frontend and communicate with the LLM for summarization tasks.


from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class MeetingNotes(BaseModel):
    notes: str

@app.post("/summarize")
async def summarize(meeting_notes: MeetingNotes):
    # Utilize a free LLM here for summarization
    summary = "This is a placeholder for the summary."
    return {"summary": summary}
    

2. Building the React Frontend

Next, we will create a simple React application that allows users to input their meeting notes and receive a summary.


import React, { useState } from 'react';

function App() {
    const [notes, setNotes] = useState('');
    const [summary, setSummary] = useState('');

    const handleSubmit = async (e) => {
        e.preventDefault();
        const response = await fetch('/summarize', {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json'
            },
            body: JSON.stringify({ notes })
        });
        const data = await response.json();
        setSummary(data.summary);
    };

    return (
        

Meeting Summarizer