https://github.com/manavalan2517/ai-lms
This project is an AI-powered Learning Management System (AI LMS) built using Next.js, Clerk for authentication, Inngest for function orchestration, Drizzle ORM for database interaction, and Google Gemini for AI-powered content generation. It allows users to create personalized study materials for various learning goals,
https://github.com/manavalan2517/ai-lms
ai clerk drizzle-orm full-stack full-stack-development google-gemini inngest interactive-learning learning-management-system nextjs nodejs noen open-source personalised-learning postgresql tailwindcss
Last synced: 2 months ago
JSON representation
This project is an AI-powered Learning Management System (AI LMS) built using Next.js, Clerk for authentication, Inngest for function orchestration, Drizzle ORM for database interaction, and Google Gemini for AI-powered content generation. It allows users to create personalized study materials for various learning goals,
- Host: GitHub
- URL: https://github.com/manavalan2517/ai-lms
- Owner: Manavalan2517
- Created: 2024-11-25T14:36:58.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-12-08T12:26:47.000Z (over 1 year ago)
- Last Synced: 2025-10-28T00:25:36.880Z (8 months ago)
- Topics: ai, clerk, drizzle-orm, full-stack, full-stack-development, google-gemini, inngest, interactive-learning, learning-management-system, nextjs, nodejs, noen, open-source, personalised-learning, postgresql, tailwindcss
- Language: JavaScript
- Homepage:
- Size: 83.8 MB
- Stars: 11
- Watchers: 1
- Forks: 4
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# AI-Powered Learning Management System (AI LMS)
This project is an AI-powered Learning Management System (AI LMS) built using Next.js, Clerk for authentication, Inngest for function orchestration, Drizzle ORM for database interaction, and Google Gemini for AI-powered content generation. It allows users to create personalized study materials for various learning goals, such as exam preparation, job interviews, or general practice.
## Demo
- [Demo Video](https://drive.google.com/file/d/1CuD56rPsAf80mXNPXnVTLV0EYdY53B3z/view?t=2)
## Features
* **AI-Driven Course Outline Generation:** Users input a topic, course type (e.g., Exam, Job Interview, Practice, Code Prep, Other), and difficulty level. The AI generates a course outline containing a summary, chapters, chapter summaries, topic lists for each chapter, and relevant emojis, all formatted in JSON.
* **Dynamic Study Material Generation:** Based on the course outline, the system dynamically generates various types of study materials:
* **Chapter Notes:** Detailed notes for each chapter, broken down by topics, in markdown format for easy rendering.
* **Flashcards:** Interactive flashcards for memorization, with front and back content.
* **Quizzes:** Gamified quizzes with multiple-choice questions, timers, and scoring to test knowledge.
* **Question & Answer (Q&A):** Comprehensive question-and-answer pairs for deeper learning.
* **Personalized Learning Paths:** Users can select the specific study material types they want to generate and use. An "ALL" option generates all available study types.
* **User Authentication:** Clerk manages user registration, login, and secure sessions.
* **Database Integration:** Drizzle ORM facilitates interactions with a Neon Serverless PostgreSQL database, storing course data, user information, and generated study materials.
* **Background Task Orchestration:** Inngest orchestrates the complex interactions between the AI model, database operations, and asynchronous content generation, providing a seamless user experience.
* **Progress Tracking (Generating/Ready Status):** UI elements indicate the status of material generation, providing feedback to the user while content is being created in the background.
* **Interactive Flashcard UI:** Flashcards are presented in a user-friendly swipeable interface with flip card animations.
* **Gamified Quiz Experience:** Quizzes include timers, scoring, and feedback on correct/incorrect answers, enhancing user engagement.
* **Markdown Rendering for Notes and Q&A:** Notes and Q&A content are rendered using `react-markdown` and `remark-gfm` for a clean and formatted display.
## Tech Stack
* **Frontend:** Next.js (App Router), React, Tailwind CSS, Ripple UI, Lucide React, Swiper.js, React Card Flip, Styled Components
* **Backend/Serverless:** Node.js, Inngest, Clerk
* **Database:** Neon Serverless PostgreSQL, Drizzle ORM
* **AI:** Google Gemini
## Installation and Setup
1. **Clone the Repository:**
```bash
git clone https://github.com/your-username/ai-lms.git
```
2. **Install Dependencies:**
```bash
cd ai-lms
npm install
```
3. **Environment Variables:**
Create a `.env.local` file in the project root and add the following:
```
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=YOUR_CLERK_PUBLISHABLE_KEY
CLERK_SECRET_KEY=YOUR_CLERK_SECRET_KEY
NEXT_PUBLIC_DATABASE_CONNECTION_STRING=YOUR_NEON_DATABASE_CONNECTION_STRING
NEXT_PUBLIC_GEMINI_API_KEY=YOUR_GOOGLE_GEMINI_API_KEY
```
* **`NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY`**: Your Clerk publishable key.
* **`CLERK_SECRET_KEY`**: Your Clerk secret key.
* **`NEXT_PUBLIC_DATABASE_CONNECTION_STRING`**: Your Neon database connection string.
* **`NEXT_PUBLIC_GEMINI_API_KEY`**: Your Google Gemini API key.
4. **Run the Development Server:**
```bash
npm run dev
```
## Project Structure
* **`app`**: Next.js App Router directory containing all application code:
* **`api`**: API routes for backend logic.
* **`components`**: Reusable UI components.
* **`course/[courseId]`**: Course details pages (dynamic routing).
* **`create`**: Course creation page.
* **`dashboard`**: User dashboard.
* **`layout.js`**: Main application layout.
* **`page.js`**: Main landing page (optional).
* **`provider.js`**: Clerk user provider and setup.
* **`configs`**: Configuration files:
* **`AiModel.js`**: Configuration for Google Gemini AI models and prompts.
* **`db.js`**: Database connection setup with Drizzle ORM.
* **`schema.js`**: Database schema definition using Drizzle ORM.
* **`inngest`**: Inngest functions for background tasks:
* **`client.js`**: Inngest client setup.
* **`functions.js`**: Definitions for all Inngest functions.
* **`public`**: Static assets (images, icons, etc.).
* **`styles`**: Global stylesheets.
## API Routes
* **`/api/courses`**: Handles fetching courses (`GET`) based on `courseId` (for individual course retrieval) or `createdBy` (for user's course list). Also handles new course creation (`POST`) initiated by the create course page.
* **`/api/create-user`**: An API endpoint called by the `CreateNewUser` Inngest function to create a new user record in the database upon initial login with Clerk.
* **`/api/generate-course-outline`**: Handles the creation of new courses and triggers AI course outline generation. Receives course details (topic, type, difficulty) via `POST` request.
* **`/api/study-type`**: Retrieves study materials for a specific course and study type (`POST`). Handles "ALL" type to fetch all material types at once.
* **`/api/study-type-content`**: Triggers the generation of specific study material content (Flashcards, Quiz, Q&A) through Inngest functions, using `chapter` and `type` data sent via `POST`.
## Inngest Functions
* **`helloWorld`**: Example/test function (can be removed).
* **`CreateNewUser`**: Called on user creation event; creates a new user record in the database if one doesn't exist, syncing with Clerk.
* **`GenerateNotes`**: Triggered by `/api/generate-course-outline`; generates detailed chapter notes using the AI and updates the course status in the database.
* **`GenerateStudyTypeContent`**: Triggered by `/api/study-type-content`; generates content for specific study material types (flashcards, quizzes, Q&A) using the configured AI models. Updates the status of the generated content in the database.
## Contributing
Contributions are welcome! Please follow these guidelines:
* Fork the repository.
* Create a new branch for your feature/fix.
* Commit your changes.
* Push your branch to your fork.
* Open a pull request.