Skip to content

Releases: guimatheus92/social-knowledge-base

v0.2.0

Choose a tag to compare

@guimatheus92 guimatheus92 released this 29 Jun 03:58
e3a2d88

Second release — a big round of library, notes, and profile features on top of v0.1.0, plus a nasty navigation bug fixed.

Library & notes

  • Select all matching items in a profile's library (respects the active filter), with bulk Delete and Free up space (delete the video, keep the note).
  • Note-only items: a freed video stays as a readable note — the curated note + transcript survive. The tile is dimmed with a "media freed" marker, and a Re-download video button restores it (ignores the archive).
  • Live progress on note generation (elapsed timer) instead of a static "1–2 min", plus a guard so the same note can't be generated twice at once.
  • Honest counts: freed videos show under a note badge instead of the video count, and an empty profile no longer reads as "all noted".

Profiles

  • Per-profile categories (presets + custom) and a category filter to narrow the profile list.
  • Delete media, profiles, and accounts — individual + bulk, with opt-in file deletion.
  • Copy the download path, clickable profile links, library/disk polish.

Fixes

  • Navigation could hang from a network view: every account card opened a persistent SSE connection, so six idle cards exhausted the browser's per-host connection limit and blocked opening a library. Streams now open only while a job is active.
  • Freed notes stay readable in the UI; re-download restores the original file.

Quality

  • Expanded test suite: component tests (Testing Library), integration against real SQLite (no mocks), and e2e; strict lint, typecheck, build, Docker image, and Python ruff all green in CI.

🤖 Generated with Claude Code

v0.1.0 — first release

Choose a tag to compare

@guimatheus92 guimatheus92 released this 27 Jun 01:17
828c4ef

First public release. Social Knowledge Base turns a creator's short videos into a searchable, markdown knowledge base — an LLM watches (frames + OCR) and listens (transcription) to each video and writes notes you can query. The app is bilingual (PT/EN).

What's in it

  • Download engine — gallery-dl (+ yt-dlp + ffmpeg) pulls every Reel, Story, and Highlight from a public Instagram profile, authenticated by browser cookies. Resumable via a download archive; ffmpeg is injected into PATH so audio is never dropped.
  • Bilingual Next.js 16 app — add multiple accounts, choose media types, hit Play, and watch live progress over SSE (counts, size, elapsed). Browse the collection through a global gallery and a per-account library with search, filters, and sort. Download a single video by link.
  • Reading pipeline — bulk transcription with faster-whisper (GPU/CUDA with automatic CPU fallback) writing .vtt/.txt/.json sidecars, plus the mcp-video-analyzer MCP for frames + OCR + timeline. Notes are generated one video at a time via Claude Code (any capable LLM; Claude Opus recommended), in a configurable language (default English).
  • Search (RAG) — the library is searchable from the transcription alone (ChromaDB), with a per-profile theme overview and citations back to the notes.
  • Per-account SQLite manifests (node:sqlite) as the source of truth — resumable, with no reprocessing of already-handled videos.
  • Runs anywhere via Docker — a single image bundling Node 24 + Python + gallery-dl + yt-dlp + ffmpeg; docker compose up and open http://localhost:3000.

Engineering foundation

  • CI (GitHub Actions), all required on main: lint, typecheck, unit tests (Vitest, 40 tests), production build, Playwright smoke e2e, a Docker image build, and a Python ruff check.
  • Strict lint (--max-warnings 0) with justified, documented exceptions.
  • Cross-platform stdout parsing (Windows \ and Linux /) so the engine behaves identically on the host and in the container.
  • Branch protection on main: the required checks must pass before merging; no force-pushes or branch deletion.
  • Governance: MIT license, Code of Conduct, Contributing guide, and a Security policy (cookies are treated as a credential and are never versioned).

See the README for setup and usage.