GNXSOFT.COM

This commit is contained in:
Iliyan Angelov
2025-09-26 00:15:37 +03:00
commit fe26b7cca4
16323 changed files with 2011881 additions and 0 deletions

View File

@@ -0,0 +1,26 @@
"use client";
import Header from "@/components/shared/layout/header/Header";
import AboutBanner from "@/components/pages/about/AboutBanner";
import AboutServiceComponent from "@/components/pages/about/AboutService";
import Footer from "@/components/shared/layout/footer/Footer";
import AboutScrollProgressButton from "@/components/pages/about/AboutScrollProgressButton";
import AboutInitAnimations from "@/components/pages/about/AboutInitAnimations";
import AboutStarter from "@/components/pages/about/AboutStarter";
const page = () => {
return (
<div className="enterprise-about-page">
<Header />
<main>
<AboutBanner />
<AboutServiceComponent />
<AboutStarter />
</main>
<Footer />
<AboutScrollProgressButton />
<AboutInitAnimations />
</div>
);
};
export default page;

View File

@@ -0,0 +1,23 @@
import Header from "@/components/shared/layout/header/Header";
import BlogSingle from "@/components/pages/blog/BlogSingle";
import LatestPost from "@/components/pages/blog/LatestPost";
import Footer from "@/components/shared/layout/footer/Footer";
import BlogScrollProgressButton from "@/components/pages/blog/BlogScrollProgressButton";
import BlogInitAnimations from "@/components/pages/blog/BlogInitAnimations";
const page = () => {
return (
<div className="tp-app">
<Header />
<main>
<BlogSingle />
<LatestPost />
</main>
<Footer />
<BlogScrollProgressButton />
<BlogInitAnimations />
</div>
);
};
export default page;

View File

@@ -0,0 +1,21 @@
import Header from "@/components/shared/layout/header/Header";
import BlogItems from "@/components/pages/blog/BlogItems";
import Footer from "@/components/shared/layout/footer/Footer";
import BlogScrollProgressButton from "@/components/pages/blog/BlogScrollProgressButton";
import BlogInitAnimations from "@/components/pages/blog/BlogInitAnimations";
const page = () => {
return (
<div className="tp-app">
<Header />
<main>
<BlogItems />
</main>
<Footer />
<BlogScrollProgressButton />
<BlogInitAnimations />
</div>
);
};
export default page;

View File

@@ -0,0 +1,21 @@
import Header from "@/components/shared/layout/header/Header";
import JobSingle from "@/components/pages/career/JobSingle";
import Footer from "@/components/shared/layout/footer/Footer";
import CareerScrollProgressButton from "@/components/pages/career/CareerScrollProgressButton";
import CareerInitAnimations from "@/components/pages/career/CareerInitAnimations";
const page = () => {
return (
<div className="tp-app">
<Header />
<main>
<JobSingle />
</main>
<Footer />
<CareerScrollProgressButton />
<CareerInitAnimations />
</div>
);
};
export default page;

View File

@@ -0,0 +1,27 @@
import Header from "@/components/shared/layout/header/Header";
import CareerBanner from "@/components/pages/career/CareerBanner";
import OpenPosition from "@/components/pages/career/OpenPosition";
import Thrive from "@/components/pages/career/Thrive";
import MasonryGallery from "@/components/pages/career/MasonryGallery";
import Footer from "@/components/shared/layout/footer/Footer";
import CareerScrollProgressButton from "@/components/pages/career/CareerScrollProgressButton";
import CareerInitAnimations from "@/components/pages/career/CareerInitAnimations";
const page = () => {
return (
<div className="tp-app">
<Header />
<main>
<CareerBanner />
<OpenPosition />
<Thrive />
<MasonryGallery />
</main>
<Footer />
<CareerScrollProgressButton />
<CareerInitAnimations />
</div>
);
};
export default page;

View File

@@ -0,0 +1,25 @@
import Header from "@/components/shared/layout/header/Header";
import CaseSingle from "@/components/pages/case-study/CaseSingle";
import Process from "@/components/pages/case-study/Process";
import RelatedCase from "@/components/pages/case-study/RelatedCase";
import Footer from "@/components/shared/layout/footer/Footer";
import CaseStudyScrollProgressButton from "@/components/pages/case-study/CaseStudyScrollProgressButton";
import CaseStudyInitAnimations from "@/components/pages/case-study/CaseStudyInitAnimations";
const page = () => {
return (
<div className="tp-app">
<Header />
<main>
<CaseSingle />
<Process />
<RelatedCase />
</main>
<Footer />
<CaseStudyScrollProgressButton />
<CaseStudyInitAnimations />
</div>
);
};
export default page;

