AI로 만들고 AI로 고치는 사이트 관리 · Go 단일 바이너리

말 한 줄로 사이트를 만들고,
말 한 줄로 고칩니다.

“내 앱 소개 사이트 만들어줘”, “이 사이트 개선해줘” — Claude Code 같은 AI에게 말하면 SiteHub에 사이트가 추가되고 고쳐집니다. 코드·파일·도메인·Preview는 한 관리자에서, 서비스는 정적 파일로, 발행은 사람이 합니다.

0실행 파일
0지원 DB · MySQL / SQLite
0AI 연결 방식 · 채팅 / CLI / MCP
0도메인 추가 시 재시작

AI-first · 핵심 기능

AI가 만들고 고칩니다,
발행은 사람이

사이트 생성부터 파일 작성, 이미지 업로드, 개선까지 AI가 SiteHub에 직접 반영합니다. AI가 만드는 것은 언제나 초안이고, 이전 버전은 자동으로 보관되며, 실제 도메인에 올리는 발행은 사람의 몫입니다.

💬

말 한 줄이면 됩니다

앱 폴더 경로만 알려 주면 AI가 README와 Info.plist, 아이콘과 스크린샷을 읽고 사이트를 추가하고 페이지를 씁니다. 고칠 때도 “FAQ 넣어줘” 한 줄이면 됩니다.

🔑

사이트 1개·1시간 임시 토큰

관리자에서 버튼 하나로 그 사이트만, 정해진 시간 동안 쓰는 토큰을 발급하고 안내문을 통째로 복사합니다. 다른 사이트는 보이지 않고, 시간이 지나면 저절로 끊깁니다.

🛡️

AI는 초안, 발행은 사람

AI 토큰으로는 발행·삭제·도메인 변경이 불가능합니다. 덮어쓴 파일은 이전 버전이 남아 언제든 되돌릴 수 있고, 결과는 미리보기 링크로 먼저 확인합니다.

AI를 연결하는 네 가지 방법

관리자 안에서 대화로 고칩니다

사이트의 AI 탭에서 요청하면 Claude가 파일을 읽고 수정합니다. 결과는 바로 반영되지 않고 변경안으로 쌓여, diff를 보고 파일별로 적용하거나 폐기합니다. Claude Code 로그인(구독)으로 API 키 없이 쓸 수도 있습니다.

  • 파일별 diff 검토 후 적용
  • 적용 전 미리보기
  • 적용 시 이전 버전 자동 보관

Features

운영하는 사이트가 늘어도 관리는 그대로

새 범용 CMS가 아닙니다. 내가 운영하는 여러 사이트의 코드와 파일, 도메인, 발행, 그리고 AI 작업을 한 곳에서 다루는 데 집중했습니다.

🌐

멀티 사이트 · 복수 도메인

사이트마다 도메인을 여러 개 연결합니다. 도메인 표는 메모리에 캐시되어 요청마다 DB를 조회하지 않고, 추가·변경은 재시작 없이 즉시 반영됩니다.

⌨️

코드 중심 편집

파일 트리와 Monaco 에디터로 HTML·CSS·JS를 직접 편집합니다. 저장할 때마다 이전 버전이 남고, 원하는 시점으로 복원할 수 있습니다.

👀

Preview와 운영의 분리

수정 내용은 Preview에서만 보입니다. Publish 전에는 실제 도메인에 아무 영향이 없습니다.

⏪

Release 발행 · 즉시 Rollback

발행할 때마다 새 release 폴더가 만들어지고 검증을 통과해야 current가 바뀝니다. 되돌리기는 링크만 옮기는 일이라 즉시 끝납니다.

🧱

DB가 멈춰도 서비스는 계속

운영 트래픽은 current의 실제 파일에서 나갑니다. 관리자나 DB에 장애가 나도 이미 발행된 사이트는 그대로 동작합니다.

🔒

관리자는 내부망 전용

