Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
66 commits
Select commit Hold shift + click to select a range
6f484ef
Merge pull request #7 from opactorai/fix/cursor-system-prompt-path
tachyon6 Aug 22, 2025
03d8865
add star history
Atipico1 Aug 23, 2025
64b47d5
docs: Add links to OPACTOR website and Twitter profile in README
tachyon6 Aug 23, 2025
f9a2362
docs: Update Twitter badge color in README
tachyon6 Aug 23, 2025
13baad6
edit readme
Atipico1 Aug 25, 2025
9b32392
fix: Remove invisible backspace character from Claudable_logo.png fil…
tachyon6 Aug 25, 2025
87f33eb
feat: Add comprehensive Codex CLI integration to unified manager
Aug 27, 2025
ea11b35
feat: Enhance project cleanup with robust process termination
Aug 27, 2025
6789488
feat: Add image handling and CLI preferences API improvements
Aug 27, 2025
7e97c4e
feat: Add comprehensive image upload support to useChat hook
Aug 27, 2025
8041e95
refactor: Improve chat components for image attachment support
Aug 27, 2025
359d522
feat: Add image thumbnail display in chat messages
Aug 27, 2025
71a73a0
fix: Properly handle images in main page project creation flow
Aug 27, 2025
0d64446
refactor: Improve chat page image handling and runAct function
Aug 27, 2025
98a5e99
feat: Update CLI selection components and type definitions
Aug 27, 2025
45605e5
docs: Update system prompt for enhanced capabilities
Aug 27, 2025
482c48b
feat: Add new OAI image assets for web and assets directory
Aug 27, 2025
2c627be
feat: Add Codex CLI support and improve CLI status checks
Aug 27, 2025
89d1265
feat: Update CLI error messages and add new assets
tachyon6 Aug 29, 2025
6b880e4
feat: Refactor CLI management and enhance SQLite migration support
Aug 29, 2025
8e34b8a
feat: Add Qwen Coder and Gemini CLI support
Aug 29, 2025
4ea73d9
feat: Add new image assets for Qwen and Gemini
Aug 29, 2025
bf20a04
feat: Integrate global settings context and update components
tachyon6 Aug 29, 2025
aaa1122
feat: Add Qwen and Gemini support in various components
tachyon6 Aug 29, 2025
f7a9a70
feat: Update Qwen Coder references and enhance CLI integration
Aug 29, 2025
8045acb
feat: Enhance UI with new assistant brand colors and typography
tachyon6 Aug 30, 2025
f78cde7
feat: Introduce ThinkingSection component to enhance chat log functio…
tachyon6 Aug 30, 2025
0d87636
feat: Enhance session management and model selection in HomePage and …
tachyon6 Aug 30, 2025
604a827
feat: Update system prompt guidelines and enhance HomePage UI
tachyon6 Aug 30, 2025
bd39d6e
feat: Enhance GitHub and Vercel integration with improved branch hand…
tachyon6 Aug 30, 2025
c1f718b
feat: Revise README for enhanced clarity and updated visuals
tachyon6 Aug 30, 2025
91aeae3
chore: Remove outdated API configuration instructions from README
tachyon6 Aug 30, 2025
2561b10
feat: Update README visuals and simplify layout
tachyon6 Aug 31, 2025
5481058
feat: Add user management API and UI
cursoragent Sep 24, 2025
774cf40
chore(web): add react-icons dependency to fix Vercel build
cursoragent Sep 24, 2025
f6c5685
ci: add Vercel auto-deploy GitHub Actions workflow and vercel.json
cursoragent Sep 24, 2025
c5613b5
fix(web): guard publishedUrl nullability for href/clipboard to satisf…
cursoragent Sep 24, 2025
f793789
feat(settings): add AI provider API key support (OpenAI, Anthropic, G…
cursoragent Sep 24, 2025
517e3d2
Merge feature: user add API, AI provider keys & settings UI
cursoragent Sep 24, 2025
9aff1f3
chore: trigger production deploy
cursoragent Sep 24, 2025
60ebb15
feat(web): proxy /api/* to backend via BACKEND_BASE_URL and use relat…
cursoragent Sep 24, 2025
e542d1c
Refactor: Remove hardcoded API_BASE, use relative paths
cursoragent Sep 24, 2025
7ad3f03
chore: trigger production deploy (prod)
cursoragent Sep 24, 2025
15e1216
ci(vercel): workflow to upsert BACKEND_BASE_URL via Vercel API (uses …
cursoragent Sep 24, 2025
6ed4fe8
feat(web): fallback BACKEND_BASE_URL from cookie; UI to set backend U…
cursoragent Sep 24, 2025
337e540
chore(vercel): simplify buildCommand to use apps/web workspace only
cursoragent Sep 24, 2025
87b9959
chore(vercel): run build by cd into apps/web (no npm workspaces)
cursoragent Sep 24, 2025
8033741
chore(vercel): build from repo root (apps/web is the only Next app)
cursoragent Sep 24, 2025
799215c
fix(web/api-proxy): return safe defaults for /api/projects and /api/s…
cursoragent Sep 24, 2025
366d91d
feat(auth-proxy): allow setting backend bearer token via settings; in…
cursoragent Sep 24, 2025
191e86d
fix(web/proxy): add safe fallbacks for GET /api/settings/global and t…
cursoragent Sep 24, 2025
bb7323a
ci: PR template, CODEOWNERS, PR build, auto-publish to Vercel on merg…
cursoragent Sep 24, 2025
a4bc834
chore: trigger production deploy
cursoragent Sep 24, 2025
cad8a0b
chore: trigger production deploy (claudable-web-pi)
cursoragent Sep 24, 2025
10da6b5
fix(meta): provide OpenGraph/Twitter images and favicon to avoid miss…
cursoragent Sep 24, 2025
5b7cedd
Checkpoint before follow-up message
cursoragent Sep 26, 2025
e226ac7
Checkpoint before follow-up message
cursoragent Sep 27, 2025
0fc4b4f
Add AI connectivity service and API endpoints
cursoragent Sep 27, 2025
65a6de0
Merge pull request #3 from you112ef/cursor/backend-app-with-automatic…
you112ef Sep 27, 2025
c75661d
feat: Implement API key management and MCP support
cursoragent Sep 27, 2025
a5e63b6
Merge pull request #4 from you112ef/cursor/automate-claudable-setup-a…
you112ef Sep 27, 2025
7eb26d8
fix: consolidate and fix automatic publishing workflows
cursoragent Sep 27, 2025
c742010
Refactor: Update env, deployment, and readme for production
cursoragent Sep 27, 2025
bac5d50
Merge pull request #5 from you112ef/cursor/automate-claudable-setup-a…
you112ef Sep 27, 2025
d88c45b
feat: Add user API key management endpoints
cursoragent Sep 29, 2025
280922f
Merge pull request #7 from you112ef/cursor/secure-api-key-management-…
you112ef Sep 29, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
81 changes: 32 additions & 49 deletions .env.example
Original file line number Diff line number Diff line change
@@ -1,55 +1,38 @@
# =============================================================================
# CC-LOVABLE ENVIRONMENT CONFIGURATION
# =============================================================================
# Copy this file to .env and configure the values below
# Required fields are marked with [REQUIRED]
# Optional fields have sensible defaults

# =============================================================================
# REQUIRED CONFIGURATION - USER MUST PROVIDE
# =============================================================================

# [REQUIRED] Anthropic API Key for Claude Code SDK
# Get your API key from: https://console.anthropic.com/
ANTHROPIC_API_KEY=your_anthropic_api_key_here

# =============================================================================
# OPTIONAL CONFIGURATION - ADVANCED USERS
# =============================================================================

# Encryption key for sensitive data (generate a random 32-character string)
# Leave empty to use default internal encryption
ENCRYPTION_KEY=

# =============================================================================
# DEFAULT CONFIGURATION - USUALLY NO CHANGES NEEDED
# =============================================================================

# API Server Configuration
API_PORT=8080

# Database Configuration (PostgreSQL via Docker)
POSTGRES_USER=cc
POSTGRES_PASSWORD=cc
POSTGRES_HOST=localhost
POSTGRES_PORT=5432
POSTGRES_DB=cc
# Claudable Environment Configuration
# Copy this file to .env.local and fill in your values

# Alternative: Full database URL (overrides individual POSTGRES_* variables above)
# DATABASE_URL=postgresql+psycopg://cc:cc@localhost:5432/cc
# Database
DATABASE_URL=sqlite:///./data/cc.db

# Project Storage Paths
# Project Settings
PROJECTS_ROOT=./data/projects
PROJECTS_ROOT_HOST=./data/projects

# Preview Server Port Range
PREVIEW_PORT_START=3100
PREVIEW_PORT_END=3999

# Claude Model Configuration
CLAUDE_CODE_MODEL=claude-sonnet-4-20250514

# Frontend API Endpoints (automatically configured by Makefile)
# Note: These are set dynamically by 'make start' - no need to change manually
NEXT_PUBLIC_API_BASE=http://localhost:8080
NEXT_PUBLIC_WS_BASE=ws://localhost:8080
# API Configuration
API_PORT=8080
ENVIRONMENT=development

# AI Service API Keys (Optional - can be set via UI)
CLAUDE_API_KEY=your_claude_api_key_here
CURSOR_API_KEY=your_cursor_api_key_here
OPENAI_API_KEY=your_openai_api_key_here
GOOGLE_API_KEY=your_google_api_key_here
QWEN_API_KEY=your_qwen_api_key_here

# GitHub Integration (Optional)
GITHUB_TOKEN=your_github_token_here

# Supabase Integration (Optional)
SUPABASE_URL=your_supabase_url_here
SUPABASE_ANON_KEY=your_supabase_anon_key_here
SUPABASE_SERVICE_ROLE_KEY=your_supabase_service_role_key_here

# Vercel Integration (Optional)
VERCEL_TOKEN=your_vercel_token_here
VERCEL_ORG_ID=your_vercel_org_id_here
VERCEL_PROJECT_ID=your_vercel_project_id_here

# Security
JWT_SECRET=your_jwt_secret_here
ENCRYPTION_KEY=your_encryption_key_here
2 changes: 2 additions & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
* @you112ef

18 changes: 18 additions & 0 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
## Summary

- What does this PR change and why?

## Checklist

- [ ] Builds locally: `npm install && npm run build`
- [ ] Web proxy OK (uses /api/*)
- [ ] Added/updated tests (if applicable)
- [ ] Updated docs/README (if applicable)

## Deployment

- Merging to `main` will auto-deploy to production via Vercel
- PRs get preview deployments via CI

## Screenshots (optional)

39 changes: 39 additions & 0 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
name: Deploy to Vercel

on:
push:
branches: [ main ]
pull_request:
branches: [ main ]

jobs:
deploy:
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '18'
cache: 'npm'

- name: Install dependencies
run: |
npm install
cd apps/web && npm install

- name: Build web app
run: |
cd apps/web && npm run build

- name: Deploy to Vercel
uses: amondnet/vercel-action@v25
with:
vercel-token: ${{ secrets.VERCEL_TOKEN }}
vercel-org-id: ${{ secrets.VERCEL_ORG_ID }}
vercel-project-id: ${{ secrets.VERCEL_PROJECT_ID }}
vercel-args: '--prod'
working-directory: ./
49 changes: 49 additions & 0 deletions .github/workflows/pr-ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
name: PR CI (Build & Test)

on:
pull_request:
branches: ["main"]

jobs:
build-and-test:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 18
cache: 'npm'

- name: Install dependencies
run: |
npm install
cd apps/web && npm install

- name: Type check
run: |
cd apps/web
npm run type-check || true

- name: Build web app
run: |
cd apps/web
npm run build

- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: '3.10'

- name: Install Python dependencies
run: |
cd apps/api
pip install -r requirements.txt

- name: Test API imports
run: |
cd apps/api
python -c "import app.main; print('API imports successful')"

49 changes: 49 additions & 0 deletions .github/workflows/set-vercel-env.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
name: Set Vercel BACKEND_BASE_URL Env

on:
workflow_dispatch:
inputs:
backend_base_url:
description: "Backend base URL (e.g., https://api.example.com)"
required: true
push:
branches: ["main"]

jobs:
set-env:
runs-on: ubuntu-latest
if: ${{ secrets.VERCEL_TOKEN && secrets.VERCEL_ORG_ID && secrets.VERCEL_PROJECT_ID }}
steps:
- name: Ensure inputs/secret value is available
id: input
run: |
if [ -n "${{ github.event.inputs.backend_base_url }}" ]; then
echo "val=${{ github.event.inputs.backend_base_url }}" >> $GITHUB_OUTPUT
elif [ -n "${{ secrets.BACKEND_BASE_URL }}" ]; then
echo "val=${{ secrets.BACKEND_BASE_URL }}" >> $GITHUB_OUTPUT
else
echo "No BACKEND_BASE_URL provided via dispatch input or secret. Skipping." && exit 0
- name: Upsert env var via Vercel API
if: steps.input.outputs.val != ''
env:
VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }}
VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }}
VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }}
VAL: ${{ steps.input.outputs.val }}
run: |
set -euo pipefail
# Delete existing entries named BACKEND_BASE_URL (if any)
EXISTING=$(curl -sS -H "Authorization: Bearer $VERCEL_TOKEN" "https://api.vercel.com/v9/projects/$VERCEL_PROJECT_ID/env?decrypt=false" | jq -r '.envs[] | select(.key=="BACKEND_BASE_URL") | .id')
for id in $EXISTING; do
curl -sS -X DELETE -H "Authorization: Bearer $VERCEL_TOKEN" "https://api.vercel.com/v9/projects/$VERCEL_PROJECT_ID/env/$id" >/dev/null || true
done
# Create new env var for all targets
curl -sS -X POST \
-H "Authorization: Bearer $VERCEL_TOKEN" \
-H "Content-Type: application/json" \
-d "{\"key\":\"BACKEND_BASE_URL\",\"value\":\"$VAL\",\"type\":\"encrypted\",\"target\":[\"production\",\"preview\",\"development\"]}" \
"https://api.vercel.com/v10/projects/$VERCEL_PROJECT_ID/env" | jq -r '.key' | grep BACKEND_BASE_URL
- name: Invalidate Preview Cache (optional)
if: steps.input.outputs.val != ''
run: echo "BACKEND_BASE_URL set. Next build will pick it up."

89 changes: 89 additions & 0 deletions .github/workflows/vercel-auto-deploy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
name: Vercel Auto Deploy (Preview & Production)

on:
push:
branches: ["**"]
pull_request:
types: [opened, synchronize, reopened]

jobs:
deploy-preview:
if: github.event_name == 'pull_request' || github.ref != 'refs/heads/main'
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 18

- name: Install Vercel CLI
run: npm i -g vercel@latest

- name: Pull Vercel Environment Info (preview)
run: vercel pull --yes --environment=preview --token "$VERCEL_TOKEN"
env:
VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }}
VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }}
VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }}

- name: Build (preview)
run: vercel build --token "$VERCEL_TOKEN"
env:
VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }}

- name: Deploy (preview)
id: deploy_preview
run: |
url=$(vercel deploy --prebuilt --token "$VERCEL_TOKEN" --yes)
echo "preview_url=$url" >> $GITHUB_OUTPUT
env:
VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }}

- name: Output Preview URL
run: echo "Preview URL: ${{ steps.deploy_preview.outputs.preview_url }}"

deploy-production:
if: github.ref == 'refs/heads/main' && github.event_name == 'push'
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 18

- name: Install Vercel CLI
run: npm i -g vercel@latest

- name: Pull Vercel Environment Info (production)
run: vercel pull --yes --environment=production --token "$VERCEL_TOKEN"
env:
VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }}
VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }}
VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }}

- name: Build (production)
run: vercel build --prod --token "$VERCEL_TOKEN"
env:
VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }}

- name: Deploy (production)
id: deploy_prod
run: |
url=$(vercel deploy --prebuilt --prod --token "$VERCEL_TOKEN" --yes)
echo "prod_url=$url" >> $GITHUB_OUTPUT
env:
VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }}

- name: Output Production URL
run: echo "Production URL: ${{ steps.deploy_prod.outputs.prod_url }}"

Loading