Add Next.js frontends with health endpoints

This commit is contained in:
Alexa Amundson
2025-11-21 00:18:26 -06:00
parent 6722782f47
commit 5f958e3755
28 changed files with 397 additions and 0 deletions

View File

@@ -0,0 +1,3 @@
{
"extends": ["next/core-web-vitals"]
}

View File

@@ -0,0 +1,14 @@
:root {
color-scheme: dark;
font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
background-color: #0f1115;
color: #f5f6f8;
}
a {
color: inherit;
}
body {
margin: 0;
}

View File

@@ -0,0 +1,8 @@
import { NextResponse } from "next/server";
export async function GET() {
return NextResponse.json({
service: "blackroad-os-prism-console",
status: "ok"
});
}

View File

@@ -0,0 +1,35 @@
import "./globals.css";
import type { ReactNode } from "react";
export const metadata = {
title: "BlackRoad OS Prism Console",
description: "Operator console for BlackRoad OS"
};
export default function RootLayout({ children }: { children: ReactNode }) {
return (
<html lang="en">
<body>
<div style={{ display: "flex", minHeight: "100vh" }}>
<aside
style={{
width: "240px",
borderRight: "1px solid #222",
padding: "1rem"
}}
>
<h1 style={{ fontSize: "1.1rem", marginBottom: "1rem" }}>
Prism Console
</h1>
<nav style={{ display: "flex", flexDirection: "column", gap: "0.5rem" }}>
<a href="/" style={{ textDecoration: "none" }}>Dashboard</a>
<a href="/agents" style={{ textDecoration: "none" }}>Agents</a>
<a href="/health" style={{ textDecoration: "none" }}>Health</a>
</nav>
</aside>
<main style={{ flex: 1, padding: "1.5rem" }}>{children}</main>
</div>
</body>
</html>
);
}

View File

@@ -0,0 +1,13 @@
export default function Page() {
return (
<div>
<h2>Prism Console</h2>
<p>Welcome to the BlackRoad OS operator console.</p>
<ul>
<li>Monitor services</li>
<li>Inspect agents</li>
<li>Trigger workflows</li>
</ul>
</div>
);
}

5
apps/prism-console/next-env.d.ts vendored Normal file
View File

@@ -0,0 +1,5 @@
/// <reference types="next" />
/// <reference types="next/image-types/global" />
// NOTE: This file should not be edited
// see https://nextjs.org/docs/basic-features/typescript for more information.

View File

@@ -0,0 +1,12 @@
/** @type {import('next').NextConfig} */
const nextConfig = {
output: "standalone",
experimental: {
appDir: true
},
env: {
API_URL: process.env.API_URL || "https://api.blackroad.systems"
}
};
export default nextConfig;

View File

@@ -0,0 +1,25 @@
{
"name": "blackroad-os-prism-console",
"version": "0.1.0",
"private": true,
"scripts": {
"dev": "next dev -p 8080",
"build": "next build",
"start": "next start -p 8080",
"lint": "next lint",
"health": "curl -f http://localhost:8080/health || exit 1"
},
"dependencies": {
"next": "14.2.3",
"react": "18.3.1",
"react-dom": "18.3.1"
},
"devDependencies": {
"@types/node": "^20.11.0",
"@types/react": "^18.3.0",
"@types/react-dom": "^18.3.0",
"eslint": "^9.0.0",
"eslint-config-next": "^15.0.0",
"typescript": "^5.6.0"
}
}

View File

@@ -0,0 +1,19 @@
{
"compilerOptions": {
"target": "es5",
"lib": ["dom", "dom.iterable", "esnext"],
"allowJs": true,
"skipLibCheck": true,
"strict": true,
"noEmit": true,
"esModuleInterop": true,
"module": "esnext",
"moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "preserve",
"incremental": true
},
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
"exclude": ["node_modules"]
}