litmers-dev/litpage

Open-source, self-hosted workspace for pages, databases and AI. One Node.js process with SQLite.

GitHub에서 열기 ↗ aiblock-editordatabaseknowledge-basenodejsopen-sourcereactself-hostedsqliteworkspace
102
GitHub 스타
45
포크
TypeScript
언어
MIT
라이선스
2026.10.26
최근 푸시
2026.10.23
별표한 날

AI 분석

설치 난이도: 쉬움
큐레이터 노트
셀프 호스팅 지식 베이스나 Notion 대체제를 가볍게 운영해 보고 싶거나, 블록 에디터·데이터베이스·AI 통합 구조를 참고하려는 경우 충분히 보관할 가치가 있습니다. 특히 단일 프로세스 + SQLite 아키텍처와 MCP 엔드포인트 구현은 참고 자료로 유용합니다.

강점

  • 단일 Node.js 프로세스와 SQLite 파일로 동작해 Postgres, Redis, 큐 없이 노트북이나 단일 서버에서 바로 띄울 수 있습니다.
  • 블록 에디터, 데이터베이스, AI, 권한, 실시간 협업, REST API, 웹훅, MCP 엔드포인트까지 한 제품에 폭넓게 포함되어 있습니다.
  • Docker 한 줄 실행과 환경 변수 기반 설정, 데모 모드까지 갖춰 셀프 호스팅 진입 장벽이 낮습니다.
  • 영어와 한국어 인터페이스를 지원하고 MIT 라이선스라 자유롭게 참고·수정할 수 있습니다.

약점

  • Node.js 26 이상과 pnpm 10을 요구해 최신 런타임 환경이 아니면 소스 실행이 번거롭습니다.
  • README에 명시된 대로 연구·시연 목적의 프로젝트로 '있는 그대로' 제공되므로 프로덕션 안정성 보증은 기대하기 어렵습니다.
  • AI 기능은 외부 제공자 키에 의존하며, 데모 모드에서는 AI가 연결되지 않습니다.

주의사항

  • 데모 모드는 계정 신원, 공유, 통합, 웹훅, AI 등 외부로 나가는 기능을 차단하므로 일반 사용 환경과 동작이 다릅니다.
  • `NC_DEMO_RESET_HOURS` 사용 시 프로세스가 종료되므로 플랫폼이 자동 재시작하도록 설정해야 합니다.
  • 데이터는 `NC_DATA_DIR`에 저장되므로 영구 볼륨 마운트를 빠뜨리면 재시작 시 데이터가 사라집니다.

시작 가이드

  • Docker로 로컬에 띄워 데모 워크스페이스에서 에디터와 데이터베이스 뷰를 직접 확인해 보기.
  • docs/architecture.md와 docs/how-it-was-built.md를 읽고 단일 프로세스 구조와 AI 에이전트 활용 방식을 파악하기.
  • REST API와 MCP 엔드포인트를 개인 토큰으로 호출해 자동화 연동 가능성을 테스트하기.
  • 프로덕션에 쓸 경우 `NC_DATA_DIR` 영구 볼륨, SMTP, `NC_TRUST_PROXY` 설정을 미리 점검하기.

README 한국어 번역

이 번역은 AI가 원문 README를 옮긴 것입니다. 원문이 항상 우선합니다.

Litpage

Litpage는 직접 운영하는 오픈소스 워크스페이스입니다. 블록 에디터로 글을 쓰고, 페이지와 팀을 정리하고, 다양한 뷰를 갖춘 데이터베이스로 작업을 추적하고, 세밀한 권한으로 공유하며, 자신의 AI 키를 연결해 채팅, 에이전트, 글쓰기 도움을 받을 수 있습니다. 앱 전체가 하나의 Node.js 프로세스와 하나의 SQLite 파일로 동작하며, 노트북이나 단일 서버에서 돌릴 수 있을 만큼 작습니다.

데모 체험: litpage-demo-production.up.railway.app 을 열고 Try the demo를 클릭하면 가입 없이 사용할 수 있습니다.

샘플 페이지가 포함된 자신만의 워크스페이스가 주어지고, 다른 사람은 볼 수 없으며, 4시간 후 삭제됩니다. 데모에서는 AI가 연결되지 않습니다.

