Skip to content

serkan-uslu/ollama-explorer

Repository files navigation

Ollama Explorer

Olli β€” Ollama Explorer mascot

The fast, filterable directory for every Ollama model

Ollama has 200+ open-source AI models. Finding the right one is painful.

The official library shows a wall of model cards with almost no filtering. You open dozens of tabs, read raw descriptions, and still can't tell if your machine can even run it.

Ollama Explorer fixes this. Browse, filter, and compare 214+ models β€” enriched with RAM requirements, context window size, speed tier, domain, capabilities, and benchmark scores β€” all in one place.

🌐 Live β†’ ollama-explorer.vercel.app πŸ“¦ Source β†’ github.com/serkan-uslu/ollama-explorer

GitHub Stars GitHub Forks Live Demo Next.js TypeScript License: MIT


βš™οΈ Part of a Two-Repo Ecosystem

Ollama Explorer is Part 2 of 2. The structured metadata that powers every filter, badge, and benchmark score is generated automatically every week by the companion data pipeline:

Repo Role
⛏️ Data pipeline Ollama Miner Python pipeline β€” crawls ollama.com/library, enriches 214+ models via LLM, validates every field, pushes models.json via PR
🌐 You are here Ollama Explorer Next.js 16 app β€” consumes public/data/models.json and presents it as a fast, filterable model directory
  ollama.com/library
        β–Ό  (crawled every Monday 03:00 UTC)
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”      PR: models.json      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚     Ollama Miner    β”‚ ────────────────────────▢  β”‚    Ollama Explorer       β”‚
β”‚  crawl β†’ enrich     β”‚   public/data/models.json  β”‚  πŸ” filter Β· compare Β·  β”‚
β”‚  validate β†’ export  β”‚                            β”‚  search (you are here)  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                            β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ”— Want to improve the data or run the pipeline yourself? β†’ Ollama Miner


Features

  • πŸ” Full-text search across model name, description, use-cases and domain
  • πŸŽ› Multi-dimensional filters β€” capability, domain, complexity, RAM, parameter size, language, use-case
  • πŸŒ— Dark / light mode with FOUC-free theme persistence
  • πŸ“‹ One-click copy for ollama run <model> commands
  • πŸ“± Fully responsive β€” mobile bottom-sheet filters, desktop sticky sidebar
  • ⚑ Zero JS on initial load β€” fully statically generated (force-static)
  • πŸ—Ί Sitemap + robots.txt auto-generated via Next.js metadata API
  • πŸ–Ό Dynamic OG images per page via edge ImageResponse
  • πŸ“Š JSON-LD structured data β€” WebSite, SoftwareApplication, BreadcrumbList

Tech Stack

Layer Technology
Framework Next.js 16 (App Router, Server Components)
Language TypeScript 5 β€” strict mode
Styling Tailwind CSS v4 (CSS-native tokens, no config file)
Components Atomic Design β€” atoms β†’ molecules β†’ organisms β†’ templates β†’ pages
Icons Lucide React
Fonts Geist Sans + Geist Mono (next/font)
Linting ESLint (Next.js core-web-vitals + TypeScript rules)
Formatting Prettier
Commit hooks Husky + lint-staged + Commitlint (Conventional Commits)

Project Structure

