not-cursor / index.html
NahFam13's picture
Add 2 files
f86213b verified
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>AI-Powered Development Environment</title>
<script src="https://cdn.tailwindcss.com"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<style>
.resize-handle {
width: 4px;
background-color: rgba(156, 163, 175, 0.2);
cursor: col-resize;
transition: background-color 0.2s;
}
.resize-handle:hover {
background-color: rgba(156, 163, 175, 0.5);
}
.code-block {
font-family: 'Courier New', Courier, monospace;
background-color: #1e293b;
color: #f8fafc;
padding: 0.5rem;
border-radius: 0.25rem;
overflow-x: auto;
}
.tab-active {
border-bottom: 2px solid #3b82f6;
color: #3b82f6;
}
.mermaid-diagram {
background-color: white;
border-radius: 0.5rem;
padding: 1rem;
min-height: 300px;
}
.terminal {
background-color: #1e293b;
color: #f8fafc;
font-family: 'Courier New', Courier, monospace;
padding: 0.5rem;
border-radius: 0.25rem;
height: 100%;
overflow-y: auto;
}
.file-explorer {
height: calc(100vh - 150px);
overflow-y: auto;
}
.chat-message {
max-width: 80%;
}
.chat-container {
height: calc(100vh - 180px);
overflow-y: auto;
}
.cursor-blink {
animation: blink 1s step-end infinite;
}
@keyframes blink {
from, to { opacity: 1; }
50% { opacity: 0; }
}
.file-item.selected {
background-color: #e2e8f0;
}
.project-item.selected {
background-color: #e2e8f0;
}
</style>
</head>
<body class="bg-gray-100 text-gray-800 h-screen flex flex-col">
<!-- Top Navigation -->
<header class="bg-white shadow-sm py-2 px-4 flex items-center justify-between">
<div class="flex items-center space-x-4">
<div class="flex items-center">
<i class="fas fa-code text-blue-500 text-2xl mr-2"></i>
<h1 class="text-xl font-bold text-gray-800">AI Dev Environment</h1>
</div>
<div class="hidden md:flex space-x-4">
<button class="px-3 py-1 rounded hover:bg-gray-100">File</button>
<button class="px-3 py-1 rounded hover:bg-gray-100">Edit</button>
<button class="px-3 py-1 rounded hover:bg-gray-100">View</button>
<button class="px-3 py-1 rounded hover:bg-gray-100">Tools</button>
<button class="px-3 py-1 rounded hover:bg-gray-100">Help</button>
</div>
</div>
<div class="flex items-center space-x-3">
<div class="relative">
<input type="text" placeholder="Search projects..." class="pl-8 pr-4 py-1 border rounded-lg text-sm w-64">
<i class="fas fa-search absolute left-2 top-2 text-gray-400"></i>
</div>
<button class="bg-blue-500 hover:bg-blue-600 text-white px-4 py-1 rounded-lg text-sm flex items-center">
<i class="fas fa-user-circle mr-2"></i>
<span>Account</span>
</button>
</div>
</header>
<!-- Main Content Area -->
<div class="flex flex-1 overflow-hidden">
<!-- Left Sidebar - Projects -->
<div class="w-64 bg-white shadow-sm flex flex-col">
<div class="p-4 border-b">
<button id="newProjectBtn" class="w-full bg-blue-500 hover:bg-blue-600 text-white py-2 rounded-lg flex items-center justify-center">
<i class="fas fa-plus mr-2"></i>
<span>New Project</span>
</button>
</div>
<div class="p-2 border-b flex justify-between items-center">
<h3 class="font-medium">Projects</h3>
<button class="text-gray-500 hover:text-gray-700">
<i class="fas fa-ellipsis-h"></i>
</button>
</div>
<div class="overflow-y-auto flex-1" id="projectsList">
<div class="project-item p-3 hover:bg-gray-100 cursor-pointer border-b flex items-center">
<i class="fas fa-folder text-yellow-400 mr-3"></i>
<div>
<div class="font-medium">E-commerce Platform</div>
<div class="text-xs text-gray-500">Python, React</div>
</div>
</div>
<div class="project-item p-3 hover:bg-gray-100 cursor-pointer border-b flex items-center">
<i class="fas fa-folder text-yellow-400 mr-3"></i>
<div>
<div class="font-medium">AI Chatbot</div>
<div class="text-xs text-gray-500">Node.js, TensorFlow</div>
</div>
</div>
<div class="project-item p-3 hover:bg-gray-100 cursor-pointer border-b flex items-center">
<i class="fas fa-folder text-yellow-400 mr-3"></i>
<div>
<div class="font-medium">Portfolio Website</div>
<div class="text-xs text-gray-500">HTML, CSS, JS</div>
</div>
</div>
<div class="project-item p-3 hover:bg-gray-100 cursor-pointer border-b flex items-center">
<i class="fas fa-folder text-yellow-400 mr-3"></i>
<div>
<div class="font-medium">Data Analysis Tool</div>
<div class="text-xs text-gray-500">Python, Pandas</div>
</div>
</div>
<div class="project-item p-3 hover:bg-gray-100 cursor-pointer border-b flex items-center">
<i class="fas fa-folder text-yellow-400 mr-3"></i>
<div>
<div class="font-medium">Mobile App Backend</div>
<div class="text-xs text-gray-500">Go, MongoDB</div>
</div>
</div>
</div>
<div class="p-4 border-t">
<div class="text-sm text-gray-500 mb-2">AI Models</div>
<div class="space-y-2">
<div class="flex items-center justify-between p-2 bg-gray-100 rounded">
<div class="flex items-center">
<i class="fas fa-brain text-purple-500 mr-2"></i>
<span>GPT-4</span>
</div>
<div class="w-2 h-2 bg-green-500 rounded-full"></div>
</div>
<div class="flex items-center justify-between p-2 rounded hover:bg-gray-100">
<div class="flex items-center">
<i class="fas fa-robot text-blue-500 mr-2"></i>
<span>Claude 3</span>
</div>
<div class="w-2 h-2 bg-green-500 rounded-full"></div>
</div>
<div class="flex items-center justify-between p-2 rounded hover:bg-gray-100">
<div class="flex items-center">
<i class="fas fa-microchip text-red-500 mr-2"></i>
<span>Groq</span>
</div>
<div class="w-2 h-2 bg-green-500 rounded-full"></div>
</div>
<div class="flex items-center justify-between p-2 rounded hover:bg-gray-100">
<div class="flex items-center">
<i class="fas fa-server text-green-500 mr-2"></i>
<span>Ollama</span>
</div>
<div class="w-2 h-2 bg-gray-500 rounded-full"></div>
</div>
</div>
</div>
</div>
<!-- Resizable Handle -->
<div class="resize-handle"></div>
<!-- Main Content -->
<div class="flex-1 flex flex-col overflow-hidden">
<!-- Tabs -->
<div class="bg-white border-b">
<div class="flex space-x-6 px-4">
<button class="tab-button py-3 tab-active">AI Chat</button>
<button class="tab-button py-3">PRD</button>
<button class="tab-button py-3">Diagram</button>
<button class="tab-button py-3">Wireframe</button>
<button class="tab-button py-3">Files</button>
</div>
</div>
<!-- Tab Content -->
<div class="flex-1 flex overflow-hidden">
<!-- Left Panel - Chat/PRD/Diagram -->
<div class="flex-1 flex flex-col overflow-hidden">
<!-- AI Chat Content (default visible) -->
<div id="chatContent" class="flex-1 flex flex-col">
<div class="chat-container p-4 space-y-4" id="chatMessages">
<!-- AI Message -->
<div class="flex">
<div class="chat-message bg-blue-50 rounded-lg p-3">
<div class="flex items-center mb-1">
<div class="w-6 h-6 rounded-full bg-blue-500 flex items-center justify-center text-white mr-2">
<i class="fas fa-robot text-xs"></i>
</div>
<div class="font-medium">AI Assistant</div>
</div>
<div class="text-sm">
<p>Hello! I'm your AI development assistant. How can I help you with your project today?</p>
<p class="mt-2">I can help with:</p>
<ul class="list-disc pl-5 mt-1">
<li>Code generation and refactoring</li>
<li>Debugging assistance</li>
<li>Project documentation</li>
<li>Architecture diagrams</li>
<li>Environment setup</li>
</ul>
</div>
</div>
</div>
<!-- User Message -->
<div class="flex justify-end">
<div class="chat-message bg-gray-100 rounded-lg p-3">
<div class="flex items-center mb-1 justify-end">
<div class="font-medium mr-2">You</div>
<div class="w-6 h-6 rounded-full bg-gray-500 flex items-center justify-center text-white">
<i class="fas fa-user text-xs"></i>
</div>
</div>
<div class="text-sm">
Can you help me set up a Python project with FastAPI and PostgreSQL?
</div>
</div>
</div>
<!-- AI Message with Code -->
<div class="flex">
<div class="chat-message bg-blue-50 rounded-lg p-3">
<div class="flex items-center mb-1">
<div class="w-6 h-6 rounded-full bg-blue-500 flex items-center justify-center text-white mr-2">
<i class="fas fa-robot text-xs"></i>
</div>
<div class="font-medium">AI Assistant</div>
</div>
<div class="text-sm">
<p>Certainly! Here's how to set up a FastAPI project with PostgreSQL:</p>
<div class="code-block mt-2 mb-2">
<pre># First, create a virtual environment
python -m venv fastapi_env
source fastapi_env/bin/activate # On Windows use `fastapi_env\Scripts\activate`
# Install required packages
pip install fastapi uvicorn sqlalchemy psycopg2-binary python-dotenv
# Create a basic FastAPI app with PostgreSQL connection
# main.py
from fastapi import FastAPI
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
app = FastAPI()
# Database setup
DATABASE_URL = "postgresql://user:password@localhost:5432/mydatabase"
engine = create_engine(DATABASE_URL)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base = declarative_base()</pre>
</div>
<p class="mt-2">Would you like me to:</p>
<ol class="list-decimal pl-5 mt-1">
<li>Create the project structure for you?</li>
<li>Explain any part in more detail?</li>
<li>Generate a requirements.txt file?</li>
</ol>
</div>
</div>
</div>
</div>
<!-- Chat Input -->
<div class="p-4 border-t">
<div class="flex items-center space-x-2">
<button class="p-2 text-gray-500 hover:text-gray-700">
<i class="fas fa-paperclip"></i>
</button>
<div class="flex-1 relative">
<textarea id="chatInput" class="w-full border rounded-lg pl-4 pr-10 py-2 resize-none" rows="1" placeholder="Ask the AI to help with your project..."></textarea>
<button class="absolute right-2 bottom-2 text-gray-500 hover:text-blue-500">
<i class="fas fa-microphone"></i>
</button>
</div>
<button id="sendMessageBtn" class="p-2 bg-blue-500 text-white rounded-lg hover:bg-blue-600">
<i class="fas fa-paper-plane"></i>
</button>
</div>
<div class="flex justify-between mt-2 text-xs text-gray-500">
<div>
<button class="mr-2 hover:text-blue-500">Add context</button>
<button class="hover:text-blue-500">Select AI model</button>
</div>
<div>
<span id="tokenCount">Token count: 0/4000</span>
</div>
</div>
</div>
</div>
<!-- PRD Content (hidden by default) -->
<div id="prdContent" class="hidden flex-1 p-4 overflow-auto">
<div class="bg-white rounded-lg shadow p-4">
<h2 class="text-xl font-bold mb-4">Project Requirements Document</h2>
<div class="prose max-w-none">
<h3>1. Project Overview</h3>
<p>This project will create a FastAPI backend service with PostgreSQL database integration. The service will provide RESTful API endpoints for a future frontend application.</p>
<h3>2. Features</h3>
<ul>
<li>User authentication (JWT)</li>
<li>CRUD operations for core entities</li>
<li>Database migrations</li>
<li>API documentation (Swagger/OpenAPI)</li>
<li>Docker configuration</li>
</ul>
<h3>3. Technical Stack</h3>
<table class="min-w-full border">
<thead>
<tr class="bg-gray-50">
<th class="px-4 py-2 text-left">Component</th>
<th class="px-4 py-2 text-left">Technology</th>
</tr>
</thead>
<tbody>
<tr>
<td class="px-4 py-2 border">Backend Framework</td>
<td class="px-4 py-2 border">FastAPI</td>
</tr>
<tr>
<td class="px-4 py-2 border">Database</td>
<td class="px-4 py-2 border">PostgreSQL</td>
</tr>
<tr>
<td class="px-4 py-2 border">ORM</td>
<td class="px-4 py-2 border">SQLAlchemy</td>
</tr>
<tr>
<td class="px-4 py-2 border">Authentication</td>
<td class="px-4 py-2 border">JWT</td>
</tr>
</tbody>
</table>
<h3>4. API Endpoints</h3>
<div class="code-block">
<pre>GET /api/users - List all users
POST /api/users - Create new user
GET /api/users/{id} - Get user details
PUT /api/users/{id} - Update user
DELETE /api/users/{id} - Delete user</pre>
</div>
</div>
</div>
</div>
<!-- Diagram Content (hidden by default) -->
<div id="diagramContent" class="hidden flex-1 p-4 overflow-auto">
<div class="bg-white rounded-lg shadow p-4">
<div class="flex justify-between items-center mb-4">
<h2 class="text-xl font-bold">System Architecture Diagram</h2>
<div class="flex space-x-2">
<button class="px-3 py-1 bg-gray-100 rounded hover:bg-gray-200">
<i class="fas fa-download mr-1"></i> Export
</button>
<button class="px-3 py-1 bg-blue-500 text-white rounded hover:bg-blue-600">
<i class="fas fa-sync mr-1"></i> Regenerate
</button>
</div>
</div>
<div class="mermaid-diagram">
<div class="flex justify-center items-center h-64 bg-gray-50 rounded border border-dashed border-gray-300">
<div class="text-center">
<i class="fas fa-diagram-project text-4xl text-gray-400 mb-2"></i>
<p class="text-gray-500">Mermaid diagram will appear here</p>
<p class="text-sm text-gray-400 mt-2">Example: Flowchart, Sequence Diagram, Class Diagram, etc.</p>
</div>
</div>
</div>
<div class="mt-4">
<label class="block text-sm font-medium text-gray-700 mb-1">Mermaid Code</label>
<textarea class="w-full h-32 border rounded p-2 font-mono text-sm" placeholder="Enter Mermaid diagram code here...">flowchart TD
A[Client] -->|HTTP Request| B(FastAPI Server)
B -->|Query| C[(PostgreSQL)]
C -->|Results| B
B -->|Response| A</textarea>
</div>
</div>
</div>
</div>
<!-- Resizable Handle -->
<div class="resize-handle"></div>
<!-- Right Panel - Files/Terminal -->
<div class="w-80 bg-white flex flex-col border-l">
<!-- Files Tab -->
<div class="p-3 border-b">
<div class="flex justify-between items-center">
<h3 class="font-medium">Project Files</h3>
<div class="flex space-x-2">
<button class="text-gray-500 hover:text-gray-700">
<i class="fas fa-sync-alt"></i>
</button>
<button class="text-gray-500 hover:text-gray-700">
<i class="fas fa-ellipsis-h"></i>
</button>
</div>
</div>
</div>
<div class="file-explorer p-2">
<div class="space-y-1" id="fileList">
<div class="file-item flex items-center p-1 hover:bg-gray-100 rounded cursor-pointer">
<i class="fas fa-folder text-yellow-400 mr-2 w-4 text-center"></i>
<span class="text-sm">fastapi_env</span>
</div>
<div class="file-item flex items-center p-1 hover:bg-gray-100 rounded cursor-pointer">
<i class="fas fa-file-code text-blue-400 mr-2 w-4 text-center"></i>
<span class="text-sm">main.py</span>
</div>
<div class="file-item flex items-center p-1 hover:bg-gray-100 rounded cursor-pointer">
<i class="fas fa-file-alt text-gray-400 mr-2 w-4 text-center"></i>
<span class="text-sm">requirements.txt</span>
</div>
<div class="file-item flex items-center p-1 hover:bg-gray-100 rounded cursor-pointer">
<i class="fas fa-file-alt text-gray-400 mr-2 w-4 text-center"></i>
<span class="text-sm">README.md</span>
</div>
<div class="file-item flex items-center p-1 hover:bg-gray-100 rounded cursor-pointer">
<i class="fas fa-file-alt text-purple-400 mr-2 w-4 text-center"></i>
<span class="text-sm">PROTOTYPE_LOG.md</span>
</div>
<div class="file-item flex items-center p-1 hover:bg-gray-100 rounded cursor-pointer">
<i class="fas fa-file-alt text-green-400 mr-2 w-4 text-center"></i>
<span class="text-sm">WORKFLOW_SUMMARY.md</span>
</div>
<div class="file-item flex items-center p-1 hover:bg-gray-100 rounded cursor-pointer">
<i class="fas fa-file-code text-blue-400 mr-2 w-4 text-center"></i>
<span class="text-sm">models.py</span>
</div>
<div class="file-item flex items-center p-1 hover:bg-gray-100 rounded cursor-pointer">
<i class="fas fa-file-code text-blue-400 mr-2 w-4 text-center"></i>
<span class="text-sm">schemas.py</span>
</div>
<div class="file-item flex items-center p-1 hover:bg-gray-100 rounded cursor-pointer">
<i class="fas fa-file-code text-blue-400 mr-2 w-4 text-center"></i>
<span class="text-sm">crud.py</span>
</div>
<div class="file-item flex items-center p-1 hover:bg-gray-100 rounded cursor-pointer">
<i class="fas fa-file-code text-blue-400 mr-2 w-4 text-center"></i>
<span class="text-sm">database.py</span>
</div>
</div>
</div>
<!-- Terminal Tab -->
<div class="p-3 border-t border-b">
<div class="flex justify-between items-center">
<h3 class="font-medium">Terminal</h3>
<div class="flex space-x-2">
<button class="text-gray-500 hover:text-gray-700">
<i class="fas fa-plus"></i>
</button>
<button class="text-gray-500 hover:text-gray-700">
<i class="fas fa-ellipsis-h"></i>
</button>
</div>
</div>
</div>
<div class="terminal p-2 flex-1" id="terminalOutput">
<div class="text-green-400">$ <span class="text-white">python -m venv fastapi_env</span></div>
<div class="text-green-400">$ <span class="text-white">source fastapi_env/bin/activate</span></div>
<div class="text-white">(fastapi_env) $ <span class="text-white">pip install fastapi uvicorn sqlalchemy psycopg2-binary</span></div>
<div class="text-gray-400 text-sm mt-1">Collecting fastapi</div>
<div class="text-gray-400 text-sm">Downloading fastapi-0.95.2-py3-none-any.whl (56 kB)</div>
<div class="text-gray-400 text-sm">━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 56.5/56.5 kB 1.2 MB/s eta 0:00:00</div>
<div class="text-gray-400 text-sm">...</div>
<div class="text-gray-400 text-sm">Successfully installed fastapi-0.95.2 sqlalchemy-2.0.15 uvicorn-0.22.0</div>
<div class="text-green-400 mt-2">(fastapi_env) $ <span class="text-white">uvicorn main:app --reload</span></div>
<div class="text-gray-400 text-sm">INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)</div>
<div class="text-gray-400 text-sm">INFO: Started reloader process [12345] using WatchFiles</div>
<div class="text-gray-400 text-sm">INFO: Started server process [12347]</div>
<div class="text-gray-400 text-sm">INFO: Waiting for application startup.</div>
<div class="text-gray-400 text-sm">INFO: Application startup complete.</div>
<div class="text-green-400 mt-2">(fastapi_env) $ <span class="cursor-blink"></span></div>
</div>
</div>
</div>
</div>
</div>
<!-- New Project Modal -->
<div id="newProjectModal" class="hidden fixed inset-0 bg-gray-600 bg-opacity-50 flex items-center justify-center z-50">
<div class="bg-white rounded-lg shadow-xl w-full max-w-md">
<div class="p-4 border-b">
<h3 class="text-lg font-medium">Create New Project</h3>
</div>
<div class="p-4 space-y-4">
<div>
<label class="block text-sm font-medium text-gray-700 mb-1">Project Name</label>
<input type="text" id="projectName" class="w-full border rounded-lg px-3 py-2" placeholder="My Awesome Project">
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-1">Project Description</label>
<textarea id="projectDescription" class="w-full border rounded-lg px-3 py-2" rows="3" placeholder="Brief description of your project..."></textarea>
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-1">Project Type</label>
<select id="projectType" class="w-full border rounded-lg px-3 py-2">
<option>Python</option>
<option>Node.js</option>
<option>React</option>
<option>Go</option>
<option>Other</option>
</select>
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-1">Project Location</label>
<div class="flex">
<input type="text" id="projectLocation" class="flex-1 border rounded-l-lg px-3 py-2" placeholder="/path/to/project">
<button id="browseLocationBtn" class="bg-gray-200 px-3 rounded-r-lg hover:bg-gray-300">
<i class="fas fa-folder-open"></i>
</button>
</div>
</div>
<div class="flex items-center">
<input type="checkbox" id="initGit" class="mr-2">
<label for="initGit" class="text-sm">Initialize Git repository</label>
</div>
<div class="flex items-center">
<input type="checkbox" id="createEnv" class="mr-2" checked>
<label for="createEnv" class="text-sm">Create virtual environment</label>
</div>
</div>
<div class="p-4 border-t flex justify-end space-x-3">
<button id="cancelProjectBtn" class="px-4 py-2 border rounded-lg hover:bg-gray-100">Cancel</button>
<button id="confirmProjectBtn" class="px-4 py-2 bg-blue-500 text-white rounded-lg hover:bg-blue-600">Create Project</button>
</div>
</div>
</div>
<script>
// Tab switching functionality
const tabButtons = document.querySelectorAll('.tab-button');
const tabContents = {
'chatContent': document.getElementById('chatContent'),
'prdContent': document.getElementById('prdContent'),
'diagramContent': document.getElementById('diagramContent')
};
tabButtons.forEach(button => {
button.addEventListener('click', () => {
// Remove active class from all tabs
tabButtons.forEach(btn => btn.classList.remove('tab-active'));
// Add active class to clicked tab
button.classList.add('tab-active');
// Hide all content
Object.values(tabContents).forEach(content => content.classList.add('hidden'));
// Show corresponding content
const tabName = button.textContent.trim();
if (tabName === 'AI Chat') tabContents['chatContent'].classList.remove('hidden');
else if (tabName === 'PRD') tabContents['prdContent'].classList.remove('hidden');
else if (tabName === 'Diagram') tabContents['diagramContent'].classList.remove('hidden');
});
});
// New project modal functionality
const newProjectBtn = document.getElementById('newProjectBtn');
const newProjectModal = document.getElementById('newProjectModal');
const cancelProjectBtn = document.getElementById('cancelProjectBtn');
const confirmProjectBtn = document.getElementById('confirmProjectBtn');
const browseLocationBtn = document.getElementById('browseLocationBtn');
const projectsList = document.getElementById('projectsList');
newProjectBtn.addEventListener('click', () => {
newProjectModal.classList.remove('hidden');
});
cancelProjectBtn.addEventListener('click', () => {
newProjectModal.classList.add('hidden');
});
// Handle project creation
confirmProjectBtn.addEventListener('click', () => {
const projectName = document.getElementById('projectName').value.trim();
const projectDescription = document.getElementById('projectDescription').value.trim();
const projectType = document.getElementById('projectType').value;
const projectLocation = document.getElementById('projectLocation').value.trim();
const initGit = document.getElementById('initGit').checked;
const createEnv = document.getElementById('createEnv').checked;
if (!projectName) {
alert('Please enter a project name');
return;
}
// Create new project item
const projectItem = document.createElement('div');
projectItem.className = 'project-item p-3 hover:bg-gray-100 cursor-pointer border-b flex items-center';
projectItem.innerHTML = `
<i class="fas fa-folder text-yellow-400 mr-3"></i>
<div>
<div class="font-medium">${projectName}</div>
<div class="text-xs text-gray-500">${projectType}</div>
</div>
`;
// Add click handler for the new project
projectItem.addEventListener('click', () => {
document.querySelectorAll('.project-item').forEach(item => item.classList.remove('selected'));
projectItem.classList.add('selected');
// Update file explorer with project files
updateFileExplorer(projectName, projectType);
// Update terminal with project-specific commands
updateTerminal(projectName, projectType);
});
projectsList.prepend(projectItem);
newProjectModal.classList.add('hidden');
// Clear form
document.getElementById('projectName').value = '';
document.getElementById('projectDescription').value = '';
document.getElementById('projectLocation').value = '';
// Show success message
alert(`Project "${projectName}" created successfully!`);
});
// Simulate file browsing (in a real app, this would use the file system API)
browseLocationBtn.addEventListener('click', () => {
document.getElementById('projectLocation').value = '/Users/username/projects/' +
document.getElementById('projectName').value.trim().toLowerCase().replace(/\s+/g, '-');
});
// Update file explorer based on selected project
function updateFileExplorer(projectName, projectType) {
const fileList = document.getElementById('fileList');
fileList.innerHTML = '';
// Common files for all project types
const commonFiles = [
{ name: 'README.md', icon: 'file-alt', color: 'gray-400' },
{ name: '.gitignore', icon: 'file-alt', color: 'gray-400' }
];
// Project type specific files
let projectFiles = [];
if (projectType === 'Python') {
projectFiles = [
{ name: 'main.py', icon: 'file-code', color: 'blue-400' },
{ name: 'requirements.txt', icon: 'file-alt', color: 'gray-400' },
{ name: 'venv', icon: 'folder', color: 'yellow-400' }
];
} else if (projectType === 'Node.js') {
projectFiles = [
{ name: 'index.js', icon: 'file-code', color: 'blue-400' },
{ name: 'package.json', icon: 'file-alt', color: 'gray-400' },
{ name: 'node_modules', icon: 'folder', color: 'yellow-400' }
];
} else if (projectType === 'React') {
projectFiles = [
{ name: 'src', icon: 'folder', color: 'yellow-400' },
{ name: 'package.json', icon: 'file-alt', color: 'gray-400' },
{ name: 'public', icon: 'folder', color: 'yellow-400' }
];
}
// Add all files to the explorer
[...projectFiles, ...commonFiles].forEach(file => {
const fileItem = document.createElement('div');
fileItem.className = 'file-item flex items-center p-1 hover:bg-gray-100 rounded cursor-pointer';
fileItem.innerHTML = `
<i class="fas fa-${file.icon} text-${file.color} mr-2 w-4 text-center"></i>
<span class="text-sm">${file.name}</span>
`;
// Add click handler for file selection
fileItem.addEventListener('click', () => {
document.querySelectorAll('.file-item').forEach(item => item.classList.remove('selected'));
fileItem.classList.add('selected');
// In a real app, this would load the file content
console.log(`File selected: ${file.name}`);
});
fileList.appendChild(fileItem);
});
}
// Update terminal with project-specific commands
function updateTerminal(projectName, projectType) {
const terminalOutput = document.getElementById('terminalOutput');
if (projectType === 'Python') {
terminalOutput.innerHTML = `
<div class="text-green-400">$ <span class="text-white">cd ${projectName.toLowerCase().replace(/\s+/g, '-')}</span></div>
<div class="text-green-400">$ <span class="text-white">python -m venv venv</span></div>
<div class="text-green-400">$ <span class="text-white">source venv/bin/activate</span></div>
<div class="text-white">(venv) $ <span class="text-white">pip install -r requirements.txt</span></div>
<div class="text-white">(venv) $ <span class="text-white">python main.py</span></div>
<div class="text-white">(venv) $ <span class="cursor-blink">█</span></div>
`;
} else if (projectType === 'Node.js') {
terminalOutput.innerHTML = `
<div class="text-green-400">$ <span class="text-white">cd ${projectName.toLowerCase().replace(/\s+/g, '-')}</span></div>
<div class="text-green-400">$ <span class="text-white">npm install</span></div>
<div class="text-green-400">$ <span class="text-white">node index.js</span></div>
<div class="text-green-400">$ <span class="cursor-blink">█</span></div>
`;
}
// Auto-scroll to bottom
terminalOutput.scrollTop = terminalOutput.scrollHeight;
}
// Chat functionality
const chatInput = document.getElementById('chatInput');
const sendMessageBtn = document.getElementById('sendMessageBtn');
const chatMessages = document.getElementById('chatMessages');
const tokenCount = document.getElementById('tokenCount');
function sendMessage() {
const message = chatInput.value.trim();
if (message) {
// Add user message to chat
const userMessage = document.createElement('div');
userMessage.className = 'flex justify-end';
userMessage.innerHTML = `
<div class="chat-message bg-gray-100 rounded-lg p-3">
<div class="flex items-center mb-1 justify-end">
<div class="font-medium mr-2">You</div>
<div class="w-6 h-6 rounded-full bg-gray-500 flex items-center justify-center text-white">
<i class="fas fa-user text-xs"></i>
</div>
</div>
<div class="text-sm">${message}</div>
</div>
`;
chatMessages.appendChild(userMessage);
// Clear input
chatInput.value = '';
chatInput.style.height = 'auto';
// Update token count (simplified - in a real app, you'd use a tokenizer)
const tokens = Math.min(Math.ceil(message.length / 4), 4000);
tokenCount.textContent = `Token count: ${tokens}/4000`;
// Show "AI is typing" indicator
const typingIndicator = document.createElement('div');
typingIndicator.className = 'flex';
typingIndicator.innerHTML = `
<div class="chat-message bg-blue-50 rounded-lg p-3">
<div class="flex items-center mb-1">
<div class="w-6 h-6 rounded-full bg-blue-500 flex items-center justify-center text-white mr-2">
<i class="fas fa-robot text-xs"></i>
</div>
<div class="font-medium">AI Assistant</div>
</div>
<div class="text-sm">
<i class="fas fa-circle-notch fa-spin"></i> Thinking...
</div>
</div>
`;
chatMessages.appendChild(typingIndicator);
// Scroll to bottom
chatMessages.scrollTop = chatMessages.scrollHeight;
// Simulate AI response after a delay
setTimeout(() => {
// Remove typing indicator
typingIndicator.remove();
// Add AI response
const aiResponse = document.createElement('div');
aiResponse.className = 'flex';
aiResponse.innerHTML = `
<div class="chat-message bg-blue-50 rounded-lg p-3">
<div class="flex items-center mb-1">
<div class="w-6 h-6 rounded-full bg-blue-500 flex items-center justify-center text-white mr-2">
<i class="fas fa-robot text-xs"></i>
</div>
<div class="font-medium">AI Assistant</div>
</div>
<div class="text-sm">
<p>Here's a response to your query about "${message.substring(0, 20)}...":</p>
<p class="mt-2">In a real implementation, this would be the AI's actual response based on your query.</p>
</div>
</div>
`;
chatMessages.appendChild(aiResponse);
// Scroll to bottom again
chatMessages.scrollTop = chatMessages.scrollHeight;
}, 1500);
}
}
sendMessageBtn.addEventListener('click', sendMessage);
chatInput.addEventListener('keypress', (e) => {
if (e.key === 'Enter' && !e.shiftKey) {
e.preventDefault();
sendMessage();
}
});
// Auto-resize textarea
chatInput.addEventListener('input', function() {
this.style.height = 'auto';
this.style.height = (this.scrollHeight) + 'px';
});
// Initialize project selection
document.querySelector('.project-item').click();
</script>
<p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=NahFam13/not-cursor" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
</html>