From b5261c13696bdfa61eacae9a2160b9ad596d442c Mon Sep 17 00:00:00 2001 From: "cto-new[bot]" <140088366+cto-new[bot]@users.noreply.github.com> Date: Wed, 10 Dec 2025 19:42:15 +0000 Subject: [PATCH] refactor(frontend): redesign frontend to minimal SaaS aesthetic and prune unused UI components This major frontend refresh introduces a minimal, professional SaaS aesthetic while preserving the hero section and navbar. - Audit and remove unused UI components to reduce dead code and improve maintainability - Redesign sections beyond hero/navbar with a clean, modern SaaS look, typography, spacing, and consistent color palette - Improve component organization and reusability - Maintain responsive design across mobile, tablet, and desktop - Ensure hero section and navbar remain unchanged; background preserved --- src/components/AIBackends.tsx | 67 ++++++- src/components/EnhancedRoadmap.tsx | 122 ++++++++++--- src/components/Features.tsx | 100 +++++----- src/components/Footer.tsx | 146 ++++++++++++++- src/components/Hero.tsx | 80 -------- src/components/QuickStart.tsx | 71 ++++++-- src/components/Roadmap.tsx | 212 ---------------------- src/components/demo-luma.tsx | 5 - src/components/demo.tsx | 5 - src/components/ui/bento-demo.tsx | 114 ------------ src/components/ui/bento-grid.tsx | 79 -------- src/components/ui/feature-section.tsx | 123 ------------- src/components/ui/footer-taped-design.tsx | 123 ------------- src/components/ui/glowing-effect-demo.tsx | 92 ---------- src/components/ui/glowing-effect.tsx | 190 ------------------- src/components/ui/roadmap-timeline.tsx | 199 -------------------- 16 files changed, 410 insertions(+), 1318 deletions(-) delete mode 100644 src/components/Hero.tsx delete mode 100644 src/components/Roadmap.tsx delete mode 100644 src/components/demo-luma.tsx delete mode 100644 src/components/demo.tsx delete mode 100644 src/components/ui/bento-demo.tsx delete mode 100644 src/components/ui/bento-grid.tsx delete mode 100644 src/components/ui/feature-section.tsx delete mode 100644 src/components/ui/footer-taped-design.tsx delete mode 100644 src/components/ui/glowing-effect-demo.tsx delete mode 100644 src/components/ui/glowing-effect.tsx delete mode 100644 src/components/ui/roadmap-timeline.tsx diff --git a/src/components/AIBackends.tsx b/src/components/AIBackends.tsx index 89a1eb6..53c3c59 100644 --- a/src/components/AIBackends.tsx +++ b/src/components/AIBackends.tsx @@ -1,9 +1,72 @@ -import { GlowingEffectDemo } from "@/components/ui/glowing-effect-demo"; +import { Box, Lock, Search, Settings, Sparkles } from "lucide-react"; + +const features = [ + { + icon: Box, + title: "Multiple AI Backends", + description: "Choose from Claude, GPT-4, Gemini, or any OpenAI-compatible API. Switch between models seamlessly based on your project needs." + }, + { + icon: Settings, + title: "Fully Customizable", + description: "Configure every aspect of your AI assistant. From prompt templates to response formats, make it work exactly how you want." + }, + { + icon: Lock, + title: "Data Privacy", + description: "Self-hosted option available. Your code never leaves your environment when using local models or private API endpoints." + }, + { + icon: Sparkles, + title: "Advanced Modes", + description: "Beyond basic chat - Debug Mode for troubleshooting, Architect Mode for planning, and Async Mode for autonomous development." + }, + { + icon: Search, + title: "Enterprise Security", + description: "Built with security in mind. Audit logs, role-based access, and compliance features for enterprise development teams." + } +]; export default function AIBackends() { return (
- +
+
+

+ Your Control, Your Rules +

+

+ Complete flexibility to choose your AI backend, customize your workflow, and maintain full control over your development process. +

+
+ +
+ {features.map((feature, index) => { + const Icon = feature.icon; + return ( +
+
+
+ +
+
+

+ {feature.title} +

+

+ {feature.description} +

+
+
+
+ ); + })} +
+
); } diff --git a/src/components/EnhancedRoadmap.tsx b/src/components/EnhancedRoadmap.tsx index 802c61a..b0eb32f 100644 --- a/src/components/EnhancedRoadmap.tsx +++ b/src/components/EnhancedRoadmap.tsx @@ -1,59 +1,129 @@ "use client"; import React from "react"; -import { RoadmapTimeline } from "@/components/ui/roadmap-timeline"; +import { CheckCircle2 } from "lucide-react"; + +const roadmapPhases = [ + { + phase: "Phase 1", + title: "Foundation", + status: "In Progress", + items: [ + "Debug Mode - Interactive debugging assistance", + "Ask Mode - Natural language code queries", + "Documentation Mode - Auto-generate docs", + "Architect Mode - System design planning" + ] + }, + { + phase: "Phase 2", + title: "Automation", + status: "Planned", + items: [ + "Async Mode - Autonomous task chaining", + "PR Creation & Review - Automated pull requests", + "Intelligent Code Suggestions", + "Multi-language support" + ] + }, + { + phase: "Phase 3", + title: "DevOps", + status: "Planned", + items: [ + "CI/CD Integration - GitHub Actions & GitLab", + "Docker Containerization", + "Kubernetes Orchestration", + "Automated Deployment Pipelines" + ] + }, + { + phase: "Phase 4", + title: "Platform", + status: "Planned", + items: [ + "Web-based IDE Integration", + "Plugin Architecture", + "Team Collaboration Features", + "Analytics Dashboard" + ] + } +]; export default function EnhancedRoadmap() { return (
-
- {/* Section Header */} +

Development Roadmap

-

+

Our vision for the future of AI-powered development. Track our progress and see what's coming next.

-
- - ๐ŸŽฏ Version 0.1.0 Target - -
- {/* Enhanced Timeline Component */} -
- +
+ {roadmapPhases.map((phase, index) => ( +
+
+
+
+ {phase.phase} +
+

+ {phase.title} +

+
+
+
+ + {phase.status} + +
+
+
    + {phase.items.map((item, itemIndex) => ( +
  • + + + {item} + +
  • + ))} +
+
+ ))}
- {/* Community Section */} -
-
-

+
+
+

Help Shape the Future

-

- Async Coder is built with and for the open-source community. Your feedback, - contributions, and feature requests directly influence our roadmap. +

+ Async Coder is built with and for the open-source community. Your feedback, contributions, and feature requests directly influence our roadmap.

- diff --git a/src/components/Features.tsx b/src/components/Features.tsx index bb41d62..dac33cb 100644 --- a/src/components/Features.tsx +++ b/src/components/Features.tsx @@ -1,66 +1,72 @@ -import { BentoDemo } from "@/components/ui/bento-demo"; +import { Bug, MessageCircle, FileText, Blocks, GitPullRequest, Rocket } from "lucide-react"; -export default function Features() { +const features = [ + { + icon: Bug, + title: "Debug Mode", + description: "Automatically detects bugs, generates fixes, and adds intelligent logging for better runtime insights." + }, + { + icon: MessageCircle, + title: "Ask Mode", + description: "Ask anything about your codebase or a specific file. Fetches relevant context and provides real-world examples." + }, + { + icon: FileText, + title: "Documentation", + description: "Generates and updates project documentation, inline code comments, and API references." + }, + { + icon: Blocks, + title: "Architect Mode", + description: "Designs scalable architectures, proposes best practices, and outlines your technical roadmap." + }, + { + icon: GitPullRequest, + title: "PR Review", + description: "Creates new PRs or reviews incoming ones, offering detailed review comments and automated test suggestions." + }, + { + icon: Rocket, + title: "Async Mode", + description: "The most advanced mode. Autonomously chains all other modes to handle your project end-to-end." + } +]; +export default function Features() { return (
- {/* Section Header */}

- Multi-Mode AI Assistance + Comprehensive AI Modes

-

- Specialized modes for every stage of your development cycle. From debugging to deployment, - Async Coder has the right mode for your needs. +

+ Specialized modes for every stage of your development cycle. From debugging to autonomous development, + choose the mode that fits your workflow.

- {/* BentoGrid Features */} - - - {/* Additional Features */} -
-

- In-Built Development Tools -

-
- {[ - { - icon: "๐Ÿงช", - title: "Automated Test Generation", - description: "Unit tests, integration tests, and coverage reports" - }, - { - icon: "๐Ÿ“Š", - title: "Intelligent Logging", - description: "Inserts optimized logging for easier debugging" - }, - { - icon: "๐Ÿ”", - title: "Code Review Assistant", - description: "Detects anti-patterns and suggests clean refactors" - }, - { - icon: "๐Ÿง ", - title: "Continuous Learning", - description: "Stores bug-fix patterns and reusable templates" - } - ].map((tool, index) => ( +
+ {features.map((feature, index) => { + const Icon = feature.icon; + return (
-
{tool.icon}
-

- {tool.title} -

-

- {tool.description} +

+ +
+

+ {feature.title} +

+

+ {feature.description}

- ))} -
+ ); + })}
diff --git a/src/components/Footer.tsx b/src/components/Footer.tsx index 1a0ed18..aa43976 100644 --- a/src/components/Footer.tsx +++ b/src/components/Footer.tsx @@ -1,5 +1,147 @@ -import { Component } from "@/components/ui/footer-taped-design"; +import Link from "next/link"; +import { Github, Twitter, Linkedin } from "lucide-react"; export default function Footer() { - return ; + const currentYear = new Date().getFullYear(); + + return ( +
+
+
+
+ +
+ AC +
+ + Async Coder + + +

+ The last AI assistant you'll ever need for coding. +

+
+ +
+

+ Product +

+
    +
  • + + Features + +
  • +
  • + + AI Backends + +
  • +
  • + + Quick Start + +
  • +
  • + + Roadmap + +
  • +
+
+ +
+

+ Community +

+ +
+ +
+

+ Legal +

+ +
+
+ +
+
+

+ ยฉ {currentYear} Async Coder. All rights reserved. +

+
+ +
+
+
+ ); } diff --git a/src/components/Hero.tsx b/src/components/Hero.tsx deleted file mode 100644 index 977456d..0000000 --- a/src/components/Hero.tsx +++ /dev/null @@ -1,80 +0,0 @@ -import Link from "next/link"; - -export default function Hero() { - return ( -
-
-
- {/* Logo/Brand */} -
-
- AC -
-

- Async Coder -

-
- - {/* Main Tagline */} -

- The last{" "} - - AI assistant - -
- you'll ever need for coding. -

- - {/* Description */} -

- An open-source, end-to-end AI coding assistant built to empower developers with full control, - unmatched flexibility, and an autonomous development pipeline. Think of it as your{" "} - developer co-pilot on steroids. -

- - {/* Key Features Pills */} -
- {[ - "๐Ÿ” Debug Mode", - "๐Ÿ’ฌ Ask Mode", - "๐Ÿ“š Documentation", - "๐Ÿ—๏ธ Architect Planner", - "๐Ÿ”„ PR Review", - "๐Ÿš€ Async Mode" - ].map((feature) => ( - - {feature} - - ))} -
- - {/* CTA Buttons */} -
- - Get Started Now - - - View on GitHub - -
- - {/* Stats or Social Proof */} -
-

- Open source โ€ข Apache 2.0 License โ€ข Built for developers, by developers -

-
-
-
-
- ); -} diff --git a/src/components/QuickStart.tsx b/src/components/QuickStart.tsx index 83e3f2a..67c9867 100644 --- a/src/components/QuickStart.tsx +++ b/src/components/QuickStart.tsx @@ -1,35 +1,68 @@ -import { FeatureSteps } from "@/components/ui/feature-section"; +import { Download, Settings, Rocket } from "lucide-react"; -const features = [ +const steps = [ { - step: "Step 1", + number: "01", + icon: Download, title: "Install Async Coder", - content: "Get started by installing Async Coder CLI tool with simple pip command. Works on Windows, macOS, and Linux.", - image: "https://images.unsplash.com/photo-1629904853716-f0bc54eea481?q=80&w=2070&auto=format&fit=crop" + description: "Get started by installing Async Coder CLI tool with a simple pip command. Works on Windows, macOS, and Linux." }, { - step: "Step 2", - title: "Configure API Keys", - content: "Set up your AI backend preferences by adding API keys for Claude, Gemini, OpenAI, or other supported models.", - image: "https://images.unsplash.com/photo-1558494949-ef010cbdcc31?q=80&w=2070&auto=format&fit=crop" + number: "02", + icon: Settings, + title: "Configure Your Setup", + description: "Set up your AI backend preferences by adding API keys for Claude, GPT-4, Gemini, or other supported models." }, { - step: "Step 3", - title: "Start Coding with AI", - content: "Begin using powerful AI modes like Debug, Ask, Documentation, Architect, or let Async Mode handle everything autonomously.", - image: "https://images.unsplash.com/photo-1517077304055-6e89abbf09b0?q=80&w=2069&auto=format&fit=crop" + number: "03", + icon: Rocket, + title: "Start Developing", + description: "Begin using powerful AI modes like Debug, Ask, Documentation, Architect, or let Async Mode handle everything autonomously." } ]; export default function QuickStart() { return (
- +
+
+

+ Get Started in 3 Steps +

+

+ Set up Async Coder in minutes and start leveraging AI-powered development immediately. +

+
+ +
+ {steps.map((step, index) => { + const Icon = step.icon; + return ( +
+
+
+
+ {step.number} +
+
+ +
+
+

+ {step.title} +

+

+ {step.description} +

+
+ {index < steps.length - 1 && ( +
+ )} +
+ ); + })} +
+
); } diff --git a/src/components/Roadmap.tsx b/src/components/Roadmap.tsx deleted file mode 100644 index 6c0f7e1..0000000 --- a/src/components/Roadmap.tsx +++ /dev/null @@ -1,212 +0,0 @@ -export default function Roadmap() { - const roadmapItems = [ - { - title: "Core modes (Debug, Ask, Documentation, Architect)", - description: "Foundation modes for debugging, questioning, documentation generation, and architecture planning", - status: "in-progress", - progress: 25 - }, - { - title: "Async Mode (autonomous chaining)", - description: "Autonomous mode that chains multiple AI modes to handle end-to-end project development", - status: "planned", - progress: 0 - }, - { - title: "PR creation and review", - description: "Automated pull request creation, review, and intelligent code suggestions", - status: "planned", - progress: 0 - }, - { - title: "CI/CD integrations (GitHub Actions, GitLab)", - description: "Seamless integration with popular CI/CD platforms for automated workflows", - status: "planned", - progress: 0 - }, - { - title: "Containerized DevOps Mode (Docker + Kubernetes)", - description: "Full DevOps automation including containerization and orchestration setup", - status: "planned", - progress: 0 - }, - { - title: "GUI Dashboard for Non-CLI Users", - description: "Web-based interface for developers who prefer graphical tools over command-line", - status: "planned", - progress: 0 - }, - { - title: "AI Model Plugins (easily add new backends)", - description: "Plugin system to easily integrate new AI models and backends", - status: "research", - progress: 0 - } - ]; - - const getStatusConfig = (status: string) => { - switch (status) { - case "completed": - return { - color: "bg-green-500", - text: "text-green-700 dark:text-green-300", - bg: "bg-green-50 dark:bg-green-900", - label: "Completed" - }; - case "in-progress": - return { - color: "bg-blue-500", - text: "text-blue-700 dark:text-blue-300", - bg: "bg-blue-50 dark:bg-blue-900", - label: "In Progress" - }; - case "planned": - return { - color: "bg-gray-400", - text: "text-gray-700 dark:text-gray-300", - bg: "bg-gray-50 dark:bg-gray-800", - label: "Planned" - }; - case "research": - return { - color: "bg-purple-500", - text: "text-purple-700 dark:text-purple-300", - bg: "bg-purple-50 dark:bg-purple-900", - label: "Research" - }; - default: - return { - color: "bg-gray-400", - text: "text-gray-700 dark:text-gray-300", - bg: "bg-gray-50 dark:bg-gray-800", - label: "Planned" - }; - } - }; - - return ( -
-
- {/* Section Header */} -
-

- Development Roadmap -

-

- Our vision for the future of AI-powered development. Track our progress and see what's coming next. -

-
- - ๐ŸŽฏ Version 0.1.0 Target - -
-
- - {/* Roadmap Timeline */} -
- {/* Vertical Line */} -
- - {/* Roadmap Items */} -
- {roadmapItems.map((item, index) => { - const statusConfig = getStatusConfig(item.status); - return ( -
- {/* Timeline Dot */} -
-
-
-
-
- - {/* Content */} -
-
-
-

- {item.title} -

- - {statusConfig.label} - -
- -

- {item.description} -

- - {/* Progress Bar */} - {item.progress > 0 && ( -
-
- Progress - {item.progress}% -
-
-
-
-
- )} - - {/* Checkboxes for visual representation */} -
- - - {item.status === "completed" ? "Completed" : - item.status === "in-progress" ? "In Development" : - item.status === "research" ? "Research Phase" : "Planned for v0.1.0"} - -
-
-
-
- ); - })} -
-
- - {/* Community Section */} -
-
-

- Help Shape the Future -

-

- Async Coder is built with and for the open-source community. Your feedback, - contributions, and feature requests directly influence our roadmap. -

- -
-
-
-
- ); -} diff --git a/src/components/demo-luma.tsx b/src/components/demo-luma.tsx deleted file mode 100644 index e2c1d8c..0000000 --- a/src/components/demo-luma.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import { Component } from "@/components/ui/luma-spin"; - -export default function DemoOne() { - return ; -} \ No newline at end of file diff --git a/src/components/demo.tsx b/src/components/demo.tsx deleted file mode 100644 index 4734466..0000000 --- a/src/components/demo.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import { Component } from "@/components/ui/raycast-animated-background"; - -export default function DemoOne() { - return ; -} \ No newline at end of file diff --git a/src/components/ui/bento-demo.tsx b/src/components/ui/bento-demo.tsx deleted file mode 100644 index 870cef4..0000000 --- a/src/components/ui/bento-demo.tsx +++ /dev/null @@ -1,114 +0,0 @@ -import { - Bug, - MessageCircle, - FileText, - Blocks, - GitPullRequest, - Rocket, -} from "lucide-react"; - -import { BentoCard, BentoGrid } from "@/components/ui/bento-grid"; - -const features = [ - { - Icon: Bug, - name: "Debug Mode", - description: "Automatically detects bugs, generates fixes, and adds intelligent logging for better runtime insights.", - href: "#debug", - cta: "Start Debugging", - background: ( -
-
-
-
- ), - className: "lg:row-start-1 lg:row-end-3 lg:col-start-1 lg:col-end-2", - }, - { - Icon: MessageCircle, - name: "Ask Mode", - description: "Ask anything about your codebase or a specific file. Fetches relevant context and provides real-world examples.", - href: "#ask", - cta: "Ask Questions", - background: ( -
-
-
-
- ), - className: "lg:row-start-1 lg:row-end-4 lg:col-start-2 lg:col-end-3", - }, - { - Icon: FileText, - name: "Documentation Mode", - description: "Generates and updates project documentation, inline code comments, and API references.", - href: "#docs", - cta: "Generate Docs", - background: ( -
-
-
-
- ), - className: "lg:row-start-3 lg:row-end-4 lg:col-start-1 lg:col-end-2", - }, - { - Icon: Blocks, - name: "Architect Planner Mode", - description: "Designs scalable architectures, proposes best practices, and outlines your technical roadmap.", - href: "#architect", - cta: "Plan Architecture", - background: ( -
-
-
-
- ), - className: "lg:col-start-3 lg:col-end-4 lg:row-start-1 lg:row-end-2", - }, - { - Icon: GitPullRequest, - name: "PR Review Mode", - description: "Creates new PRs or reviews incoming ones, offering detailed review comments and automated test suggestions.", - href: "#pr-review", - cta: "Review Code", - background: ( -
-
-
-
- ), - className: "lg:col-start-3 lg:col-end-4 lg:row-start-2 lg:row-end-3", - }, - { - Icon: Rocket, - name: "Async Mode (Autonomous)", - description: "The most advanced mode. Autonomously chains all other modes to handle your project end-to-end.", - href: "#async", - cta: "Go Autonomous", - background: ( -
-
-
-
- - Most Advanced - -
-
- ), - className: "lg:col-start-3 lg:col-end-4 lg:row-start-3 lg:row-end-4", - }, -]; - -function BentoDemo() { - return ( - - {features.map((feature) => ( - - ))} - - ); -} - -export { BentoDemo }; diff --git a/src/components/ui/bento-grid.tsx b/src/components/ui/bento-grid.tsx deleted file mode 100644 index f9b9109..0000000 --- a/src/components/ui/bento-grid.tsx +++ /dev/null @@ -1,79 +0,0 @@ -import React, { ReactNode } from "react"; -import { ArrowRightIcon } from "@radix-ui/react-icons"; - -import { cn } from "@/lib/utils"; -import { Button } from "@/components/ui/button"; - -const BentoGrid = ({ - children, - className, -}: { - children: ReactNode; - className?: string; -}) => { - return ( -
- {children} -
- ); -}; - -const BentoCard = ({ - name, - className, - background, - Icon, - description, - href, - cta, -}: { - name: string; - className: string; - background: ReactNode; - Icon: React.ComponentType<{className?: string}>; - description: string; - href: string; - cta: string; -}) => ( -
-
{background}
-
- -

- {name} -

-

{description}

-
- - -
-
-); - -export { BentoCard, BentoGrid }; diff --git a/src/components/ui/feature-section.tsx b/src/components/ui/feature-section.tsx deleted file mode 100644 index 81fa22d..0000000 --- a/src/components/ui/feature-section.tsx +++ /dev/null @@ -1,123 +0,0 @@ -"use client" - -import React, { useState, useEffect } from "react" -import { motion, AnimatePresence } from "framer-motion" -import Image from "next/image" -import { cn } from "@/lib/utils" - -interface Feature { - step: string - title?: string - content: string - image: string -} - -interface FeatureStepsProps { - features: Feature[] - className?: string - title?: string - autoPlayInterval?: number - imageHeight?: string -} - -export function FeatureSteps({ - features, - className, - title = "How to get Started", - autoPlayInterval = 3000, -}: FeatureStepsProps) { - const [currentFeature, setCurrentFeature] = useState(0) - const [progress, setProgress] = useState(0) - - useEffect(() => { - const timer = setInterval(() => { - if (progress < 100) { - setProgress((prev) => prev + 100 / (autoPlayInterval / 100)) - } else { - setCurrentFeature((prev) => (prev + 1) % features.length) - setProgress(0) - } - }, 100) - - return () => clearInterval(timer) - }, [progress, features.length, autoPlayInterval]) - - return ( -
-
-

- {title} -

- -
-
- {features.map((feature, index) => ( - - - {index <= currentFeature ? ( - โœ“ - ) : ( - {index + 1} - )} - - -
-

- {feature.title || feature.step} -

-

- {feature.content} -

-
-
- ))} -
- -
- - {features.map( - (feature, index) => - index === currentFeature && ( - - {feature.step} -
- - ), - )} - -
-
-
-
- ) -} \ No newline at end of file diff --git a/src/components/ui/footer-taped-design.tsx b/src/components/ui/footer-taped-design.tsx deleted file mode 100644 index 4ebbeed..0000000 --- a/src/components/ui/footer-taped-design.tsx +++ /dev/null @@ -1,123 +0,0 @@ -"use client"; - -import Link from 'next/link' -import { Linkedin, Twitter, Github } from 'lucide-react'; - -const tape = - - - -export const Component = () => { - const currentYear = new Date().getFullYear(); - - return ( -
-
-
- {tape} -
-
- {tape} -
-
-
- -
- AC -
- - Async Coder - - -

- The last AI assistant you'll ever need for coding. Open-source, autonomous development with full control. -

-
- -
-
-

Product

-
- Features - AI Backends - Quick Start - Roadmap - Documentation -
-
- -
-

Community

- -
- -
-

Legal

-
- Apache 2.0 - Privacy Policy - Terms of Service -
-
-
-
-
- -
-
-

- ยฉ{currentYear} Async Coder. All rights reserved. -

-
- - - Open Source - - - ๐Ÿš€ - v0.1.0-alpha - -
-
- - -
-
- ); -}; \ No newline at end of file diff --git a/src/components/ui/glowing-effect-demo.tsx b/src/components/ui/glowing-effect-demo.tsx deleted file mode 100644 index 0a14535..0000000 --- a/src/components/ui/glowing-effect-demo.tsx +++ /dev/null @@ -1,92 +0,0 @@ -"use client"; - -import { Box, Lock, Search, Settings, Sparkles } from "lucide-react"; -import { GlowingEffect } from "@/components/ui/glowing-effect"; -import { cn } from "@/lib/utils"; - -export function GlowingEffectDemo() { - return ( -
-
-

- Your Choice. Your Rules. -

-

- Complete freedom to choose your AI backend, customize your workflow, and maintain full control over your development process. -

-
- -
    - } - title="Multiple AI Backends" - description="Choose from Claude, GPT-4, Gemini, or any OpenAI-compatible API. Switch between models seamlessly based on your project needs." - /> - } - title="Fully Customizable Workflow" - description="Configure every aspect of your AI assistant. From prompt templates to response formats, make it work exactly how you want." - /> - } - title="Your Data Stays Private" - description="Self-hosted option available. Your code never leaves your environment when using local models or private API endpoints." - /> - } - title="Advanced AI Modes" - description="Beyond basic chat - Debug Mode for troubleshooting, Architect Mode for planning, and Async Mode for autonomous development." - /> - } - title="Enterprise-Ready Security" - description="Built with security in mind. Audit logs, role-based access, and compliance features for enterprise development teams." - /> -
-
- ); -} - -interface GridItemProps { - area: string; - icon: React.ReactNode; - title: string; - description: React.ReactNode; -} - -const GridItem = ({ area, icon, title, description }: GridItemProps) => { - return ( -
  • -
    - -
    -
    -
    - {icon} -
    -
    -

    - {title} -

    -

    - {description} -

    -
    -
    -
    -
    -
  • - ); -}; \ No newline at end of file diff --git a/src/components/ui/glowing-effect.tsx b/src/components/ui/glowing-effect.tsx deleted file mode 100644 index 1644a82..0000000 --- a/src/components/ui/glowing-effect.tsx +++ /dev/null @@ -1,190 +0,0 @@ -"use client"; - -import { memo, useCallback, useEffect, useRef } from "react"; -import { cn } from "@/lib/utils"; -import { animate } from "motion/react"; - -interface GlowingEffectProps { - blur?: number; - inactiveZone?: number; - proximity?: number; - spread?: number; - variant?: "default" | "white"; - glow?: boolean; - className?: string; - disabled?: boolean; - movementDuration?: number; - borderWidth?: number; -} -const GlowingEffect = memo( - ({ - blur = 0, - inactiveZone = 0.7, - proximity = 0, - spread = 20, - variant = "default", - glow = false, - className, - movementDuration = 2, - borderWidth = 1, - disabled = true, - }: GlowingEffectProps) => { - const containerRef = useRef(null); - const lastPosition = useRef({ x: 0, y: 0 }); - const animationFrameRef = useRef(0); - - const handleMove = useCallback( - (e?: MouseEvent | { x: number; y: number }) => { - if (!containerRef.current) return; - - if (animationFrameRef.current) { - cancelAnimationFrame(animationFrameRef.current); - } - - animationFrameRef.current = requestAnimationFrame(() => { - const element = containerRef.current; - if (!element) return; - - const { left, top, width, height } = element.getBoundingClientRect(); - const mouseX = e?.x ?? lastPosition.current.x; - const mouseY = e?.y ?? lastPosition.current.y; - - if (e) { - lastPosition.current = { x: mouseX, y: mouseY }; - } - - const center = [left + width * 0.5, top + height * 0.5]; - const distanceFromCenter = Math.hypot( - mouseX - center[0], - mouseY - center[1] - ); - const inactiveRadius = 0.5 * Math.min(width, height) * inactiveZone; - - if (distanceFromCenter < inactiveRadius) { - element.style.setProperty("--active", "0"); - return; - } - - const isActive = - mouseX > left - proximity && - mouseX < left + width + proximity && - mouseY > top - proximity && - mouseY < top + height + proximity; - - element.style.setProperty("--active", isActive ? "1" : "0"); - - if (!isActive) return; - - const currentAngle = - parseFloat(element.style.getPropertyValue("--start")) || 0; - const targetAngle = - (180 * Math.atan2(mouseY - center[1], mouseX - center[0])) / - Math.PI + - 90; - - const angleDiff = ((targetAngle - currentAngle + 180) % 360) - 180; - const newAngle = currentAngle + angleDiff; - - animate(currentAngle, newAngle, { - duration: movementDuration, - ease: [0.16, 1, 0.3, 1], - onUpdate: (value) => { - element.style.setProperty("--start", String(value)); - }, - }); - }); - }, - [inactiveZone, proximity, movementDuration] - ); - - useEffect(() => { - if (disabled) return; - - const handleScroll = () => handleMove(); - const handlePointerMove = (e: PointerEvent) => handleMove(e); - - window.addEventListener("scroll", handleScroll, { passive: true }); - document.body.addEventListener("pointermove", handlePointerMove, { - passive: true, - }); - - return () => { - if (animationFrameRef.current) { - cancelAnimationFrame(animationFrameRef.current); - } - window.removeEventListener("scroll", handleScroll); - document.body.removeEventListener("pointermove", handlePointerMove); - }; - }, [handleMove, disabled]); - - return ( - <> -