Skip to content

kooya3/PDF

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ€– AI-Powered Document Chat System

Next.js TypeScript Ollama ChromaDB ElevenLabs Tailwind CSS

A comprehensive document processing and chat system that combines local AI processing with premium cloud TTS for the ultimate document intelligence experience. Upload any document format, extract content with OCR, and have natural conversations powered by local AI models with professional voice synthesis.

Privacy Voice Quality Architecture


✨ Key Features

πŸ“„ Universal Document Support

  • PDF, DOCX, DOC - Word processors and PDFs with full text extraction
  • TXT, MD, HTML - Text and markup formats
  • CSV, XLSX, XLS - Spreadsheets and data files with table understanding
  • JSON, XML - Structured data formats
  • RTF - Rich text format support
  • Images - JPG, PNG, TIFF, BMP, WebP with advanced OCR

πŸ€– Hybrid AI Processing

  • Local LLM (Ollama) - Private document analysis with tinyllama model
  • ChromaDB Vector Store - Advanced semantic search and similarity matching
  • Smart Text Processing - Automatic content cleaning and optimization
  • Context-Aware Responses - AI maintains conversation history and document understanding
  • Complete Document Privacy - All document processing happens locally

🎡 Premium Voice Experience

  • ElevenLabs TTS - Professional, natural-sounding voice synthesis
  • Conversational Voices - 5 optimized voices for different contexts:
    • Rachel - Warm, natural female voice (perfect for conversations)
    • Adam - Deep, engaging male voice (professional content)
    • Antoni - Clear, articulate voice (document narration)
    • Sam - Casual, friendly voice (relaxed interactions)
    • Bella - Expressive, dynamic voice (engaging content)
  • Advanced Voice Controls - Stability, similarity boost, expression tuning
  • Smart Request Management - Automatic rate limiting and queue handling
  • Auto-Play Support - Seamless voice responses for chat messages

πŸ’¬ Intelligent Chat System

  • Document-Specific Knowledge - AI understands your document content
  • Real-Time Streaming - Fast response generation
  • Smart Commands - Extract dates, people, places, action items
  • Context Preservation - Maintains conversation flow across sessions
  • Multi-Format Understanding - Adapts responses based on document type

πŸ—‚οΈ Professional Document Management

  • Hierarchical Organization - Folder structure with nested categories
  • Advanced Search - Semantic search across all documents
  • Tag System - Custom tagging and categorization
  • Processing Analytics - Track usage and performance metrics
  • Real-Time Status - Live processing updates and health monitoring

πŸ“± Modern User Experience

  • Responsive Design - Optimized for desktop, tablet, and mobile
  • Glass Morphism UI - Beautiful, modern interface design
  • Dark/Light Themes - Customizable appearance
  • Real-Time Updates - Live document processing and chat updates
  • Progressive Enhancement - Works offline with cached content

πŸ› οΈ Technology Stack

Frontend Architecture

  • Next.js 15.1.7 - React framework with App Router and RSC
  • TypeScript 5.x - Full type safety and IntelliSense
  • Tailwind CSS 3.4.17 - Utility-first styling with custom components
  • Framer Motion - Smooth animations and transitions
  • Radix UI - Accessible, unstyled component primitives

AI & Processing

  • Ollama (tinyllama) - Local LLM for document analysis
  • LangChain - AI application framework and prompt management
  • ChromaDB - Vector database for semantic search
  • ElevenLabs API - Premium text-to-speech synthesis
  • Pinecone - Cloud vector database for embeddings

Authentication & Storage

  • Clerk - User authentication and session management
  • Firebase - Document metadata and user data storage
  • Hybrid Document Store - In-memory + persistent storage strategy

Document Processing

  • Mammoth.js - Advanced DOCX processing and conversion
  • PDF-Parse - PDF text extraction and metadata
  • Sharp - High-performance image processing
  • XLSX - Excel file parsing and data extraction
  • Cheerio - HTML parsing and content extraction

πŸš€ Quick Start Guide

1. Prerequisites & Installation

Node.js Environment

node --version  # v18+ required
npm --version   # v9+ required

Install Ollama (Required for Local AI)

# macOS
brew install ollama

# Linux
curl -fsSL https://ollama.com/install.sh | sh

# Windows - Download from: https://ollama.com/download/windows

Install ChromaDB (Required for Vector Search)

# Using pip (recommended)
pip install chromadb

# Using conda
conda install -c conda-forge chromadb

