Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
115 changes: 41 additions & 74 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# FullStack Agent - AI-Powered Full-Stack Development Platform
# Fulling - AI-Powered Full-Stack Development Platform

<div align="center">
<img src="https://img.shields.io/badge/Next.js-15.5.4-black?style=for-the-badge&logo=next.js" alt="Next.js"/>
Expand All @@ -10,13 +10,13 @@

## 🚀 Overview

You only need to create a sandbox, and then you can start coding with Claude Code; FullstackAgent has already taken care of everything else for you.
Fulling provides a sandboxed environment with Claude Code and PostgreSQL — everything you need to vibe code full-stack apps.

This includes:
* Creating a Next.js and shadcn/ui coding environment.
* Creating a PostgreSQL database, configuring the database connection information environment variable.
* Configuring all necessary Claude Code environment variables
* And creating an accessible domain name.
Fulling automatically sets up the following for your project, ready in a minute:
Next.js environment with shadcn/ui
• Dedicated PostgreSQL (pre-configured)
Claude Code (pre-configured)
• A live domain

<img width="1511" height="775" alt="image" src="https://github.com/user-attachments/assets/4683a22c-800b-45b7-91a3-6ed5114ea3c9" />

Expand All @@ -25,7 +25,7 @@ This includes:

### ✨ Key Features

The FullstackAgent project is designed to streamline the entire full-stack development lifecycle using an AI-centric approach. Its core capabilities are delivered through a highly orchestrated, self-contained development sandbox:
Fulling is designed to streamline the entire full-stack development lifecycle using an AI-centric approach. Its core capabilities are delivered through a highly orchestrated, self-contained development sandbox:

* **Pre-Configured AI Development Environment:**
* A complete, immediately usable development environment is provisioned, featuring **Next.js**, **shadcn/ui**, and the **Claude Code CLI**.
Expand Down Expand Up @@ -55,7 +55,7 @@ The FullstackAgent project is designed to streamline the entire full-stack devel
* Projects can be automatically deployed from the development sandbox to a high-availability production environment, leveraging the underlying **Kubernetes** infrastructure.
* This aims to abstract away the complexities of deployment, allowing the AI to manage the transition from development to live application.

## Star FullstackAgent on GitHub can get the latest released information.
## Star Fulling on GitHub can get the latest released information.

