diff --git a/dev/design.json b/dev/design.json index 1aabd68..7eda148 100644 --- a/dev/design.json +++ b/dev/design.json @@ -1,20 +1,20 @@ { "design_system": { "name": "V7 Industrial Dark Mode System", - "version": "1.0", + "version": "2.0", "methodology": { - "approach": "Brutalist/Industrial Dark UI", - "philosophy": "Grid-visible, high-contrast, typography-forward design with layered content and subtle glassmorphism", + "approach": "Brutalist/Industrial Dark UI with System/Terminal Aesthetics", + "philosophy": "Grid-visible, high-contrast, typography-forward design. Interfaces should feel like high-end technical equipment (F1 telemetry, server racks, terminals).", "characteristics": [ "Dark mode native (not an option, the default)", - "Visible grid structure as design element", - "Massive typography as primary visual hierarchy", + "Visible grid structure as design element (10x10 interactive or 12-col static)", + "Massive typography as primary visual hierarchy (2-line stacks)", "Minimal rounded corners (sharp, industrial aesthetic)", - "Heavy use of borders and dividers", - "Layered content with overlays and blend modes", - "Subtle animations and smooth transitions", - "Opacity-based depth system", - "Technical/monospace accents" + "Heavy use of borders, dividers, and technical labels (SYS.01, ///)", + "Layered content with overlays, video backgrounds, and blend modes", + "System-like animations: boot-up sequences, grid trails, status pulses", + "Opacity-based depth system (glass panels)", + "Technical/monospace accents for metadata (coordinates, time, IDs)" ] }, "color_palette": { @@ -43,7 +43,7 @@ "hex": "#ff4d00", "rgb": "255, 77, 0", "name": "Vibrant Orange", - "usage": "Primary accent, CTAs, highlights, interactive elements", + "usage": "Primary accent, CTAs, highlights, interactive elements, status indicators", "opacity_variants": [ { "name": "brand_accent_5", @@ -74,6 +74,7 @@ "white": { "hex": "#FFFFFF", "opacity_scale": { + "2": "rgba(255, 255, 255, 0.02)", "5": "rgba(255, 255, 255, 0.05)", "10": "rgba(255, 255, 255, 0.1)", "20": "rgba(255, 255, 255, 0.2)", @@ -125,37 +126,6 @@ } ] } - }, - "gradients": { - "primary_hero": { - "type": "linear-gradient", - "direction": "to top right", - "stops": [ - "brand_accent", - "orange-500 (via)", - "brand_panel" - ], - "css": "bg-gradient-to-tr from-brand-accent via-orange-500 to-brand-panel" - }, - "fade_top": { - "type": "linear-gradient", - "direction": "to top", - "stops": [ - "brand_dark", - "transparent (via)", - "transparent" - ], - "usage": "Image overlays" - }, - "card_dramatic": { - "type": "linear-gradient", - "direction": "to bottom right", - "stops": [ - "orange-600", - "rose-700" - ], - "usage": "Feature cards" - } } }, "typography": { @@ -163,43 +133,16 @@ "primary": { "name": "Inter", "type": "sans-serif", - "weights": [ - 300, - 400, - 500, - 600, - 700, - 800 - ], "usage": "Primary UI font", "fallback": "sans-serif" }, "mono": { "name": "system-ui monospace", - "usage": "Numbers, technical details, small labels", + "usage": "Numbers, technical details, small labels, coordinates, clock", "examples": [ "font-mono" ] - }, - "available_alternatives": [ - "Geist", - "Roboto", - "Montserrat", - "Poppins", - "Playfair Display", - "Instrument Serif", - "Merriweather", - "Bricolage Grotesque", - "Plus Jakarta Sans", - "Manrope", - "Space Grotesk", - "Work Sans", - "PT Serif", - "Geist Mono", - "Space Mono", - "Quicksand", - "Nunito" - ] + } }, "scale": { "xs": { @@ -242,582 +185,119 @@ "line_height": "2.5rem", "usage": "Page headings" }, - "5xl": { - "size": "3rem", - "line_height": "1", - "usage": "Large headings" - }, "6xl": { "size": "3.75rem", "line_height": "1", "usage": "Hero headings" }, - "7xl": { - "size": "4.5rem", - "line_height": "1", - "usage": "Display text (md)" - }, "8xl": { "size": "6rem", "line_height": "1", - "usage": "Display text (lg)" + "usage": "Display text" }, - "massive": { - "sizes": [ - "12rem", - "18rem (md)", - "22rem (lg)" - ], - "line_height": "none", - "usage": "Hero display, massive branding" + "9xl": { + "size": "8rem", + "line_height": "0.85", + "usage": "Massive Headers (2-line stacks)" } }, - "weights": { - "light": 300, - "normal": 400, - "medium": 500, - "semibold": 600, - "bold": 700, - "extrabold": 800 - }, - "letter_spacing": { - "tighter": "-0.05em", - "tight": "-0.025em", - "normal": "0", - "wide": "0.025em", - "wider": "0.05em", - "widest": "0.1em" - }, - "text_transforms": { - "uppercase": { - "usage": "Labels, navigation, tags, metadata", - "typical_size": "xs or sm", - "typical_tracking": "widest or wider", - "typical_weight": "semibold or bold" - } - }, - "line_heights": { - "none": "1", - "tight": "1.25", - "relaxed": "1.625" - }, "patterns": { - "small_label": { - "size": "text-xs", - "weight": "font-bold", + "technical_label": { + "size": "text-[10px]", + "weight": "font-bold or font-medium", + "family": "font-mono", "transform": "uppercase", "tracking": "tracking-widest", - "example": "text-xs font-bold uppercase tracking-widest" + "color": "text-slate-500 or text-brand-accent", + "example": "SYS.01 /// ACTIVE" }, - "hero_title": { - "size": "text-[12rem] md:text-[18rem] lg:text-[22rem]", + "massive_stack": { + "size": "text-6xl md:text-8xl lg:text-9xl", "weight": "font-bold", - "line_height": "leading-none", + "line_height": "leading-[0.85]", "tracking": "tracking-tighter", - "example_modifiers": "text-transparent bg-clip-text bg-gradient-to-tr" - }, - "section_heading": { - "size": "text-4xl md:text-5xl lg:text-6xl", - "weight": "font-semibold", - "tracking": "tracking-tight", - "color": "text-white" - }, - "body_text": { - "size": "text-sm md:text-base", - "color": "text-slate-400", - "line_height": "leading-relaxed", - "weight": "font-normal or font-medium" - }, - "mono_detail": { - "family": "font-mono", - "size": "text-xs or text-sm", - "weight": "font-medium or font-semibold", - "usage": "Numbers, codes, technical info" + "structure": "Two or three lines, mixture of solid white and text-stroke or accent color" } } }, - "spacing": { - "scale": { - "0": "0px", - "1": "0.25rem", - "2": "0.5rem", - "3": "0.75rem", - "4": "1rem", - "6": "1.5rem", - "8": "2rem", - "10": "2.5rem", - "12": "3rem", - "16": "4rem", - "20": "5rem", - "24": "6rem", - "32": "8rem", - "48": "12rem" - }, - "layout_padding": { - "mobile": "px-6", - "desktop": "lg:px-12", - "standard": "px-6 lg:px-12" - }, - "section_spacing": { - "small": "py-8", - "medium": "py-12 md:py-16", - "large": "py-24", - "xlarge": "py-32 lg:py-48" - }, - "component_spacing": { - "tight": "gap-2 or gap-3", - "normal": "gap-4 or gap-6", - "loose": "gap-8 or gap-12", - "extra_loose": "gap-12 md:gap-24" - } - }, "grid_system": { - "overlay": { - "enabled": true, - "purpose": "Visible design element", - "implementation": "Fixed position, pointer-events-none, opacity-10", - "columns": { - "mobile": 4, - "tablet": 6, - "desktop": 12 - }, - "styling": "border-r border-slate-500 h-full" + "interactive_overlay": { + "type": "10x10 Grid", + "interaction": "mousemove trail effect", + "style": "border border-white/5", + "active_state": "bg-brand-accent opacity-15", + "fade_out": "duration-800 ease-out" }, - "content_grid": { - "base": "grid grid-cols-1", - "tablet": "md:grid-cols-2 or md:grid-cols-4", - "desktop": "lg:grid-cols-12 or lg:grid-cols-2", - "gap": "gap-6 or gap-8 or gap-12" - }, - "column_spans": { - "usage": "lg:col-span-{number}", - "common_patterns": [ - "lg:col-span-3 (sidebar)", - "lg:col-span-9 (main content)", - "lg:col-span-4 / lg:col-span-8 (2:1 ratio)", - "lg:col-span-2 / lg:col-span-5 (asymmetric)" - ] - } - }, - "borders": { - "widths": { - "thin": "border or border-[1px]", - "medium": "border-2", - "thick": "border-[40px] (decorative)" - }, - "colors": { - "subtle": "border-white/5", - "standard": "border-white/10 or border-white/20", - "visible": "border-white/30", - "slate_system": "border-slate-700 or border-slate-800", - "accent": "border-brand-accent" - }, - "positions": { - "all": "border", - "top": "border-t or border-t-2", - "right": "border-r", - "bottom": "border-b", - "left": "border-l", - "horizontal": "border-x", - "vertical": "border-y" - }, - "usage_patterns": { - "section_divider": "border-t border-slate-800", - "card": "border border-white/10 or border border-slate-800", - "active_state": "border-t-2 border-brand-accent", - "hover_state": "hover:border-brand-accent transition-colors" - } - }, - "effects": { - "glassmorphism": { - "background": "bg-white/3 or rgba(255, 255, 255, 0.03)", - "backdrop": "backdrop-filter: blur(10px)", - "border": "border border-white/10", - "class_example": ".glass { background: rgba(255, 255, 255, 0.03); backdrop-filter: blur(10px); }" - }, - "shadows": { - "accent_glow": "shadow-lg shadow-brand-accent/20", - "cyan_glow": "shadow-lg shadow-brand-cyan/20", - "red_glow": "shadow-lg shadow-brand-red/20", - "custom_glow": "shadow-[0_0_10px_rgba(255,77,0,0.5)]", - "drop_shadow": "drop-shadow-2xl" - }, - "blur": { - "small": "blur-sm", - "backdrop": "backdrop-blur-sm" - }, - "blend_modes": { - "multiply": "mix-blend-multiply", - "overlay": "mix-blend-overlay", - "luminosity": "mix-blend-luminosity" - }, - "opacity": { - "scale": [ - 0, - 5, - 10, - 20, - 30, - 40, - 60, - 90, - 100 - ], - "usage": "opacity-{value}", - "common": { - "invisible": "opacity-0", - "barely_visible": "opacity-5 or opacity-10", - "subtle": "opacity-20 or opacity-30", - "medium": "opacity-40", - "visible": "opacity-60 or opacity-90", - "full": "opacity-100" - } - } - }, - "animations": { - "transitions": { - "fast": "duration-300 or transition-all duration-300", - "medium": "duration-500", - "slow": "duration-700 or duration-1000", - "properties": { - "all": "transition-all", - "colors": "transition-colors", - "opacity": "transition-opacity", - "transform": "transition-transform" - }, - "easing": { - "standard": "ease-out", - "smooth": "ease-in-out" - } - }, - "transforms": { - "scale_subtle": "scale-100 hover:scale-105 transition-transform", - "scale_medium": "group-hover:scale-105 transition-all duration-700", - "scale_bold": "group-hover:scale-110", - "translate_x": "group-hover:translate-x-1 or group-hover:translate-x-0.5", - "translate_y": "translate-y-4 group-hover:translate-y-0" - }, - "hover_states": { - "opacity_fade": "opacity-0 group-hover:opacity-100 transition-opacity duration-500", - "color_shift": "hover:text-white transition-colors", - "border_accent": "hover:border-brand-accent transition-all", - "background_lift": "hover:bg-white/5 transition-colors", - "combined": "hover:bg-brand-accent hover:text-brand-dark transition-all" - }, - "keyframes": { - "pulse": { - "animation": "animate-pulse", - "usage": "Status indicators, live elements" - } - }, - "delays": { - "stagger": "delay-100", - "usage": "Sequential reveals" + "data_table": { + "columns": 12, + "headers": "text-[10px] font-mono uppercase tracking-widest", + "rows": "border-b border-white/10 py-10 hover:border-brand-accent/30" } }, "components": { "buttons": { - "primary": { - "base": "bg-brand-accent text-brand-dark", - "padding": "px-8 py-4", - "typography": "text-xs font-bold uppercase tracking-widest", - "hover": "hover:bg-amber-400 transition-colors", - "full_class": "bg-brand-accent text-brand-dark text-xs font-bold uppercase px-8 py-4 tracking-widest hover:bg-amber-400 transition-colors" - }, - "secondary": { - "base": "bg-white text-brand-dark", - "padding": "px-8 py-4", - "typography": "text-xs font-bold uppercase tracking-widest", - "hover": "hover:bg-slate-100 transition-colors" - }, - "ghost": { - "base": "bg-transparent border border-slate-700", - "padding": "px-8 py-4 or p-4", - "typography": "text-xs font-bold uppercase tracking-widest", - "hover": "hover:border-brand-accent hover:bg-brand-accent/5 transition-all" - }, - "icon": { - "size": "w-12 h-12", - "base": "border border-slate-700 flex items-center justify-center", - "hover": "hover:bg-white/5 transition-colors", - "rounded": "Can be rounded-full for circular buttons" - }, - "cta_with_icon": { - "structure": "inline-flex items-center gap-3", - "example": "VIEW CASE STUDY [icon]" + "terminal_action": { + "base": "bg-transparent border border-white/20", + "hover": "hover:border-brand-accent hover:bg-brand-accent/5", + "typography": "font-mono text-xs font-bold uppercase tracking-widest", + "icon": "Arrow or chevron, translates on hover" } }, "cards": { - "glass_card": { - "background": "bg-white/3 or rgba(255, 255, 255, 0.03)", + "rack_unit": { + "base": "border border-white/10 bg-white/[0.02]", + "hover": "hover:border-brand-accent/50 hover:bg-white/[0.04]", + "header": "border-b border-white/5 px-8 py-4 flex justify-between", + "indicator": "left-border strip (solid or translucent)", + "content": "p-8 lg:p-12 grid layout" + }, + "glass_panel": { + "background": "bg-white/[0.02]", "backdrop": "backdrop-blur-sm", - "border": "border border-white/5 or border-white/10", - "padding": "p-6 or p-8", - "hover": "hover:border-brand-accent/50 transition-all" - }, - "panel_card": { - "background": "bg-brand-panel", - "border": "border border-slate-800", - "padding": "p-12 lg:p-20" - }, - "project_card": { - "structure": "relative overflow-hidden cursor-pointer", - "image": "absolute inset-0 bg-cover bg-center", - "overlay": "absolute inset-0 bg-brand-dark/80 group-hover:bg-brand-dark/20 transition-colors duration-500", - "gradient": "absolute inset-0 bg-gradient-to-t from-brand-dark via-transparent to-transparent", - "content": "absolute bottom-0 left-0 w-full p-8 transform translate-y-4 group-hover:translate-y-0", - "hover": "group-hover:scale-105 transition-transform duration-1000" - }, - "feature_card": { - "background": "bg-gradient-to-br from-orange-600 to-rose-700", - "overlay": "absolute inset-0 opacity-20 bg-cover bg-center mix-blend-overlay", - "padding": "p-12 md:p-16", - "min_height": "min-h-[400px]" + "border": "border border-white/10", + "hover": "hover:border-brand-accent/30" } }, - "navigation": { - "header": { - "position": "fixed or relative", - "padding": "px-6 lg:px-12 pt-8", - "structure": "flex items-center justify-between", - "logo": "w-10 h-10 border border-white/20 flex items-center justify-center font-bold text-white tracking-tighter" + "inputs": { + "terminal_input": { + "style": "border-b border-white/20 bg-transparent py-4 text-xl", + "focus": "focus:border-brand-accent focus:outline-none", + "label": "floating label (peer-focus:-top-6), font-mono, tracking-widest" }, - "nav_links": { - "base": "text-xs font-semibold tracking-widest uppercase text-slate-500", - "hover": "hover:text-white transition-colors", - "active": "text-brand-accent", - "spacing": "gap-12" - }, - "footer_nav": { - "grid": "grid grid-cols-4", - "item": "text-[10px] uppercase font-bold text-slate-400 tracking-wider text-center", - "hover": "hover:text-white hover:bg-slate-800 transition-colors", - "padding": "py-4" + "industrial_select": { + "trigger": "custom div mimicking terminal input", + "menu": "bg-brand-dark border border-white/20 shadow-2xl", + "option": "hover:bg-white/5 flex items-center gap-3", + "indicator": "accent dot reveals on hover" } }, - "tabs": { - "container": "grid grid-cols-2 md:grid-cols-4 border-b border-slate-800", - "tab_item": { - "base": "p-6 border-t-2 border-transparent cursor-pointer transition-colors group", - "inactive": "hover:border-slate-700 bg-transparent", - "active": "border-brand-accent bg-white/5" - }, - "tab_label": { - "number": "text-xs block mb-2", - "number_inactive": "text-slate-600", - "number_active": "text-brand-accent", - "text": "text-lg", - "text_inactive": "font-medium text-slate-400 group-hover:text-white", - "text_active": "font-semibold text-white" - } - }, - "tags": { - "accent_tag": { - "base": "text-[10px] font-bold uppercase tracking-widest", - "background": "bg-brand-accent px-2 py-1", - "text": "text-brand-dark", - "extras": "rounded-sm shadow-lg shadow-brand-accent/20" - }, - "category_tag": { - "base": "bg-black/20 or bg-slate-800", - "text": "text-white or text-slate-400", - "padding": "px-3 py-2", - "typography": "text-[10px] font-bold uppercase tracking-wider" + "visualizations": { + "telemetry_overlay": { + "usage": "Video backgrounds", + "elements": "Top/bottom data bars, grid overlays, F1-style stats", + "interaction": "Full card clickable, no modals" }, "status_indicator": { "dot": "w-2 h-2 bg-brand-accent rounded-full animate-pulse", - "glow": "shadow-[0_0_10px_rgba(255,77,0,0.5)]", - "label": "text-xs font-bold text-slate-500 tracking-widest uppercase font-mono" - } - }, - "dividers": { - "line": "w-24 h-1 bg-white or bg-slate-600", - "hover_expand": "w-16 h-1 hover:w-24 transition-all", - "section": "border-t border-slate-800", - "decorative": "w-1 h-10 bg-brand-accent or w-0.5 h-12" - }, - "image_treatments": { - "overlay_pattern": { - "dark_multiply": "absolute inset-0 bg-brand-dark/80 mix-blend-multiply", - "gradient_fade": "absolute inset-0 bg-gradient-to-t from-brand-dark via-transparent to-transparent opacity-90", - "texture": "absolute inset-0 opacity-20 bg-cover bg-center mix-blend-overlay" - }, - "hover_zoom": "transition-transform duration-1000 group-hover:scale-105", - "aspect_ratios": "aspect-[4/3] or md:aspect-auto" - }, - "metadata_display": { - "structure": "Border-t divider with label above content", - "label": "text-xs font-bold text-slate-500 uppercase mb-2", - "value": "text-white text-lg or text-sm", - "example": "

Year

2023 - 2024

" - } - }, - "layout_patterns": { - "hero_section": { - "structure": "min-h-[90vh] flex flex-col justify-center", - "padding": "px-6 lg:px-12 pt-20", - "background": "Massive typography with background image at opacity-20", - "grid": "lg:grid-cols-12 with asymmetric column spans", - "title_treatment": "Text-transparent with gradient background-clip, drop-shadow", - "decorative_elements": "Blurred duplicate text layer beneath main text" - }, - "two_column_split": { - "grid": "grid grid-cols-1 lg:grid-cols-2", - "borders": "border-t border-r border-b border-slate-800", - "min_height": "min-h-[600px] or min-h-[800px]", - "left_content": "Visual/image with overlays", - "right_content": "Details/text content with vertical padding" - }, - "sidebar_layout": { - "grid": "lg:grid-cols-12", - "sidebar": "lg:col-span-3 border-r border-slate-800 p-8 lg:p-10 flex flex-col justify-between", - "main": "lg:col-span-9", - "sidebar_content": "Metadata, stats, navigation" - }, - "masonry_grid": { - "base": "grid grid-cols-1 md:grid-cols-2", - "items": "aspect-[4/3] md:aspect-auto with hover effects", - "borders": "border-b border-r border-slate-800 pattern" - }, - "full_width_section": { - "padding": "px-6 lg:px-12 py-24 or py-32 lg:py-48", - "border": "border-t border-slate-800", - "max_width": "max-w-7xl mx-auto (optional)" - } - }, - "responsive_behavior": { - "breakpoints": { - "sm": "640px", - "md": "768px", - "lg": "1024px", - "xl": "1280px" - }, - "patterns": { - "hide_mobile": "hidden md:block or hidden lg:flex", - "show_mobile_only": "lg:hidden", - "responsive_grid": "grid-cols-1 md:grid-cols-2 lg:grid-cols-12", - "responsive_text": "text-3xl md:text-5xl lg:text-6xl", - "responsive_spacing": "px-6 lg:px-12 or py-8 md:py-12 lg:py-16" - }, - "mobile_considerations": { - "touch_targets": "Minimum 44px (h-12 w-12)", - "simplified_grids": "Single column on mobile, multi-column on tablet+", - "navigation": "Mobile controls shown below lg breakpoint", - "typography": "Scales down but maintains hierarchy" - } - }, - "content_hierarchy": { - "levels": { - "1_mega_branding": { - "size": "text-[12rem] to text-[22rem]", - "treatment": "Gradient, transparent, decorative", - "purpose": "Brand presence, visual anchor" - }, - "2_page_title": { - "size": "text-5xl to text-8xl", - "color": "text-white with optional text-slate-500 spans", - "weight": "font-semibold or font-bold" - }, - "3_section_heading": { - "size": "text-4xl to text-6xl", - "color": "text-white", - "weight": "font-semibold" - }, - "4_subsection": { - "size": "text-2xl to text-4xl", - "color": "text-white", - "weight": "font-medium to font-semibold" - }, - "5_body": { - "size": "text-sm to text-lg", - "color": "text-slate-400 or text-slate-300", - "line_height": "leading-relaxed" - }, - "6_metadata": { - "size": "text-xs or text-[10px]", - "transform": "uppercase", - "tracking": "tracking-widest or tracking-wider", - "color": "text-slate-500 or text-slate-600", - "weight": "font-bold or font-semibold" + "label": "font-mono text-xs uppercase tracking-widest" } } }, - "interactive_states": { - "hover": { - "color_shift": "hover:text-white hover:text-brand-accent", - "background": "hover:bg-white/5 hover:bg-slate-700", - "border": "hover:border-brand-accent hover:border-white", - "scale": "hover:scale-105", - "opacity": "hover:opacity-100 (from lower opacity)" - }, - "active": { - "indicators": "Border-t-2 border-brand-accent, bg-white/5, text color change", - "emphasis": "Brighter text, accent color borders" - }, - "disabled": { - "opacity": "opacity-40 or opacity-60", - "cursor": "cursor-default", - "colors": "text-slate-600" - }, - "focus": { - "treatment": "Follow hover states, no default focus rings visible in design" - } - }, - "special_effects": { - "text_stroke": { - "css": "-webkit-text-stroke: 1px rgba(255,255,255,0.1); color: transparent;", - "usage": "Outlined text effect for decorative elements" - }, - "gradient_text": { - "classes": "text-transparent bg-clip-text bg-gradient-to-tr from-brand-accent via-orange-500 to-brand-panel", - "usage": "Hero titles, emphasis text" - }, - "animated_background": { - "transition": "duration-700 ease-out", - "hover": "opacity changes, scale transforms", - "example": "Image backgrounds that fade/zoom on interaction" - }, - "layered_depth": { - "technique": "Multiple absolute positioned divs with different opacities, blend modes", - "layers": [ - "Base image (bg-cover)", - "Multiply blend overlay (bg-brand-dark/80)", - "Gradient overlay (bg-gradient-to-t opacity-90)", - "Content layer (z-10 or z-20)" + "animations": { + "intro_sequence": { + "trigger": "window.load", + "order": [ + "Grid ripple (diagonal)", + "Text slide up", + "Metadata fade in", + "Portrait slow reveal" ] + }, + "interactions": { + "grid_trail": "Instant active, slow fade out (800ms)", + "row_highlight": "Border color shift, text color shift", + "social_arrow": "Translate X+1 Y-1 on hover" } - }, - "accessibility_notes": { - "contrast": "High contrast maintained throughout (white on dark backgrounds)", - "focus_states": "Should be added for keyboard navigation", - "alt_text": "Images need descriptive alt text", - "aria_labels": "Interactive elements need proper labels", - "semantic_html": "Use proper heading hierarchy (currently div-heavy)", - "color_alone": "Don't rely on color alone for information" - }, - "design_tokens_summary": { - "primary_background": "#0B0D11", - "secondary_background": "#151921", - "primary_accent": "#ff4d00", - "primary_text": "#FFFFFF", - "secondary_text": "#94A3B8", - "border_subtle": "rgba(255, 255, 255, 0.1)", - "border_standard": "#334155", - "font_primary": "Inter, sans-serif", - "font_mono": "monospace", - "radius_minimal": "0 or 2px (rarely used)", - "shadow_glow": "0 0 10px rgba(255,77,0,0.5)", - "transition_fast": "300ms", - "transition_medium": "500ms", - "transition_slow": "700ms" - }, - "implementation_notes": { - "framework": "Tailwind CSS with custom config", - "icons": "Iconify (solar, lucide sets primarily)", - "responsive_images": "Multiple sizes served, lazyload recommended", - "performance": "Optimize large background images, consider lazy loading for below-fold content", - "browser_support": "Modern browsers (backdrop-filter, blend modes require recent versions)", - "dark_mode_only": "No light mode variant in this system" } } } diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png new file mode 100644 index 0000000..e80950d Binary files /dev/null and b/public/apple-touch-icon.png differ diff --git a/public/favicon-192.png b/public/favicon-192.png new file mode 100644 index 0000000..c11fbd3 Binary files /dev/null and b/public/favicon-192.png differ diff --git a/public/favicon-32.png b/public/favicon-32.png new file mode 100644 index 0000000..d34b406 Binary files /dev/null and b/public/favicon-32.png differ diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000..cc0e952 Binary files /dev/null and b/public/favicon.ico differ diff --git a/src/components/BaseHead.astro b/src/components/BaseHead.astro index 20ebd1c..c98b9e5 100644 --- a/src/components/BaseHead.astro +++ b/src/components/BaseHead.astro @@ -20,7 +20,10 @@ const { title, description, image = FallbackImage } = Astro.props; - + + + + -
-
- -

- Experience +
+ + +
+
+

+ Studio + History

-

History

-

- Running my own VFX studio while taking on select freelance projects. I bridge the gap between - creative vision and technical execution. -

- - Visit Biohazard VFX - -
- -
- -
- - -
-
-
-

Biohazard VFX

- FOUNDER & OWNER - 2022 — PRESENT -
-

- Founded and continue to lead a VFX studio specializing in high-end commercial and music video work. - Delivered projects for Post Malone, ENHYPEN, and Nike. Architected a custom pipeline combining cloud and - self-hosted infrastructure. -

-
    -
  • - - Designed 7-plate reconciliation workflows for ENHYPEN (projection mapping live action - onto CAD). -
  • -
  • - - Developed QA systems for AI-generated assets, transforming mid-tier output into - production-ready deliverables. -
  • -
-
- - -
-
-
-

Stinkfilms

- GLOBAL PRODUCTION STUDIO - SUMMER 2024 -
-

- Led Biohazard VFX team (60+ artists) alongside director Felix Brady to create a brand film - for G-Star Raw. -

- -

- Project: G-Star Raw Olympics Campaign - -

-

- Managed full CG environments in Blender/Houdini and integrated AI/ML workflows (Stable Diffusion reference gen, Copycat cleanup). -

- - Read Case Study - -
-
- - -
-
-
-

Freelance

- SELECT PROJECTS - ONGOING -
-

- Taking on select freelance compositing and 3D work alongside studio operations. - Previous clients include Abyss Digital and major labels (Atlantic, Interscope) — - David Kushner, Opium, Lil Durk, Don Toliver. -

-
+
+
/// Career Timeline
+

+ Bridging creative vision with technical execution. From running a dedicated VFX studio to high-end freelance supervision. +

+ + +
+ + +
+ +
+
+ + +
+
+ SYS.01 /// ACTIVE +
+
+ 2022 — PRESENT +
+ +
+
+

Biohazard VFX

+ Founder & Owner + +
+ Studio Lead + Pipeline Arch +
+
+
+

+ Founded and lead a VFX studio specializing in high-end commercial and music video work. + Delivered projects for Post Malone, ENHYPEN, and Nike. Architected a custom pipeline combining cloud and self-hosted infrastructure. +

+ +
+
+

Key Achievement

+

Designed 7-plate reconciliation workflows for ENHYPEN (projection mapping live action onto CAD).

+
+
+

System Impact

+

Developed QA systems for AI-generated assets, transforming mid-tier output into production-ready deliverables.

+
+
+ + +
+
+
+ + +
+ + +
+ +
+ + +
+
+ SYS.02 /// ARCHIVED +
+ SUMMER 2024 +
+ +
+
+

Stinkfilms

+ VFX Supervisor +
+

+ Led Biohazard VFX team (60+ artists) alongside director Felix Brady to create a brand film for G-Star Raw. + Managed full CG environments in Blender/Houdini. +

+ +
+
+ + +
+ +
+ + +
+
+ SYS.03 /// DAEMON +
+ 2016 — PRESENT +
+ +
+
+

Freelance

+ Senior Compositor +
+

+ Taking on select freelance compositing and 3D work alongside studio operations. + Clients include Abyss Digital, Atlantic, Interscope. +

+
+ Nuke + Flame +
+
+
+ +
+ +
- - - - diff --git a/src/components/sections/FeaturedProject.astro b/src/components/sections/FeaturedProject.astro index d6f8409..08750d3 100644 --- a/src/components/sections/FeaturedProject.astro +++ b/src/components/sections/FeaturedProject.astro @@ -1,54 +1,100 @@ --- --- -
-
- /// HIGHLIGHT -

- G-Star Raw Olympics -

+
+ + + + +
+ + +
+
+ + +
- -
- -
-
-
+ +
- -
- -
-
-
- VFX Supervision - AI/ML - Houdini -
-

- Managed full CG environment builds, procedural city generation, and integrated AI-generated - normal maps for relighting in Nuke. -

- + +
+
+ /// Role + VFX Sup
- - + + +
+ + +
+ + +
+
+ + +
+

+ G-Star Olympics +

+

+ Full CG environment production for the 2024 Olympic Campaign. + Orchestrated procedural city generation and AI-enhanced lighting workflows. +

+
+ + +
+
+
+ Shot Count + 12 Sequences +
+
+ Resolution + 4K DCI +
+
+ Pipeline + Houdini / Solaris +
+
+ Render + Karma XPU +
+
+
+ +
+
+
diff --git a/src/components/sections/Hero.astro b/src/components/sections/Hero.astro index 3d7fb29..3d0731c 100644 --- a/src/components/sections/Hero.astro +++ b/src/components/sections/Hero.astro @@ -1,77 +1,100 @@ --- --- -
-
-
-

- /// TECHNICAL GENERALIST & VFX SUPERVISOR -

-

- Visual - Alchemist -

-
-
-

- I am a problem solver who loves visual effects. With 10 years of experience creating end-to-end - visual content for clients like Post Malone, Stinkfilms, and Adidas. Comfortable managing teams while staying - knee-deep in hands-on shot work. -

- +
+ +
+
+ Nicholai Portrait +
+
- -
diff --git a/src/components/sections/Skills.astro b/src/components/sections/Skills.astro index f6f2b94..38e7030 100644 --- a/src/components/sections/Skills.astro +++ b/src/components/sections/Skills.astro @@ -1,75 +1,111 @@ --- +import { Image } from 'astro:assets'; --- -
-
-
-

Technical Arsenal

-

/// SOFTWARE & LANGUAGES

-
- -
-

- - Compositing -

-
- Nuke/NukeX - ComfyUI - After Effects - Photoshop - Deep Compositing - Live Action VFX +
+
+ + +
+
+

+ + Technical + + + Arsenal + +

+
+
+

+ A comprehensive suite of tools and workflows designed for high-fidelity visual production and pipeline automation. +

- -
-

- - 3D Generalist -

-
- Houdini - Blender - Maya - USD - Solaris/Karma - Unreal Engine - Substance - Procedural Gen -
-
+ +
- -
-

- - AI/ML Integration -

-
- Stable Diffusion - LoRA Training - Dataset Prep - Synthetic Data - Prompt Engineering + +
+
/// ID
+
Domain
+ +
-
- -
-

- - Development -

-
- Python - JavaScript - React - Docker - Linux - Pipeline Dev + +
+
+ 01 + 01 +
+
+

Compositing

+ +
+
+
+ Nuke/NukeX • ComfyUI • After Effects • Photoshop +
+
+ + +
+
+ 02 + 02 +
+
+

3D Generalist

+
+
+ Houdini • Blender • Maya • USD • Solaris +
+ +
+ + +
+
+ 03 + 03 +
+
+

AI Integration

+
+
+ Stable Diffusion • LoRA • Datasets • Python +
+ +
+ + +
+
+ 04 + 04 +
+
+

Development

+
+
+ Python • React • Docker • Linux • Pipeline +
+ +
+
+
diff --git a/src/content/blog/gstar-raw-olympics.md b/src/content/blog/gstar-raw-olympics.md index baa5098..e2904ae 100644 --- a/src/content/blog/gstar-raw-olympics.md +++ b/src/content/blog/gstar-raw-olympics.md @@ -7,6 +7,14 @@ heroImage: '../../assets/blog-placeholder-1.jpg' In summer 2024, Biohazard VFX partnered with Stinkfilms and director Felix Brady to create a visually striking brand film for G-Star Raw's Olympics campaign. This project pushed our team of 60+ artists to deliver high-end CG environments while pioneering new AI/ML integration workflows. +
+ +

/// FINAL FILM

+
+ ## The Challenge The creative brief called for expansive cityscapes and environments that would feel both futuristic and grounded in reality. The timeline was aggressive, and the scope was ambitious—exactly the kind of project we thrive on. @@ -43,6 +51,37 @@ Managing 60+ artists across multiple time zones required robust communication an The final film delivered on time and exceeded client expectations. The combination of traditional VFX craft with cutting-edge AI tools allowed us to achieve a level of visual complexity that would have been prohibitively expensive using traditional methods alone. +## Shot Breakdowns + +A closer look at some of the key shots and the techniques used to bring them to life. + +
+
+ +

/// SHOT BREAKDOWN 01

+
+
+ +

/// SHOT BREAKDOWN 02

+
+
+ +## Making Of + +Go behind the scenes to see how the team brought this project together. + +
+ +

/// MAKING OF

+
+ --- *This project exemplifies the direction we're taking at Biohazard VFX: embracing new technology while never compromising on quality or artistic vision.* diff --git a/src/layouts/BaseLayout.astro b/src/layouts/BaseLayout.astro index b267d8e..638f494 100644 --- a/src/layouts/BaseLayout.astro +++ b/src/layouts/BaseLayout.astro @@ -9,9 +9,10 @@ import { SITE_TITLE, SITE_DESCRIPTION } from '../consts'; interface Props { title?: string; description?: string; + usePadding?: boolean; } -const { title = SITE_TITLE, description = SITE_DESCRIPTION } = Astro.props; +const { title = SITE_TITLE, description = SITE_DESCRIPTION, usePadding = true } = Astro.props; --- @@ -24,7 +25,7 @@ const { title = SITE_TITLE, description = SITE_DESCRIPTION } = Astro.props; -
+
diff --git a/src/pages/contact.astro b/src/pages/contact.astro index 3d97f4a..945a0ef 100644 --- a/src/pages/contact.astro +++ b/src/pages/contact.astro @@ -1,112 +1,287 @@ --- import BaseLayout from '../layouts/BaseLayout.astro'; -import { SITE_TITLE, SITE_DESCRIPTION } from '../consts'; +import { SITE_TITLE } from '../consts'; + +const pageTitle = `Contact | ${SITE_TITLE}`; --- - -
-
-

- Let's Talk -

-

/// GET IN TOUCH

-
+ -
- -
-
-
-
- - -
-
- - -
-
+ +
+
+ {Array.from({ length: 12 }).map((_) => ( +
+ ))} +
+
-
- - -
+
-
- - -
+ +
+
+

+ Project + Inquiry +

+
+
+

+ Available for freelance commissions and studio collaborations. + Currently booking Q3 2026. +

+
+
-
- -
- -
+
- -
-
-

Contact Info

- - nicholai@nicholai.work - -
+ +
+
+ + Transmission Uplink +
-
-

Location

-

- Colorado Springs, CO
- Mountain Standard Time (MST) -

-
+
+
+ + +
-
-

Availability

-
- - - - - Open to opportunities -
-

- Currently accepting new projects for Q3 2026. Reach out to schedule a discovery call. -

-
-
-
-
+
+ + +
+ + +
+ + + + + + + + +
+ +
+ + +
+ +
+ +
+ +
+ + +
+ + + + + +
+

Coordinates

+

+ Colorado Springs, CO
+ United States +

+
+ 38.8339° N, 104.8214° W +
+
+ + +
+

Social Feed

+ +
+ +
+
+ +
+ + + + diff --git a/src/pages/index.astro b/src/pages/index.astro index fe0427c..7100cf1 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -6,7 +6,7 @@ import FeaturedProject from '../components/sections/FeaturedProject.astro'; import Skills from '../components/sections/Skills.astro'; --- - +