# Using Docker
docker run -p 8000:8000 chromadb/chroma

2. Project Setup

# Clone the repository
git clone https://github.com/your-username/ai-challenge.git
cd ai-challenge

# Install all dependencies
npm install

# Set up environment variables
cp .env.local.example .env.local
# Edit .env.local with your configuration

3. Environment Configuration

Create .env.local with the following configuration:

# Authentication (Required)
CLERK_SECRET_KEY=your_clerk_secret_key
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=your_clerk_publishable_key

# Firebase Configuration (Required)
FIREBASE_PROJECT_ID=your_firebase_project_id
FIREBASE_PRIVATE_KEY="your_firebase_private_key"
FIREBASE_CLIENT_EMAIL=your_firebase_client_email

# AI Configuration (Required)
OLLAMA_BASE_URL=http://localhost:11434
OLLAMA_MODEL=tinyllama:latest

# Vector Database (Required) 
PINECONE_API_KEY=your_pinecone_api_key

# Premium TTS (Required for voice features)
ELEVENLABS_API_KEY=your_elevenlabs_api_key

# Optional: Payment Integration
STRIPE_SECRET_KEY=your_stripe_secret_key
NEXT_PUBLIC_SCHEMATIC_PUBLISHABLE_KEY=your_schematic_key

4. Start All Services

Open 3 separate terminals:

# Terminal 1: Start Ollama Service
ollama serve

# Terminal 2: Start ChromaDB Server
chroma run --host localhost --port 8000

# Terminal 3: Start Next.js Application
npm run dev

5. Install AI Model

# Install the recommended model
ollama pull tinyllama:latest

# Verify installation
ollama list
ollama run tinyllama:latest

6. Access Your Application


πŸ“– Detailed Usage Guide

Document Upload & Processing

  1. Navigate to Upload: Go to /dashboard/upload
  2. Select Documents: Drag & drop or browse for files
  3. Choose Options: Enable OCR for scanned documents
  4. Monitor Progress: Watch real-time processing status
  5. Verify Completion: Ensure "completed" status before chatting

Intelligent Document Chat

  1. Access Document: Go to /dashboard/files/[document-id]
  2. Enable Voice: Click the speaker icon for TTS responses
  3. Natural Conversation: Ask questions in plain English
  4. Smart Commands:
    "Summarize this document"
    "Extract all dates mentioned"
    "Find people and organizations"
    "What are the key action items?"
    "Compare this with my other documents"
    

Voice & TTS Configuration

  1. Enable TTS: Click speaker button in chat interface
  2. Choose Voice: Select from 5 conversational voices
  3. Adjust Settings: Fine-tune stability, similarity, expression
  4. Auto-Play: Enable automatic voice responses
  5. Advanced Controls: Access streaming and quality settings

Document Organization

  • Folders: Create hierarchical folder structures
  • Tags: Add custom tags for categorization
  • Search: Use semantic search across all documents
  • Filtering: Filter by date, type, tags, or content

πŸ—οΈ System Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   Next.js App   β”‚    β”‚     Ollama      β”‚    β”‚    ChromaDB     β”‚
β”‚   (Frontend)    │────│  (Local AI)     β”‚    β”‚ (Vector Store)  β”‚
β”‚  Port: 3001     β”‚    β”‚ Port: 11434     β”‚    β”‚  Port: 8000     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
         β”‚                       β”‚                       β”‚
         β–Ό                       β–Ό                       β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚     Clerk       β”‚    β”‚   ElevenLabs    β”‚    β”‚    Pinecone     β”‚
β”‚  (Auth)         β”‚    β”‚ (Premium TTS)   β”‚    β”‚ (Embeddings)    β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
         β”‚                       β”‚                       β”‚
         β–Ό                       β–Ό                       β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   Firebase      β”‚    β”‚  Document       β”‚    β”‚  Hybrid Store   β”‚
β”‚  (Metadata)     β”‚    β”‚  Processing     β”‚    β”‚  (In-Memory)    β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Data Flow

  1. Upload β†’ Document parsing and text extraction
  2. Processing β†’ Content chunking and embedding generation
  3. Storage β†’ Vector storage in ChromaDB + metadata in Firebase
  4. Query β†’ User question β†’ Vector similarity search
  5. AI Response β†’ Context-aware response via Ollama
  6. TTS β†’ Natural voice synthesis via ElevenLabs

πŸ“ Project Structure