Litpage를 쓰는 이유

  • 셀프 호스팅, 그리고 작음. 프로세스 하나, SQLite 데이터베이스 하나(node:sqlite와 전문 검색), 파일은 한 폴더에 모입니다. Postgres, Redis, 큐를 따로 돌릴 필요가 없습니다.
  • 문서와 데이터가 함께. 페이지, 블록 에디터, 데이터베이스가 같은 트리에 있으므로 프로젝트 브리프와 그 작업 보드가 나란히 위치합니다.
  • 진짜 협업. WebSocket 기반 실시간 다중 사용자 편집, 댓글과 수정 제안, 버전 기록, 팀, 페이지 수준 및 필드 수준 권한, 공개 공유와 사이트 게시를 지원합니다.
  • 내 조건대로 쓰는 AI. 채팅, 커스텀 에이전트, AI 블록, 자동 채우기, 회의록 요약은 직접 설정한 제공자와 키로 동작합니다. 키가 없어도 나머지 기능은 모두 작동합니다.
  • 내 도구에 열려 있음. 웹훅이 있는 REST API와 AI 클라이언트용 MCP 엔드포인트를 제공하며, 토큰은 직접 관리합니다.
  • 두 가지 언어. 인터페이스는 영어와 한국어를 지원합니다.

기능 둘러보기

  • 블록 에디터. 41가지 블록 타입, 슬래시 메뉴, 마크다운 단축키, 드래그 앤 드롭, 멘션, 댓글과 수정 제안.
  • 데이터베이스. 타입이 있는 필드, 필터, 정렬, 그룹, 수식, 관계, 롤업, 템플릿, 버튼, 자동화.
  • 같은 데이터의 다양한 뷰. 테이블, 보드, 리스트, 갤러리, 캘린더, 타임라인, 차트, 대시보드, 피드, 폼, 지도.
  • 차트와 대시보드. 데이터베이스에서 바로 세로 막대, 가로 막대, 선, 도넛, 숫자 차트를 만듭니다.
  • 워크스페이스를 아는 AI. 페이지에 대해 질문하고, 글을 초안 작성·편집하고, 데이터베이스 필드를 채우고, 커스텀 에이전트를 일정이나 트리거로 실행합니다.
  • 영어와 한국어. 설정에서 인터페이스 언어를 바꿀 수 있습니다.

포함된 모든 것

  • 에디터: 리치 텍스트, 41가지 블록 타입, 슬래시 메뉴, 마크다운 단축키, 드래그 앤 드롭, 멘션, 수식, 구문 강조가 있는 코드 블록, 임베드, 댓글과 수정 제안, 버전 기록, 실시간 협업.
  • 워크스페이스: 페이지와 하위 페이지, 즐겨찾기와 최근 항목이 있는 사이드바, 팀, 공유와 권한, 게시된 사이트, 가져오기(Markdown, CSV, HTML, Word, PDF)와 내보내기, 받은편지함과 알림, 리마인더, 휴지통, 라이트·다크 테마.
  • 데이터베이스: 테이블, 보드, 리스트, 갤러리, 캘린더, 타임라인, 차트, 대시보드, 피드, 폼, 지도 뷰; 필터, 정렬, 그룹, 수식, 관계, 롤업, 고유 ID, 자동화, 버튼, 템플릿, 필드 수준 접근 규칙.
  • AI(선택): 워크스페이스 검색이 포함된 채팅, 트리거와 일정이 있는 커스텀 에이전트, 글쓰기 어시스턴트, AI 블록, 데이터베이스 자동 채우기, 수식 어시스턴트, 요약이 포함된 회의록, 제공자가 지원하는 경우 이미지 생성.
  • 관리자: 워크스페이스 설정, 멤버와 게스트, 보안 정책, 감사 로그, 분석, 패스키와 2단계 인증.
  • 개발자: 개인 액세스 토큰과 통합이 있는 REST API, 웹훅, MCP 엔드포인트.

빠른 시작

Docker 사용

docker build -t litpage.
docker run -d --name litpage -p 3001:3001 -v litpage-data:/data \
  -e [email protected] -e NC_BOOTSTRAP_PASSWORD='change-me' \
  litpage

http://localhost:3001 을 열고 해당 이메일과 비밀번호로 로그인합니다("Continue with a password"). 데이터(SQLite 데이터베이스와 업로드된 파일)는 litpage-data 볼륨에 저장됩니다.

소스에서 실행

요구 사항: Node.js 26 이상과 pnpm 10(npm install -g [email protected]).

pnpm install
pnpm dev            # API on http://127.0.0.1:3001, web app on http://127.0.0.1:5173

http://127.0.0.1:5173 을 열고 아무 이메일 주소나 입력합니다. 개발 모드에서는 로그인 코드가 화면에 표시되고, 온보딩에서 첫 워크스페이스를 만듭니다. 데이터는 apps/server/data/에 저장됩니다.

API 서버가 3001 포트에서 제공하는 프로덕션 빌드의 경우:

pnpm build && pnpm start

설정

다음 항목을 환경 변수로 설정합니다(개발 환경에서는 apps/server/.env.local도 읽으며, 이 파일은 git에서 무시됩니다).

