Skip to content

Commit 64b0017

Browse files
committed
Rebrand to CodeAbyss + wire frontend to production backend
1 parent d1fcf1a commit 64b0017

24 files changed

Lines changed: 105 additions & 105 deletions

.env.example

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# NovaForge local configuration. Copy to .env.local for web and .env for services.
1+
# codeabyss local configuration. Copy to .env.local for web and .env for services.
22

33
# Web
44
NEXT_PUBLIC_API_URL=http://localhost:8787
@@ -11,12 +11,12 @@ GOOGLE_CLIENT_SECRET=
1111
# Node API
1212
NODE_API_PORT=8787
1313
JWT_SECRET=replace-with-a-long-random-string
14-
SQLITE_PATH=./data/novaforge.db
14+
SQLITE_PATH=./data/codeabyss.db
1515
WORKSPACE_ROOT=./workspaces
1616
ALLOWED_ORIGINS=http://localhost:3000,http://127.0.0.1:3000
1717
PYTHON_SERVICE_URL=http://127.0.0.1:8788
1818

19-
# AI providers. NovaForge works without paid APIs through Ollama.
19+
# AI providers. codeabyss works without paid APIs through Ollama.
2020
AI_PROVIDER=auto
2121
OLLAMA_BASE_URL=http://127.0.0.1:11434
2222
OLLAMA_MODEL=qwen2.5-coder:7b

How_its_done.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
# How NovaForge Is Done
1+
# How CodeAbyss Is Done
22

33
## Current Build
44

5-
NovaForge is a free-first local beta environment:
5+
CodeAbyss is a free-first local beta environment:
66

77
- `apps/web`: Next.js browser IDE with TailwindCSS, Monaco, xterm.js, and Framer Motion.
88
- `services/api-node`: Express API, WebSocket terminal, SQLite, AI provider routing, workspace files, and Docker sandbox execution.

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
# NovaForge – Free AI Cloud IDE & Online Compiler
1+
# CodeAbyss – Free AI Cloud IDE & Online Compiler
22

