Fix brand colors and add API error handling per code review
Co-authored-by: blackboxprogramming <118287761+blackboxprogramming@users.noreply.github.com>
This commit is contained in:
@@ -2,9 +2,9 @@
|
|||||||
|
|
||||||
import Link from 'next/link';
|
import Link from 'next/link';
|
||||||
|
|
||||||
const GRADIENT = 'linear-gradient(90deg, #FF6B2B, #FF2255, #CC00AA, #8844FF, #4488FF, #00D4FF)';
|
const GRADIENT = 'linear-gradient(135deg, #F5A623, #FF1D6C, #9C27B0, #2979FF)';
|
||||||
|
|
||||||
const ACCENT_COLORS = ['#FF6B2B', '#FF2255', '#CC00AA', '#8844FF', '#4488FF', '#00D4FF'];
|
const ACCENT_COLORS = ['#F5A623', '#FF1D6C', '#9C27B0', '#2979FF', '#F5A623', '#FF1D6C'];
|
||||||
|
|
||||||
const AGENTS = [
|
const AGENTS = [
|
||||||
{
|
{
|
||||||
@@ -82,7 +82,7 @@ const VALUES = [
|
|||||||
{
|
{
|
||||||
num: '02',
|
num: '02',
|
||||||
title: 'Contradictions are fuel',
|
title: 'Contradictions are fuel',
|
||||||
body: 'K(t) = C(t) · e^(λ|δ_t|). We don\'t resolve contradictions — we harness them. Creative energy scales super-linearly with tension.',
|
body: "K(t) = C(t) · e^(λ|δ_t|). We don't resolve contradictions — we harness them. Creative energy scales super-linearly with tension.",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
num: '03',
|
num: '03',
|
||||||
@@ -102,7 +102,7 @@ const VALUES = [
|
|||||||
{
|
{
|
||||||
num: '06',
|
num: '06',
|
||||||
title: 'The math is real',
|
title: 'The math is real',
|
||||||
body: '317+ equations. Five novel frameworks. Peer-reviewable foundations. This isn\'t marketing — it\'s mathematics.',
|
body: "317+ equations. Five novel frameworks. Peer-reviewable foundations. This isn't marketing — it's mathematics.",
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
import { useState } from 'react';
|
import { useState } from 'react';
|
||||||
import Link from 'next/link';
|
import Link from 'next/link';
|
||||||
|
|
||||||
const GRADIENT = 'linear-gradient(90deg, #FF6B2B, #FF2255, #CC00AA, #8844FF, #4488FF, #00D4FF)';
|
const GRADIENT = 'linear-gradient(135deg, #F5A623, #FF1D6C, #9C27B0, #2979FF)';
|
||||||
|
|
||||||
const SIDEBAR_SECTIONS = [
|
const SIDEBAR_SECTIONS = [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
import Link from 'next/link';
|
import Link from 'next/link';
|
||||||
|
|
||||||
const GRADIENT = 'linear-gradient(90deg, #FF6B2B, #FF2255, #CC00AA, #8844FF, #4488FF, #00D4FF)';
|
const GRADIENT = 'linear-gradient(135deg, #F5A623, #FF1D6C, #9C27B0, #2979FF)';
|
||||||
|
|
||||||
const PORTALS = [
|
const PORTALS = [
|
||||||
{ name: 'RoadWork', desc: 'AI tutoring that adapts to how you actually learn. Not how a textbook thinks you should.', tag: 'Education' },
|
{ name: 'RoadWork', desc: 'AI tutoring that adapts to how you actually learn. Not how a textbook thinks you should.', tag: 'Education' },
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
import { useState } from 'react';
|
import { useState } from 'react';
|
||||||
import Link from 'next/link';
|
import Link from 'next/link';
|
||||||
|
|
||||||
const GRADIENT = 'linear-gradient(90deg, #FF6B2B, #FF2255, #CC00AA, #8844FF, #4488FF, #00D4FF)';
|
const GRADIENT = 'linear-gradient(135deg, #F5A623, #FF1D6C, #9C27B0, #2979FF)';
|
||||||
|
|
||||||
const PLANS = [
|
const PLANS = [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
import { useEffect, useState } from 'react';
|
import { useEffect, useState } from 'react';
|
||||||
import Link from 'next/link';
|
import Link from 'next/link';
|
||||||
|
|
||||||
const GRADIENT = 'linear-gradient(90deg, #FF6B2B, #FF2255, #CC00AA, #8844FF, #4488FF, #00D4FF)';
|
const GRADIENT = 'linear-gradient(135deg, #F5A623, #FF1D6C, #9C27B0, #2979FF)';
|
||||||
|
|
||||||
const AGENTS_STATIC = [
|
const AGENTS_STATIC = [
|
||||||
{ name: 'alice', role: 'Gateway', status: 'active', mem: '2.4TB', uptime: '347d', load: 34 },
|
{ name: 'alice', role: 'Gateway', status: 'active', mem: '2.4TB', uptime: '347d', load: 34 },
|
||||||
@@ -68,6 +68,7 @@ export default function StatusPage() {
|
|||||||
const [agents] = useState<AgentRow[]>(AGENTS_STATIC);
|
const [agents] = useState<AgentRow[]>(AGENTS_STATIC);
|
||||||
const [events] = useState<EventRow[]>(EVENTS_STATIC);
|
const [events] = useState<EventRow[]>(EVENTS_STATIC);
|
||||||
const [live, setLive] = useState(false);
|
const [live, setLive] = useState(false);
|
||||||
|
const [fetchError, setFetchError] = useState(false);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
fetch('/api/status')
|
fetch('/api/status')
|
||||||
@@ -83,7 +84,7 @@ export default function StatusPage() {
|
|||||||
setLive(true);
|
setLive(true);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.catch(() => {});
|
.catch(() => { setFetchError(true); });
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const allOperational = services.every(s => s.status === 'operational');
|
const allOperational = services.every(s => s.status === 'operational');
|
||||||
@@ -116,6 +117,11 @@ export default function StatusPage() {
|
|||||||
<main className="max-w-6xl mx-auto px-6 py-12 space-y-12">
|
<main className="max-w-6xl mx-auto px-6 py-12 space-y-12">
|
||||||
|
|
||||||
{/* overall status */}
|
{/* overall status */}
|
||||||
|
{fetchError && (
|
||||||
|
<div className="text-xs text-yellow-500 bg-yellow-500/10 border border-yellow-500/20 px-4 py-3 rounded-xl">
|
||||||
|
Unable to reach live API — showing last known state
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
<div className="flex items-center gap-3">
|
<div className="flex items-center gap-3">
|
||||||
<span
|
<span
|
||||||
className="w-3 h-3 rounded-full"
|
className="w-3 h-3 rounded-full"
|
||||||
|
|||||||
Reference in New Issue
Block a user