Commit 54800631d413da4a2a60a497718338244e91591f

Commits
[COMMIT BEGIN]
commit 54800631d413da4a2a60a497718338244e91591f
Author: 0x4248 <[email protected]>
Date:   Wed Jan 14 00:07:49 2026 +0000

    Orion: add ignored pages
    
    Signed-off-by: 0x4248 <[email protected]>

diff --git a/lab/orion/.gitignore b/lab/orion/.gitignore
new file mode 100644
index 0000000..b2dd115
--- /dev/null
+++ b/lab/orion/.gitignore
@@ -0,0 +1,2 @@
+!pages/
+!static/**
\ No newline at end of file
diff --git a/lab/orion/COPYRIGHT.txt b/lab/orion/COPYRIGHT.txt
new file mode 100644
index 0000000..88808d9
--- /dev/null
+++ b/lab/orion/COPYRIGHT.txt
@@ -0,0 +1,3 @@
+© 2026 0x4248 and contributors © 2026 4248 Systems, a part of 0x4248. Orion is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. 
+<br>
+Orion uses Python, FastAPI, GNU Software, and Starlette, which are open source software. Python is a trademark of the Python Software Foundation. All other trademarks are the property of their respective owners. The 0x4248 logo, 4248 Systems logo, and Orion logo are intellectual property of 0x4248. Their use is not granted under this license but is not under any trademark in the United Kingdom.
diff --git a/lab/orion/commands/echo.py b/lab/orion/commands/echo.py
index 7abfd7e..ea53490 100644
--- a/lab/orion/commands/echo.py
+++ b/lab/orion/commands/echo.py
@@ -1,3 +1,17 @@
+# SPDX-License-Identifier: GPL-3.0-only
+# Orion System
+#
+# Copyright (C) 2026 0x4248
+# Copyright (C) 2026 4248 Systems
+#
+# Orion is free software; you may redistribute it and/or modify it
+# under the terms of the GNU General Public License version 3 only,
+# as published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
 from fastapi import Request
 from core.registry import registry
 from core.commands import Command
diff --git a/lab/orion/commands/system/heartbeats.py b/lab/orion/commands/system/heartbeats.py
new file mode 100644
index 0000000..eda7494
--- /dev/null
+++ b/lab/orion/commands/system/heartbeats.py
@@ -0,0 +1,96 @@
+# SPDX-License-Identifier: GPL-3.0-only
+# Orion System
+#
+# Copyright (C) 2026 0x4248
+# Copyright (C) 2026 4248 Systems
+#
+# Orion is free software; you may redistribute it and/or modify it
+# under the terms of the GNU General Public License version 3 only,
+# as published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+import threading
+import datetime
+import time
+
+from fastapi import Request, UploadFile
+from core.registry import registry
+from core.commands import Command
+from core import page
+
+
+global heartbeats_database
+heartbeats_database = {
+    "id": [],
+    "timestamp": [],
+    "status": []
+}
+
+def heartbeat():
+    heartbeat_id = 0
+    while True:
+        heartbeats_database["id"].append(heartbeat_id)
+        heartbeats_database["timestamp"].append(datetime.datetime.now().isoformat())
+        heartbeats_database["status"].append("alive")
+        heartbeat_id += 1
+        if not threading.main_thread().is_alive():
+            break
+        time.sleep(0.75)
+
+def calculate_average_heartbeat_bpm():
+    if len(heartbeats_database["timestamp"]) < 2:
+        return 0
+    first_time = datetime.datetime.fromisoformat(heartbeats_database["timestamp"][0])
+    last_time = datetime.datetime.fromisoformat(heartbeats_database["timestamp"][-1])
+    total_seconds = (last_time - first_time).total_seconds()
+    total_beats = len(heartbeats_database["timestamp"]) - 1
+    if total_seconds == 0:
+        return 0
+    bpm = (total_beats / total_seconds) * 60
+    return round(bpm, 2)
+def return_bpm(request: Request):
+    bpm = calculate_average_heartbeat_bpm()
+    return page.message(
+        request,
+        "HEARTBEAT",
+        f"Average server heart rate: {bpm} BPM",
+    )
+
+def return_heart_database(request: Request):
+    bpm = calculate_average_heartbeat_bpm()
+    return page.message(
+        request,
+        "HEARTBEAT",
+        f"{heartbeats_database}",
+    )
+
+registry.register(Command(
+    name="heart.bpm",
+    handler=return_bpm,
+    summary="Show server heartbeat rate",
+    mode="cli",
+))
+
+registry.register(Command(
+    name="heart.db_debug",
+    handler=return_heart_database,
+    summary="Show server heartbeat database",
+    mode="cli",
+))
+
+
+
+heart = threading.Thread(target=heartbeat, daemon=True)
+heart.start()
+
+MOD_META = {
+    "name": "System Heartbeats",
+    "loc": "commands.system.heartbeats",
+    "description": "Module that tracks server heartbeats.",
+    "author": "0x4248",
+    "version": "1.0.0",
+    "license": "GPLv3",
+}
\ No newline at end of file
diff --git a/lab/orion/commands/system/manual.py b/lab/orion/commands/system/manual.py
index 7fbe5f0..29b2c35 100644
--- a/lab/orion/commands/system/manual.py
+++ b/lab/orion/commands/system/manual.py
@@ -1,4 +1,17 @@
-# Manual command man <name/alias> or ? <name/alias> or help <name/alias>
+# SPDX-License-Identifier: GPL-3.0-only
+# Orion System
+#
+# Copyright (C) 2026 0x4248
+# Copyright (C) 2026 4248 Systems
+#
+# Orion is free software; you may redistribute it and/or modify it
+# under the terms of the GNU General Public License version 3 only,
+# as published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
 from fastapi import APIRouter, Request
 from fastapi.responses import RedirectResponse
 from core.registry import registry
diff --git a/lab/orion/commands/system/open.py b/lab/orion/commands/system/open.py
index e37a3d8..1b65450 100644
--- a/lab/orion/commands/system/open.py
+++ b/lab/orion/commands/system/open.py
@@ -1,3 +1,17 @@
+# SPDX-License-Identifier: GPL-3.0-only
+# Orion System
+#
+# Copyright (C) 2026 0x4248
+# Copyright (C) 2026 4248 Systems
+#
+# Orion is free software; you may redistribute it and/or modify it
+# under the terms of the GNU General Public License version 3 only,
+# as published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
 from fastapi import Request
 from fastapi.responses import RedirectResponse
 from core.registry import registry
diff --git a/lab/orion/commands/testing/demo.py b/lab/orion/commands/testing/demo.py
index 0373122..236403f 100644
--- a/lab/orion/commands/testing/demo.py
+++ b/lab/orion/commands/testing/demo.py
@@ -1,3 +1,17 @@
+# SPDX-License-Identifier: GPL-3.0-only
+# Orion System
+#
+# Copyright (C) 2026 0x4248
+# Copyright (C) 2026 4248 Systems
+#
+# Orion is free software; you may redistribute it and/or modify it
+# under the terms of the GNU General Public License version 3 only,
+# as published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
 from fastapi import Request, UploadFile
 from core.registry import registry
 from core.commands import Command
diff --git a/lab/orion/config/modules.py b/lab/orion/config/modules.py
new file mode 100644
index 0000000..a871dcf
--- /dev/null
+++ b/lab/orion/config/modules.py
@@ -0,0 +1,24 @@
+# SPDX-License-Identifier: GPL-3.0-only
+# Orion System
+#
+# Modules list configuration file
+# This file tells orion which modules to load at startup.
+#
+# Copyright (C) 2026 0x4248
+# Copyright (C) 2026 4248 Systems
+#
+# Orion is free software; you may redistribute it and/or modify it
+# under the terms of the GNU General Public License version 3 only,
+# as published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+
+MODULES = [
+    "commands.system.open",
+    "commands.system.heartbeats",
+    "commands.testing.demo",
+    "commands.echo"
+]
\ No newline at end of file
diff --git a/lab/orion/core/auth.py b/lab/orion/core/auth.py
index 9d8f6f1..e93998e 100644
--- a/lab/orion/core/auth.py
+++ b/lab/orion/core/auth.py
@@ -1,3 +1,17 @@
+# SPDX-License-Identifier: GPL-3.0-only
+# Orion System
+#
+# Copyright (C) 2026 0x4248
+# Copyright (C) 2026 4248 Systems
+#
+# Orion is free software; you may redistribute it and/or modify it
+# under the terms of the GNU General Public License version 3 only,
+# as published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
 from fastapi import APIRouter, Request, Form
 from fastapi.responses import RedirectResponse
 from core import page as p
diff --git a/lab/orion/core/commands.py b/lab/orion/core/commands.py
index 6004c39..d026d25 100644
--- a/lab/orion/core/commands.py
+++ b/lab/orion/core/commands.py
@@ -1,3 +1,17 @@
+# SPDX-License-Identifier: GPL-3.0-only
+# Orion System
+#
+# Copyright (C) 2026 0x4248
+# Copyright (C) 2026 4248 Systems
+#
+# Orion is free software; you may redistribute it and/or modify it
+# under the terms of the GNU General Public License version 3 only,
+# as published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
 from dataclasses import dataclass, field
 from typing import Callable, Dict, List, Optional, Any, Literal
 
diff --git a/lab/orion/core/console.py b/lab/orion/core/console.py
index 8932e9d..cd71c99 100644
--- a/lab/orion/core/console.py
+++ b/lab/orion/core/console.py
@@ -1,3 +1,17 @@
+# SPDX-License-Identifier: GPL-3.0-only
+# Orion System
+#
+# Copyright (C) 2026 0x4248
+# Copyright (C) 2026 4248 Systems
+#
+# Orion is free software; you may redistribute it and/or modify it
+# under the terms of the GNU General Public License version 3 only,
+# as published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
 import datetime
 from typing import Dict
 import traceback
diff --git a/lab/orion/core/dispatcher.py b/lab/orion/core/dispatcher.py
new file mode 100644
index 0000000..75e1f66
--- /dev/null
+++ b/lab/orion/core/dispatcher.py
@@ -0,0 +1,21 @@
+# SPDX-License-Identifier: GPL-3.0-only
+# Orion System
+#
+# Copyright (C) 2026 0x4248
+# Copyright (C) 2026 4248 Systems
+#
+# Orion is free software; you may redistribute it and/or modify it
+# under the terms of the GNU General Public License version 3 only,
+# as published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+import inspect
+
+async def dispatch(handler, *args, **kwargs):
+    result = handler(*args, **kwargs)
+    if inspect.isawaitable(result):
+        return await result
+    return result
diff --git a/lab/orion/core/layout.py b/lab/orion/core/layout.py
index 29c3183..ffbe2a3 100644
--- a/lab/orion/core/layout.py
+++ b/lab/orion/core/layout.py
@@ -1,3 +1,17 @@
+# SPDX-License-Identifier: GPL-3.0-only
+# Orion System
+#
+# Copyright (C) 2026 0x4248
+# Copyright (C) 2026 4248 Systems
+#
+# Orion is free software; you may redistribute it and/or modify it
+# under the terms of the GNU General Public License version 3 only,
+# as published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
 from fastapi import Request
 
 STYLE = """
diff --git a/lab/orion/core/logbridge.py b/lab/orion/core/logbridge.py
index b005ac5..be2dcdf 100644
--- a/lab/orion/core/logbridge.py
+++ b/lab/orion/core/logbridge.py
@@ -1,3 +1,17 @@
+# SPDX-License-Identifier: GPL-3.0-only
+# Orion System
+#
+# Copyright (C) 2026 0x4248
+# Copyright (C) 2026 4248 Systems
+#
+# Orion is free software; you may redistribute it and/or modify it
+# under the terms of the GNU General Public License version 3 only,
+# as published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
 import logging
 
 class logBridge(logging.Handler):
diff --git a/lab/orion/core/manual.py b/lab/orion/core/manual.py
index 6845748..527447c 100644
--- a/lab/orion/core/manual.py
+++ b/lab/orion/core/manual.py
@@ -1,3 +1,17 @@
+# SPDX-License-Identifier: GPL-3.0-only
+# Orion System
+#
+# Copyright (C) 2026 0x4248
+# Copyright (C) 2026 4248 Systems
+#
+# Orion is free software; you may redistribute it and/or modify it
+# under the terms of the GNU General Public License version 3 only,
+# as published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
 from typing import Dict, Optional, List
 
 # Manual funcions
diff --git a/lab/orion/core/page.py b/lab/orion/core/page.py
index 4f5223a..d8dfe24 100644
--- a/lab/orion/core/page.py
+++ b/lab/orion/core/page.py
@@ -1,3 +1,17 @@
+# SPDX-License-Identifier: GPL-3.0-only
+# Orion System
+#
+# Copyright (C) 2026 0x4248
+# Copyright (C) 2026 4248 Systems
+#
+# Orion is free software; you may redistribute it and/or modify it
+# under the terms of the GNU General Public License version 3 only,
+# as published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
 from fastapi import Request
 from fastapi.responses import HTMLResponse
 from core.layout import layout
@@ -30,7 +44,7 @@ def render(
 DEFAULT_NAV: list[tuple[str, str]] = [
     ("HOME <span style='color:grey;'>`</span>", "/"),
     ("RUN <span style='color:grey;'>F2</span>", "/command"),
-    ("FORMS", "/search_forms"),
+    ("UI", "/search_forms"),
     ("LOGOUT", "/logout"),
     ("EXIT <span style='color:grey;'>F4</span>", "/exit"),
 ]
diff --git a/lab/orion/core/registry.py b/lab/orion/core/registry.py
index 3d36c81..aa810c4 100644
--- a/lab/orion/core/registry.py
+++ b/lab/orion/core/registry.py
@@ -1,3 +1,17 @@
+# SPDX-License-Identifier: GPL-3.0-only
+# Orion System
+#
+# Copyright (C) 2026 0x4248
+# Copyright (C) 2026 4248 Systems
+#
+# Orion is free software; you may redistribute it and/or modify it
+# under the terms of the GNU General Public License version 3 only,
+# as published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
 from typing import Dict, Optional, List
 from .commands import Command
 
diff --git a/lab/orion/main.py b/lab/orion/main.py
index f080ba8..6f28581 100644
--- a/lab/orion/main.py
+++ b/lab/orion/main.py
@@ -1,3 +1,17 @@
+# SPDX-License-Identifier: GPL-3.0-only
+# Orion System
+#
+# Copyright (C) 2026 0x4248
+# Copyright (C) 2026 4248 Systems
+#
+# Orion is free software; you may redistribute it and/or modify it
+# under the terms of the GNU General Public License version 3 only,
+# as published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
 from fastapi import FastAPI, Request
 from fastapi.responses import FileResponse
 
@@ -5,10 +19,16 @@ from core.logbridge import logBridge
 from pages import command, about, console
 from core import auth, console
 from core import page as p
+from commands.system import manual
+from config.modules import MODULES
+
+def load_commands():
+    for module_path in MODULES:
+        console.logger.info(m=f"Loading module: {module_path}")
+        __import__(module_path)
+
+load_commands()
 
-import commands.system.open
-import commands.system.manual as manual
-import commands.echo
 import logging
 
 handler = logBridge(console.logger)
diff --git a/lab/orion/manpages/echo.py b/lab/orion/manpages/echo.py
index 8758ada..8aa0a70 100644
--- a/lab/orion/manpages/echo.py
+++ b/lab/orion/manpages/echo.py
@@ -1,3 +1,17 @@
+# SPDX-License-Identifier: GPL-3.0-only
+# Orion System
+#
+# Copyright (C) 2026 0x4248
+# Copyright (C) 2026 4248 Systems
+#
+# Orion is free software; you may redistribute it and/or modify it
+# under the terms of the GNU General Public License version 3 only,
+# as published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
 from core import manual
 
 manual.manual_registry.register(
diff --git a/lab/orion/pages/about.py b/lab/orion/pages/about.py
new file mode 100644
index 0000000..b27b7f9
--- /dev/null
+++ b/lab/orion/pages/about.py
@@ -0,0 +1,65 @@
+# SPDX-License-Identifier: GPL-3.0-only
+# Orion System
+#
+# Copyright (C) 2026 0x4248
+# Copyright (C) 2026 4248 Systems
+#
+# Orion is free software; you may redistribute it and/or modify it
+# under the terms of the GNU General Public License version 3 only,
+# as published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+from fastapi import APIRouter, Request, Form
+from fastapi.responses import RedirectResponse
+from core import page as p
+import base64
+from core.registry import registry
+from core.commands import Command
+
+
+router = APIRouter()
+
+# The mascot looks like Wheatley from Portal 2, Because hes cute!
+mascot_image_path = "./static/mascot.png"
+with open(f"{mascot_image_path}", "rb") as f:
+    mascot_image_data = base64.b64encode(f.read()).decode("utf-8")
+
+with open("COPYRIGHT.txt", "r") as f:
+    LEGAL = f.read()
+
[email protected]("/about")
+async def about_page(request: Request):
+    return p.static(
+        request,
+        title="ABOUT",
+        html=f"""
+<h1 style="text-align: center;">ORION SYSTEM</h1>
+<img
+  src="data:image/png;base64,{mascot_image_data}"
+  alt="Orion Mascot"
+  style="display:block; width:400px; image-rendering: pixelated; margin: 0 auto;"
+>
+<br>
+<p style="text-align: center">{LEGAL}</p>
+<pre>
+
+Version: 0.8.4
+Engine: OrionEngine
+Online Users: 1
+© 2026 0x4248
+</pre>
+"""
+    )
+
+async def about_alias(request: Request):
+    return RedirectResponse(url="/about", status_code=302)
+
+registry.register(Command(
+    name="about",
+    handler=about_alias,
+    summary="Show information about Orion",
+    mode="cli"
+))
diff --git a/lab/orion/pages/command.py b/lab/orion/pages/command.py
new file mode 100644
index 0000000..cc93908
--- /dev/null
+++ b/lab/orion/pages/command.py
@@ -0,0 +1,139 @@
+# SPDX-License-Identifier: GPL-3.0-only
+# Orion System
+#
+# Copyright (C) 2026 0x4248
+# Copyright (C) 2026 4248 Systems
+#
+# Orion is free software; you may redistribute it and/or modify it
+# under the terms of the GNU General Public License version 3 only,
+# as published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+import shlex
+from fastapi import APIRouter, Request, Form
+from fastapi.responses import RedirectResponse
+from core.registry import registry
+from core import page as p 
+from core import dispatcher
+
+router = APIRouter()
+
[email protected]("/command")
+async def command_page(request: Request):
+    lines = [
+        f"[{c.name}] - {c.summary}"
+        for c in registry.all()
+        if c.supports_cli()
+    ]
+    return p.static(
+        request,
+        title="COMMAND",
+        html=f"""
+<p>Enter a command below to run. <i style="color:grey;">Usage: &lt;COMMAND&gt; [ARGS...]</i></p>
+<form method="post">
+<span style="color:grey;">$</span><input name="command" autofocus style="width:98%;border:0;border-bottom:1px solid #fff;">
+</form>
+<hr>
+<pre>{chr(10).join(lines)}</pre>
+"""
+    )
+
[email protected]("/command")
+async def command_submit(request: Request, command: str = Form(...)):
+    try:
+        parts = shlex.split(command)
+    except ValueError as e:
+        return p.message(request, "ERROR", error=str(e))
+
+    if not parts:
+        return p.message(request, "ERROR", error="Empty command")
+
+    name, *args = parts
+    cmd = registry.get(name)
+
+    if not cmd or not cmd.supports_cli():
+        return p.message(request, "UNKNOWN", error=f"'{name}' is not a valid CLI command")
+
+    if cmd.supports_ui() and not args and cmd.form_fields:
+        return RedirectResponse(f"/command/{name}", 303)
+
+    return await dispatcher.dispatch(cmd.handler, request, *args)
+
+
[email protected]("/command/{name}")
+async def command_form(request: Request, name: str):
+    cmd = registry.get(name)
+    if not cmd or not cmd.supports_ui():
+        return RedirectResponse("/command", 303)
+
+    return p.form(
+        request,
+        title=name.upper(),
+        action=f"/command/{name}",
+        fields=cmd.form_fields,
+        msg=cmd.summary,
+    )
+
[email protected]("/command/{name}")
+async def command_form_submit(request: Request, name: str):
+    cmd = registry.get(name)
+    if not cmd or not cmd.supports_ui():
+        return RedirectResponse("/command", 303)
+
+    data = await request.form()
+    return await dispatcher.dispatch(cmd.handler, request, **data)
+
+
[email protected]("/list_forms")
+async def list_forms(request: Request):
+    cmds = [c for c in registry.all() if c.supports_ui()]
+
+    links = "\n".join(
+        f"<li><a href='/command/{c.name}'>{c.name}</a> — {c.summary}</li>"
+        for c in cmds
+    )
+
+    return p.static(
+        request,
+        title="SEARCH PAGE",
+        html=f"""
+<p>Select a page to open:</p>
+<ul>
+{links}
+</ul>
+"""
+    )
+
[email protected]("/search_forms")
+async def search_forms_page(request: Request):
+    cmds = [c for c in registry.all() if c.supports_ui()]
+    lines = [f"[{c.name}] - {c.summary}" for c in cmds]
+
+    return p.static(
+        request,
+        title="SEARCH FORMS",
+        html=f"""
+<p>Open a UI page:</p>
+<form method="post" action="/search_forms">
+    ?<input name="page" type="text"
+      style="width:98%;border:0;border-bottom:1px solid #fff;" autofocus />
+</form>
+<hr/>
+<pre>Available:
+{chr(10).join(lines)}</pre>
+"""
+)
+
[email protected]("/search_forms")
+async def search_forms_submit(request: Request, page: str = Form(...)):
+    name = page.strip()
+
+    if not name:
+        return p.message(request, "ERROR", "No page name provided", ok_href="/search_forms")
+    cmd = registry.get(name)
+    if not cmd or not cmd.supports_ui():
+        return p.message(request, "UNKNOWN", error=f"No UI page for: {name}", ok_href="/search_forms")
+    return RedirectResponse(f"/command/{name}", 303)
diff --git a/lab/orion/pages/console.py b/lab/orion/pages/console.py
new file mode 100644
index 0000000..00a7d5e
--- /dev/null
+++ b/lab/orion/pages/console.py
@@ -0,0 +1,59 @@
+# SPDX-License-Identifier: GPL-3.0-only
+# Orion System
+#
+# Copyright (C) 2026 0x4248
+# Copyright (C) 2026 4248 Systems
+#
+# Orion is free software; you may redistribute it and/or modify it
+# under the terms of the GNU General Public License version 3 only,
+# as published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+from fastapi import APIRouter, Request, Form
+from fastapi.responses import RedirectResponse
+from core import page as p
+from core.registry import registry
+from core.commands import Command
+from core import console
+
+
+router = APIRouter()
+
[email protected]("/console")
+async def console_page(request: Request):
+    body = "<h2>System Logs</h2>\n"
+    body += "<span class='gray-span'>Press F4 to exit</span>\n"
+    body += "<pre>\n"
+    for log_id in sorted(console.log_db.logs.keys(), reverse=True):
+        entry = console.log_db.logs[log_id]
+        level = entry['level']
+        level_class = level.lower()
+        body += (
+            f"[{entry['timestamp']}] "
+            f"<span class='log-{level_class}'>[{level}]</span> "
+            f"{entry['caller'].replace('BRIDGE', '<span style=\"color:lime;\">BRIDGE</span>')}: "
+            f"{entry['message']}\n"
+        )
+    body += "</pre>\n"
+    return p.static(
+        request,
+        "SYSTEM CONSOLE",
+        body
+    )
+
+registry.register(Command(
+    name="console",
+    handler=console_page,
+    summary="Show system logs",
+    mode="cli"
+))
+
+registry.register(Command(
+    name="c",
+    handler=console_page,
+    summary="Show system logs",
+    mode="cli"
+))
diff --git a/lab/orion/static/logo.png b/lab/orion/static/logo.png
new file mode 100644
index 0000000..dcb1405
Binary files /dev/null and b/lab/orion/static/logo.png differ
diff --git a/lab/orion/static/mascot.ico b/lab/orion/static/mascot.ico
new file mode 100644
index 0000000..ef1ad09
Binary files /dev/null and b/lab/orion/static/mascot.ico differ
diff --git a/lab/orion/static/mascot.png b/lab/orion/static/mascot.png
new file mode 100644
index 0000000..cd0b2e9
Binary files /dev/null and b/lab/orion/static/mascot.png differ
diff --git a/lab/orion/static/mascot_hd.png b/lab/orion/static/mascot_hd.png
new file mode 100644
index 0000000..9cea2e7
Binary files /dev/null and b/lab/orion/static/mascot_hd.png differ
[COMMIT END]
(C) 2025 0x4248 (C) 2025 4248 Media and 4248 Systems, All part of 0x4248 See LICENCE files for more information. Not all files are by 0x4248 always check Licencing.