Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
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
9502570
Implement bilateral approval system and production-ready security
cursoragent Sep 27, 2025
9e5e6fc
Create complete standalone application with automatic API configuration
cursoragent Sep 27, 2025
7304aec
Checkpoint before follow-up message
cursoragent Sep 27, 2025
a3acac8
Checkpoint before follow-up message
cursoragent Sep 27, 2025
b7c2d87
feat: Add application status report and start servers script
cursoragent Sep 27, 2025
d90a77e
feat: Configure Vercel deployment and add API routes
cursoragent Sep 27, 2025
37f4ffe
feat: Implement real API integrations and Vercel KV persistence
cursoragent Sep 27, 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
9 changes: 9 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -1,3 +1,12 @@
# Top-level env used by scripts
API_PORT=8080
WEB_PORT=3000

# Backend database (apps/api)
DATABASE_URL=sqlite:///data/cc.db

# Optional keys; recommended to add via UI Settings → Service Tokens
# OPENAI_API_KEY=
# =============================================================================
# CC-LOVABLE ENVIRONMENT CONFIGURATION
# =============================================================================
Expand Down
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)

33 changes: 33 additions & 0 deletions .github/workflows/auto-publish.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
name: Auto Publish on Merge to Main

on:
push:
branches: ["main"]

jobs:
vercel-deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 18
- name: Install Vercel CLI
run: npm i -g vercel@latest
- name: Pull Vercel env
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
run: vercel build --prod --token "$VERCEL_TOKEN"
env:
VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }}
- name: Deploy
run: vercel deploy --prebuilt --prod --token "$VERCEL_TOKEN" | tee deploy_url.txt
env:
VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }}
- name: Output URL
run: echo "Production URL: $(cat deploy_url.txt)"

19 changes: 19 additions & 0 deletions .github/workflows/pr-ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
name: PR CI (Build & Preview)

on:
pull_request:
branches: ["main"]

jobs:
build-web:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 18
- name: Install deps
run: npm install
- name: Build web
run: npm run build

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 & Prod)

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" --cwd apps/web
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" --cwd apps/web
env:
VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }}

- name: Deploy (preview)
id: deploy_preview
run: |
url=$(vercel deploy --prebuilt --token "$VERCEL_TOKEN" --cwd apps/web --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" --cwd apps/web
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 --token "$VERCEL_TOKEN" --cwd apps/web
env:
VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }}

- name: Deploy (production)
id: deploy_prod
run: |
url=$(vercel deploy --prebuilt --prod --token "$VERCEL_TOKEN" --cwd apps/web --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 }}"

101 changes: 101 additions & 0 deletions .vercelignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
# Vercel ignore file
# Ignore files that shouldn't be deployed

# Development files
.env.local
.env.development
.env.test

# Build artifacts
.next/
out/
dist/
build/

# Dependencies
node_modules/
.venv/
venv/

# Logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*

# Runtime data
pids
*.pid
*.seed
*.pid.lock

# Coverage directory used by tools like istanbul
coverage/

# nyc test coverage
.nyc_output

# Dependency directories
jspm_packages/

# Optional npm cache directory
.npm

# Optional REPL history
.node_repl_history

# Output of 'npm pack'
*.tgz

# Yarn Integrity file
.yarn-integrity

# dotenv environment variables file
.env

# IDE files
.vscode/
.idea/
*.swp
*.swo

# OS generated files
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db

# Python files (for backend)
*.py
*.pyc
__pycache__/
*.egg-info/

# Database files
*.db
*.sqlite
*.sqlite3

# Scripts
scripts/
*.sh

# Documentation
README.md
*.md
docs/

# Git
.git/
.gitignore

# Test files
test/
tests/
*.test.js
*.test.ts
*.spec.js
*.spec.ts
Loading