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:
anthonyrawlins
2025-08-01 22:45:06 +10:00
commit f343f89d24
50 changed files with 16178 additions and 0 deletions

644
utils/animations.ts Normal file
View 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
View 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;

View 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" /> }
];