View File

@@ -0,0 +1,21 @@
import Header from "@/components/shared/layout/header/Header";
import CaseItems from "@/components/pages/case-study/CaseItems";
import Footer from "@/components/shared/layout/footer/Footer";
import CaseStudyScrollProgressButton from "@/components/pages/case-study/CaseStudyScrollProgressButton";
import CaseStudyInitAnimations from "@/components/pages/case-study/CaseStudyInitAnimations";
const page = () => {
return (
<div className="tp-app">
<Header />
<main>
<CaseItems />
</main>
<Footer />
<CaseStudyScrollProgressButton />
<CaseStudyInitAnimations />
</div>
);
};
export default page;

View File

@@ -0,0 +1,21 @@
import Header from "@/components/shared/layout/header/Header";
import ContactSection from "@/components/pages/contact/ContactSection";
import Footer from "@/components/shared/layout/footer/Footer";
import ContactScrollProgressButton from "@/components/pages/contact/ContactScrollProgressButton";
import ContactInitAnimations from "@/components/pages/contact/ContactInitAnimations";
const page = () => {
return (
<div className="tp-app">
<Header />
<main>
<ContactSection />
</main>
<Footer />
<ContactScrollProgressButton />
<ContactInitAnimations />
</div>
);
};
export default page;

86
gnx-react/app/layout.tsx Normal file
View File

@@ -0,0 +1,86 @@
import type { Metadata } from "next";
import { Inter, Montserrat } from "next/font/google";
import "@/public/styles/main.scss";
import { CookieConsentProvider } from "@/components/shared/layout/CookieConsentContext";
import { CookieConsent } from "@/components/shared/layout/CookieConsent";
const montserrat = Montserrat({
subsets: ["latin"],
display: "swap",
weight: ["100", "200", "300", "400", "500", "600", "700", "800", "900"],
variable: "--mont",
fallback: [
"-apple-system",
"Segoe UI",
"Roboto",
"Ubuntu",
"Fira Sans",
"Arial",
"sans-serif",
],
});
const inter = Inter({
subsets: ["latin"],
display: "swap",
weight: ["100", "200", "300", "400", "500", "600", "700", "800", "900"],
variable: "--inter",
fallback: [
"-apple-system",
"Segoe UI",
"Roboto",
"Ubuntu",
"Fira Sans",
"Arial",
"sans-serif",
],
});
export const metadata: Metadata = {
title: "EnterpriseSoft Solutions | Enterprise Software Development & IT Solutions",
description: "Leading enterprise software development company providing custom solutions, system integrations, and digital transformation services for Fortune 500 companies",
keywords: [
"Enterprise Software",
"Custom Development",
"System Integration",
"Digital Transformation",
"Enterprise Solutions",
"Software Consulting",
"API Development",
"Cloud Migration",
],
authors: [
{
name: "EnterpriseSoft Solutions",
url: "https://enterprisesoft.com",
},
],
};
export default function RootLayout({
children,
}: {
children: React.ReactNode;
}) {
return (
<html lang="en">
<body className={`${inter.variable} ${montserrat.variable}`}>
<CookieConsentProvider
config={{
companyName: "EnterpriseSoft Solutions",
privacyPolicyUrl: "/privacy-policy",
cookiePolicyUrl: "/cookie-policy",
dataControllerEmail: "privacy@enterprisesoft.com",
retentionPeriod: 365,
enableAuditLog: true,
enableDetailedSettings: true,
showPrivacyNotice: true,
}}
>
{children}
<CookieConsent />
</CookieConsentProvider>
</body>
</html>
);
}

View File

@@ -0,0 +1,31 @@
import Link from "next/link";
import HomeScrollProgressButton from "@/components/pages/home/HomeScrollProgressButton";
import HomeInitAnimations from "@/components/pages/home/HomeInitAnimations";
const page = () => {
return (
<div className="tp-app">
<div className="tp-error pt-120 pb-120 text-center">
<div className="container">
<div className="row justify-content-center">
<div className="col-12 col-lg-8">
<h1 className="fw-7 text-uppercase mt-8">404 ERROR</h1>
<p className="text-xl fw-5 mt-12">Page Not Found</p>
<div className="mt-40 d-flex justify-content-center">
<Link href="/" className="btn-anim btn-anim-light">
Go Home
<i className="fa-solid fa-arrow-trend-up"></i>
<span></span>
</Link>
</div>
</div>
</div>
</div>
</div>
<HomeScrollProgressButton />
<HomeInitAnimations />
</div>
);
};
export default page;