ai-challenge/
β”œβ”€β”€ πŸ“± app/                          # Next.js App Router
β”‚   β”œβ”€β”€ api/                         # API Routes
β”‚   β”‚   β”œβ”€β”€ tts/                     # Text-to-speech endpoints
β”‚   β”‚   β”œβ”€β”€ pinecone/                # Vector database operations
β”‚   β”‚   β”œβ”€β”€ upload-document/         # Document upload handling
β”‚   β”‚   β”œβ”€β”€ system-status/           # Health monitoring
β”‚   β”‚   └── realtime/                # Real-time updates
β”‚   β”œβ”€β”€ dashboard/                   # Main application interface
β”‚   β”‚   β”œβ”€β”€ files/[id]/             # Document viewer and chat
β”‚   β”‚   β”œβ”€β”€ upload/                  # Document upload interface
β”‚   β”‚   └── page.tsx                 # Dashboard home
β”‚   └── globals.css                  # Global styles
β”œβ”€β”€ 🧩 components/                   # React Components
β”‚   β”œβ”€β”€ ui/                          # Shadcn/ui components
β”‚   β”œβ”€β”€ PDFChatInterface.tsx         # Main chat interface
β”‚   β”œβ”€β”€ UniversalDocumentViewer.tsx  # Document display
β”‚   β”œβ”€β”€ EnhancedTTSControls.tsx      # Voice controls
β”‚   └── PineconeDocumentPage.tsx     # Document management
β”œβ”€β”€ πŸ“š lib/                          # Core Libraries
β”‚   β”œβ”€β”€ hybrid-tts-service.ts        # ElevenLabs TTS integration
β”‚   β”œβ”€β”€ elevenlabs-client.ts         # ElevenLabs API wrapper
β”‚   β”œβ”€β”€ hybrid-chat-service.ts       # AI conversation logic
β”‚   β”œβ”€β”€ hybrid-document-store.ts     # Document storage layer
β”‚   β”œβ”€β”€ pinecone-client.ts           # Vector database client
β”‚   β”œβ”€β”€ ollama-client.ts             # Local AI integration
β”‚   └── pinecone-embeddings.ts       # Embedding management
β”œβ”€β”€ 🎨 styles/                       # Tailwind CSS
β”œβ”€β”€ πŸ“„ public/                       # Static assets
└── βš™οΈ Configuration files            # Next.js, TypeScript, etc.

πŸ”§ API Reference

Document Management

Upload Document

POST /api/upload-document
Content-Type: multipart/form-data

Body: file (any supported format)
Response: { id, fileName, status, processingTime }

Get Document with Content

GET /api/files/{userId}_{timestamp}_{hash}?includeContent=true
Response: { document, content, metadata }

Vector Search & Chat

Generate Embeddings

POST /api/pinecone/embed
Content-Type: application/json

{
  "text": "document content",
  "documentId": "doc_id",
  "fileName": "document.pdf"
}

Chat with Document

POST /api/pinecone/chat
Content-Type: application/json

{
  "question": "What is this document about?",
  "documentId": "doc_id",
  "fileName": "document.pdf",
  "history": [...]
}

Text-to-Speech

Generate Speech

POST /api/tts
Content-Type: application/json

{
  "text": "Hello, this is a test",
  "voice_id": "EXAVITQu4vr4xnSDxMaL",
  "stability": 0.75,
  "similarity_boost": 0.85,
  "style": 0.2
}

Get TTS Status

GET /api/tts
Response: { 
  provider: "elevenlabs",
  available: true,
  conversationalVoices: {...}
}

System Monitoring

System Health Check

GET /api/system-status
Response: {
  ollama: { available, models },
  chromadb: { available, collections },
  elevenlabs: { available, voices, usage }
}

⚑ Performance & Optimization

System Requirements

  • RAM: 8GB+ recommended (16GB for optimal performance)
  • Storage: SSD recommended (faster vector operations)
  • CPU: Multi-core processor (AI inference benefits from more cores)
  • Network: Stable internet for ElevenLabs TTS (optional for local-only mode)

Performance Optimization Tips

AI Model Performance

# Use tinyllama for fastest responses
ollama pull tinyllama:latest

# Monitor model memory usage
ollama ps

# Optimize model parameters
curl http://localhost:11434/api/chat -X POST -d '{
  "model": "tinyllama:latest",
  "options": {
    "temperature": 0.7,
    "top_p": 0.9,
    "num_predict": 256
  }
}'

