Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
162 commits
Select commit Hold shift + click to select a range
eaf8b7f
feat: Gitea provider + self-hosted auto-deploy scaffolding
holoduke Jun 24, 2026
aa3b5ac
feat: add Claude Opus 4.8 to model picker
holoduke Jun 24, 2026
2ae585a
fix: public preview URLs for remote hosting
holoduke Jun 24, 2026
1555694
fix: run as non-root, correct agent cwd, dev NODE_ENV for preview
holoduke Jun 24, 2026
5169a70
perf: cached docker builds in deploy workflows (drop --no-cache)
holoduke Jun 24, 2026
8aa590c
feat: per-project Agent Skills (settingSources + management UI)
holoduke Jun 25, 2026
94d59e9
Merge pull request #1 from holoduke/feature/selfhost-gitea-skills
holoduke Jun 25, 2026
dae2869
feat: mount global Agent Skills dir into container (~/.claude/skills)
holoduke Jun 25, 2026
77b34e3
feat: scaffold/build Nuxt 4 + Nuxt UI apps; default model to Opus 4.8
holoduke Jun 25, 2026
cd77745
feat: Skills panel shows global + project skills (modern UI, search, …
holoduke Jun 25, 2026
9e35895
perf: build container as node user (drop 218s recursive chown); flock…
holoduke Jun 25, 2026
902ad2c
fix(nuxt scaffold): drop type:module (broke run-dev.js) and postcss.c…
holoduke Jun 25, 2026
18a5c1e
fix(nuxt scaffold): drop un-bundled lucide icon from starter button
holoduke Jun 25, 2026
b97f216
fix: pre-create ~/.claude as node so skills bind-mount doesn't root t…
holoduke Jun 25, 2026
513cd23
fix(nuxt scaffold): allow preview proxy host (vite server.allowedHost…
holoduke Jun 25, 2026
3d363ea
feat: add 'Open preview in new tab' button to the top controls bar
holoduke Jun 25, 2026
c14473a
perf: show running preview instantly on refresh (status fast-path, dr…
holoduke Jun 25, 2026
80ae55d
fix: auto-recover from corrupt session resume (retry once with fresh …
holoduke Jun 25, 2026
38a7f47
feat: surface agent errors as a chat message (persisted red bubble); …
holoduke Jun 25, 2026
eb2fb97
fix: stabilize chat SSE connection (handlers in ref) — was re-mountin…
holoduke Jun 25, 2026
a52d45f
fix: SSE-only stable realtime — disable dead WebSocket (no /api/ws se…
holoduke Jun 25, 2026
729791b
fix: stop SSE close/reopen thrash — respect EventSource auto-reconnec…
holoduke Jun 25, 2026
a437eaa
fix: self-heal zombie 'running' requests that locked chat after restarts
holoduke Jun 25, 2026
2bcd889
fix: run zombie-request recovery on prisma client init (next start sk…
holoduke Jun 25, 2026
0229288
fix: preview reliability + request-leak hardening
holoduke Jun 25, 2026
11d9927
feat: generate beautiful, SEO-ready Nuxt sites by default
holoduke Jun 25, 2026
cf94bec
chore: caret-pin scaffold deps to current majors instead of 'latest'
holoduke Jun 25, 2026
cc369cd
feat: thinking-mode control + visible reasoning in chat
holoduke Jun 25, 2026
712cdd8
fix: use adaptive thinking + effort instead of fixed budget
holoduke Jun 25, 2026
7571bb5
fix: load newest messages first so new chat history is visible
holoduke Jun 25, 2026
93e770b
feat: Gitea publish in the UI (no Vercel required)
holoduke Jun 25, 2026
bb4a753
fix: deploy Dockerfile falls back to npm install on lockfile drift
holoduke Jun 25, 2026
91bcb6f
fix(publish): connect + push now work end-to-end via Gitea
holoduke Jun 25, 2026
ea08864
fix(deploy): make generated-site deploys bulletproof + self-propagating
holoduke Jun 25, 2026
b1b21db
chore: remove deployment-specific infra from the repo
holoduke Jun 25, 2026
725c40a
feat: clear 'Claude is working' indicator driven by real agent status
holoduke Jun 25, 2026
b9deff1
fix: persist Claude session transcripts so context survives redeploys
holoduke Jun 25, 2026
ddb3f6e
feat: show real Gitea Actions deploy status in Publish (not a guess)
holoduke Jun 25, 2026
092cd72
fix: Publish button mislabeled 'Connect Services First' in Gitea flow
holoduke Jun 25, 2026
182f427
fix: publish deploy-status race + 'nothing deployed on first click'
holoduke Jun 25, 2026
139d408
fix: don't show 'Published successfully' when the Publish popup just …
holoduke Jun 25, 2026
a0bea8c
chore: provider-agnostic 'Git' wording in the UI
holoduke Jun 25, 2026
8f500ad
feat: show last deployed commit + relative time in Publish popup
holoduke Jun 25, 2026
97e8f9f
review: 26 fixes across security, performance, robustness & quality
holoduke Jun 25, 2026
49e6493
fix: instruct agent to keep prerender failOnError:false (deploy resil…
holoduke Jun 26, 2026
6e24bda
fix: stop leaking preview dev-server processes (orphaned nuxt)
holoduke Jun 26, 2026
333619c
feat: preview URL bar follows in-app navigation
holoduke Jun 26, 2026
9785717
fix: preview refresh cold-starts an already-running server (stale sta…
holoduke Jun 26, 2026
7e6d492
fix: preview cold-starts on every refresh (beforeunload killed the de…
holoduke Jun 26, 2026
0314c71
chore: default .env.example GIT_PROVIDER to github (matches comment)
holoduke Jun 26, 2026
c58406c
feat: import designs from Claude Design (zip) and port them with the …
holoduke Jun 27, 2026
420036a
fix: escape apostrophe in design import modal (next lint)
holoduke Jun 27, 2026
4d80bd5
feat: scaffold a full multi-page Nuxt app for new projects
holoduke Jun 27, 2026
b2c9042
feat: per-project skill enable/disable with a quick-access modal
holoduke Jun 27, 2026
2c2358d
fix: reliability + correctness batch from the review
holoduke Jun 27, 2026
51f7590
fix: evict idle previews to prevent port-pool exhaustion [H2]
holoduke Jun 27, 2026
09bd497
fix: encrypt provider tokens at rest in cc.db [H1]
holoduke Jun 27, 2026
7ff8321
test: stand up vitest + first unit suite; extract pure skill-id modul…
holoduke Jun 27, 2026
7c31933
refactor: extract system prompt + pure format helpers from god-files …
holoduke Jun 27, 2026
93eabfc
refactor: extract tool-metadata parsers from claude.ts into a tested …
holoduke Jun 27, 2026
c7347f0
refactor: de-duplicate ChatLog tool parsers via shared module [A4]
holoduke Jun 27, 2026
2cf8e48
feat: resizable chat/preview split (drag the divider)
holoduke Jun 27, 2026
0c61497
fix: chat resize was swallowed by the preview iframe
holoduke Jun 27, 2026
d5eb85e
fix: design import 502 on large exports — pre-filter the zip in the b…
holoduke Jun 29, 2026
52302af
feat(auth): Phase 0 — Google sign-in + gate + provisioning (gate off …
holoduke Jun 29, 2026
da3c13a
fix: project rename lost on Save (input onBlur unmounted the form first)
holoduke Jun 29, 2026
233f6e1
feat(deploy): persist app data + build native modules in generated de…
holoduke Jun 29, 2026
861d824
feat: admin user management (Phase 1)
holoduke Jun 29, 2026
b8bae5c
fix(auth): harden auth + user management after security/code review
holoduke Jun 29, 2026
f6c6a45
fix(deploy): preserve data/ (SQLite volume) across the re-clone fallback
holoduke Jun 29, 2026
3c98b8f
feat: per-project access control (Phase 2)
holoduke Jun 29, 2026
931c52e
chore: ignore all .env* variants (keep .env.example) to prevent secre…
holoduke Jun 29, 2026
630caae
feat: hide Vercel and Supabase integrations
holoduke Jun 29, 2026
d85d73e
feat: design skills (66-style catalog from awesome-design-skills)
holoduke Jun 29, 2026
d75f836
feat: upload any file + scrub secrets from the agent env
holoduke Jun 29, 2026
2a2004a
feat: warm previews on switch + project tiles + cross-project agent g…
holoduke Jun 29, 2026
451c505
feat: upload any file (not just images) from the start prompt
holoduke Jun 29, 2026
23d91d6
feat: site thumbnails on dashboard tiles (#1)
holoduke Jun 29, 2026
288a6b4
feat: recapture thumbnail when an agent run completes
holoduke Jun 29, 2026
00fd3be
feat: tech-stack selector on the new-project screen (#2)
holoduke Jun 29, 2026
589cb00
feat: Next.js and Angular tech stacks (#2 cont.)
holoduke Jun 29, 2026
9918397
fix(angular): make the preview reachable (v20 + allowed-hosts)
holoduke Jun 29, 2026
18f9523
fix(angular): pin @angular/* to one minor (~20.3.0) to fix ERESOLVE
holoduke Jun 29, 2026
db10902
feat: framework-aware publish Dockerfile (Next.js, Angular)
holoduke Jun 30, 2026
e34642d
feat: per-user Claude credentials, assignable per project
holoduke Jun 30, 2026
bf56a0c
feat: shared it-ops tools (admin-gated, in-process MCP broker)
holoduke Jun 30, 2026
b4a8941
feat(itops): propose_new_app_host tool (emits the box-provisioning plan)
holoduke Jun 30, 2026
f85a58c
feat(itops): real scoped write tools for Gitea, Coolify, Traefik
holoduke Jun 30, 2026
7c1ceb3
feat(itops): Coolify project create/delete/list tools
holoduke Jun 30, 2026
b1f56f7
feat(itops): Gitea admin tools — repo admin, access control, org/teams
holoduke Jun 30, 2026
d10e810
fix(itops): resolve Gitea team id via list endpoint (by-name route ab…
holoduke Jun 30, 2026
e9e2376
fix(chat): non-blocking large-file upload with progress
holoduke Jun 30, 2026
2f08b30
fix(chat): stream large uploads via raw body (FormData parse limit)
holoduke Jun 30, 2026
6595228
fix(chat): chunked uploads to defeat the ~10MB request-body cap
holoduke Jun 30, 2026
896ead8
feat(itops): make it-ops a per-user capability with My Account UI
holoduke Jun 30, 2026
d74e6a3
fix(itops): align MyAccountSettings onToast signature (required type)
holoduke Jun 30, 2026
acf011d
feat(projects): set ownerId from the signed-in creator
holoduke Jun 30, 2026
fc5e796
feat(itops): it-ops follows the requesting user, not the project
holoduke Jun 30, 2026
4ccbf25
fix(security): harden it-ops broker + auth from extended review
holoduke Jun 30, 2026
ad71de8
feat(editor): inline visual editor (first iteration)
holoduke Jul 1, 2026
37da196
fix(editor): drop FaEdit (not in installed react-icons) for inline SVG
holoduke Jul 1, 2026
f900c19
fix(preview): prevent cross-project preview leak via port reuse
holoduke Jul 1, 2026
d3109b5
feat(preview): per-project preview subdomains (definitive isolation fix)
holoduke Jul 1, 2026
ae9c17f
feat(comments): pinned per-route review comments on the preview
holoduke Jul 1, 2026
fd71a45
fix(preview): probe local dev server for readiness + pre-warm cert
holoduke Jul 1, 2026
d8b8759
feat(preview): tablet device mode + portrait/landscape rotate
holoduke Jul 1, 2026
b6b1908
feat(preview): device selector dropdown (12 named devices) + always-f…
holoduke Jul 1, 2026
f23ceba
fix: address big-review findings (comments, preview, editor, device UI)
holoduke Jul 1, 2026
5e669e1
docs: explain this self-hosted fork in the README
holoduke Jul 1, 2026
9c696d6
feat(preview): keep-warm on tab refocus + proactive rebuild if evicted
holoduke Jul 1, 2026
dec5ca8
feat(checkpoints): snapshot each agent turn + one-click revert
holoduke Jul 1, 2026
87576aa
feat(preview): capture runtime errors + one-click 'Fix with AI'
holoduke Jul 1, 2026
56108a0
fix(types): add commitSha to backend Message type (unblocks build)
holoduke Jul 1, 2026
fffd94f
feat(database): one-click per-project Postgres via Coolify
holoduke Jul 1, 2026
84a5a44
feat(database): deploy-time DATABASE_URL injection + agent awareness
holoduke Jul 1, 2026
4295a07
feat: shareable stakeholder review links
holoduke Jul 1, 2026
8911f85
fix: activate comment mode on share page + slim toolbar to icons
holoduke Jul 1, 2026
1153725
fix: robust comment submit (spinner, timeout, no double-add)
holoduke Jul 1, 2026
b3cf633
feat: app diagnostics feedback so the agent can self-diagnose
holoduke Jul 1, 2026
6092189
feat: standalone share page — instant load + no app chrome
holoduke Jul 1, 2026
af86692
fix: review pass across checkpoints, comments, diagnostics, share
holoduke Jul 1, 2026
fe5f741
feat: comment on/off toggle on the share page
holoduke Jul 1, 2026
cf6c882
feat: comments overview list in the editor (jump to comment)
holoduke Jul 1, 2026
6947c12
fix: jump-to-comment first-click race + add Fable 5 model
holoduke Jul 1, 2026
bc9a23b
fix: tell the agent its own model in the system prompt
holoduke Jul 1, 2026
2429e6f
fix: review-pass hardening (security + cross-feature bugs)
holoduke Jul 1, 2026
109a01c
chore: repo cleanup + unify busy contract + gate review tools per-stack
holoduke Jul 1, 2026
ace395c
feat(auth): Phase 0 hardening — safe to flip AUTH_ENABLED
holoduke Jul 1, 2026
40dbec1
feat: default to Claude Fable 5 for new projects
holoduke Jul 2, 2026
b38b7ee
feat(ui): toasts, live preview progress, message copy, comments filte…
holoduke Jul 2, 2026
7e6ff41
feat: Sign out button + header aria-labels
holoduke Jul 2, 2026
ed24d9e
feat(ui): dark mode
holoduke Jul 2, 2026
12f4a5f
fix(dark): settings-modal header gradient + project-tile placeholder …
holoduke Jul 2, 2026
3733dd4
feat(ui): '/' skill autocomplete in the chat input
holoduke Jul 2, 2026
490e383
fix(ui): skill '/' menu uses fixed positioning (was clipped by the co…
holoduke Jul 2, 2026
143de2c
fix(ui): clamp skill menu vertically so it stays on-screen (was rende…
holoduke Jul 2, 2026
aaecf71
feat(ui): slick animated login page (Salsa Shop fonts)
holoduke Jul 2, 2026
71e2d27
fix(ui): login wordmark no longer clipped (break out of max-w + clamp…
holoduke Jul 2, 2026
47b8c6e
feat(preview): 'static' stack mode for imported existing sites
holoduke Jul 2, 2026
d1ba244
feat(preview): backend sidecar for static imports (run a project's Go…
holoduke Jul 2, 2026
a5695ba
fix(security): scrub the backend sidecar env — stop leaking Claudable…
holoduke Jul 2, 2026
72f5f57
feat(isolation): run project backends in hardened sibling containers …
holoduke Jul 2, 2026
e89b65b
feat(isolation): egress-locked sandbox network for isolated backends
holoduke Jul 2, 2026
07008bc
feat(isolation): Phase 2 — isolated frontend dev servers (opt-in, fla…
holoduke Jul 2, 2026
1706891
fix(isolation): frontend-isolate gated on the PROJECT's DB, not env.D…
holoduke Jul 2, 2026
f2bccc1
fix(isolation): frontend container publishes on all interfaces (Traef…
holoduke Jul 2, 2026
ff89d6e
fix(security): deny Docker/container-runtime access from the agent's …
holoduke Jul 2, 2026
fd4d18d
feat(isolation): make frontend isolation agnostic + per-project ARCHI…
holoduke Jul 2, 2026
b5bffcb
fix(isolation): ARCHITECTURE.md shows the actual stored stack (nextjs…
holoduke Jul 2, 2026
f630c2f
feat(ui): 'i' architecture button + panel on the chat toolbar
holoduke Jul 2, 2026
f40a48f
fix(ui): architecture button build errors (FaInfoCircle not exported;…
holoduke Jul 2, 2026
4612551
feat(compose): project backend + database composition (foundation)
holoduke Jul 2, 2026
15c8b85
feat(compose): Step 2 — run composed backend as its own isolated serv…
holoduke Jul 2, 2026
9f6f090
fix(compose): distinct name for the composed backend container (-api)…
holoduke Jul 2, 2026
bbbbe2c
feat(compose): unified Containers panel (frontend/backend/database as…
holoduke Jul 2, 2026
ecc6faf
fix(compose): Containers panel detects imported backends (preview.jso…
holoduke Jul 2, 2026
facc230
feat(compose): detect imported backend language + surface embedded (D…
holoduke Jul 2, 2026
6ba79df
review: fix security + correctness findings from the multi-agent review
holoduke Jul 2, 2026
12d24a6
feat: image generation for the agent (xAI/Grok)
holoduke Jul 2, 2026
91b8242
fix(images): use xAI's current model grok-imagine-image + detect JPEG…
holoduke Jul 2, 2026
ae6591e
feat(capabilities): image generation as a per-project connection (opt…
holoduke Jul 3, 2026
5395aba
feat(chat): CLI-style always-on input with message queue
holoduke Jul 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
13 changes: 13 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
node_modules
.next
.git
data
dist
build
out
.turbo
.vercel
electron/dist
*.log
.env
.env.local
55 changes: 55 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
# Claudable server config — copy to .env on your host (DO NOT COMMIT).

# --- Agent auth: run claude -p with your Claude subscription (no API billing) ---
# Generate once with `claude setup-token` on a logged-in machine, paste here.
CLAUDE_CODE_OAUTH_TOKEN=

# --- Git provider: 'github' (default) or 'gitea' (self-hosted) ---
GIT_PROVIDER=github
GIT_API_BASE_URL=https://git.example.com/api/v1
GIT_HTTP_BASE=https://git.example.com
GIT_ORG=your-org
GIT_DEPLOY_DOMAIN=example.com
# Git API token (write:repository, write:organization). Used for repo create + push.
GIT_TOKEN=

# --- App / public URL ---
DATABASE_URL=file:../data/cc.db
PROJECTS_DIR=./data/projects
WEB_PORT=3700
# Public URL of this Claudable instance (behind your reverse proxy).
NEXT_PUBLIC_APP_URL=https://claudable.example.com
# Template for preview URLs. Prefer {project} (a STABLE per-project subdomain whose
# Traefik route is rewritten to the live port each start — a reused port can never
# cross projects). Requires TRAEFIK_DYNAMIC_DIR (below) mounted + writable. The
# legacy {port} form works too but is port-keyed (guessable, cross-project risk).
PREVIEW_URL_TEMPLATE=https://preview-{project}.example.com
# How your reverse proxy reaches host-network containers (host gateway IP, or
# host.docker.internal on Docker Desktop).
DEPLOY_HOST_GATEWAY=host.docker.internal

# --- Auth (Google OAuth via Auth.js) ---
# Create an OAuth client at console.cloud.google.com (Web app), redirect URI:
# https://<your-app>/api/auth/callback/google
AUTH_SECRET= # openssl rand -hex 32
AUTH_URL=https://claudable.example.com
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
ALLOWED_EMAIL_DOMAINS=example.com # comma-separated; these domains auto-provision users
BOOTSTRAP_ADMIN_EMAIL= # this email becomes admin on first sign-in
AUTH_ENABLED=false # flip to true to enforce the login gate

# --- it-ops broker (admin-enabled per project; tools run in THIS process, never
# in the agent). Each block is opt-in: unset = that tool reports "not
# configured". Gitea write tools reuse GIT_TOKEN above. AWS stays propose-only.
# Coolify: scoped list/restart/deploy/env tools. Token: Coolify → Keys & Tokens.
COOLIFY_API_BASE=http://localhost:8000
COOLIFY_API_TOKEN=
# Traefik: publish dynamic routes. Mount the host's proxy dynamic dir (set the
# host path) AND point the in-container path at the mount.
TRAEFIK_DYNAMIC_HOST_DIR= # e.g. /data/coolify/proxy/dynamic (host path)
TRAEFIK_DYNAMIC_DIR= # e.g. /traefik-dynamic (in-container mount path)

# --- One-click Postgres backend (provisioned via Coolify) ---
COOLIFY_SERVER_UUID= # the Coolify server uuid to place databases on
PREVIEW_DB_HOST=127.0.0.1 # how preview/deploy reach the DB (host-networked)
5 changes: 3 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,10 @@ npm-debug.log*
yarn-debug.log*
yarn-error.log*

# local env files
.env*.local
# local env files — ignore every .env variant, keep only the example template
.env
.env.*
!.env.example

# vercel
.vercel
Expand Down
57 changes: 57 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
# Claudable — self-hosted AI web builder, running the agent via `claude -p`
# (Claude Code CLI / Agent SDK) with subscription auth (CLAUDE_CODE_OAUTH_TOKEN).
FROM node:22-bookworm-slim

# Tooling the agent needs at runtime: git (push), ripgrep (claude search), ca-certs.
# chromium + fonts-liberation power server-side project thumbnails (headless capture).
RUN apt-get update \
&& apt-get install -y --no-install-recommends git ca-certificates ripgrep curl chromium fonts-liberation \
&& rm -rf /var/lib/apt/lists/*

# Path to the headless browser used for thumbnail capture (lib/services/thumbnail.ts).
ENV CHROMIUM_PATH=/usr/bin/chromium

# Go toolchain — lets the preview build+run a project's Go backend (the `static`
# import mode's backend sidecar). Pinned; copied from the official image.
COPY --from=golang:1.25-bookworm /usr/local/go /usr/local/go
ENV PATH="/usr/local/go/bin:${PATH}" \
GOTOOLCHAIN=local \
GOFLAGS=-buildvcs=false

# Docker CLI ONLY (not the daemon) — for project-environment isolation, Claudable
# builds/runs hardened sibling containers via the socket-proxy (DOCKER_HOST). Just
# the static client binary; talks to a remote daemon, runs nothing locally.
RUN curl -fsSL https://download.docker.com/linux/static/stable/x86_64/docker-27.5.1.tgz \
| tar -xz -C /usr/local/bin --strip-components=1 docker/docker \
&& docker --version

# Claude Code CLI on PATH so the Agent SDK can spawn `claude` headless.
RUN npm install -g @anthropic-ai/claude-code

# Run as the non-root `node` user (uid 1000, matches the host volume owner) — Claude
# Code refuses --dangerously-skip-permissions as root. Building entirely as `node`
# (with COPY --chown) means files are created node-owned, so NO slow recursive chown.
WORKDIR /app
RUN chown node:node /app
USER node

# Pre-create ~/.claude as node so a bind-mount at ~/.claude/skills doesn't make
# Docker create the parent as root (which blocks the agent writing session-env).
RUN mkdir -p /home/node/.claude

# Install deps (cached on lockfile). --ignore-scripts skips electron/postinstall.
COPY --chown=node:node package*.json ./
RUN npm ci --ignore-scripts
COPY --chown=node:node prisma ./prisma
RUN npx prisma generate

# Build the Next.js app.
COPY --chown=node:node . .
RUN npm run build

ENV NODE_ENV=production
ENV PORT=3700
ENV WEB_PORT=3700

# Ensure the SQLite schema exists on the mounted volume, then start.
CMD ["sh", "-c", "npx prisma db push --skip-generate && npx next start -p ${WEB_PORT}"]
46 changes: 34 additions & 12 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,40 @@
</a>
</p>

---

## 🍴 About this fork

This is a **self-hosted fork** of [opactorai/Claudable](https://github.com/opactorai/Claudable),
adapted to run entirely on **your own infrastructure** (no Vercel / GitHub / Supabase
required) and extended into a **multi-user, team review** tool. Everything upstream still
works; this fork adds:

- **Self-hosting on your own box** — provider-aware Git (self-hosted **Gitea** as well as
GitHub), one-click publish + auto-deploy via **Gitea Actions**, and a shared **Traefik**
proxy. Each running preview gets a **stable per-project subdomain** with automatic HTTPS
(Let's Encrypt DNS-01), isolated so one project's preview can never show another's.
- **Multi-user** — Google login with an auth gate, per-project access control, and
per-user Claude credentials (paste your own `claude setup-token`).
- **Visual editor** — an *Edit* mode to click elements in the live preview and tweak text
& CSS, then apply the change to code through the agent.
- **Preview comments** — Figma-style pinned, per-route review comments overlaid on the
preview (Claudable-only; never touches the app source), with author, resolve & clear-all.
- **Device preview** — a device selector (iPhone/iPad/Pixel/Surface…) with portrait ⇄
landscape and always-fit scaling.
- **it-ops broker** *(admin-opt-in, per user)* — scoped, audited infrastructure tools the
agent can use (Gitea repo/admin, Coolify apps & projects, Traefik routes); AWS/IAM stays
propose-only, and credentials never enter the agent's context.
- **Agent sandboxing** — the agent's environment is scrubbed of Claudable's secrets and
guarded from escaping its own project.
- **Quality-of-life** — a large **design-style catalog** (skills), chunked large-file
uploads with progress, and a project dashboard.

Deployment specifics live in `.env.example` and `docker-compose.yml`; no infrastructure
values or secrets are committed. It tracks upstream and is not intended for merge back.

---

## What is Claudable?

Claudable is a powerful Next.js-based web app builder that combines **C**laude Code's (Cursor CLI also supported!) advanced AI agent capabilities with **Lovable**'s simple and intuitive app building experience. Just describe your app idea - "I want a task management app with dark mode" - and watch as Claudable instantly generates the code and shows you a live preview of your working app. You can deploy your app to Vercel and integrate database with Supabase for free.
Expand All @@ -35,8 +69,6 @@ How to start? Simply login to Claude Code (or Cursor CLI), start Claudable, and

## Features

![Claudable Demo](assets/gif/Claudable_v2_cc_4_1080p.gif)

- **Powerful Agent Performance**: Leverage the full power of Claude Code and Cursor CLI Agent capabilities
- **Natural Language to Code**: Simply describe what you want to build, and Claudable generates production-ready Next.js code
- **Instant Preview**: See your changes immediately with hot-reload as AI builds your app
Expand All @@ -47,16 +79,6 @@ How to start? Simply login to Claude Code (or Cursor CLI), start Claudable, and
- **Supabase Database**: Connect production PostgreSQL with authentication ready to use
- **Desktop App**: Available as Electron desktop application for Mac, Windows, and Linux

## Demo Examples

### Codex CLI Example

![Codex CLI Demo](assets/gif/Claudable_v2_codex_1_1080p.gif)

### Qwen Code Example

![Qwen Code Demo](assets/gif/Claudable_v2_qwen_1_1080p.gif)

## Supported AI Coding Agents

Claudable supports multiple AI coding agents, giving you the flexibility to choose the best tool for your needs:
Expand Down
Loading