minor bugs and fixes

This commit is contained in:
2025-12-30 16:23:47 +00:00
parent 1f121b3993
commit e449dd0ddd
9 changed files with 177 additions and 232 deletions

View File

@@ -12,13 +12,13 @@
<meta property="og:title" content="OpenXpert Solutions (OXS) - Leading IT Solutions Provider UAE" /> <meta property="og:title" content="OpenXpert Solutions (OXS) - Leading IT Solutions Provider UAE" />
<meta property="og:description" content="Transforming businesses through innovative technology. Expert ERP systems, custom e-commerce, RMM services, AMC support, and premium web development across Dubai & UAE." /> <meta property="og:description" content="Transforming businesses through innovative technology. Expert ERP systems, custom e-commerce, RMM services, AMC support, and premium web development across Dubai & UAE." />
<meta property="og:type" content="website" /> <meta property="og:type" content="website" />
<meta property="og:image" content="https://lovable.dev/opengraph-image-p98pqg.png" />
<meta name="twitter:card" content="summary_large_image" /> <meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:site" content="@OpenXpertSolutions" /> <meta name="twitter:site" content="@OpenXpertSolutions" />
<meta name="twitter:title" content="OpenXpert Solutions (OXS) - Enterprise IT Solutions UAE" /> <meta name="twitter:title" content="OpenXpert Solutions (OXS) - Enterprise IT Solutions UAE" />
<meta name="twitter:description" content="Leading provider of enterprise digital solutions, ERP systems, and custom web development in Dubai & UAE." /> <meta name="twitter:description" content="Leading provider of enterprise digital solutions, ERP systems, and custom web development in Dubai & UAE." />
<meta name="twitter:image" content="https://lovable.dev/opengraph-image-p98pqg.png" />
<!-- Organization Schema --> <!-- Organization Schema -->
<script type="application/ld+json"> <script type="application/ld+json">

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

View File

@@ -19,26 +19,7 @@ const Footer = () => {
<p className="text-sm text-muted-foreground leading-relaxed mb-6"> <p className="text-sm text-muted-foreground leading-relaxed mb-6">
Empowering businesses with secure, future-ready technology solutions. Empowering businesses with secure, future-ready technology solutions.
</p> </p>
<div className="flex gap-3">
<a
href="#"
className="w-10 h-10 rounded-full glass-card flex items-center justify-center hover:glow-effect transition-all"
>
<Linkedin className="w-4 h-4 text-primary" />
</a>
<a
href="#"
className="w-10 h-10 rounded-full glass-card flex items-center justify-center hover:glow-effect transition-all"
>
<Twitter className="w-4 h-4 text-primary" />
</a>
<a
href="#"
className="w-10 h-10 rounded-full glass-card flex items-center justify-center hover:glow-effect transition-all"
>
<Github className="w-4 h-4 text-primary" />
</a>
</div>
</div> </div>
{/* Services Column */} {/* Services Column */}
@@ -61,14 +42,6 @@ const Footer = () => {
E-Commerce Solutions E-Commerce Solutions
</Link> </Link>
</li> </li>
<li>
<Link
to="/services/rmm"
className="text-sm text-muted-foreground hover:text-primary transition-colors"
>
RMM Services
</Link>
</li>
<li> <li>
<Link <Link
to="/services/amc" to="/services/amc"

View File

@@ -13,10 +13,9 @@ const Navigation = () => {
const services = [ const services = [
{ name: "ERP Systems", path: "/services/erp" }, { name: "ERP Systems", path: "/services/erp" },
{ name: "Custom E-Commerce", path: "/services/ecommerce" }, { name: "Custom E-Commerce", path: "/services/ecommerce" },
{ name: "Cybersecuirty Services", path: "/services/cybersecurity" },
{ name: "AMC Support", path: "/services/amc" }, { name: "AMC Support", path: "/services/amc" },
{ name: "Community Projects", path: "/services/community" },
{ name: "Web Development", path: "/services/web" },
]; ];
const isActive = (path: string) => location.pathname === path; const isActive = (path: string) => location.pathname === path;
@@ -98,9 +97,14 @@ const Navigation = () => {
{/* Right Side Actions */} {/* Right Side Actions */}
<div className="flex items-center gap-4"> <div className="flex items-center gap-4">
<ThemeToggle /> <ThemeToggle />
<Button className="hidden lg:inline-flex glass-card hover:glow-effect"> <a
href="mailto:info@openxperts.me?subject=Consultation%20Request&body=Hi%20OpenXperts%20Team,%0D%0A%0D%0AI%20would%20like%20to%20book%20a%20consultation%20to%20discuss%20my%20business%20needs.%0D%0A%0D%0AName:%20%0D%0ACompany:%20%0D%0APhone:%20%0D%0AArea%20of%20Interest:%20%0D%0A%0D%0AThank%20you!"
className="hidden lg:inline-flex"
>
<Button className="glass-card hover:glow-effect">
Book a Consultation Book a Consultation
</Button> </Button>
</a>
{/* Mobile Menu Toggle */} {/* Mobile Menu Toggle */}
<button <button
@@ -113,7 +117,7 @@ const Navigation = () => {
</div> </div>
{/* Mobile Menu */} {/* Mobile Menu */}
{isMenuOpen && ( {isMenuOpen && (
<div className="lg:hidden mt-6 glass-card rounded-2xl p-6 animate-slide-in-up"> <div className="lg:hidden mt-6 glass-card rounded-2xl p-6 animate-slide-in-up">
<div className="flex flex-col gap-4"> <div className="flex flex-col gap-4">
<Link <Link
@@ -169,12 +173,17 @@ const Navigation = () => {
> >
Contact Contact
</Link> </Link>
<a
href="mailto:info@openxperts.me?subject=Consultation%20Request&body=Hi%20OpenXperts%20Team,%0D%0A%0D%0AI%20would%20like%20to%20book%20a%20consultation%20to%20discuss%20my%20business%20needs.%0D%0A%0D%0AName:%20%0D%0ACompany:%20%0D%0APhone:%20%0D%0AArea%20of%20Interest:%20%0D%0A%0D%0AThank%20you!"
className="inline-block"
>
<Button className="glass-card hover:glow-effect w-full mt-4"> <Button className="glass-card hover:glow-effect w-full mt-4">
Book a Consultation Book a Consultation
</Button> </Button>
</a>
</div> </div>
</div> </div>)}
)}
</div> </div>
</nav> </nav>
); );

View File

@@ -3,9 +3,25 @@ import Footer from "@/components/Footer";
import { Button } from "@/components/ui/button"; import { Button } from "@/components/ui/button";
import { Input } from "@/components/ui/input"; import { Input } from "@/components/ui/input";
import { Textarea } from "@/components/ui/textarea"; import { Textarea } from "@/components/ui/textarea";
import { Mail, Phone, MapPin, Send } from "lucide-react"; import { Mail, MapPin, Send } from "lucide-react";
const Contact = () => { const Contact = () => {
const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {
e.preventDefault();
const formData = new FormData(e.currentTarget);
const firstName = formData.get('firstName') as string;
const lastName = formData.get('lastName') as string;
const email = formData.get('email') as string;
const message = formData.get('message') as string;
const body = encodeURIComponent(
`Name: ${firstName} ${lastName}\nEmail: ${email}\n\nMessage:\n${message}`
);
window.location.href = `mailto:info@openxperts.me?subject=Contact Form Message&body=${body}`;
};
return ( return (
<div className="min-h-screen gradient-bg"> <div className="min-h-screen gradient-bg">
<Navigation /> <Navigation />
@@ -29,19 +45,19 @@ const Contact = () => {
{/* Contact Form */} {/* Contact Form */}
<div className="glass-card rounded-3xl p-8 animate-slide-in-up"> <div className="glass-card rounded-3xl p-8 animate-slide-in-up">
<h2 className="text-2xl font-semibold text-foreground mb-6">Send Us a Message</h2> <h2 className="text-2xl font-semibold text-foreground mb-6">Send Us a Message</h2>
<form className="space-y-6"> <form className="space-y-6" onSubmit={handleSubmit}>
<div className="grid md:grid-cols-2 gap-4"> <div className="grid md:grid-cols-2 gap-4">
<div> <div>
<label className="text-sm font-medium text-foreground mb-2 block"> <label className="text-sm font-medium text-foreground mb-2 block">
First Name First Name
</label> </label>
<Input placeholder="John" className="glass-card" /> <Input name="firstName" placeholder="John" className="glass-card" required />
</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">
Last Name Last Name
</label> </label>
<Input placeholder="Doe" className="glass-card" /> <Input name="lastName" placeholder="Doe" className="glass-card" required />
</div> </div>
</div> </div>
@@ -49,29 +65,24 @@ const Contact = () => {
<label className="text-sm font-medium text-foreground mb-2 block"> <label className="text-sm font-medium text-foreground mb-2 block">
Email Email
</label> </label>
<Input type="email" placeholder="john@example.com" className="glass-card" /> <Input name="email" type="email" placeholder="john@example.com" className="glass-card" required />
</div> </div>
{/* <div>
<label className="text-sm font-medium text-foreground mb-2 block">
Phone
</label>
<Input type="tel" placeholder="+971 XXX XXXX" className="glass-card" />
</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">
Message Message
</label> </label>
<Textarea <Textarea
name="message"
placeholder="Tell us about your project..." placeholder="Tell us about your project..."
className="glass-card min-h-32" className="glass-card min-h-32"
required
/> />
</div> </div>
<Button className="w-full glass-card hover:glow-effect"> <Button type="submit" className="w-full glass-card hover:glow-effect">
<Send className="w-4 h-4 mr-2" /> <Send className="w-4 h-4 mr-2" />
Send Message Send Mail
</Button> </Button>
</form> </form>
</div> </div>
@@ -87,22 +98,10 @@ const Contact = () => {
</div> </div>
<div> <div>
<h3 className="font-semibold text-foreground mb-1">Email</h3> <h3 className="font-semibold text-foreground mb-1">Email</h3>
<p className="text-muted-foreground">info@openxpert.com</p> <p className="text-muted-foreground">info@openxperts.me</p>
<p className="text-muted-foreground">support@openxpert.com</p>
</div> </div>
</div> </div>
{/* <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">
<Phone className="w-5 h-5 text-primary" />
</div>
<div>
<h3 className="font-semibold text-foreground mb-1">Phone</h3>
<p className="text-muted-foreground">+971 XXX XXXX</p>
<p className="text-muted-foreground">+971 XXX XXXX</p>
</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">
<MapPin className="w-5 h-5 text-primary" /> <MapPin className="w-5 h-5 text-primary" />

View File

@@ -208,7 +208,7 @@ const AmcSupport = () => {
{features.map((feature, index) => ( {features.map((feature, index) => (
<Card <Card
key={index} key={index}
className="group glass-card p-8 rounded-3xl transition-all duration-500 hover:scale-105 hover:glow-effect cursor-pointer" className="group glass-card p-8 rounded-3xl transition-all duration-500 hover:scale-105 hover:glow-effect "
style={{ animationDelay: `${index * 50}ms` }} style={{ animationDelay: `${index * 50}ms` }}
> >
<div className="mb-6"> <div className="mb-6">
@@ -368,7 +368,7 @@ const AmcSupport = () => {
</section> */} </section> */}
{/* CTA Section */} {/* CTA Section */}
<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-12 max-w-4xl mx-auto text-center"> <div className="glass-strong rounded-3xl p-12 max-w-4xl mx-auto text-center">
<h2 className="text-3xl md:text-4xl font-bold text-foreground mb-4"> <h2 className="text-3xl md:text-4xl font-bold text-foreground mb-4">
Ready to Get Protected? Ready to Get Protected?
@@ -376,33 +376,21 @@ const AmcSupport = () => {
<p className="text-lg text-muted-foreground mb-8 max-w-2xl mx-auto"> <p className="text-lg text-muted-foreground mb-8 max-w-2xl mx-auto">
Start your AMC contract today and enjoy peace of mind Start your AMC contract today and enjoy peace of mind
</p> </p>
<a
{!showSuccess ? ( href="mailto:info@openxperts.com?subject=AMC%20Support%20Quote%20Request&body=Hi%20OpenXperts%20Team,%0D%0A%0D%0AI%20would%20like%20to%20request%20a%20quote%20for%20AMC%20support.%0D%0A%0D%0AName:%20%0D%0ACompany:%20%0D%0APhone:%20%0D%0ACurrent%20Systems:%20%0D%0ASupport%20Requirements:%20%0D%0A%0D%0AThank%20you!"
className="inline-block"
>
<Button <Button
size="lg" size="lg"
className="glass-card hover:glow-effect px-8 py-6 text-lg group" className="glass-card hover:glow-effect px-8 py-6 text-lg group"
onClick={() => setShowSuccess(true)}
> >
<Wrench className="mr-2 w-5 h-5" /> <Wrench className="mr-2 w-5 h-5" />
Get Your Quote Get Your Quote
<ArrowRight className="ml-2 w-5 h-5 group-hover:translate-x-1 transition-transform" /> <ArrowRight className="ml-2 w-5 h-5 group-hover:translate-x-1 transition-transform" />
</Button> </Button>
) : ( </a>
<div className="glass-card p-8 rounded-2xl animate-scale-in">
<Check className="w-16 h-16 text-primary mx-auto mb-4 animate-glow-pulse" />
<h3 className="text-xl font-semibold text-foreground mb-2">Request Received!</h3>
<p className="text-muted-foreground mb-6">
Our support team will contact you within 24 hours with a customized quote.
</p>
<Link to="/contact">
<Button variant="outline" className="glass-card">
Contact Us Directly
</Button>
</Link>
</div> </div>
)} </section>
</div>
</section>
<Footer /> <Footer />
</div> </div>

View File

@@ -183,7 +183,7 @@ const CybersecurityServices = () => {
{features.map((feature, index) => ( {features.map((feature, index) => (
<Card <Card
key={index} key={index}
className="group glass-card p-8 rounded-3xl transition-all duration-500 hover:scale-105 hover:glow-effect cursor-pointer" className="group glass-card p-8 rounded-3xl transition-all duration-500 hover:scale-105 hover:glow-effect "
style={{ animationDelay: `${index * 50}ms` }} style={{ animationDelay: `${index * 50}ms` }}
> >
<div className="mb-6"> <div className="mb-6">

View File

@@ -163,7 +163,7 @@ const ECommerce = () => {
{features.map((feature, index) => ( {features.map((feature, index) => (
<Card <Card
key={index} key={index}
className="group glass-card p-8 rounded-3xl transition-all duration-500 hover:scale-105 hover:glow-effect cursor-pointer" className="group glass-card p-8 rounded-3xl transition-all duration-500 hover:scale-105 hover:glow-effect "
style={{ animationDelay: `${index * 50}ms` }} style={{ animationDelay: `${index * 50}ms` }}
> >
<div className="mb-6"> <div className="mb-6">
@@ -282,7 +282,7 @@ const ECommerce = () => {
</section> */} </section> */}
{/* CTA Section */} {/* CTA Section */}
<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-12 max-w-4xl mx-auto text-center"> <div className="glass-strong rounded-3xl p-12 max-w-4xl mx-auto text-center">
<h2 className="text-3xl md:text-4xl font-bold text-foreground mb-4"> <h2 className="text-3xl md:text-4xl font-bold text-foreground mb-4">
Ready to Launch Your Store? Ready to Launch Your Store?
@@ -290,33 +290,21 @@ const ECommerce = () => {
<p className="text-lg text-muted-foreground mb-8 max-w-2xl mx-auto"> <p className="text-lg text-muted-foreground mb-8 max-w-2xl mx-auto">
Let's build an e-commerce experience that your customers will love Let's build an e-commerce experience that your customers will love
</p> </p>
<a
{!showSuccess ? ( href="mailto:info@openxperts.com?subject=E-Commerce%20Project%20Inquiry&body=Hi%20OpenXperts%20Team,%0D%0A%0D%0AI%20would%20like%20to%20start%20an%20e-commerce%20project.%0D%0A%0D%0AName:%20%0D%0ACompany:%20%0D%0APhone:%20%0D%0AProject%20Details:%20%0D%0A%0D%0AThank%20you!"
className="inline-block"
>
<Button <Button
size="lg" size="lg"
className="glass-card hover:glow-effect px-8 py-6 text-lg group" className="glass-card hover:glow-effect px-8 py-6 text-lg group"
onClick={() => setShowSuccess(true)}
> >
<ShoppingCart className="mr-2 w-5 h-5" /> <ShoppingCart className="mr-2 w-5 h-5" />
Start Your Project Start Your Project
<ArrowRight className="ml-2 w-5 h-5 group-hover:translate-x-1 transition-transform" /> <ArrowRight className="ml-2 w-5 h-5 group-hover:translate-x-1 transition-transform" />
</Button> </Button>
) : ( </a>
<div className="glass-card p-8 rounded-2xl animate-scale-in">
<Check className="w-16 h-16 text-primary mx-auto mb-4 animate-glow-pulse" />
<h3 className="text-xl font-semibold text-foreground mb-2">Request Received!</h3>
<p className="text-muted-foreground mb-6">
Our e-commerce specialists will contact you within 24 hours.
</p>
<Link to="/contact">
<Button variant="outline" className="glass-card">
Contact Us Directly
</Button>
</Link>
</div> </div>
)} </section>
</div>
</section>
<Footer /> <Footer />
</div> </div>

View File

@@ -138,7 +138,7 @@ const ErpSystems = () => {
{modules.map((module, index) => ( {modules.map((module, index) => (
<Card <Card
key={index} key={index}
className="group glass-card p-6 rounded-3xl transition-all duration-500 hover:scale-105 hover:glow-effect cursor-pointer" className="group glass-card p-6 rounded-3xl transition-all duration-500 hover:scale-105 hover:glow-effect"
style={{ animationDelay: `${index * 50}ms` }} style={{ animationDelay: `${index * 50}ms` }}
> >
<div className="mb-4"> <div className="mb-4">
@@ -267,7 +267,7 @@ const ErpSystems = () => {
</section> </section>
{/* Demo CTA */} {/* Demo CTA */}
<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-12 max-w-4xl mx-auto text-center"> <div className="glass-strong rounded-3xl p-12 max-w-4xl mx-auto text-center">
<h2 className="text-3xl md:text-4xl font-bold text-foreground mb-4"> <h2 className="text-3xl md:text-4xl font-bold text-foreground mb-4">
Ready to Transform Your Business? Ready to Transform Your Business?
@@ -275,34 +275,22 @@ const ErpSystems = () => {
<p className="text-lg text-muted-foreground mb-8 max-w-2xl mx-auto"> <p className="text-lg text-muted-foreground mb-8 max-w-2xl mx-auto">
Schedule a personalized demo and see how our ERP system can revolutionize your operations. Schedule a personalized demo and see how our ERP system can revolutionize your operations.
</p> </p>
<a
{!showCalendar ? ( href="mailto:info@openxperts.me?subject=ERP%20System%20Demo%20Consultation&body=Hi%20OpenXperts%20Team,%0D%0A%0D%0AI%20would%20like%20to%20schedule%20a%20demo%20of%20your%20ERP%20system.%0D%0A%0D%0AName:%20%0D%0ACompany:%20%0D%0APhone:%20%0D%0APreferred%20Date/Time:%20%0D%0A%0D%0AThank%20you!"
className="inline-block"
target="_blank"
>
<Button <Button
size="lg" size="lg"
className="glass-card hover:glow-effect px-8 py-6 text-lg group" className="glass-card hover:glow-effect px-8 py-6 text-lg group"
onClick={() => setShowCalendar(true)}
> >
<Calendar className="mr-2 w-5 h-5" /> <Calendar className="mr-2 w-5 h-5" />
Schedule ERP Demo Schedule ERP Demo
<ArrowRight className="ml-2 w-5 h-5 group-hover:translate-x-1 transition-transform" /> <ArrowRight className="ml-2 w-5 h-5 group-hover:translate-x-1 transition-transform" />
</Button> </Button>
) : ( </a>
<div className="glass-card p-8 rounded-2xl animate-scale-in">
<Check className="w-16 h-16 text-primary mx-auto mb-4 animate-glow-pulse" />
<h3 className="text-xl font-semibold text-foreground mb-2">Request Received!</h3>
<p className="text-muted-foreground mb-6">
Our team will contact you within 24 hours to schedule your personalized demo.
</p>
<Link to="/contact">
<Button variant="outline" className="glass-card">
Contact Us Directly
</Button>
</Link>
</div> </div>
)} </section>
</div>
</section>
<Footer /> <Footer />
</div> </div>
); );