Skip to content

Repository files navigation

LACO AI - Intelligent PDF Analysis System

Developing Area: Development Page

Author: cordyStackX | Year: 2025

Beta Version License Educational

🎯 Project Overview

LACO AI is an advanced AI-powered PDF analysis, summarization, and chatbot system designed for La Consolacion College Bacolod (LCCB), with a separate tier for general Business use. Admins upload documents under two distinct categories:

  • Public PDF β€” safe, non-sensitive documents that power the embeddable chatbot widget, available to Business accounts and anonymous site visitors.
  • Sensitive PDF β€” protected academic data (including student records and grades), restricted to verified LCCB roles (Admin, Teacher, Student) with email-based identity verification.

This educational project leverages cutting-edge artificial intelligence to transform how students, educators, and businesses interact with documents β€” while keeping sensitive institutional data walled off from public-facing chat surfaces.

⚠️ Beta Version Notice

This is a BETA VERSION for educational and research purposes only. Not intended for production or commercial use.


✨ Key Features

πŸ“„ Intelligent PDF Processing

  • Two PDF Tiers: Admins categorize every upload as either Public PDF (safe for the chatbot widget and Business/general use) or Sensitive PDF (protected academic data, LCCB-only)
  • Smart Summarization: Automatically generate concise summaries of lengthy PDF documents
  • Context-Aware Analysis: AI understands document structure and extracts key information
  • Multi-PDF Support: Upload and manage multiple documents simultaneously
  • Search & Filter: Find PDFs quickly by filename
  • Right-Click Management: Delete PDFs easily via context menu

πŸ’¬ Interactive AI Chat

  • Ask Questions: Query your documents and receive accurate, context-based answers
  • Embeddable Chatbot Widget: /chat_bot serves anonymous, third-party site visitors using Public PDF data only β€” Sensitive PDFs are never exposed through this surface
  • Real-time Responses: Powered by OpenAI (gpt-4o-mini) for instant, intelligent feedback
  • Conversation Memory: Maintains chat history for continuous dialogue
  • PDF Context: Select specific PDFs to chat about with AI assistance
  • Streaming Responses: Real-time AI response generation

πŸ‘₯ User Management & Roles

  • Role-Based Access: Admin, Teacher, and Student permissions (LCCB, Sensitive PDF scope)
  • Business Accounts: Separate tier for general document analysis using Public PDFs only
    • Free Tier: 1 PDF upload
    • Enterprise Tier (paid): up to 20 PDF uploads
  • Admin Dashboard: User management, PDF categorization (Public/Sensitive), API logs, system monitoring
  • Teacher Supervision: Monitor and filter content for students under 13
  • Student Accounts: Independent access for users 13 and older
  • Profile Management: Update name, upload profile pictures, change passwords

πŸ”’ Security & Privacy

  • Public vs Sensitive Separation: Sensitive PDFs (academic/grade data) are never served through the public chatbot widget or to Business accounts
  • Persistent Storage: PDFs stored securely until manually deleted via right-click context menu
  • Profile Pictures: Upload and manage profile pictures with automatic updates
  • Encrypted Authentication: Secure JWT-based user authentication with HTTP-only cookies
  • Rate Limiting: 1 request per second per IP to prevent spam and abuse
  • CSRF Protection: Origin validation and security headers
  • No External Data Sharing: Privacy-first approach - your documents remain confidential
  • Email Verification: Secure password reset with verification codes; email also serves as the identity match for sensitive record disclosure
  • Role-Based Access: Admin, Teacher, and Student permissions

🎨 Modern User Interface

  • Responsive Design: Works seamlessly on desktop, tablet, and mobile devices
  • Intuitive Navigation: User-friendly dashboard and chat interface
  • Loading States: SweetAlert2 notifications and progress indicators
  • Real-time Updates: Instant feedback for user actions

πŸ› οΈ Technology Stack

Frontend

  • Framework: Next.js 15 (React 19)
  • Language: TypeScript
  • Styling: CSS Modules with adaptive theming
  • State Management: React Hooks (useState, useEffect, useRef)
  • Routing: Next.js App Router

Backend

  • API Framework: Flask (Python) via FastAPI on Render
  • AI Engine: OpenAI (gpt-4o-mini)
  • PDF Processing: PyPDF2, Python file handling
  • Database: Supabase (PostgreSQL) with row-level security
  • Authentication: JWT tokens with HTTP-only cookies
  • File Storage: Supabase Storage (public and secure buckets β€” split by Public PDF / Sensitive PDF classification)
  • Rate Limiting: In-memory cooldown tracking (1 req/sec per IP)
  • Security: CSRF protection, origin validation, bcrypt password hashing

DevOps & Tools

  • Package Manager: pnpm
  • Code Quality: ESLint, TypeScript
  • Version Control: Git & GitHub
  • Deployment: Render (Python API), Vercel-ready (Next.js)

πŸ—οΈ System Architecture

LACO AI follows a Service-Oriented Architecture (SOA) for modularity and scalability.