33
[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
44
[![Node 22+](https://img.shields.io/badge/Node-22%2B-green)](https://nodejs.org)
55
[![Next.js 15](https://img.shields.io/badge/Next.js-15-black)](https://nextjs.org)
66

7-
NovaForge is a **free, open-source, AI-powered cloud IDE** and autonomous coding agent. Write, run, and preview code in **8+ languages** directly in your browser — no signup required. Powered by free AI providers (Gemini, OpenRouter, Ollama).
7+
CodeAbyss is a **free, open-source, AI-powered cloud IDE** and autonomous coding agent. Write, run, and preview code in **8+ languages** directly in your browser — no signup required. Powered by free AI providers (Gemini, OpenRouter, Ollama).
88

99
## Features
1010

@@ -46,7 +46,7 @@ NovaForge is a **free, open-source, AI-powered cloud IDE** and autonomous coding
4646
## Quick Start
4747

4848
```powershell
49-
cd "$env:USERPROFILE\Desktop\NovaForge_Free_AI_IDE"
49+
cd "$env:USERPROFILE\Desktop\CodeAbyss_Free_AI_IDE"
5050
npm install
5151
Copy-Item .env.example .env
5252
npm run dev

apps/web/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"name": "@novaforge/web",
2+
"name": "@codeabyss/web",
33
"version": "0.1.0",
44
"private": true,
55
"scripts": {

apps/web/src/app/layout.tsx

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,29 +2,29 @@ import type { Metadata } from "next";
22
import "./globals.css";
33

44
export const metadata: Metadata = {
5-
title: "NovaForge – Free AI Cloud IDE & Online Code Editor",
6-
description: "NovaForge is a free, open-source AI-powered cloud IDE and online compiler. Write, run, and deploy code in 8+ languages with an autonomous AI coding agent. No signup required.",
7-
keywords: ["online compiler", "online IDE", "cloud IDE", "AI code editor", "free IDE", "code agent", "AI code", "online code editor", "web IDE", "NovaForge", "free compiler", "coding playground", "browser IDE"],
8-
authors: [{ name: "NovaForge", url: "https://github.com/AbyssalCoder/NovaForge_Free_AI_IDE" }],
5+
title: "CodeAbyss – Free AI Cloud IDE & Online Code Editor",
6+
description: "CodeAbyss is a free, open-source AI-powered cloud IDE and online compiler. Write, run, and deploy code in 8+ languages with an autonomous AI coding agent. No signup required.",
7+
keywords: ["online compiler", "online IDE", "cloud IDE", "AI code editor", "free IDE", "code agent", "AI code", "online code editor", "web IDE", "CodeAbyss", "free compiler", "coding playground", "browser IDE"],
8+
authors: [{ name: "CodeAbyss", url: "https://github.com/AbyssalCoder/CodeAbyss_Free_AI_IDE" }],
99
openGraph: {
10-
title: "NovaForge – Free AI Cloud IDE & Online Compiler",
10+
title: "CodeAbyss – Free AI Cloud IDE & Online Compiler",
1111
description: "Free AI-powered cloud IDE. Write, run & deploy code in 8+ languages with an autonomous coding agent. Python, JavaScript, TypeScript, Java, C++, Rust, HTML/CSS.",
12-
url: "https://novaforge.dev",
13-
siteName: "NovaForge",
12+
url: "https://CodeAbyss.dev",
13+
siteName: "CodeAbyss",
1414
type: "website",
1515
locale: "en_US",
1616
},
1717
twitter: {
1818
card: "summary_large_image",
19-
title: "NovaForge – Free AI Cloud IDE",
19+
title: "CodeAbyss – Free AI Cloud IDE",
2020
description: "Free AI-powered cloud IDE with autonomous coding agent. 8+ languages, zero setup.",
2121
},
2222
robots: {
2323
index: true,
2424
follow: true,
2525
googleBot: { index: true, follow: true },
2626
},
27-
alternates: { canonical: "https://novaforge.dev" },
27+
alternates: { canonical: "https://CodeAbyss.dev" },
2828
};
2929

3030
export default function RootLayout({
@@ -36,15 +36,15 @@ export default function RootLayout({
3636
<html lang="en" suppressHydrationWarning>
3737
<head>
3838
<meta name="google-site-verification" content="" />
39-
<link rel="canonical" href="https://novaforge.dev" />
39+
<link rel="canonical" href="https://CodeAbyss.dev" />
4040
<script
4141
type="application/ld+json"
4242
dangerouslySetInnerHTML={{
4343
__html: JSON.stringify({
4444
"@context": "https://schema.org",
4545
"@type": "WebApplication",
46-
name: "NovaForge",
47-
url: "https://novaforge.dev",
46+
name: "CodeAbyss",
47+
url: "https://CodeAbyss.dev",
4848
description: "Free AI-powered cloud IDE and online compiler with autonomous coding agent.",
4949
applicationCategory: "DeveloperApplication",
5050
operatingSystem: "Web",

apps/web/src/app/sitemap.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import type { MetadataRoute } from "next";
33
export default function sitemap(): MetadataRoute.Sitemap {
44
return [
55
{
6-
url: "https://novaforge.dev",
6+
url: "https://CodeAbyss.dev",
77
lastModified: new Date(),
88
changeFrequency: "weekly",
99
priority: 1,

apps/web/src/components/IDE.tsx

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@ type UserInfo = { id: string; username: string; role: string; plan: string } | n
4646

4747
function getSessionId(): string {
4848
if (typeof window === "undefined") return "ssr-placeholder";
49-
let sid = window.sessionStorage.getItem("novaforge_sid");
50-
if (!sid) { sid = "anon-" + Math.random().toString(36).slice(2, 10); window.sessionStorage.setItem("novaforge_sid", sid); }
49+
let sid = window.sessionStorage.getItem("CodeAbyss_sid");
50+
if (!sid) { sid = "anon-" + Math.random().toString(36).slice(2, 10); window.sessionStorage.setItem("CodeAbyss_sid", sid); }
5151
return sid;
5252
}
5353

@@ -109,12 +109,12 @@ export default function IDE() {
109109

110110
// Boot: check token, load settings, connect backend
111111
useEffect(() => {
112-
const savedKey = window.localStorage.getItem("novaforge_gemini_key") || "";
112+
const savedKey = window.localStorage.getItem("CodeAbyss_gemini_key") || "";
113113
if (savedKey) { setApiKey(savedKey); setProvider("auto"); }
114114

115115
// Load local settings
116116
try {
117-
const s = JSON.parse(window.localStorage.getItem("novaforge_settings") || "{}");
117+
const s = JSON.parse(window.localStorage.getItem("CodeAbyss_settings") || "{}");
118118
if (s.editor_font_size) setEditorFontSize(s.editor_font_size);
119119
} catch {}
120120

@@ -142,7 +142,7 @@ export default function IDE() {
142142
}, []);
143143

144144
useEffect(() => {
145-
if (apiKey) window.localStorage.setItem("novaforge_gemini_key", apiKey);
145+
if (apiKey) window.localStorage.setItem("CodeAbyss_gemini_key", apiKey);
146146
}, [apiKey]);
147147

148148
// Refresh workspace when workspaceId changes (login/logout)
@@ -333,7 +333,7 @@ export default function IDE() {
333333
<div className="fixed inset-0 z-50 flex items-center justify-center bg-[#05070d]">
334334
<div className="flex flex-col items-center gap-3">
335335
<Sparkles className="h-8 w-8 animate-pulse text-cyanForge" />
336-
<p className="text-sm text-slate-400">Loading NovaForge...</p>
336+
<p className="text-sm text-slate-400">Loading CodeAbyss...</p>
337337
</div>
338338
</div>
339339
)}
@@ -345,7 +345,7 @@ export default function IDE() {
345345
<Sparkles className="h-5 w-5 text-cyanForge" />
346346
</div>
347347
<div>
348-
<h1 className="text-xl font-semibold tracking-wide text-white md:text-2xl">NovaForge</h1>
348+
<h1 className="text-xl font-semibold tracking-wide text-white md:text-2xl">CodeAbyss</h1>
349349
<p className="text-xs text-slate-400">{status}</p>
350350
</div>
351351
</div>
@@ -467,7 +467,7 @@ export default function IDE() {
467467
<div className="mt-auto grid grid-cols-2 gap-2 pt-4">
468468
<ActionButton icon={<Heart className="h-4 w-4" />} label="Donate" onClick={() => setShowDonation(true)} accent />
469469
<ActionButton icon={<Crown className="h-4 w-4" />} label="PRO" onClick={() => setShowSubscription(true)} />
470-
<ActionButton icon={<Info className="h-4 w-4" />} label="About" onClick={() => showToast("NovaForge IDE v1.0 – Free & Open Source")} />
470+
<ActionButton icon={<Info className="h-4 w-4" />} label="About" onClick={() => showToast("CodeAbyss IDE v1.0 – Free & Open Source")} />
471471
<ActionButton icon={<Settings className="h-4 w-4" />} label="Settings" onClick={() => setShowSettings(true)} />
472472
</div>
473473
</aside>
@@ -519,7 +519,7 @@ export default function IDE() {
519519
className="w-52 rounded border border-slate-800 bg-slate-950 px-2 py-1 text-xs text-slate-300" />
520520
</div>
521521
{previewUrl ? (
522-
<iframe title="NovaForge preview" src={previewUrl} className="h-full min-h-[170px] w-full bg-white" sandbox="allow-scripts" />
522+
<iframe title="CodeAbyss preview" src={previewUrl} className="h-full min-h-[170px] w-full bg-white" sandbox="allow-scripts" />
523523
) : (
524524
<div className="flex h-[170px] items-center justify-center text-xs text-slate-500">
525525
Enter a URL above to preview
@@ -586,7 +586,7 @@ function ToolPane({
586586
if (activeTab === "Home") {
587587
return (
588588
<div className="mt-3 rounded-md border border-slate-800 bg-slate-950/50 p-3 text-xs text-slate-400">
589-
<div className="flex items-center gap-2 text-slate-100"><Home className="h-4 w-4 text-cyanForge" /> NovaForge IDE</div>
589+
<div className="flex items-center gap-2 text-slate-100"><Home className="h-4 w-4 text-cyanForge" /> CodeAbyss IDE</div>
590590
<p className="mt-2">Create files, run code in Docker sandboxes, and use AI models with your own API key.</p>
591591
<p className="mt-1 text-slate-500">Ctrl+S to save · Ctrl+Enter to run</p>
592592
</div>
@@ -694,14 +694,14 @@ function commandFor(file: string) {
694694
}
695695

696696
function starterContentFor(file: string) {
697-
if (file.endsWith(".py")) return "print('Hello from NovaForge')\n";
698-
if (file.endsWith(".c")) return '#include <stdio.h>\n\nint main(void) {\n printf("Hello from NovaForge C\\n");\n return 0;\n}\n';
699-
if (file.endsWith(".cpp")) return '#include <iostream>\n\nint main() {\n std::cout << "Hello from NovaForge C++" << std::endl;\n return 0;\n}\n';
700-
if (file.endsWith(".java")) return 'public class Main {\n public static void main(String[] args) {\n System.out.println("Hello from NovaForge Java");\n }\n}\n';
701-
if (file.endsWith(".rs")) return 'fn main() {\n println!("Hello from NovaForge Rust");\n}\n';
702-
if (file.endsWith(".html")) return "<!doctype html>\n<html><body><h1>Hello from NovaForge</h1></body></html>\n";
697+
if (file.endsWith(".py")) return "print('Hello from CodeAbyss')\n";
698+
if (file.endsWith(".c")) return '#include <stdio.h>\n\nint main(void) {\n printf("Hello from CodeAbyss C\\n");\n return 0;\n}\n';
699+
if (file.endsWith(".cpp")) return '#include <iostream>\n\nint main() {\n std::cout << "Hello from CodeAbyss C++" << std::endl;\n return 0;\n}\n';
700+
if (file.endsWith(".java")) return 'public class Main {\n public static void main(String[] args) {\n System.out.println("Hello from CodeAbyss Java");\n }\n}\n';
701+
if (file.endsWith(".rs")) return 'fn main() {\n println!("Hello from CodeAbyss Rust");\n}\n';
702+
if (file.endsWith(".html")) return "<!doctype html>\n<html><body><h1>Hello from CodeAbyss</h1></body></html>\n";
703703
if (file.endsWith(".css")) return "body {\n font-family: system-ui, sans-serif;\n}\n";
704-
return "console.log('Hello from NovaForge');\n";
704+
return "console.log('Hello from CodeAbyss');\n";
705705
}
706706

707707
function quote(v: string) { return `'${v.replaceAll("'", "'\\''")}'`; }

apps/web/src/components/agent-panel.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ export function AgentPanel({ provider, apiKey, files, workspaceId = "demo-js", o
9797
{
9898
id: nextId(),
9999
role: "system",
100-
content: "NovaForge Agent is ready. Describe what you want to build — I'll generate the full project and write it to your workspace.",
100+
content: "CodeAbyss Agent is ready. Describe what you want to build — I'll generate the full project and write it to your workspace.",
101101
timestamp: new Date(),
102102
},
103103
]);
@@ -162,7 +162,7 @@ export function AgentPanel({ provider, apiKey, files, workspaceId = "demo-js", o
162162
method: "POST",
163163
headers: {
164164
"content-type": "application/json",
165-
...(apiKey ? { "x-novaforge-api-key": apiKey } : {}),
165+
...(apiKey ? { "x-CodeAbyss-api-key": apiKey } : {}),
166166
},
167167
body: JSON.stringify({ provider, prompt: text, projectId: workspaceId, files }),
168168
});
@@ -442,7 +442,7 @@ export function AgentPanel({ provider, apiKey, files, workspaceId = "demo-js", o
442442
<div className="flex items-center justify-between border-b border-slate-800 px-3 py-2">
443443
<div className="flex items-center gap-2 text-sm font-medium text-slate-100">
444444
<Sparkles className="h-4 w-4 text-cyanForge" />
445-
NovaForge Agent
445+
CodeAbyss Agent
446446
</div>
447447
<div className="flex items-center gap-1.5">
448448
<span className="flex items-center gap-1 rounded-md border border-mintForge/30 bg-mintForge/10 px-1.5 py-0.5 text-[10px] font-mono text-mintForge">
@@ -467,7 +467,7 @@ export function AgentPanel({ provider, apiKey, files, workspaceId = "demo-js", o
467467
value={input}
468468
onChange={(e) => setInput(e.target.value)}
469469
onKeyDown={handleKeyDown}
470-
placeholder="Ask NovaForge to build something..."
470+
placeholder="Ask CodeAbyss to build something..."
471471
rows={1}
472472
className="flex-1 resize-none bg-transparent text-xs text-slate-200 outline-none placeholder:text-slate-500"
473473
style={{ minHeight: "20px", maxHeight: "80px" }}

apps/web/src/components/donation-modal.tsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ export function DonationModal({ open, onClose }: Props) {
3737
}
3838

3939
function copyUPI() {
40-
navigator.clipboard.writeText("novaforge@upi");
40+
navigator.clipboard.writeText("CodeAbyss@upi");
4141
setCopied(true);
4242
setTimeout(() => setCopied(false), 2000);
4343
}
@@ -66,7 +66,7 @@ export function DonationModal({ open, onClose }: Props) {
6666
<Heart className="h-16 w-16 text-pink-500" fill="currentColor" />
6767
</motion.div>
6868
<h3 className="text-xl font-bold text-white">Thank You!</h3>
69-
<p className="text-sm text-slate-400">Your support means everything to NovaForge.</p>
69+
<p className="text-sm text-slate-400">Your support means everything to CodeAbyss.</p>
7070
</motion.div>
7171
) : showQR ? (
7272
<div className="flex flex-col items-center gap-4">
@@ -78,7 +78,7 @@ export function DonationModal({ open, onClose }: Props) {
7878
<Image src="/qr-donate.jpg" alt="Donation QR Code" width={192} height={192} className="h-48 w-48 object-contain" />
7979
</div>
8080
<div className="flex w-full items-center gap-2">
81-
<input value="novaforge@upi" readOnly className="flex-1 rounded-md border border-slate-700 bg-slate-950 px-3 py-2 text-sm text-slate-300" />
81+
<input value="CodeAbyss@upi" readOnly className="flex-1 rounded-md border border-slate-700 bg-slate-950 px-3 py-2 text-sm text-slate-300" />
8282
<button onClick={copyUPI} className="rounded-md border border-cyanForge/40 bg-cyanForge/10 px-3 py-2 text-sm text-cyanForge">
8383
{copied ? <CheckCircle2 className="h-4 w-4" /> : <Copy className="h-4 w-4" />}
8484
</button>
@@ -93,11 +93,11 @@ export function DonationModal({ open, onClose }: Props) {
9393
<div className="flex items-center justify-between">
9494
<div className="flex items-center gap-2">
9595
<Heart className="h-5 w-5 text-pink-500" />
96-
<h3 className="text-lg font-bold text-white">Support NovaForge</h3>
96+
<h3 className="text-lg font-bold text-white">Support CodeAbyss</h3>
9797
</div>
9898
<button onClick={onClose} className="text-slate-400 hover:text-white"><X className="h-5 w-5" /></button>
9999
</div>
100-
<p className="mt-2 text-sm text-slate-400">NovaForge is free forever. Your donation helps keep it running.</p>
100+
<p className="mt-2 text-sm text-slate-400">CodeAbyss is free forever. Your donation helps keep it running.</p>
101101
<div className="mt-4 grid grid-cols-4 gap-2">
102102
{presets.map((p) => (
103103
<button

apps/web/src/components/error-boundary.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ export class ErrorBoundary extends Component<Props, State> {
1616
}
1717

1818
componentDidCatch(error: Error, info: ErrorInfo) {
19-
console.error("NovaForge error:", error, info);
19+
console.error("CodeAbyss error:", error, info);
2020
}
2121

2222
render() {
@@ -28,7 +28,7 @@ export class ErrorBoundary extends Component<Props, State> {
2828
<p className="mb-4 text-sm text-slate-400">{this.state.error}</p>
2929
<button onClick={() => { this.setState({ hasError: false, error: "" }); window.location.reload(); }}
3030
className="rounded-md bg-cyan-500 px-6 py-2 text-sm font-semibold text-slate-950 hover:bg-cyan-400">
31-
Reload NovaForge
31+
Reload CodeAbyss
3232
</button>
3333
</div>
3434
</div>

0 commit comments

Comments
 (0)