접속 경로의 모든 주소가 사설망일 때만 열립니다. 로그인 세션은 DB에 해시로 저장되고, 만료·기기별 종료·실패 잠금을 지원합니다.

📊

접속 통계

전체와 사이트별로 방문자·페이지뷰·인기 페이지·유입 경로·404를 봅니다. IP와 브라우저 원문은 저장하지 않고 방문자는 매일 바뀌는 무작위 값의 개수로만 셉니다.

🪪

API 토큰 · 임시 토큰

관리자 비밀번호 없이 AI와 스크립트를 연결합니다. 권한을 제한하고 언제든 폐기하며, 사이트 1개·1시간짜리 임시 토큰도 발급합니다.

🛰️

인터넷에서도 쓰는 API

토큰 전용 호스트가 /api와 /mcp를 받습니다. HTTPS만, Bearer 토큰만, 외부에서는 edit 권한만 — 발행은 사람이 내부망에서 합니다.

📎

첨부파일 관리

이미지·PDF·ZIP 같은 바이너리는 DB가 아닌 파일 시스템에 저장하고, 발행할 때 같은 경로로 release에 담깁니다.

🛡️

실패해도 안전한 발행

index.html이 없거나 빌드가 실패하면 기존 current는 그대로입니다. 깨진 링크는 경고로 이력에 남습니다.

🗄️

MySQL · SQLite

운영은 MySQL/MariaDB, 가볍게 쓰려면 SQLite. 설정 한 줄로 고르고 마이그레이션은 서버가 시작할 때 알아서 적용합니다.

How it works

편집 → 검토 → 발행 → 서비스

사람이 하든 AI가 하든 흐름은 같습니다. 단계를 눌러 보고, 아래 데모에서 직접 Publish와 Rollback을 해 보세요.

Release 데모

버튼을 눌러 current 링크가 어떻게 움직이는지 확인해 보세요. 이전 release는 그대로 남아 있습니다.

현재 release: 20260929-002

Architecture

Nginx Proxy Manager 뒤의 단일 서버

SiteHub는 라우팅을 외부 프록시와 함께 쓰는 방식과 SiteHub가 직접 하는 방식 두 가지를 지향합니다. 지금은 외부 라우팅을 지원하고, 자체 라우팅은 추후 개발합니다.

현재 지원

외부 라우팅

Nginx Proxy Manager 같은 리버스 프록시가 HTTPS·인증서·도메인을 받아 SiteHub로 전달합니다. SiteHub는 Host(X-Forwarded-Host)로 어떤 사이트인지 결정하고 발행된 정적 파일을 그대로 내보냅니다. 모든 도메인을 같은 SiteHub 주소로 보내면 됩니다.

추후 개발

자체 라우팅

프록시 없이 SiteHub가 직접 도메인·HTTPS를 받아 단독으로 서비스하는 방식입니다. 아직 구현되어 있지 않으며 이후 개발 과제로 남겨 두었습니다.

Internet Nginx ProxyHTTPS · 인증서 SiteHubHost → 사이트정적 파일 서비스 site-a.com site-b.com site-c.com 관리자 · 내부망
RepositoryMySQL(운영) · SQLite 를 설정 한 줄로 전환
파일 구조uploads/ 원본 · sites/<slug>/releases/ 결과
라우팅Host / X-Forwarded-Host · 신뢰한 프록시만 · 메모리 캐시
운영./reload.sh 한 번으로 검증·교체·재시작

지금 바로 시작하세요

설정 파일 하나와 명령 하나면 서버가 뜨고, 토큰 하나면 AI가 사이트를 만듭니다.

# 1. 설정 만들기 (admin.password 는 필수)
cp config.example.yaml config.yaml

# 2. 테스트 · 빌드 · 검증 · 서비스 재시작
./reload.sh

# 3. 관리자 「토큰·AI」에서 토큰 발급 → AI에게 "사이트 만들어줘"