Skip to content

Audatic07/ai-note-summarizer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

2 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

AI Note Summarizer ๐Ÿ“โœจ

A full-stack mobile application that allows users to create notes, upload PDFs, and generate AI-powered summaries. Built with React Native (Expo) and FastAPI, featuring a sleek dark mode interface and async background processing.

๐ŸŽฏ Project Overview

This project demonstrates real-world engineering practices in building a cross-platform mobile application with:

  • Mobile Frontend: React Native with Expo, TypeScript, and modern hooks (Dark Theme)
  • Backend API: FastAPI with async background job processing
  • AI Integration: Groq API (free, gpt oss 120b) or OpenAI GPT for intelligent summarization
  • PDF Processing: Text extraction from PDF documents

โœจ Features

  • ๐Ÿ“ Create and edit text notes
  • ๐Ÿ“„ Upload PDFs and extract text automatically
  • ๐Ÿค– AI-powered summarization with customizable length and style
  • ๐ŸŽจ Beautiful dark mode interface
  • ๐Ÿ“ฑ Cross-platform (iOS & Android)
  • โšก Async background processing for summaries
  • ๐Ÿ’พ Local caching for offline access
  • ๐Ÿ”„ Pull-to-refresh and real-time updates

๐Ÿ—๏ธ Architecture

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                           MOBILE APP (React Native)                      โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚
โ”‚  โ”‚                         Screens Layer                             โ”‚   โ”‚
โ”‚  โ”‚   HomeScreen โ”‚ NotesScreen โ”‚ NoteEditorScreen โ”‚ NoteDetailScreen โ”‚   โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚
โ”‚                               โ”‚                                          โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚
โ”‚  โ”‚                      Custom Hooks Layer                           โ”‚   โ”‚
โ”‚  โ”‚        useUser โ”‚ useNotes โ”‚ useNote โ”‚ useSummary โ”‚ useApiHealth  โ”‚   โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚
โ”‚                               โ”‚                                          โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚
โ”‚  โ”‚                      Services Layer                               โ”‚   โ”‚
โ”‚  โ”‚              API Service (Axios) โ”‚ Storage Service                โ”‚   โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚
โ”‚                               โ”‚                                          โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                                โ”‚ HTTP/REST
                                โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                          BACKEND API (FastAPI)                           โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚
โ”‚  โ”‚                        Routes Layer                               โ”‚   โ”‚
โ”‚  โ”‚      /health โ”‚ /users โ”‚ /notes โ”‚ /summaries                      โ”‚   โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚
โ”‚                               โ”‚                                          โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚
โ”‚  โ”‚                      Services Layer                               โ”‚   โ”‚
โ”‚  โ”‚   UserService โ”‚ NoteService โ”‚ SummaryService โ”‚ PDFService        โ”‚   โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚
โ”‚                          โ”‚                       โ”‚                       โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚
โ”‚  โ”‚        AI Summarizer          โ”‚  โ”‚      Database Layer            โ”‚   โ”‚
โ”‚  โ”‚  OpenAI โ”‚ HuggingFace โ”‚ Mock โ”‚  โ”‚  SQLAlchemy ORM โ”‚ SQLite       โ”‚   โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚
โ”‚                                                                          โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

๐Ÿงฉ Tech Stack

Frontend (Mobile)

Technology Purpose
React Native Cross-platform mobile framework
Expo Development toolchain and runtime
TypeScript Type-safe JavaScript
Axios HTTP client for API calls
React Navigation Screen navigation
AsyncStorage Local data persistence

Backend

Technology Purpose
Python 3.10+ Programming language
FastAPI Modern async web framework
SQLAlchemy ORM for database operations
Pydantic Data validation and serialization
SQLite Development database (PostgreSQL-ready)

AI/NLP

Technology Purpose
Groq API Primary summarization engine (FREE)
OpenAI API Alternative summarization (paid)
HuggingFace Local models option (optional)
pdfplumber PDF text extraction

๐Ÿ“ Project Structure