%%{init: {'theme':'base', 'themeVariables': {'fontSize':'18px', 'fontFamily':'arial', 'lineColor':'#ff4444', 'primaryBorderColor':'#ff4444'}}}%%
flowchart TD
    %% ===== User Interface =====
    User["<b>USER</b><br/>πŸ‘€"]
    ChatBotVisitor["<b>WIDGET VISITOR</b><br/>🌐"]
    
    %% ===== Presentation Layer =====
    UI_Pages["<b>APP PAGES</b><br/>πŸ“±<br/>(src/app)"]
    UI_Components["<b>UI COMPONENTS</b><br/>🎨<br/>(src/components)"]
    
    %% ===== Authentication Layer =====
    JWT_Service["<b>JWT SERVICE</b><br/>πŸ”<br/>(/services/jwt)"]
    Auth_Service["<b>AUTH SERVICE</b><br/>βœ‰οΈ<br/>(Supabase Auth)"]
    Email_Verification["<b>EMAIL VERIFY</b><br/>πŸ“§"]
    
    %% ===== AI Processing =====
    AI_Response["<b>AI RESPONSE</b><br/>πŸ€–<br/>(response)"]
    AI_Response2["<b>AI RESPONSE V2</b><br/>πŸ€–<br/>(response2)"]
    OpenAI_API["<b>OpenAI API</b><br/>⭐"]
    
    %% ===== Storage Layer =====
    Upload_PDF["<b>UPLOAD PDF</b><br/>πŸ“€<br/>(Public / Sensitive)"]
    Retrieve_PDF["<b>RETRIEVE PDF</b><br/>πŸ“₯"]
    Update_PDF["<b>UPDATE PDF</b><br/>✏️"]
    Delete_PDF["<b>DELETE PDF</b><br/>πŸ—‘οΈ"]
    Storage_Public[("<b>PUBLIC PDF<br/>STORAGE</b><br/>πŸ’Ύ")]
    Storage_Sensitive[("<b>SENSITIVE PDF<br/>STORAGE</b><br/>πŸ”’")]
    
    %% ===== Admin Services =====
    Manage_User["<b>USER MGMT</b><br/>πŸ‘₯"]
    API_Logs["<b>API LOGS</b><br/>πŸ“Š"]
    Code_Logs["<b>CODE LOGS</b><br/>πŸ“‹"]
    Update_Status["<b>UPDATE STATUS</b><br/>πŸ”„"]
    
    %% ===== Utilities =====
    Security_Helper["<b>SECURITY</b><br/>πŸ›‘οΈ"]
    Fetch_Utils["<b>FETCH UTILS</b><br/>πŸ”§"]
    
    %% ===== Flow Connections =====
    User --> UI_Pages
    User --> UI_Components
    ChatBotVisitor --> UI_Pages
    
    UI_Pages --> JWT_Service
    UI_Pages -->Auth_Service
    UI_Pages -->AI_Response
    UI_Pages --> Upload_PDF
    
    UI_Components -->Fetch_Utils
    
    JWT_Service -->Security_Helper
    Auth_Service -->Email_Verification
    
    AI_Response -->OpenAI_API
    AI_Response2 --> OpenAI_API
    
    Manage_User -->Auth_Service
    Manage_User --> Update_Status
    
    Upload_PDF --> Storage_Public
    Upload_PDF --> Storage_Sensitive
    Retrieve_PDF -->Storage_Public
    Retrieve_PDF -->Storage_Sensitive
    Update_PDF -->Storage_Public
    Update_PDF -->Storage_Sensitive
    Delete_PDF -->Storage_Public
    Delete_PDF -->Storage_Sensitive
    
    API_Logs -->Storage_Public
    Code_Logs -->Storage_Public
    
    Storage_Public -->AI_Response
    Storage_Sensitive -->AI_Response
    
    %% ===== Styling =====
    linkStyle default stroke:#ff4444,stroke-width:3px
    classDef userStyle fill:#e1f5ff,stroke:#01579b,stroke-width:4px,color:#000
    classDef uiStyle fill:#fff3e0,stroke:#e65100,stroke-width:3px,color:#000
    classDef authStyle fill:#f3e5f5,stroke:#4a148c,stroke-width:3px,color:#000
    classDef aiStyle fill:#e8f5e9,stroke:#1b5e20,stroke-width:3px,color:#000
    classDef storageStyle fill:#fce4ec,stroke:#880e4f,stroke-width:3px,color:#000
    classDef adminStyle fill:#fff9c4,stroke:#f57f17,stroke-width:3px,color:#000
    classDef utilStyle fill:#e0f2f1,stroke:#004d40,stroke-width:3px,color:#000
    
    class User,ChatBotVisitor userStyle
    class UI_Pages,UI_Components uiStyle
    class JWT_Service,Auth_Service,Email_Verification authStyle
    class AI_Response,AI_Response2,OpenAI_API aiStyle
    class Upload_PDF,Retrieve_PDF,Update_PDF,Delete_PDF,Storage_Public,Storage_Sensitive storageStyle
    class Manage_User,API_Logs,Code_Logs,Update_Status adminStyle
    class Security_Helper,Fetch_Utils utilStyle
Loading

πŸ“Š Use Cases

Installation & Setup

