Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 

Repository files navigation

Pathfolio — AI-Powered Digital Identity System

Built for MemoryVerse AI '26

"I never have to search through folders again."

Pathfolio turns a student's scattered certificates, resumes, project reports, internship letters, and portfolio links into a single, intelligent digital identity — automatically organized, semantically connected, and instantly searchable in plain English.


What it does

Module What it solves
1. AI Data Ingestion Upload any certificate, resume, report, letter, or portfolio link. Original file/format is preserved via Cloudinary.
2. Intelligent Categorization Every upload is auto-classified into Projects / Skills / Certifications / Internships / Achievements / Academics — no manual sorting.
3. Relationship Engine A hybrid embeddings + LLM pipeline finds and labels connections: Certification → Skill → Project → Internship → Career Path.
4. Digital Journey Timeline Every document is placed on a year-by-year visual timeline of your growth.
5. Smart Retrieval Ask "show my AI projects" or "show my latest resume" in plain English and get the original files back instantly.

Tech Stack

  • Frontend: React (Vite) + Tailwind CSS v4, React Router, Recharts/Lucide icons
  • Backend: Python FastAPI
  • LLM: Groq API (Llama 3.3 70B) — free tier, used for categorization, relationship labeling, and natural-language query parsing
  • Embeddings: sentence-transformers (all-MiniLM-L6-v2) — runs locally, free, no rate limits
  • Vector DB: ChromaDB (embedded, persisted locally)
  • File storage: Cloudinary (free tier) — preserves original file format, gives instant shareable URLs
  • Metadata DB: SQLite (via SQLAlchemy)
  • OCR: Tesseract (pytesseract) for scanned certificates/images; pypdf + pdf2image for PDFs

Why this stack: everything except the Groq LLM call runs entirely in your own backend (embeddings, vector search, OCR) — so the only external dependency that needs a real API key is Groq, which is free.


Architecture

See docs/architecture.md for the full diagram and data-flow explanation.

Upload (file or link)
   │
   ▼
Text Extraction (pypdf / pytesseract OCR / python-docx)
   │
   ▼
Groq LLM ── classify category, extract title/summary/entities/year
   │
   ▼
Cloudinary ── stores original file, returns permanent URL
   │
   ▼
SQLite ── persists Document row (category, entities, year, url)
   │
   ▼
MiniLM Embedding ── vectorize (title+summary+category+entities)
   │
   ▼
ChromaDB ── stores vector for semantic search
   │
   ▼
Relationship Engine ── nearest-neighbour candidates (Chroma) → Groq confirms + labels edge
   │
   ▼
Timeline Service ── places document on the year timeline

Retrieval flow:

Natural language query → Groq parses intent (category/keywords/sort)
   → MiniLM embeds query → ChromaDB similarity search
   → SQLite fetch full records → return original file URLs

Project Structure

pathfolio/
├── backend/
│   ├── app/
│   │   ├── main.py                  FastAPI app entrypoint
│   │   ├── config.py                Settings from .env
│   │   ├── database.py              SQLAlchemy engine/session
│   │   ├── schemas.py               Pydantic response models
│   │   ├── models/models.py         Document, Relationship, TimelineEntry
│   │   ├── services/
│   │   │   ├── cloudinary_service.py
│   │   │   ├── extraction_service.py    PDF/OCR/DOCX text extraction
│   │   │   ├── groq_service.py          LLM categorization/relationships/query parsing
│   │   │   ├── embedding_service.py     MiniLM + ChromaDB
│   │   │   ├── relationship_engine.py   Hybrid embedding+LLM relationship builder
│   │   │   └── timeline_service.py
│   │   └── routers/
│   │       ├── upload.py            Module 1 + 2 (ingestion pipeline)
│   │       ├── documents.py         CRUD + category summary
│   │       ├── search.py            Module 5 (smart retrieval)
│   │       ├── timeline.py          Module 4
│   │       └── relationships.py     Module 3 (knowledge graph)
│   ├── requirements.txt
│   ├── .env.example
│   ├── Dockerfile
│   └── run.sh
├── frontend/
│   ├── src/
│   │   ├── api/client.js            Axios API client
│   │   ├── components/              Sidebar, DocumentCard
│   │   ├── pages/                   Dashboard, Upload, Timeline, Graph, Search
│   │   ├── App.jsx, main.jsx, index.css
│   ├── .env.example
│   └── package.json
└── docs/
    ├── architecture.md
    └── thought-process.md

Setup & Run Locally

1. Backend

cd backend
cp .env.example .env
# Edit .env and paste in your FREE API keys:
#   GROQ_API_KEY        -> https://console.groq.com/keys
#   CLOUDINARY_CLOUD_NAME / API_KEY / API_SECRET -> https://cloudinary.com/users/register/free

./run.sh
# or manually:
python3 -m venv venv && source venv/bin/activate
pip install -r requirements.txt
uvicorn app.main:app --reload

Backend runs at http://localhost:8000 (interactive API docs at /docs).

System dependency: Tesseract OCR must be installed for scanned-image certificates to be readable:

# Ubuntu/Debian
sudo apt-get install tesseract-ocr poppler-utils
# Mac
brew install tesseract poppler

2. Frontend

cd frontend
cp .env.example .env   # points to http://localhost:8000 by default
npm install
npm run dev

Frontend runs at http://localhost:5173.


Deployment

  • Backend: Deploy via the included Dockerfile to Render / Railway / Fly.io. Set the three env vars (GROQ_API_KEY, CLOUDINARY_*) in the platform's environment variable settings — never commit .env.
  • Frontend: Deploy to Vercel/Netlify. Set VITE_API_BASE_URL to your deployed backend URL.
  • ChromaDB and SQLite persist to disk — on ephemeral hosts (like Render's free tier) attach a persistent disk/volume, or swap SQLite for a managed Postgres and Chroma for a hosted vector DB if you need durability across restarts.

Free API Keys Needed

Service Free tier Where
Groq Yes, generous free tier https://console.groq.com/keys
Cloudinary Yes, free tier (25 credits/mo) https://cloudinary.com/users/register/free

Everything else (embeddings, vector DB, OCR) runs locally at no cost.


Demo Script (for judges)

  1. Upload a certificate (PDF/image) — watch it get auto-classified into Certifications with extracted skills, in seconds.
  2. Upload a project report and an internship letter.
  3. Open Knowledge Graph — see the certificate's skill connected to the project, and the project connected to the internship.
  4. Open Timeline — see all three placed on the correct year.
  5. Go to Smart Search, type "show my AI projects" — the original file opens instantly, no folder browsing.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages