- Enhanced moebius ring logo design in Blender - Updated Docker Compose for website-only deployment with improved config - Enhanced teaser layout with updated branding integration - Added installation and setup documentation - Consolidated planning and reports documentation - Updated gitignore to exclude Next.js build artifacts and archives 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
410 lines
12 KiB
Markdown
410 lines
12 KiB
Markdown
# CHORUS Services Design Implementation Guide
|
|
|
|
## Executive Summary
|
|
|
|
This document provides comprehensive design implementation guidelines for CHORUS Services, aligned with the current brand specifications including the 8-color CHORUS system, three-font hierarchy, dark mode optimization, and ultra-minimalist aesthetic. The implementation leverages modern CSS design tokens and ensures accessibility compliance while maintaining the sophisticated technical appearance that reflects our distributed AI orchestration platform.
|
|
|
|
## 1. Brand Alignment Overview
|
|
|
|
### Current Brand System Features:
|
|
- **8-Color CHORUS System**: Carbon, mulberry, walnut, nickel, ocean, eucalyptus, sand, coral
|
|
- **Three-Font Hierarchy**: Exo Thin 100 for logos, Inter Tight for content, Inconsolata for code
|
|
- **Dark Mode Default**: Optimized for sophisticated technical aesthetics
|
|
- **Ultra-Minimalist Design**: No border radius, clean geometric approach
|
|
- **Vision Inclusivity**: 8-color accessibility system with complete color-blind support
|
|
- **Three.js Integration**: Möbius ring logo with WebGL rendering
|
|
|
|
## 2. Technology Stack & Implementation Framework
|
|
|
|
### Core Technologies
|
|
```javascript
|
|
// Primary Stack
|
|
- Next.js 14+ (App Router with Server Components)
|
|
- CSS Design Tokens (Custom property system)
|
|
- Framer Motion (Animation and interaction)
|
|
- Three.js (Logo and visual elements)
|
|
- TypeScript (Type-safe implementation)
|
|
|
|
// Build & Development
|
|
- Tailwind CSS (Utility-first with custom configuration)
|
|
- PostCSS (Design token processing)
|
|
- ESLint/Prettier (Code quality)
|
|
- Storybook (Component documentation)
|
|
```
|
|
|
|
### Design Token Architecture
|
|
```css
|
|
/* CHORUS Brand Design Tokens */
|
|
:root {
|
|
/* 8-Color CHORUS System */
|
|
--chorus-carbon: #000000; /* Primary dark */
|
|
--chorus-mulberry: #0b0213; /* Secondary dark */
|
|
--chorus-walnut: #403730; /* Accent warm */
|
|
--chorus-nickel: #c1bfb1; /* Neutral light */
|
|
--chorus-ocean: #3a4654; /* Info blue */
|
|
--chorus-eucalyptus: #3a4540; /* Success green */
|
|
--chorus-sand: #6a5c46; /* Warning amber */
|
|
--chorus-coral: #3e2d2c; /* Danger red */
|
|
|
|
/* Three-Font Hierarchy */
|
|
--font-logo: 'Exo', 'Inter Tight', sans-serif;
|
|
--font-content: 'Inter Tight', 'Inter', system-ui, sans-serif;
|
|
--font-code: 'Inconsolata', ui-monospace, monospace;
|
|
}
|
|
```
|
|
|
|
## 3. Ultra-Minimalist Design Implementation
|
|
|
|
### Core Design Principles
|
|
- **Zero Border Radius**: Pure geometric forms with sharp corners
|
|
- **Dark Mode First**: Optimized for sophisticated technical aesthetics
|
|
- **Typography as Interface**: Clear hierarchy using Exo, Inter Tight, Inconsolata
|
|
- **Color as Communication**: Strategic use of 8-color system for meaning
|
|
- **Motion with Purpose**: Subtle animations that enhance understanding
|
|
|
|
### Component Architecture Strategy
|
|
```typescript
|
|
// Ultra-minimal component approach
|
|
interface ChorusComponentProps {
|
|
variant: 'primary' | 'secondary' | 'accent' | 'neutral';
|
|
colorContext: 'carbon' | 'mulberry' | 'walnut' | 'nickel' | 'ocean' | 'eucalyptus' | 'sand' | 'coral';
|
|
accessibility?: {
|
|
theme: 'default' | 'protanopia' | 'deuteranopia' | 'tritanopia' | 'achromatopsia';
|
|
reducedMotion: boolean;
|
|
};
|
|
}
|
|
|
|
// Geometric button implementation
|
|
export const ChorusButton: React.FC<ChorusComponentProps> = ({
|
|
variant,
|
|
colorContext,
|
|
accessibility = { theme: 'default', reducedMotion: false }
|
|
}) => {
|
|
return (
|
|
<button className={`
|
|
chorus-button
|
|
chorus-button--${variant}
|
|
chorus-color--${colorContext}
|
|
${accessibility.theme !== 'default' ? `chorus-a11y--${accessibility.theme}` : ''}
|
|
`}>
|
|
{children}
|
|
</button>
|
|
);
|
|
};
|
|
```
|
|
|
|
## 4. Typography Hierarchy Implementation
|
|
|
|
### Three-Font System Application
|
|
|
|
```css
|
|
/* Logo Typography - Exo Thin */
|
|
.chorus-logo-text {
|
|
font-family: var(--font-logo);
|
|
font-weight: 100; /* Thin weight for sophistication */
|
|
font-size: clamp(2rem, 5vw, 4rem);
|
|
line-height: 1.1;
|
|
letter-spacing: -0.02em;
|
|
color: var(--chorus-carbon);
|
|
}
|
|
|
|
/* Content Typography - Inter Tight */
|
|
.chorus-heading-1 {
|
|
font-family: var(--font-content);
|
|
font-weight: 600;
|
|
font-size: clamp(2.5rem, 6vw, 4rem);
|
|
line-height: 1.2;
|
|
color: var(--text-primary);
|
|
}
|
|
|
|
.chorus-body-text {
|
|
font-family: var(--font-content);
|
|
font-weight: 400;
|
|
font-size: 1.125rem;
|
|
line-height: 1.6;
|
|
color: var(--text-secondary);
|
|
}
|
|
|
|
/* Code Typography - Inconsolata */
|
|
.chorus-code {
|
|
font-family: var(--font-code);
|
|
font-weight: 400;
|
|
font-size: 0.9rem;
|
|
line-height: 1.5;
|
|
background: rgba(255, 255, 255, 0.05);
|
|
padding: 0.125rem 0.375rem;
|
|
border: 1px solid rgba(255, 255, 255, 0.1);
|
|
}
|
|
```
|
|
|
|
### Three.js Logo Integration
|
|
|
|
```typescript
|
|
// Three.js Möbius Ring Logo Component
|
|
import * as THREE from 'three';
|
|
|
|
export const ChorusMobiusLogo: React.FC<{
|
|
size: number;
|
|
colorTheme: 'carbon' | 'mulberry' | 'walnut';
|
|
accessibility?: string;
|
|
}> = ({ size, colorTheme, accessibility }) => {
|
|
const canvasRef = useRef<HTMLCanvasElement>(null);
|
|
|
|
useEffect(() => {
|
|
if (!canvasRef.current) return;
|
|
|
|
const scene = new THREE.Scene();
|
|
const camera = new THREE.PerspectiveCamera(75, 1, 0.1, 1000);
|
|
const renderer = new THREE.WebGLRenderer({
|
|
canvas: canvasRef.current,
|
|
alpha: true,
|
|
antialias: true
|
|
});
|
|
|
|
// Möbius strip geometry
|
|
const mobiusGeometry = new THREE.ParametricGeometry(
|
|
(u, v, target) => {
|
|
const x = (1 + 0.5 * v * Math.cos(0.5 * u)) * Math.cos(u);
|
|
const y = (1 + 0.5 * v * Math.cos(0.5 * u)) * Math.sin(u);
|
|
const z = 0.5 * v * Math.sin(0.5 * u);
|
|
target.set(x, y, z);
|
|
},
|
|
64, 8
|
|
);
|
|
|
|
// Material based on color theme and accessibility
|
|
const materialColor = getAccessibleColor(colorTheme, accessibility);
|
|
const material = new THREE.MeshPhongMaterial({
|
|
color: materialColor,
|
|
transparent: true,
|
|
opacity: 0.9
|
|
});
|
|
|
|
const mobius = new THREE.Mesh(mobiusGeometry, material);
|
|
scene.add(mobius);
|
|
|
|
// Subtle rotation animation
|
|
const animate = () => {
|
|
mobius.rotation.x += 0.005;
|
|
mobius.rotation.y += 0.01;
|
|
renderer.render(scene, camera);
|
|
requestAnimationFrame(animate);
|
|
};
|
|
|
|
animate();
|
|
}, [colorTheme, accessibility]);
|
|
|
|
return (
|
|
<canvas
|
|
ref={canvasRef}
|
|
className="chorus-logo"
|
|
style={{ width: size, height: size }}
|
|
aria-label="CHORUS Services Logo - Möbius Ring"
|
|
/>
|
|
);
|
|
};
|
|
```
|
|
```
|
|
|
|
## **Component Architecture**
|
|
|
|
Here's how to structure your components with Ant Design:
|
|
|
|
```javascript
|
|
// components/ui/PerformanceCard.jsx
|
|
import { Card, Typography, Space, Tag } from 'antd';
|
|
import { motion } from 'framer-motion';
|
|
|
|
const { Title, Text } = Typography;
|
|
|
|
export const PerformanceCard = ({ title, description, metrics, delay = 0 }) => {
|
|
return (
|
|
<motion.div
|
|
initial={{ opacity: 0, y: 40 }}
|
|
whileInView={{ opacity: 1, y: 0 }}
|
|
transition={{ duration: 0.6, delay }}
|
|
viewport={{ once: true }}
|
|
>
|
|
<Card
|
|
hoverable
|
|
className="performance-card"
|
|
styles={{
|
|
body: { padding: '32px' }
|
|
}}
|
|
>
|
|
<Space direction="vertical" size="large" style={{ width: '100%' }}>
|
|
<Title level={3} style={{ margin: 0, color: '#f2f2f7' }}>
|
|
{title}
|
|
</Title>
|
|
|
|
<Text style={{ fontSize: '16px', lineHeight: '1.6', color: '#a1a1a6' }}>
|
|
{description}
|
|
</Text>
|
|
|
|
<Space wrap>
|
|
{metrics.map((metric, index) => (
|
|
<Tag
|
|
key={index}
|
|
color="processing"
|
|
style={{
|
|
padding: '8px 16px',
|
|
fontSize: '14px',
|
|
fontWeight: 600,
|
|
border: 'none',
|
|
background: 'rgba(0, 122, 255, 0.1)',
|
|
color: '#007aff'
|
|
}}
|
|
>
|
|
{metric}
|
|
</Tag>
|
|
))}
|
|
</Space>
|
|
</Space>
|
|
</Card>
|
|
</motion.div>
|
|
);
|
|
};
|
|
```
|
|
|
|
## **Framer Motion Integration**
|
|
|
|
Ant Design components work seamlessly with Framer Motion:
|
|
|
|
```javascript
|
|
// components/sections/HeroSection.jsx
|
|
import { Layout, Typography, Button, Space } from 'antd';
|
|
import { motion } from 'framer-motion';
|
|
|
|
const { Header } = Layout;
|
|
const { Title, Text } = Typography;
|
|
|
|
export const HeroSection = () => {
|
|
return (
|
|
<Header
|
|
style={{
|
|
height: '100vh',
|
|
display: 'flex',
|
|
alignItems: 'center',
|
|
background: 'linear-gradient(135deg, #000000 0%, #1a1a1a 100%)'
|
|
}}
|
|
>
|
|
<motion.div
|
|
initial={{ opacity: 0 }}
|
|
animate={{ opacity: 1 }}
|
|
transition={{ duration: 1 }}
|
|
style={{ maxWidth: '1200px', margin: '0 auto', padding: '0 24px' }}
|
|
>
|
|
<Space direction="vertical" size="large" align="center">
|
|
<motion.div
|
|
initial={{ y: 40, opacity: 0 }}
|
|
animate={{ y: 0, opacity: 1 }}
|
|
transition={{ duration: 0.8, delay: 0.2 }}
|
|
>
|
|
<Title
|
|
level={1}
|
|
style={{
|
|
fontSize: '84px',
|
|
fontWeight: 700,
|
|
textAlign: 'center',
|
|
margin: 0,
|
|
background: 'linear-gradient(135deg, #f2f2f7 0%, #007aff 100%)',
|
|
WebkitBackgroundClip: 'text',
|
|
WebkitTextFillColor: 'transparent'
|
|
}}
|
|
>
|
|
CHORUS Services
|
|
</Title>
|
|
</motion.div>
|
|
|
|
<motion.div
|
|
initial={{ y: 40, opacity: 0 }}
|
|
animate={{ y: 0, opacity: 1 }}
|
|
transition={{ duration: 0.8, delay: 0.4 }}
|
|
>
|
|
<Text
|
|
style={{
|
|
fontSize: '36px',
|
|
textAlign: 'center',
|
|
color: '#a1a1a6'
|
|
}}
|
|
>
|
|
Distributed AI Orchestration Without the Hallucinations
|
|
</Text>
|
|
</motion.div>
|
|
|
|
<motion.div
|
|
initial={{ y: 40, opacity: 0 }}
|
|
animate={{ y: 0, opacity: 1 }}
|
|
transition={{ duration: 0.8, delay: 0.6 }}
|
|
>
|
|
<Space size="large">
|
|
<Button
|
|
type="primary"
|
|
size="large"
|
|
style={{ height: '56px', padding: '0 32px', fontSize: '16px' }}
|
|
>
|
|
Explore the Platform
|
|
</Button>
|
|
<Button
|
|
size="large"
|
|
style={{ height: '56px', padding: '0 32px', fontSize: '16px' }}
|
|
>
|
|
See Technical Demos
|
|
</Button>
|
|
</Space>
|
|
</motion.div>
|
|
</Space>
|
|
</motion.div>
|
|
</Header>
|
|
);
|
|
};
|
|
```
|
|
|
|
## **Parallax Implementation with Ant Design**
|
|
|
|
```javascript
|
|
// components/sections/ParallaxSection.jsx
|
|
import { Layout, Row, Col, Card } from 'antd';
|
|
import { motion, useScroll, useTransform } from 'framer-motion';
|
|
import { useRef } from 'react';
|
|
|
|
const { Content } = Layout;
|
|
|
|
export const ParallaxSection = ({ children }) => {
|
|
const ref = useRef(null);
|
|
const { scrollYProgress } = useScroll({
|
|
target: ref,
|
|
offset: ["start end", "end start"]
|
|
});
|
|
|
|
const y1 = useTransform(scrollYProgress, [0, 1], [0, -200]);
|
|
const y2 = useTransform(scrollYProgress, [0, 1], [0, 200]);
|
|
|
|
return (
|
|
<Layout ref={ref} style={{ minHeight: '100vh', position: 'relative' }}>
|
|
{/* Background Layer */}
|
|
<motion.div
|
|
style={{
|
|
position: 'absolute',
|
|
top: 0,
|
|
left: 0,
|
|
right: 0,
|
|
bottom: 0,
|
|
background: 'radial-gradient(circle at 50% 50%, #1a1a1a 0%, #000000 100%)',
|
|
y: y1
|
|
}}
|
|
/>
|
|
|
|
{/* Content Layer */}
|
|
<Content style={{ position: 'relative', zIndex: 1, padding: '120px 24px' }}>
|
|
<motion.div style={{ y: y2 }}>
|
|
{children}
|
|
</motion.div>
|
|
</Content>
|
|
</Layout>
|
|
);
|
|
};
|
|
```
|
|
|
|
|