EzNotes is an AI-powered note-taking assistant that goes beyond simple text storage. Instead of manually searching through folders, you can use the AI Chat Assistant to ask questions about your notes, summarize information, or find connections between different topics.
I built this project to explore RAG (Retrieval-Augmented Generation) and Vector Search in a real-world application. It demonstrates how modern AI can be integrated into full-stack applications to make personal data more accessible and interactive.
- Context-Aware AI Chat: An intelligent assistant powered by Google Gemini 1.5 Flash that can answer questions based strictly on your personal notes. It uses "Tool Calling" to decide when to search your database.
- Semantic Vector Search: Unlike traditional keyword search, this app understands meaning. For example, searching for "what should I eat?" will find your note titled "Favorite Foods" even if the word "eat" isn't in it.
- Automated Embedding Pipeline: The app automatically manages the AI lifecycle. When you create or edit a note, the system seamlessly regenerates the vector embeddings in the background, ensuring the AI always has the latest information.
- Markdown Editor: A clean, distraction-free interface for writing and organizing your thoughts.
- Real-time Updates: Notes are saved and synced instantly across devices using Convex's real-time WebSocket protocol.
- Secure Authentication: Full sign-up/sign-in flow powered by Convex Auth, supporting magic links and secure session management.
- Responsive Design: Fully optimized for all screen sizes using Tailwind CSS.
- Dark/Light Mode: Built-in theme switching support using
next-themes.
This project uses a modern, edge-ready tech stack focused on performance and developer experience.
| Category | Technology | Description |
|---|---|---|
| Frontend | Next.js 15 | The latest React framework with Server Components and App Router. |
| React 19 | The latest version of the UI library. | |
| Tailwind CSS | Utility-first CSS framework for rapid styling. | |
| Shadcn UI | Accessible, reusable UI components built on Radix UI. | |
| Backend | Convex | A backend-as-a-service platform that handles the Database, Real-time Subscriptions, and Vector Storage. |
| AI / LLM | Google Gemini | The LLM used for reasoning and generating responses (Model: gemini-2.5-flash). |
| Vercel AI SDK | The standard library for building AI-powered user interfaces in React. | |
| Auth | Convex Auth | Integrated authentication solution for secure user sessions. |
| Language | TypeScript | For type-safe code and better developer tooling. |
The core of EzNotes is the RAG (Retrieval-Augmented Generation) pipeline, which allows the AI to "read" your personal notes before answering.
- ๐ Ingestion: When you create or edit a note, the text is sent to Google's embedding model to create a "vector" (a mathematical representation of the meaning). This vector is stored in Convex.
- ๐ Retrieval: When you ask a question, your query is also converted into a vector. Convex performs a "Vector Search" to find notes that are mathematically similar to your question.
- ๐ค Generation: The relevant notes are retrieved and fed into Google Gemini along with your original question. Gemini then generates an answer using only that context.
graph TD
A[User Creates Note] -->|Text| B(Google Embedding Model)
B -->|Vector| C[Convex Vector DB]
D[User Asks Question] -->|Text| E(Google Embedding Model)
E -->|Query Vector| F{Vector Search}
C --> F
F -->|Relevant Notes| G[Google Gemini LLM]
D --> G
G -->|Answer| H[User Chat Interface]
Follow these steps to set up the project locally on your machine.
- Node.js (v18 or higher)
- npm (comes with Node.js)
- Git
-
Clone the repository
git clone https://github.com/VinayakGawade009/EzNotes.git cd EzNotes -
Install dependencies
npm install
-
Set up the Database & Auth This project uses Convex. Run the development command to set up your backend:
npx convex dev
This will prompt you to log in to Convex and automatically create a new project and deployment for you.
-
Configure Environment Variables Create a
.env.localfile in the root directory and add the keys listed below. -
Run the development server
npm run dev
-
Open the app Visit http://localhost:3000 in your browser.
To run this project, you will need to add the following environment variables to your .env.local file.
| Variable | Description | How to get it |
|---|---|---|
CONVEX_DEPLOYMENT |
The deployment ID for your Convex backend. | Automatically set by npx convex dev. |
NEXT_PUBLIC_CONVEX_URL |
The public URL of your Convex backend. | Automatically set by npx convex dev. |
GOOGLE_GENERATIVE_AI_API_KEY |
API Key for Google Gemini. | Get it from Google AI Studio. |
Here is a quick overview of the project's file structure.
EzNotes/
โโโ convex/ # ๐ข Backend & Database
โ โโโ auth.ts # Authentication configuration
โ โโโ http.ts # HTTP Actions (API endpoints)
โ โโโ notes.ts # Database Mutations & Queries
โ โโโ notesActions.ts # AI Actions (Gemini integration)
โ โโโ schema.ts # Database Schema definition
โโโ src/
โ โโโ app/ # ๐ต Frontend (Next.js App Router)
โ โ โโโ (auth)/ # Authentication pages (Signin)
โ โ โโโ (main)/ # Protected application routes (Notes dashboard)
โ โ โโโ layout.tsx # Root layout configuration
โ โโโ components/ # Reusable UI components (Shadcn UI)
โ โโโ lib/ # Utility functions & hooks
โโโ public/ # Static assets
โโโ package.json # Project dependencies
I plan to continue improving EzNotes with these features:
-
Voice Notes: Record audio notes and have the AI transcribe and embed them automatically.
-
Image Attachments: Upload images to notes and use Gemini's vision capabilities to "chat" with your images.
-
Mobile App: A React Native version for iOS and Android.
-
Collaborative Notes: Share notes with other users and edit them in real-time.
-
Tagging System: Organize notes with custom tags for better filtering.
This project was built following a tutorial by Coding in Flow