[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-92546":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":12,"openIssues":14,"contributorsCount":14,"subscribersCount":14,"size":14,"stars1d":14,"stars7d":14,"stars30d":14,"stars90d":14,"forks30d":14,"starsTrendScore":14,"compositeScore":15,"rankGlobal":10,"rankLanguage":10,"license":16,"archived":17,"fork":17,"defaultBranch":18,"hasWiki":19,"hasPages":19,"topics":20,"createdAt":10,"pushedAt":10,"updatedAt":21,"readmeContent":22,"aiSummary":23,"trendingCount":14,"starSnapshotCount":14,"syncStatus":24,"lastSyncTime":25,"discoverSource":26},92546,"pageden","PageDen\u002Fpageden","PageDen","One source of truth for people and AI a shared Markdown knowledge base your team can edit on the web, sync from Obsidian, and connect to AI agents","https:\u002F\u002Fpageden.app\u002F",null,"TypeScript",53,1,0,40.9,"Other",false,"main",true,[],"2026-07-22 04:02:06","\u003Cp align=\"center\">\n  \u003Cpicture>\n    \u003Csource media=\"(prefers-color-scheme: dark)\" srcset=\"assets\u002Fpageden-logo-dark.png\" width=\"380\">\n    \u003Cimg src=\"assets\u002Fpageden-logo.png\" alt=\"Pageden\" width=\"380\">\n  \u003C\u002Fpicture>\n\u003C\u002Fp>\n\u003Cp align=\"center\">\n  \u003Ci>One source of truth for people and AI.\u003Cbr\u002F>\n  A shared Markdown knowledge base your team can edit, sync from Obsidian, and connect to AI agents.\u003C\u002Fi>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FPageDen\u002Fpageden\u002Factions\u002Fworkflows\u002Fci.yml\">\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002FPageDen\u002Fpageden\u002Factions\u002Fworkflows\u002Fci.yml\u002Fbadge.svg\" alt=\"CI\">\u003C\u002Fa>\n  \u003Ca href=\"http:\u002F\u002Fwww.typescriptlang.org\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F%3C%2F%3E-TypeScript-%230074c1.svg\" alt=\"TypeScript\">\u003C\u002Fa>\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fserver-Fastify%20%2B%20Prisma-000000.svg\" alt=\"Fastify + Prisma\">\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fweb-React%20%2B%20Vite-61dafb.svg\" alt=\"React + Vite\">\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fdb-PostgreSQL-336791.svg\" alt=\"PostgreSQL\">\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fagents-MCP-orange.svg\" alt=\"MCP agents\">\n\u003C\u002Fp>\n\n---\n\nPageden is a shared Markdown vault for teams and AI agents. The server owns the canonical\ncontent, permissions, versions, audit log, search index, attachments, Obsidian sync metadata,\nand MCP agent access.\n\n## What Is Here\n\n```text\napps\u002F\n  server\u002F           Fastify + Prisma + PostgreSQL API\n  web\u002F              Vite + React + TanStack Router\u002FQuery + Tailwind\n  obsidian-plugin\u002F  Obsidian integration and sync\u002Fimport tools\npackages\u002F\n  api-types\u002F        Shared zod schemas + inferred API types\n  mcp\u002F              Stdio MCP bridge for Codex, Claude, and other agent clients\n  tsconfig\u002F         Shared TypeScript base config\n```\n\n## Repository Boundary\n\nThis repository is the public core app. Keep it useful for self-hosted users and avoid\nhosted-service-only deployment, infrastructure, or operations details. If a feature is useful\nto both self-hosted users and the hosted service, it belongs in the core app here and should\nbe controlled through configuration where needed.\n\n## Core Capabilities\n\n- Web document editor with versioning, optimistic concurrency, attachments, search, and\n  permission-aware document access.\n- Public document links and folder manuals for read-only sharing outside the workspace.\n- Obsidian plugin for remote browse\u002Fsearch, document download, background sync, live editing,\n  and vault import.\n- Web vault import with frontmatter preservation, duplicate handling, import reports, and\n  attachment warnings.\n- Workspace-bound AI agent keys and MCP tools for Codex, Claude, Hermes, OpenClaw, and other\n  MCP-compatible clients.\n- Agent-friendly document reads with frontmatter, headings, wikilinks, body extraction, and\n  `aiReadiness` checks.\n\nFor nontechnical agent setup, see [AI_AGENTS.md](AI_AGENTS.md).\n\n## Quick Start\n\nRequires Node 20+, [pnpm](https:\u002F\u002Fpnpm.io) 9, and Docker.\n\n```bash\ncp .env.example .env\npnpm install\npnpm db:generate\ndocker compose up -d postgres\npnpm db:migrate\npnpm db:seed\npnpm dev\n```\n\n- Web app: http:\u002F\u002Flocalhost:3000\n- API: http:\u002F\u002Flocalhost:4000\u002Fapi\n- Health checks: `\u002Fapi\u002Fhealth`, `\u002Fapi\u002Fready`\n\nThere is one root `.env`. The server scripts load it through `dotenv-cli`, so you do not need\nan `apps\u002Fserver\u002F.env`.\n\n## Local Test Database\n\nIntegration, contract, security, and coverage tests truncate every table between tests. Use a\nthrowaway database, never a development database with useful data.\n\n```bash\ncp .env.test.example .env.test\ndocker compose exec -T postgres psql -U pageden -d pageden -c \"CREATE DATABASE pageden_test;\"\npnpm --filter @pageden\u002Fserver exec dotenv -e ..\u002F..\u002F.env.test -- prisma migrate deploy\n```\n\n## Common Commands\n\n```bash\npnpm typecheck\npnpm lint\npnpm build\npnpm test\npnpm test:integration\npnpm --filter @pageden\u002Fserver test:coverage\npnpm test:all\npnpm test:all --e2e\npnpm test:report\n```\n\n`pnpm test:all` starts Postgres with Docker, applies migrations, then runs unit,\nintegration, contract, security, and coverage tests. Use `--no-docker` when you already have a\ntest database running.\n\n## Database And Storage\n\n```bash\npnpm db:migrate:dev --name my_change\npnpm db:migrate\npnpm db:generate\npnpm db:seed\npnpm --filter @pageden\u002Fserver storage:sweep\n```\n\nRun `pnpm db:generate` after changing `apps\u002Fserver\u002Fprisma\u002Fschema.prisma`.\n\n## Deployment\n\nThis public repository is for the open-source app and local\u002Fself-host development.\n\nFor the Docker-based self-host stack, see [Self-host Pageden with Docker](docs\u002Fself-hosting-docker.md).\nThe stack uses PostgreSQL, locally built Pageden server and web images, one-shot migration\u002Fseed jobs,\nand persistent filesystem storage.\n\nFor public document links and folder manuals, see [Public sharing and folder manuals](docs\u002Fpublic-sharing.md).\n\nFor custom deployments, build the app with the commands above and run it with your own\nPostgreSQL database, storage, reverse proxy, and TLS setup.\n\n## Troubleshooting\n\n- `Module '\"@prisma\u002Fclient\"' has no exported member ...`: run `pnpm db:generate`, then restart\n  your editor TypeScript server if needed.\n- `Environment variable not found: DATABASE_URL`: use the provided `pnpm db:*` scripts, or\n  prefix raw Prisma commands from `apps\u002Fserver` with `dotenv -e ..\u002F..\u002F.env --`.\n- Browser E2E failures after UI changes: run `pnpm --filter @pageden\u002Fweb build` first, then\n  rerun the Playwright suite.\n\n## Contributing\n\nKeep changes scoped, keep CI green, and add tests with behavior changes. Use Vitest for\nserver\u002Funit\u002Fintegration coverage and Playwright for browser-only workflows.\n\n## License\n\nPageden is licensed under the [Business Source License 1.1](LICENSE) (BSL 1.1). You can read,\nmodify, and self-host it, including internal production use, but you may not offer it to third\nparties as a competing hosted\u002Fmanaged service. Each released version converts to the\n[Apache License 2.0](https:\u002F\u002Fwww.apache.org\u002Flicenses\u002FLICENSE-2.0) on its Change Date, four\nyears after release. See [LICENSE](LICENSE) for the full terms.\n","Pageden 是一个面向团队与 AI 代理的共享 Markdown 知识库系统，提供统一可信源（single source of truth）。核心功能包括：基于 Web 的协作式 Markdown 编辑（支持版本控制、权限管理、全文搜索、附件与审计日志）、与 Obsidian 双向同步（含实时编辑与批量导入）、以及通过 MCP 协议对接 Codex、Claude 等 AI 代理，实现结构化文档读取与 AI 就绪性校验。技术栈采用 TypeScript、Fastify + Prisma + PostgreSQL 后端与 React + Vite 前端。适用于需要人机协同维护知识资产的中小团队，尤其适合已使用 Obsidian 构建个人知识库并希望扩展为团队级、AI 可访问知识中枢的场景。",2,"2026-07-09 02:30:18","CREATED_QUERY"]