Merge pull request #2 from yusuf-intern/main

Clean up UI components, remove unnecessary libs, improve navigation &…
This commit is contained in:
Huzefa Mohammed Hussain
2025-12-10 20:33:05 +04:00
committed by GitHub
14 changed files with 60 additions and 38 deletions

View File

@@ -1,4 +1,5 @@
import { Toaster } from "@/components/ui/toaster"; import { Toaster } from "@/components/ui/toaster";
import ScrollToTop from './components/ScrollToTop';
import { Toaster as Sonner } from "@/components/ui/sonner"; import { Toaster as Sonner } from "@/components/ui/sonner";
import { TooltipProvider } from "@/components/ui/tooltip"; import { TooltipProvider } from "@/components/ui/tooltip";
import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
@@ -23,6 +24,7 @@ const App = () => (
<Toaster /> <Toaster />
<Sonner /> <Sonner />
<BrowserRouter> <BrowserRouter>
<ScrollToTop /> {/* component added to scroll to top of page */}
<Routes> <Routes>
<Route path="/" element={<Index />} /> <Route path="/" element={<Index />} />
<Route path="/about" element={<About />} /> <Route path="/about" element={<About />} />

View File

@@ -121,12 +121,12 @@ const Footer = () => {
info@openxpert.com info@openxpert.com
</span> </span>
</li> </li>
<li className="flex items-start gap-2"> {/* <li className="flex items-start gap-2">
<Phone className="w-4 h-4 text-primary mt-0.5" /> <Phone className="w-4 h-4 text-primary mt-0.5" />
<span className="text-sm text-muted-foreground"> <span className="text-sm text-muted-foreground">
+971 XXX XXXX +971 XXX XXXX
</span> </span>
</li> </li> */}
<li className="flex items-start gap-2"> <li className="flex items-start gap-2">
<MapPin className="w-4 h-4 text-primary mt-0.5" /> <MapPin className="w-4 h-4 text-primary mt-0.5" />
<span className="text-sm text-muted-foreground"> <span className="text-sm text-muted-foreground">

View File

@@ -67,7 +67,7 @@ const Navigation = () => {
</button> </button>
{isServicesOpen && ( {isServicesOpen && (
<div className="absolute top-full left-0 mt-2 w-64 glass-strong rounded-2xl overflow-hidden shadow-lg animate-slide-in-up"> <div className="absolute top-full left-0 mt-0 w-64 glass-strong rounded-2xl overflow-hidden shadow-lg animate-slide-in-up"> {/*changed mt-2 to mt-0 to remove gap triggering leave*/}
{services.map((service) => ( {services.map((service) => (
<Link <Link
key={service.path} key={service.path}

View File

@@ -46,10 +46,14 @@ export const ParticleField = () => {
const drawParticles = () => { const drawParticles = () => {
ctx.clearRect(0, 0, canvas.width, canvas.height); ctx.clearRect(0, 0, canvas.width, canvas.height);
const particleColor = getComputedStyle(document.documentElement) //added particle colour
.getPropertyValue('--particle')
.trim();
particles.forEach((particle) => { particles.forEach((particle) => {
ctx.beginPath(); ctx.beginPath();
ctx.arc(particle.x, particle.y, particle.size, 0, Math.PI * 2); ctx.arc(particle.x, particle.y, particle.size, 0, Math.PI * 2);
ctx.fillStyle = `hsla(205, 100%, 88%, ${particle.opacity})`; ctx.fillStyle = `hsl(${particleColor} / ${particle.opacity})`;
ctx.fill(); ctx.fill();
// Update position // Update position

View File

@@ -0,0 +1,12 @@
import { useEffect } from 'react';
import { useLocation } from 'react-router-dom';
//component added to scroll to top of page
export default function ScrollToTop() {
const { pathname } = useLocation();
useEffect(() => {
window.scrollTo(0, 0);
}, [pathname]);
return null;
}

View File

@@ -9,7 +9,7 @@ const buttonVariants = cva(
{ {
variants: { variants: {
variant: { variant: {
default: "bg-primary text-primary-foreground hover:bg-primary/90", default: "bg-primary text-foreground hover:bg-primary/90", //changed text-primary-foreground to text-foreground
destructive: "bg-destructive text-destructive-foreground hover:bg-destructive/90", destructive: "bg-destructive text-destructive-foreground hover:bg-destructive/90",
outline: "border border-input bg-background hover:bg-accent hover:text-accent-foreground", outline: "border border-input bg-background hover:bg-accent hover:text-accent-foreground",
secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80", secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80",

View File

@@ -64,6 +64,8 @@ All colors MUST be HSL.
--sidebar-accent-foreground: 240 5.9% 10%; --sidebar-accent-foreground: 240 5.9% 10%;
--sidebar-border: 220 13% 91%; --sidebar-border: 220 13% 91%;
--sidebar-ring: 217.2 91.2% 59.8%; --sidebar-ring: 217.2 91.2% 59.8%;
--particle: 210 100% 18%;
} }
.dark { .dark {
@@ -114,6 +116,8 @@ All colors MUST be HSL.
--sidebar-accent-foreground: 240 4.8% 95.9%; --sidebar-accent-foreground: 240 4.8% 95.9%;
--sidebar-border: 240 3.7% 15.9%; --sidebar-border: 240 3.7% 15.9%;
--sidebar-ring: 217.2 91.2% 59.8%; --sidebar-ring: 217.2 91.2% 59.8%;
--particle: 210 100% 88%; /* added particle colour */
} }
} }

View File

@@ -52,12 +52,12 @@ const Contact = () => {
<Input type="email" placeholder="john@example.com" className="glass-card" /> <Input type="email" placeholder="john@example.com" className="glass-card" />
</div> </div>
<div> {/* <div>
<label className="text-sm font-medium text-foreground mb-2 block"> <label className="text-sm font-medium text-foreground mb-2 block">
Phone Phone
</label> </label>
<Input type="tel" placeholder="+971 XXX XXXX" className="glass-card" /> <Input type="tel" placeholder="+971 XXX XXXX" className="glass-card" />
</div> </div> */}
<div> <div>
<label className="text-sm font-medium text-foreground mb-2 block"> <label className="text-sm font-medium text-foreground mb-2 block">
@@ -92,7 +92,7 @@ const Contact = () => {
</div> </div>
</div> </div>
<div className="flex items-start gap-4"> {/* <div className="flex items-start gap-4">
<div className="w-12 h-12 rounded-2xl bg-gradient-to-br from-primary/10 to-accent/20 flex items-center justify-center flex-shrink-0"> <div className="w-12 h-12 rounded-2xl bg-gradient-to-br from-primary/10 to-accent/20 flex items-center justify-center flex-shrink-0">
<Phone className="w-5 h-5 text-primary" /> <Phone className="w-5 h-5 text-primary" />
</div> </div>
@@ -101,7 +101,7 @@ const Contact = () => {
<p className="text-muted-foreground">+971 XXX XXXX</p> <p className="text-muted-foreground">+971 XXX XXXX</p>
<p className="text-muted-foreground">+971 XXX XXXX</p> <p className="text-muted-foreground">+971 XXX XXXX</p>
</div> </div>
</div> </div> */}
<div className="flex items-start gap-4"> <div className="flex items-start gap-4">
<div className="w-12 h-12 rounded-2xl bg-gradient-to-br from-primary/10 to-accent/20 flex items-center justify-center flex-shrink-0"> <div className="w-12 h-12 rounded-2xl bg-gradient-to-br from-primary/10 to-accent/20 flex items-center justify-center flex-shrink-0">

View File

@@ -62,13 +62,13 @@ const Index = () => {
{/* Hero Section */} {/* Hero Section */}
<header className="text-center mb-32 animate-slide-in-up relative"> <header className="text-center mb-32 animate-slide-in-up relative">
{/* Floating sparkle effects */} {/* Floating sparkle effects */}
<Sparkles className="absolute top-0 left-1/4 w-8 h-8 text-primary/30 animate-glow-pulse" style={{ <Sparkles className="absolute top-0 left-1/4 w-8 h-8 text-primary/30 " style={{
animationDelay: "0s" animationDelay: "0s"
}} /> }} />
<Sparkles className="absolute top-10 right-1/3 w-6 h-6 text-accent/40 animate-glow-pulse" style={{ <Sparkles className="absolute top-10 right-1/3 w-6 h-6 text-accent/40 " style={{
animationDelay: "1s" animationDelay: "1s"
}} /> }} />
<Sparkles className="absolute bottom-10 left-1/3 w-7 h-7 text-primary/20 animate-glow-pulse" style={{ <Sparkles className="absolute bottom-10 left-1/3 w-7 h-7 text-primary/20 " style={{
animationDelay: "2s" animationDelay: "2s"
}} /> }} />
@@ -78,7 +78,7 @@ const Index = () => {
<h1 className="text-6xl md:text-7xl lg:text-8xl font-bold text-foreground mb-8 tracking-tight leading-none"> <h1 className="text-6xl md:text-7xl lg:text-8xl font-bold text-foreground mb-8 tracking-tight leading-none">
Precision. Innovation. Precision. Innovation.
<span className="block mt-3 bg-gradient-to-r from-primary via-primary/80 to-accent bg-clip-text text-transparent animate-glow-pulse"> <span className="block mt-3 bg-gradient-to-r from-primary via-primary/80 to-accent bg-clip-text text-transparent "> {/*removed css animate-glow-pulse*/}
Open Solutions. Open Solutions.
</span> </span>
</h1> </h1>

View File

@@ -79,9 +79,9 @@ const Portfolio = () => {
<div className="absolute inset-0 bg-gradient-to-t from-background/80 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300" /> <div className="absolute inset-0 bg-gradient-to-t from-background/80 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300" />
{/* Hover Icon */} {/* Hover Icon */}
<div className="absolute top-4 right-4 w-10 h-10 rounded-full glass-strong flex items-center justify-center opacity-0 group-hover:opacity-100 transition-opacity duration-300"> {/* <div className="absolute top-4 right-4 w-10 h-10 rounded-full glass-strong flex items-center justify-center opacity-0 group-hover:opacity-100 transition-opacity duration-300">
<ExternalLink className="w-5 h-5 text-primary" /> <ExternalLink className="w-5 h-5 text-primary" />
</div> </div> */}
</div> </div>
{/* Content */} {/* Content */}

View File

@@ -168,7 +168,7 @@ const AmcSupport = () => {
</div> </div>
{/* Animated Support Visual */} {/* Animated Support Visual */}
<div className="glass-strong rounded-3xl p-8 max-w-5xl mx-auto mb-20 animate-slide-in-up" style={{ animationDelay: "200ms" }}> {/* <div className="glass-strong rounded-3xl p-8 max-w-5xl mx-auto mb-20 animate-slide-in-up" style={{ animationDelay: "200ms" }}>
<div className="aspect-video glass-card rounded-2xl flex items-center justify-center relative overflow-hidden"> <div className="aspect-video glass-card rounded-2xl flex items-center justify-center relative overflow-hidden">
<div className="relative"> <div className="relative">
<HeadphonesIcon className="w-24 h-24 text-primary/30 animate-glow-pulse" /> <HeadphonesIcon className="w-24 h-24 text-primary/30 animate-glow-pulse" />
@@ -192,7 +192,7 @@ const AmcSupport = () => {
</div> </div>
))} ))}
</div> </div>
</div> </div> */}
</section> </section>
{/* Features Grid */} {/* Features Grid */}
@@ -290,7 +290,7 @@ const AmcSupport = () => {
</section> </section>
{/* Pricing Tiers */} {/* Pricing Tiers */}
<section className="container mx-auto px-6 py-20"> {/* <section className="container mx-auto px-6 py-20">
<h2 className="text-4xl font-bold text-center text-foreground mb-4"> <h2 className="text-4xl font-bold text-center text-foreground mb-4">
Choose Your Support Plan Choose Your Support Plan
</h2> </h2>
@@ -338,10 +338,10 @@ const AmcSupport = () => {
</Card> </Card>
))} ))}
</div> </div>
</section> </section> */}
{/* Testimonials */} {/* Testimonials */}
<section className="container mx-auto px-6 py-20"> {/* <section className="container mx-auto px-6 py-20">
<h2 className="text-4xl font-bold text-center text-foreground mb-16"> <h2 className="text-4xl font-bold text-center text-foreground mb-16">
What Our Clients Say What Our Clients Say
</h2> </h2>
@@ -365,7 +365,7 @@ const AmcSupport = () => {
</Card> </Card>
))} ))}
</div> </div>
</section> </section> */}
{/* CTA Section */} {/* CTA Section */}
<section className="container mx-auto px-6 py-20"> <section className="container mx-auto px-6 py-20">

View File

@@ -125,7 +125,7 @@ const ECommerce = () => {
</div> </div>
{/* Animated Store Preview */} {/* Animated Store Preview */}
<div className="glass-strong rounded-3xl p-8 max-w-5xl mx-auto mb-20 animate-slide-in-up" style={{ animationDelay: "200ms" }}> {/*<div className="glass-strong rounded-3xl p-8 max-w-5xl mx-auto mb-20 animate-slide-in-up" style={{ animationDelay: "200ms" }}>
<div className="aspect-video glass-card rounded-2xl flex items-center justify-center relative overflow-hidden"> <div className="aspect-video glass-card rounded-2xl flex items-center justify-center relative overflow-hidden">
<ShoppingCart className="w-24 h-24 text-primary/30 animate-glow-pulse" /> <ShoppingCart className="w-24 h-24 text-primary/30 animate-glow-pulse" />
<div className="absolute top-4 right-4"> <div className="absolute top-4 right-4">
@@ -147,7 +147,7 @@ const ECommerce = () => {
</div> </div>
))} ))}
</div> </div>
</div> </div>*/}
</section> </section>
{/* Features Grid */} {/* Features Grid */}
@@ -180,7 +180,7 @@ const ECommerce = () => {
</section> </section>
{/* Theme Playground */} {/* Theme Playground */}
<section className="container mx-auto px-6 py-20"> {/* <section className="container mx-auto px-6 py-20">
<div className="glass-strong rounded-3xl p-8 md:p-12 max-w-5xl mx-auto"> <div className="glass-strong rounded-3xl p-8 md:p-12 max-w-5xl mx-auto">
<h2 className="text-3xl md:text-4xl font-bold text-foreground mb-4 text-center"> <h2 className="text-3xl md:text-4xl font-bold text-foreground mb-4 text-center">
Live Theme Customizer Live Theme Customizer
@@ -213,7 +213,7 @@ const ECommerce = () => {
</div> </div>
</div> </div>
</div> </div>
</section> </section> */}
{/* Conversion Features */} {/* Conversion Features */}
<section className="container mx-auto px-6 py-20"> <section className="container mx-auto px-6 py-20">
@@ -242,7 +242,7 @@ const ECommerce = () => {
</section> </section>
{/* Pricing Packages */} {/* Pricing Packages */}
<section className="container mx-auto px-6 py-20"> {/* <section className="container mx-auto px-6 py-20">
<h2 className="text-4xl font-bold text-center text-foreground mb-4"> <h2 className="text-4xl font-bold text-center text-foreground mb-4">
Choose Your Package Choose Your Package
</h2> </h2>
@@ -279,7 +279,7 @@ const ECommerce = () => {
</Card> </Card>
))} ))}
</div> </div>
</section> </section> */}
{/* CTA Section */} {/* CTA Section */}
<section className="container mx-auto px-6 py-20"> <section className="container mx-auto px-6 py-20">

View File

@@ -104,7 +104,7 @@ const ErpSystems = () => {
</div> </div>
{/* Animated Dashboard Preview */} {/* Animated Dashboard Preview */}
<div className="glass-strong rounded-3xl p-8 max-w-5xl mx-auto mb-20 animate-slide-in-up" style={{ animationDelay: "200ms" }}> {/*<div className="glass-strong rounded-3xl p-8 max-w-5xl mx-auto mb-20 animate-slide-in-up" style={{ animationDelay: "200ms" }}>
<div className="grid grid-cols-2 md:grid-cols-4 gap-4 mb-6"> <div className="grid grid-cols-2 md:grid-cols-4 gap-4 mb-6">
{[ {[
{ label: "Revenue", value: "$2.4M", trend: "+12%" }, { label: "Revenue", value: "$2.4M", trend: "+12%" },
@@ -122,7 +122,7 @@ const ErpSystems = () => {
<div className="h-48 glass-card rounded-2xl flex items-center justify-center"> <div className="h-48 glass-card rounded-2xl flex items-center justify-center">
<BarChart3 className="w-16 h-16 text-primary/30 animate-glow-pulse" /> <BarChart3 className="w-16 h-16 text-primary/30 animate-glow-pulse" />
</div> </div>
</div> </div>*/}
</section> </section>
{/* Modules Section */} {/* Modules Section */}
@@ -155,7 +155,7 @@ const ErpSystems = () => {
</section> </section>
{/* ROI Calculator */} {/* ROI Calculator */}
<section className="container mx-auto px-6 py-20"> {/* <section className="container mx-auto px-6 py-20">
<div className="glass-strong rounded-3xl p-8 md:p-12 max-w-5xl mx-auto"> <div className="glass-strong rounded-3xl p-8 md:p-12 max-w-5xl mx-auto">
<h2 className="text-3xl md:text-4xl font-bold text-foreground mb-4 text-center"> <h2 className="text-3xl md:text-4xl font-bold text-foreground mb-4 text-center">
Calculate Your ROI Calculate Your ROI
@@ -218,7 +218,7 @@ const ErpSystems = () => {
</Button> </Button>
</div> </div>
</div> </div>
</section> </section>*/}
{/* Features Comparison */} {/* Features Comparison */}
<section className="container mx-auto px-6 py-20"> <section className="container mx-auto px-6 py-20">

View File

@@ -126,7 +126,7 @@ const RmmServices = () => {
<Navigation /> <Navigation />
{/* Hero Section */} {/* Hero Section */}
<section className="relative container mx-auto px-6 pt-32 pb-20"> {/* <section className="relative container mx-auto px-6 pt-32 pb-20">
<div className="text-center mb-16 animate-slide-in-up"> <div className="text-center mb-16 animate-slide-in-up">
<h1 className="text-5xl md:text-6xl font-bold text-foreground mb-6"> <h1 className="text-5xl md:text-6xl font-bold text-foreground mb-6">
RMM Services RMM Services
@@ -139,7 +139,7 @@ const RmmServices = () => {
</p> </p>
</div> </div>
{/* Animated Network Map */}
<div className="glass-strong rounded-3xl p-8 max-w-5xl mx-auto mb-20 animate-slide-in-up" style={{ animationDelay: "200ms" }}> <div className="glass-strong rounded-3xl p-8 max-w-5xl mx-auto mb-20 animate-slide-in-up" style={{ animationDelay: "200ms" }}>
<div className="aspect-video glass-card rounded-2xl flex items-center justify-center relative overflow-hidden"> <div className="aspect-video glass-card rounded-2xl flex items-center justify-center relative overflow-hidden">
<div className="relative"> <div className="relative">
@@ -168,7 +168,7 @@ const RmmServices = () => {
))} ))}
</div> </div>
</div> </div>
</section> </section> */}
{/* Features Grid */} {/* Features Grid */}
<section className="container mx-auto px-6 py-20"> <section className="container mx-auto px-6 py-20">
@@ -200,7 +200,7 @@ const RmmServices = () => {
</section> </section>
{/* Live Status Simulation */} {/* Live Status Simulation */}
<section className="container mx-auto px-6 py-20"> {/* <section className="container mx-auto px-6 py-20">
<div className="glass-strong rounded-3xl p-8 md:p-12 max-w-5xl mx-auto"> <div className="glass-strong rounded-3xl p-8 md:p-12 max-w-5xl mx-auto">
<h2 className="text-3xl md:text-4xl font-bold text-foreground mb-4 text-center"> <h2 className="text-3xl md:text-4xl font-bold text-foreground mb-4 text-center">
Live Dashboard Preview Live Dashboard Preview
@@ -245,7 +245,7 @@ const RmmServices = () => {
</div> </div>
)} )}
</div> </div>
</section> </section> */}
{/* Benefits Stats */} {/* Benefits Stats */}
<section className="container mx-auto px-6 py-20"> <section className="container mx-auto px-6 py-20">
@@ -270,7 +270,7 @@ const RmmServices = () => {
</section> </section>
{/* Pricing Tiers */} {/* Pricing Tiers */}
<section className="container mx-auto px-6 py-20"> {/* <section className="container mx-auto px-6 py-20">
<h2 className="text-4xl font-bold text-center text-foreground mb-4"> <h2 className="text-4xl font-bold text-center text-foreground mb-4">
Choose Your Monitoring Plan Choose Your Monitoring Plan
</h2> </h2>
@@ -308,7 +308,7 @@ const RmmServices = () => {
</Card> </Card>
))} ))}
</div> </div>
</section> </section> */}
{/* CTA Section */} {/* CTA Section */}
<section className="container mx-auto px-6 py-20"> <section className="container mx-auto px-6 py-20">