Document Processing

  • Chunk Size: 1000 characters optimal for balance of context and speed
  • Overlap: 200 characters for better context preservation
  • Batch Processing: Process multiple documents in parallel
  • Memory Management: Clear unused embeddings periodically

TTS Optimization

  • Request Queuing: Automatic handling of concurrent request limits
  • Voice Caching: Reuse voice settings for consistent performance
  • Streaming: Use streaming mode for longer texts
  • Rate Limiting: Built-in 100ms delay between requests

πŸ›‘οΈ Security & Privacy

Privacy-First Architecture

  • βœ… Local AI Processing - Documents analyzed on your machine
  • βœ… Secure Authentication - Clerk-based user management
  • βœ… Encrypted Storage - Firebase security rules and encryption
  • βœ… API Security - Rate limiting and input validation
  • βœ… Data Isolation - User-specific document access controls

Security Features

  • Environment Variables - Secure credential management
  • CORS Protection - Restricted cross-origin requests
  • Input Sanitization - All user inputs validated and cleaned
  • Error Handling - No sensitive information in error messages
  • Audit Logging - Track document access and processing

Compliance Considerations

  • GDPR Ready - User data deletion and export capabilities
  • SOC 2 Compatible - Security controls and monitoring
  • Enterprise Security - Role-based access control foundation

πŸ› Troubleshooting Guide

Common Issues & Solutions

❌ "Ollama service unavailable"

# Check Ollama status
ollama list

# Start Ollama if not running
ollama serve

# Verify model installation
ollama pull tinyllama:latest
ollama run tinyllama:latest

# Test API directly
curl http://localhost:11434/api/version

❌ "ChromaDB connection failed"

# Check ChromaDB status
curl http://localhost:8000/api/v1/heartbeat

# Start ChromaDB
chroma run --host localhost --port 8000

# Alternative with Docker
docker run -p 8000:8000 chromadb/chroma

# Check for port conflicts
lsof -i :8000

❌ "ElevenLabs rate limit exceeded"

# Check TTS system status
curl http://localhost:3001/api/tts

# System automatically handles:
# - Request queuing (max 2 concurrent)
# - Exponential backoff retry (1s, 2s, 5s)
# - User-friendly error messages

# Verify API key
echo $ELEVENLABS_API_KEY

❌ "Document processing fails"

  • βœ… File Format: Ensure supported format (PDF, DOCX, TXT, etc.)
  • βœ… File Size: Keep under 25MB for optimal performance
  • βœ… Encoding: Use UTF-8 encoding for text files
  • βœ… Permissions: Verify file read permissions
  • βœ… Service Health: Check /api/system-status

Debug Commands

# Complete system health check
curl http://localhost:3001/api/system-status | jq

# Test individual components
curl http://localhost:11434/api/version          # Ollama
curl http://localhost:8000/api/v1/heartbeat     # ChromaDB
curl http://localhost:3001/api/tts              # TTS System

# View application logs
npm run dev  # Check console output

# Clear application cache
rm -rf .next
npm run dev

πŸš€ Deployment Guide

Production Deployment

Environment Setup

# Build for production
npm run build

# Start production server
npm start

# Or deploy to Vercel
npx vercel --prod

Service Configuration

# Ollama production setup
ollama serve --host 0.0.0.0 --port 11434

# ChromaDB production setup
chroma run --host 0.0.0.0 --port 8000 --log-level INFO

# Environment variables for production
NODE_ENV=production
OLLAMA_BASE_URL=http://your-ollama-server:11434

Docker Deployment

# Dockerfile example
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
RUN npm run build
EXPOSE 3000
CMD ["npm", "start"]

Scaling Considerations

  • Load Balancing: Multiple Next.js instances behind reverse proxy
  • Database Scaling: ChromaDB cluster setup for high availability
  • Caching: Redis for session and response caching
  • CDN: Static asset optimization and global distribution

🀝 Contributing Guidelines

Development Workflow

  1. Fork & Clone: Create your own copy of the repository
  2. Branch: Create feature branch: git checkout -b feature/amazing-feature
  3. Develop: Make changes following code style guidelines
  4. Test: Ensure all functionality works as expected
  5. Lint: Run npm run lint and fix any issues
  6. Commit: Use conventional commits: git commit -m 'feat: add amazing feature'
  7. Pull Request: Submit PR with detailed description