29
gnx-react/app/page.tsx Normal file
View File

@@ -0,0 +1,29 @@
import Header from "@/components/shared/layout/header/Header";
import HomeBanner from "@/components/pages/home/HomeBanner";
import Overview from "@/components/pages/home/Overview";
import Story from "@/components/pages/home/Story";
import ServiceIntro from "@/components/pages/home/ServiceIntro";
import HomeLatestPost from "@/components/pages/home/HomeLatestPost";
import Footer from "@/components/shared/layout/footer/Footer";
import HomeScrollProgressButton from "@/components/pages/home/HomeScrollProgressButton";
import HomeInitAnimations from "@/components/pages/home/HomeInitAnimations";
const page = () => {
return (
<div className="tp-app">
<Header />
<main>
<HomeBanner />
<Overview />
<Story />
<ServiceIntro />
<HomeLatestPost />
</main>
<Footer />
<HomeScrollProgressButton />
<HomeInitAnimations />
</div>
);
};
export default page;

View File

@@ -0,0 +1,85 @@
import { notFound } from 'next/navigation';
import Header from "@/components/shared/layout/header/Header";
import ServiceDetailsBanner from "@/components/shared/banners/ServiceDetailsBanner";
import ServiceDetails from "@/components/pages/services/ServiceDetails";
import ServiceFeatures from "@/components/pages/services/ServiceFeatures";
import ServiceDeliverables from "@/components/pages/services/ServiceDeliverables";
import ServiceProcess from "@/components/pages/services/ServiceProcess";
import Transform from "@/components/pages/services/Transform";
import Footer from "@/components/shared/layout/footer/Footer";
import ServicesScrollProgressButton from "@/components/pages/services/ServicesScrollProgressButton";
import ServicesInitAnimations from "@/components/pages/services/ServicesInitAnimations";
import { serviceService, Service } from "@/lib/api/serviceService";
interface ServicePageProps {
params: Promise<{
slug: string;
}>;
}
// Generate static params for all services (optional - for better performance)
export async function generateStaticParams() {
try {
const services = await serviceService.getServices();
return services.results.map((service: Service) => ({
slug: service.slug,
}));
} catch (error) {
console.error('Error generating static params:', error);
return [];
}
}
// Generate metadata for each service page
export async function generateMetadata({ params }: ServicePageProps) {
try {
const { slug } = await params;
const service = await serviceService.getServiceBySlug(slug);
return {
title: `${service.title} - GNX Services`,
description: service.description,
openGraph: {
title: service.title,
description: service.description,
images: service.image_url ? [service.image_url] : [],
},
};
} catch (error) {
return {
title: 'Service Not Found - GNX',
description: 'The requested service could not be found.',
};
}
}
const ServicePage = async ({ params }: ServicePageProps) => {
let service: Service;
try {
const { slug } = await params;
service = await serviceService.getServiceBySlug(slug);
} catch (error) {
console.error('Error fetching service:', error);
notFound();
}
return (
<div className="enterprise-app">
<Header />
<main className="enterprise-main">
<ServiceDetailsBanner service={service} />
<ServiceDetails service={service} />
<ServiceFeatures service={service} />
<ServiceDeliverables service={service} />
<Transform service={service} />
<ServiceProcess service={service} />
</main>
<Footer />
<ServicesScrollProgressButton />
<ServicesInitAnimations />
</div>
);
};
export default ServicePage;

View File

@@ -0,0 +1,23 @@
import Header from "@/components/shared/layout/header/Header";
import ServicesBanner from "@/components/pages/services/ServicesBanner";
import ServiceMain from "@/components/pages/services/ServiceMain";
import Footer from "@/components/shared/layout/footer/Footer";
import ServicesScrollProgressButton from "@/components/pages/services/ServicesScrollProgressButton";
import ServicesInitAnimations from "@/components/pages/services/ServicesInitAnimations";
const page = () => {
return (
<div className="enterprise-app">
<Header />
<main className="enterprise-main">
<ServicesBanner />
<ServiceMain />
</main>
<Footer />
<ServicesScrollProgressButton />
<ServicesInitAnimations />
</div>
);
};
export default page;