Option 1: Automated Setup (Recommended)

  1. Clone the repository:

    git clone https://github.com/cordyStackX/lccb_ai_2.git
    cd lccb_ai_2
  2. Run the automated setup script:

    chmod +x setup.sh
    ./setup.sh
  3. The script will:

    • Install Node.js dependencies
    • Set up Python virtual environment
    • Install Python packages
    • Configure environment variables
    • Start both Next.js and Flask servers
  4. Open your browser and navigate to:

Option 2: Manual Setup

Frontend Setup:

# Install dependencies
pnpm install

# Run development server
pnpm dev

Backend Setup:

# Navigate to Python directory
cd python

# Create virtual environment
python3 -m venv .venv
source .venv/bin/activate  # On Windows: .venv\Scripts\activate

# Install dependencies
pip install -r requirements.txt

# Run Flask server
python main.py

πŸ“– User Guide

1. Registration & Login

  • Navigate to /auth/signup to create an account
  • Verify email through confirmation link
  • Login at /auth/signin
  • Secure JWT-based authentication with HTTP-only cookies
  • Email address doubles as your unique identifier and is used for password recovery and sensitive-record verification

2. Uploading PDFs (Admin)

  • Access the dashboard after login
  • Click "Upload New PDF" button
  • Select your PDF file (supports various sizes)
  • Choose a category for the upload:
    • Public PDF β€” safe for the embeddable chatbot widget and Business accounts; must not contain sensitive or confidential data
    • Sensitive PDF β€” protected academic/institutional data (e.g. grades, records), restricted to LCCB roles and never served to the widget
  • PDFs stored securely until you manually delete them
  • Search and filter PDFs by filename

3. Managing PDFs

  • Search: Use the search bar to filter PDFs by name
  • Select: Click on a PDF to use it for AI chat
  • Delete: Right-click any PDF and select "Delete PDF" to remove it
  • View Details: See filename, file size, and Public/Sensitive category for each PDF

4. Chatting with AI

  • Select a PDF document from your library
  • Type your question in the chat interface
  • OpenAI analyzes the selected PDF and provides intelligent responses
  • Chat history persists for reference

5. Chatbot Widget (/chat_bot)

  • Embeddable, anonymous-visitor chat surface for Business accounts and general site integrations
  • Answers are generated only from that Business's own Public PDF uploads
  • Never has access to Sensitive PDFs, other Business accounts' data, or system/internal information

6. Profile Management

  • Click on your profile to access settings
  • Update Name: Edit your display name
  • Profile Picture: Upload and update your profile photo
  • Change Password: Secure password reset with email verification
  • View Role: See your assigned role (Admin, Teacher, or Student)

7. Admin Features (Admin Only)

  • User Management: Create, update, delete user accounts
  • PDF Categorization: Upload and classify PDFs as Public or Sensitive
  • API Logs: Monitor API usage and system performance
  • Role Assignment: Assign Teacher or Student roles
  • Status Control: Activate or deactivate user accounts

🎨 Design & User Experience

Visual Design

  • Modern UI: Clean, minimalist interface with adaptive theming
  • Responsive Layout: Optimized for all screen sizes
  • Accessibility: WCAG-compliant color contrast and keyboard navigation

User Flow

  1. Landing Page β†’ Feature overview and project description
  2. Authentication β†’ Secure signup/login with email verification
  3. Dashboard/Chat Interface β†’ Upload and manage Public/Sensitive PDFs
  4. PDF Selection β†’ Choose document for AI interaction
  5. AI Chat β†’ Ask questions and receive OpenAI-powered responses
  6. Chatbot Widget β†’ Anonymous visitors chat against Public PDFs only
  7. Profile Management β†’ Update name, profile picture, password
  8. PDF Management β†’ Search, filter, categorize, and delete via right-click menu
  9. Admin Panel (Admin only) β†’ User management, PDF categorization, and system monitoring

⚑ How It Works

Request Flow

  1. User Interaction β†’ Frontend components (React/Next.js)
  2. API Request β†’ Next.js API routes handle client requests
  3. Rate Limiting β†’ Cooldown check (1 request/second per IP)
  4. Authentication β†’ JWT verification, CSRF protection, origin validation (skipped for anonymous widget visitors, who are scoped to Public PDFs only)
  5. PDF Processing β†’ Python Flask server downloads and processes the selected PDF (Public or Sensitive) from Supabase
  6. AI Analysis β†’ OpenAI (gpt-4o-mini) analyzes content and generates a contextual response, respecting the Public/Sensitive boundary
  7. Database Logging β†’ Supabase records API usage, user actions, and timestamps
  8. Response Delivery β†’ AI-generated answer returned to frontend
  9. File Management β†’ PDFs stored until manual deletion via context menu

Technical Workflow

User / Widget Visitor β†’ Next.js UI β†’ API Routes β†’ Rate Limit Check β†’ JWT Auth (if applicable)
β†’ CSRF/Origin Validation β†’ Flask API β†’ Supabase Storage (Public / Sensitive bucket)
β†’ PDF Download β†’ PDF Processing β†’ OpenAI API 
β†’ AI Response β†’ Database Log β†’ User Display