Code Standards

  • TypeScript: Strict mode enabled, full type coverage
  • ESLint: Next.js configuration with custom rules
  • Prettier: Consistent code formatting
  • Conventional Commits: Standardized commit messages
  • Component Structure: Functional components with hooks
  • API Design: RESTful endpoints with proper error handling

Testing Guidelines

  • Unit Tests: Test utility functions and API endpoints
  • Integration Tests: Test document processing workflows
  • UI Tests: Verify component functionality across devices
  • Performance Tests: Monitor AI response times and memory usage

πŸ“Š Supported Technologies

Document Formats

Format Extension Processing OCR Support
PDF .pdf βœ… Text + Images βœ… Scanned PDFs
Word .docx, .doc βœ… Full formatting ❌ N/A
Excel .xlsx, .xls βœ… All sheets ❌ N/A
Text .txt, .md βœ… UTF-8 ❌ N/A
Web .html, .xml βœ… Clean extraction ❌ N/A
Data .json, .csv βœ… Structured parsing ❌ N/A
Images .jpg, .png, .tiff βœ… OCR processing βœ… Text extraction

AI Models Supported

Model Size Speed Quality Memory Use Case
tinyllama:latest 637MB ⚑ Fast Good 2GB Recommended - Production
gemma2:2b 1.6GB Fast High 4GB Balanced performance
qwen2.5:3b 1.9GB Medium High 6GB Advanced analysis
llama3.2 4.7GB Medium Highest 8GB Complex reasoning

Voice Options (ElevenLabs)

Voice ID Gender Style Best For
Rachel EXAVITQu4vr4xnSDxMaL Female Conversational Chat responses
Adam pNInz6obpgDQGcFmaJgB Male Professional Document reading
Antoni ErXwobaYiN019PkySvjV Male Clear Technical content
Sam yoZ06aMxZJJ28mfd3POQ Male Casual Friendly interactions
Bella EXAVITQu4vr4xnSDxMaL Female Expressive Dynamic content

πŸ“ˆ Roadmap & Future Features

Recently Completed βœ…

  • ElevenLabs premium TTS integration
  • Advanced rate limiting and error handling
  • Conversational voice optimization
  • Hybrid document storage system
  • Real-time processing status updates
  • Enhanced UI with glass morphism design
  • Smart request queuing for API limits

In Development 🚧

  • Multi-Document Chat - Cross-document conversations and analysis
  • Advanced OCR - Table extraction and handwriting recognition
  • Voice Input - Speech-to-text for hands-free interaction
  • Mobile App - React Native companion application
  • API Gateway - RESTful API for third-party integrations

Planned Features πŸ“‹

  • Collaborative Workspaces - Team document sharing and chat
  • Document Comparison - Side-by-side analysis and diff views
  • Advanced Analytics - Usage insights and optimization suggestions
  • Multi-language Support - UI localization and model support
  • Enterprise SSO - SAML and OIDC integration
  • Workflow Automation - Zapier and webhook integrations

πŸ“„ License & Legal

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

Third-Party Licenses

  • Ollama: Apache License 2.0
  • ChromaDB: Apache License 2.0
  • ElevenLabs: Commercial API service
  • Next.js: MIT License
  • All npm dependencies: Various open-source licenses

πŸ™ Acknowledgments & Credits

Core Technologies

  • Ollama - Local AI model inference engine
  • ChromaDB - Vector database for semantic search
  • ElevenLabs - Premium text-to-speech synthesis
  • Next.js - React framework and deployment platform
  • Pinecone - Managed vector database service

Development Tools


πŸ’¬ Support & Community

Getting Help

  • πŸ“š Documentation: This README and inline code comments
  • πŸ› Bug Reports: GitHub Issues
  • πŸ’‘ Feature Requests: GitHub Discussions
  • πŸ”§ Technical Support: Check troubleshooting section first

Contributing

  • 🀝 Pull Requests: Welcome! Please follow contribution guidelines
  • πŸ“– Documentation: Help improve docs and examples
  • πŸ§ͺ Testing: Report bugs and help with quality assurance
  • 🌍 Translation: Assist with internationalization efforts

🌟 Built for Privacy, Powered by AI, Enhanced with Voice 🌟

Privacy First Local Processing Premium Voice


Quick Links

πŸš€ Get Started β€’ πŸ“– Documentation β€’ πŸ› Report Bug β€’ πŸ’‘ Request Feature

Made with ❀️ for document intelligence and natural conversation

⭐ Star this repo if you find it useful! ⭐

Releases

No releases published

Packages

No packages published

Languages