{"id":50331810,"url":"https://github.com/saviorand/golova-clj","last_synced_at":"2026-05-29T10:02:06.619Z","repository":{"id":359651040,"uuid":"1240651861","full_name":"saviorand/golova-clj","owner":"saviorand","description":null,"archived":false,"fork":false,"pushed_at":"2026-05-22T19:02:06.000Z","size":5649,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-22T22:25:29.435Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/saviorand.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-16T11:55:03.000Z","updated_at":"2026-05-22T18:57:39.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/saviorand/golova-clj","commit_stats":null,"previous_names":["saviorand/golova-clj"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/saviorand/golova-clj","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/saviorand%2Fgolova-clj","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/saviorand%2Fgolova-clj/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/saviorand%2Fgolova-clj/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/saviorand%2Fgolova-clj/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/saviorand","download_url":"https://codeload.github.com/saviorand/golova-clj/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/saviorand%2Fgolova-clj/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33646428,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-29T02:00:06.066Z","response_time":107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-05-29T10:02:03.727Z","updated_at":"2026-05-29T10:02:06.611Z","avatar_url":"https://github.com/saviorand.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Golova\n\nNotion-flavored knowledge-base UI on top of a Datahike backend, running\nentirely in the browser (ClojureScript). No server, no native binary — distributes\nas static files and installs as a PWA on Android.\n\n## Stack\n\n- **ClojureScript** via **Shadow CLJS**\n- **Reagent** for views\n- **Datahike** as the in-memory triple store\n- Hand-rolled fixed-point rule materialiser (Datalog rules over Datahike)\n- LocalStorage for persistence (event-sourced)\n\n## What's where\n\n```\nsrc/golova/\n  app.cljs       — entry point: boot, theme sync, keyboard shortcuts\n  state.cljs     — domain model, rebuild, schema CRUD, persistence\n  ui.cljs        — Reagent views (sidebar, topbar, scratch, predicate, type,\n                   rule, query, entity, modal)\n  storage.cljs   — localStorage backend + snapshot export/import\npublic/\n  index.html\n  style.css     — Notion-flavored light/dark theme\nshadow-cljs.edn\ndeps.edn\npackage.json\n```\n\n## Run\n\n```sh\nnpm install\nnpx shadow-cljs watch app\n# then open http://localhost:8088/index.html\n```\n\nFor a release build:\n```sh\nnpx shadow-cljs release app\n# public/ is now everything you need; serve it statically.\n```\n\n## Concepts\n\n- **Domain** — a self-contained knowledge base (rules + facts) with its own\n  event log and optional cross-domain imports. Switch domains via the sidebar.\n- **Type** — a UI-level declaration: a name plus a list of constructors. Used\n  to drive forms and column types. *Not enforced* by the engine.\n- **Predicate** — a UI-level declaration: name + typed args. Discovered\n  predicates (attributes that exist in the store without a declaration) are\n  also surfaced.\n- **Rule** — a Datalog rule, derived from a domain's program text. Edit via the\n  \"Rules\" view (raw program text) or append via the \"+ Rule\" modal.\n- **Saved query** — a named query body that lives in the sidebar and can be\n  re-run with one click.\n- **Entity** — an atom that appears as an argument anywhere. Click any atom-\n  shaped value to open its entity page.\n\n## Keyboard\n\n- `⌘K` — focus the top query bar\n- `⌘↵` in the Scratch editor — rebuild the program\n- `Esc` — close modal\n\n## Status\n\nThis is a first-cut port. Working: project setup, multi-domain model,\nsidebar tree with types/predicates/rules/queries per domain, predicate table\nview, type browser, rule view, saved-query view, entity page, scratch\n(program editor with rebuild), top query bar, modal forms for create\nflows, light/dark theme, localStorage persistence.\n\nNext steps (not yet wired):\n- Slash menu in scratch (insert facts/rules via `/`)\n- Proof trees on derivation\n- Cross-domain imports UI\n- PWA manifest + service worker\n- CSV / EDN import\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsaviorand%2Fgolova-clj","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsaviorand%2Fgolova-clj","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsaviorand%2Fgolova-clj/lists"}