![star-demo](https://github.com/user-attachments/assets/bc497e0b-bd23-4ded-a231-1e382d56f92e)

Expand All @@ -70,7 +70,7 @@ The FullstackAgent project is designed to streamline the entire full-stack devel
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ │ │ │ │ │ │ Sandbox Pods │
│ Web Browser │────▶│ FullstackAgent │────▶│ Kubernetes │────▶│ (with Claude) │
│ Web Browser │────▶│ Fulling │────▶│ Kubernetes │────▶│ (with Claude) │
│ │ │ │ │ Cluster │ └─────────────────┘
└─────────────────┘ └─────────────────┘ └─────────────────┘ │
│ │ │
Expand Down Expand Up @@ -119,14 +119,13 @@ The FullstackAgent project is designed to streamline the entire full-stack devel

1. Clone the repository:
```bash
git clone https://github.com/FullstackAgent/FullstackAgent.git
cd FullstackAgent
git clone https://github.com/FullstackAgent/fulling.git
cd fulling
```

2. Install dependencies:
```bash
cd fullstack-agent
npm install
pnpm install
```

3. Set up environment variables:
Expand All @@ -136,89 +135,57 @@ Create `.env.local` file:
# Database
DATABASE_URL="postgresql://user:password@localhost:5432/fullstackagent"

# GitHub OAuth
GITHUB_CLIENT_ID="your-github-client-id"
GITHUB_CLIENT_SECRET="your-github-client-secret"

# NextAuth
NEXTAUTH_URL="http://localhost:3000"
NEXTAUTH_SECRET="your-nextauth-secret"
AUTH_TRUST_HOST=""

# Kubernetes
KUBECONFIG_PATH="./.secret/kubeconfig"
```
# GitHub OAuth (replace with your actual values)
GITHUB_CLIENT_ID=""
GITHUB_CLIENT_SECRET=""

4. Set up Kubernetes configuration:
# Sealos OAuth
SEALOS_JWT_SECRET=""

Place your kubeconfig file in `.secret/kubeconfig`
# job
DATABASE_LOCK_DURATION_SECONDS=""
MAX_DATABASES_PER_RECONCILE=""

5. Set up Claude Code environment:
SANDBOX_LOCK_DURATION_SECONDS=""
MAX_SANDBOXES_PER_RECONCILE=""

Create `.secret/.env` file with your Anthropic API credentials:
```env
ANTHROPIC_AUTH_TOKEN="your-anthropic-api-key"
ANTHROPIC_BASE_URL="your-anthropic-api-url"
# k8s resource
RUNTIME_IMAGE=""

CLAUDE_AUTO_STARTED=0
# aiproxy
AIPROXY_ENDPOINT=""
ANTHROPIC_BASE_URL=""

# Log
LOG_LEVEL="info"

# login
ENABLE_PASSWORD_AUTH=""
ENABLE_PASSWORD_AUTH=""
ENABLE_SEALOS_AUTH=""
```

6. Initialize the database:
6. Initialize database:
```bash
npx prisma generate
npx prisma db push
```

7. Run the development server:
```bash
npm run dev
pnpm run dev
```

Open [http://localhost:3000](http://localhost:3000) to access the application.

### Database Schema

```prisma
model User {
id String @id @default(cuid())
email String @unique
name String?
image String?
githubId String @unique
accessToken String? // Encrypted
projects Project[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}

model Project {
id String @id @default(cuid())
name String
description String?
githubRepo String?
status String @default("active")
databaseUrl String?
userId String
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
sandboxes Sandbox[]
environmentVariables EnvironmentVariable[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}

model Sandbox {
id String @id @default(cuid())
projectId String
project Project @relation(fields: [projectId], references: [id], onDelete: Cascade)
k8sNamespace String
k8sDeploymentName String
k8sServiceName String
publicUrl String?
ttydUrl String?
status String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
```
prisma/schema.prisma

## 🚢 Deployment

Expand Down Expand Up @@ -365,5 +332,5 @@ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file
---

<div align="center">
100% AI-generated code. Prompted by fanux. Thanks for Claude code & Opus & Sonnet 4.5 & GLM
100% AI-generated code. Prompted by fanux. Thanks for Claude code & Opus & Sonnet 4.5 & GLM & Kimi K2 Thinking
</div>
8 changes: 4 additions & 4 deletions app/login/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -50,9 +50,9 @@ export default function LoginPage() {
<div className="min-h-screen bg-black text-white flex items-center justify-center">
<Card className="w-full max-w-md bg-gray-900 border-gray-800">
<CardHeader>
<CardTitle className="text-2xl text-white">Welcome to FullStack Agent</CardTitle>
<CardTitle className="text-2xl text-white">Welcome to Fulling</CardTitle>
<CardDescription className="text-gray-400">
Sign in to get started. New users will be automatically registered.
You&apos;re one click away from creating your own full-stack app.
</CardDescription>
</CardHeader>
<CardContent className="space-y-4">
Expand Down Expand Up @@ -101,8 +101,8 @@ export default function LoginPage() {
</Button>

<p className="text-xs text-gray-500 text-center">
Don&apos;t have an account? Just enter your desired credentials and we&apos;ll create
one for&apos; you.
Don&apos;t have an account? Just enter your credentials and we&apos;ll create
one for you.
</p>
</form>

Expand Down
2 changes: 1 addition & 1 deletion app/projects/[id]/auth/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ function AuthPageContent() {
return (
<ConfigLayout
title="Authentication Configuration"
description="Configure OAuth providers and authentication settings"
description="Configure OAuth providers and other authentication settings"
loading={envLoading || projectLoading}
>
<div className="space-y-8">
Expand Down
4 changes: 2 additions & 2 deletions app/projects/[id]/environment/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -38,13 +38,13 @@ function EnvironmentPageContent() {
return (
<ConfigLayout
title="Environment Variables"
description="Configure custom environment variables for your application"
description="Configure environment variables for your application"
loading={envLoading || projectLoading}
>
<div className="space-y-6">
{/* Environment Variables Section */}
<EnvVarSection
title="Custom Variables"
title="Environment Variables"
description="Add application-specific environment variables"
variables={generalVars}
sandboxes={project?.sandboxes || []}
Expand Down
2 changes: 1 addition & 1 deletion app/projects/[id]/payment/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ function PaymentPageContent() {
return (
<ConfigLayout
title="Payment Configuration"
description="Configure payment processing providers for your application"
description="Configure payment providers for your application"
loading={envLoading || projectLoading}
>
<div className="space-y-8">
Expand Down
4 changes: 2 additions & 2 deletions app/projects/[id]/secrets/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -58,9 +58,9 @@ function SecretsPageContent() {
<h3 className="text-xs font-medium text-[#cccccc] mb-2">Security Best Practices</h3>
<ul className="text-xs text-[#858585] space-y-1 list-disc list-inside">
<li>All secret values are masked by default for security</li>
<li>Never commit secrets to version control</li>
<li>Never commit secrets to Git</li>
<li>Rotate secrets regularly to maintain security</li>
<li>Use different secrets for development and production environments</li>
{/*<li>Use different secrets for development and production environments</li>*/}
<li>Limit access to secrets to only those who need them</li>
</ul>
</div>
Expand Down
2 changes: 1 addition & 1 deletion components/config/env-var-section.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -293,7 +293,7 @@ export function EnvVarSection({
{/* Empty State */}
{variables.length === 0 && (
<div className="py-8 text-center text-sm text-[#858585]">
No environment variables configured
No secrets configured yet.
</div>
)}
</div>
Expand Down
4 changes: 2 additions & 2 deletions components/home-page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -82,11 +82,11 @@ export function HomePage() {
<div className="min-h-screen bg-black text-white flex flex-col items-center justify-center">
<div className="max-w-4xl mx-auto px-4 text-center">
<h1 className="text-6xl font-bold mb-6 bg-linear-to-r from-white to-gray-500 bg-clip-text text-transparent">
FullStack Agent
Fulling
</h1>
<p className="text-xl text-gray-400 mb-12">AI-Powered Full-Stack Development Platform</p>
<p className="text-lg text-gray-300 mb-8 max-w-2xl mx-auto">
Create, develop, and deploy production-ready web applications through natural language.
Create, develop, and deploy production-ready web applications using natural language.
Powered by Claude Code in isolated sandbox environments.
</p>

Expand Down
6 changes: 3 additions & 3 deletions components/terminal/terminal-toolbar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,7 @@ export function TerminalToolbar({
) : (
<>
<Play className="mr-2 h-3 w-3" />
Start Sandbox
Start
</>
)}
</DropdownMenuItem>
Expand All @@ -216,7 +216,7 @@ export function TerminalToolbar({
) : (
<>
<Square className="mr-2 h-3 w-3" />
Stop Project
Stop
</>
)}
</DropdownMenuItem>
Expand All @@ -230,7 +230,7 @@ export function TerminalToolbar({
className="text-xs cursor-pointer focus:bg-[#37373d] focus:text-white"
>
<Trash2 className="mr-2 h-3 w-3" />
Delete Project
Delete
</DropdownMenuItem>
</>
)}
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"name": "fullstack-agent",
"name": "Fulling",
"version": "0.4.1",
"private": true,
"scripts": {
Expand Down
Loading