Architecture

構成

場所 責務
.devcontainer/ 再現可能な開発・検査環境
.github/ Issue、Pull Request、GitHub Actions
agent/ 専用エージェント(Goose)のRecipe等の構成(0002
config/ 公開可能なサンプル設定とprofile雛形
docs/ 製品仕様、設計、タスク、判断記録
packages/ Python CLIとライブラリ
scripts/ ローカルとCIで共有する操作
templates/ Paper-Wiki、News-Wiki、新聞風PDFの雛形
web/ Quartz/Fumadocs等のWeb表示層
workers/ PDF/OCR/組版workerのDocker定義

設計原則

  • 操作はMakefileへ集約し、人間、AI、CIが同じコマンドを使う。
  • 依存関係は利用する段階で追加し、バージョン固定方針を記録する。
  • 公開APIや保存形式の変更は、実装前にdocs/decisions/へ判断を残す。
  • 正本はMarkdown、YAML frontmatter、取得ログ、原資料へのリンクにする。
  • PDF原本、APIキー、Zotero実データ、個人資料、大学資料をリポジトリへ入れない。
  • 外部サービスを再実装せず、API client、変換worker、表示層を薄く接続する。
  • 単一ホストでも、VPS/Mac mini/RTX workerへ分散しても動く構成にする。
  • サイトはWCAG 2.2 レベルAA相当を満たし、デザイン参考にデジタル庁デザインシステム (DADS)を用いる(0003)。

技術スタック

領域 採用候補
Python依存管理 uv
CLI Typer
型と設定検証 Pydantic
HTTP/API httpx
RSS/Atom feedparser
Zotero pyzotero
Markdown frontmatter python-frontmatter / PyYAML
状態DB・行動ログ受け皿 SQLite、DuckDB、sqlite-utils(0009
PDF→Markdown Docling、Marker、MinerU、ndlocr-lite worker
Web Wiki Fumadocs(採用、0001
Dashboard Next.js、shadcn/ui、Motion、Lenis
専用エージェント基盤 Goose(採用、0002
LLM-Wiki生成 llm-wiki-compiler廃止0004追記。既存ページはR2 archive/へ退避)
引用ネットワーク展開 OpenAlex API直叩き+Zotero relations(自前実装、scripts/citation-network.py。Research Rabbit等の第三者SaaSに研究テーマを渡さない)
仮説統計検証 Quarto + R(採用、0007
自律リサーチ/RAG DeepTutor(採用、0008
知識の構造化 Hyper-Extract → Obsidianエクスポート(採用、0008
原本アーカイブ Cloudflare R2(採用、0008
日本語OCR NDLOCR-Lite(採用、0008
DBビュー Baserow、NocoDB
監視・行動ログダッシュボード Quarto dashboard静的方式(採用)、Grafanaは保留(0009
PDF組版 Vivliostyle、Paged.js、Quarto、Typst
常駐・重い処理 Docker Compose profiles

実行profile

compose.ymlはprofileで役割を分ける。

profile 役割
local 1台でCLI、Web、PDF worker、DBを動かす
vps Dashboard、metadata DB、RSS/API取得、軽いjob queue、専用エージェント(0002)、DeepTutor常駐・収集・構造化(0008
mac-mini Zotero、Obsidian Sync、原本の作業コピー(正典はR2、0008)、軽いPDF変換、embeddings推論
rtx-worker OCR、Marker/MinerU/Docling、画像処理、ローカルLLM

Makefileは次の形を目標にする。

make install
make doctor
make up PROFILE=local
make fetch PROFILE=vps
make convert PROFILE=mac-mini
make ocr PROFILE=rtx-worker
make newspaper PROFILE=vps