Skip to content

Repository files navigation

OpenOdia logo

OpenOdia Hub

TanStack Start React 19 Tailwind CSS 4 Cloudflare Workers Bun MIT License

Open source for the Odia language — a growing constellation of tools, libraries,
and resources making Odia a first-class citizen in modern AI and software.

openodia.com


What is OpenOdia?

OpenOdia is the hub for Odia language open-source. Built and maintained by Soumendra Kumar Sahoo, it spans three pillars:

This repository is the web frontend that brings everything together.


What belongs here

Everything open source in the Odia language. No AI gatekeeping. If it's Odia, open source, and useful — it belongs.

Category Examples
🎯 Language tools Transliterators, spell checkers, grammar tools, Unicode converters, OCR
🖋 Fonts & typography Open-source Odia fonts, IMEs, keyboard layouts
📚 Datasets Parallel corpora, monolingual texts, speech data, dictionaries
🧠 Models (open weight) STT, TTS, embedding, LLM fine-tunes for Odia
🐍 Libraries Python/JS/Rust packages for Odia text processing, dates, numerals
🎮 Applications Games, apps, utilities built for or in Odia
📖 Educational Language learning tools, interactive tutorials, grammar references
🔧 Infrastructure Odia localization tools, CI/CD for Odia projects, evaluation benchmarks

Tech Stack

Layer Technology
Framework TanStack Start
Routing TanStack Router
Data TanStack Query
UI React 19, Tailwind CSS 4, Radix UI, Framer Motion
Icons Lucide React
Deployment Cloudflare Workers
Package mgr Bun

Getting started

Prerequisites

  • Bun
  • Node.js 22+

Install

git clone https://github.com/soumendrak/openodia-hub.git
cd openodia-hub
bun install
bun run dev

The dev server starts at http://localhost:9090.

Available scripts

Command Purpose
bun run dev Start Vite dev server
bun run build Production build
bun run build:dev Development-mode build
bun run preview Preview production build
bun run lint Run ESLint
bun run format Format with Prettier
bun run test Run Vitest tests

How it works

Card-Browser pages (/tools, /models, /datasets)

These three pages share the same architecture — fetch data from an API, render filterable/searchable card grids with "Load more" pagination.

flowchart TD
    A[Page Load] --> B[TanStack Query fetches /api/*]
    B --> C{Loading?}
    C -->|Yes| D[Show skeleton cards]
    C -->|No| E[Render Hero + Search + Chips]
    E --> F[User types in search]
    E --> G[User clicks filter chip]
    F --> H[filtered = useMemo over all items]
    G --> H
    H --> I[Render card grid with framer-motion animations]
    I --> J{More items?}
    J -->|Yes| K[Show Load More button]
    J -->|No| L[Done]
    K --> M[Bump shownCount by 30]
    M --> I

    style A stroke:#00d4ff
    style B stroke:#00d4ff
    style E stroke:#ff2d95
    style I stroke:#f59e0b
Loading
Page Data source Filter axes
/tools /api/awesome + /api/repos Type (All/Tools/Repos) + Category
/models /api/models (Hugging Face filter=or) Task type chips
/datasets /api/datasets (Hugging Face language:or) Task type chips

Content List pages (/tutorials, /events)

Both pages aggregate content from multiple sources with search and filtering, but differ in layout. Events adds a sticky timeline sidebar with scrollspy for year/month navigation.

flowchart TD
    A[Page Load] --> B{Tutorials or Events?}
    B -->|Tutorials| C[useQuery: /api/videos]
    B -->|Events| D[Static events + useInfiniteQuery: /api/events]
    C --> E[Group by channel → VideoCards + Playlists]
    D --> F[Merge static + live events, compute status by IST]
    F --> G[Render Upcoming section + Timeline sidebar]
    G --> H[Render Past Events grouped by Year → Month]
    H --> I[ScrollSpy on sidebar updates active section]
    I --> J{Load More?}
    J -->|Yes| K[fetchNextPage, append to list]
    K --> H

    style A stroke:#00d4ff
    style C stroke:#ff2d95
    style D stroke:#ff2d95
    style G stroke:#f59e0b
Loading

Static Content pages (/about)

Static layout page with scroll-triggered Reveal animations: pillars + get involved sections, ContributorGrid + ContributorLeaderboard.

Playground (/playground)

In-browser Python execution via Pyodide WebAssembly. Loads openodia + dependencies, runs user code client-side.

flowchart TD
    A[Page Load] --> B[Inject Pyodide script from CDN]
    B --> C[Init Python runtime ~10MB WASM]
    C --> D[loadPackage: numpy, pygments, micropip]
    D --> E[micropip.install: openodia, rich, faker, deep-translator]
    E --> F[Status: ready]
    F --> G[User writes code or picks sample]
    G --> H[Click Run]
    H --> I[pyodide.runPythonAsync code]
    I --> J[batched stdout → output panel]
    G --> K[Click Format]
    K --> L[black.format_str → update editor]

    style A stroke:#00d4ff
    style C stroke:#ff2d95
    style I stroke:#f59e0b
Loading

Data Sources

Source What Cache
Hugging Face API Odia models & datasets 1 hour
GitHub REST API Repos from 5 Odia orgs 30 min
GitHub Raw Awesome-Odia-AI README 1 hour
PyPI JSON API openodia package info 1 hour
YouTube RSS Video feeds from 4 channels 1 hour
GDG Bevy (SSR scrape) Community events D1-backed, daily sync
Cloudflare KV Contributor data Synced daily via GitHub Action

Deployment

bun run build
npx wrangler deploy

CI/CD via GitHub Actions: lint → test → build → deploy on push to main.


Contributing

See CONTRIBUTING.md for setup, conventions, and where to help.

Quick checklist before opening a PR:

bun run lint
bun run build
bun run test

License

MIT © Soumendra Kumar Sahoo

About

Open source for the Odia language — tools, datasets, and AI resources for ଓଡ଼ିଆ

Topics

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Used by

Contributors

Languages