OmniJournal

August 13, 2026 · View on GitHub

Open-source, AI-powered journaling, note-taking, and personal knowledge management — privacy-first and offline-capable.

License GitHub stars Last commit Next.js React

Live site: https://omnijournal.oriz.in · GHP landing: https://chirag127.github.io/omnijournal/ · Repo: https://github.com/chirag127/omnijournal

⭐ If this is useful, please star the repo — it helps others find it.

An open-source alternative to Notion / Obsidian / Logseq / Day One with AI built in. Rich block editing, wikilinks and backlinks, a knowledge graph, and bring-your-own-key AI — all offline-first, with your keys staying in your browser.

Architecture & data flow

flowchart TB
  subgraph Client["apps/web — Next.js 15 / React 19 (PWA)"]
    editor["BlockNote editor"]
    graph["@xyflow/react<br/>knowledge graph + backlinks"]
    search["MiniSearch + Fuse.js<br/>full-text + fuzzy"]
    store["Zustand stores"]
    query["TanStack Query"]
    dexie[("Dexie / IndexedDB<br/>offline-first cache")]
    ai["AI panel<br/>(user-provided keys)"]
  end

  fb[("Firebase<br/>Auth SSO + Firestore")]
  neon[("Neon Object Storage<br/>attachments")]
  providers["8+ AI providers<br/>(OpenRouter, … — no proxy)"]

  editor --> store --> dexie
  store <-->|sync| query <--> fb
  editor --> graph
  editor --> search
  editor --> neon
  ai -->|browser → provider, keys never leave| providers
  Client --> vercel["Vercel (hosting)"]

Features

  • Rich block editor — BlockNote with Markdown, tables, and code blocks.
  • Wikilinks + backlinks + knowledge graph — visualised with @xyflow/react.
  • AI assistant — 8+ providers, user-provided keys, no proxy; keys stay in your browser.
  • Offline-first PWA — Firestore + IndexedDB (Dexie) with local caching and sync.
  • Firebase Auth SSO — shared *.oriz.in account.
  • Search — full-text (MiniSearch) + fuzzy (Fuse.js).
  • Theming — Dark / Light / AMOLED via next-themes.

Tech stack

Next.js 15 · React 19 · TypeScript (strict) · Tailwind CSS v4 · BlockNote (core / react / mantine) · Zustand · TanStack Query · Dexie (IndexedDB) · Firebase (Auth + Firestore) · Neon Object Storage · @xyflow/react · MiniSearch + Fuse.js · react-hook-form + Zod · Framer Motion · Recharts · Lucide. Monorepo: pnpm + Turborepo.

Repo structure

apps/web/            # Next.js 15 app
  app/               # routes
  components/ · features/ · hooks/ · stores/ · lib/ · types/
  next.config.ts · playwright.config.ts
packages/
  types/             # shared TypeScript types (@omnijournal/types)
  ui/                # design system (@omnijournal/ui)
  config/            # shared configs
docs/                # PRD, ADRs, architecture
turbo.json · vercel.json · pnpm-workspace.yaml

Quick start

git clone https://github.com/chirag127/omnijournal
cd omnijournal
pnpm install
cp apps/web/.env.example apps/web/.env.local   # add your Firebase config
pnpm dev                                        # turbo dev → http://localhost:3000

Other tasks: pnpm build · pnpm test · pnpm lint · pnpm type-check (all via Turborepo).

AI setup: Settings → AI, pick a provider and paste your key. Free start: OpenRouter with meta-llama/llama-3.3-70b-instruct:free. Keys stay in your browser only.

Configuration

See apps/web/.env.example for names. Firebase project is on the Spark plan (no card required).

VariablePurpose
NEXT_PUBLIC_FIREBASE_API_KEYFirebase client API key (client-only).
NEXT_PUBLIC_FIREBASE_AUTH_DOMAINAuth domain for shared *.oriz.in SSO.
NEXT_PUBLIC_FIREBASE_PROJECT_IDFirebase project id.
NEXT_PUBLIC_FIREBASE_STORAGE_BUCKETFirebase storage bucket.
NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_IDFCM sender id.
NEXT_PUBLIC_FIREBASE_APP_IDFirebase app id.
NEON_STORAGE_ENDPOINTNeon Object Storage endpoint for attachments.
NEON_STORAGE_ACCESS_KEYNeon storage access key (server-side).
NEON_STORAGE_SECRET_KEYNeon storage secret key (server-side).
NEON_STORAGE_BUCKETNeon storage bucket name.
NEXT_PUBLIC_APP_URLApp base URL.

Security note

No secrets in repo. AI provider keys are user-provided and stay in the browser — there is no proxy. NEXT_PUBLIC_* values are client-only; NEON_STORAGE_* secret keys are server-side only and never exposed to the client. See SECURITY.md.

Part of the oriz family

One of ~80 sites and tools in the oriz family by Chirag Singhal. Note: OmniJournal is deployed on Vercel, not Cloudflare (see vercel.json), on Firebase's free Spark plan. Siblings: oriz-home (family hub) · oriz-lore (knowledge summaries).

Contributing

See CONTRIBUTING.md and ROADMAP.md. Conventional commits are the changelog.

Status

WIP — v0.1.0, active development.

License

MIT © Chirag Singhal — chirag@oriz.in · see LICENSE.