|
π Live β ollama-explorer.vercel.app π¦ Source β github.com/serkan-uslu/ollama-explorer |
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
- π 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
| 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) |
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
git clone https://github.com/serkan-uslu/ollama-explorer.git
cd ollama-explorer
npm install
npm run devOpen http://localhost:3000.
| 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 |
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.
All pages use force-static export. Model detail pages are pre-rendered via generateStaticParams at build time β no runtime server needed after deploy.
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.
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.
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.
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
- 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
- π Documentation
- π¬ Discussions
- π Bug Reports
- π‘ Feature Requests
If you find this project useful, please consider giving it a star! β
MIT Β© Serkan Uslu