πŸ› Known Issues & Limitations

Current Limitations

  • Beta Version: May contain bugs and unexpected behavior
  • Rate Limiting: 1 request per second per IP address (HTTP 429 on excess)
  • Large PDFs: Very large documents may experience processing delays or timeouts
  • OpenAI API Limits: Subject to OpenAI API rate limits and quotas
  • File Persistence: PDFs stored until manual deletion (no auto-cleanup)
  • No Offline Mode: Requires internet connection for AI processing
  • Search Limited: Search only by filename, not document content
  • Email Dependency: Password reset requires email verification
  • Manual Categorization: Public/Sensitive classification is set by the admin at upload time β€” misclassification is the uploader's responsibility (see Privacy Policy Β§6)

Planned Improvements

  • Enhanced PDF chunking algorithm for better context retention
  • Conversation history export and management
  • Multi-language support for international users
  • Advanced search within document content
  • Document comparison and diff features
  • Batch PDF processing
  • Mobile app version
  • Improved admin analytics dashboard
  • Custom AI model fine-tuning for educational content

🀝 Contributing

We welcome contributions from the community! This is an educational open-source project.

How to Contribute

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

Development Guidelines

  • Follow existing code style and conventions
  • Write clear commit messages
  • Test your changes thoroughly
  • Update documentation as needed
  • Respect the Apache 2.0 license

πŸ“„ License

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

Key Points

  • βœ… Free to use, modify, and distribute
  • βœ… Must include license and copyright notice
  • βœ… State significant changes made
  • ❌ No warranty provided
  • ❌ Contributors not liable for damages

Copyright Β© 2025 cordyStackX


πŸ‘¨β€πŸ’» Project Information

Developer

Project Stats

  • Version: Beta
  • Started: 2025
  • Language: TypeScript, Python
  • Framework: Next.js, Flask
  • AI Model: OpenAI (gpt-4o-mini)
  • Database: Supabase PostgreSQL
  • Deployment: Vercel (Frontend), Render (Backend API)

πŸ“ž Support & Contact

For Questions or Issues

Important Links


🌟 Acknowledgments

  • La Consolacion College Bacolod - Inspiration and educational purpose
  • OpenAI - Powerful AI processing and natural language capabilities
  • Supabase - Database, authentication, and storage infrastructure
  • Next.js Team - Excellent React framework and developer experience
  • Vercel - Deployment platform for Next.js applications
  • Render - Python API hosting platform
  • Open Source Community - Libraries and tools used in this project

⚠️ Disclaimer

IMPORTANT NOTICE:

This is a BETA VERSION educational research project. By using this software, you acknowledge:

  • βœ… This is for educational and research purposes only
  • βœ… Not intended for production or commercial use
  • βœ… Provided "AS IS" without warranties
  • βœ… May contain bugs, errors, or unexpected behavior
  • βœ… Subject to changes or discontinuation without notice
  • ❌ Do not upload sensitive or confidential information into Public PDFs
  • ❌ No illegal activities supported or condoned
  • ❌ No guarantees of data security or availability

Use at your own risk. The developers and contributors are not liable for any damages or losses arising from the use of this software, including sensitive data mistakenly uploaded as a Public PDF.


πŸ“š Additional Resources

Documentation

Tutorials


βœ… Result:
LACO AI is a hybrid SOA system combining modern web technologies with powerful AI capabilities to revolutionize document interaction for educational and business purposes β€” with a strict Public/Sensitive PDF boundary keeping institutional data out of public-facing surfaces.

  • Frontend acts as the service consumer
  • Next.js API routes as the middleware layer
  • Python Flask as the AI service provider
  • Supabase as the data and storage layer

πŸ”’ Security & Privacy

Data Protection

  • Public vs Sensitive PDF Separation: Sensitive PDFs (academic records, grades) are stored and served separately from Public PDFs; the chatbot widget and Business accounts can only ever reach Public PDF data
  • Persistent Storage: PDFs stored in Supabase until you manually delete them
  • Right-Click Delete: Easy PDF removal via context menu
  • Profile Pictures: Securely stored, automatically replaced when updated
  • Encrypted Passwords: Industry-standard bcrypt hashing
  • JWT Authentication: HTTP-only cookies for secure token storage
  • API Key Protection: All endpoints require authentication and rate limiting
  • CSRF Protection: Origin header validation on all requests
  • No External Data Sharing: Your documents processed by OpenAI per their privacy policy
  • Rate Limiting: Cooldown mechanism prevents spam (1 req/sec per IP)

Compliance

  • Apache License 2.0
  • Educational use only
  • No illegal activities supported
  • GDPR-conscious design (no unnecessary data retention)
  • See the Privacy Policy for the full Public/Sensitive PDF data-handling terms

πŸŽ“ Educational Purpose

This project is developed strictly for:

  • βœ… Educational research and learning
  • βœ… Academic experimentation
  • βœ… Technology demonstration
  • βœ… Open-source contribution

Not intended for:

  • ❌ Commercial use
  • ❌ Production deployment
  • ❌ Processing sensitive/confidential data through Public PDFs
  • ❌ Any illegal activities