변수 기본값 역할
PORT / HOST 3001 / 127.0.0.1 서버가 수신하는 위치(Docker 이미지는 0.0.0.0 사용).
NCDATADIR apps/server/data SQLite 데이터베이스와 업로드된 파일. 영구 볼륨을 여기에 마운트합니다.
NCPUBLICURL http://127.0.0.1:5173 공개 주소로, 이메일 내 링크에 사용됩니다.
NCBOOTSTRAPEMAIL, NCBOOTSTRAPPASSWORD 설정 안 함 새 프로덕션 설치에서 첫 계정을 만듭니다.
NCDEMOMODE 설정 안 함 1로 설정하면 모든 방문자가 자신만의 임시 워크스페이스를 받는 강화된 공개 데모가 됩니다. 계정 신원, 워크스페이스 제어, 공유, 통합, 외부로 나가는 작업, 공개 노출이 차단됩니다.
NCDEMOSANDBOX_HOURS 4 데모 모드에서 방문자 워크스페이스가 삭제되기 전까지 유지되는 시간.
NCDEMOMAX_SANDBOXES 300 데모 모드에서 동시에 존재할 수 있는 방문자 워크스페이스 수. 가득 차면 만료된 것부터 삭제하고, 그렇지 않으면 새 방문자에게 나중에 다시 시도하라고 안내합니다.
NCDEMOMAX_RECORDS 5000 데모 모드에서 방문자 워크스페이스당 블록, 데이터베이스 행, 댓글 및 기타 레코드 수.
NCDEMOMAXUPLOADMB, NCDEMOMAX_FILES 25, 50 데모 모드에서 방문자 워크스페이스당 업로드 파일(각 파일은 5 MB로 제한).
NCDEMOSANDBOXESPERIPHOUR, NCDEMOSANDBOXESPERIPDAY 5, 20 데모 모드에서 클라이언트 주소당 새 워크스페이스 수(프록시 뒤에서는 NCTRUSTPROXY=1 설정).
NCDEMORESET_HOURS 설정 안 함 데모 모드에서 SQLite를 열기 전에 설정된 데이터 디렉터리를 지우고, 이 시간(시간 단위) 후에 정상 종료합니다(안전장치; NCDEMOSANDBOX_HOURS보다 길게 유지). 종료 후에는 플랫폼이 서비스를 재시작해야 합니다.
NCSMTPURL, NCMAILFROM 설정 안 함 발신 메일(smtp:// 또는 smtps:// URL). 없으면 메일은 개발용 아웃박스에만 보관됩니다.
NCTRUSTPROXY 설정 안 함 리버스 프록시 뒤에서 1로 설정하면 클라이언트 주소를 X-Forwarded-*에서 가져옵니다.
NCALLOWEDORIGINS 설정 안 함 API를 호출할 수 있는 추가 오리진, 쉼표로 구분.
AI 변수 설정 안 함 AI with your own key 항목 참고.

데모 모드

NCDEMOMODE=1로 설정하면 공개 데모를 게시합니다. 로그인 페이지에 Try the demo가 표시되며, 한 번 클릭하면 임시 계정과 "Litpage Demo"라는 워크스페이스가 만들어집니다. 여기에는 "Start here" 페이지와 샘플 페이지(Roadmap, Projects, Meeting notes, Team wiki)가 포함되고 방문자가 로그인됩니다. 각 방문자는 자신의 워크스페이스만 볼 수 있으며, 생성 후 NCDEMOSANDBOX_HOURS가 지나면 페이지, 댓글, 기록, 검색 항목, 파일 등 모든 내용과 함께 삭제됩니다. 백그라운드 작업이 몇 분마다 확인합니다. 알림 바의 "Start over"는 새 워크스페이스로 교체합니다. 클라이언트 주소당 워크스페이스 수, 활성 워크스페이스 수, 레코드, 업로드에는 제한이 있습니다(위 표 참고).

서버는 계정 신원, 워크스페이스 관리, 초대, 공유 및 게시, 통합과 토큰, 웹훅, 공개 폼, AI 및 기타 외부로 나가는 작업, 그리고 다른 방문자에게 도달할 수 있는 모든 것을 거부합니다. NCBOOTSTRAPEMAIL과 NCBOOTSTRAPPASSWORD가 설정되어 있으면 로그인 페이지에 이메일 폼도 유지되어 해당 공유 계정으로 이전처럼 로그인할 수 있습니다. 설정하지 않으면 이메일 폼은 숨겨집니다. NCDEMORESET_HOURS는 추가로 시작 시 데이터 디렉터리를 지우고 주기적으로 프로세스를 재시작합니다. 모든 데모 데이터는 일회용으로 취급하고, 플랫폼이 종료 시 재시작하도록 설정하십시오.

자신의 키로 쓰는 AI

모든 AI 기능은 서버에 설정된 하나의 제공자를 통해 동작합니다. 키는 서버에만 남습니다. 브라우저로 전송되지 않으며 로그와 오류에서 마스킹됩니다.

변수 역할
OPENAIAPIKEY OpenAI Responses API 호환 엔드포인트를 사용합니다.
OPENAIBASEURL 선택 사항, 기본값은 https://api.openai.com/v1. 호환 엔드포인트를 지정할 수 있습니다.
ANTHROPICAPIKEY Anthropic API를 사용합니다(선택 사항 ANTHROPICBASEURL).
NCAIMODEL, NCAIFAST_MODEL 기본 모델, 그리고 제목·자동 채우기 같은 짧은 작업용 모델.
NCAIPROVIDER openai, anthropic 또는 none. 설정하지 않으면 OPENAIAPIKEY가 있을 때 OpenAI, 없으면 ANTHROPICAPIKEY가 있을 때 Anthropic을 사용합니다.

node scripts/tools/openai-smoke.mjs는 몇 개의 짧은 요청을 보내 실제 엔드포인트를 확인합니다. 테스트와 엔드투엔드 스크립트는 로컬 모의 서버와만 통신합니다.

API와 통합

  • REST API는 /v1에서 페이지, 데이터베이스, 데이터 소스, 블록, 댓글, 사용자, 검색을 제공합니다. 설정에서 개인 액세스 토큰이나 통합을 만든 뒤:
  curl http://localhost:3001/v1/search \
    -H "Authorization: Bearer $LITPAGE_TOKEN" \
    -H "Litpage-Version: 2026-10-01" \
    -H "Content-Type: application/json" \
    -d '{"page_size": 10}'
  • 웹훅은 페이지, 데이터베이스, 댓글 이벤트에 대해 제공되며 HMAC-SHA256으로 서명되고 실패 시 재시도됩니다.
  • MCP 엔드포인트는 /api/mcp에 있어 Model Context Protocol을 지원하는 AI 클라이언트가 접근 권한이 있는 페이지를 검색·편집할 수 있으며, 앱과 동일한 권한 검사를 적용합니다.

Litpage-Version 헤더는 선택 사항이며 기본값은 현재 버전입니다.

아키텍처

flowchart LR
  subgraph Browser
    UI["React 19 app<br/>editor, databases, AI panel"]
  end
  subgraph Server["One Node.js process"]
    RPC["JSON RPC<br/>/api/rpc"]
    WS["Real-time sync<br/>WebSocket"]
    REST["REST API and webhooks<br/>/v1"]
    MCP["MCP endpoint<br/>/api/mcp"]
    AI["AI service<br/>chat, agents, autofill"]
    DB[("SQLite<br/>with full-text search")]
    FILES[("Uploaded files")]
  end
  PROVIDER["Your AI provider<br/>OpenAI compatible or Anthropic"]
  TOOLS["Your scripts and tools"]
  CLIENTS["MCP clients"]
  UI --> RPC
  UI <--> WS
  RPC --> DB
  RPC --> FILES
  WS --> DB
  REST --> DB
  TOOLS --> REST
  CLIENTS --> MCP
  MCP --> AI
  RPC --> AI
  AI --> PROVIDER
packages/shared   records, operations, rich text, permissions, database query and formula engine
apps/server       Node 26 + Hono + node:sqlite + WebSocket
apps/web          React 19 + Vite
e2e               end-to-end scripts (Chrome via playwright-core)
docs              architecture.md, how-it-was-built.md

자세한 내용은 docs/architecture.md 참고.

개발

pnpm typecheck
pnpm test                                               # unit tests: shared, server, web
cd e2e && NC_BASE=http://127.0.0.1:5173 node smoke.mjs  # end-to-end, one script per area

엔드투엔드 스크립트는 개발 서버를 대상으로 Google Chrome(기본 macOS 경로는 e2e/lib.mjs)을 구동합니다. 이 문서의 이미지는 scripts/readme/에서 생성됩니다(캡처 후 에셋 빌드).

어떻게 만들어졌나

Litpage는 YouTube 시리즈를 위한 실험으로 시작했습니다. AI 코딩 에이전트가 블록 기반 워크스페이스 앱 전체를 만들 때 어디까지 가능할까? 리드 Claude Code 세션이 작업을 영역별로 나누고 서브에이전트를 조율했으며, 단위 테스트와 엔드투엔드 테스트를 가드레일로 삼았습니다. 그 이야기는 docs/how-it-was-built.md에 있습니다. Litpage는 연구 및 시연 프로젝트이며 있는 그대로 제공됩니다.

원본 저장소: litmers-dev/litpage

라이선스: MIT

게재 제외를 원하시면 삭제 요청을 보내주세요.