ai-note-summarizer/
โ”œโ”€โ”€ backend/
โ”‚   โ”œโ”€โ”€ app/
โ”‚   โ”‚   โ”œโ”€โ”€ __init__.py
โ”‚   โ”‚   โ”œโ”€โ”€ main.py              # FastAPI application entry
โ”‚   โ”‚   โ”œโ”€โ”€ config.py            # Configuration management
โ”‚   โ”‚   โ”œโ”€โ”€ database/
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ __init__.py
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ connection.py    # Database connection setup
โ”‚   โ”‚   โ”œโ”€โ”€ models/
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ __init__.py
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ user.py          # User ORM model
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ note.py          # Note ORM model
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ summary.py       # Summary ORM model
โ”‚   โ”‚   โ”œโ”€โ”€ schemas/
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ __init__.py
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ user.py          # User Pydantic schemas
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ note.py          # Note Pydantic schemas
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ summary.py       # Summary Pydantic schemas
โ”‚   โ”‚   โ”œโ”€โ”€ routes/
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ __init__.py
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ health.py        # Health check endpoints
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ users.py         # User management endpoints
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ notes.py         # Note CRUD endpoints
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ summaries.py     # Summary generation endpoints
โ”‚   โ”‚   โ””โ”€โ”€ services/
โ”‚   โ”‚       โ”œโ”€โ”€ __init__.py
โ”‚   โ”‚       โ”œโ”€โ”€ user_service.py  # User business logic
โ”‚   โ”‚       โ”œโ”€โ”€ note_service.py  # Note business logic
โ”‚   โ”‚       โ”œโ”€โ”€ summary_service.py # Summary orchestration
โ”‚   โ”‚       โ”œโ”€โ”€ summarizer.py    # AI summarization (swappable)
โ”‚   โ”‚       โ””โ”€โ”€ pdf_service.py   # PDF text extraction
โ”‚   โ”œโ”€โ”€ requirements.txt
โ”‚   โ””โ”€โ”€ .env.example
โ”‚
โ”œโ”€โ”€ mobile/
โ”‚   โ”œโ”€โ”€ src/
โ”‚   โ”‚   โ”œโ”€โ”€ components/          # Reusable UI components
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ Button.tsx
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ Input.tsx
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ Card.tsx
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ Loading.tsx
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ EmptyState.tsx
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ NoteCard.tsx
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ SummaryCard.tsx
โ”‚   โ”‚   โ”œโ”€โ”€ screens/             # Application screens
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ HomeScreen.tsx
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ NotesScreen.tsx
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ NoteEditorScreen.tsx
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ NoteDetailScreen.tsx
โ”‚   โ”‚   โ”œโ”€โ”€ services/            # API and storage services
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ api.ts
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ storage.ts
โ”‚   โ”‚   โ”œโ”€โ”€ hooks/               # Custom React hooks
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ index.ts
โ”‚   โ”‚   โ”œโ”€โ”€ types/               # TypeScript definitions
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ index.ts
โ”‚   โ”‚   โ””โ”€โ”€ constants/           # App constants and config
โ”‚   โ”‚       โ””โ”€โ”€ index.ts
โ”‚   โ”œโ”€โ”€ App.tsx                  # Application entry point
โ”‚   โ”œโ”€โ”€ package.json
โ”‚   โ”œโ”€โ”€ tsconfig.json
โ”‚   โ””โ”€โ”€ app.json                 # Expo configuration
โ”‚
โ””โ”€โ”€ README.md

๐Ÿš€ Getting Started