πŸš€ Getting Started

Prerequisites

  • Node.js 18+ and pnpm
  • Python 3.11+ (3.13 recommended)
  • Ubuntu/Linux environment (WSL supported)
  • OpenAI API key
  • Supabase account with database and storage setup

Environment Variables

Create a .env.local file in the project root:

# OpenAI
OPENAI_API_KEY=your_openai_api_key

# API Security
API_KEY=your_secure_api_key
JWT_SECRET=your_jwt_secret_key
APP_URL=http://localhost:3000

# Supabase
SUPABASE_URL=your_supabase_url
SUPABASE_SERVICE_ROLE_KEY=your_service_role_key
NEXT_PUBLIC_SUPABASE_URL=your_supabase_url
NEXT_PUBLIC_SUPABASE_ANON_KEY=your_anon_key

# Database
POSTGRES_URL=your_postgres_connection_string

# Optional
RENDER_API=your_render_api_url
PORT=10000

Disclaimer: This project does not collect any user data for external purposes. All data is processed securely and stored temporarily.


πŸ“Š Project Diagrams

Data Flow Diagram (DFD)

The Data Flow Diagram illustrates how data moves through the LACO AI system, from user input to AI-generated output.

Data Flow Diagram

Key Data Flows:

  • Admin uploads PDF and classifies it as Public or Sensitive β†’ routed to the matching Supabase Storage bucket (persistent until manual deletion)
  • PDF retrieval β†’ Python Flask API
  • PDF text extraction β†’ OpenAI API
  • AI response generation (scoped to Public data for widget/Business, Public + Sensitive for verified LCCB roles) β†’ User interface
  • Activity logging β†’ Supabase Database
  • Profile picture upload β†’ Supabase public bucket
  • Rate limiting β†’ In-memory cooldown tracking

Context Free Diagram (CFD)

The Context Diagram shows the system boundaries and external entities that interact with LACO AI.

Data Flow Diagram


External Entities:

  • Users: Students, Teachers, Administrators (LCCB, Sensitive + Public PDF access)
  • Business Accounts / Widget Visitors: Public PDF access only

Directory Tree

