Jake Shore 96e52666c5 MCPEngine full sync — studio scaffold, factory v2, server updates, state.json — 2026-02-12
=== NEW ===
- studio/ — MCPEngine Studio scaffold (Next.js monorepo, build plan)
- docs/FACTORY-V2.md — Factory v2 architecture doc
- docs/CALENDLY_MCP_BUILD_SUMMARY.md — Calendly MCP build report

=== UPDATED SERVERS ===
- fieldedge: Added jobs-tools, UI build script, main entry update
- lightspeed: Updated main + server entry points
- squarespace: Added collection-browser + page-manager apps
- toast: Added main + server entry points

=== INFRA ===
- infra/command-center/state.json — Updated pipeline state
- infra/command-center/FACTORY-V2.md — Factory v2 operator playbook
2026-02-12 17:58:33 -05:00

42 lines
977 B
TypeScript

import React from 'react';
import { clsx } from 'clsx';
import { twMerge } from 'tailwind-merge';
export interface NavRailProps {
children: React.ReactNode;
header?: React.ReactNode;
footer?: React.ReactNode;
className?: string;
}
export const NavRail: React.FC<NavRailProps> = ({
children,
header,
footer,
className,
}) => {
return (
<nav
className={twMerge(
clsx(
'w-16 h-full flex flex-col items-center',
'bg-gray-950 border-r border-gray-800',
'py-4 gap-1 shrink-0',
),
className,
)}
>
{/* Logo / header slot */}
{header && <div className="mb-4">{header}</div>}
{/* Navigation items */}
<div className="flex flex-col items-center gap-1 flex-1">{children}</div>
{/* Footer slot (settings, avatar, etc.) */}
{footer && <div className="mt-auto pt-4 border-t border-gray-800">{footer}</div>}
</nav>
);
};
NavRail.displayName = 'NavRail';