Prerequisites

  • Node.js 18+ and npm
  • Python 3.10+
  • Expo Go app on your phone (for testing)
  • Groq API key (FREE at https://console.groq.com/keys) OR OpenAI API key

Backend Setup

# Navigate to backend directory
cd backend

# Create virtual environment
python -m venv .venv

# Activate virtual environment
# Windows:
.venv\Scripts\activate
# macOS/Linux:
source .venv/bin/activate

# Install dependencies
pip install -r requirements.txt

# Copy environment template
cp .env.example .env

# Edit .env and add your API key (Groq is FREE and recommended)
# GROQ_API_KEY=your-groq-key-here

# Run the server
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000

The API will be available at http://localhost:8000

  • Interactive docs: http://localhost:8000/docs
  • ReDoc: http://localhost:8000/redoc

Mobile Setup

# Navigate to mobile directory
cd mobile

# Install dependencies
npm install

# Start Expo development server
npx expo start

Scan the QR code with Expo Go (Android) or Camera app (iOS).

Important: Update the API URL in src/constants/index.ts to match your setup:

// For Android Emulator:
BASE_URL: 'http://10.0.2.2:8000/api'

// For iOS Simulator:
BASE_URL: 'http://localhost:8000/api'

// For Physical Device (use your computer's local IP):
BASE_URL: 'http://192.168.x.x:8000/api'

Find your local IP:

  • Windows: ipconfig (look for IPv4 Address)
  • macOS/Linux: ifconfig or ip addr

๐Ÿ“ก API Endpoints

Health

Method Endpoint Description
GET /api/health Basic health check
GET /api/health/db Database connectivity check
GET /api/health/ready Full readiness check

Users

Method Endpoint Description
POST /api/users Create a new user (guest or registered)
GET /api/users/{user_id} Get user by ID
GET /api/users/guest/{guest_id} Get user by guest UUID

Notes

Method Endpoint Description
GET /api/notes List all notes (with pagination)
POST /api/notes Create a new text note
POST /api/notes/upload/pdf Upload PDF and create note
GET /api/notes/{note_id} Get a specific note
PUT /api/notes/{note_id} Update a note
DELETE /api/notes/{note_id} Delete a note

Summaries

Method Endpoint Description
POST /api/summaries/notes/{note_id} Generate summary (sync)
POST /api/summaries/notes/{note_id}/async Generate summary (async with polling)
GET /api/summaries/jobs/{job_id} Check async job status
GET /api/summaries/notes/{note_id} Get all summaries for a note
GET /api/summaries/{summary_id} Get a specific summary
DELETE /api/summaries/{summary_id} Delete a summary

๐ŸŽจ Design Decisions

Architecture Choices

  1. Layered Architecture (Backend)

    • Clear separation between routes, services, and data layers
    • Business logic isolated in services for testability
    • Routes only handle HTTP concerns
  2. Custom Hooks Pattern (Frontend)

    • Encapsulate state management and side effects
    • Reusable across components
    • Clean separation of concerns
  3. Swappable AI Provider

    • Factory pattern allows runtime provider selection
    • Easy to switch between OpenAI, HuggingFace, or mock
    • Future-proof for new AI services
  4. Guest-First Authentication

    • No registration barrier to use the app
    • UUID-based guest identification
    • Seamless upgrade path to full accounts

Why These Technologies?

  • FastAPI: Async support, automatic OpenAPI docs, type hints
  • React Native + Expo: Cross-platform with excellent DX
  • SQLite โ†’ PostgreSQL: Easy development, production-ready structure
  • Pydantic: Runtime validation, serialization, great IDE support

๐Ÿ”ฎ Future Improvements

  • User authentication (OAuth with Google/Apple)
  • Cloud sync across devices
  • Export summaries to PDF/Markdown
  • Voice note input
  • Collaborative note sharing
  • Offline-first with background sync

๐Ÿงช Testing

Backend Tests

cd backend
pytest tests/ -v

๐Ÿ”’ Security Notes

  • Never commit .env files - they contain API keys
  • The .env.example file is safe to commit (contains only placeholders)
  • API keys are loaded from environment variables at runtime
  • Guest users get UUID-based anonymous access

๐Ÿ“ Environment Variables

Backend (.env)

# Application Settings
APP_NAME="AI Note Summarizer"
DEBUG=true

# Database (SQLite for dev, PostgreSQL for production)
DATABASE_URL=sqlite:///./notes.db

# AI Provider: 'groq' (free), 'openai', or 'mock'
AI_PROVIDER=groq

# Groq API (FREE - get key at https://console.groq.com/keys)
GROQ_API_KEY=your-groq-api-key

# OpenAI API (optional, paid)
OPENAI_API_KEY=your-openai-api-key

# Processing Limits
MAX_TEXT_LENGTH=50000
MAX_PDF_SIZE_MB=10
CHUNK_SIZE=3000

๐Ÿค Contributing

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

๐Ÿ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.

๐Ÿ™ Acknowledgments

  • Groq for providing free, fast AI inference
  • Expo for the amazing React Native toolchain
  • FastAPI for the modern Python web framework

Built with โค๏ธ using React Native, FastAPI, and AI

About

AI-powered note summarizer with React Native (Expo) mobile app and FastAPI backend. Features dark mode UI, PDF upload, and Groq/OpenAI integration.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors