// Project page + Module library
function ProjectPage({ projectId, onOpenBoard }) {
const { PROJECTS, MODULES, ACTIVITY, AGENTS } = window.ORC_DATA;
const project = PROJECTS.find(p => p.id === projectId) || PROJECTS[0];
const installed = [
{ id: 'auth', name: 'Auth', installed: 'v2.4.0', latest: 'v2.4.0', status: 'live' },
{ id: 'billing', name: 'Billing', installed: 'v1.1.4', latest: 'v1.2.0', status: 'update' },
{ id: 'tickets', name: 'Tickets', installed: 'v2.9.0', latest: 'v3.0.1', status: 'update' },
{ id: 'kb', name: 'Knowledge', installed: 'v2.1.0', latest: 'v2.1.0', status: 'live' },
{ id: 'audit', name: 'Audit Trail', installed: 'v1.7.2', latest: 'v1.7.2', status: 'live' },
];
const projectAgents = AGENTS.slice(0, 4);
return (
{project.name[0]}
{project.name}
prj_{project.id} · region us-east-2 · 14 services · last deploy 6m ago
Modules
5/ 8
▲ 2 updates available
Active agents
4
all healthy
Tasks · 24h
38
36 ok · 1 review · 1 failed
P95 deploy
2m 14s
↓ 8% wk
Installed modules
{installed.map(m => (
{m.name}
{m.installed}{m.installed !== m.latest ? <> → {m.latest}> : ''}
{m.status === 'update' ? update
: m.status === 'live' ? live
: idle}
{m.status === 'update' ?
: }
))}
Recent activity
last 1h
{ACTIVITY.map((a, i) => (
{a.time}
))}
Active agents
{projectAgents.length} bound
{projectAgents.map(a => (
{a.kind[0].toUpperCase()}{a.kind[1].toUpperCase()}
{a.id}
{a.state}
{a.tasks} tasks
))}
Pending approvals
2
TSK-3987 · Stripe v3 webhook handlers
+412 / −188 · 6 files
TSK-3988 · Backfill org_id on invoices
1 migration · affects DB
);
}
function ModuleLibrary() {
const { MODULES } = window.ORC_DATA;
const [filter, setFilter] = React.useState('all');
const filtered = filter === 'all' ? MODULES
: filter === 'installed' ? MODULES.filter(m => m.installed)
: filter === 'updates' ? MODULES.filter(m => m.status === 'update')
: MODULES.filter(m => !m.installed);
return (
Module library
Signed packages · install, update, or pin versions across projects
{[
{ id: 'all', label: 'All', n: MODULES.length },
{ id: 'installed', label: 'Installed', n: MODULES.filter(m => m.installed).length },
{ id: 'updates', label: 'Updates', n: MODULES.filter(m => m.status === 'update').length },
{ id: 'available', label: 'Available', n: MODULES.filter(m => !m.installed).length },
].map(t => (
))}
registry: registry.orchestra.prod · synced 4m ago
{filtered.map(m => (
{m.icon}
{m.name}
@orchestra/{m.id} · {m.version}
{m.status === 'update' && update available}
{m.status === 'live' && installed}
{m.status === 'failed' && install failed}
{m.status === 'idle' && available}
{m.status === 'new' && beta}
{m.desc}
{m.size} bundle
{m.deps} deps
signed by {m.signedBy}
{m.status === 'update' ? (
<>
>
) : m.status === 'live' ? (
<>
>
) : m.status === 'failed' ? (
<>
>
) : (
<>
>
)}
))}
);
}
window.ProjectPage = ProjectPage;
window.ModuleLibrary = ModuleLibrary;