├── nexus
├── metadata.json
├── utils
│ └── cn.ts
├── .gitignore
├── index.tsx
├── types.ts
├── package.json
├── README.md
├── tsconfig.json
├── vite.config.ts
├── App.tsx
├── components
│ ├── Navbar.tsx
│ ├── Philosophy.tsx
│ ├── Footer.tsx
│ └── Modules.tsx
└── index.html
├── aelia
├── metadata.json
├── .gitignore
├── index.tsx
├── package.json
├── types.ts
├── README.md
├── tsconfig.json
├── vite.config.ts
├── components
│ ├── ui
│ │ ├── SlatReveal.tsx
│ │ └── MagneticButton.tsx
│ ├── Philosophy.tsx
│ ├── UGCGrid.tsx
│ ├── Hero.tsx
│ └── Footer.tsx
├── App.tsx
├── constants.ts
└── index.html
├── chromaflow
├── metadata.json
├── .gitignore
├── index.tsx
├── types.ts
├── README.md
├── tsconfig.json
├── vite.config.ts
├── package.json
├── hooks
│ └── useSmoothScroll.ts
├── App.tsx
├── services
│ └── geminiService.ts
├── components
│ ├── CustomCursor.tsx
│ ├── Philosophy.tsx
│ ├── Footer.tsx
│ ├── Services.tsx
│ ├── Installations.tsx
│ └── Hero.tsx
└── index.html
├── aether
├── metadata.json
├── .gitignore
├── index.tsx
├── package.json
├── README.md
├── tsconfig.json
└── vite.config.ts
├── forge
├── metadata.json
├── .gitignore
├── index.tsx
├── README.md
├── types.ts
├── package.json
├── tsconfig.json
├── vite.config.ts
├── App.tsx
├── services
│ └── geminiService.ts
├── components
│ ├── Philosophy.tsx
│ ├── Legacy.tsx
│ ├── Hero.tsx
│ ├── Craftsmanship.tsx
│ ├── Materials.tsx
│ └── Collections.tsx
├── constants.ts
└── index.html
├── arche
├── metadata.json
├── .gitignore
├── index.tsx
├── types.ts
├── README.md
├── package.json
├── tsconfig.json
├── vite.config.ts
├── App.tsx
├── components
│ ├── SmoothScroll.tsx
│ ├── Philosophy.tsx
│ ├── Navigation.tsx
│ ├── Journal.tsx
│ ├── Services.tsx
│ ├── Footer.tsx
│ └── Hero.tsx
├── index.html
└── constants.ts
├── aura
├── metadata.json
├── .gitignore
├── index.tsx
├── types.ts
├── README.md
├── tsconfig.json
├── vite.config.ts
├── package.json
├── components
│ ├── SmoothScroll.tsx
│ └── Navigation.tsx
├── App.tsx
├── services
│ └── geminiService.ts
├── sections
│ ├── Philosophy.tsx
│ ├── Hero.tsx
│ ├── Journal.tsx
│ ├── Collection.tsx
│ └── Routine.tsx
├── constants.ts
└── index.html
├── velocite
├── metadata.json
├── .gitignore
├── index.tsx
├── types.ts
├── package.json
├── README.md
├── tsconfig.json
├── vite.config.ts
├── App.tsx
├── services
│ └── geminiService.ts
├── components
│ ├── Manifesto.tsx
│ ├── Circuit.tsx
│ ├── Hero.tsx
│ ├── Features.tsx
│ ├── Models.tsx
│ └── Footer.tsx
├── constants.ts
└── index.html
└── chronos
├── metadata.json
├── .gitignore
├── types.ts
├── index.tsx
├── README.md
├── tsconfig.json
├── vite.config.ts
├── package.json
├── App.tsx
├── index.html
└── components
└── UI.tsx
/nexus/metadata.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Nexus",
3 | "description": "An intelligent, frictionless workflow platform featuring a modular, data-driven design.",
4 | "requestFramePermissions": []
5 | }
--------------------------------------------------------------------------------
/nexus/utils/cn.ts:
--------------------------------------------------------------------------------
1 | import { clsx, type ClassValue } from "clsx";
2 | import { twMerge } from "tailwind-merge";
3 |
4 | export function cn(...inputs: ClassValue[]) {
5 | return twMerge(clsx(inputs));
6 | }
--------------------------------------------------------------------------------
/aelia/metadata.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "AELIA - Luxury Leather Goods",
3 | "description": "A luxury e-commerce landing page focusing on inheritance quality, transparency, and subtle grandeur.",
4 | "requestFramePermissions": []
5 | }
--------------------------------------------------------------------------------
/chromaflow/metadata.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "ChromaFlow",
3 | "description": "A dynamic art and tech studio portfolio featuring interactive light installations, generative art, and fluid UI experiences.",
4 | "requestFramePermissions": []
5 | }
--------------------------------------------------------------------------------
/aether/metadata.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "AETHER Data Intelligence",
3 | "description": "A high-fidelity, sci-fi inspired data intelligence SaaS platform featuring real-time visualization and zero-latency design principles.",
4 | "requestFramePermissions": []
5 | }
--------------------------------------------------------------------------------
/forge/metadata.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Forge - Artisan Cookware",
3 | "description": "A digital experience for high-end heritage cookware, featuring heavy interactive elements, heat-map visuals, and an AI Artisan assistant.",
4 | "requestFramePermissions": []
5 | }
--------------------------------------------------------------------------------
/arche/metadata.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Arché - Holistic Design Studio",
3 | "description": "A digital home for an architecture firm blending nature with brutalism. Features smooth scrolling, parallax effects, and tactile interactions.",
4 | "requestFramePermissions": []
5 | }
--------------------------------------------------------------------------------
/aura/metadata.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Aura - Botanical Skincare",
3 | "description": "An ethereal, ultra-clean digital storefront for science-backed skincare. Features smooth scrolling, parallax effects, and a weightless user experience.",
4 | "requestFramePermissions": []
5 | }
--------------------------------------------------------------------------------
/velocite/metadata.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Velocité - Hyper-Electric",
3 | "description": "A futuristic digital showroom for the Velocité electric vehicle brand, featuring kinetic typography, immersive scroll interactions, and an AI-powered co-pilot.",
4 | "requestFramePermissions": []
5 | }
--------------------------------------------------------------------------------
/chronos/metadata.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "CHRONOS - Temporal Architecture",
3 | "description": "A high-end, immersive 3D data visualization platform for temporal architecture, featuring reactive particle systems, post-processing effects, and scroll-driven narratives.",
4 | "requestFramePermissions": []
5 | }
--------------------------------------------------------------------------------
/aelia/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | dist
12 | dist-ssr
13 | *.local
14 |
15 | # Editor directories and files
16 | .vscode/*
17 | !.vscode/extensions.json
18 | .idea
19 | .DS_Store
20 | *.suo
21 | *.ntvs*
22 | *.njsproj
23 | *.sln
24 | *.sw?
25 |
--------------------------------------------------------------------------------
/aether/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | dist
12 | dist-ssr
13 | *.local
14 |
15 | # Editor directories and files
16 | .vscode/*
17 | !.vscode/extensions.json
18 | .idea
19 | .DS_Store
20 | *.suo
21 | *.ntvs*
22 | *.njsproj
23 | *.sln
24 | *.sw?
25 |
--------------------------------------------------------------------------------
/arche/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | dist
12 | dist-ssr
13 | *.local
14 |
15 | # Editor directories and files
16 | .vscode/*
17 | !.vscode/extensions.json
18 | .idea
19 | .DS_Store
20 | *.suo
21 | *.ntvs*
22 | *.njsproj
23 | *.sln
24 | *.sw?
25 |
--------------------------------------------------------------------------------
/aura/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | dist
12 | dist-ssr
13 | *.local
14 |
15 | # Editor directories and files
16 | .vscode/*
17 | !.vscode/extensions.json
18 | .idea
19 | .DS_Store
20 | *.suo
21 | *.ntvs*
22 | *.njsproj
23 | *.sln
24 | *.sw?
25 |
--------------------------------------------------------------------------------
/chronos/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | dist
12 | dist-ssr
13 | *.local
14 |
15 | # Editor directories and files
16 | .vscode/*
17 | !.vscode/extensions.json
18 | .idea
19 | .DS_Store
20 | *.suo
21 | *.ntvs*
22 | *.njsproj
23 | *.sln
24 | *.sw?
25 |
--------------------------------------------------------------------------------
/forge/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | dist
12 | dist-ssr
13 | *.local
14 |
15 | # Editor directories and files
16 | .vscode/*
17 | !.vscode/extensions.json
18 | .idea
19 | .DS_Store
20 | *.suo
21 | *.ntvs*
22 | *.njsproj
23 | *.sln
24 | *.sw?
25 |
--------------------------------------------------------------------------------
/nexus/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | dist
12 | dist-ssr
13 | *.local
14 |
15 | # Editor directories and files
16 | .vscode/*
17 | !.vscode/extensions.json
18 | .idea
19 | .DS_Store
20 | *.suo
21 | *.ntvs*
22 | *.njsproj
23 | *.sln
24 | *.sw?
25 |
--------------------------------------------------------------------------------
/velocite/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | dist
12 | dist-ssr
13 | *.local
14 |
15 | # Editor directories and files
16 | .vscode/*
17 | !.vscode/extensions.json
18 | .idea
19 | .DS_Store
20 | *.suo
21 | *.ntvs*
22 | *.njsproj
23 | *.sln
24 | *.sw?
25 |
--------------------------------------------------------------------------------
/chromaflow/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | dist
12 | dist-ssr
13 | *.local
14 |
15 | # Editor directories and files
16 | .vscode/*
17 | !.vscode/extensions.json
18 | .idea
19 | .DS_Store
20 | *.suo
21 | *.ntvs*
22 | *.njsproj
23 | *.sln
24 | *.sw?
25 |
--------------------------------------------------------------------------------
/chronos/types.ts:
--------------------------------------------------------------------------------
1 | export interface SectionProps {
2 | opacity: number;
3 | }
4 |
5 | export enum SectionType {
6 | HERO,
7 | MODALITIES,
8 | DEEP_DIVE,
9 | ENGINE,
10 | HORIZON,
11 | CONTACT
12 | }
13 |
14 | export const THEME = {
15 | black: '#000000',
16 | violetBlue: '#3A0066',
17 | cyan: '#00FFFF',
18 | plasmaRed: '#FF0054',
19 | plasmaOrange: '#FF7B00',
20 | white: '#E0E0E0',
21 | };
--------------------------------------------------------------------------------
/aether/index.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom/client';
3 | import App from './App';
4 |
5 | const rootElement = document.getElementById('root');
6 | if (!rootElement) {
7 | throw new Error("Could not find root element to mount to");
8 | }
9 |
10 | const root = ReactDOM.createRoot(rootElement);
11 | root.render(
12 |
13 |
14 |
15 | );
--------------------------------------------------------------------------------
/aura/index.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom/client';
3 | import App from './App';
4 |
5 | const rootElement = document.getElementById('root');
6 | if (!rootElement) {
7 | throw new Error("Could not find root element to mount to");
8 | }
9 |
10 | const root = ReactDOM.createRoot(rootElement);
11 | root.render(
12 |
13 |
14 |
15 | );
--------------------------------------------------------------------------------
/chronos/index.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom/client';
3 | import App from './App';
4 |
5 | const rootElement = document.getElementById('root');
6 | if (!rootElement) {
7 | throw new Error("Could not find root element to mount to");
8 | }
9 |
10 | const root = ReactDOM.createRoot(rootElement);
11 | root.render(
12 |
13 |
14 |
15 | );
--------------------------------------------------------------------------------
/forge/index.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom/client';
3 | import App from './App';
4 |
5 | const rootElement = document.getElementById('root');
6 | if (!rootElement) {
7 | throw new Error("Could not find root element to mount to");
8 | }
9 |
10 | const root = ReactDOM.createRoot(rootElement);
11 | root.render(
12 |
13 |
14 |
15 | );
--------------------------------------------------------------------------------
/nexus/index.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom/client';
3 | import App from './App';
4 |
5 | const rootElement = document.getElementById('root');
6 | if (!rootElement) {
7 | throw new Error("Could not find root element to mount to");
8 | }
9 |
10 | const root = ReactDOM.createRoot(rootElement);
11 | root.render(
12 |
13 |
14 |
15 | );
--------------------------------------------------------------------------------
/velocite/index.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom/client';
3 | import App from './App';
4 |
5 | const rootElement = document.getElementById('root');
6 | if (!rootElement) {
7 | throw new Error("Could not find root element to mount to");
8 | }
9 |
10 | const root = ReactDOM.createRoot(rootElement);
11 | root.render(
12 |
13 |
14 |
15 | );
--------------------------------------------------------------------------------
/aelia/index.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom/client';
3 | import App from './App';
4 |
5 | const rootElement = document.getElementById('root');
6 | if (!rootElement) {
7 | throw new Error("Could not find root element to mount to");
8 | }
9 |
10 | const root = ReactDOM.createRoot(rootElement);
11 | root.render(
12 |
13 |
14 |
15 | );
16 |
--------------------------------------------------------------------------------
/arche/index.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom/client';
3 | import App from './App';
4 |
5 | const rootElement = document.getElementById('root');
6 | if (!rootElement) {
7 | throw new Error("Could not find root element to mount to");
8 | }
9 |
10 | const root = ReactDOM.createRoot(rootElement);
11 | root.render(
12 |
13 |
14 |
15 | );
16 |
--------------------------------------------------------------------------------
/chromaflow/index.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom/client';
3 | import App from './App';
4 |
5 | const rootElement = document.getElementById('root');
6 | if (!rootElement) {
7 | throw new Error("Could not find root element to mount to");
8 | }
9 |
10 | const root = ReactDOM.createRoot(rootElement);
11 | root.render(
12 |
13 |
14 |
15 | );
16 |
--------------------------------------------------------------------------------
/aura/types.ts:
--------------------------------------------------------------------------------
1 | export interface Product {
2 | id: number;
3 | name: string;
4 | price: string;
5 | image: string;
6 | description: string;
7 | }
8 |
9 | export interface Ingredient {
10 | id: number;
11 | name: string;
12 | description: string;
13 | benefit: string;
14 | image: string; // Using image to simulate macro video
15 | }
16 |
17 | export interface JournalEntry {
18 | id: number;
19 | title: string;
20 | category: string;
21 | image: string;
22 | }
23 |
--------------------------------------------------------------------------------
/chromaflow/types.ts:
--------------------------------------------------------------------------------
1 | export interface InstallationProject {
2 | id: string;
3 | title: string;
4 | image: string;
5 | description: string;
6 | }
7 |
8 | export interface ServiceItem {
9 | id: string;
10 | title: string;
11 | description: string;
12 | patternType: 'waves' | 'grid' | 'particles';
13 | }
14 |
15 | export interface LabItem {
16 | id: string;
17 | type: 'image' | 'code' | 'generative';
18 | content: string;
19 | span?: string; // col-span-2 etc
20 | }
21 |
--------------------------------------------------------------------------------
/nexus/types.ts:
--------------------------------------------------------------------------------
1 | export interface ModuleItem {
2 | id: string;
3 | title: string;
4 | description: string;
5 | mockData: string;
6 | }
7 |
8 | export interface ArchitectureItem {
9 | id: string;
10 | title: string;
11 | description: string;
12 | detail: string;
13 | metric: string;
14 | }
15 |
16 | export interface PricingPlan {
17 | id: string;
18 | name: string;
19 | price: string;
20 | features: string[];
21 | }
22 |
23 | export interface CaseStudy {
24 | id: string;
25 | client: string;
26 | impact: string;
27 | quote: string;
28 | dataPoint: string;
29 | }
--------------------------------------------------------------------------------
/aelia/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "aelia---luxury-leather-goods",
3 | "private": true,
4 | "version": "0.0.0",
5 | "type": "module",
6 | "scripts": {
7 | "dev": "vite",
8 | "build": "vite build",
9 | "preview": "vite preview"
10 | },
11 | "dependencies": {
12 | "react": "^19.2.0",
13 | "react-dom": "^19.2.0",
14 | "framer-motion": "^12.23.24",
15 | "lucide-react": "^0.554.0"
16 | },
17 | "devDependencies": {
18 | "@types/node": "^22.14.0",
19 | "@vitejs/plugin-react": "^5.0.0",
20 | "typescript": "~5.8.2",
21 | "vite": "^6.2.0"
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/aelia/types.ts:
--------------------------------------------------------------------------------
1 | export interface Product {
2 | id: string;
3 | name: string;
4 | price: string;
5 | image: string;
6 | description: string;
7 | }
8 |
9 | export interface Material {
10 | id: string;
11 | name: string;
12 | origin: string;
13 | image: string;
14 | description: string;
15 | }
16 |
17 | export interface SourcingStep {
18 | id: number;
19 | title: string;
20 | description: string;
21 | location: string;
22 | }
23 |
24 | export interface Testimonial {
25 | id: string;
26 | author: string;
27 | location: string;
28 | image: string;
29 | text: string;
30 | }
31 |
--------------------------------------------------------------------------------
/arche/types.ts:
--------------------------------------------------------------------------------
1 | export interface Project {
2 | id: number;
3 | title: string;
4 | year: string;
5 | category: string;
6 | image: string;
7 | }
8 |
9 | export interface Material {
10 | id: string;
11 | name: string;
12 | origin: string;
13 | texture: string;
14 | description: string;
15 | }
16 |
17 | export interface Service {
18 | id: string;
19 | title: string;
20 | description: string;
21 | image: string;
22 | }
23 |
24 | export interface JournalEntry {
25 | id: number;
26 | type: 'image' | 'quote';
27 | content: string;
28 | author?: string;
29 | date?: string;
30 | }
31 |
--------------------------------------------------------------------------------
/aether/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "aether-data-intelligence",
3 | "private": true,
4 | "version": "0.0.0",
5 | "type": "module",
6 | "scripts": {
7 | "dev": "vite",
8 | "build": "vite build",
9 | "preview": "vite preview"
10 | },
11 | "dependencies": {
12 | "react": "^19.2.0",
13 | "react-dom": "^19.2.0",
14 | "lucide-react": "^0.554.0",
15 | "framer-motion": "^12.23.24",
16 | "recharts": "^3.5.0"
17 | },
18 | "devDependencies": {
19 | "@types/node": "^22.14.0",
20 | "@vitejs/plugin-react": "^5.0.0",
21 | "typescript": "~5.8.2",
22 | "vite": "^6.2.0"
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/velocite/types.ts:
--------------------------------------------------------------------------------
1 | export interface CarModel {
2 | id: string;
3 | name: string;
4 | tagline: string;
5 | specs: {
6 | acceleration: string;
7 | range: string;
8 | hp: string;
9 | };
10 | image: string;
11 | }
12 |
13 | export interface TechComponent {
14 | id: string;
15 | name: string;
16 | description: string;
17 | specs: string[];
18 | }
19 |
20 | export interface Feature {
21 | id: string;
22 | title: string;
23 | description: string;
24 | iconPath: string;
25 | }
26 |
27 | export interface ChatMessage {
28 | role: 'user' | 'model';
29 | text: string;
30 | isThinking?: boolean;
31 | }
--------------------------------------------------------------------------------
/velocite/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "velocité---hyper-electric",
3 | "private": true,
4 | "version": "0.0.0",
5 | "type": "module",
6 | "scripts": {
7 | "dev": "vite",
8 | "build": "vite build",
9 | "preview": "vite preview"
10 | },
11 | "dependencies": {
12 | "react": "^19.2.0",
13 | "react-dom": "^19.2.0",
14 | "framer-motion": "^12.23.24",
15 | "lucide-react": "^0.554.0",
16 | "@google/genai": "^1.30.0"
17 | },
18 | "devDependencies": {
19 | "@types/node": "^22.14.0",
20 | "@vitejs/plugin-react": "^5.0.0",
21 | "typescript": "~5.8.2",
22 | "vite": "^6.2.0"
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/aura/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | # Run and deploy your AI Studio app
6 |
7 | This contains everything you need to run your app locally.
8 |
9 | View your app in AI Studio: https://ai.studio/apps/drive/1ZQchPl-P72dLsZOEz-V3V6PW-lMDl0VD
10 |
11 | ## Run Locally
12 |
13 | **Prerequisites:** Node.js
14 |
15 |
16 | 1. Install dependencies:
17 | `npm install`
18 | 2. Set the `GEMINI_API_KEY` in [.env.local](.env.local) to your Gemini API key
19 | 3. Run the app:
20 | `npm run dev`
21 |
--------------------------------------------------------------------------------
/nexus/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "nexus",
3 | "private": true,
4 | "version": "0.0.0",
5 | "type": "module",
6 | "scripts": {
7 | "dev": "vite",
8 | "build": "vite build",
9 | "preview": "vite preview"
10 | },
11 | "dependencies": {
12 | "react": "^19.2.0",
13 | "react-dom": "^19.2.0",
14 | "framer-motion": "^12.23.24",
15 | "lucide-react": "^0.554.0",
16 | "tailwind-merge": "^3.4.0",
17 | "clsx": "^2.1.1"
18 | },
19 | "devDependencies": {
20 | "@types/node": "^22.14.0",
21 | "@vitejs/plugin-react": "^5.0.0",
22 | "typescript": "~5.8.2",
23 | "vite": "^6.2.0"
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/aelia/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | # Run and deploy your AI Studio app
6 |
7 | This contains everything you need to run your app locally.
8 |
9 | View your app in AI Studio: https://ai.studio/apps/drive/1v7JehV_XCw4VFORF6OHk4KreJrgl9wcy
10 |
11 | ## Run Locally
12 |
13 | **Prerequisites:** Node.js
14 |
15 |
16 | 1. Install dependencies:
17 | `npm install`
18 | 2. Set the `GEMINI_API_KEY` in [.env.local](.env.local) to your Gemini API key
19 | 3. Run the app:
20 | `npm run dev`
21 |
--------------------------------------------------------------------------------
/aether/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | # Run and deploy your AI Studio app
6 |
7 | This contains everything you need to run your app locally.
8 |
9 | View your app in AI Studio: https://ai.studio/apps/drive/1dtydPTJqNYpURZVZsixduF9vns219bjP
10 |
11 | ## Run Locally
12 |
13 | **Prerequisites:** Node.js
14 |
15 |
16 | 1. Install dependencies:
17 | `npm install`
18 | 2. Set the `GEMINI_API_KEY` in [.env.local](.env.local) to your Gemini API key
19 | 3. Run the app:
20 | `npm run dev`
21 |
--------------------------------------------------------------------------------
/arche/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | # Run and deploy your AI Studio app
6 |
7 | This contains everything you need to run your app locally.
8 |
9 | View your app in AI Studio: https://ai.studio/apps/drive/1FrD-MDTTyvoG3kbZlzMzaBW1vfiZ5MZ5
10 |
11 | ## Run Locally
12 |
13 | **Prerequisites:** Node.js
14 |
15 |
16 | 1. Install dependencies:
17 | `npm install`
18 | 2. Set the `GEMINI_API_KEY` in [.env.local](.env.local) to your Gemini API key
19 | 3. Run the app:
20 | `npm run dev`
21 |
--------------------------------------------------------------------------------
/chronos/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | # Run and deploy your AI Studio app
6 |
7 | This contains everything you need to run your app locally.
8 |
9 | View your app in AI Studio: https://ai.studio/apps/drive/1UWwhW3p3p4Qs8K9jW_zSdm6byUfeub7Q
10 |
11 | ## Run Locally
12 |
13 | **Prerequisites:** Node.js
14 |
15 |
16 | 1. Install dependencies:
17 | `npm install`
18 | 2. Set the `GEMINI_API_KEY` in [.env.local](.env.local) to your Gemini API key
19 | 3. Run the app:
20 | `npm run dev`
21 |
--------------------------------------------------------------------------------
/forge/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | # Run and deploy your AI Studio app
6 |
7 | This contains everything you need to run your app locally.
8 |
9 | View your app in AI Studio: https://ai.studio/apps/drive/1jnd0--GkkYAqCUE430rFiyH9qBNsxFq5
10 |
11 | ## Run Locally
12 |
13 | **Prerequisites:** Node.js
14 |
15 |
16 | 1. Install dependencies:
17 | `npm install`
18 | 2. Set the `GEMINI_API_KEY` in [.env.local](.env.local) to your Gemini API key
19 | 3. Run the app:
20 | `npm run dev`
21 |
--------------------------------------------------------------------------------
/nexus/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | # Run and deploy your AI Studio app
6 |
7 | This contains everything you need to run your app locally.
8 |
9 | View your app in AI Studio: https://ai.studio/apps/drive/1QAxTDcXTjZ4AiOIoevZeIeqD18Sf327H
10 |
11 | ## Run Locally
12 |
13 | **Prerequisites:** Node.js
14 |
15 |
16 | 1. Install dependencies:
17 | `npm install`
18 | 2. Set the `GEMINI_API_KEY` in [.env.local](.env.local) to your Gemini API key
19 | 3. Run the app:
20 | `npm run dev`
21 |
--------------------------------------------------------------------------------
/velocite/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | # Run and deploy your AI Studio app
6 |
7 | This contains everything you need to run your app locally.
8 |
9 | View your app in AI Studio: https://ai.studio/apps/drive/1SDmrewGi7OE4NHUpktP-893EkvQRv032
10 |
11 | ## Run Locally
12 |
13 | **Prerequisites:** Node.js
14 |
15 |
16 | 1. Install dependencies:
17 | `npm install`
18 | 2. Set the `GEMINI_API_KEY` in [.env.local](.env.local) to your Gemini API key
19 | 3. Run the app:
20 | `npm run dev`
21 |
--------------------------------------------------------------------------------
/chromaflow/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | # Run and deploy your AI Studio app
6 |
7 | This contains everything you need to run your app locally.
8 |
9 | View your app in AI Studio: https://ai.studio/apps/drive/1yYHxZ8p7GubsgUFBEpQXcVzy0PBoqA1K
10 |
11 | ## Run Locally
12 |
13 | **Prerequisites:** Node.js
14 |
15 |
16 | 1. Install dependencies:
17 | `npm install`
18 | 2. Set the `GEMINI_API_KEY` in [.env.local](.env.local) to your Gemini API key
19 | 3. Run the app:
20 | `npm run dev`
21 |
--------------------------------------------------------------------------------
/forge/types.ts:
--------------------------------------------------------------------------------
1 | export interface Product {
2 | id: string;
3 | name: string;
4 | weight: number;
5 | image: string;
6 | description: string;
7 | material: string;
8 | }
9 |
10 | export interface Material {
11 | id: string;
12 | name: string;
13 | temp: string;
14 | process: string;
15 | image: string;
16 | description: string;
17 | }
18 |
19 | export interface TimelineEvent {
20 | year: string;
21 | title: string;
22 | description: string;
23 | image?: string;
24 | }
25 |
26 | export enum ChatRole {
27 | USER = 'user',
28 | MODEL = 'model'
29 | }
30 |
31 | export interface ChatMessage {
32 | role: ChatRole;
33 | text: string;
34 | }
--------------------------------------------------------------------------------
/aelia/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ES2022",
4 | "experimentalDecorators": true,
5 | "useDefineForClassFields": false,
6 | "module": "ESNext",
7 | "lib": [
8 | "ES2022",
9 | "DOM",
10 | "DOM.Iterable"
11 | ],
12 | "skipLibCheck": true,
13 | "types": [
14 | "node"
15 | ],
16 | "moduleResolution": "bundler",
17 | "isolatedModules": true,
18 | "moduleDetection": "force",
19 | "allowJs": true,
20 | "jsx": "react-jsx",
21 | "paths": {
22 | "@/*": [
23 | "./*"
24 | ]
25 | },
26 | "allowImportingTsExtensions": true,
27 | "noEmit": true
28 | }
29 | }
--------------------------------------------------------------------------------
/aether/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ES2022",
4 | "experimentalDecorators": true,
5 | "useDefineForClassFields": false,
6 | "module": "ESNext",
7 | "lib": [
8 | "ES2022",
9 | "DOM",
10 | "DOM.Iterable"
11 | ],
12 | "skipLibCheck": true,
13 | "types": [
14 | "node"
15 | ],
16 | "moduleResolution": "bundler",
17 | "isolatedModules": true,
18 | "moduleDetection": "force",
19 | "allowJs": true,
20 | "jsx": "react-jsx",
21 | "paths": {
22 | "@/*": [
23 | "./*"
24 | ]
25 | },
26 | "allowImportingTsExtensions": true,
27 | "noEmit": true
28 | }
29 | }
--------------------------------------------------------------------------------
/arche/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "arché---holistic-design-studio",
3 | "private": true,
4 | "version": "0.0.0",
5 | "type": "module",
6 | "scripts": {
7 | "dev": "vite",
8 | "build": "vite build",
9 | "preview": "vite preview"
10 | },
11 | "dependencies": {
12 | "react": "^19.2.0",
13 | "react-dom": "^19.2.0",
14 | "framer-motion": "^12.23.24",
15 | "lucide-react": "^0.554.0",
16 | "gsap": "^3.13.0",
17 | "@studio-freight/lenis": "^1.0.42"
18 | },
19 | "devDependencies": {
20 | "@types/node": "^22.14.0",
21 | "@vitejs/plugin-react": "^5.0.0",
22 | "typescript": "~5.8.2",
23 | "vite": "^6.2.0"
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/arche/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ES2022",
4 | "experimentalDecorators": true,
5 | "useDefineForClassFields": false,
6 | "module": "ESNext",
7 | "lib": [
8 | "ES2022",
9 | "DOM",
10 | "DOM.Iterable"
11 | ],
12 | "skipLibCheck": true,
13 | "types": [
14 | "node"
15 | ],
16 | "moduleResolution": "bundler",
17 | "isolatedModules": true,
18 | "moduleDetection": "force",
19 | "allowJs": true,
20 | "jsx": "react-jsx",
21 | "paths": {
22 | "@/*": [
23 | "./*"
24 | ]
25 | },
26 | "allowImportingTsExtensions": true,
27 | "noEmit": true
28 | }
29 | }
--------------------------------------------------------------------------------
/aura/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ES2022",
4 | "experimentalDecorators": true,
5 | "useDefineForClassFields": false,
6 | "module": "ESNext",
7 | "lib": [
8 | "ES2022",
9 | "DOM",
10 | "DOM.Iterable"
11 | ],
12 | "skipLibCheck": true,
13 | "types": [
14 | "node"
15 | ],
16 | "moduleResolution": "bundler",
17 | "isolatedModules": true,
18 | "moduleDetection": "force",
19 | "allowJs": true,
20 | "jsx": "react-jsx",
21 | "paths": {
22 | "@/*": [
23 | "./*"
24 | ]
25 | },
26 | "allowImportingTsExtensions": true,
27 | "noEmit": true
28 | }
29 | }
--------------------------------------------------------------------------------
/forge/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "forge---artisan-cookware",
3 | "private": true,
4 | "version": "0.0.0",
5 | "type": "module",
6 | "scripts": {
7 | "dev": "vite",
8 | "build": "vite build",
9 | "preview": "vite preview"
10 | },
11 | "dependencies": {
12 | "react": "^19.2.0",
13 | "react-dom": "^19.2.0",
14 | "@google/genai": "^1.30.0",
15 | "framer-motion": "^12.23.24",
16 | "lucide-react": "^0.554.0",
17 | "@studio-freight/lenis": "^1.0.42"
18 | },
19 | "devDependencies": {
20 | "@types/node": "^22.14.0",
21 | "@vitejs/plugin-react": "^5.0.0",
22 | "typescript": "~5.8.2",
23 | "vite": "^6.2.0"
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/forge/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ES2022",
4 | "experimentalDecorators": true,
5 | "useDefineForClassFields": false,
6 | "module": "ESNext",
7 | "lib": [
8 | "ES2022",
9 | "DOM",
10 | "DOM.Iterable"
11 | ],
12 | "skipLibCheck": true,
13 | "types": [
14 | "node"
15 | ],
16 | "moduleResolution": "bundler",
17 | "isolatedModules": true,
18 | "moduleDetection": "force",
19 | "allowJs": true,
20 | "jsx": "react-jsx",
21 | "paths": {
22 | "@/*": [
23 | "./*"
24 | ]
25 | },
26 | "allowImportingTsExtensions": true,
27 | "noEmit": true
28 | }
29 | }
--------------------------------------------------------------------------------
/nexus/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ES2022",
4 | "experimentalDecorators": true,
5 | "useDefineForClassFields": false,
6 | "module": "ESNext",
7 | "lib": [
8 | "ES2022",
9 | "DOM",
10 | "DOM.Iterable"
11 | ],
12 | "skipLibCheck": true,
13 | "types": [
14 | "node"
15 | ],
16 | "moduleResolution": "bundler",
17 | "isolatedModules": true,
18 | "moduleDetection": "force",
19 | "allowJs": true,
20 | "jsx": "react-jsx",
21 | "paths": {
22 | "@/*": [
23 | "./*"
24 | ]
25 | },
26 | "allowImportingTsExtensions": true,
27 | "noEmit": true
28 | }
29 | }
--------------------------------------------------------------------------------
/chromaflow/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ES2022",
4 | "experimentalDecorators": true,
5 | "useDefineForClassFields": false,
6 | "module": "ESNext",
7 | "lib": [
8 | "ES2022",
9 | "DOM",
10 | "DOM.Iterable"
11 | ],
12 | "skipLibCheck": true,
13 | "types": [
14 | "node"
15 | ],
16 | "moduleResolution": "bundler",
17 | "isolatedModules": true,
18 | "moduleDetection": "force",
19 | "allowJs": true,
20 | "jsx": "react-jsx",
21 | "paths": {
22 | "@/*": [
23 | "./*"
24 | ]
25 | },
26 | "allowImportingTsExtensions": true,
27 | "noEmit": true
28 | }
29 | }
--------------------------------------------------------------------------------
/chronos/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ES2022",
4 | "experimentalDecorators": true,
5 | "useDefineForClassFields": false,
6 | "module": "ESNext",
7 | "lib": [
8 | "ES2022",
9 | "DOM",
10 | "DOM.Iterable"
11 | ],
12 | "skipLibCheck": true,
13 | "types": [
14 | "node"
15 | ],
16 | "moduleResolution": "bundler",
17 | "isolatedModules": true,
18 | "moduleDetection": "force",
19 | "allowJs": true,
20 | "jsx": "react-jsx",
21 | "paths": {
22 | "@/*": [
23 | "./*"
24 | ]
25 | },
26 | "allowImportingTsExtensions": true,
27 | "noEmit": true
28 | }
29 | }
--------------------------------------------------------------------------------
/velocite/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ES2022",
4 | "experimentalDecorators": true,
5 | "useDefineForClassFields": false,
6 | "module": "ESNext",
7 | "lib": [
8 | "ES2022",
9 | "DOM",
10 | "DOM.Iterable"
11 | ],
12 | "skipLibCheck": true,
13 | "types": [
14 | "node"
15 | ],
16 | "moduleResolution": "bundler",
17 | "isolatedModules": true,
18 | "moduleDetection": "force",
19 | "allowJs": true,
20 | "jsx": "react-jsx",
21 | "paths": {
22 | "@/*": [
23 | "./*"
24 | ]
25 | },
26 | "allowImportingTsExtensions": true,
27 | "noEmit": true
28 | }
29 | }
--------------------------------------------------------------------------------
/aelia/vite.config.ts:
--------------------------------------------------------------------------------
1 | import path from 'path';
2 | import { defineConfig, loadEnv } from 'vite';
3 | import react from '@vitejs/plugin-react';
4 |
5 | export default defineConfig(({ mode }) => {
6 | const env = loadEnv(mode, '.', '');
7 | return {
8 | server: {
9 | port: 3000,
10 | host: '0.0.0.0',
11 | },
12 | plugins: [react()],
13 | define: {
14 | 'process.env.API_KEY': JSON.stringify(env.GEMINI_API_KEY),
15 | 'process.env.GEMINI_API_KEY': JSON.stringify(env.GEMINI_API_KEY)
16 | },
17 | resolve: {
18 | alias: {
19 | '@': path.resolve(__dirname, '.'),
20 | }
21 | }
22 | };
23 | });
24 |
--------------------------------------------------------------------------------
/aether/vite.config.ts:
--------------------------------------------------------------------------------
1 | import path from 'path';
2 | import { defineConfig, loadEnv } from 'vite';
3 | import react from '@vitejs/plugin-react';
4 |
5 | export default defineConfig(({ mode }) => {
6 | const env = loadEnv(mode, '.', '');
7 | return {
8 | server: {
9 | port: 3000,
10 | host: '0.0.0.0',
11 | },
12 | plugins: [react()],
13 | define: {
14 | 'process.env.API_KEY': JSON.stringify(env.GEMINI_API_KEY),
15 | 'process.env.GEMINI_API_KEY': JSON.stringify(env.GEMINI_API_KEY)
16 | },
17 | resolve: {
18 | alias: {
19 | '@': path.resolve(__dirname, '.'),
20 | }
21 | }
22 | };
23 | });
24 |
--------------------------------------------------------------------------------
/arche/vite.config.ts:
--------------------------------------------------------------------------------
1 | import path from 'path';
2 | import { defineConfig, loadEnv } from 'vite';
3 | import react from '@vitejs/plugin-react';
4 |
5 | export default defineConfig(({ mode }) => {
6 | const env = loadEnv(mode, '.', '');
7 | return {
8 | server: {
9 | port: 3000,
10 | host: '0.0.0.0',
11 | },
12 | plugins: [react()],
13 | define: {
14 | 'process.env.API_KEY': JSON.stringify(env.GEMINI_API_KEY),
15 | 'process.env.GEMINI_API_KEY': JSON.stringify(env.GEMINI_API_KEY)
16 | },
17 | resolve: {
18 | alias: {
19 | '@': path.resolve(__dirname, '.'),
20 | }
21 | }
22 | };
23 | });
24 |
--------------------------------------------------------------------------------
/aura/vite.config.ts:
--------------------------------------------------------------------------------
1 | import path from 'path';
2 | import { defineConfig, loadEnv } from 'vite';
3 | import react from '@vitejs/plugin-react';
4 |
5 | export default defineConfig(({ mode }) => {
6 | const env = loadEnv(mode, '.', '');
7 | return {
8 | server: {
9 | port: 3000,
10 | host: '0.0.0.0',
11 | },
12 | plugins: [react()],
13 | define: {
14 | 'process.env.API_KEY': JSON.stringify(env.GEMINI_API_KEY),
15 | 'process.env.GEMINI_API_KEY': JSON.stringify(env.GEMINI_API_KEY)
16 | },
17 | resolve: {
18 | alias: {
19 | '@': path.resolve(__dirname, '.'),
20 | }
21 | }
22 | };
23 | });
24 |
--------------------------------------------------------------------------------
/chronos/vite.config.ts:
--------------------------------------------------------------------------------
1 | import path from 'path';
2 | import { defineConfig, loadEnv } from 'vite';
3 | import react from '@vitejs/plugin-react';
4 |
5 | export default defineConfig(({ mode }) => {
6 | const env = loadEnv(mode, '.', '');
7 | return {
8 | server: {
9 | port: 3000,
10 | host: '0.0.0.0',
11 | },
12 | plugins: [react()],
13 | define: {
14 | 'process.env.API_KEY': JSON.stringify(env.GEMINI_API_KEY),
15 | 'process.env.GEMINI_API_KEY': JSON.stringify(env.GEMINI_API_KEY)
16 | },
17 | resolve: {
18 | alias: {
19 | '@': path.resolve(__dirname, '.'),
20 | }
21 | }
22 | };
23 | });
24 |
--------------------------------------------------------------------------------
/forge/vite.config.ts:
--------------------------------------------------------------------------------
1 | import path from 'path';
2 | import { defineConfig, loadEnv } from 'vite';
3 | import react from '@vitejs/plugin-react';
4 |
5 | export default defineConfig(({ mode }) => {
6 | const env = loadEnv(mode, '.', '');
7 | return {
8 | server: {
9 | port: 3000,
10 | host: '0.0.0.0',
11 | },
12 | plugins: [react()],
13 | define: {
14 | 'process.env.API_KEY': JSON.stringify(env.GEMINI_API_KEY),
15 | 'process.env.GEMINI_API_KEY': JSON.stringify(env.GEMINI_API_KEY)
16 | },
17 | resolve: {
18 | alias: {
19 | '@': path.resolve(__dirname, '.'),
20 | }
21 | }
22 | };
23 | });
24 |
--------------------------------------------------------------------------------
/nexus/vite.config.ts:
--------------------------------------------------------------------------------
1 | import path from 'path';
2 | import { defineConfig, loadEnv } from 'vite';
3 | import react from '@vitejs/plugin-react';
4 |
5 | export default defineConfig(({ mode }) => {
6 | const env = loadEnv(mode, '.', '');
7 | return {
8 | server: {
9 | port: 3000,
10 | host: '0.0.0.0',
11 | },
12 | plugins: [react()],
13 | define: {
14 | 'process.env.API_KEY': JSON.stringify(env.GEMINI_API_KEY),
15 | 'process.env.GEMINI_API_KEY': JSON.stringify(env.GEMINI_API_KEY)
16 | },
17 | resolve: {
18 | alias: {
19 | '@': path.resolve(__dirname, '.'),
20 | }
21 | }
22 | };
23 | });
24 |
--------------------------------------------------------------------------------
/chromaflow/vite.config.ts:
--------------------------------------------------------------------------------
1 | import path from 'path';
2 | import { defineConfig, loadEnv } from 'vite';
3 | import react from '@vitejs/plugin-react';
4 |
5 | export default defineConfig(({ mode }) => {
6 | const env = loadEnv(mode, '.', '');
7 | return {
8 | server: {
9 | port: 3000,
10 | host: '0.0.0.0',
11 | },
12 | plugins: [react()],
13 | define: {
14 | 'process.env.API_KEY': JSON.stringify(env.GEMINI_API_KEY),
15 | 'process.env.GEMINI_API_KEY': JSON.stringify(env.GEMINI_API_KEY)
16 | },
17 | resolve: {
18 | alias: {
19 | '@': path.resolve(__dirname, '.'),
20 | }
21 | }
22 | };
23 | });
24 |
--------------------------------------------------------------------------------
/velocite/vite.config.ts:
--------------------------------------------------------------------------------
1 | import path from 'path';
2 | import { defineConfig, loadEnv } from 'vite';
3 | import react from '@vitejs/plugin-react';
4 |
5 | export default defineConfig(({ mode }) => {
6 | const env = loadEnv(mode, '.', '');
7 | return {
8 | server: {
9 | port: 3000,
10 | host: '0.0.0.0',
11 | },
12 | plugins: [react()],
13 | define: {
14 | 'process.env.API_KEY': JSON.stringify(env.GEMINI_API_KEY),
15 | 'process.env.GEMINI_API_KEY': JSON.stringify(env.GEMINI_API_KEY)
16 | },
17 | resolve: {
18 | alias: {
19 | '@': path.resolve(__dirname, '.'),
20 | }
21 | }
22 | };
23 | });
24 |
--------------------------------------------------------------------------------
/aura/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "aura---botanical-skincare",
3 | "private": true,
4 | "version": "0.0.0",
5 | "type": "module",
6 | "scripts": {
7 | "dev": "vite",
8 | "build": "vite build",
9 | "preview": "vite preview"
10 | },
11 | "dependencies": {
12 | "react": "^19.2.0",
13 | "react-dom": "^19.2.0",
14 | "@google/genai": "^1.30.0",
15 | "@studio-freight/lenis": "^1.0.42",
16 | "lucide-react": "^0.554.0",
17 | "gsap": "^3.13.0",
18 | "framer-motion": "^12.23.24"
19 | },
20 | "devDependencies": {
21 | "@types/node": "^22.14.0",
22 | "@vitejs/plugin-react": "^5.0.0",
23 | "typescript": "~5.8.2",
24 | "vite": "^6.2.0"
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/chronos/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "chronos---temporal-architecture",
3 | "private": true,
4 | "version": "0.0.0",
5 | "type": "module",
6 | "scripts": {
7 | "dev": "vite",
8 | "build": "vite build",
9 | "preview": "vite preview"
10 | },
11 | "dependencies": {
12 | "react-dom": "^19.2.0",
13 | "react": "^19.2.0",
14 | "@react-three/fiber": "^9.4.0",
15 | "@react-three/drei": "^10.7.7",
16 | "three": "^0.181.2",
17 | "@react-three/postprocessing": "^3.0.4",
18 | "postprocessing": "^6.38.0"
19 | },
20 | "devDependencies": {
21 | "@types/node": "^22.14.0",
22 | "@vitejs/plugin-react": "^5.0.0",
23 | "typescript": "~5.8.2",
24 | "vite": "^6.2.0"
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/chromaflow/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "chromaflow",
3 | "private": true,
4 | "version": "0.0.0",
5 | "type": "module",
6 | "scripts": {
7 | "dev": "vite",
8 | "build": "vite build",
9 | "preview": "vite preview"
10 | },
11 | "dependencies": {
12 | "@google/genai": "1.30.0",
13 | "@studio-freight/lenis": "1.0.29",
14 | "@studio-freight/react-lenis": "0.0.40",
15 | "framer-motion": "10.16.4",
16 | "gsap": "^3.13.0",
17 | "lucide-react": "0.292.0",
18 | "react": "^19.2.0",
19 | "react-dom": "^19.2.0"
20 | },
21 | "devDependencies": {
22 | "@types/node": "^22.14.0",
23 | "@vitejs/plugin-react": "^5.0.0",
24 | "typescript": "~5.8.2",
25 | "vite": "^6.2.0"
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/chromaflow/hooks/useSmoothScroll.ts:
--------------------------------------------------------------------------------
1 | import { useEffect } from 'react';
2 | import Lenis from '@studio-freight/lenis';
3 |
4 | export const useSmoothScroll = () => {
5 | useEffect(() => {
6 | const lenis = new Lenis({
7 | duration: 1.3,
8 | easing: (t) => Math.min(1, 1.001 - Math.pow(2, -10 * t)), // airy dampening
9 | direction: 'vertical',
10 | gestureDirection: 'vertical',
11 | smooth: true,
12 | smoothTouch: false,
13 | touchMultiplier: 2,
14 | });
15 |
16 | function raf(time: number) {
17 | lenis.raf(time);
18 | requestAnimationFrame(raf);
19 | }
20 |
21 | requestAnimationFrame(raf);
22 |
23 | return () => {
24 | lenis.destroy();
25 | };
26 | }, []);
27 | };
28 |
--------------------------------------------------------------------------------
/nexus/App.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import Navbar from './components/Navbar';
3 | import Hero from './components/Hero';
4 | import Philosophy from './components/Philosophy';
5 | import Modules from './components/Modules';
6 | import Architecture from './components/Architecture';
7 | import Pricing from './components/Pricing';
8 | import Footer from './components/Footer';
9 |
10 | function App() {
11 | return (
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 | );
24 | }
25 |
26 | export default App;
--------------------------------------------------------------------------------
/velocite/App.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { Hero } from './components/Hero';
3 | import { Manifesto } from './components/Manifesto';
4 | import { Models } from './components/Models';
5 | import { TechLab } from './components/TechLab';
6 | import { Features } from './components/Features';
7 | import { Circuit } from './components/Circuit';
8 | import { Footer } from './components/Footer';
9 | import { CoPilot } from './components/CoPilot';
10 |
11 | function App() {
12 | return (
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 | );
24 | }
25 |
26 | export default App;
--------------------------------------------------------------------------------
/aura/components/SmoothScroll.tsx:
--------------------------------------------------------------------------------
1 | import React, { useEffect } from 'react';
2 | import Lenis from '@studio-freight/lenis';
3 |
4 | export const SmoothScroll: React.FC<{ children: React.ReactNode }> = ({ children }) => {
5 | useEffect(() => {
6 | const lenis = new Lenis({
7 | duration: 1.5, // Soft dampening as requested
8 | easing: (t) => Math.min(1, 1.001 - Math.pow(2, -10 * t)),
9 | orientation: 'vertical',
10 | gestureOrientation: 'vertical',
11 | smoothWheel: true,
12 | wheelMultiplier: 1,
13 | touchMultiplier: 2,
14 | });
15 |
16 | function raf(time: number) {
17 | lenis.raf(time);
18 | requestAnimationFrame(raf);
19 | }
20 |
21 | requestAnimationFrame(raf);
22 |
23 | return () => {
24 | lenis.destroy();
25 | };
26 | }, []);
27 |
28 | return <>{children}>;
29 | };
--------------------------------------------------------------------------------
/aura/App.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { SmoothScroll } from './components/SmoothScroll';
3 | import { Navigation } from './components/Navigation';
4 | import { Hero } from './sections/Hero';
5 | import { Philosophy } from './sections/Philosophy';
6 | import { Collection } from './sections/Collection';
7 | import { Ingredients } from './sections/Ingredients';
8 | import { Routine } from './sections/Routine';
9 | import { Journal } from './sections/Journal';
10 | import { Footer } from './sections/Footer';
11 |
12 | function App() {
13 | return (
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 | );
27 | }
28 |
29 | export default App;
--------------------------------------------------------------------------------
/arche/App.tsx:
--------------------------------------------------------------------------------
1 | import React, { useEffect } from 'react';
2 | import SmoothScroll from './components/SmoothScroll';
3 | import Navigation from './components/Navigation';
4 | import Hero from './components/Hero';
5 | import Philosophy from './components/Philosophy';
6 | import Projects from './components/Projects';
7 | import MaterialLibrary from './components/MaterialLibrary';
8 | import Services from './components/Services';
9 | import Journal from './components/Journal';
10 | import Footer from './components/Footer';
11 |
12 | const App: React.FC = () => {
13 | return (
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 | );
29 | };
30 |
31 | export default App;
32 |
--------------------------------------------------------------------------------
/chromaflow/App.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { ReactLenis } from '@studio-freight/react-lenis';
3 | import CustomCursor from './components/CustomCursor';
4 | import Hero from './components/Hero';
5 | import Philosophy from './components/Philosophy';
6 | import Installations from './components/Installations';
7 | import Process from './components/Process';
8 | import Services from './components/Services';
9 | import TheLab from './components/TheLab';
10 | import Footer from './components/Footer';
11 |
12 | function App() {
13 |
14 | return (
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 | );
32 | }
33 |
34 | export default App;
35 |
--------------------------------------------------------------------------------
/aelia/components/ui/SlatReveal.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { motion } from 'framer-motion';
3 |
4 | interface SlatRevealProps {
5 | children: React.ReactNode;
6 | className?: string;
7 | delay?: number;
8 | }
9 |
10 | export const SlatReveal: React.FC = ({ children, className = "", delay = 0 }) => {
11 | const slats = 5; // Number of slats
12 |
13 | return (
14 |
15 | {children}
16 |
17 | {Array.from({ length: slats }).map((_, i) => (
18 |
31 | ))}
32 |
33 |
34 | );
35 | };
36 |
--------------------------------------------------------------------------------
/aura/services/geminiService.ts:
--------------------------------------------------------------------------------
1 | import { GoogleGenAI } from "@google/genai";
2 |
3 | const getClient = () => {
4 | const apiKey = process.env.API_KEY;
5 | if (!apiKey) {
6 | console.warn("API_KEY is not defined in the environment.");
7 | return null;
8 | }
9 | return new GoogleGenAI({ apiKey });
10 | };
11 |
12 | export const askAuraAI = async (question: string): Promise => {
13 | const client = getClient();
14 | if (!client) return "Aura AI is currently sleeping. Please configure the API Key.";
15 |
16 | try {
17 | const model = "gemini-2.5-flash";
18 | const systemInstruction = `You are Aura, a virtual aesthetician for a high-end, ethereal skincare brand.
19 | Your tone is calm, weightless, scientific, and poetic.
20 | Keep answers concise (under 50 words) and focused on hydration, purity, and light.`;
21 |
22 | const response = await client.models.generateContent({
23 | model,
24 | contents: question,
25 | config: {
26 | systemInstruction,
27 | }
28 | });
29 |
30 | return response.text || "I am meditating on that thought...";
31 | } catch (error) {
32 | console.error("Gemini API Error:", error);
33 | return "The connection to the ether is weak right now.";
34 | }
35 | };
36 |
--------------------------------------------------------------------------------
/chromaflow/services/geminiService.ts:
--------------------------------------------------------------------------------
1 | import { GoogleGenAI } from "@google/genai";
2 |
3 | // This service demonstrates how one might use Gemini to generate dynamic poetic descriptions
4 | // for the generative art pieces in "The Lab" section.
5 |
6 | // Safely retrieve API key
7 | const apiKey = process.env.API_KEY || '';
8 |
9 | let ai: GoogleGenAI | null = null;
10 | if (apiKey) {
11 | ai = new GoogleGenAI({ apiKey });
12 | }
13 |
14 | export const generateArtDescription = async (artType: string): Promise => {
15 | if (!ai) {
16 | console.warn("Gemini API Key missing. Returning fallback description.");
17 | return "A shimmering display of algorithmic light, constantly evolving through user interaction.";
18 | }
19 |
20 | try {
21 | const model = 'gemini-2.5-flash';
22 | const prompt = `Write a very short, abstract, poetic description (max 15 words) for a digital art piece involving ${artType}. Use words like fluid, luminous, code, and rhythm.`;
23 |
24 | const response = await ai.models.generateContent({
25 | model,
26 | contents: prompt,
27 | });
28 |
29 | return response.text || "Algorithmic beauty in motion.";
30 | } catch (error) {
31 | console.error("Error generating art description:", error);
32 | return "Where code meets light and motion.";
33 | }
34 | };
35 |
--------------------------------------------------------------------------------
/velocite/services/geminiService.ts:
--------------------------------------------------------------------------------
1 | import { GoogleGenAI } from "@google/genai";
2 |
3 | const apiKey = process.env.API_KEY || ''; // Ensure this is available in your env
4 | const ai = new GoogleGenAI({ apiKey });
5 |
6 | export const generateCoPilotResponse = async (
7 | history: { role: string; parts: { text: string }[] }[],
8 | userMessage: string
9 | ): Promise => {
10 | try {
11 | const model = ai.models;
12 |
13 | // Construct the chat history for the prompt context
14 | // We use gemini-2.5-flash for low latency responses
15 | const chat = ai.chats.create({
16 | model: 'gemini-2.5-flash',
17 | config: {
18 | systemInstruction: `You are 'V-OS', the advanced AI operating system of a Velocité hyper-electric vehicle.
19 | Your tone is precise, robotic but helpful, and slightly futuristic (Cyberpunk/Sci-fi aesthetic).
20 | Keep responses concise (under 50 words) as if displaying on a HUD.
21 | You know about the Velocité models: V1 (Balanced), GT (Track), X (SUV), and Zero (Hypercar).
22 | Refer to the user as 'Pilot'.`,
23 | },
24 | history: history,
25 | });
26 |
27 | const result = await chat.sendMessage({ message: userMessage });
28 | return result.text || "SYSTEM ERROR: CONNECTION INTERRUPTED";
29 | } catch (error) {
30 | console.error("Gemini API Error:", error);
31 | return "OFFLINE MODE: UNABLE TO PROCESS REQUEST.";
32 | }
33 | };
--------------------------------------------------------------------------------
/aelia/components/ui/MagneticButton.tsx:
--------------------------------------------------------------------------------
1 | import React, { useRef, useState } from 'react';
2 | import { motion } from 'framer-motion';
3 |
4 | interface MagneticButtonProps {
5 | children: React.ReactNode;
6 | className?: string;
7 | onClick?: () => void;
8 | strength?: number;
9 | }
10 |
11 | export const MagneticButton: React.FC = ({
12 | children,
13 | className = "",
14 | onClick,
15 | strength = 30
16 | }) => {
17 | const ref = useRef(null);
18 | const [position, setPosition] = useState({ x: 0, y: 0 });
19 |
20 | const handleMouseMove = (e: React.MouseEvent) => {
21 | if (!ref.current) return;
22 | const { clientX, clientY } = e;
23 | const { left, top, width, height } = ref.current.getBoundingClientRect();
24 | const x = clientX - (left + width / 2);
25 | const y = clientY - (top + height / 2);
26 | setPosition({ x: x / width * strength, y: y / height * strength });
27 | };
28 |
29 | const handleMouseLeave = () => {
30 | setPosition({ x: 0, y: 0 });
31 | };
32 |
33 | return (
34 |
43 | {children}
44 |
45 | );
46 | };
47 |
--------------------------------------------------------------------------------
/aura/components/Navigation.tsx:
--------------------------------------------------------------------------------
1 | import React, { useState, useEffect } from 'react';
2 | import { Menu, ShoppingBag } from 'lucide-react';
3 |
4 | export const Navigation: React.FC = () => {
5 | const [scrolled, setScrolled] = useState(false);
6 |
7 | useEffect(() => {
8 | const handleScroll = () => {
9 | setScrolled(window.scrollY > 50);
10 | };
11 | window.addEventListener('scroll', handleScroll);
12 | return () => window.removeEventListener('scroll', handleScroll);
13 | }, []);
14 |
15 | return (
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 | AURA
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 | );
33 | };
--------------------------------------------------------------------------------
/forge/App.tsx:
--------------------------------------------------------------------------------
1 | import React, { useEffect } from 'react';
2 | import Lenis from '@studio-freight/lenis';
3 | import Hero from './components/Hero';
4 | import Philosophy from './components/Philosophy';
5 | import Collections from './components/Collections';
6 | import Materials from './components/Materials';
7 | import Craftsmanship from './components/Craftsmanship';
8 | import Legacy from './components/Legacy';
9 | import Footer from './components/Footer';
10 |
11 | const App: React.FC = () => {
12 |
13 | useEffect(() => {
14 | // Initialize Smooth Scroll with "Heavy" settings
15 | const lenis = new Lenis({
16 | duration: 1.5,
17 | easing: (t) => Math.min(1, 1.001 - Math.pow(2, -10 * t)), // Exponential ease out
18 | direction: 'vertical',
19 | gestureDirection: 'vertical',
20 | smooth: true,
21 | mouseMultiplier: 1,
22 | smoothTouch: false,
23 | touchMultiplier: 2,
24 | });
25 |
26 | // RAF loop
27 | function raf(time: number) {
28 | lenis.raf(time);
29 | requestAnimationFrame(raf);
30 | }
31 | requestAnimationFrame(raf);
32 |
33 | return () => {
34 | lenis.destroy();
35 | };
36 | }, []);
37 |
38 | return (
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 | );
49 | };
50 |
51 | export default App;
--------------------------------------------------------------------------------
/arche/components/SmoothScroll.tsx:
--------------------------------------------------------------------------------
1 | import React, { useEffect, useRef } from 'react';
2 | import Lenis from '@studio-freight/lenis';
3 | import { gsap } from 'gsap';
4 | import { ScrollTrigger } from 'gsap/ScrollTrigger';
5 |
6 | gsap.registerPlugin(ScrollTrigger);
7 |
8 | interface SmoothScrollProps {
9 | children: React.ReactNode;
10 | }
11 |
12 | const SmoothScroll: React.FC = ({ children }) => {
13 | const lenisRef = useRef(null);
14 |
15 | useEffect(() => {
16 | const lenis = new Lenis({
17 | duration: 1.2,
18 | easing: (t) => Math.min(1, 1.001 - Math.pow(2, -10 * t)),
19 | orientation: 'vertical',
20 | gestureOrientation: 'vertical',
21 | smoothWheel: true,
22 | syncTouch: true,
23 | touchMultiplier: 2,
24 | });
25 |
26 | lenisRef.current = lenis;
27 |
28 | // Connect Lenis to GSAP ScrollTrigger
29 | lenis.on('scroll', ScrollTrigger.update);
30 |
31 | // Create a stable reference for the ticker callback
32 | const update = (time: number) => {
33 | lenis.raf(time * 1000);
34 | };
35 |
36 | // Add listener
37 | gsap.ticker.add(update);
38 |
39 | // Disable lag smoothing in GSAP to prevent jumps during smooth scrolling
40 | gsap.ticker.lagSmoothing(0);
41 |
42 | return () => {
43 | // Cleanup: Remove the EXACT same listener function
44 | gsap.ticker.remove(update);
45 | lenis.destroy();
46 | };
47 | }, []);
48 |
49 | return {children}
;
50 | };
51 |
52 | export default SmoothScroll;
--------------------------------------------------------------------------------
/aura/sections/Philosophy.tsx:
--------------------------------------------------------------------------------
1 | import React, { useEffect, useRef } from 'react';
2 | import gsap from 'gsap';
3 | import { ScrollTrigger } from 'gsap/ScrollTrigger';
4 |
5 | gsap.registerPlugin(ScrollTrigger);
6 |
7 | export const Philosophy: React.FC = () => {
8 | const sectionRef = useRef(null);
9 | const textRef = useRef(null);
10 |
11 | useEffect(() => {
12 | const ctx = gsap.context(() => {
13 | gsap.fromTo(textRef.current,
14 | {
15 | filter: "blur(20px)",
16 | opacity: 0.2,
17 | y: 50
18 | },
19 | {
20 | filter: "blur(0px)",
21 | opacity: 1,
22 | y: 0,
23 | color: "#4A4A4A",
24 | duration: 1,
25 | scrollTrigger: {
26 | trigger: sectionRef.current,
27 | start: "top 70%",
28 | end: "center center",
29 | scrub: 1,
30 | }
31 | }
32 | );
33 | }, sectionRef);
34 |
35 | return () => ctx.revert();
36 | }, []);
37 |
38 | return (
39 |
40 |
41 |
42 | Beauty that reveals your inner luminosity.
43 | Crafted in light.
44 |
45 |
46 |
47 | );
48 | };
--------------------------------------------------------------------------------
/nexus/components/Navbar.tsx:
--------------------------------------------------------------------------------
1 | import React, { useState, useEffect } from 'react';
2 | import { cn } from '../utils/cn';
3 |
4 | const Navbar: React.FC = () => {
5 | const [scrolled, setScrolled] = useState(false);
6 |
7 | useEffect(() => {
8 | const handleScroll = () => setScrolled(window.scrollY > 50);
9 | window.addEventListener('scroll', handleScroll);
10 | return () => window.removeEventListener('scroll', handleScroll);
11 | }, []);
12 |
13 | return (
14 |
20 |
24 |
25 |
30 |
31 |
32 | Get Started
33 |
34 |
35 | );
36 | };
37 |
38 | export default Navbar;
--------------------------------------------------------------------------------
/chronos/App.tsx:
--------------------------------------------------------------------------------
1 | import React, { Suspense, useState, useEffect } from 'react';
2 | import { Canvas } from '@react-three/fiber';
3 | import { ScrollControls } from '@react-three/drei';
4 | import { Experience } from './components/Experience';
5 | import { Overlay } from './components/Overlay';
6 | import { CustomCursor, Loader } from './components/UI';
7 | import { THEME } from './types';
8 |
9 | const App: React.FC = () => {
10 | const [loaded, setLoaded] = useState(false);
11 |
12 | // Simulate asset loading for the "Dimensional Rift" effect
13 | useEffect(() => {
14 | const timer = setTimeout(() => {
15 | setLoaded(true);
16 | }, 2500);
17 | return () => clearTimeout(timer);
18 | }, []);
19 |
20 | return (
21 | <>
22 |
23 | {!loaded && }
24 |
25 |
26 |
32 |
33 |
34 |
35 | {/* ScrollControls manages the virtual scroll and passes data to Experience */}
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 | >
44 | );
45 | };
46 |
47 | export default App;
--------------------------------------------------------------------------------
/velocite/components/Manifesto.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { motion, useScroll, useVelocity, useSpring, useTransform } from 'framer-motion';
3 |
4 | export const Manifesto: React.FC = () => {
5 | const { scrollY } = useScroll();
6 | const scrollVelocity = useVelocity(scrollY);
7 | const smoothVelocity = useSpring(scrollVelocity, { damping: 50, stiffness: 400 });
8 | const skewX = useTransform(smoothVelocity, [-2000, 2000], [-30, 30]);
9 |
10 | // Color shift logic based on viewport position (simplified approximation via scroll)
11 | const textColor = useTransform(scrollY, [800, 1400], ["#FFFFFF", "#00F0FF"]);
12 |
13 | return (
14 |
15 |
16 |
17 |
21 | Silence is the
22 | new sound
23 | of speed.
24 |
25 |
26 |
27 |
28 |
29 | / MANIFESTO_V1.0
30 | WE DO NOT BREAK THE SOUND BARRIER. WE ERASE IT.
31 |
32 |
01
33 |
34 |
35 |
36 | );
37 | };
--------------------------------------------------------------------------------
/forge/services/geminiService.ts:
--------------------------------------------------------------------------------
1 | import { GoogleGenAI, Chat, GenerateContentResponse } from "@google/genai";
2 | import { ChatMessage, ChatRole } from "../types";
3 |
4 | const API_KEY = process.env.API_KEY || '';
5 |
6 | // Initialize Gemini
7 | let ai: GoogleGenAI | null = null;
8 |
9 | try {
10 | if (API_KEY) {
11 | ai = new GoogleGenAI({ apiKey: API_KEY });
12 | } else {
13 | console.warn("Gemini API Key is missing. Chat features will not work.");
14 | }
15 | } catch (error) {
16 | console.error("Failed to initialize Gemini:", error);
17 | }
18 |
19 | const SYSTEM_INSTRUCTION = `
20 | You are "The Artisan," a master blacksmith and chef with 50 years of experience.
21 | Your tone is gruff but warm, authoritative, and deeply knowledgeable about metallurgy, cooking science, and history.
22 | You speak in metaphors related to fire, weight, and patience.
23 | You represent the brand "Forge".
24 | Keep your responses concise (under 80 words) but impactful.
25 | Do not act like a robot. Act like a person covered in soot and flour.
26 | `;
27 |
28 | export const createChat = (): Chat | null => {
29 | if (!ai) return null;
30 |
31 | return ai.chats.create({
32 | model: 'gemini-2.5-flash',
33 | config: {
34 | systemInstruction: SYSTEM_INSTRUCTION,
35 | temperature: 0.7,
36 | },
37 | });
38 | };
39 |
40 | export const sendMessage = async (chat: Chat, message: string): Promise => {
41 | try {
42 | const response: GenerateContentResponse = await chat.sendMessage({ message });
43 | return response.text || "The forge is silent... (No response)";
44 | } catch (error) {
45 | console.error("Error sending message to Gemini:", error);
46 | return "The fire has dimmed momentarily. Try again.";
47 | }
48 | };
--------------------------------------------------------------------------------
/chronos/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | CHRONOS | Temporal Architecture
7 |
8 |
9 |
10 |
11 |
25 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
--------------------------------------------------------------------------------
/forge/components/Philosophy.tsx:
--------------------------------------------------------------------------------
1 | import React, { useRef } from 'react';
2 | import { motion, useScroll, useTransform } from 'framer-motion';
3 |
4 | const Philosophy: React.FC = () => {
5 | const containerRef = useRef(null);
6 | const { scrollYProgress } = useScroll({
7 | target: containerRef,
8 | offset: ["start end", "end start"]
9 | });
10 |
11 | // Color interpolation from Clean Brass -> Aged Patina
12 | const textColor = useTransform(
13 | scrollYProgress,
14 | [0.2, 0.8],
15 | ["#B8860B", "#2B2B2B"]
16 | );
17 |
18 | // Texture opacity simulates rust/patina appearing
19 | const textureOpacity = useTransform(scrollYProgress, [0.2, 0.7], [0, 0.8]);
20 |
21 | return (
22 |
23 |
24 |
28 |
29 | "We craft tools meant to last generations ."
30 |
31 |
32 | {/* Texture Overlay constrained to text area roughly (visual trick) */}
33 |
37 |
38 |
39 | {/* Background grit */}
40 |
41 |
42 |
43 | );
44 | };
45 |
46 | export default Philosophy;
--------------------------------------------------------------------------------
/chromaflow/components/CustomCursor.tsx:
--------------------------------------------------------------------------------
1 | import React, { useEffect, useState } from 'react';
2 | import { motion } from 'framer-motion';
3 |
4 | const CustomCursor: React.FC = () => {
5 | const [position, setPosition] = useState({ x: 0, y: 0 });
6 | const [isHovering, setIsHovering] = useState(false);
7 |
8 | useEffect(() => {
9 | const updateCursor = (e: MouseEvent) => {
10 | setPosition({ x: e.clientX, y: e.clientY });
11 |
12 | const target = e.target as HTMLElement;
13 | // Check if hovering over interactive elements
14 | const isInteractive = target.closest('a, button, .interactive-target');
15 | setIsHovering(!!isInteractive);
16 | };
17 |
18 | window.addEventListener('mousemove', updateCursor);
19 | return () => window.removeEventListener('mousemove', updateCursor);
20 | }, []);
21 |
22 | return (
23 | <>
24 | {/* Main Cursor Dot */}
25 |
34 |
35 | {/* Aura / Follower */}
36 |
50 | >
51 | );
52 | };
53 |
54 | export default CustomCursor;
55 |
--------------------------------------------------------------------------------
/aelia/App.tsx:
--------------------------------------------------------------------------------
1 | import React, { useEffect } from 'react';
2 | import { Hero } from './components/Hero';
3 | import { Philosophy } from './components/Philosophy';
4 | import { MaterialStory } from './components/MaterialStory';
5 | import { CollectionShowcase } from './components/CollectionShowcase';
6 | import { EthicalSourcing } from './components/EthicalSourcing';
7 | import { UGCGrid } from './components/UGCGrid';
8 | import { Footer } from './components/Footer';
9 | import { MagneticButton } from './components/ui/MagneticButton';
10 | import { ShoppingBag, Menu } from 'lucide-react';
11 |
12 | const App: React.FC = () => {
13 |
14 | // Custom cursor logic could go here, but focusing on the requested interactions
15 |
16 | return (
17 |
18 | {/* Navigation / Header */}
19 |
20 | AELIA
21 |
22 |
23 |
24 | Account
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 | );
50 | };
51 |
52 | export default App;
53 |
--------------------------------------------------------------------------------
/aelia/components/Philosophy.tsx:
--------------------------------------------------------------------------------
1 | import React, { useRef } from 'react';
2 | import { motion, useScroll, useTransform } from 'framer-motion';
3 |
4 | export const Philosophy: React.FC = () => {
5 | const containerRef = useRef(null);
6 | const { scrollYProgress } = useScroll({
7 | target: containerRef,
8 | offset: ["start end", "end start"]
9 | });
10 |
11 | const words = "Crafted to outlive the trends. Designed to acquire character. True luxury is not about the newness of the object, but the story it gathers with time.".split(" ");
12 |
13 | return (
14 |
15 |
16 |
17 | {words.map((word, i) => {
18 | const start = i / words.length;
19 | const end = start + (1 / words.length);
20 | // Use a specific Hook call for each word to create the staggered fill effect
21 | // eslint-disable-next-line react-hooks/rules-of-hooks
22 | const color = useTransform(scrollYProgress, [start, end], ["#D9D3CC", "#4A3730"]);
23 |
24 | return (
25 |
30 | {word}
31 |
32 | );
33 | })}
34 |
35 |
36 |
43 |
44 | The AELIA Philosophy
45 |
46 |
47 |
48 | );
49 | };
50 |
--------------------------------------------------------------------------------
/chromaflow/components/Philosophy.tsx:
--------------------------------------------------------------------------------
1 | import React, { useRef, useEffect } from 'react';
2 | import gsap from 'gsap';
3 | import { ScrollTrigger } from 'gsap/ScrollTrigger';
4 |
5 | gsap.registerPlugin(ScrollTrigger);
6 |
7 | const Philosophy: React.FC = () => {
8 | const containerRef = useRef(null);
9 | const textRef = useRef(null);
10 |
11 | useEffect(() => {
12 | if (!textRef.current || !containerRef.current) return;
13 |
14 | const chars = textRef.current.querySelectorAll('.char');
15 |
16 | // Animate colors across the spectrum based on scroll
17 | gsap.to(chars, {
18 | scrollTrigger: {
19 | trigger: containerRef.current,
20 | start: "top bottom",
21 | end: "bottom top",
22 | scrub: 1,
23 | },
24 | color: (i) => {
25 | // Pseudo-random gradient mapping
26 | const colors = ['#007BFF', '#FF008C', '#7CFC00', '#8A2BE2'];
27 | return colors[i % colors.length];
28 | },
29 | letterSpacing: "0.05em", // Expand subtly
30 | stagger: 0.01,
31 | ease: "none"
32 | });
33 |
34 | }, []);
35 |
36 | const text = "Where algorithms paint with light.";
37 |
38 | return (
39 |
40 |
41 |
42 | {text.split('').map((char, i) => (
43 |
44 | {char === ' ' ? '\u00A0' : char}
45 |
46 | ))}
47 |
48 |
49 |
50 |
51 | We don't just design visuals; we code living ecosystems. Our work bridges the gap between digital precision and organic chaos.
52 |
53 |
54 |
55 |
56 | );
57 | };
58 |
59 | export default Philosophy;
60 |
--------------------------------------------------------------------------------
/forge/components/Legacy.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { TIMELINE } from '../constants';
3 |
4 | const Legacy: React.FC = () => {
5 | return (
6 |
7 |
8 | {/* Center Line */}
9 |
10 |
11 |
12 | {TIMELINE.map((event, index) => {
13 | const isEven = index % 2 === 0;
14 | return (
15 |
16 |
17 | {/* Content Side */}
18 |
19 |
20 | {event.year}
21 |
22 |
{event.title}
23 |
{event.description}
24 |
25 |
26 | {/* Dot on Line */}
27 |
28 |
29 | {/* Image Side (Optional) */}
30 |
31 | {event.image && (
32 |
33 |
34 |
35 | )}
36 |
37 |
38 |
39 | );
40 | })}
41 |
42 |
43 |
44 | );
45 | };
46 |
47 | export default Legacy;
--------------------------------------------------------------------------------
/arche/components/Philosophy.tsx:
--------------------------------------------------------------------------------
1 | import React, { useRef } from 'react';
2 | import { motion, useScroll, useTransform } from 'framer-motion';
3 |
4 | const Philosophy: React.FC = () => {
5 | const containerRef = useRef(null);
6 | const { scrollYProgress } = useScroll({
7 | target: containerRef,
8 | offset: ["start 80%", "end center"]
9 | });
10 |
11 | // Use clip-path inset to reveal the text from left to right
12 | // This prevents the text from re-wrapping (reflowing) as it would if we animated width
13 | const clipPath = useTransform(scrollYProgress, [0, 1], ["inset(0% 100% 0% 0%)", "inset(0% 0% 0% 0%)"]);
14 |
15 | return (
16 |
17 |
18 |
19 | {/* Outlined Layer (Background) */}
20 |
21 | We build spaces that breathe with the rhythm of nature.
22 |
23 |
24 | {/* Filled Layer (Foreground with Mask) */}
25 |
29 |
30 | We build spaces that breathe with the rhythm of nature.
31 |
32 |
33 |
34 |
35 |
36 |
37 | Our approach blends the brutal honesty of raw materials with the ephemeral qualities of light and shadow. Architecture is not static; it is a living entity.
38 |
39 |
40 |
41 |
42 |
47 |
48 | );
49 | };
50 |
51 | export default Philosophy;
--------------------------------------------------------------------------------
/chromaflow/components/Footer.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { motion } from 'framer-motion';
3 |
4 | const Footer: React.FC = () => {
5 | return (
6 |
47 | );
48 | };
49 |
50 | export default Footer;
51 |
--------------------------------------------------------------------------------
/nexus/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Nexus | Intelligent Workflow
7 |
8 |
9 |
10 |
11 |
32 |
47 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
--------------------------------------------------------------------------------
/aura/constants.ts:
--------------------------------------------------------------------------------
1 | import { Product, Ingredient, JournalEntry } from './types';
2 |
3 | export const COLORS = {
4 | white: '#FFFFFF',
5 | snow: '#FAFAFA',
6 | charcoal: '#4A4A4A',
7 | blush: '#F7E7E6',
8 | mint: '#E8F5E9',
9 | vapor: '#F0F0F0',
10 | };
11 |
12 | export const PRODUCTS: Product[] = [
13 | {
14 | id: 1,
15 | name: "Luminous Dew Serum",
16 | price: "$85",
17 | image: "https://picsum.photos/seed/aura1/600/800",
18 | description: "Hydration captured in light."
19 | },
20 | {
21 | id: 2,
22 | name: "Cloud Barrier Cream",
23 | price: "$68",
24 | image: "https://picsum.photos/seed/aura2/600/800",
25 | description: "Weightless protection."
26 | },
27 | {
28 | id: 3,
29 | name: "Botanical Essence Mist",
30 | price: "$42",
31 | image: "https://picsum.photos/seed/aura3/600/800",
32 | description: "A gentle awakening."
33 | },
34 | {
35 | id: 4,
36 | name: "Moonlight Recovery Oil",
37 | price: "$95",
38 | image: "https://picsum.photos/seed/aura4/600/800",
39 | description: "Repair while you dream."
40 | }
41 | ];
42 |
43 | export const INGREDIENTS: Ingredient[] = [
44 | {
45 | id: 1,
46 | name: "White Tea Extract",
47 | description: "Harvested at first light.",
48 | benefit: "Potent Antioxidant Protection",
49 | image: "https://picsum.photos/seed/tea/800/1200"
50 | },
51 | {
52 | id: 2,
53 | name: "Hyaluronic Acid",
54 | description: "Pure molecular hydration.",
55 | benefit: "Deep Plumping & Retention",
56 | image: "https://picsum.photos/seed/water/800/1200"
57 | },
58 | {
59 | id: 3,
60 | name: "Rose Quartz",
61 | description: "Mineral essence.",
62 | benefit: "Radiance & Circulation",
63 | image: "https://picsum.photos/seed/crystal/800/1200"
64 | }
65 | ];
66 |
67 | export const JOURNAL_ENTRIES: JournalEntry[] = [
68 | { id: 1, title: "Rituals of Morning Light", category: "Wellness", image: "https://picsum.photos/seed/light/600/400" },
69 | { id: 2, title: "The Science of Hydration", category: "Education", image: "https://picsum.photos/seed/science/600/400" },
70 | { id: 3, title: "Stillness in Motion", category: "Mindfulness", image: "https://picsum.photos/seed/move/600/400" },
71 | { id: 4, title: "Botanical Intelligence", category: "Nature", image: "https://picsum.photos/seed/plant/600/400" },
72 | ];
--------------------------------------------------------------------------------
/arche/components/Navigation.tsx:
--------------------------------------------------------------------------------
1 | import React, { useState, useRef } from 'react';
2 | import { motion, useMotionValue, useSpring, useTransform } from 'framer-motion';
3 |
4 | const MagneticButton = ({ children, className }: { children?: React.ReactNode; className?: string }) => {
5 | const ref = useRef(null);
6 | const x = useMotionValue(0);
7 | const y = useMotionValue(0);
8 |
9 | const springConfig = { damping: 15, stiffness: 150, mass: 0.1 };
10 | const springX = useSpring(x, springConfig);
11 | const springY = useSpring(y, springConfig);
12 |
13 | const handleMouseMove = (e: React.MouseEvent) => {
14 | const element = ref.current;
15 | if (element) {
16 | const { left, top, width, height } = element.getBoundingClientRect();
17 | const centerX = left + width / 2;
18 | const centerY = top + height / 2;
19 | x.set((e.clientX - centerX) * 0.3); // Magnetic pull strength
20 | y.set((e.clientY - centerY) * 0.3);
21 | }
22 | };
23 |
24 | const handleMouseLeave = () => {
25 | x.set(0);
26 | y.set(0);
27 | };
28 |
29 | return (
30 |
37 | {children}
38 |
39 | );
40 | };
41 |
42 | const Navigation: React.FC = () => {
43 | return (
44 |
45 |
46 | EST. 2024
47 |
48 |
49 |
50 |
51 | Menu
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 | );
60 | };
61 |
62 | export default Navigation;
--------------------------------------------------------------------------------
/aura/sections/Hero.tsx:
--------------------------------------------------------------------------------
1 | import React, { useEffect, useRef, useState } from 'react';
2 | import gsap from 'gsap';
3 |
4 | export const Hero: React.FC = () => {
5 | const containerRef = useRef(null);
6 | const textRef = useRef(null);
7 | const rippleRef = useRef(null);
8 | const [mounted, setMounted] = useState(false);
9 |
10 | useEffect(() => {
11 | const ctx = gsap.context(() => {
12 | const tl = gsap.timeline();
13 |
14 | // Ripple Animation
15 | tl.to(rippleRef.current, {
16 | scale: 1,
17 | opacity: 0,
18 | duration: 2.5,
19 | ease: "power2.out",
20 | onStart: () => {
21 | // In a real app, play sound here
22 | }
23 | });
24 |
25 | // Text Fade Up
26 | tl.fromTo(textRef.current,
27 | { y: 50, opacity: 0, filter: "blur(10px)" },
28 | { y: 0, opacity: 1, filter: "blur(0px)", duration: 1.5, ease: "power2.out" },
29 | "-=1.5"
30 | );
31 |
32 | setMounted(true);
33 | }, containerRef);
34 |
35 | return () => ctx.revert();
36 | }, []);
37 |
38 | return (
39 |
40 | {/* Ripple Element */}
41 |
46 |
50 |
51 | {/* Main Content */}
52 |
53 |
AURA
54 |
Botanical Skincare
55 |
56 |
57 |
63 |
64 | );
65 | };
--------------------------------------------------------------------------------
/velocite/constants.ts:
--------------------------------------------------------------------------------
1 | import { CarModel, Feature, TechComponent } from './types';
2 |
3 | export const CAR_MODELS: CarModel[] = [
4 | {
5 | id: 'v-one',
6 | name: 'VELOCITÉ V1',
7 | tagline: 'THE PHANTOM',
8 | specs: { acceleration: '1.9s', range: '600mi', hp: '1200' },
9 | image: 'https://picsum.photos/800/400?grayscale&blur=1',
10 | },
11 | {
12 | id: 'v-gt',
13 | name: 'VELOCITÉ GT',
14 | tagline: 'CORNER KING',
15 | specs: { acceleration: '2.4s', range: '520mi', hp: '950' },
16 | image: 'https://picsum.photos/800/401?grayscale&blur=1',
17 | },
18 | {
19 | id: 'v-suv',
20 | name: 'VELOCITÉ X',
21 | tagline: 'FORCE OF NATURE',
22 | specs: { acceleration: '3.1s', range: '580mi', hp: '800' },
23 | image: 'https://picsum.photos/800/402?grayscale&blur=1',
24 | },
25 | {
26 | id: 'v-hyper',
27 | name: 'VELOCITÉ ZERO',
28 | tagline: 'ABSOLUTE ZERO',
29 | specs: { acceleration: '1.7s', range: '450mi', hp: '1600' },
30 | image: 'https://picsum.photos/800/403?grayscale&blur=1',
31 | },
32 | ];
33 |
34 | export const TECH_COMPONENTS: TechComponent[] = [
35 | {
36 | id: 'battery',
37 | name: 'SOLID STATE CELL',
38 | description: 'Next-gen energy density with zero degradation.',
39 | specs: ['Density: 900Wh/L', 'Charge: 5min to 80%', 'Temp: -40°C to 80°C'],
40 | },
41 | {
42 | id: 'motor',
43 | name: 'MAGNETIC LEVITATION MOTOR',
44 | description: 'Frictionless propulsion system.',
45 | specs: ['RPM: 30,000', 'Torque: 2000Nm', 'Weight: 25kg'],
46 | },
47 | {
48 | id: 'chassis',
49 | name: 'CARBON NANO-WEAVE',
50 | description: 'Structural integrity meets featherlight mass.',
51 | specs: ['Tensile: 50x Steel', 'Weight: 800kg Total', 'Flex: Active'],
52 | },
53 | ];
54 |
55 | export const FEATURES: Feature[] = [
56 | {
57 | id: 'pilot',
58 | title: 'NEURAL PILOT',
59 | description: 'Level 5 autonomy powered by quantum processing.',
60 | iconPath: 'M12 2a10 10 0 1 0 10 10A10 10 0 0 0 12 2zm0 18a8 8 0 1 1 8-8 8 8 0 0 1-8 8z M12 6v6l4 2',
61 | },
62 | {
63 | id: 'charge',
64 | title: 'INDUCTIVE LINK',
65 | description: 'Wireless charging at highway speeds.',
66 | iconPath: 'M13 2L3 14h9l-1 8 10-12h-9l1-8z',
67 | },
68 | {
69 | id: 'connect',
70 | title: 'HIVE MIND',
71 | description: 'Real-time traffic prediction via fleet learning.',
72 | iconPath: 'M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z',
73 | },
74 | ];
--------------------------------------------------------------------------------
/velocite/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Velocité | Hyper-Electric
7 |
8 |
31 |
32 |
33 |
34 |
50 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
--------------------------------------------------------------------------------
/nexus/components/Philosophy.tsx:
--------------------------------------------------------------------------------
1 | import React, { useRef } from 'react';
2 | import { motion, useScroll, useTransform, useMotionValueEvent } from 'framer-motion';
3 |
4 | const Philosophy: React.FC = () => {
5 | const containerRef = useRef(null);
6 | const { scrollYProgress } = useScroll({
7 | target: containerRef,
8 | offset: ["start end", "end start"],
9 | });
10 |
11 | const [displayText, setDisplayText] = React.useState("");
12 | const targetText = "COMPLEX PROJECTS REQUIRE INTELLIGENT SIMPLICITY.";
13 | const chars = "01010101XYZ#@!&%";
14 |
15 | useMotionValueEvent(scrollYProgress, "change", (latest) => {
16 | // Start decoding when element is in view (approx 0.2 to 0.6 of scroll progress relative to viewport)
17 | // We want the effect to finish by the time it's centered
18 | const progress = Math.min(Math.max((latest - 0.2) * 2.5, 0), 1);
19 |
20 | const length = Math.floor(targetText.length * progress);
21 | const revealed = targetText.substring(0, length);
22 |
23 | // Generate scrambled remainder
24 | let scrambled = "";
25 | for (let i = length; i < targetText.length; i++) {
26 | // preserve spaces for layout stability
27 | if (targetText[i] === ' ') scrambled += ' ';
28 | else scrambled += chars[Math.floor(Math.random() * chars.length)];
29 | }
30 |
31 | setDisplayText(revealed + scrambled);
32 | });
33 |
34 | return (
35 |
36 |
37 |
38 | {displayText.split("").map((char, index) => (
39 |
40 | {char}
41 |
42 | ))}
43 |
44 |
45 |
49 |
50 | Data shouldn't be noise. Nexus decodes your team's workflow into a coherent, actionable signal.
51 |
52 |
53 |
54 |
55 | );
56 | };
57 |
58 | export default Philosophy;
--------------------------------------------------------------------------------
/arche/components/Journal.tsx:
--------------------------------------------------------------------------------
1 | import React, { useRef } from 'react';
2 | import { motion, useScroll, useTransform } from 'framer-motion';
3 | import { JOURNAL } from '../constants';
4 | import { JournalEntry } from '../types';
5 |
6 | const EntryCard: React.FC<{ entry: JournalEntry }> = ({ entry }) => (
7 |
8 | {entry.type === 'image' ? (
9 |
10 |
11 |
12 |
{entry.date}
13 |
14 | ) : (
15 |
16 |
"{entry.content}"
17 |
— {entry.author}
18 |
19 | )}
20 |
21 | );
22 |
23 | const Journal: React.FC = () => {
24 | const containerRef = useRef(null);
25 | const { scrollYProgress } = useScroll({
26 | target: containerRef,
27 | offset: ["start end", "end start"]
28 | });
29 |
30 | const y1 = useTransform(scrollYProgress, [0, 1], [0, -50]);
31 | const y2 = useTransform(scrollYProgress, [0, 1], [100, -150]); // Faster scroll for parallax
32 |
33 | const leftColumn = JOURNAL.filter((_, i) => i % 2 === 0);
34 | const rightColumn = JOURNAL.filter((_, i) => i % 2 !== 0);
35 |
36 | return (
37 |
38 |
39 |
40 |
The Journal
41 |
42 |
43 |
44 |
45 |
46 | {leftColumn.map(entry => )}
47 |
48 |
49 | {rightColumn.map(entry => )}
50 |
51 |
52 |
53 |
54 | );
55 | };
56 |
57 | export default Journal;
--------------------------------------------------------------------------------
/chronos/components/UI.tsx:
--------------------------------------------------------------------------------
1 | import React, { useEffect, useState } from 'react';
2 |
3 | export const CustomCursor: React.FC = () => {
4 | const [position, setPosition] = useState({ x: 0, y: 0 });
5 | const [hidden, setHidden] = useState(false);
6 |
7 | useEffect(() => {
8 | const addEventListeners = () => {
9 | document.addEventListener("mousemove", onMouseMove);
10 | document.addEventListener("mouseenter", onMouseEnter);
11 | document.addEventListener("mouseleave", onMouseLeave);
12 | };
13 |
14 | const removeEventListeners = () => {
15 | document.removeEventListener("mousemove", onMouseMove);
16 | document.removeEventListener("mouseenter", onMouseEnter);
17 | document.removeEventListener("mouseleave", onMouseLeave);
18 | };
19 |
20 | const onMouseMove = (e: MouseEvent) => {
21 | setPosition({ x: e.clientX, y: e.clientY });
22 | };
23 |
24 | const onMouseLeave = () => {
25 | setHidden(true);
26 | };
27 |
28 | const onMouseEnter = () => {
29 | setHidden(false);
30 | };
31 |
32 | addEventListeners();
33 | return () => removeEventListeners();
34 | }, []);
35 |
36 | return (
37 |
43 | {/* Crosshair Design */}
44 |
45 |
46 |
47 |
48 | );
49 | };
50 |
51 | export const Loader: React.FC = () => {
52 | return (
53 |
54 |
55 | {/* Dimensional Rift Effect */}
56 |
57 |
58 |
INITIALIZING
59 |
LOADING ASSETS...
60 |
61 |
62 | )
63 | }
--------------------------------------------------------------------------------
/forge/constants.ts:
--------------------------------------------------------------------------------
1 | import { Product, Material, TimelineEvent } from './types';
2 |
3 | export const COLLECTIONS: Product[] = [
4 | {
5 | id: 'c1',
6 | name: 'The 12" Skillet',
7 | weight: 3.2,
8 | material: 'Cast Iron',
9 | image: 'https://picsum.photos/id/225/600/600',
10 | description: 'Heirloom quality, pre-seasoned with flax oil.'
11 | },
12 | {
13 | id: 'c2',
14 | name: 'Saucier Copper',
15 | weight: 1.8,
16 | material: 'Aged Copper',
17 | image: 'https://picsum.photos/id/366/600/600',
18 | description: 'Rapid heat conduction with a tin lining.'
19 | },
20 | {
21 | id: 'c3',
22 | name: 'Carbon Wok',
23 | weight: 2.1,
24 | material: 'Carbon Steel',
25 | image: 'https://picsum.photos/id/1060/600/600',
26 | description: 'Hand-hammered for the perfect sear.'
27 | },
28 | {
29 | id: 'c4',
30 | name: 'Dutch Oven',
31 | weight: 5.4,
32 | material: 'Enameled Iron',
33 | image: 'https://picsum.photos/id/102/600/600',
34 | description: 'Slow cooking perfection, built like a tank.'
35 | }
36 | ];
37 |
38 | export const MATERIALS: Material[] = [
39 | {
40 | id: 'm1',
41 | name: 'Carbon Steel',
42 | temp: '1400°C',
43 | process: 'Forged & Folded',
44 | image: 'https://picsum.photos/id/1006/800/800',
45 | description: 'Responsive to heat, practically indestructible.'
46 | },
47 | {
48 | id: 'm2',
49 | name: 'Oak Heartwood',
50 | temp: '20°C',
51 | process: 'Carved & Oiled',
52 | image: 'https://picsum.photos/id/1008/800/800',
53 | description: 'Aged timber handles that cool rapidly.'
54 | },
55 | {
56 | id: 'm3',
57 | name: 'Raw Copper',
58 | temp: '1085°C',
59 | process: 'Spun & Hammered',
60 | image: 'https://picsum.photos/id/252/800/800',
61 | description: 'The ultimate conductor. Reactive and alive.'
62 | }
63 | ];
64 |
65 | export const TIMELINE: TimelineEvent[] = [
66 | {
67 | year: '1892',
68 | title: 'The First Spark',
69 | description: 'Foundry established in the smoky valleys of Pittsburgh.',
70 | image: 'https://picsum.photos/id/1011/400/300'
71 | },
72 | {
73 | year: '1924',
74 | title: 'War & Iron',
75 | description: 'Production shifts to essential heavy metals for the effort.',
76 | },
77 | {
78 | year: '1968',
79 | title: 'The Copper Era',
80 | description: 'Introduction of the "Chef\'s Standard" copper line.',
81 | image: 'https://picsum.photos/id/250/400/300'
82 | },
83 | {
84 | year: '2024',
85 | title: 'Digital Forge',
86 | description: 'Bringing heritage craft to the modern artisan.',
87 | }
88 | ];
--------------------------------------------------------------------------------
/aura/sections/Journal.tsx:
--------------------------------------------------------------------------------
1 | import React, { useEffect, useRef } from 'react';
2 | import gsap from 'gsap';
3 | import { ScrollTrigger } from 'gsap/ScrollTrigger';
4 | import { JOURNAL_ENTRIES } from '../constants';
5 |
6 | gsap.registerPlugin(ScrollTrigger);
7 |
8 | export const Journal: React.FC = () => {
9 | const sectionRef = useRef(null);
10 |
11 | useEffect(() => {
12 | const ctx = gsap.context(() => {
13 | // Parallax effect for cards
14 | const cards = gsap.utils.toArray('.journal-card');
15 |
16 | cards.forEach((card, i) => {
17 | const speed = parseFloat(card.dataset.speed || "1");
18 | gsap.to(card, {
19 | y: -50 * speed,
20 | scrollTrigger: {
21 | trigger: sectionRef.current,
22 | start: "top bottom",
23 | end: "bottom top",
24 | scrub: 1.5
25 | }
26 | });
27 | });
28 | }, sectionRef);
29 |
30 | return () => ctx.revert();
31 | }, []);
32 |
33 | return (
34 |
35 |
36 |
37 |
The Journal
38 |
Notes on Light & Living
39 |
40 |
41 |
42 | {JOURNAL_ENTRIES.map((entry, index) => (
43 |
48 |
49 |
54 |
55 |
56 |
57 |
{entry.category}
58 |
{entry.title}
59 |
60 | ))}
61 |
62 |
63 |
64 | );
65 | };
--------------------------------------------------------------------------------
/velocite/components/Circuit.tsx:
--------------------------------------------------------------------------------
1 | import React, { useEffect, useState } from 'react';
2 | import { motion, useScroll, useSpring } from 'framer-motion';
3 |
4 | const IMAGES = [
5 | "https://picsum.photos/600/800?grayscale",
6 | "https://picsum.photos/600/400?grayscale",
7 | "https://picsum.photos/600/600?grayscale",
8 | "https://picsum.photos/600/500?grayscale",
9 | "https://picsum.photos/600/700?grayscale",
10 | "https://picsum.photos/600/450?grayscale",
11 | ];
12 |
13 | export const Circuit: React.FC = () => {
14 | const { scrollY } = useScroll();
15 | const [isScrolling, setIsScrolling] = useState(false);
16 |
17 | useEffect(() => {
18 | let timeout: ReturnType;
19 | const unsubscribe = scrollY.on("change", () => {
20 | setIsScrolling(true);
21 | clearTimeout(timeout);
22 | timeout = setTimeout(() => setIsScrolling(false), 150);
23 | });
24 | return () => unsubscribe();
25 | }, [scrollY]);
26 |
27 | return (
28 |
29 |
30 |
THE CIRCUIT LIFESTYLE & TELEMETRY
31 |
32 |
33 |
34 | {IMAGES.map((src, i) => (
35 |
43 | {/* Image with Motion Blur Filter applied dynamically via style/class logic could go here,
44 | but simple inline style transition is performant */}
45 |
49 |
50 |
51 |
52 | {/* Overlay Info */}
53 |
54 | IMG_SEQ_{1024 + i}
55 |
56 |
57 | ))}
58 |
59 |
60 | );
61 | };
--------------------------------------------------------------------------------
/aura/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Aura | Botanical Skincare
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
42 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
--------------------------------------------------------------------------------
/forge/components/Hero.tsx:
--------------------------------------------------------------------------------
1 | import React, { useRef } from 'react';
2 | import { motion, useScroll, useTransform } from 'framer-motion';
3 |
4 | const Hero: React.FC = () => {
5 | const containerRef = useRef(null);
6 | const { scrollYProgress } = useScroll({
7 | target: containerRef,
8 | offset: ["start start", "end start"]
9 | });
10 |
11 | const textScale = useTransform(scrollYProgress, [0, 0.5], [1, 1.5]);
12 | const textOpacity = useTransform(scrollYProgress, [0, 0.3], [1, 0]);
13 | const videoOpacity = useTransform(scrollYProgress, [0.1, 0.5], [0, 1]);
14 | const wipeX = useTransform(scrollYProgress, [0, 0.5], ["-100%", "0%"]);
15 |
16 | return (
17 |
18 |
19 | {/* Sticky Container */}
20 |
21 |
22 | {/* Background Noise/Video Overlay */}
23 |
27 | {/* Simulate Video with Image for Demo */}
28 |
33 |
34 |
35 |
36 | {/* The Stamp Text */}
37 |
41 |
42 | FORGE
43 |
44 |
45 | Est. 1892
46 |
47 |
48 |
49 | {/* Wipe Effect */}
50 |
54 |
55 | {/* Scroll Indicator */}
56 |
60 | Scroll to Ignite
61 |
62 |
63 |
64 |
65 |
66 | );
67 | };
68 |
69 | export default Hero;
--------------------------------------------------------------------------------
/arche/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Arché | Holistic Design Studio
7 |
8 |
9 |
10 |
11 |
34 |
64 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
--------------------------------------------------------------------------------
/arche/constants.ts:
--------------------------------------------------------------------------------
1 | import { Project, Material, Service, JournalEntry } from './types';
2 |
3 | export const PROJECTS: Project[] = [
4 | {
5 | id: 1,
6 | title: "The Silent House",
7 | year: "2023",
8 | category: "Residential",
9 | image: "https://picsum.photos/seed/arche1/1600/1200"
10 | },
11 | {
12 | id: 2,
13 | title: "Kyoto Pavilion",
14 | year: "2022",
15 | category: "Cultural",
16 | image: "https://picsum.photos/seed/arche2/1600/1200"
17 | },
18 | {
19 | id: 3,
20 | title: "Brutal Cliffside",
21 | year: "2024",
22 | category: "Concept",
23 | image: "https://picsum.photos/seed/arche3/1600/1200"
24 | },
25 | {
26 | id: 4,
27 | title: "Urban Sanctuary",
28 | year: "2023",
29 | category: "Commercial",
30 | image: "https://picsum.photos/seed/arche4/1600/1200"
31 | }
32 | ];
33 |
34 | export const MATERIALS: Material[] = [
35 | {
36 | id: "m1",
37 | name: "Raw Oak",
38 | origin: "French Alps",
39 | texture: "https://picsum.photos/seed/woodtext/800/800",
40 | description: "Sustainably harvested ancient timber with deep grain patterns."
41 | },
42 | {
43 | id: "m2",
44 | name: "Roman Travertine",
45 | origin: "Tivoli, Italy",
46 | texture: "https://picsum.photos/seed/stonetext/800/800",
47 | description: "Unfilled surface emphasizing natural porosity and history."
48 | },
49 | {
50 | id: "m3",
51 | name: "Belgian Linen",
52 | origin: "Flanders",
53 | texture: "https://picsum.photos/seed/linen/800/800",
54 | description: "Heavyweight, tactile fabric that softens acoustics."
55 | }
56 | ];
57 |
58 | export const SERVICES: Service[] = [
59 | {
60 | id: "s1",
61 | title: "Residential Architecture",
62 | description: "Crafting intimate spaces for living.",
63 | image: "https://picsum.photos/seed/interior/1200/800"
64 | },
65 | {
66 | id: "s2",
67 | title: "Commercial Spaces",
68 | description: "Brand identities translated into volume.",
69 | image: "https://picsum.photos/seed/office/1200/800"
70 | },
71 | {
72 | id: "s3",
73 | title: "Landscape Design",
74 | description: "Blurring the line between built and grown.",
75 | image: "https://picsum.photos/seed/garden/1200/800"
76 | }
77 | ];
78 |
79 | export const JOURNAL: JournalEntry[] = [
80 | { id: 1, type: 'image', content: "https://picsum.photos/seed/j1/600/800", date: "Oct 12" },
81 | { id: 2, type: 'quote', content: "Architecture starts when you carefully put two bricks together. There it begins.", author: "Mies van der Rohe" },
82 | { id: 3, type: 'image', content: "https://picsum.photos/seed/j2/600/600", date: "Sep 28" },
83 | { id: 4, type: 'image', content: "https://picsum.photos/seed/j3/600/900", date: "Sep 15" },
84 | { id: 5, type: 'quote', content: "Light creates ambience and feel of a place, as well as the expression of a structure.", author: "Le Corbusier" },
85 | { id: 6, type: 'image', content: "https://picsum.photos/seed/j4/600/700", date: "Aug 02" },
86 | ];
87 |
--------------------------------------------------------------------------------
/arche/components/Services.tsx:
--------------------------------------------------------------------------------
1 | import React, { useState } from 'react';
2 | import { motion, AnimatePresence } from 'framer-motion';
3 | import { SERVICES } from '../constants';
4 | import { ArrowRight } from 'lucide-react';
5 |
6 | const Services: React.FC = () => {
7 | const [hoveredService, setHoveredService] = useState(null);
8 |
9 | return (
10 |
11 |
12 | {/* Background Image Reveal */}
13 |
14 |
15 | {hoveredService && (
16 | s.id === hoveredService)?.image}
19 | initial={{ opacity: 0, scale: 0.95 }}
20 | animate={{ opacity: 1, scale: 1 }}
21 | exit={{ opacity: 0, scale: 1.05 }}
22 | transition={{ duration: 0.5 }}
23 | className="w-2/3 h-2/3 object-cover grayscale"
24 | />
25 | )}
26 |
27 |
28 |
29 |
30 |
Our Expertise
31 |
32 |
33 | {SERVICES.map((service) => (
34 |
setHoveredService(service.id)}
37 | onMouseLeave={() => setHoveredService(null)}
38 | className="group border-t border-softgrey py-10 cursor-pointer flex flex-col md:flex-row justify-between items-baseline md:items-center relative transition-colors"
39 | >
40 |
41 | 0{SERVICES.indexOf(service) + 1}
42 |
{service.title}
43 |
44 |
45 |
46 |
{service.description}
47 |
50 |
51 |
52 | ))}
53 |
54 |
55 |
56 |
57 | );
58 | };
59 |
60 | export default Services;
61 |
--------------------------------------------------------------------------------
/aelia/constants.ts:
--------------------------------------------------------------------------------
1 | import { SourcingStep, Material, Testimonial } from "./types";
2 |
3 | export const BRAND_NAME = "AELIA";
4 |
5 | export const MATERIALS: Material[] = [
6 | {
7 | id: "m1",
8 | name: "Tuscan Vachetta",
9 | origin: "Santa Croce, Italy",
10 | image: "https://images.unsplash.com/photo-1550259114-ad7188f0a967?q=80&w=2080&auto=format&fit=crop",
11 | description: "Vegetable-tanned leather that develops a unique patina over time."
12 | },
13 | {
14 | id: "m2",
15 | name: "Belgian Linen",
16 | origin: "Flanders, Belgium",
17 | image: "https://images.unsplash.com/photo-1598300056393-8dd33ecb4d28?q=80&w=2000&auto=format&fit=crop",
18 | description: "Unbleached, tightly woven linen lining for durability and breathability."
19 | },
20 | {
21 | id: "m3",
22 | name: "Solid Brass",
23 | origin: "Osaka, Japan",
24 | image: "https://images.unsplash.com/photo-1572025442646-866d16c84a54?q=80&w=2070&auto=format&fit=crop",
25 | description: "Sand-cast hardware designed to age gracefully alongside the leather."
26 | }
27 | ];
28 |
29 | export const SOURCING_STEPS: SourcingStep[] = [
30 | {
31 | id: 1,
32 | title: "The Farm",
33 | location: "Auvergne, France",
34 | description: "Ethically raised cattle, free-roaming pastures, ensuring minimal grain scarring."
35 | },
36 | {
37 | id: 2,
38 | title: "The Tannery",
39 | location: "Tuscany, Italy",
40 | description: "Six weeks of vegetable tanning using chestnut bark and natural oils."
41 | },
42 | {
43 | id: 3,
44 | title: "The Atelier",
45 | location: "Ubrique, Spain",
46 | description: "Hand-stitched by third-generation artisans using traditional saddle stitching."
47 | },
48 | {
49 | id: 4,
50 | title: "The Keeper",
51 | location: "You",
52 | description: "A blank canvas ready to acquire character through your journey."
53 | }
54 | ];
55 |
56 | export const TESTIMONIALS: Testimonial[] = [
57 | {
58 | id: "t1",
59 | author: "Elena R.",
60 | location: "Milan",
61 | image: "https://images.unsplash.com/photo-1548036328-c9fa89d128fa?q=80&w=2069&auto=format&fit=crop",
62 | text: "It feels less like a bag and more like an heirloom I haven't passed down yet."
63 | },
64 | {
65 | id: "t2",
66 | author: "James H.",
67 | location: "London",
68 | image: "https://images.unsplash.com/photo-1544816155-12df9643f363?q=80&w=1920&auto=format&fit=crop",
69 | text: "The patina after six months is breathtaking. It tells the story of my travels."
70 | },
71 | {
72 | id: "t3",
73 | author: "Sophia L.",
74 | location: "New York",
75 | image: "https://images.unsplash.com/photo-1445633760012-d748f6e70335?q=80&w=1920&auto=format&fit=crop",
76 | text: "Quiet luxury in its purest form. No logos, just quality."
77 | },
78 | {
79 | id: "t4",
80 | author: "Marcus B.",
81 | location: "Berlin",
82 | image: "https://images.unsplash.com/photo-1559563458-52c69f835564?q=80&w=1920&auto=format&fit=crop",
83 | text: "The smell of the leather upon opening the box... unforgettable."
84 | }
85 | ];
86 |
--------------------------------------------------------------------------------
/forge/components/Craftsmanship.tsx:
--------------------------------------------------------------------------------
1 | import React, { useState } from 'react';
2 | import { motion } from 'framer-motion';
3 |
4 | const STEPS = [
5 | { id: 1, title: "Heat & Strike", desc: "Raw ingots are heated to 1200°C and struck by a 5-ton drop hammer." },
6 | { id: 2, title: "Rough Grinding", desc: "Edges are deburred and the primary shape is refined by hand." },
7 | { id: 3, title: "Seasoning", desc: "Layers of flax oil are baked on for 8 hours to create the initial patina." },
8 | { id: 4, title: "Final Polish", desc: "Handles are buffed and brass rivets are set with precision." }
9 | ];
10 |
11 | const Craftsmanship: React.FC = () => {
12 | const [activeStep, setActiveStep] = useState(null);
13 |
14 | return (
15 |
16 |
17 |
18 | PROCESS
19 |
20 |
21 |
22 | {STEPS.map((step) => (
23 |
setActiveStep(step.id)}
27 | onMouseLeave={() => setActiveStep(null)}
28 | >
29 |
30 |
0{step.id}
31 |
32 | {step.title}
33 |
34 |
35 |
36 |
37 |
45 | {step.desc}
46 |
47 |
48 | ))}
49 |
50 |
51 |
52 | {/* Background Ambience (Simulated Video Loop based on step) */}
53 |
54 |
59 |
60 |
61 |
62 | );
63 | };
64 |
65 | export default Craftsmanship;
--------------------------------------------------------------------------------
/aelia/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | AELIA | Inheritance Quality
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
42 |
78 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
--------------------------------------------------------------------------------
/forge/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Forge | Artisan Cookware
7 |
8 |
9 |
10 |
11 |
38 |
75 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
--------------------------------------------------------------------------------
/arche/components/Footer.tsx:
--------------------------------------------------------------------------------
1 | import React, { useState, useEffect } from 'react';
2 | import { motion } from 'framer-motion';
3 |
4 | const Footer: React.FC = () => {
5 | const [time, setTime] = useState("");
6 |
7 | useEffect(() => {
8 | const updateTime = () => {
9 | const now = new Date();
10 | setTime(now.toLocaleTimeString('en-GB', { hour: '2-digit', minute: '2-digit', timeZone: 'Europe/London' }));
11 | };
12 | updateTime();
13 | const interval = setInterval(updateTime, 1000);
14 | return () => clearInterval(interval);
15 | }, []);
16 |
17 | return (
18 |
19 |
20 | {/* Call to Action */}
21 |
22 |
26 |
27 | Let's Talk
28 |
29 | {/* Liquid Fill Effect */}
30 |
38 |
39 |
40 |
41 | {/* Grid Info */}
42 |
43 |
44 |
Location
45 |
12 Hans Crescent Knightsbridge, London SW1X 0LZ
46 |
47 |
48 |
49 |
Contact
50 |
studio@arche.design +44 (0) 20 7946 0123
51 |
52 |
53 |
61 |
62 |
63 |
London Time
64 |
{time}
65 |
66 |
67 |
68 |
69 | © Arché 2024. All rights reserved.
70 |
71 |
72 | );
73 | };
74 |
75 | export default Footer;
76 |
--------------------------------------------------------------------------------
/aelia/components/UGCGrid.tsx:
--------------------------------------------------------------------------------
1 | import React, { useRef } from 'react';
2 | import { motion, useScroll, useTransform, useMotionValue, useSpring } from 'framer-motion';
3 | import { TESTIMONIALS } from '../constants';
4 |
5 | export const UGCGrid: React.FC = () => {
6 | const containerRef = useRef(null);
7 | const { scrollYProgress } = useScroll({
8 | target: containerRef,
9 | offset: ["start end", "end start"]
10 | });
11 |
12 | const y = useTransform(scrollYProgress, [0, 1], [100, -100]); // Parallax effect
13 |
14 | return (
15 |
16 |
17 |
Worn By You
18 |
#AELIAARCHIVE
19 |
20 |
21 |
25 | {TESTIMONIALS.map((item, index) => (
26 |
27 | ))}
28 |
29 |
30 | );
31 | };
32 |
33 | const TiltCard: React.FC<{ item: typeof TESTIMONIALS[0], index: number }> = ({ item, index }) => {
34 | const x = useMotionValue(0);
35 | const y = useMotionValue(0);
36 |
37 | const mouseX = useSpring(x, { stiffness: 150, damping: 15 });
38 | const mouseY = useSpring(y, { stiffness: 150, damping: 15 });
39 |
40 | function handleMouseMove(event: React.MouseEvent) {
41 | const { left, top, width, height } = event.currentTarget.getBoundingClientRect();
42 | const xPos = (event.clientX - left) / width - 0.5;
43 | const yPos = (event.clientY - top) / height - 0.5;
44 |
45 | x.set(xPos * 10); // Rotate Y axis
46 | y.set(yPos * -10); // Rotate X axis (inverted)
47 | }
48 |
49 | function handleMouseLeave() {
50 | x.set(0);
51 | y.set(0);
52 | }
53 |
54 | return (
55 |
65 |
69 |
74 |
75 |
76 |
"{item.text}"
77 |
78 | {item.author}
79 | {item.location}
80 |
81 |
82 |
83 | );
84 | };
85 |
--------------------------------------------------------------------------------
/aura/sections/Collection.tsx:
--------------------------------------------------------------------------------
1 | import React, { useEffect, useRef } from 'react';
2 | import gsap from 'gsap';
3 | import { ScrollTrigger } from 'gsap/ScrollTrigger';
4 | import { motion } from 'framer-motion';
5 | import { PRODUCTS } from '../constants';
6 |
7 | gsap.registerPlugin(ScrollTrigger);
8 |
9 | export const Collection: React.FC = () => {
10 | const sectionRef = useRef(null);
11 | const containerRef = useRef(null);
12 |
13 | useEffect(() => {
14 | const ctx = gsap.context(() => {
15 | const totalWidth = containerRef.current!.scrollWidth - window.innerWidth + 100; // +100 for padding
16 |
17 | gsap.to(containerRef.current, {
18 | x: -totalWidth,
19 | ease: "none",
20 | scrollTrigger: {
21 | trigger: sectionRef.current,
22 | start: "top top",
23 | end: `+=${totalWidth}`,
24 | pin: true,
25 | scrub: 1,
26 | anticipatePin: 1
27 | }
28 | });
29 | }, sectionRef);
30 |
31 | return () => ctx.revert();
32 | }, []);
33 |
34 | return (
35 |
36 |
37 |
The Collection
38 |
39 |
40 |
41 | {PRODUCTS.map((product) => (
42 |
43 |
48 | {/* Liquid Distortion Overlay Simulation */}
49 |
50 |
51 |
56 |
57 |
58 |
59 |
{product.name}
60 |
{product.price}
61 |
62 |
63 |
68 | Quick Add
69 |
70 |
71 | ))}
72 | {/* Spacer for scroll end */}
73 |
74 |
75 |
76 | );
77 | };
--------------------------------------------------------------------------------
/velocite/components/Hero.tsx:
--------------------------------------------------------------------------------
1 | import React, { useEffect, useRef } from 'react';
2 | import { motion, useScroll, useTransform } from 'framer-motion';
3 |
4 | export const Hero: React.FC = () => {
5 | const containerRef = useRef(null);
6 | const { scrollY } = useScroll();
7 |
8 | // Transform scroll into scale/opacity for the tunnel effect
9 | const tunnelScale = useTransform(scrollY, [0, 500], [1, 5]);
10 | const tunnelOpacity = useTransform(scrollY, [0, 300], [0, 1]);
11 | const textOpacity = useTransform(scrollY, [0, 200], [1, 0]);
12 |
13 | return (
14 |
15 |
16 |
17 | {/* Animated Background Tunnel (Simulated with Gradient) */}
18 |
22 |
23 | {/* Speed Lines Overlay */}
24 |
28 |
29 | {/* Headlights */}
30 |
36 |
37 |
38 |
39 |
40 | {/* Brand Name */}
41 |
45 |
51 | Velocité
52 |
53 |
59 | SYSTEM INITIALIZED // READY TO LAUNCH
60 |
61 |
62 |
63 | {/* Scroll Indicator */}
64 |
68 | Scroll to Ignite
69 |
70 |
71 |
72 |
73 | );
74 | };
--------------------------------------------------------------------------------
/aura/sections/Routine.tsx:
--------------------------------------------------------------------------------
1 | import React, { useState } from 'react';
2 | import { motion, AnimatePresence } from 'framer-motion';
3 |
4 | const STEPS = [
5 | {
6 | id: 1,
7 | step: "01",
8 | name: "Cleanse",
9 | desc: "Purify with botanical oils",
10 | color: "rgba(247, 231, 230, 0.6)", // Pale Blush
11 | image: "https://picsum.photos/seed/cleanse/400/600"
12 | },
13 | {
14 | id: 2,
15 | step: "02",
16 | name: "Treat",
17 | desc: "Infuse active hydration",
18 | color: "rgba(232, 245, 233, 0.6)", // Mint Dew
19 | image: "https://picsum.photos/seed/treat/400/600"
20 | },
21 | {
22 | id: 3,
23 | step: "03",
24 | name: "Moisturize",
25 | desc: "Lock in light and barrier",
26 | color: "rgba(240, 240, 240, 0.6)", // Vapor Grey
27 | image: "https://picsum.photos/seed/moist/400/600"
28 | },
29 | ];
30 |
31 | export const Routine: React.FC = () => {
32 | const [hoveredStep, setHoveredStep] = useState(null);
33 |
34 | return (
35 |
36 |
37 | {/* Background Image Fade */}
38 |
39 |
40 | {hoveredStep !== null && (
41 | s.id === hoveredStep)?.image}
44 | initial={{ opacity: 0, filter: "blur(10px)" }}
45 | animate={{ opacity: 1, filter: "blur(0px)" }}
46 | exit={{ opacity: 0, filter: "blur(10px)" }}
47 | transition={{ duration: 0.8 }}
48 | className="w-full h-full object-cover mask-image-linear-gradient"
49 | style={{ maskImage: 'linear-gradient(to right, transparent, black)' }}
50 | />
51 | )}
52 |
53 |
54 |
55 |
56 |
57 | {STEPS.map((step) => (
58 |
setHoveredStep(step.id)}
62 | onHoverEnd={() => setHoveredStep(null)}
63 | >
64 | {/* Bloom Effect */}
65 |
69 |
70 |
71 | {step.step}
72 |
{step.name}
73 |
74 |
75 | {step.desc}
76 |
77 |
78 | ))}
79 |
80 |
81 |
82 | );
83 | };
--------------------------------------------------------------------------------
/aelia/components/Hero.tsx:
--------------------------------------------------------------------------------
1 | import React, { useRef } from 'react';
2 | import { motion, useScroll, useTransform } from 'framer-motion';
3 |
4 | export const Hero: React.FC = () => {
5 | const containerRef = useRef(null);
6 | const { scrollY } = useScroll();
7 |
8 | // Veil animations driven by scroll
9 | const veilOpacity = useTransform(scrollY, [0, 500], [0.6, 0]);
10 | const veilY = useTransform(scrollY, [0, 500], ["0%", "100%"]);
11 |
12 | // Product scale/focus animation
13 | const scale = useTransform(scrollY, [0, 500], [1, 1.05]);
14 | const shadowOpacity = useTransform(scrollY, [0, 300], [0.2, 0.6]);
15 |
16 | return (
17 |
18 |
19 | {/* Background Text Texture (Subtle) */}
20 |
21 |
AELIA
22 |
23 |
24 |
25 |
31 | The Heritage Carrier
32 |
33 |
39 | Est. 2024 • Tuscany • Sourced: Vachetta
40 |
41 |
42 |
43 | {/* Product Stage */}
44 |
45 | {/* Shadow */}
46 |
50 |
51 | {/* Product Image */}
52 |
58 |
59 | {/* The Veil */}
60 |
64 |
65 |
66 |
72 | Scroll to Explore
73 |
74 |
79 |
80 |
81 |
82 | );
83 | };
84 |
--------------------------------------------------------------------------------
/arche/components/Hero.tsx:
--------------------------------------------------------------------------------
1 | import React, { useEffect, useRef } from 'react';
2 | import { gsap } from 'gsap';
3 | import { ScrollTrigger } from 'gsap/ScrollTrigger';
4 |
5 | gsap.registerPlugin(ScrollTrigger);
6 |
7 | const Hero: React.FC = () => {
8 | const containerRef = useRef(null);
9 | const textRef = useRef(null);
10 | const svgRef = useRef(null);
11 |
12 | useEffect(() => {
13 | if (!containerRef.current || !textRef.current || !svgRef.current) return;
14 |
15 | const tl = gsap.timeline({
16 | scrollTrigger: {
17 | trigger: containerRef.current,
18 | start: "top top",
19 | end: "+=2000", // Increased scroll distance for a heavier, more luxurious feel
20 | scrub: 1,
21 | pin: true,
22 | anticipatePin: 1,
23 | }
24 | });
25 |
26 | // Scale the text mask up until it reveals everything
27 | // Starting from scale 1 (normal) to scale 100 (huge opening)
28 | tl.to(textRef.current, {
29 | scale: 100,
30 | transformOrigin: "50% 50%", // Critical: scale exactly from center
31 | ease: "power2.inOut",
32 | });
33 |
34 | // Fade out the overlay color near the end to ensure smooth transition
35 | tl.to(svgRef.current, {
36 | opacity: 0,
37 | ease: "power1.out"
38 | }, "<60%"); // Start fading when scaling is 60% done
39 |
40 | return () => {
41 | tl.kill();
42 | };
43 | }, []);
44 |
45 | return (
46 |
47 | {/* Background Video */}
48 |
60 |
61 | {/* The Curtain Mask */}
62 |
63 |
69 |
70 |
71 |
72 |
83 | ARCHÉ
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
Scroll to Enter
93 |
94 |
95 | );
96 | };
97 |
98 | export default Hero;
--------------------------------------------------------------------------------
/velocite/components/Features.tsx:
--------------------------------------------------------------------------------
1 | import React, { useState } from 'react';
2 | import { motion, AnimatePresence } from 'framer-motion';
3 | import { FEATURES } from '../constants';
4 |
5 | export const Features: React.FC = () => {
6 | const [expandedId, setExpandedId] = useState(null);
7 |
8 | return (
9 |
10 |
11 |
12 |
BLUEPRINTS
13 |
14 |
15 |
16 | {FEATURES.map((feature) => (
17 |
setExpandedId(feature.id)}
21 | onHoverEnd={() => setExpandedId(null)}
22 | onClick={() => setExpandedId(expandedId === feature.id ? null : feature.id)}
23 | >
24 |
25 |
26 | {feature.title}
27 |
28 | {feature.id.toUpperCase()} // 00{FEATURES.indexOf(feature) + 1}
29 |
30 |
31 |
32 | {expandedId === feature.id && (
33 |
40 |
41 |
42 | {/* Animated SVG Icon */}
43 |
44 |
50 |
51 |
52 |
53 |
{feature.description}
54 |
View Schematics >
55 |
56 |
57 |
58 | )}
59 |
60 |
61 | {/* Progress Bar Bottom */}
62 |
63 |
64 | ))}
65 |
66 |
67 |
68 | );
69 | };
--------------------------------------------------------------------------------
/aelia/components/Footer.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { ArrowRight } from 'lucide-react';
3 |
4 | export const Footer: React.FC = () => {
5 | return (
6 |
63 | );
64 | };
65 |
--------------------------------------------------------------------------------
/nexus/components/Footer.tsx:
--------------------------------------------------------------------------------
1 | import React, { useEffect, useState } from 'react';
2 | import { motion } from 'framer-motion';
3 | import { ArrowRight } from 'lucide-react';
4 |
5 | const Footer: React.FC = () => {
6 | const [userCount, setUserCount] = useState(12403);
7 |
8 | useEffect(() => {
9 | const interval = setInterval(() => {
10 | // Simulate live user count increase occasionally
11 | if (Math.random() > 0.7) {
12 | setUserCount(prev => prev + 1);
13 | }
14 | }, 2000);
15 | return () => clearInterval(interval);
16 | }, []);
17 |
18 | return (
19 |
74 | );
75 | };
76 |
77 | export default Footer;
--------------------------------------------------------------------------------
/nexus/components/Modules.tsx:
--------------------------------------------------------------------------------
1 | import React, { useRef } from 'react';
2 | import { motion, useScroll, useTransform } from 'framer-motion';
3 | import { Bot, Calendar, BarChart3, Shield } from 'lucide-react';
4 |
5 | const modules = [
6 | {
7 | id: 'automation',
8 | title: 'Task Automation',
9 | icon: ,
10 | desc: 'Self-correcting workflows that learn from your team.',
11 | code: 'if (tasks.pending > 5) autoAssign(resource);'
12 | },
13 | {
14 | id: 'scheduling',
15 | title: 'AI Scheduling',
16 | icon: ,
17 | desc: 'Predictive timelines based on historical velocity.',
18 | code: 'timeline.optimize({ priority: "high" });'
19 | },
20 | {
21 | id: 'reporting',
22 | title: 'Deep Reporting',
23 | icon: ,
24 | desc: 'Real-time visibility into every metric that matters.',
25 | code: 'return analytics.forecast(nextQuarter);'
26 | },
27 | {
28 | id: 'security',
29 | title: 'Zero Trust',
30 | icon: ,
31 | desc: 'Enterprise-grade security baked into every interaction.',
32 | code: 'auth.verify(handshake).then(grantAccess);'
33 | }
34 | ];
35 |
36 | const Modules: React.FC = () => {
37 | const targetRef = useRef(null);
38 | const { scrollYProgress } = useScroll({
39 | target: targetRef,
40 | });
41 |
42 | const x = useTransform(scrollYProgress, [0, 1], ["0%", "-75%"]);
43 |
44 | return (
45 |
46 |
47 |
48 | {/* Intro Text Card */}
49 |
50 |
03 // CORE MODULES
51 |
Built for scale. Designed for speed.
52 |
Swipe to explore the architecture defining the future of work.
53 |
54 |
55 | {modules.map((module) => (
56 |
60 |
61 | {module.icon}
62 |
63 |
64 |
65 |
66 | {/* Abstract Visualization */}
67 |
68 | {module.code}
69 |
70 |
71 |
72 |
73 |
74 |
{module.title}
75 |
{module.desc}
76 |
77 |
78 |
81 |
82 | ))}
83 |
84 |
85 |
86 | );
87 | };
88 |
89 | export default Modules;
--------------------------------------------------------------------------------
/chromaflow/components/Services.tsx:
--------------------------------------------------------------------------------
1 | import React, { useState } from 'react';
2 | import { motion, AnimatePresence } from 'framer-motion';
3 | import { ServiceItem } from '../types';
4 |
5 | const services: ServiceItem[] = [
6 | { id: '01', title: 'Architectural Lighting', description: 'Transforming built environments into dynamic canvases using projection mapping and smart LEDs.', patternType: 'grid' },
7 | { id: '02', title: 'Event Visuals', description: 'Live, audio-reactive visual performances that synchronize with soundscapes for immersive experiences.', patternType: 'waves' },
8 | { id: '03', title: 'Brand Experiences', description: 'Interactive installations that tell your story through movement, light, and user participation.', patternType: 'particles' }
9 | ];
10 |
11 | const Services: React.FC = () => {
12 | const [hovered, setHovered] = useState(null);
13 |
14 | return (
15 |
16 |
17 |
Our Expertise
18 |
19 |
20 | {services.map((service) => (
21 |
setHovered(service.id)}
25 | onMouseLeave={() => setHovered(null)}
26 | >
27 |
28 |
29 | {service.id}
30 |
31 |
32 | {service.title}
33 |
34 |
{/* Spacer */}
35 |
36 |
37 | {/* Description Reveal */}
38 |
39 | {hovered === service.id && (
40 |
46 |
47 | {service.description}
48 |
49 |
50 | )}
51 |
52 |
53 | {/* Refraction/Pattern Background Effect */}
54 |
60 |
61 | {/* Subtle Light Leak */}
62 | {hovered === service.id && (
63 |
64 | )}
65 |
66 | ))}
67 |
68 |
69 |
70 |
71 | );
72 | };
73 |
74 | export default Services;
75 |
--------------------------------------------------------------------------------
/velocite/components/Models.tsx:
--------------------------------------------------------------------------------
1 | import React, { useRef } from 'react';
2 | import { motion, useTransform, useScroll } from 'framer-motion';
3 | import { CAR_MODELS } from '../constants';
4 | import { Wind } from 'lucide-react';
5 |
6 | export const Models: React.FC = () => {
7 | const targetRef = useRef(null);
8 | const { scrollYProgress } = useScroll({ target: targetRef });
9 |
10 | // Translate X based on vertical scroll progress of the container
11 | const x = useTransform(scrollYProgress, [0, 1], ["0%", "-75%"]);
12 |
13 | return (
14 |
15 |
16 |
17 | {CAR_MODELS.map((car) => (
18 |
19 |
20 | {/* Holographic Grid Background */}
21 |
22 |
23 | {/* Car Image with Wind Tunnel Effect */}
24 |
25 |
30 | {/* Simulated Wind Lines (SVG) */}
31 |
32 |
37 |
42 |
43 |
44 |
45 | {/* Info Overlay */}
46 |
47 |
48 |
{car.name}
49 |
{car.tagline}
50 |
51 |
52 |
53 |
54 | ACCEL_0-60
55 | {car.specs.acceleration}
56 |
57 |
58 | RANGE_EPA
59 | {car.specs.range}
60 |
61 |
62 | POWER_HP
63 | {car.specs.hp}
64 |
65 |
66 |
67 |
68 |
69 | ))}
70 |
71 |
72 |
73 | );
74 | };
--------------------------------------------------------------------------------
/velocite/components/Footer.tsx:
--------------------------------------------------------------------------------
1 | import React, { useState, useEffect } from 'react';
2 | import { motion } from 'framer-motion';
3 | import { ArrowRight, MapPin, Instagram, Twitter, Linkedin } from 'lucide-react';
4 |
5 | export const Footer: React.FC = () => {
6 | const [miles, setMiles] = useState(12405920);
7 |
8 | useEffect(() => {
9 | const interval = setInterval(() => {
10 | setMiles(prev => prev + Math.floor(Math.random() * 10));
11 | }, 1000);
12 | return () => clearInterval(interval);
13 | }, []);
14 |
15 | return (
16 |
17 |
18 | {/* Massive CTA */}
19 |
20 |
21 | {/* Moving Asphalt Texture (CSS Animation would be used here, simulating with translation) */}
22 |
27 |
28 | TEST DRIVE
29 |
30 |
31 |
32 |
33 |
34 |
35 | {/* Brand */}
36 |
37 |
VELOCITÉ
38 |
Designed in Tokyo. Engineered in Munich. Driven Everywhere.
39 |
40 |
41 | {/* Locations */}
42 |
43 |
Dealerships
44 |
45 | TOKYO_SHIBUYA
46 | LA_SILVERLAKE
47 | LONDON_SHOREDITCH
48 | BERLIN_MITTE
49 |
50 |
51 |
52 | {/* Socials */}
53 |
54 |
Network
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 | {/* Live Counter */}
63 |
64 |
Global Miles
65 |
66 | {miles.toLocaleString()} KM
67 |
68 |
69 |
70 |
LIVE TELEMETRY
71 |
72 |
73 |
74 |
75 |
76 | © 2024 VELOCITÉ MOTORS. ALL RIGHTS RESERVED. SILENCE IS GOLDEN.
77 |
78 |
79 | );
80 | };
--------------------------------------------------------------------------------
/chromaflow/components/Installations.tsx:
--------------------------------------------------------------------------------
1 | import React, { useRef } from 'react';
2 | import { motion, useScroll, useTransform } from 'framer-motion';
3 | import { Play } from 'lucide-react';
4 | import { InstallationProject } from '../types';
5 |
6 | const projects: InstallationProject[] = [
7 | {
8 | id: '1',
9 | title: 'Nebula Void',
10 | image: 'https://picsum.photos/1920/1080?random=1',
11 | description: 'Immersive light chamber.'
12 | },
13 | {
14 | id: '2',
15 | title: 'Sonic Prism',
16 | image: 'https://picsum.photos/1920/1080?random=2',
17 | description: 'Audio-reactive sculpture.'
18 | },
19 | {
20 | id: '3',
21 | title: 'Datastream',
22 | image: 'https://picsum.photos/1920/1080?random=3',
23 | description: 'Real-time network visualization.'
24 | },
25 | {
26 | id: '4',
27 | title: 'Solar Wind',
28 | image: 'https://picsum.photos/1920/1080?random=4',
29 | description: 'Outdoor kinetic projection.'
30 | }
31 | ];
32 |
33 | const Installations: React.FC = () => {
34 | const targetRef = useRef(null);
35 | const { scrollYProgress } = useScroll({
36 | target: targetRef,
37 | });
38 |
39 | const x = useTransform(scrollYProgress, [0, 1], ["0%", "-75%"]);
40 |
41 | return (
42 |
43 |
44 |
45 |
46 |
Selected Works
47 |
48 |
49 |
50 | {projects.map((project) => (
51 |
52 |
53 | {/* Image with Filter Trick */}
54 |
55 |
62 |
63 |
64 | {/* Simulated Ripple Overlay */}
65 |
66 |
67 |
68 | {/* Content Overlay */}
69 |
70 |
76 | {project.title}
77 |
78 |
79 |
80 |
81 |
82 |
{project.description}
83 |
84 |
85 |
86 |
87 | ))}
88 |
89 |
90 |
91 | );
92 | };
93 |
94 | export default Installations;
95 |
--------------------------------------------------------------------------------
/forge/components/Materials.tsx:
--------------------------------------------------------------------------------
1 | import React, { useState } from 'react';
2 | import { motion, AnimatePresence } from 'framer-motion';
3 | import { MATERIALS } from '../constants';
4 | import { Material } from '../types';
5 |
6 | const Materials: React.FC = () => {
7 | const [selectedId, setSelectedId] = useState(null);
8 |
9 | return (
10 |
11 |
12 |
13 | Raw Materials
14 |
15 |
16 |
17 | {MATERIALS.map((mat) => (
18 |
setSelectedId(mat.id)}
22 | className="aspect-square relative group cursor-zoom-in overflow-hidden border border-forge-pencil/50"
23 | >
24 |
29 |
30 |
{mat.name}
31 |
32 |
33 | ))}
34 |
35 |
36 |
37 | {selectedId && (
38 |
39 | {MATERIALS.filter(m => m.id === selectedId).map(item => (
40 |
45 | { e.stopPropagation(); setSelectedId(null); }}
47 | className="absolute top-4 right-4 z-20 text-forge-white hover:text-forge-copper font-display text-2xl"
48 | >
49 | CLOSE [X]
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
{item.name}
58 |
59 |
60 | Forging Temp
61 | {item.temp}
62 |
63 |
64 | Process
65 | {item.process}
66 |
67 |
68 |
69 | {item.description}
70 |
71 |
72 |
73 | ))}
74 |
75 | )}
76 |
77 |
78 |
79 | );
80 | };
81 |
82 | export default Materials;
--------------------------------------------------------------------------------
/chromaflow/components/Hero.tsx:
--------------------------------------------------------------------------------
1 | import React, { useEffect, useRef } from 'react';
2 | import gsap from 'gsap';
3 |
4 | const Hero: React.FC = () => {
5 | const canvasRef = useRef(null);
6 | const containerRef = useRef(null);
7 |
8 | useEffect(() => {
9 | const canvas = canvasRef.current;
10 | if (!canvas) return;
11 |
12 | const ctx = canvas.getContext('2d');
13 | if (!ctx) return;
14 |
15 | let width = window.innerWidth;
16 | let height = window.innerHeight;
17 |
18 | const resize = () => {
19 | width = window.innerWidth;
20 | height = window.innerHeight;
21 | canvas.width = width;
22 | canvas.height = height;
23 | };
24 |
25 | window.addEventListener('resize', resize);
26 | resize();
27 |
28 | // Particle System
29 | interface Particle {
30 | x: number;
31 | y: number;
32 | vx: number;
33 | vy: number;
34 | size: number;
35 | color: string;
36 | life: number;
37 | }
38 |
39 | const particles: Particle[] = [];
40 | const colors = ['#007BFF', '#FF008C', '#7CFC00', '#8A2BE2'];
41 |
42 | const createParticle = (x: number, y: number) => {
43 | const angle = Math.random() * Math.PI * 2;
44 | const speed = Math.random() * 2 + 0.5;
45 | particles.push({
46 | x,
47 | y,
48 | vx: Math.cos(angle) * speed,
49 | vy: Math.sin(angle) * speed,
50 | size: Math.random() * 3 + 1,
51 | color: colors[Math.floor(Math.random() * colors.length)],
52 | life: 100 + Math.random() * 100
53 | });
54 | };
55 |
56 | // Animation Loop
57 | const render = () => {
58 | // Fade out trail
59 | ctx.fillStyle = 'rgba(255, 255, 255, 0.1)';
60 | ctx.fillRect(0, 0, width, height);
61 |
62 | // Spawn particles from center occasionally to keep it alive
63 | if (Math.random() < 0.2) {
64 | createParticle(width / 2, height / 2);
65 | }
66 |
67 | // Update and draw particles
68 | for (let i = particles.length - 1; i >= 0; i--) {
69 | const p = particles[i];
70 | p.x += p.vx;
71 | p.y += p.vy;
72 | p.life--;
73 |
74 | // Fluid movement noise
75 | p.vx += (Math.random() - 0.5) * 0.1;
76 | p.vy += (Math.random() - 0.5) * 0.1;
77 |
78 | ctx.beginPath();
79 | ctx.arc(p.x, p.y, p.size, 0, Math.PI * 2);
80 | ctx.fillStyle = p.color;
81 | ctx.fill();
82 |
83 | if (p.life <= 0) {
84 | particles.splice(i, 1);
85 | }
86 | }
87 |
88 | requestAnimationFrame(render);
89 | };
90 |
91 | // Initial Explosion
92 | for (let i = 0; i < 100; i++) {
93 | createParticle(width / 2, height / 2);
94 | }
95 |
96 | render();
97 |
98 | // Text Reveal
99 | const tl = gsap.timeline();
100 | tl.fromTo('.hero-title-char',
101 | { opacity: 0, y: 100, filter: 'blur(10px)' },
102 | { opacity: 1, y: 0, filter: 'blur(0px)', stagger: 0.05, duration: 1.5, ease: 'power4.out', delay: 0.5 }
103 | );
104 |
105 | return () => {
106 | window.removeEventListener('resize', resize);
107 | };
108 | }, []);
109 |
110 | const title = "CHROMAFLOW";
111 |
112 | return (
113 |
114 |
115 |
116 |
117 | {title.split('').map((char, index) => (
118 | {char}
119 | ))}
120 |
121 |
122 |
123 | SCROLL TO DISCOVER
124 |
125 |
126 | );
127 | };
128 |
129 | export default Hero;
130 |
--------------------------------------------------------------------------------
/forge/components/Collections.tsx:
--------------------------------------------------------------------------------
1 | import React, { useRef, useState } from 'react';
2 | import { motion, useScroll, useTransform, useMotionValue } from 'framer-motion';
3 | import { COLLECTIONS } from '../constants';
4 | import { Product } from '../types';
5 |
6 | const Collections: React.FC = () => {
7 | const targetRef = useRef(null);
8 | const { scrollYProgress } = useScroll({
9 | target: targetRef,
10 | });
11 |
12 | const x = useTransform(scrollYProgress, [0, 1], ["0%", "-75%"]);
13 |
14 | return (
15 |
16 |
17 |
18 | {COLLECTIONS.map((product) => (
19 |
20 | ))}
21 | {/* Extra space at end */}
22 |
23 |
24 |
25 |
26 |
27 | The Collections
28 |
29 |
30 |
31 |
32 | );
33 | };
34 |
35 | const ProductCard: React.FC<{ product: Product }> = ({ product }) => {
36 | const [hovered, setHovered] = useState(false);
37 | const mouseX = useMotionValue(0);
38 | const mouseY = useMotionValue(0);
39 |
40 | const handleMouseMove = (e: React.MouseEvent) => {
41 | const rect = e.currentTarget.getBoundingClientRect();
42 | mouseX.set(e.clientX - rect.left);
43 | mouseY.set(e.clientY - rect.top);
44 | };
45 |
46 | return (
47 | setHovered(true)}
50 | onMouseLeave={() => setHovered(false)}
51 | onMouseMove={handleMouseMove}
52 | >
53 | {/* Heat Map Overlay */}
54 |
60 |
61 | {/* Dynamic Heat Spot (Visual Glow) */}
62 | {hovered && (
63 |
72 | )}
73 |
74 |
75 |
80 |
81 |
82 |
83 |
{product.name}
84 |
85 |
86 | {product.weight.toFixed(1)} KG
87 |
88 |
89 | {product.material}
90 |
91 |
92 |
93 | {product.description}
94 |
95 |
96 | Inspect
97 |
98 |
99 |
100 | );
101 | };
102 |
103 | export default Collections;
--------------------------------------------------------------------------------
/chromaflow/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ChromaFlow - Dynamic Art Studio
7 |
8 |
9 |
10 |
11 |
40 |
66 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
--------------------------------------------------------------------------------