src
β”œβ”€β”€ app
β”‚   β”œβ”€β”€ favicon.ico
β”‚   β”œβ”€β”€ globals.css
β”‚   β”œβ”€β”€ layout.tsx
β”‚   β”œβ”€β”€ manifest.ts
β”‚   β”œβ”€β”€ not-found.module.css
β”‚   β”œβ”€β”€ not-found.tsx
β”‚   β”œβ”€β”€ (pages)
β”‚   β”‚   β”œβ”€β”€ admin
β”‚   β”‚   β”‚   β”œβ”€β”€ chatbot
β”‚   β”‚   β”‚   β”‚   └── page.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ dashboard
β”‚   β”‚   β”‚   β”‚   └── page.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ manageuser
β”‚   β”‚   β”‚   β”‚   └── page.tsx
β”‚   β”‚   β”‚   └── setting
β”‚   β”‚   β”‚       └── page.tsx
β”‚   β”‚   β”œβ”€β”€ auth
β”‚   β”‚   β”‚   β”œβ”€β”€ confirm-email-forgot-pwd
β”‚   β”‚   β”‚   β”‚   └── page.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ confirm-email-signin
β”‚   β”‚   β”‚   β”‚   └── page.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ confirm-email-signup
β”‚   β”‚   β”‚   β”‚   └── page.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ create-password
β”‚   β”‚   β”‚   β”‚   └── page.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ forgot-password
β”‚   β”‚   β”‚   β”‚   └── page.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ register
β”‚   β”‚   β”‚   β”‚   └── page.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ signin
β”‚   β”‚   β”‚   β”‚   └── page.tsx
β”‚   β”‚   β”‚   └── update-password
β”‚   β”‚   β”‚       └── page.tsx
β”‚   β”‚   β”œβ”€β”€ chat
β”‚   β”‚   β”‚   └── page.tsx
β”‚   β”‚   β”œβ”€β”€ chat_bot
β”‚   β”‚   β”‚   └── page.tsx
β”‚   β”‚   β”œβ”€β”€ privacy
β”‚   β”‚   β”‚   └── page.tsx
β”‚   β”‚   └── terms
β”‚   β”‚       └── page.tsx
β”‚   β”œβ”€β”€ page.tsx
β”‚   β”œβ”€β”€ services
β”‚   β”‚   β”œβ”€β”€ api
β”‚   β”‚   β”‚   β”œβ”€β”€ delete_responses
β”‚   β”‚   β”‚   β”‚   └── route.ts
β”‚   β”‚   β”‚   β”œβ”€β”€ response2-stream
β”‚   β”‚   β”‚   β”‚   └── route.ts
β”‚   β”‚   β”‚   β”œβ”€β”€ response3-stream
β”‚   β”‚   β”‚   β”‚   └── route.ts
β”‚   β”‚   β”‚   β”œβ”€β”€ response_image-stream
β”‚   β”‚   β”‚   β”‚   └── route.ts
β”‚   β”‚   β”‚   β”œβ”€β”€ response-stream
β”‚   β”‚   β”‚   β”‚   └── route.ts
β”‚   β”‚   β”‚   β”œβ”€β”€ retrieve_responses
β”‚   β”‚   β”‚   β”‚   └── route.ts
β”‚   β”‚   β”‚   β”œβ”€β”€ save_responses
β”‚   β”‚   β”‚   β”‚   └── route.ts
β”‚   β”‚   β”‚   └── tts
β”‚   β”‚   β”‚       └── route.ts
β”‚   β”‚   β”œβ”€β”€ jwt
β”‚   β”‚   β”‚   β”œβ”€β”€ auth
β”‚   β”‚   β”‚   β”‚   └── route.ts
β”‚   β”‚   β”‚   β”œβ”€β”€ deauth
β”‚   β”‚   β”‚   β”‚   └── route.ts
β”‚   β”‚   β”‚   └── verify
β”‚   β”‚   β”‚       └── route.ts
β”‚   β”‚   └── supabase
β”‚   β”‚       β”œβ”€β”€ admin
β”‚   β”‚       β”‚   β”œβ”€β”€ delete_user
β”‚   β”‚       β”‚   β”‚   └── route.ts
β”‚   β”‚       β”‚   β”œβ”€β”€ get-suspension-state
β”‚   β”‚       β”‚   β”‚   └── route.ts
β”‚   β”‚       β”‚   β”œβ”€β”€ retrieve_user
β”‚   β”‚       β”‚   β”‚   └── route.ts
β”‚   β”‚       β”‚   β”œβ”€β”€ suspension-state
β”‚   β”‚       β”‚   β”‚   └── route.ts
β”‚   β”‚       β”‚   β”œβ”€β”€ system_logs
β”‚   β”‚       β”‚   β”‚   └── route.ts
β”‚   β”‚       β”‚   └── update_user_status
β”‚   β”‚       β”‚       └── route.ts
β”‚   β”‚       β”œβ”€β”€ auth
β”‚   β”‚       β”‚   β”œβ”€β”€ check_code
β”‚   β”‚       β”‚   β”‚   └── route.ts
β”‚   β”‚       β”‚   β”œβ”€β”€ check_status
β”‚   β”‚       β”‚   β”‚   └── route.ts
β”‚   β”‚       β”‚   β”œβ”€β”€ forgot_password
β”‚   β”‚       β”‚   β”‚   β”œβ”€β”€ check_email
β”‚   β”‚       β”‚   β”‚   β”‚   └── route.ts
β”‚   β”‚       β”‚   β”‚   └── update_account
β”‚   β”‚       β”‚   β”‚       └── route.ts
β”‚   β”‚       β”‚   β”œβ”€β”€ register
β”‚   β”‚       β”‚   β”‚   β”œβ”€β”€ check_email
β”‚   β”‚       β”‚   β”‚   β”‚   └── route.ts
β”‚   β”‚       β”‚   β”‚   └── create_account
β”‚   β”‚       β”‚   β”‚       └── route.ts
β”‚   β”‚       β”‚   β”œβ”€β”€ signin
β”‚   β”‚       β”‚   β”‚   └── route.ts
β”‚   β”‚       β”‚   └── update
β”‚   β”‚       β”‚       └── route.ts
β”‚   β”‚       β”œβ”€β”€ health
β”‚   β”‚       β”‚   └── route.ts
β”‚   β”‚       └── storage
β”‚   β”‚           β”œβ”€β”€ deletepdf
β”‚   β”‚           β”‚   └── route.ts
β”‚   β”‚           β”œβ”€β”€ deletepdf_chatbot
β”‚   β”‚           β”‚   └── route.ts
β”‚   β”‚           β”œβ”€β”€ downloadpdf_chatbot
β”‚   β”‚           β”‚   └── route.ts
β”‚   β”‚           β”œβ”€β”€ fetchimg
β”‚   β”‚           β”‚   └── route.ts
β”‚   β”‚           β”œβ”€β”€ lbc_image_retieve
β”‚   β”‚           β”‚   └── route.ts
β”‚   β”‚           β”œβ”€β”€ lbc_image_upload
β”‚   β”‚           β”‚   └── route.ts
β”‚   β”‚           β”œβ”€β”€ retrieve
β”‚   β”‚           β”‚   └── route.ts
β”‚   β”‚           β”œβ”€β”€ retrieve_chatbot
β”‚   β”‚           β”‚   └── route.ts
β”‚   β”‚           β”œβ”€β”€ uploadimg
β”‚   β”‚           β”‚   └── route.ts
β”‚   β”‚           β”œβ”€β”€ uploadpdf
β”‚   β”‚           β”‚   └── route.ts
β”‚   β”‚           └── uploadpdf_chatbot
β”‚   β”‚               └── route.ts
β”‚   └── under-develop.tsx
β”œβ”€β”€ components
β”‚   β”œβ”€β”€ admin
β”‚   β”‚   β”œβ”€β”€ chat_bot
β”‚   β”‚   β”‚   β”œβ”€β”€ css
β”‚   β”‚   β”‚   β”‚   └── styles.module.css
β”‚   β”‚   β”‚   └── index.tsx
β”‚   β”‚   β”œβ”€β”€ dashboard
β”‚   β”‚   β”‚   β”œβ”€β”€ css
β”‚   β”‚   β”‚   β”‚   └── styles.module.css
β”‚   β”‚   β”‚   └── index.tsx
β”‚   β”‚   β”œβ”€β”€ index.ts
β”‚   β”‚   β”œβ”€β”€ manage_user
β”‚   β”‚   β”‚   β”œβ”€β”€ css
β”‚   β”‚   β”‚   β”‚   └── styles.module.css
β”‚   β”‚   β”‚   └── index.tsx
β”‚   β”‚   β”œβ”€β”€ setting
β”‚   β”‚   β”‚   β”œβ”€β”€ css
β”‚   β”‚   β”‚   β”‚   └── styles.module.css
β”‚   β”‚   β”‚   └── index.tsx
β”‚   β”‚   └── sidebar
β”‚   β”‚       β”œβ”€β”€ css
β”‚   β”‚       β”‚   └── styles.module.css
β”‚   β”‚       └── index.tsx
β”‚   β”œβ”€β”€ auth
β”‚   β”‚   β”œβ”€β”€ confirm_email_forgot_pwd
β”‚   β”‚   β”‚   β”œβ”€β”€ css
β”‚   β”‚   β”‚   β”‚   └── styles.module.css
β”‚   β”‚   β”‚   └── index.tsx
β”‚   β”‚   β”œβ”€β”€ confirm_email_register
β”‚   β”‚   β”‚   β”œβ”€β”€ css
β”‚   β”‚   β”‚   β”‚   └── styles.module.css
β”‚   β”‚   β”‚   └── index.tsx
β”‚   β”‚   β”œβ”€β”€ confirm_email_signin
β”‚   β”‚   β”‚   β”œβ”€β”€ css
β”‚   β”‚   β”‚   β”‚   └── styles.module.css
β”‚   β”‚   β”‚   └── index.tsx
β”‚   β”‚   β”œβ”€β”€ create_password
β”‚   β”‚   β”‚   β”œβ”€β”€ css
β”‚   β”‚   β”‚   β”‚   └── styles.module.css
β”‚   β”‚   β”‚   └── index.tsx
β”‚   β”‚   β”œβ”€β”€ forgot_password
β”‚   β”‚   β”‚   β”œβ”€β”€ css
β”‚   β”‚   β”‚   β”‚   └── styles.module.css
β”‚   β”‚   β”‚   └── index.tsx
β”‚   β”‚   β”œβ”€β”€ index.ts
β”‚   β”‚   β”œβ”€β”€ register
β”‚   β”‚   β”‚   β”œβ”€β”€ css
β”‚   β”‚   β”‚   β”‚   └── styles.module.css
β”‚   β”‚   β”‚   └── index.tsx
β”‚   β”‚   β”œβ”€β”€ signin
β”‚   β”‚   β”‚   β”œβ”€β”€ css
β”‚   β”‚   β”‚   β”‚   └── styles.module.css
β”‚   β”‚   β”‚   └── index.tsx
β”‚   β”‚   └── update_password
β”‚   β”‚       β”œβ”€β”€ css
β”‚   β”‚       β”‚   └── styles.module.css
β”‚   β”‚       └── index.tsx
β”‚   β”œβ”€β”€ chat
β”‚   β”‚   β”œβ”€β”€ header
β”‚   β”‚   β”‚   β”œβ”€β”€ css
β”‚   β”‚   β”‚   β”‚   └── styles.module.css
β”‚   β”‚   β”‚   └── index.tsx
β”‚   β”‚   β”œβ”€β”€ index.ts
β”‚   β”‚   β”œβ”€β”€ main
β”‚   β”‚   β”‚   β”œβ”€β”€ css
β”‚   β”‚   β”‚   β”‚   └── styles.module.css
β”‚   β”‚   β”‚   └── index.tsx
β”‚   β”‚   β”œβ”€β”€ profile
β”‚   β”‚   β”‚   β”œβ”€β”€ css
β”‚   β”‚   β”‚   β”‚   └── styles.module.css
β”‚   β”‚   β”‚   └── index.tsx
β”‚   β”‚   └── sidebars
β”‚   β”‚       β”œβ”€β”€ css
β”‚   β”‚       β”‚   └── styles.module.css
β”‚   β”‚       └── index.tsx
β”‚   β”œβ”€β”€ chat_bot
β”‚   β”‚   β”œβ”€β”€ index.ts
β”‚   β”‚   └── main
β”‚   β”‚       β”œβ”€β”€ css
β”‚   β”‚       β”‚   └── styles.module.css
β”‚   β”‚       └── index.tsx
β”‚   β”œβ”€β”€ disclaimer
β”‚   β”‚   β”œβ”€β”€ index.ts
β”‚   β”‚   β”œβ”€β”€ privacy
β”‚   β”‚   β”‚   β”œβ”€β”€ css
β”‚   β”‚   β”‚   β”‚   └── styles.module.css
β”‚   β”‚   β”‚   └── index.tsx
β”‚   β”‚   └── terms
β”‚   β”‚       β”œβ”€β”€ css
β”‚   β”‚       β”‚   └── styles.module.css
β”‚   β”‚       └── index.tsx
β”‚   β”œβ”€β”€ landpage
β”‚   β”‚   β”œβ”€β”€ banner
β”‚   β”‚   β”‚   β”œβ”€β”€ css
β”‚   β”‚   β”‚   β”‚   └── styles.module.css
β”‚   β”‚   β”‚   └── index.tsx
β”‚   β”‚   β”œβ”€β”€ chat_bot
β”‚   β”‚   β”‚   β”œβ”€β”€ css
β”‚   β”‚   β”‚   β”‚   └── styles.module.css
β”‚   β”‚   β”‚   └── index.tsx
β”‚   β”‚   β”œβ”€β”€ content_1
β”‚   β”‚   β”‚   β”œβ”€β”€ css
β”‚   β”‚   β”‚   β”‚   └── styles.module.css
β”‚   β”‚   β”‚   └── index.tsx
β”‚   β”‚   β”œβ”€β”€ content_2
β”‚   β”‚   β”‚   β”œβ”€β”€ css
β”‚   β”‚   β”‚   β”‚   └── styles.module.css
β”‚   β”‚   β”‚   └── index.tsx
β”‚   β”‚   β”œβ”€β”€ content_3
β”‚   β”‚   β”‚   β”œβ”€β”€ css
β”‚   β”‚   β”‚   β”‚   └── styles.module.css
β”‚   β”‚   β”‚   └── index.tsx
β”‚   β”‚   β”œβ”€β”€ content_4
β”‚   β”‚   β”‚   β”œβ”€β”€ css
β”‚   β”‚   β”‚   β”‚   └── styles.module.css
β”‚   β”‚   β”‚   └── index.tsx
β”‚   β”‚   β”œβ”€β”€ footer
β”‚   β”‚   β”‚   β”œβ”€β”€ css
β”‚   β”‚   β”‚   β”‚   └── styles.module.css
β”‚   β”‚   β”‚   └── index.tsx
β”‚   β”‚   β”œβ”€β”€ header
β”‚   β”‚   β”‚   β”œβ”€β”€ css
β”‚   β”‚   β”‚   β”‚   └── styles.module.css
β”‚   β”‚   β”‚   └── index.tsx
β”‚   β”‚   └── index.ts
β”‚   └── pwa_register
β”‚       └── index.ts
β”œβ”€β”€ config
β”‚   β”œβ”€β”€ conf
β”‚   β”‚   β”œβ”€β”€ css_config
β”‚   β”‚   β”‚   β”œβ”€β”€ animations.css
β”‚   β”‚   β”‚   β”œβ”€β”€ background_colors.css
β”‚   β”‚   β”‚   β”œβ”€β”€ config.css
β”‚   β”‚   β”‚   └── status.css
β”‚   β”‚   └── json_config
β”‚   β”‚       β”œβ”€β”€ Api_links.json
β”‚   β”‚       β”œβ”€β”€ fetch_url.json
β”‚   β”‚       └── Metadata.json
β”‚   └── images_links
β”‚       └── assets.json
β”œβ”€β”€ global.d.ts
β”œβ”€β”€ lib
β”‚   β”œβ”€β”€ code_store.ts
β”‚   β”œβ”€β”€ rate_limit.ts
β”‚   β”œβ”€β”€ security.ts
β”‚   └── supabase-server.ts
β”œβ”€β”€ modules
β”‚   β”œβ”€β”€ chat
β”‚   β”‚   β”œβ”€β”€ handle_submit.ts
β”‚   β”‚   β”œβ”€β”€ startRecording.ts
β”‚   β”‚   β”œβ”€β”€ StreamVoiceToText.ts
β”‚   β”‚   └── voice_tts.ts
β”‚   β”œβ”€β”€ formula
β”‚   β”‚   β”œβ”€β”€ Use_scroll_deg.ts
β”‚   β”‚   └── Use_scroll.ts
β”‚   └── index.ts
β”œβ”€β”€ sources
β”‚   └── suggestion.json
└── utilities
    β”œβ”€β”€ Confirm_Exit.ts
    β”œβ”€β”€ CopyToClipboard.ts
    β”œβ”€β”€ DownloadAsPDF.ts
    β”œβ”€β”€ Fetch_toFile.ts
    β”œβ”€β”€ Fetch_to.ts
    β”œβ”€β”€ index.ts
    β”œβ”€β”€ InView.ts
    β”œβ”€β”€ Meta_data.ts
    β”œβ”€β”€ Popup_info
    β”‚   β”œβ”€β”€ css
    β”‚   β”‚   └── styles.module.css
    β”‚   └── index.tsx
    β”œβ”€β”€ Prevent_Exit.ts
    β”œβ”€β”€ Progress.ts
    β”œβ”€β”€ React_Spinners.tsx
    β”œβ”€β”€ SweetAlert2.ts
    └── useSpeechToText.ts

About

AI PDF reader for LCC Bacolod: Summarize, ask questions, and interact with your documents smarter and faster.

Resources

Code of conduct

Security policy

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages