Initial commit: CHORUS Services marketing website
Complete Next.js website with Docker containerization: - Next.js 14 with TypeScript and Tailwind CSS - Responsive design with modern UI components - Hero section, features showcase, testimonials - FAQ section with comprehensive content - Contact forms and newsletter signup - Docker production build with Nginx - Health checks and monitoring support - SEO optimization and performance tuning Ready for integration as git submodule in main CHORUS project. Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
644
utils/animations.ts
Normal file
644
utils/animations.ts
Normal file
@@ -0,0 +1,644 @@
|
||||
import { Variants } from 'framer-motion';
|
||||
|
||||
/**
|
||||
* Common animation variants for Framer Motion
|
||||
* Provides consistent animations across the application
|
||||
*/
|
||||
|
||||
export const fadeInUp: Variants = {
|
||||
hidden: {
|
||||
opacity: 0,
|
||||
y: 30,
|
||||
},
|
||||
visible: {
|
||||
opacity: 1,
|
||||
y: 0,
|
||||
transition: {
|
||||
duration: 0.6,
|
||||
ease: 'easeOut',
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
export const fadeInDown: Variants = {
|
||||
hidden: {
|
||||
opacity: 0,
|
||||
y: -30,
|
||||
},
|
||||
visible: {
|
||||
opacity: 1,
|
||||
y: 0,
|
||||
transition: {
|
||||
duration: 0.6,
|
||||
ease: 'easeOut',
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
export const fadeInLeft: Variants = {
|
||||
hidden: {
|
||||
opacity: 0,
|
||||
x: -30,
|
||||
},
|
||||
visible: {
|
||||
opacity: 1,
|
||||
x: 0,
|
||||
transition: {
|
||||
duration: 0.6,
|
||||
ease: 'easeOut',
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
export const fadeInRight: Variants = {
|
||||
hidden: {
|
||||
opacity: 0,
|
||||
x: 30,
|
||||
},
|
||||
visible: {
|
||||
opacity: 1,
|
||||
x: 0,
|
||||
transition: {
|
||||
duration: 0.6,
|
||||
ease: 'easeOut',
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
export const fadeIn: Variants = {
|
||||
hidden: {
|
||||
opacity: 0,
|
||||
},
|
||||
visible: {
|
||||
opacity: 1,
|
||||
transition: {
|
||||
duration: 0.6,
|
||||
ease: 'easeOut',
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
export const scaleIn: Variants = {
|
||||
hidden: {
|
||||
opacity: 0,
|
||||
scale: 0.8,
|
||||
},
|
||||
visible: {
|
||||
opacity: 1,
|
||||
scale: 1,
|
||||
transition: {
|
||||
duration: 0.6,
|
||||
ease: 'easeOut',
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
export const slideInUp: Variants = {
|
||||
hidden: {
|
||||
y: '100%',
|
||||
opacity: 0,
|
||||
},
|
||||
visible: {
|
||||
y: '0%',
|
||||
opacity: 1,
|
||||
transition: {
|
||||
duration: 0.6,
|
||||
ease: 'easeOut',
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
export const slideInDown: Variants = {
|
||||
hidden: {
|
||||
y: '-100%',
|
||||
opacity: 0,
|
||||
},
|
||||
visible: {
|
||||
y: '0%',
|
||||
opacity: 1,
|
||||
transition: {
|
||||
duration: 0.6,
|
||||
ease: 'easeOut',
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
export const staggerContainer: Variants = {
|
||||
hidden: {},
|
||||
visible: {
|
||||
transition: {
|
||||
staggerChildren: 0.1,
|
||||
delayChildren: 0.1,
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
export const staggerFast: Variants = {
|
||||
hidden: {},
|
||||
visible: {
|
||||
transition: {
|
||||
staggerChildren: 0.05,
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
export const staggerSlow: Variants = {
|
||||
hidden: {},
|
||||
visible: {
|
||||
transition: {
|
||||
staggerChildren: 0.2,
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
// Hover animations
|
||||
export const hoverScale: Variants = {
|
||||
hover: {
|
||||
scale: 1.05,
|
||||
transition: {
|
||||
duration: 0.2,
|
||||
ease: 'easeInOut',
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
export const hoverLift: Variants = {
|
||||
hover: {
|
||||
y: -5,
|
||||
transition: {
|
||||
duration: 0.2,
|
||||
ease: 'easeInOut',
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
export const hoverGlow: Variants = {
|
||||
hover: {
|
||||
boxShadow: '0 0 30px rgba(0, 122, 255, 0.3)',
|
||||
transition: {
|
||||
duration: 0.3,
|
||||
ease: 'easeInOut',
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
// Specialized animations for CHORUS components
|
||||
export const orchestrationFlow: Variants = {
|
||||
hidden: {
|
||||
pathLength: 0,
|
||||
opacity: 0,
|
||||
},
|
||||
visible: {
|
||||
pathLength: 1,
|
||||
opacity: 1,
|
||||
transition: {
|
||||
pathLength: {
|
||||
duration: 2,
|
||||
ease: 'easeInOut',
|
||||
},
|
||||
opacity: {
|
||||
duration: 0.3,
|
||||
},
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
export const dataFlow: Variants = {
|
||||
hidden: {
|
||||
opacity: 0,
|
||||
scale: 0,
|
||||
},
|
||||
visible: (i: number) => ({
|
||||
opacity: 1,
|
||||
scale: 1,
|
||||
transition: {
|
||||
delay: i * 0.2,
|
||||
duration: 0.5,
|
||||
ease: 'easeOut',
|
||||
},
|
||||
}),
|
||||
};
|
||||
|
||||
export const pulseAnimation: Variants = {
|
||||
pulse: {
|
||||
scale: [1, 1.1, 1],
|
||||
opacity: [1, 0.8, 1],
|
||||
transition: {
|
||||
duration: 2,
|
||||
repeat: Infinity,
|
||||
ease: 'easeInOut',
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
export const rotateAnimation: Variants = {
|
||||
rotate: {
|
||||
rotate: 360,
|
||||
transition: {
|
||||
duration: 2,
|
||||
repeat: Infinity,
|
||||
ease: 'linear',
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
// Page transition animations
|
||||
export const pageTransition: Variants = {
|
||||
initial: {
|
||||
opacity: 0,
|
||||
y: 20,
|
||||
},
|
||||
animate: {
|
||||
opacity: 1,
|
||||
y: 0,
|
||||
transition: {
|
||||
duration: 0.4,
|
||||
ease: 'easeOut',
|
||||
},
|
||||
},
|
||||
exit: {
|
||||
opacity: 0,
|
||||
y: -20,
|
||||
transition: {
|
||||
duration: 0.3,
|
||||
ease: 'easeIn',
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
// Modal animations
|
||||
export const modalBackdrop: Variants = {
|
||||
hidden: {
|
||||
opacity: 0,
|
||||
},
|
||||
visible: {
|
||||
opacity: 1,
|
||||
transition: {
|
||||
duration: 0.3,
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
export const modalContent: Variants = {
|
||||
hidden: {
|
||||
opacity: 0,
|
||||
scale: 0.8,
|
||||
y: 50,
|
||||
},
|
||||
visible: {
|
||||
opacity: 1,
|
||||
scale: 1,
|
||||
y: 0,
|
||||
transition: {
|
||||
duration: 0.4,
|
||||
ease: 'easeOut',
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
// Loading animations
|
||||
export const spinnerAnimation: Variants = {
|
||||
spin: {
|
||||
rotate: 360,
|
||||
transition: {
|
||||
duration: 1,
|
||||
repeat: Infinity,
|
||||
ease: 'linear',
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
export const dotsLoading: Variants = {
|
||||
loading: {
|
||||
scale: [1, 1.2, 1],
|
||||
opacity: [1, 0.6, 1],
|
||||
transition: {
|
||||
duration: 0.8,
|
||||
repeat: Infinity,
|
||||
ease: 'easeInOut',
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
// Apple-inspired easing curves
|
||||
export const appleEasing = [0.21, 1.11, 0.81, 0.99]; // Apple's signature cubic-bezier
|
||||
export const appleSpring = {
|
||||
type: 'spring',
|
||||
stiffness: 400,
|
||||
damping: 30,
|
||||
mass: 1,
|
||||
};
|
||||
|
||||
// Advanced parallax animations
|
||||
export const parallaxSlow: Variants = {
|
||||
hidden: { y: 0, opacity: 0 },
|
||||
visible: {
|
||||
y: 0,
|
||||
opacity: 1,
|
||||
transition: {
|
||||
duration: 1,
|
||||
ease: appleEasing,
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
export const parallaxMedium: Variants = {
|
||||
hidden: { y: 0, opacity: 0 },
|
||||
visible: {
|
||||
y: 0,
|
||||
opacity: 1,
|
||||
transition: {
|
||||
duration: 0.8,
|
||||
ease: appleEasing,
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
export const parallaxFast: Variants = {
|
||||
hidden: { y: 0, opacity: 0 },
|
||||
visible: {
|
||||
y: 0,
|
||||
opacity: 1,
|
||||
transition: {
|
||||
duration: 0.6,
|
||||
ease: appleEasing,
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
// Gradient text animation
|
||||
export const gradientTextAnimation: Variants = {
|
||||
initial: {
|
||||
backgroundPosition: '0% 50%',
|
||||
},
|
||||
animate: {
|
||||
backgroundPosition: ['0% 50%', '100% 50%', '0% 50%'],
|
||||
transition: {
|
||||
duration: 5,
|
||||
repeat: Infinity,
|
||||
ease: 'easeInOut',
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
// Advanced button hover states
|
||||
export const appleButtonHover: Variants = {
|
||||
initial: {
|
||||
scale: 1,
|
||||
boxShadow: '0 4px 14px 0 rgba(0, 122, 255, 0.25)',
|
||||
},
|
||||
hover: {
|
||||
scale: 1.05,
|
||||
boxShadow: '0 8px 25px 0 rgba(0, 122, 255, 0.4)',
|
||||
transition: {
|
||||
duration: 0.2,
|
||||
ease: 'easeOut',
|
||||
},
|
||||
},
|
||||
tap: {
|
||||
scale: 0.98,
|
||||
transition: {
|
||||
duration: 0.1,
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
// Hero entrance animations
|
||||
export const heroEntrance: Variants = {
|
||||
hidden: {
|
||||
opacity: 0,
|
||||
y: 60,
|
||||
scale: 0.95,
|
||||
},
|
||||
visible: {
|
||||
opacity: 1,
|
||||
y: 0,
|
||||
scale: 1,
|
||||
transition: {
|
||||
duration: 0.8,
|
||||
ease: appleEasing,
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
// Staggered hero container
|
||||
export const heroStaggerContainer: Variants = {
|
||||
hidden: {},
|
||||
visible: {
|
||||
transition: {
|
||||
staggerChildren: 0.2,
|
||||
delayChildren: 0.3,
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
// Floating elements animation
|
||||
export const floatingAnimation: Variants = {
|
||||
initial: {
|
||||
y: 0,
|
||||
rotate: 0,
|
||||
},
|
||||
animate: {
|
||||
y: [-10, 10, -10],
|
||||
rotate: [-2, 2, -2],
|
||||
transition: {
|
||||
duration: 6,
|
||||
repeat: Infinity,
|
||||
ease: 'easeInOut',
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
// Geometric shape animations
|
||||
export const geometricShapeAnimation: Variants = {
|
||||
initial: {
|
||||
scale: 1,
|
||||
opacity: 0.2,
|
||||
rotate: 0,
|
||||
},
|
||||
animate: {
|
||||
scale: [1, 1.5, 1],
|
||||
opacity: [0.2, 0.8, 0.2],
|
||||
rotate: [0, 360],
|
||||
transition: {
|
||||
duration: 8,
|
||||
repeat: Infinity,
|
||||
ease: 'easeInOut',
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
// Interactive hover glow effect
|
||||
export const interactiveGlow: Variants = {
|
||||
initial: {
|
||||
boxShadow: '0 0 0 rgba(0, 122, 255, 0)',
|
||||
},
|
||||
hover: {
|
||||
boxShadow: '0 0 30px rgba(0, 122, 255, 0.3)',
|
||||
transition: {
|
||||
duration: 0.3,
|
||||
ease: 'easeOut',
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
// Advanced scroll-triggered animations
|
||||
export const scrollReveal: Variants = {
|
||||
hidden: {
|
||||
opacity: 0,
|
||||
y: 75,
|
||||
scale: 0.9,
|
||||
},
|
||||
visible: {
|
||||
opacity: 1,
|
||||
y: 0,
|
||||
scale: 1,
|
||||
transition: {
|
||||
duration: 0.8,
|
||||
ease: appleEasing,
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
// Performance-optimized fade variants
|
||||
export const performantFade: Variants = {
|
||||
hidden: {
|
||||
opacity: 0,
|
||||
transform: 'translateY(20px) translateZ(0)',
|
||||
},
|
||||
visible: {
|
||||
opacity: 1,
|
||||
transform: 'translateY(0px) translateZ(0)',
|
||||
transition: {
|
||||
duration: 0.6,
|
||||
ease: appleEasing,
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
// Utility functions for animations
|
||||
export const createStaggeredAnimation = (
|
||||
baseAnimation: Variants,
|
||||
staggerDelay: number = 0.1
|
||||
): Variants => ({
|
||||
...baseAnimation,
|
||||
visible: {
|
||||
...baseAnimation.visible,
|
||||
transition: {
|
||||
...baseAnimation.visible?.transition,
|
||||
staggerChildren: staggerDelay,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
export const createDelayedAnimation = (
|
||||
baseAnimation: Variants,
|
||||
delay: number
|
||||
): Variants => ({
|
||||
...baseAnimation,
|
||||
visible: {
|
||||
...baseAnimation.visible,
|
||||
transition: {
|
||||
...baseAnimation.visible?.transition,
|
||||
delay,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
export const createCustomEasing = (
|
||||
baseAnimation: Variants,
|
||||
ease: string | number[]
|
||||
): Variants => ({
|
||||
...baseAnimation,
|
||||
visible: {
|
||||
...baseAnimation.visible,
|
||||
transition: {
|
||||
...baseAnimation.visible?.transition,
|
||||
ease,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
// Parallax utility function
|
||||
export const createParallaxAnimation = (
|
||||
speed: number,
|
||||
direction: 'up' | 'down' | 'left' | 'right' = 'up'
|
||||
) => {
|
||||
const axis = direction === 'left' || direction === 'right' ? 'x' : 'y';
|
||||
const multiplier = direction === 'down' || direction === 'right' ? 1 : -1;
|
||||
|
||||
return {
|
||||
[axis]: `${speed * multiplier * 100}px`,
|
||||
};
|
||||
};
|
||||
|
||||
// Scroll-based animation utility
|
||||
export const createScrollAnimation = (
|
||||
element: React.RefObject<HTMLElement>,
|
||||
options: {
|
||||
start?: number;
|
||||
end?: number;
|
||||
property: string;
|
||||
from: any;
|
||||
to: any;
|
||||
}
|
||||
) => {
|
||||
// This would be used with useScroll and useTransform hooks
|
||||
return {
|
||||
scrollTrigger: {
|
||||
trigger: element.current,
|
||||
start: options.start || 0,
|
||||
end: options.end || 1000,
|
||||
scrub: true,
|
||||
},
|
||||
[options.property]: [options.from, options.to],
|
||||
};
|
||||
};
|
||||
|
||||
// Reduced motion variants for accessibility
|
||||
export const createReducedMotionVariant = (baseVariant: Variants): Variants => {
|
||||
const prefersReducedMotion = typeof window !== 'undefined' &&
|
||||
window.matchMedia('(prefers-reduced-motion: reduce)').matches;
|
||||
|
||||
if (prefersReducedMotion) {
|
||||
return {
|
||||
...baseVariant,
|
||||
visible: {
|
||||
...baseVariant.visible,
|
||||
transition: {
|
||||
duration: 0.01, // Nearly instant
|
||||
},
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
return baseVariant;
|
||||
};
|
||||
|
||||
// Apple-style elastic animation
|
||||
export const elasticAnimation = {
|
||||
type: 'spring',
|
||||
stiffness: 500,
|
||||
damping: 25,
|
||||
mass: 0.8,
|
||||
};
|
||||
|
||||
// Magnetic effect for interactive elements
|
||||
export const magneticEffect = {
|
||||
hover: {
|
||||
scale: 1.1,
|
||||
transition: {
|
||||
type: 'spring',
|
||||
stiffness: 400,
|
||||
damping: 10,
|
||||
},
|
||||
},
|
||||
tap: {
|
||||
scale: 0.95,
|
||||
transition: {
|
||||
type: 'spring',
|
||||
stiffness: 600,
|
||||
damping: 15,
|
||||
},
|
||||
},
|
||||
};
|
||||
15
utils/cn.ts
Normal file
15
utils/cn.ts
Normal file
@@ -0,0 +1,15 @@
|
||||
import { clsx, type ClassValue } from 'clsx';
|
||||
import { twMerge } from 'tailwind-merge';
|
||||
|
||||
/**
|
||||
* Utility function for combining Tailwind CSS classes
|
||||
* Uses clsx for conditional classes and twMerge to handle Tailwind conflicts
|
||||
*/
|
||||
export function cn(...inputs: ClassValue[]) {
|
||||
return twMerge(clsx(inputs));
|
||||
}
|
||||
|
||||
/**
|
||||
* Alternative export for consistency with some UI libraries
|
||||
*/
|
||||
export const classNames = cn;
|
||||
380
utils/technical-specs-data.tsx
Normal file
380
utils/technical-specs-data.tsx
Normal file
@@ -0,0 +1,380 @@
|
||||
import React from 'react';
|
||||
import {
|
||||
ServerIcon,
|
||||
DatabaseIcon,
|
||||
NetworkIcon,
|
||||
MonitorIcon,
|
||||
ShieldIcon,
|
||||
CloudIcon,
|
||||
CodeIcon,
|
||||
DownloadIcon,
|
||||
SearchIcon,
|
||||
ZapIcon,
|
||||
CpuIcon,
|
||||
HardDriveIcon,
|
||||
WifiIcon,
|
||||
LockIcon,
|
||||
ActivityIcon,
|
||||
CheckCircleIcon,
|
||||
AlertCircleIcon,
|
||||
GlobeIcon,
|
||||
GitBranchIcon,
|
||||
BarChart3Icon,
|
||||
TimerIcon,
|
||||
UsersIcon,
|
||||
LayersIcon
|
||||
} from 'lucide-react';
|
||||
|
||||
import {
|
||||
PerformanceMetric,
|
||||
SystemRequirement,
|
||||
APIEndpoint,
|
||||
DeploymentOption,
|
||||
VersionCompatibility,
|
||||
EnterpriseFeature,
|
||||
StatisticData,
|
||||
ResourceDownload
|
||||
} from '@/types/technical-specs';
|
||||
|
||||
export const performanceMetrics: PerformanceMetric[] = [
|
||||
{
|
||||
key: '1',
|
||||
metric: 'API Response Time (Cached)',
|
||||
value: '<5ms',
|
||||
component: 'All Components',
|
||||
status: 'Excellent',
|
||||
icon: <ZapIcon className="w-4 h-4" />
|
||||
},
|
||||
{
|
||||
key: '2',
|
||||
metric: 'API Response Time (Uncached)',
|
||||
value: '<50ms',
|
||||
component: 'All Components',
|
||||
status: 'Excellent',
|
||||
icon: <ZapIcon className="w-4 h-4" />
|
||||
},
|
||||
{
|
||||
key: '3',
|
||||
metric: 'Context Search',
|
||||
value: '<100ms',
|
||||
component: 'SLURP',
|
||||
status: 'Excellent',
|
||||
icon: <SearchIcon className="w-4 h-4" />
|
||||
},
|
||||
{
|
||||
key: '4',
|
||||
metric: 'P2P Network Latency',
|
||||
value: '<10ms',
|
||||
component: 'COOEE',
|
||||
status: 'Excellent',
|
||||
icon: <NetworkIcon className="w-4 h-4" />
|
||||
},
|
||||
{
|
||||
key: '5',
|
||||
metric: 'Workflow Execution',
|
||||
value: 'Multi-agent',
|
||||
component: 'WHOOSH',
|
||||
status: 'Advanced',
|
||||
icon: <ActivityIcon className="w-4 h-4" />
|
||||
},
|
||||
{
|
||||
key: '6',
|
||||
metric: 'Concurrent Agents',
|
||||
value: '10+ simultaneous',
|
||||
component: 'BZZZ',
|
||||
status: 'Scalable',
|
||||
icon: <UsersIcon className="w-4 h-4" />
|
||||
}
|
||||
];
|
||||
|
||||
export const systemRequirements: SystemRequirement[] = [
|
||||
{
|
||||
key: '1',
|
||||
category: 'Infrastructure',
|
||||
minimum: 'Docker 20.10+',
|
||||
recommended: 'Docker Swarm / Kubernetes',
|
||||
enterprise: 'Kubernetes + Helm Charts',
|
||||
icon: <ServerIcon className="w-4 h-4" />
|
||||
},
|
||||
{
|
||||
key: '2',
|
||||
category: 'Database',
|
||||
minimum: 'PostgreSQL 13+',
|
||||
recommended: 'PostgreSQL 15+ with Redis',
|
||||
enterprise: 'PostgreSQL Cluster + Redis Cluster',
|
||||
icon: <DatabaseIcon className="w-4 h-4" />
|
||||
},
|
||||
{
|
||||
key: '3',
|
||||
category: 'Memory',
|
||||
minimum: '4GB RAM',
|
||||
recommended: '16GB RAM',
|
||||
enterprise: '64GB+ RAM per node',
|
||||
icon: <CpuIcon className="w-4 h-4" />
|
||||
},
|
||||
{
|
||||
key: '4',
|
||||
category: 'Storage',
|
||||
minimum: '20GB SSD',
|
||||
recommended: '100GB NVMe SSD',
|
||||
enterprise: '1TB+ NVMe SSD with backup',
|
||||
icon: <HardDriveIcon className="w-4 h-4" />
|
||||
},
|
||||
{
|
||||
key: '5',
|
||||
category: 'Network',
|
||||
minimum: '1Gbps',
|
||||
recommended: '10Gbps + libp2p',
|
||||
enterprise: 'Dedicated network + Tailscale',
|
||||
icon: <WifiIcon className="w-4 h-4" />
|
||||
}
|
||||
];
|
||||
|
||||
export const apiEndpoints: APIEndpoint[] = [
|
||||
{
|
||||
key: '1',
|
||||
method: 'POST',
|
||||
endpoint: '/api/v1/whoosh/workflow',
|
||||
description: 'Execute orchestrated workflow',
|
||||
authentication: 'JWT Bearer Token',
|
||||
rateLimit: '1000/hour'
|
||||
},
|
||||
{
|
||||
key: '2',
|
||||
method: 'GET',
|
||||
endpoint: '/api/v1/bzzz/agents',
|
||||
description: 'List active agents',
|
||||
authentication: 'API Key',
|
||||
rateLimit: '5000/hour'
|
||||
},
|
||||
{
|
||||
key: '3',
|
||||
method: 'POST',
|
||||
endpoint: '/api/v1/slurp/search',
|
||||
description: 'Semantic context search',
|
||||
authentication: 'JWT Bearer Token',
|
||||
rateLimit: '2000/hour'
|
||||
},
|
||||
{
|
||||
key: '4',
|
||||
method: 'WS',
|
||||
endpoint: '/ws/v1/cooee/network',
|
||||
description: 'P2P network communication',
|
||||
authentication: 'WebSocket Token',
|
||||
rateLimit: 'Unlimited'
|
||||
}
|
||||
];
|
||||
|
||||
export const deploymentOptions: DeploymentOption[] = [
|
||||
{
|
||||
key: '1',
|
||||
option: 'Cloud Deployment',
|
||||
platforms: ['AWS', 'GCP', 'Azure'],
|
||||
features: ['Auto-scaling', 'Load balancing', 'Global CDN'],
|
||||
complexity: 'Medium',
|
||||
cost: '$$$'
|
||||
},
|
||||
{
|
||||
key: '2',
|
||||
option: 'On-premises',
|
||||
platforms: ['VMware', 'Hyper-V', 'KVM'],
|
||||
features: ['Full control', 'Data sovereignty', 'Custom security'],
|
||||
complexity: 'High',
|
||||
cost: '$$$$'
|
||||
},
|
||||
{
|
||||
key: '3',
|
||||
option: 'Hybrid Cloud',
|
||||
platforms: ['AWS Outposts', 'Azure Stack', 'Google Anthos'],
|
||||
features: ['Best of both worlds', 'Flexible scaling', 'Compliance'],
|
||||
complexity: 'High',
|
||||
cost: '$$$$'
|
||||
},
|
||||
{
|
||||
key: '4',
|
||||
option: 'Development',
|
||||
platforms: ['Docker Compose', 'Local K8s'],
|
||||
features: ['Quick setup', 'Development tools', 'Hot reload'],
|
||||
complexity: 'Low',
|
||||
cost: '$'
|
||||
}
|
||||
];
|
||||
|
||||
export const versionCompatibility: VersionCompatibility[] = [
|
||||
{
|
||||
chorusVersion: 'v2.0.x',
|
||||
kubernetes: '1.24+',
|
||||
docker: '20.10+',
|
||||
postgresql: '13+',
|
||||
redis: '6.0+',
|
||||
nodejs: '18+'
|
||||
},
|
||||
{
|
||||
chorusVersion: 'v1.9.x',
|
||||
kubernetes: '1.22+',
|
||||
docker: '20.10+',
|
||||
postgresql: '12+',
|
||||
redis: '5.0+',
|
||||
nodejs: '16+'
|
||||
},
|
||||
{
|
||||
chorusVersion: 'v1.8.x',
|
||||
kubernetes: '1.20+',
|
||||
docker: '19.03+',
|
||||
postgresql: '11+',
|
||||
redis: '5.0+',
|
||||
nodejs: '14+'
|
||||
}
|
||||
];
|
||||
|
||||
export const enterpriseFeatures: EnterpriseFeature[] = [
|
||||
{
|
||||
category: 'High Availability',
|
||||
features: [
|
||||
'Multi-region deployment',
|
||||
'Automatic failover',
|
||||
'Zero-downtime updates',
|
||||
'Health monitoring'
|
||||
],
|
||||
icon: <CheckCircleIcon className="w-4 h-4" />,
|
||||
color: 'text-green-500'
|
||||
},
|
||||
{
|
||||
category: 'Security & Compliance',
|
||||
features: [
|
||||
'SOC 2 Type II',
|
||||
'GDPR Compliance',
|
||||
'End-to-end encryption',
|
||||
'Audit trails'
|
||||
],
|
||||
icon: <ShieldIcon className="w-4 h-4" />,
|
||||
color: 'text-blue-500'
|
||||
},
|
||||
{
|
||||
category: 'Multi-tenancy',
|
||||
features: [
|
||||
'Tenant isolation',
|
||||
'Resource quotas',
|
||||
'Custom branding',
|
||||
'Usage analytics'
|
||||
],
|
||||
icon: <LayersIcon className="w-4 h-4" />,
|
||||
color: 'text-purple-500'
|
||||
}
|
||||
];
|
||||
|
||||
export const performanceStatistics: StatisticData[] = [
|
||||
{
|
||||
title: 'Average Response Time',
|
||||
value: 27.5,
|
||||
suffix: 'ms',
|
||||
color: '#30d158',
|
||||
icon: <TimerIcon className="w-4 h-4" />
|
||||
},
|
||||
{
|
||||
title: 'Uptime',
|
||||
value: 99.99,
|
||||
suffix: '%',
|
||||
color: '#30d158',
|
||||
icon: <CheckCircleIcon className="w-4 h-4" />
|
||||
},
|
||||
{
|
||||
title: 'Concurrent Users',
|
||||
value: 10000,
|
||||
suffix: '+',
|
||||
color: '#007aff',
|
||||
icon: <UsersIcon className="w-4 h-4" />
|
||||
},
|
||||
{
|
||||
title: 'Throughput',
|
||||
value: 50000,
|
||||
suffix: 'req/s',
|
||||
color: '#ff9500',
|
||||
icon: <ActivityIcon className="w-4 h-4" />
|
||||
}
|
||||
];
|
||||
|
||||
export const downloadableResources: ResourceDownload[] = [
|
||||
{
|
||||
title: 'Architecture Whitepaper',
|
||||
description: 'Deep dive into CHORUS Services architecture and design principles.',
|
||||
icon: <DownloadIcon className="w-8 h-8" />,
|
||||
buttonText: 'Download PDF',
|
||||
href: '/resources/chorus-architecture-whitepaper.pdf',
|
||||
color: 'text-blue-500'
|
||||
},
|
||||
{
|
||||
title: 'API Reference',
|
||||
description: 'Complete API documentation with examples and SDKs.',
|
||||
icon: <CodeIcon className="w-8 h-8" />,
|
||||
buttonText: 'View Docs',
|
||||
href: '/docs/api-reference',
|
||||
color: 'text-green-500'
|
||||
},
|
||||
{
|
||||
title: 'Sample Projects',
|
||||
description: 'Reference implementations and starter templates.',
|
||||
icon: <GitBranchIcon className="w-8 h-8" />,
|
||||
buttonText: 'GitHub Repos',
|
||||
href: 'https://github.com/chorus-services/samples',
|
||||
color: 'text-purple-500'
|
||||
}
|
||||
];
|
||||
|
||||
export const installationGuides = [
|
||||
{
|
||||
title: 'Docker Compose Guide',
|
||||
description: 'Quick start for development',
|
||||
href: '/docs/installation/docker-compose'
|
||||
},
|
||||
{
|
||||
title: 'Kubernetes Manifests',
|
||||
description: 'Production-ready K8s deployment',
|
||||
href: '/docs/installation/kubernetes'
|
||||
},
|
||||
{
|
||||
title: 'Terraform Modules',
|
||||
description: 'Infrastructure as Code',
|
||||
href: '/docs/installation/terraform'
|
||||
}
|
||||
];
|
||||
|
||||
export const sdkSupport = [
|
||||
{ language: 'JavaScript/TypeScript', status: 'Available', color: 'blue' },
|
||||
{ language: 'Python', status: 'Available', color: 'blue' },
|
||||
{ language: 'Go', status: 'In Development', color: 'orange' },
|
||||
{ language: 'Rust', status: 'Planned', color: 'orange' },
|
||||
{ language: 'Java', status: 'Planned', color: 'orange' }
|
||||
];
|
||||
|
||||
export const authenticationMethods = [
|
||||
{
|
||||
title: 'JWT Bearer Token',
|
||||
example: 'Authorization: Bearer {token}',
|
||||
description: 'Standard JWT tokens with configurable expiration. Supports RS256 and HS256 signing.'
|
||||
},
|
||||
{
|
||||
title: 'API Key Authentication',
|
||||
example: 'X-API-Key: {your-api-key}',
|
||||
description: 'Simple API key authentication for service-to-service communication.'
|
||||
},
|
||||
{
|
||||
title: 'WebSocket Token',
|
||||
example: 'ws://domain.com/ws?token={token}',
|
||||
description: 'WebSocket connection with token-based authentication for real-time features.'
|
||||
}
|
||||
];
|
||||
|
||||
export const monitoringFeatures = [
|
||||
{ name: 'Prometheus Metrics', icon: <CheckCircleIcon className="w-4 h-4 text-green-500" /> },
|
||||
{ name: 'Grafana Dashboards', icon: <CheckCircleIcon className="w-4 h-4 text-green-500" /> },
|
||||
{ name: 'Jaeger Tracing', icon: <CheckCircleIcon className="w-4 h-4 text-green-500" /> },
|
||||
{ name: 'ELK Stack Logging', icon: <CheckCircleIcon className="w-4 h-4 text-green-500" /> }
|
||||
];
|
||||
|
||||
export const securityFeatures = [
|
||||
{ name: 'JWT Authentication', icon: <ShieldIcon className="w-4 h-4 text-blue-500" /> },
|
||||
{ name: 'RBAC Authorization', icon: <LockIcon className="w-4 h-4 text-blue-500" /> },
|
||||
{ name: 'TLS 1.3 Encryption', icon: <ShieldIcon className="w-4 h-4 text-blue-500" /> },
|
||||
{ name: 'Audit Logging', icon: <MonitorIcon className="w-4 h-4 text-blue-500" /> }
|
||||
];
|
||||
Reference in New Issue
Block a user