Ocal

March 11, 2026 · View on GitHub

An open platform for searching and browsing work diaries of Israeli public officials, sourced from odata.org.il.

Live: ocal.org.il


יומן לעם

פלטפורמה ציבורית לחיפוש ועיון ביומני עבודה של נבחרי ציבור וגורמים ממשלתיים בישראל. הנתונים מגיעים ממאגר הנתונים הממשלתי הפתוח odata.org.il (CKAN), ומוצגים בממשק ידידותי הכולל חיפוש חופשי, סינון מתקדם ולוח שנה.

יכולות עיקריות

  • חיפוש חופשי — חיפוש טקסט מלא (FTS) על פני כל האירועים, עם תמיכה בחיפוש בוליאני (AND / OR)
  • סינון מתקדם — לפי תאריך, מקור, ישויות (אנשים/ארגונים), מיקום ומשתתפים
  • לוח שנה — תצוגות חודש, שבוע ויום עם שכבות לכל יומן
  • הצלבת יומנים — זיהוי פגישות שמופיעות ביומנים של שני הצדדים (אומת / לא אומת)
  • זיהוי ישויות — חילוץ אוטומטי של אנשים וארגונים מתיאורי אירועים
  • איתור אירועים דומים — קיבוץ אירועים זהים מיומנים שונים באותו יום
  • סנכרון אוטומטי — ייבוא תקופתי של נתונים חדשים מ-CKAN
  • ממשק ניהול — ניהול מקורות, ישויות, סנכרון וייצוא נתונים

Tech Stack

LayerTechnologies
FrontendReact 19, TypeScript, Tailwind CSS, Zustand, TanStack Query, React Router, Vite
BackendNode.js, Express, TypeScript, Knex.js, PostgreSQL, BullMQ, Redis
AIOpenAI / DeepSeek (optional — for smart field mapping and entity extraction)
DeploymentRender (web + worker + managed PostgreSQL + Redis)

Project Structure

ocal/
  client/           # React frontend (Vite)
    src/
      api/           # API client functions
      components/    # UI components (search, calendar, admin)
      hooks/         # React Query hooks
      pages/         # Route pages
      stores/        # Zustand state stores
  server/           # Express backend
    src/
      config/        # Environment, database, auth, Redis config
      db/            # Knex migrations
      jobs/          # BullMQ worker for background sync
      middleware/    # Auth, rate limiting, validation
      models/        # Data models and query builders
      routes/        # Public & admin API routes
      services/      # Core logic (sync, pipeline, entity extraction, matching)
      utils/         # Logger, pagination helpers
  shared/           # Shared TypeScript types

Getting Started

Prerequisites

  • Node.js >= 20
  • Docker (for PostgreSQL and Redis)

Setup

# Clone
git clone https://github.com/zomer-g/ocal.git
cd ocal

# Start PostgreSQL and Redis
docker compose up -d

# Install dependencies
npm install

# Configure environment
cp .env.example .env
# Edit .env with your settings (see .env.example for documentation)

# Run database migrations
npm run migrate

# Start development servers (API + frontend)
npm run dev

The frontend will be available at http://localhost:5173 and the API at http://localhost:3001.

Environment Variables

See .env.example for all available configuration options. Key variables:

VariableRequiredDescription
DATABASE_URLYesPostgreSQL connection string
REDIS_URLYesRedis connection string (for BullMQ)
JWT_SECRETYesSecret for JWT signing (min 16 chars)
GOOGLE_CLIENT_IDFor adminGoogle OAuth client ID
GOOGLE_CLIENT_SECRETFor adminGoogle OAuth client secret
ADMIN_EMAILSFor adminComma-separated list of admin email addresses
OPENAI_API_KEYOptionalFor AI-powered field mapping
DEEPSEEK_API_KEYOptionalAlternative LLM for field mapping

License

MIT