ollama-explorer/
β”œβ”€β”€ app/                          # Next.js App Router
β”‚   β”œβ”€β”€ layout.tsx                # Root layout, metadata, FOUC-prevention script
β”‚   β”œβ”€β”€ page.tsx                  # Home β€” hero + stats
β”‚   β”œβ”€β”€ models/
β”‚   β”‚   β”œβ”€β”€ page.tsx              # Model browser with filters
β”‚   β”‚   └── [id]/
β”‚   β”‚       β”œβ”€β”€ page.tsx          # Model detail + JSON-LD
β”‚   β”‚       └── opengraph-image.tsx  # Dynamic per-model OG image
β”‚   β”œβ”€β”€ about/page.tsx            # About page
β”‚   β”œβ”€β”€ opengraph-image.tsx       # Global OG image (edge ImageResponse)
β”‚   β”œβ”€β”€ robots.ts                 # /robots.txt
β”‚   └── sitemap.ts                # /sitemap.xml (217 URLs)
β”‚
β”œβ”€β”€ components/
β”‚   β”œβ”€β”€ ui/
β”‚   β”‚   β”œβ”€β”€ atoms/                # Button, Badge, Input, Divider, Spinner, JsonLd
β”‚   β”‚   └── molecules/            # SearchInput, FilterChip, StatCard, CopyCommand
β”‚   β”œβ”€β”€ features/
β”‚   β”‚   β”œβ”€β”€ layout/               # Header, Footer, ThemeToggle
β”‚   β”‚   └── models/               # ModelCard, ModelGrid, ModelFilters, ModelsBrowser
β”‚   └── templates/                # BrowseLayout, DetailLayout
β”‚
β”œβ”€β”€ lib/
β”‚   β”œβ”€β”€ constants.ts              # App-wide constants (sort options, pagination)
β”‚   β”œβ”€β”€ types/                    # model.ts, filter.ts
β”‚   β”œβ”€β”€ data/                     # models.ts, filters.ts β€” data access layer
β”‚   β”œβ”€β”€ hooks/                    # useFilters, useTheme, useDebounce
β”‚   └── utils/                    # cn.ts, format.ts
β”‚
└── public/
    └── models.json               # 214 models scraped from ollama.com/library

Getting Started

git clone https://github.com/serkan-uslu/ollama-explorer.git
cd ollama-explorer
npm install
npm run dev

Open http://localhost:3000.


Available Scripts

Command Description
npm run dev Start development server
npm run build Production build
npm run start Start production server
npm run lint Run ESLint
npm run format Run Prettier across all source files

Architecture Decisions

Atomic Design

Components are organised into atoms β†’ molecules β†’ organisms β†’ templates β†’ pages. Each layer may only import from layers below it. This prevents circular dependencies and makes every component independently testable.

Static Generation First

All pages use force-static export. Model detail pages are pre-rendered via generateStaticParams at build time β€” no runtime server needed after deploy.

CSS Custom Properties as Design Tokens

All colours, radii, shadows and typography are defined as CSS custom properties in globals.css. Tailwind is used for layout utilities only. Swapping themes or redesigning takes one file.

Data Layer Isolation

public/models.json is only accessed through lib/data/models.ts. No component imports JSON directly. This means swapping to an API/database later is a one-file change.


Data

214+ models scraped from ollama.com/library by the Ollama Miner β€” an automated Python pipeline that runs every week and opens a PR with a fresh models.json.

Each model is enriched with:

  • Domain classification (General, Code, Vision, Math, Medical, Language, Embedding)
  • Use-case tagging (14 categories: Chat Assistant, Code Generation, Reasoning, RAG, etc.)
  • RAM requirement buckets + context window size
  • Complexity ratings (Beginner / Intermediate / Advanced)
  • Language support (9 languages)
  • Strengths, limitations, model family, benchmark scores

The structured metadata powering every filter and badge is generated by 6 focused LLM calls per model (via Ollama or Groq + instructor). See Ollama Miner for details.


🀝 Contributing

We welcome contributions! Check out CONTRIBUTING.md to get started.

Looking for help with:

  • 🎨 UI/UX improvements
  • πŸ“Š Model data enrichment (benchmarks, ratings)
  • 🌍 Internationalization (translations)
  • ⚑ Performance optimizations
  • πŸ“ Documentation improvements

Good First Issues


πŸ—Ί Roadmap

  • AI-powered chat interface to help users discover the right model through natural conversation
  • Model rating & review system
  • User favorites & collections
  • Advanced comparison features
  • API for model data access
  • Dark mode schedule (auto-switch)
  • More language support
  • Export comparison results
  • Model recommendations based on use case

πŸ’¬ Support & Community


⭐ Star History

If you find this project useful, please consider giving it a star! ⭐

Star History Chart


πŸ“„ License

MIT Β© Serkan Uslu