diff --git a/generate_solution_routes.js b/generate_solution_routes.js new file mode 100644 index 0000000..b3a2365 --- /dev/null +++ b/generate_solution_routes.js @@ -0,0 +1,52 @@ +const fs = require('fs'); +const path = require('path'); + +const srcAppDir = path.join(__dirname, 'src', 'app'); +const solutionsDir = path.join(srcAppDir, 'solutions'); + +if (!fs.existsSync(solutionsDir)) { + fs.mkdirSync(solutionsDir, { recursive: true }); +} + +const routes = { + // Department + 'administration/page.tsx': `export { default } from "../../(features)/SolutionPage/department/AdministrationPage";`, + 'finance/page.tsx': `export { default } from "../../(features)/SolutionPage/department/FinancePage";`, + 'hr/page.tsx': `export { default } from "../../(features)/SolutionPage/department/HrPage";`, + 'procurement/page.tsx': `export { default } from "../../(features)/SolutionPage/department/ProcurementPage";`, + 'sales/page.tsx': `export { default } from "../../(features)/SolutionPage/department/SalesPage";`, + + // Industry + 'construction/page.tsx': `export { default } from "../../(features)/SolutionPage/industry/ConstructionPage";`, + 'education/page.tsx': `export { default } from "../../(features)/SolutionPage/industry/EducationPage";`, + 'government/page.tsx': `export { default } from "../../(features)/SolutionPage/industry/GovernmentPage";`, + 'healthcare/page.tsx': `export { default } from "../../(features)/SolutionPage/industry/HealthcarePage";`, + 'insurance/page.tsx': `export { default } from "../../(features)/SolutionPage/industry/InsurancePage";`, + 'logistics/page.tsx': `export { default } from "../../(features)/SolutionPage/industry/LogisticsPage";`, + 'manufacturing/page.tsx': `export { default } from "../../(features)/SolutionPage/industry/ManufacturingPage";`, + + // Use Case + 'client-onboarding/page.tsx': `export { default } from "../../(features)/SolutionPage/usecase/ClientOnboardingPage";`, + 'contract-management/page.tsx': `export { default } from "../../(features)/SolutionPage/usecase/ContractManagementPage";`, + 'document-archiving/page.tsx': `export { default } from "../../(features)/SolutionPage/usecase/DocumentArchivingPage";`, + 'employee-onboarding/page.tsx': `export { default } from "../../(features)/SolutionPage/usecase/EmployeeOnboardingPage";`, + 'invoice-approvals/page.tsx': `export { default } from "../../(features)/SolutionPage/usecase/InvoiceApprovalsPage";`, + 'lease-agreements/page.tsx': `export { default } from "../../(features)/SolutionPage/usecase/LeaseAgreementsPage";`, + 'leave-requests/page.tsx': `export { default } from "../../(features)/SolutionPage/usecase/LeaveRequestsPage";`, + 'purchase-requests/page.tsx': `export { default } from "../../(features)/SolutionPage/usecase/PurchaseRequestsPage";`, + 'site-inspection/page.tsx': `export { default } from "../../(features)/SolutionPage/usecase/SiteInspectionPage";`, + 'vendor-approvals/page.tsx': `export { default } from "../../(features)/SolutionPage/usecase/VendorApprovalsPage";`, +}; + +for (const [routePath, content] of Object.entries(routes)) { + const fullPath = path.join(solutionsDir, routePath); + const dir = path.dirname(fullPath); + + if (!fs.existsSync(dir)) { + fs.mkdirSync(dir, { recursive: true }); + } + + fs.writeFileSync(fullPath, content, 'utf8'); +} + +console.log('Solution routes generated successfully.'); diff --git a/migrate.js b/migrate.js new file mode 100644 index 0000000..87f3acc --- /dev/null +++ b/migrate.js @@ -0,0 +1,79 @@ +const fs = require('fs'); +const path = require('path'); + +const srcAppDir = path.join(__dirname, 'src', 'app'); + +// 1. Walk through all files and add "use client" and replace react-router-dom +function walkDir(dir, callback) { + fs.readdirSync(dir).forEach(f => { + const dirPath = path.join(dir, f); + const isDirectory = fs.statSync(dirPath).isDirectory(); + if (isDirectory) { + walkDir(dirPath, callback); + } else { + callback(path.join(dir, f)); + } + }); +} + +walkDir(srcAppDir, (filePath) => { + if (filePath.endsWith('.tsx') || filePath.endsWith('.ts')) { + let content = fs.readFileSync(filePath, 'utf8'); + + // Add "use client" if it's a React component or hook and doesn't have it + if (!content.includes('"use client"') && !content.includes("'use client'")) { + // Just add to all ts/tsx files for now except layout.tsx and page.tsx + if (!filePath.endsWith('layout.tsx') && filePath !== path.join(srcAppDir, 'page.tsx')) { + content = '"use client";\n' + content; + } + } + + // Replace react-router-dom imports + if (content.includes('react-router-dom')) { + // Link + content = content.replace(/import\s+{[^}]*Link[^}]*}\s+from\s+['"]react-router-dom['"];?/g, "import Link from 'next/link';"); + // useNavigate + content = content.replace(/useNavigate/g, 'useRouter'); + content = content.replace(/import\s+{[^}]*useRouter[^}]*}\s+from\s+['"]react-router-dom['"];?/g, "import { useRouter } from 'next/navigation';"); + + // useLocation -> usePathname, useSearchParams + if (content.includes('useLocation')) { + content = content.replace(/useLocation/g, 'usePathname'); // naive replacement, will need manual fixing if they use location.search + content = content.replace(/import\s+{[^}]*usePathname[^}]*}\s+from\s+['"]react-router-dom['"];?/g, "import { usePathname } from 'next/navigation';"); + } + + // General fallback if multiple imports were in one line + content = content.replace(/import\s+{(.*)}\s+from\s+['"]react-router-dom['"];?/g, (match, p1) => { + let imports = p1.split(',').map(s => s.trim()); + let nextNav = []; + let hasLink = false; + imports.forEach(i => { + if (i === 'Link') hasLink = true; + else if (i === 'useNavigate') nextNav.push('useRouter'); + else if (i === 'useLocation') nextNav.push('usePathname', 'useSearchParams'); + }); + let res = ''; + if (hasLink) res += "import Link from 'next/link';\n"; + if (nextNav.length > 0) res += `import { ${[...new Set(nextNav)].join(', ')} } from 'next/navigation';\n`; + return res; + }); + } + + // Replace with + content = content.replace(/]+)to=/g, '=6" + } + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -5156,6 +5168,15 @@ "yallist": "^3.0.2" } }, + "node_modules/lucide-react": { + "version": "1.41.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-1.41.0.tgz", + "integrity": "sha512-6lksP35l6KszDKUeRTi4LV7i6DEe0Yzl2ALJm9j4c5xEYN91GdW1xGsawGMOg2mgjF5GHBVX8pKX9kP+cWsP3Q==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/magic-string": { "version": "0.30.21", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", @@ -6373,6 +6394,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/tailwind-merge": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.6.0.tgz", + "integrity": "sha512-uxL7qAVQriqRQPAyK3pj66VqskWqoZ37PW94jwOTwNfq/z9oyu1V+eqrZqtR2+fCiXdYOZe/Modt8GtvqNzu+w==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, "node_modules/tailwindcss": { "version": "4.3.3", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.3.3.tgz", diff --git a/package.json b/package.json index b6d4d71..6d0d329 100644 --- a/package.json +++ b/package.json @@ -9,9 +9,12 @@ "lint": "eslint" }, "dependencies": { + "clsx": "^2.1.1", + "lucide-react": "^1.41.0", "next": "16.3.4", "react": "19.2.8", - "react-dom": "19.2.8" + "react-dom": "19.2.8", + "tailwind-merge": "^3.6.0" }, "devDependencies": { "@tailwindcss/postcss": "^4", diff --git a/public/dashboardimage.png b/public/dashboardimage.png new file mode 100644 index 0000000..c35f57d Binary files /dev/null and b/public/dashboardimage.png differ diff --git a/public/enterprise.png b/public/enterprise.png new file mode 100644 index 0000000..bddc935 Binary files /dev/null and b/public/enterprise.png differ diff --git a/public/legalterms.png b/public/legalterms.png new file mode 100644 index 0000000..09ed5fc Binary files /dev/null and b/public/legalterms.png differ diff --git a/public/operations.png b/public/operations.png new file mode 100644 index 0000000..706cd08 Binary files /dev/null and b/public/operations.png differ diff --git a/public/realestate.png b/public/realestate.png new file mode 100644 index 0000000..c7d8a01 Binary files /dev/null and b/public/realestate.png differ diff --git a/restructure.js b/restructure.js new file mode 100644 index 0000000..67df061 --- /dev/null +++ b/restructure.js @@ -0,0 +1,83 @@ +const fs = require('fs'); +const path = require('path'); + +const srcAppDir = path.join(__dirname, 'src', 'app'); +const featuresDir = path.join(srcAppDir, '(features)'); + +if (!fs.existsSync(featuresDir)) { + fs.mkdirSync(featuresDir); +} + +const foldersToMove = [ + 'Components', + 'ContactPage', + 'HomePage', + 'Pricing', + 'ProductPage', + 'ResourcePage', + 'SecurityPage', + 'SolutionPage' +]; + +// Move folders to (features) +foldersToMove.forEach(folder => { + const oldPath = path.join(srcAppDir, folder); + const newPath = path.join(featuresDir, folder); + if (fs.existsSync(oldPath)) { + fs.renameSync(oldPath, newPath); + } +}); + +// Recreate proper lowercase routes +const routes = { + // Home + 'page.tsx': `export { default } from "./(features)/HomePage/Index";`, + + // Pricing + 'pricing/page.tsx': `export { default } from "../(features)/Pricing/index";`, + + // Contact + 'contact/page.tsx': `export { default } from "../(features)/ContactPage/MainContactPage";`, + 'contact-us/page.tsx': `export { default } from "../(features)/ContactPage/MainContactPage";`, + 'demo/page.tsx': `export { default } from "../(features)/ContactPage/MainContactPage";`, + 'book-a-demo/page.tsx': `export { default } from "../(features)/ContactPage/MainContactPage";`, + + // Security + 'security/page.tsx': `export { default } from "../(features)/SecurityPage/Index";`, + + // Blog / Resources + 'blog/page.tsx': `export { default } from "../(features)/ResourcePage/BlogPage";`, + 'resources/page.tsx': `export { default } from "../(features)/ResourcePage/BlogPage";`, + 'resources/blog/page.tsx': `export { default } from "../../(features)/ResourcePage/BlogPage";`, + 'blog/[slug]/page.tsx': `export { default } from "../../(features)/ResourcePage/BlogDetailPage";`, + + // Products + 'product/platform/page.tsx': `export { default } from "../../(features)/ProductPage/AllProductsPage";`, + 'product/drive/page.tsx': `export { default } from "../../(features)/ProductPage/DrivePage";`, + 'product/pdf-editor/page.tsx': `export { default } from "../../(features)/ProductPage/PdfEditorPage";`, + 'product/workflows/page.tsx': `export { default } from "../../(features)/ProductPage/WorkflowsPage";`, + 'product/sign/page.tsx': `export { default } from "../../(features)/ProductPage/SignPage";`, + 'product/free-pdf-tools/page.tsx': `export { default } from "../../(features)/ProductPage/AllPdfToolsPage";`, + 'product/free-editor/page.tsx': `export { default } from "../../(features)/ProductPage/FreeEditorPages";`, + 'product/embed/page.tsx': `export { default } from "../../(features)/ProductPage/EmbedPage";`, + + // Solutions + 'solutions/page.tsx': `export { default } from "../(features)/SolutionPage/AllSolutionsPage";`, + 'solutions/enterprise/page.tsx': `export { default } from "../../(features)/SolutionPage/EnterPrisePage";`, + 'solutions/legal/page.tsx': `export { default } from "../../(features)/SolutionPage/LegalPage";`, + 'solutions/real-estate/page.tsx': `export { default } from "../../(features)/SolutionPage/RealEstatePage";`, + 'solutions/operations/page.tsx': `export { default } from "../../(features)/SolutionPage/OperationsPage";`, +}; + +for (const [routePath, content] of Object.entries(routes)) { + const fullPath = path.join(srcAppDir, routePath); + const dir = path.dirname(fullPath); + + if (!fs.existsSync(dir)) { + fs.mkdirSync(dir, { recursive: true }); + } + + fs.writeFileSync(fullPath, content, 'utf8'); +} + +console.log('Restructuring completed.'); diff --git a/setupRoutes.js b/setupRoutes.js new file mode 100644 index 0000000..d356575 --- /dev/null +++ b/setupRoutes.js @@ -0,0 +1,60 @@ +const fs = require('fs'); +const path = require('path'); + +const srcAppDir = path.join(__dirname, 'src', 'app'); + +const routes = { + // Home + 'page.tsx': `export { default } from "./HomePage/Index";`, + + // Pricing + 'pricing/page.tsx': `export { default } from "../Pricing/index";`, + + // Contact + 'contact/page.tsx': `export { default } from "../ContactPage/MainContactPage";`, + 'contact-us/page.tsx': `export { default } from "../ContactPage/MainContactPage";`, + 'demo/page.tsx': `export { default } from "../ContactPage/MainContactPage";`, + 'book-a-demo/page.tsx': `export { default } from "../ContactPage/MainContactPage";`, + + // Security + 'security/page.tsx': `export { default } from "../SecurityPage/Index";`, + + // Blog / Resources + 'blog/page.tsx': `export { default } from "../ResourcePage/BlogPage";`, + 'resources/page.tsx': `export { default } from "../ResourcePage/BlogPage";`, + 'resources/blog/page.tsx': `export { default } from "../../ResourcePage/BlogPage";`, + 'blog/[slug]/page.tsx': `export { default } from "../../ResourcePage/BlogDetailPage";`, + + // Products + 'product/platform/page.tsx': `export { default } from "../../ProductPage/AllProductsPage";`, + 'product/drive/page.tsx': `export { default } from "../../ProductPage/DrivePage";`, + 'product/pdf-editor/page.tsx': `export { default } from "../../ProductPage/PdfEditorPage";`, + 'product/workflows/page.tsx': `export { default } from "../../ProductPage/WorkflowsPage";`, + 'product/sign/page.tsx': `export { default } from "../../ProductPage/SignPage";`, + 'product/free-pdf-tools/page.tsx': `export { default } from "../../ProductPage/AllPdfToolsPage";`, + 'product/free-editor/page.tsx': `export { default } from "../../ProductPage/FreeEditorPages";`, + 'product/embed/page.tsx': `export { default } from "../../ProductPage/EmbedPage";`, + + // Solutions + 'solutions/page.tsx': `export { default } from "../SolutionPage/AllSolutionsPage";`, + 'solutions/enterprise/page.tsx': `export { default } from "../../SolutionPage/EnterPrisePage";`, + 'solutions/legal/page.tsx': `export { default } from "../../SolutionPage/LegalPage";`, + 'solutions/real-estate/page.tsx': `export { default } from "../../SolutionPage/RealEstatePage";`, + 'solutions/operations/page.tsx': `export { default } from "../../SolutionPage/OperationsPage";`, +}; + +for (const [routePath, content] of Object.entries(routes)) { + const fullPath = path.join(srcAppDir, routePath); + const dir = path.dirname(fullPath); + + if (!fs.existsSync(dir)) { + fs.mkdirSync(dir, { recursive: true }); + } + + // Next.js components that re-export need "use client" if the underlying component uses hooks, + // but it's cleaner to just do standard re-exports if they are client components. + // We'll write the content directly. + fs.writeFileSync(fullPath, content, 'utf8'); +} + +console.log('Routes setup completed.'); diff --git a/src/app/(features)/Components/Button.tsx b/src/app/(features)/Components/Button.tsx new file mode 100644 index 0000000..4b1efdb --- /dev/null +++ b/src/app/(features)/Components/Button.tsx @@ -0,0 +1,49 @@ +"use client"; +import React, { ButtonHTMLAttributes, AnchorHTMLAttributes } from 'react'; +import { cn } from '@/lib/utils'; +import Link from 'next/link'; + +type ButtonBaseProps = { + variant?: 'primary' | 'outline'; + href?: string; + className?: string; + children: React.ReactNode; +}; + +type ButtonAsButton = ButtonBaseProps & Omit, keyof ButtonBaseProps>; +type ButtonAsLink = ButtonBaseProps & Omit, keyof ButtonBaseProps>; + +type ButtonProps = ButtonAsButton | ButtonAsLink; + +const Button: React.FC = ({ + className, + variant = 'primary', + href, + children, + ...props +}) => { + const baseStyles = "inline-flex items-center justify-center px-10 h-[50px] rounded-full font-bold text-[14px] uppercase tracking-wide transition-all active:scale-95"; + + const variants = { + primary: "bg-[#444CE7] text-white hover:bg-[#3841c7] hover:-translate-y-[1px]", + outline: "bg-transparent text-[#111111] border-[1.5px] border-[#111111] hover:bg-gray-50 hover:-translate-y-[1px]", + }; + + const classes = cn(baseStyles, variants[variant], className); + + if (href) { + return ( + + {children} + + ); + } + + return ( + + ); +}; + +export default Button; diff --git a/src/app/(features)/Components/ChallengeSection.tsx b/src/app/(features)/Components/ChallengeSection.tsx new file mode 100644 index 0000000..966d161 --- /dev/null +++ b/src/app/(features)/Components/ChallengeSection.tsx @@ -0,0 +1,151 @@ +"use client"; +import React from 'react'; +import Link from 'next/link'; +import { Sparkles } from 'lucide-react'; +const dotBg = "/landing/DotBg.png"; + +export interface ChallengeCardItem { + tag?: string; + title: string; + description?: string; + linkText?: string; + linkUrl?: string; + onClick?: () => void; +} + +export interface ChallengeSectionProps { + badgeText?: string; + badgeIcon?: React.ReactNode; + title?: string; + challenges: (string | ChallengeCardItem)[]; + showHeader?: boolean; + className?: string; + gridClassName?: string; + cardClassName?: string; + showDotBg?: boolean; +} + +const ChallengeSection: React.FC = ({ + badgeText = "THE CHALLENGE", + badgeIcon = , + title, + challenges = [], + showHeader, + className = "", + gridClassName = "grid grid-cols-1 md:grid-cols-3 gap-6", + cardClassName = "", + showDotBg = true +}) => { + const shouldShowHeader = showHeader ?? (Boolean(title) || Boolean(badgeText && badgeText !== "THE CHALLENGE")); + + return ( +
+
+ + {/* Header (optional if showHeader is true or title provided) */} + {shouldShowHeader && ( +
+ {badgeText && ( +
+ {badgeIcon} + {badgeText} +
+ )} + {title && ( +

+ {title} +

+ )} +
+ )} + + {/* Cards Grid */} +
+ {challenges.map((challenge, index) => { + if (typeof challenge === 'string') { + return ( +
+

+ {challenge} +

+
+ ); + } + + const item = challenge as ChallengeCardItem; + const cardInner = ( +
+
+ {item.tag && ( +
+ + {item.tag} + +
+ )} +

+ {item.title} +

+ {item.description && ( +

+ {item.description} +

+ )} +
+ + {item.linkText && ( +
+ + {item.linkText} + +
+ )} +
+ ); + + if (item.linkUrl) { + return ( + + {cardInner} + + ); + } + + return
{cardInner}
; + })} +
+ +
+
+ ); +}; + +export default ChallengeSection; diff --git a/src/app/(features)/Components/CustomFeatures.tsx b/src/app/(features)/Components/CustomFeatures.tsx new file mode 100644 index 0000000..4f33478 --- /dev/null +++ b/src/app/(features)/Components/CustomFeatures.tsx @@ -0,0 +1,111 @@ +"use client"; +import React from 'react'; +import { Check } from 'lucide-react'; + +export interface FeatureItem { + badge: string; + title: string; + description: string; + bulletPoints: string[]; + imagePlaceholderText?: string; + primaryButtonText?: string; + secondaryButtonText?: string; + image?: string; +} + +export interface ProductFeaturesProps { + features: FeatureItem[]; +} + +const ProductFeatures: React.FC = ({ features }) => { + if (!features || features.length === 0) return null; + + return ( +
+
+ + {features.map((feature, idx) => { + // Alternate left and right layouts + const isReversed = idx % 2 !== 0; + + return ( +
+
+
+ + {feature.badge} +
+

+ {feature.title} +

+

+ {feature.description} +

+ + {feature.bulletPoints && feature.bulletPoints.length > 0 && ( +
    + {feature.bulletPoints.map((point, pIdx) => ( +
  • + + {point} +
  • + ))} +
+ )} + + {/* Optional Buttons */} + {(feature.primaryButtonText || feature.secondaryButtonText) && ( +
+ {feature.primaryButtonText && ( + + )} + {feature.secondaryButtonText && ( + + )} +
+ )} +
+ +
+ {feature.image ? ( + {feature.title} + ) : ( +
+ + {feature.imagePlaceholderText || 'Image Placeholder'} + +
+ )} +
+
+ ); + })} + +
+
+ ); +}; + +// Helper component for the little sparkle icon +const SparklesIcon = () => ( + + + + + + + +); + +export default ProductFeatures; diff --git a/src/app/(features)/Components/CustomHeroSection.tsx b/src/app/(features)/Components/CustomHeroSection.tsx new file mode 100644 index 0000000..ae10c2d --- /dev/null +++ b/src/app/(features)/Components/CustomHeroSection.tsx @@ -0,0 +1,156 @@ +"use client"; +import React from 'react'; +import { Sparkles } from 'lucide-react'; +const squareBoxBg = "/landing/SquareBox.png"; +const cloudArrowUp = "/landing/CloudArrowUp.png"; +const cursorClick = "/landing/CursorClick.png"; +const heroDivider = "/landing/HeroDivider.png"; + +export interface ProductHeroProps { + badgeText?: string; + headlineMain?: string; + headlineHighlight?: string; + description?: string; + primaryButtonText?: string; + secondaryButtonText?: string; + variant?: 'default' | 'upload'; + showDivider?: boolean; + className?: string; + primaryButtonLink?: string; + secondaryButtonLink?: string; + onPrimaryClick?: () => void; + onSecondaryClick?: () => void; +} + +const ProductHeroSection: React.FC = ({ + badgeText = "ONE PLATFORM. FOUR PRODUCTS.", + headlineMain = "Everything Your Documents Need,", + headlineHighlight = "Under One Roof.", + description = "DocQube brings document management, PDF editing, workflow automation and e-signatures together — one login, one bill, one security model. Buy the whole suite and save up to ~55% versus buying modules separately.", + primaryButtonText = "START FREE TRIAL", + secondaryButtonText = "TALK TO SALES", + variant = 'default', + showDivider = true, + className = "", + primaryButtonLink, + secondaryButtonLink, + onPrimaryClick, + onSecondaryClick +}) => { + const defaultPadding = className.includes('pt-') || className.includes('pb-') || className.includes('py-') + ? '' + : 'pt-32 pb-24'; + + return ( +
+ + {/* Centered Background SquareBox */} +
+ +
+ +
+ + {/* Badge */} +
+ + {badgeText} +
+ + {/* Headline */} +

+ {headlineMain} {headlineHighlight} +

+ + {/* Description */} +

+ {description} +

+ + {/* Action Area */} + {variant === 'default' ? ( +
+ {primaryButtonLink ? ( + + {primaryButtonText} + + ) : ( + + )} + + {secondaryButtonLink ? ( + + {secondaryButtonText} + + ) : ( + + )} +
+ ) : ( +
+
+ Upload Cloud +
+ +

Drag & Drop A PDF Here

+ +

+ or choose a file — up to 25 MB, 50 pages on the free tier +

+ +
+ + + Cursor Click +
+
+ )} + +
+ + {/* Bottom Divider */} + {showDivider && ( + + )} +
+ ); +}; + +export default ProductHeroSection; diff --git a/src/app/(features)/Components/CustomPricingCards.tsx b/src/app/(features)/Components/CustomPricingCards.tsx new file mode 100644 index 0000000..f6fd7b7 --- /dev/null +++ b/src/app/(features)/Components/CustomPricingCards.tsx @@ -0,0 +1,97 @@ +"use client"; +import React from 'react'; + +export interface PricingPlan { + name: string; + price: string; + details: string; + buttonText: string; + features: string[]; + popular: boolean; +} + +export interface CustomPricingCardsProps { + plans: PricingPlan[]; + variant?: 'top-button' | 'bottom-button'; +} + +const CustomPricingCards: React.FC = ({ + plans, + variant = 'top-button' +}) => { + return ( +
+ {plans.map((plan, index) => ( +
+ {/* Top Section */} +
+
+

+ {plan.name} +

+ +
+ + {plan.price === 'Contact Us' ? '$00' : plan.price.startsWith('$') ? plan.price : `$${plan.price}`} + + + {plan.details.startsWith('/') ? plan.details : `/ ${plan.details}`} + +
+ + {/* Top Button Variant */} + {variant === 'top-button' && ( + + )} +
+
+ + {/* Features Section */} +
+

+ Included features: +

+
    + {plan.features.map((feature, fIndex) => ( +
  • +
    + + {feature} + +
  • + ))} +
+
+ + {/* Bottom Button Variant */} + {variant === 'bottom-button' && ( +
+ +
+ )} +
+ ))} +
+ ); +}; + +export default CustomPricingCards; diff --git a/src/app/(features)/Components/EnterpriseFeatures.tsx b/src/app/(features)/Components/EnterpriseFeatures.tsx new file mode 100644 index 0000000..9051ca2 --- /dev/null +++ b/src/app/(features)/Components/EnterpriseFeatures.tsx @@ -0,0 +1,209 @@ +"use client"; +import React from 'react'; +import Link from 'next/link'; +const dotBg = "/landing/DotBg.png"; +import { + ShieldCheck, + Server, + Lock, + FileOutput, + Search, + ClipboardList, + ArrowRight +} from 'lucide-react'; + +export interface EnterpriseFeatureItem { + title: string; + description: string; + icon?: any; // Accepting any for now, could be LucideIcon or similar + link?: string; + linkText?: string; +} + +export interface EnterpriseFeaturesProps { + badgeText?: string; + title?: string; + features?: EnterpriseFeatureItem[]; + bottomNote?: string; + primaryButtonText?: string; + variant?: 'default' | 'minimal'; + showBackground?: boolean; +} + +const defaultFeatures: EnterpriseFeatureItem[] = [ + // ... default features are fine ... + { + title: 'Role-based access', + description: 'Fine-grained RBAC with custom roles and access codes.', + icon: ShieldCheck + }, + { + title: 'Multi-tenant isolation', + description: "Each organization's data is scoped and isolated.", + icon: Server + }, + { + title: 'Encryption', + description: 'Encrypted in transit and at rest, with virus scanning on upload.', + icon: Lock + }, + { + title: 'Convert & export', + description: 'Convert PDF and images to editable formats; export to Word, HTML, XML and PDF.', + icon: FileOutput + }, + { + title: 'Smart search & OCR', + description: 'Find anything across your files, including scanned documents.', + icon: Search + }, + { + title: 'Audit & reporting', + description: 'A complete, exportable record of document activity.', + icon: ClipboardList + } +]; + +const EnterpriseFeatures: React.FC = ({ + badgeText = "ENTERPRISE", + title = "Governed By Design", + features = defaultFeatures, + bottomNote, + primaryButtonText, + variant = 'default', + showBackground = true +}) => { + if (!features || features.length === 0) return null; + + const isMinimal = variant === 'minimal'; + + return ( +
+
+ + {/* Header */} + {!isMinimal && ( +
+
+
+ {badgeText} +
+

+ {title} +

+
+ )} + + {/* Header for Minimal Variant - Badge Only */} + {isMinimal && badgeText && ( +
+
+
+ {badgeText} +
+
+ )} + + {/* Features Grid */} +
+ {features.map((feature, idx) => { + const Icon = feature.icon || ShieldCheck; // Fallback icon + return isMinimal ? ( + // Minimal Variant - Only Icon +
+
+ {typeof Icon === 'string' ? ( + + ) : ( + + )} +
+
+ ) : ( + // Default Variant - Full Card + feature.link ? ( + +
+
+ {typeof Icon === 'string' ? ( + + ) : ( + + )} +
+

+ {feature.title} +

+

+ {feature.description} +

+
+ +
+ {feature.linkText || 'Learn more'} + +
+ + ) : ( +
+
+ {typeof Icon === 'string' ? ( + + ) : ( + + )} +
+

+ {feature.title} +

+

+ {feature.description} +

+
+ ) + ); + })} +
+ + {/* Bottom Note */} + {!isMinimal && bottomNote && ( +
+

+ {bottomNote} +

+
+ )} + + {/* Action Button */} + {!isMinimal && primaryButtonText && ( +
+ +
+ )} + +
+
+ ); +}; + +export default EnterpriseFeatures; diff --git a/src/app/(features)/Components/Faq.tsx b/src/app/(features)/Components/Faq.tsx new file mode 100644 index 0000000..5d87513 --- /dev/null +++ b/src/app/(features)/Components/Faq.tsx @@ -0,0 +1,112 @@ +"use client"; +import React, { useState } from 'react'; +import { Plus, X } from 'lucide-react'; +const squareBoxBg = "/landing/SquareBox.png"; + +export interface FaqItem { + question: string; + answer: string; +} + +export interface FaqProps { + title?: string; + faqs: FaqItem[]; +} + +export const defaultHomeFaqs: FaqItem[] = [ + { + question: "Can I buy just one module?", + answer: "Yes. Buy any single module on its own — Drive, PDF Editor, Workflows or Sign. Each has its own plan and free trial, and each is also included in the DocQube Suite." + }, + { + question: "Is there a free plan?", + answer: "Yes, we offer a free tier with basic features so you can test out our core capabilities." + }, + { + question: "Can I upgrade from a module to the Suite later?", + answer: "Absolutely. You can easily upgrade from any individual module to the full DocQube Suite from your billing dashboard." + }, + { + question: "Is my data secure and where is it stored?", + answer: "We use end-to-end encryption for all data at rest and in transit. Your data is stored securely in compliant enterprise-grade cloud facilities." + } +]; + +const Faq: React.FC = ({ title = "Frequently Asked Questions", faqs }) => { + const [openIndex, setOpenIndex] = useState(0); + + const toggleFaq = (index: number) => { + setOpenIndex(openIndex === index ? null : index); + }; + + return ( +
+ {/* Top Left Background Box */} + + + {/* Bottom Right Background Box */} + + +
+ + {/* Header */} +
+

+ {title} +

+
+ + {/* FAQ Container Card */} +
+ {faqs.map((faq, index) => ( +
+ + +
+
+ {faq.answer} +
+
+
+ ))} +
+ +
+
+ ); +}; + +export default Faq; diff --git a/src/app/(features)/Components/Footer.tsx b/src/app/(features)/Components/Footer.tsx new file mode 100644 index 0000000..950a7cc --- /dev/null +++ b/src/app/(features)/Components/Footer.tsx @@ -0,0 +1,323 @@ +"use client"; +import React from "react"; +import Link from 'next/link'; +const footerBg = "/landing/FooterBg.png"; +const logoImg = "/landing/Logo.png"; + +export interface FooterProps { + title?: string; + description?: string; + primaryButtonText?: string; + primaryButtonLink?: string; + secondaryButtonText?: string; + secondaryButtonLink?: string; +} + +const Footer: React.FC = ({ + title = "Start managing documents the right way", + description = "Manage, edit, automate and sign — without switching tools.", + primaryButtonText = "GET STARTED", + primaryButtonLink = "/signup", + secondaryButtonText = "BOOK A DEMO", + secondaryButtonLink = "/demo", +}) => { + return ( +
+ {/* Background Graphic */} + + +
+ {/* Top Section (CTA) */} +
+

+ {title} +

+

+ {description} +

+
+ {primaryButtonText && ( + + {primaryButtonText} + + )} + {secondaryButtonText && ( + + {secondaryButtonText} + + )} +
+
+ + {/* Divider */} +
+ + {/* Middle Section (Links) */} +
+ {/* Brand Column */} +
+
+ DocQube + + DocQube + +
+

+ An Intelligent document platform – manage, edit, automate and + sign, under one login. A Product by Maskan Technologies Pvt. Ltd.. +

+
+ + {/* Links Columns */} +
+

+ Product +

+
    +
  • + + Platform / Suite + +
  • +
  • + + Drive + +
  • +
  • + + PDF Editor + +
  • +
  • + + Workflows + +
  • +
  • + + Sign + +
  • +
  • + + Free PDF Tools + +
  • +
+
+ +
+

+ Solutions +

+
    +
  • + + Enterprise + +
  • +
  • + + Legal + +
  • +
  • + + Real Estate + +
  • +
  • + + Operations + +
  • +
  • + + All Solutions + +
  • +
+
+ +
+

+ Resources +

+
    +
  • + + Resource Center + +
  • +
  • + + Documentation + +
  • +
  • + + Developers / API + +
  • +
  • + + Security + +
  • +
  • + + Support + +
  • +
+
+ +
+

+ Company +

+ +
+
+ + {/* Bottom Bar */} +
+
+ DocQube is a Product of Maskan Technologies Pvt. Ltd.. © 2026 Maskan + Technologies. All rights reserved +
+
+ + Privacy Policy + + + Terms of Service + + + Security + + + DPA + +
+
+
+
+ ); +}; + +export default Footer; diff --git a/src/app/(features)/Components/ModulePricingCards.tsx b/src/app/(features)/Components/ModulePricingCards.tsx new file mode 100644 index 0000000..f755c0d --- /dev/null +++ b/src/app/(features)/Components/ModulePricingCards.tsx @@ -0,0 +1,80 @@ +"use client"; +import React from 'react'; + +export interface ModulePlan { + title: string; + price: string; + details: string; + subtitle: string; + description: string; +} + +interface ModulePricingCardsProps { + modules: ModulePlan[]; +} + +const ModulePricingCards: React.FC = ({ modules }) => { + return ( +
+
+ {modules.map((mod, idx) => ( +
+ {/* Top Inner Card */} +
+

+ {mod.title} +

+ +
+ + ${mod.price} + + + {mod.details.startsWith('/') ? mod.details : `/ ${mod.details}`} + +
+ +
+ {mod.subtitle} +
+
+ + {/* Bottom Description Area */} +
+

+ {mod.description} +

+
+
+ ))} +
+ + {/* Yellow Tip Banner */} +
+

+ 💡 Buying three or more modules? The full Suite Professional is $11/user/mo — less than half the ~$26 of buying all four separately.{' '} + + See the Suite → + +

+
+ + {/* Bundle CTA Button */} +
+ +
+
+ ); +}; + +export default ModulePricingCards; diff --git a/src/app/(features)/Components/Navbar.tsx b/src/app/(features)/Components/Navbar.tsx new file mode 100644 index 0000000..26d1cf2 --- /dev/null +++ b/src/app/(features)/Components/Navbar.tsx @@ -0,0 +1,480 @@ +"use client"; +import React, { useState, useEffect } from "react"; +import Link from 'next/link'; +import { usePathname } from 'next/navigation'; +import { Menu, X, ChevronDown } from "lucide-react"; + +const Navbar: React.FC = () => { + const [isOpen, setIsOpen] = useState(false); + const [scrolled, setScrolled] = useState(false); + const location = usePathname(); + + useEffect(() => { + const handleScroll = () => { + setScrolled(window.scrollY > 20); + }; + window.addEventListener("scroll", handleScroll); + return () => window.removeEventListener("scroll", handleScroll); + }, []); + + const isActive = (path?: string) => { + if (!path) return false; + return location === path; + }; + + const navLinks: { name: string; href?: string; hasDropdown?: boolean }[] = [ + { name: "Home", href: "/" }, + { name: "Product", hasDropdown: true }, + { name: "Solutions", href: "/solutions", hasDropdown: true }, + { name: "Pricing", href: "/pricing" }, + { name: "Resources", href: "/blog", hasDropdown: true }, + { name: "Security", href: "/security" }, + { name: "Contact Us", href: "/contact" }, + ]; + + return ( + + ); +}; + +export default Navbar; diff --git a/src/app/(features)/Components/SectionBadge.tsx b/src/app/(features)/Components/SectionBadge.tsx new file mode 100644 index 0000000..45f6a5c --- /dev/null +++ b/src/app/(features)/Components/SectionBadge.tsx @@ -0,0 +1,18 @@ +"use client"; +import React from 'react'; + +interface SectionBadgeProps { + text: string; +} + +const SectionBadge: React.FC = ({ text }) => { + return ( +
+ + {text} + +
+ ); +}; + +export default SectionBadge; diff --git a/src/app/(features)/Components/SectionDivider.tsx b/src/app/(features)/Components/SectionDivider.tsx new file mode 100644 index 0000000..9cc2224 --- /dev/null +++ b/src/app/(features)/Components/SectionDivider.tsx @@ -0,0 +1,27 @@ +"use client"; +import React from 'react'; + +const SectionDivider: React.FC = () => { + return ( +
+
+ {/* Left Decorative Element */} +
+
+
+
+ + {/* Central Line */} +
+ + {/* Right Decorative Element */} +
+
+
+
+
+
+ ); +}; + +export default SectionDivider; diff --git a/src/app/(features)/ContactPage/MainContactPage.tsx b/src/app/(features)/ContactPage/MainContactPage.tsx new file mode 100644 index 0000000..e76de3b --- /dev/null +++ b/src/app/(features)/ContactPage/MainContactPage.tsx @@ -0,0 +1,483 @@ +"use client"; +import { Suspense, useState, useEffect } from "react"; +import { usePathname, useSearchParams } from 'next/navigation'; +import { Sparkles, Headset, CalendarDays, LifeBuoy } from "lucide-react"; +const squareBoxBg = "/landing/SquareBox.png"; +import Navbar from "../Components/Navbar"; +import Footer from "../Components/Footer"; + +const MainContactPageContent = () => { + const pathname = usePathname() || ""; + const searchParams = useSearchParams(); + const [view, setView] = useState<"main" | "sales" | "demo">("main"); + + useEffect(() => { + const path = pathname.toLowerCase(); + const search = searchParams.toString().toLowerCase(); + + if (path.includes("/demo") || path.includes("/book-a-demo") || search.includes("type=demo")) { + setView("demo"); + } else if (search.includes("type=sales")) { + setView("sales"); + } else { + setView("main"); + } + }, [pathname, searchParams]); + + return ( + <> + +
+
+ {/* Title */} +

+ Contact Us +

+ + {view === "main" ? ( + <> + {/* Main Grid */} +
+ {/* Left Panel - Info */} +
+
+ + CONTACT +
+ +

+ Get in touch +

+

+ Questions about DocQube, your account or a partnership? Send us + a message and the right person will get back to you. +

+ +
+
+ + General: + + + hello@docqube.com + +
+
+ + Sales: + + + sales@docqube.com + +
+
+ + Support: + + + support@docqube.com + +
+
+ + Privacy: + + + privacy@docqube.com + +
+
+ +
+

+ Maskan Technologies Private Limited +

+

+ No. 1776, Ground Floor, 15th Main, 5th Block, 1st Stage, + Kalyananagar, Bangalore +

+

North, Bangalore 560043, Karnataka, India

+

CIN: U62020KA2023PTC172104

+
+
+ + {/* Right Panel - Form */} +
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ +
+
+
+
+ + {/* Bottom Cards Grid */} +
+ {/* Card 1 */} +
setView("sales")} + > +
+ +
+

+ Talk to sales +

+

+ Pricing, plans and enterprise deployment. +

+
+ + {/* Card 2 */} +
setView("demo")} + > +
+ +
+

+ Book a demo +

+

+ See DocQube on your own documents. +

+
+ + {/* Card 3 */} +
+
+ +
+

+ Support +

+

+ Help with your existing account. +

+
+
+ + ) : view === "sales" ? ( + <> + {/* Sales View */} +
+ {/* Left Panel - Info */} +
+
+ + TALK TO SALES +
+ +

+ Let's find your right setup +

+

+ Tell us what your team does with documents and how many people are involved. We'll recommend the right modules or the full Suite — and set up a trial. +

+ +
    +
  • +
    + Personalised plan recommendation +
  • +
  • +
    + Volume and enterprise pricing +
  • +
  • +
    + Dedicated or on-premise deployment +
  • +
  • +
    + Security & compliance review +
  • +
+ +
+

+ Maskan Technologies Private Limited +

+

+ No. 1776, Ground Floor, 15th Main, 5th Block, 1st Stage, + Kalyananagar, Bangalore +

+

North, Bangalore 560043, Karnataka, India

+

CIN: U62020KA2023PTC172104

+
+
+ + {/* Right Panel - Form */} +
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ +
+
+
+
+ + ) : ( + <> + {/* Demo View */} +
+ {/* Left Panel - Info */} +
+
+ + BOOK A DEMO +
+ +

+ See DocQube in action +

+

+ A guided walkthrough of Drive, PDF Editor, Workflows and Sign — on documents and workflows like yours. About 30 minutes, no obligation. +

+ +
    +
  • +
    + Tailored to your team's use case +
  • +
  • +
    + See the AI assistant and true-reflow editor live +
  • +
  • +
    + Q&A on security, deployment and pricing +
  • +
+ +
+

+ Maskan Technologies Private Limited +

+

+ No. 1776, Ground Floor, 15th Main, 5th Block, 1st Stage, + Kalyananagar, Bangalore +

+

North, Bangalore 560043, Karnataka, India

+

CIN: U62020KA2023PTC172104

+
+
+ + {/* Right Panel - Form */} +
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ +
+
+
+
+ + )} +
+
+
+ + ); +}; + +const MainContactPage = () => { + return ( + Loading...
}> + + + ); +}; + +export default MainContactPage; diff --git a/src/app/(features)/HomePage/Index.tsx b/src/app/(features)/HomePage/Index.tsx new file mode 100644 index 0000000..975e0f3 --- /dev/null +++ b/src/app/(features)/HomePage/Index.tsx @@ -0,0 +1,38 @@ +"use client"; +import React from "react"; +import Navbar from "../Components/Navbar"; +import Footer from "../Components/Footer"; +import HeroSection from "./components/HeroSection"; +import ProductsSection from "./components/ProductsSection"; +import ProblemsSection from "./components/Problems"; +import FeaturesSection from "./components/Features"; +import OpenEditor from "./components/OpenEditor"; +import HowItsWork from "./components/HowItsWork"; +import Security from "./components/Security"; +import Pricing from "./components/Pricing"; +import Faq, { defaultHomeFaqs } from "../Components/Faq"; +import Blogs from "./components/Blogs"; +const LandingPage: React.FC = () => { + return ( +
+ +
+ + + + + + + + + + + + +
+
+
+ ); +}; + +export default LandingPage; diff --git a/src/app/(features)/HomePage/components/Blogs.tsx b/src/app/(features)/HomePage/components/Blogs.tsx new file mode 100644 index 0000000..557507f --- /dev/null +++ b/src/app/(features)/HomePage/components/Blogs.tsx @@ -0,0 +1,130 @@ +"use client"; +import React from 'react'; +import { ArrowUpRight } from 'lucide-react'; + +const LargeBlogCard = () => { + return ( +
+ {/* Image Side */} +
+ {/* Placeholder Pattern */} +
+ + {/* Overlay Text */} +
+

Written by name

+

Date article published

+
+
+ + {/* Text Side */} +
+

+ Lorem ipsum dolor sit amet, consectetur adipiscing elit +

+

+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. +

+
+ +
+
+
+ ); +}; + +const SmallBlogCard = () => { + return ( +
+ {/* Image Side */} +
+ {/* Placeholder Pattern */} +
+
+ + {/* Text Side */} +
+

+ Lorem ipsum dolor sit amet, consectetur adipiscing elit +

+

+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. +

+
+ +
+
+
+ ); +}; + +const Blogs: React.FC = () => { + return ( +
+
+ + {/* Header */} +
+

+ Blogs +

+
+ + {/* Grid Container */} +
+ + {/* Card Group 1 (Large) */} +
+ +
+ + {/* Card Group 2 (Stacked Small) */} +
+ + +
+ + {/* Card Group 3 (Large) */} +
+ +
+ +
+ +
+ + {/* Global style to hide scrollbar but keep functionality */} + +
+ ); +}; + +export default Blogs; diff --git a/src/app/(features)/HomePage/components/CTA.tsx b/src/app/(features)/HomePage/components/CTA.tsx new file mode 100644 index 0000000..70a7e45 --- /dev/null +++ b/src/app/(features)/HomePage/components/CTA.tsx @@ -0,0 +1,68 @@ +"use client"; +import React from 'react'; +import Link from 'next/link'; +import { ArrowUpRight } from 'lucide-react'; + +const bgImage = "/landing/DotBg.png"; +const dashboardImage = "/dashboardimage.png"; + +const CTA: React.FC = () => { + return ( +
+
+
+ {/* Main Heading */} +

+ Start managing documents
the right way +

+ + {/* Subheading */} +

+ Join 10,000+ teams using DocQube to reclaim their time and
secure their intellectual property. +

+ + {/* Action Buttons */} +
+ + Get started for free +
+ +
+ + + Book Demo + +
+ + {/* Dashboard Preview */} +
+
+
+ DocQube Dashboard +
+
+
+
+
+ ); +}; + +export default CTA; diff --git a/src/app/(features)/HomePage/components/Features.tsx b/src/app/(features)/HomePage/components/Features.tsx new file mode 100644 index 0000000..1a09b8e --- /dev/null +++ b/src/app/(features)/HomePage/components/Features.tsx @@ -0,0 +1,132 @@ +"use client"; +import React from 'react'; +const feature1 = "/landing/homePage/feature1.png"; +const feature2 = "/landing/homePage/feature2.png"; +const feature3 = "/landing/homePage/feature3.png"; +const feature4 = "/landing/homePage/feature4.png"; +const feature5 = "/landing/homePage/feature5.png"; +const feature6 = "/landing/homePage/feature6.png"; +const squareBoxBg = "/landing/SquareBox.png"; + +const features = [ + { + title: 'AI & Automation', + description: 'Ask questions across your documents, auto-index and summarize, automate approvals.', + image: feature1, + size: 'tall', // Column 1 - Top + }, + { + title: 'Secure & Compliant', + description: 'Encryption, tamper-evident audit logs, virus scanning on every upload.', + image: feature2, + size: 'short', // Column 2 - Top + }, + { + title: 'Collaboration', + description: 'Real-time editing, inline threaded comments, granular sharing.', + image: feature3, + size: 'short', // Column 3 - Top + }, + { + title: 'Centralized Control', + description: 'Role-based access, multi-tenant isolation, one admin plane.', + image: feature4, + size: 'short', // Column 1 - Bottom + }, + { + title: 'Execution & Signing', + description: 'Legally-binding signatures with verification, powered by Zoho Sign & DocuSeal.', + image: feature5, + size: 'tall', // Column 2 - Bottom + }, + { + title: 'Smart search & OCR', + description: 'Find anything; make scanned documents searchable and editable.', + image: feature6, + size: 'tall', // Column 3 - Bottom + }, +]; + +const FeaturesSection: React.FC = () => { + return ( +
+ {/* Top Left Background Box */} + + + {/* Bottom Right Background Box */} + + +
+ + {/* Badge */} +
+
+ ONE PLATFORM, EVERY CAPABILITY +
+ + {/* Header */} +
+

+ Built For The Whole Document Lifecycle +

+
+ + {/* Bento Grid */} +
+ {/* Column 1 */} +
+ + +
+ + {/* Column 2 */} +
+ + +
+ + {/* Column 3 */} +
+ + +
+
+
+
+ ); +}; + +interface FeatureCardProps { + feature: typeof features[0]; +} + +const FeatureCard: React.FC = ({ feature }) => { + return ( +
+
+

{feature.title}

+

+ {feature.description} +

+
+ +
+ {feature.title} +
+
+ ); +}; + +export default FeaturesSection; diff --git a/src/app/(features)/HomePage/components/HeroSection.tsx b/src/app/(features)/HomePage/components/HeroSection.tsx new file mode 100644 index 0000000..00e8074 --- /dev/null +++ b/src/app/(features)/HomePage/components/HeroSection.tsx @@ -0,0 +1,99 @@ +"use client"; +import React from 'react'; +import { Sparkles } from 'lucide-react'; +const dashboardImage = "/dashboardimage.png"; +const backgroundImage = "/landing/HeroBg.png"; +import Button from '../../Components/Button'; + +const HeroSection: React.FC = () => { + return ( +
+
+
+ + {/* Left Column: Content */} +
+ {/* Badge */} +
+ + NEW · AI AUTO-INDEXING +
+ + {/* Heading */} +

+ All Your Documents. + One Intelligent System. +

+ + {/* Subtitle */} +

+ Manage, edit, automate and sign — without switching tools. Run the whole + platform, or start with the single module you need. +

+ + {/* Buttons */} +
+ + +
+
+ + {/* Right Column: Shuffled Images */} +
+ {/* Decorative Glow */} +
+ + {/* Image 4 (Back-most, Left) */} +
+
+ Dashboard view 4 +
+ + {/* Image 3 (Back-most, Right) */} +
+
+ Dashboard view 3 +
+ + {/* Image 2 (Middle, slightly left) */} +
+
+ Dashboard view 2 +
+ + {/* Image 1 (Front-most) */} +
+ Dashboard main view +
+
+ +
+
+
+ ); +}; + +export default HeroSection; diff --git a/src/app/(features)/HomePage/components/HowItsWork.tsx b/src/app/(features)/HomePage/components/HowItsWork.tsx new file mode 100644 index 0000000..603abdd --- /dev/null +++ b/src/app/(features)/HomePage/components/HowItsWork.tsx @@ -0,0 +1,118 @@ +"use client"; +import React from "react"; +const howworks1 = "/landing/homePage/howworks1.png"; +const howworks2 = "/landing/homePage/howworks2.png"; +const howworks3 = "/landing/homePage/howworks3.png"; +const howworks4 = "/landing/homePage/howworks4.png"; + +const squareBoxBg = "/landing/SquareBox.png"; + +const steps = [ + { + number: "1", + title: "Upload", + description: + "Upload documents or sync directly from your existing cloud storage. DocQube auto indexes everything on arrival", + image: howworks1, + }, + { + number: "2", + title: "Extract & edit", + description: + "Convert, edit text with true reflow, and let AI index the content.", + image: howworks2, + }, + { + number: "3", + title: "Validate & approve", + description: + "Route it for review and collect approvals — every step tracked.", + image: howworks3, + }, + { + number: "4", + title: "Sign & export", + description: + "Capture legally-binding signatures and export in the format you need.", + image: howworks4, + }, +]; + +const HowItsWork: React.FC = () => { + return ( +
+ {/* Top Left Background Box */} + + + {/* Bottom Right Background Box */} + + +
+ {/* Badge */} +
+
+ SIMPLE, STRUCTURED, EFFICIENT +
+ + {/* Header */} +
+

+ From Upload To Signed, In Four Steps +

+
+ + {/* Steps Grid */} +
+ {steps.map((step, index) => ( +
+
+ + {index + 1}. + +
+

+ {step.title} +

+

+ {step.description} +

+
+
+ +
+
+ {step.title} +
+
+
+ ))} +
+
+
+ ); +}; + +export default HowItsWork; diff --git a/src/app/(features)/HomePage/components/OpenEditor.tsx b/src/app/(features)/HomePage/components/OpenEditor.tsx new file mode 100644 index 0000000..89b5654 --- /dev/null +++ b/src/app/(features)/HomePage/components/OpenEditor.tsx @@ -0,0 +1,56 @@ +"use client"; +import React from 'react'; +import Button from '../../Components/Button'; +const cloudArrowUp = "/landing/CloudArrowUp.png"; +const cursorClick = "/landing/CursorClick.png"; + +const OpenEditor: React.FC = () => { + return ( +
+
+ + {/* Custom Dashed Border Container */} +
+ + {/* Icon */} +
+ Upload Cloud +
+ + {/* Heading */} +

+ Try It Right Now — + No Signup +

+ + {/* Description */} +

+ Drop a PDF to edit it free in your browser. Add text, images, highlights and a signature, reorder pages, then export — no watermark. +

+ + {/* Button with Cursor */} +
+ + + {/* Cursor Icon */} + Cursor Click +
+ +
+
+
+ ); +}; + +export default OpenEditor; diff --git a/src/app/(features)/HomePage/components/Platform.tsx b/src/app/(features)/HomePage/components/Platform.tsx new file mode 100644 index 0000000..6d9f295 --- /dev/null +++ b/src/app/(features)/HomePage/components/Platform.tsx @@ -0,0 +1,70 @@ +"use client"; +import React from 'react'; +import SectionBadge from '../../Components/SectionBadge'; +const enterprise = "/enterprise.png"; +const legalterms = "/legalterms.png"; +const realestate = "/realestate.png"; +const operations = "/operations.png"; + +const industries = [ + { + title: 'Enterprises', + description: 'Scale documentation across global departments with centralised governance, role-based access, and real-time audit trails.', + image: enterprise, + }, + { + title: 'Legal Teams', + description: 'Manage complex contracts, track renewal dates automatically, and maintain audit-ready matter trails — without the fire drill', + image: legalterms, + }, + { + title: 'Real Estate', + description: 'Accelerate closings with automated document collection, AI-powered validation, and integrated e-signing.', + image: realestate, + }, + { + title: 'Operations', + description: 'Streamline standard operating procedures and internal knowledge bases. Keep institutional knowledge where it belongs in the system.', + image: operations, + }, +]; + +const PlatformSection: React.FC = () => { + return ( +
+
+ {/* Badge */} + + + {/* Header */} +
+

+ Built for Teams Across Industries +

+
+ + {/* Industries Grid */} +
+ {industries.map((industry, index) => ( +
+
+ {industry.title} +
+
+

{industry.title}

+

+ {industry.description} +

+
+
+ ))} +
+
+
+ ); +}; + +export default PlatformSection; diff --git a/src/app/(features)/HomePage/components/Pricing.tsx b/src/app/(features)/HomePage/components/Pricing.tsx new file mode 100644 index 0000000..f4da502 --- /dev/null +++ b/src/app/(features)/HomePage/components/Pricing.tsx @@ -0,0 +1,96 @@ +"use client"; +import React from 'react'; +const squareBoxBg = "/landing/SquareBox.png"; +import CustomPricingCards from '../../Components/CustomPricingCards'; + +const plans = [ + { + name: 'Standard', + price: '29', + details: '/ month . 1 user', + buttonText: 'View Details', + features: [ + '100 GB Storage', + 'Basic version control', + 'Audit logging included', + 'Standard support', + 'Unlimited SES', + 'Legal E-signatures', + ], + popular: false, + }, + { + name: 'Professional plan', + price: '89', + details: '/ month . 1 user', + buttonText: 'View Details', + features: [ + '1 TB Storage', + 'Unlimited e-signatures (SES)', + 'Full AI engine - extraction, chatbot, OCR', + 'Inline comments & annotations', + 'Standard support', + ], + popular: false, // Changed from true based on screenshot + }, + { + name: 'Business', + price: 'X', + details: '/ month . Unlimited users', + buttonText: 'View Details', + features: [ + 'Everything in Professional', + 'Unlimited storage', + 'Granular team permissions & roles', + 'Custom API access', + 'Advanced workflow automation', + 'Priority support & SLA', + ], + popular: false, + }, +]; + +const Pricing: React.FC = () => { + return ( +
+ + {/* Top Left Background Box */} + + + {/* Bottom Right Background Box */} + + +
+ + {/* Badge */} +
+
+ PAY FOR WHAT YOU USE +
+ + {/* Header */} +
+

+ Scale As You Grow +

+

+ Choose the plan that fits your current needs. +

+
+ + {/* Pricing Cards */} + +
+
+ ); +}; + +export default Pricing; diff --git a/src/app/(features)/HomePage/components/Problems.tsx b/src/app/(features)/HomePage/components/Problems.tsx new file mode 100644 index 0000000..6b7ff30 --- /dev/null +++ b/src/app/(features)/HomePage/components/Problems.tsx @@ -0,0 +1,91 @@ +"use client"; +import React from 'react'; +const problem1 = "/landing/homePage/problem1.png"; +const problem2 = "/landing/homePage/problem2.png"; +const problem3 = "/landing/homePage/problem3.png"; +const problem4 = "/landing/homePage/problem4.png"; + +const dotBg = "/landing/DotBg.png"; + +const problems = [ + { + title: 'Too many tools', + description: 'Storage here, editing there, signing else where — nothing talks to each other.', + image: problem1, + }, + { + title: 'Version confusion', + description: 'Which file is final? Who changed what, and when?', + image: problem2, + }, + { + title: 'Risky Sharing', + description: 'Links with no expiry, no permissions, no audit trail.', + image: problem3, + }, + { + title: 'No Visibility', + description: 'No single record of who accessed, edited or signed a document.', + image: problem4, + }, +]; + +const ProblemsSection: React.FC = () => { + return ( +
+ {/* Dot Pattern Background */} +
+ +
+ + {/* Badge */} +
+
+ THE PROBLEM +
+ + {/* Header */} +

+ Managing Documents Shouldn’t Feel This Complicated +

+ + {/* Problems Grid */} +
+ {problems.map((problem, index) => ( +
+ {/* Image Container */} +
+ {problem.title} +
+ + {/* Text Container */} +
+

{problem.title}

+

+ {problem.description} +

+
+
+ ))} +
+
+
+ ); +}; + +export default ProblemsSection; diff --git a/src/app/(features)/HomePage/components/ProductsSection.tsx b/src/app/(features)/HomePage/components/ProductsSection.tsx new file mode 100644 index 0000000..2773ea6 --- /dev/null +++ b/src/app/(features)/HomePage/components/ProductsSection.tsx @@ -0,0 +1,76 @@ +"use client"; +import React from 'react'; +import { Sparkles } from 'lucide-react'; +import Button from '../../Components/Button'; + +const products = [ + { + title: 'DocQube Drive', + description: 'Store, version, share and collaborate — with an AI that answers questions about your files.', + }, + { + title: 'DocQube PDF Editor', + description: 'Edit any PDF in your browser with true text reflow — free to start, no signup.', + }, + { + title: 'DocQube Workflows', + description: 'Route documents for review, collect approvals and trigger signatures automatically.', + }, + { + title: 'DocQube Sign', + description: 'Send, sign and track legally-binding e-signatures with verification built in.', + } +]; + +const ProductsSection: React.FC = () => { + return ( +
+
+ + {/* Header */} +
+
+ + ONE PLATFORM. FOUR PRODUCTS. +
+

+ Pick Where You Want To Start +

+

+ Each product stands on its own, works better together, and is included in the DocQube Suite. +

+
+ + {/* Product Grid */} +
+ {products.map((product, idx) => ( +
+

{product.title}

+

+ {product.description} +

+
+ ))} +
+ + {/* Bottom Banner */} +
+
+

Want it all? Meet the DocQube Suite

+

+ Every module under one login, one bill, one security model — save up to ~55% vs. buying separately. +

+
+
+ +
+
+ +
+
+ ); +}; + +export default ProductsSection; diff --git a/src/app/(features)/HomePage/components/Security.tsx b/src/app/(features)/HomePage/components/Security.tsx new file mode 100644 index 0000000..00a096c --- /dev/null +++ b/src/app/(features)/HomePage/components/Security.tsx @@ -0,0 +1,116 @@ +"use client"; +import React from 'react'; +const mindMapImg = "/landing/MindMap.png"; +const logoImg = "/landing/Logo.png"; +const dotBg = "/landing/DotBg.png"; + +const Security: React.FC = () => { + return ( +
+ +
+ + {/* Badge */} +
+
+ BUILT WITH SECURITY AT ITS CORE +
+ + {/* Header */} +
+

+ Your Documents, Protected +

+
+ + {/* Interactive Graphic Area */} +
+ + {/* Central Graphics */} +
+ + {/* Logo */} + DocQube Logo + + {/* MindMap Lines */} + Security Network + +
+ + {/* Feature Cards - Absolute positioned for Desktop, Flex for Mobile */} +
+ + {/* Audit logs (Left 1) */} +
+
+

Audit logs

+

+ A tamper-evident history of every access, edit and share event. +

+
+
+ + {/* Automated Backups (Right 1) */} +
+
+

Automated Backups

+

+ Daily automated snapshots distributed across regions. Point-in-time recovery when you need it. +

+
+
+ + {/* Virus scanning (Left 2) */} +
+
+

Virus scanning

+

+ Real-time threat detection on every file upload — before anything enters your environment +

+
+
+ + {/* Secure email (Right 2) */} +
+
+

Secure email

+

+ Encrypted document delivery with full link tracking. Know exactly when your documents are opened. +

+
+
+
+
+ + {/* Footer Text */} +
+

+ Built to GDPR and HIPAA principles · encryption in transit and at rest.{' '} + + Visit the Security & Trust center → + +

+
+ +
+
+ ); +}; + +export default Security; diff --git a/src/app/(features)/Pricing/components/DocumentsProtected.tsx b/src/app/(features)/Pricing/components/DocumentsProtected.tsx new file mode 100644 index 0000000..7e3dc5b --- /dev/null +++ b/src/app/(features)/Pricing/components/DocumentsProtected.tsx @@ -0,0 +1,30 @@ +"use client"; +import React from 'react'; + +const DocumentsProtected: React.FC = () => { + return ( +
+
+ {/* Custom Dashed Border Container */} +
+

+ Your Documents, Protected +

+

+ Encryption at rest & in transit · tamper-evident audit logs · virus scanning on every upload · role-based access control · automated backups. Built to GDPR and HIPAA principles. +

+

+ Cancel anytime. No lock-in. Export your data whenever you want. +

+
+
+
+ ); +}; + +export default DocumentsProtected; diff --git a/src/app/(features)/Pricing/components/FeatureComparisonTable.tsx b/src/app/(features)/Pricing/components/FeatureComparisonTable.tsx new file mode 100644 index 0000000..6a754fe --- /dev/null +++ b/src/app/(features)/Pricing/components/FeatureComparisonTable.tsx @@ -0,0 +1,106 @@ +"use client"; +import React from 'react'; +import { Check, X } from 'lucide-react'; +const logoImg = "/landing/Logo.png"; + +export interface FeatureRow { + name: string; + standard: string | boolean; + professional: string | boolean; + business: string | boolean; + enterprise: string | boolean; +} + +interface FeatureComparisonTableProps { + features: FeatureRow[]; +} + +const FeatureComparisonTable: React.FC = ({ features }) => { + const renderCell = (value: string | boolean, isHighlighted: boolean) => { + if (typeof value === 'boolean') { + return value ? ( + + ) : ( + + ); + } + return ( + + {value} + + ); + }; + + return ( +
+
+ {/* Table Container with relative positioning */} +
+ + {/* Continuous Overlay Box for Professional Column */} +
+
+ POPULAR +
+
+ + {/* Table Header */} +
+
+ DocQube + + DocQube Features + +
+
Starter
+
Professional
+
Business
+
Enterprise
+
+ + {/* Table Body Rows */} +
+ {features.map((feature, idx) => ( +
+
+ {feature.name} +
+
+ {renderCell(feature.standard, false)} +
+
+ {renderCell(feature.professional, true)} +
+
+ {renderCell(feature.business, false)} +
+
+ {renderCell(feature.enterprise, false)} +
+
+ ))} +
+ +
+ + {/* Footnote */} +
+

+ Feature availability reflects current product capabilities. Some deployment options are on request — contact sales. +

+
+
+
+ ); +}; + +export default FeatureComparisonTable; diff --git a/src/app/(features)/Pricing/data.ts b/src/app/(features)/Pricing/data.ts new file mode 100644 index 0000000..aec6126 --- /dev/null +++ b/src/app/(features)/Pricing/data.ts @@ -0,0 +1,135 @@ +"use client"; +import { PricingPlan } from '../Components/CustomPricingCards'; +import { ModulePlan } from '../Components/ModulePricingCards'; +import { FeatureRow } from './components/FeatureComparisonTable'; +import { FaqItem } from '../Components/Faq'; + +export const suitePlans: PricingPlan[] = [ + { + name: 'Standard', + price: '29', + details: '/ month . 1 user', + buttonText: 'Start 14-day free trial', + features: [ + '100 GB Storage', + 'Basic version control', + 'Audit logging included', + 'Standard support', + 'Unlimited SES', + 'Legal E-signatures', + ], + popular: false, + }, + { + name: 'Professional Suite', + price: '89', + details: '/ month . 1 user', + buttonText: 'Start 14-day free trial', + features: [ + '1 TB Storage', + 'Unlimited e-signatures (SES)', + 'Full AI engine - extraction, chatbot, OCR', + 'Inline comments & annotations', + 'Standard support', + ], + popular: true, + }, + { + name: 'Business', + price: 'X', + details: '/ month . Unlimited users', + buttonText: 'Contact sales for pricing', + features: [ + 'Everything in Professional', + 'Unlimited storage', + 'Granular team permissions & roles', + 'Custom API access', + 'Advanced workflow automation', + 'Priority support & SLA', + ], + popular: false, + }, + { + name: 'Enterprise', + price: 'Contact Us', + details: '/ month . Unlimited users', + buttonText: 'Contact sales to discuss', + features: [ + 'Everything in Business', + 'Dedicated instance / On-prem', + 'Custom integrations', + 'White-labeling', + '24/7 dedicated support', + 'Advanced compliance (HIPAA/SOC2)', + ], + popular: false, + } +]; + +export const modulePlans: ModulePlan[] = [ + { + title: 'Drive', + price: '29', + details: '/ month . 1 user', + subtitle: 'Included in the Suite', + description: 'Storage, versioning, sharing, collaboration, audit trails and an AI assistant for your files.', + }, + { + title: 'PDF Editor', + price: '29', + details: '/ month . 1 user', + subtitle: 'Included in the Suite', + description: 'Free forever within limits, no watermark. Pro adds larger files, OCR, redaction, batch and save-to-Drive.', + }, + { + title: 'Workflows', + price: '29', + details: '/ month . 1 user', + subtitle: 'Included in the Suite', + description: 'Route, approve and trigger signatures — every step tracked.', + }, + { + title: 'Sign', + price: '29', + details: '/ month . 1 user', + subtitle: 'Included in the Suite', + description: 'Legally-binding e-signatures with verification, or pay per envelope.', + } +]; + +export const comparisonFeatures: FeatureRow[] = [ + { name: 'Drive (DMS)', standard: true, professional: true, business: true, enterprise: true }, + { name: 'PDF Editor', standard: 'Basic', professional: 'Pro', business: 'Pro', enterprise: 'Pro' }, + { name: 'Workflows', standard: false, professional: true, business: true, enterprise: true }, + { name: 'Sign', standard: 'Limited', professional: true, business: true, enterprise: true }, + { name: 'Storage', standard: '100 GB', professional: '1 TB', business: 'Unlimited', enterprise: 'Unlimited' }, + { name: 'Version history & retention', standard: true, professional: true, business: true, enterprise: true }, + { name: 'Doc conversion (PDF → Word/HTML/XML)', standard: false, professional: true, business: true, enterprise: true }, + { name: 'Real-time collaboration', standard: false, professional: true, business: true, enterprise: true }, + { name: 'Virus scanning', standard: 'Basic', professional: 'Standard', business: 'Granular', enterprise: 'Advanced' }, + { name: 'Granular roles (RBAC)', standard: true, professional: 'Google', business: 'Google', enterprise: 'SSO / SAML' }, + { name: 'SSO', standard: false, professional: true, business: true, enterprise: true }, + { name: 'AI chatbot (document Q&A)', standard: false, professional: true, business: true, enterprise: true }, + { name: 'OCR & extraction', standard: false, professional: true, business: true, enterprise: true }, + { name: 'Signature verification', standard: false, professional: true, business: true, enterprise: true }, + { name: 'Support', standard: 'Standard', professional: 'Standard', business: 'Priority + SLA', enterprise: 'Dedicated manager' }, +]; + +export const pricingFaqs: FaqItem[] = [ + { + question: "Does the AI assistant use my documents to train models?", + answer: "No. We have a strict commitment that client data is never used to train, fine-tune or improve any AI or machine-learning models. This survives termination." + }, + { + question: "Can I recover a previous version of a document?", + answer: "Yes, our Drive module automatically keeps full version history. You can restore previous versions at any time." + }, + { + question: "How is access controlled?", + answer: "Access is controlled through role-based access control (RBAC), multi-tenant isolation, and the principle of least privilege." + }, + { + question: "Are you SOC 2 / HIPAA / GDPR certified?", + answer: "DocQube is built to GDPR and HIPAA principles with SOC 2-aligned controls. Contact us for our current formal certification status." + } +]; diff --git a/src/app/(features)/Pricing/index.tsx b/src/app/(features)/Pricing/index.tsx new file mode 100644 index 0000000..7912f90 --- /dev/null +++ b/src/app/(features)/Pricing/index.tsx @@ -0,0 +1,148 @@ +"use client"; +import React from "react"; +import Navbar from "../Components/Navbar"; +import Footer from "../Components/Footer"; +import CustomHeroSection from "../Components/CustomHeroSection"; +import CustomPricingCards from "../Components/CustomPricingCards"; +import ModulePricingCards from "../Components/ModulePricingCards"; +import FeatureComparisonTable from "./components/FeatureComparisonTable"; +import DocumentsProtected from "./components/DocumentsProtected"; +import Faq from "../Components/Faq"; + +import { + suitePlans, + modulePlans, + comparisonFeatures, + pricingFaqs, +} from "./data"; +const dotBg = "/landing/DotBg.png"; +const squareBoxBg = "/landing/SquareBox.png"; +import { Sparkles } from "lucide-react"; + +const PricingPage: React.FC = () => { + return ( +
+ + +
+ {/* Hero Section */} + + + {/* The Suite Pricing Section */} +
+ {/* Top Left Background Box */} + + + {/* Bottom Right Background Box */} + + +
+
+
+ + DOCUMENT AI +
+

+ One Platform. Everything Included. +

+
+ +
+ +
+ +
+

+ Minimum seats may apply per tier. Storage is pooled across your + team. +

+
+
+
+ + {/* The Module Pricing Section */} +
+
+
+
+
+
+ BY MODULE +
+

+ Only Need One Thing? Buy Just That. +

+
+ + +
+
+ + {/* Feature Comparison Section */} +
+ {/* Top Left Background Box */} + + + {/* Bottom Right Background Box */} + + +
+
+
+ + COMPARE EVERY PLAN +
+

+ Everything Each Plan Includes +

+
+ + +
+
+ + {/* Security / Trust Banner Component */} + + + {/* FAQ Section */} +
+ +
+
+ +
+
+ ); +}; + +export default PricingPage; diff --git a/src/app/(features)/Pricing/page.tsx b/src/app/(features)/Pricing/page.tsx new file mode 100644 index 0000000..e27f697 --- /dev/null +++ b/src/app/(features)/Pricing/page.tsx @@ -0,0 +1 @@ +export { default } from "../Pricing/index"; \ No newline at end of file diff --git a/src/app/(features)/ProductPage/AllPdfToolsPage.tsx b/src/app/(features)/ProductPage/AllPdfToolsPage.tsx new file mode 100644 index 0000000..b7cb7b3 --- /dev/null +++ b/src/app/(features)/ProductPage/AllPdfToolsPage.tsx @@ -0,0 +1,208 @@ +"use client"; +import React from "react"; +import Navbar from "../Components/Navbar"; +import Footer from "../Components/Footer"; +import ProductHeroSection from "../Components/CustomHeroSection"; +import { allPdfToolsData } from "./data/productData"; +const dotBg = "/landing/DotBg.png"; + + +const freetools1 = "/landing/productsPage/freetools1.png"; +const freetools2 = "/landing/productsPage/freetools2.png"; +const freetools3 = "/landing/productsPage/freetools3.png"; +const freetools4 = "/landing/productsPage/freetools4.png"; +const freetools5 = "/landing/productsPage/freetools5.png"; +const freetools6 = "/landing/productsPage/freetools6.png"; +const freetools7 = "/landing/productsPage/freetools7.png"; +const freetools8 = "/landing/productsPage/freetools8.png"; +const freetools9 = "/landing/productsPage/freetools9.png"; +const freetools10 = "/landing/productsPage/freetools10.png"; +const freetools11 = "/landing/productsPage/freetools11.png"; +const freetools12 = "/landing/productsPage/freetools12.png"; +const freetools13 = "/landing/productsPage/freetools13.png"; +const freetools14 = "/landing/productsPage/freetools14.png"; +const freetools15 = "/landing/productsPage/freetools15.png"; +const freetools16 = "/landing/productsPage/freetools16.png"; +const freetools17 = "/landing/productsPage/freetools17.png"; + +const categories = [ + { + title: "Edit", + tools: [ + { + title: "Edit PDF", + description: "Edit a PDF directly, free", + icon: freetools1, + }, + { + title: "OCR PDF", + description: "Make scanned PDF searchable", + icon: freetools2, + }, + { + title: "Watermark PDF", + description: "Add a watermark to your PDF free", + icon: freetools3, + }, + ], + }, + { + title: "Organize", + tools: [ + { + title: "Rotate PDF", + description: "Rotate PDF pages, free", + icon: freetools4, + }, + { + title: "Delete PDF pages", + description: "Delete specific pages from PDF, free", + icon: freetools5, + }, + { + title: "Extract PDF pages", + description: "Extract pages from a PDF, free", + icon: freetools6, + }, + { + title: "Merge PDF", + description: "Combine PDFs into one, free", + icon: freetools7, + }, + { + title: "Split PDF", + description: "Split PDF into multiple, free", + icon: freetools8, + }, + ], + }, + { + title: "Convert", + tools: [ + { + title: "PDF to Word", + description: "Convert PDF to Word, free", + icon: freetools9, + }, + { + title: "PDF to Excel", + description: "Convert PDF to Excel, free", + icon: freetools10, + }, + { + title: "PDF to PowerPoint", + description: "Convert PDF to PowerPoint, free", + icon: freetools11, + }, + { + title: "PDF to JPG", + description: "Convert PDF to JPG, free", + icon: freetools13, + }, + { + title: "JPG to PDF", + description: "Convert JPG to PDF, free", + icon: freetools12, + }, + ], + }, + { + title: "Optimize", + tools: [ + { + title: "Compress PDF", + description: "Compress PDF sizes, free", + icon: freetools14, + }, + ], + }, + { + title: "Secure", + tools: [ + { + title: "Protect PDF", + description: "Add password to PDF, free", + icon: freetools15, + }, + { + title: "Unlock PDF", + description: "Remove PDF password, free", + icon: freetools16, + }, + ], + }, + { + title: "Sign", + tools: [ + { + title: "Sign PDF", + description: "Sign a PDF online, free", + icon: freetools17, + }, + ], + }, +]; + +const AllPdfToolsPage: React.FC = () => { + return ( +
+ +
+ {/* Hero Section */} + + + {/* Tools Section with Dot Background */} +
+
+ {categories.map((category, catIdx) => ( +
+

+ {category.title} +

+ + {/* Tools Grid for this category */} +
+ {category.tools.map((tool, idx) => { + const Icon = tool.icon; + return ( +
+
+ {typeof Icon === 'string' ? ( + + ) : ( + // @ts-ignore + + )} +
+

+ {tool.title} +

+

+ {tool.description} +

+
+ ); + })} +
+
+ ))} +
+
+
+
+
+ ); +}; + +export default AllPdfToolsPage; diff --git a/src/app/(features)/ProductPage/AllProductsPage.tsx b/src/app/(features)/ProductPage/AllProductsPage.tsx new file mode 100644 index 0000000..11a9d35 --- /dev/null +++ b/src/app/(features)/ProductPage/AllProductsPage.tsx @@ -0,0 +1,46 @@ +"use client"; +import React from "react"; +import { usePathname } from 'next/navigation'; +import Navbar from "../Components/Navbar"; +import Footer from "../Components/Footer"; +import ProductHeroSection from "../Components/CustomHeroSection"; +import AllProducts from "./components/AllProducts"; +import WhyDocqube from "./components/WhyDocqube"; +import Faq from "../Components/Faq"; +import { platformData, driveData, ProductData } from "./data/productData"; + +const ProductPage: React.FC = () => { + const location = usePathname(); + const path = location || ""; + + let pageData: ProductData = platformData; // default to platform + + // Determine which data to load based on the route + if (path.includes("drive")) { + pageData = driveData; + } + // We can add more else-if blocks here for 'pdf-editor', 'workflows', 'sign', etc. + + return ( +
+ +
+ {" "} + {/* pt-[80px] to account for fixed navbar */} + + {/* Render AllProducts below the Hero Section */} + + {/* Render WhyDocqube below AllProducts */} + + {/* Render Faq below WhyDocqube */} + {pageData.faqs && } + {/* Placeholder for future reusable components */} + {/* */} + {/* */} +
+
+
+ ); +}; + +export default ProductPage; diff --git a/src/app/(features)/ProductPage/DrivePage.tsx b/src/app/(features)/ProductPage/DrivePage.tsx new file mode 100644 index 0000000..079b4ef --- /dev/null +++ b/src/app/(features)/ProductPage/DrivePage.tsx @@ -0,0 +1,35 @@ +"use client"; +import React from "react"; +import Navbar from "../Components/Navbar"; +import Footer from "../Components/Footer"; +import ProductHeroSection from "../Components/CustomHeroSection"; +import ProductFeatures from "../Components/CustomFeatures"; +import EnterpriseFeatures from "../Components/EnterpriseFeatures"; +import Faq from "../Components/Faq"; +import { driveData } from "./data/productData"; + +const DrivePage: React.FC = () => { + return ( +
+ +
+ {/* Hero Section */} + + + {/* Drive Features (Zig-Zag) */} + {driveData.features && ( + + )} + + {/* Enterprise Features Grid */} + {driveData.showEnterpriseFeatures && } + + {/* FAQ Section */} + {driveData.faqs && } +
+
+
+ ); +}; + +export default DrivePage; diff --git a/src/app/(features)/ProductPage/EmbedPage.tsx b/src/app/(features)/ProductPage/EmbedPage.tsx new file mode 100644 index 0000000..0b6fb52 --- /dev/null +++ b/src/app/(features)/ProductPage/EmbedPage.tsx @@ -0,0 +1,33 @@ +"use client"; +import React from "react"; +import Navbar from "../Components/Navbar"; +import Footer from "../Components/Footer"; +import ProductHeroSection from "../Components/CustomHeroSection"; +import EnterpriseFeatures from "../Components/EnterpriseFeatures"; +import { embedData } from "./data/productData"; + +const EmbedPage: React.FC = () => { + return ( +
+ +
+ {/* Hero Section */} + + + {/* Features Section */} + +
+
+
+ ); +}; + +export default EmbedPage; diff --git a/src/app/(features)/ProductPage/FreeEditorPages.tsx b/src/app/(features)/ProductPage/FreeEditorPages.tsx new file mode 100644 index 0000000..5d05b57 --- /dev/null +++ b/src/app/(features)/ProductPage/FreeEditorPages.tsx @@ -0,0 +1,34 @@ +"use client"; +import React from "react"; +import Navbar from "../Components/Navbar"; +import Footer from "../Components/Footer"; +import ProductHeroSection from "../Components/CustomHeroSection"; +import EnterpriseFeatures from "../Components/EnterpriseFeatures"; +import { freeEditorData } from "./data/productData"; + +const FreeEditorPages: React.FC = () => { + return ( +
+ +
+ {/* Hero Section */} + + + {/* Features Section */} + +
+
+
+ ); +}; + +export default FreeEditorPages; diff --git a/src/app/(features)/ProductPage/PdfEditorPage.tsx b/src/app/(features)/ProductPage/PdfEditorPage.tsx new file mode 100644 index 0000000..9406f77 --- /dev/null +++ b/src/app/(features)/ProductPage/PdfEditorPage.tsx @@ -0,0 +1,40 @@ +"use client"; +import React from "react"; +import Navbar from "../Components/Navbar"; +import Footer from "../Components/Footer"; +import ProductHeroSection from "../Components/CustomHeroSection"; +import ProductFeatures from "../Components/CustomFeatures"; +import EnterpriseFeatures from "../Components/EnterpriseFeatures"; +import Faq from "../Components/Faq"; +import { editorData } from "./data/productData"; + +const PdfEditorPage: React.FC = () => { + return ( +
+ +
+ {/* Hero Section */} + + + + + {/* Enterprise Features Grid (Passed specific PDF Editor data) */} + {editorData.showEnterpriseFeatures && ( + + )} + + + {/* PDF Editor Features (Zig-Zag with Buttons) */} + {editorData.features && ( + + )} + + {/* FAQ Section */} + {editorData.faqs && } +
+
+
+ ); +}; + +export default PdfEditorPage; diff --git a/src/app/(features)/ProductPage/SignPage.tsx b/src/app/(features)/ProductPage/SignPage.tsx new file mode 100644 index 0000000..6003dee --- /dev/null +++ b/src/app/(features)/ProductPage/SignPage.tsx @@ -0,0 +1,30 @@ +"use client"; +import React from "react"; +import Navbar from "../Components/Navbar"; +import Footer from "../Components/Footer"; +import ProductHeroSection from "../Components/CustomHeroSection"; +import ProductFeatures from "../Components/CustomFeatures"; +import EnterpriseFeatures from "../Components/EnterpriseFeatures"; +import Faq from "../Components/Faq"; +import { signData } from "./data/productData"; + +const SignPage: React.FC = () => { + return ( +
+ +
+ + + {signData.showEnterpriseFeatures && ( + + )} + {signData.features && } + + {signData.faqs && } +
+
+
+ ); +}; + +export default SignPage; diff --git a/src/app/(features)/ProductPage/WorkflowsPage.tsx b/src/app/(features)/ProductPage/WorkflowsPage.tsx new file mode 100644 index 0000000..f075f2d --- /dev/null +++ b/src/app/(features)/ProductPage/WorkflowsPage.tsx @@ -0,0 +1,32 @@ +"use client"; +import React from "react"; +import Navbar from "../Components/Navbar"; +import Footer from "../Components/Footer"; +import ProductHeroSection from "../Components/CustomHeroSection"; +import ProductFeatures from "../Components/CustomFeatures"; +import EnterpriseFeatures from "../Components/EnterpriseFeatures"; +import Faq from "../Components/Faq"; +import { workflowsData } from "./data/productData"; + +const WorkflowsPage: React.FC = () => { + return ( +
+ +
+ + + {workflowsData.showEnterpriseFeatures && ( + + )} + {workflowsData.features && ( + + )} + + {workflowsData.faqs && } +
+
+
+ ); +}; + +export default WorkflowsPage; diff --git a/src/app/(features)/ProductPage/components/AllProducts.tsx b/src/app/(features)/ProductPage/components/AllProducts.tsx new file mode 100644 index 0000000..7b6e107 --- /dev/null +++ b/src/app/(features)/ProductPage/components/AllProducts.tsx @@ -0,0 +1,95 @@ +"use client"; +import React from "react"; +import { Sparkles } from "lucide-react"; +import Link from 'next/link'; + +interface ProductItem { + title: string; + description: string; + link?: string; +} + +export interface AllProductsProps { + badgeText?: string; + title?: string; + products?: ProductItem[]; + bannerTitle?: string; + bannerDescription?: string; + bannerButtonText?: string; +} + +const defaultProducts: ProductItem[] = [ + { + title: "DocQube Drive", + description: + "Store, version, share and collaborate — with an AI that answers questions about your files.", + link: "/product/drive", + }, + { + title: "DocQube PDF Editor", + description: + "Edit any PDF in your browser with true text reflow — free to start, no signup.", + link: "/product/pdf-editor", + }, + { + title: "DocQube Workflows", + description: + "Route documents for review, collect approvals and trigger signatures automatically.", + link: "/product/workflows", + }, + { + title: "DocQube Sign", + description: + "Send, sign and track legally-binding e-signatures with verification built in.", + link: "/product/sign", + }, +]; + +const AllProducts: React.FC = ({ + badgeText = "WHAT'S INCLUDED", + title = "Four Products, Working As One", + products = defaultProducts, +}) => { + return ( +
+
+ {/* Header */} +
+
+ + {badgeText} +
+

+ {title} +

+
+ + {/* Product Grid */} +
+ {products.map((product, idx) => { + const cardContent = ( +
+

+ {product.title} +

+

+ {product.description} +

+
+ ); + + return product.link ? ( + + {cardContent} + + ) : ( +
{cardContent}
+ ); + })} +
+
+
+ ); +}; + +export default AllProducts; diff --git a/src/app/(features)/ProductPage/components/WhyDocqube.tsx b/src/app/(features)/ProductPage/components/WhyDocqube.tsx new file mode 100644 index 0000000..2da8b40 --- /dev/null +++ b/src/app/(features)/ProductPage/components/WhyDocqube.tsx @@ -0,0 +1,116 @@ +"use client"; +import React from 'react'; +import { X, Check } from 'lucide-react'; +const dotBg = "/landing/DotBg.png"; + +interface ComparisonItem { + negative: string; + positive: string; +} + +export interface WhyDocqubeProps { + badgeText?: string; + title?: string; + comparisons?: ComparisonItem[]; +} + +const defaultComparisons: ComparisonItem[] = [ + { + negative: "Files scattered across apps", + positive: "One source of truth", + }, + { + negative: "A different login and bill for each", + positive: "One login, one bill", + }, + { + negative: "Separate, inconsistent permissions", + positive: "One RBAC model across all modules", + }, + { + negative: "No end-to-end audit trail", + positive: "A single audit trail from upload to signature", + }, + { + negative: "Data copied between vendors", + positive: "Data stays in one platform", + } +]; + +const WhyDocqube: React.FC = ({ + badgeText = "WHY THE PLATFORM BEATS POINT TOOLS", + title = "From Fragmented To One Clear System", + comparisons = defaultComparisons +}) => { + return ( +
+ +
+ + {/* Header */} +
+
+
+ {badgeText} +
+

+ {title} +

+
+ + {/* Comparison Card */} +
+ + {/* Left Side: Negative */} +
+

Buying point tools

+
+ +
    + {comparisons.map((item, idx) => ( +
  • + + {item.negative} +
  • + ))} +
+
+ + {/* Right Side: Positive */} +
+
+
+

With DocQube

+
+ +
+
+
+ +
    + {comparisons.map((item, idx) => ( +
  • + + {item.positive} +
  • + ))} +
+
+
+ +
+ +
+
+ ); +}; + +export default WhyDocqube; diff --git a/src/app/(features)/ProductPage/data/productData.ts b/src/app/(features)/ProductPage/data/productData.ts new file mode 100644 index 0000000..46cdef9 --- /dev/null +++ b/src/app/(features)/ProductPage/data/productData.ts @@ -0,0 +1,564 @@ +"use client"; +const drive1 = "/landing/productsPage/drive1.png"; +const drive2 = "/landing/productsPage/drive2.png"; +const drive3 = "/landing/productsPage/drive3.png"; +const driveIcon1 = "/landing/productsPage/driveIcon1.png"; +const driveIcon2 = "/landing/productsPage/driveIcon2.png"; +const driveIcon3 = "/landing/productsPage/driveIcon3.png"; +const driveIcon4 = "/landing/productsPage/driveicon4.png"; +const driveIcon5 = "/landing/productsPage/driveicon5.png"; +const driveIcon6 = "/landing/productsPage/driveicon6.png"; +const pdfeditor1 = "/landing/productsPage/pdfeditor1.png"; + +const pdfeditorIcon1 = "/landing/productsPage/pdfeditor1.png"; +const pdfeditorIcon2 = "/landing/productsPage/pdfeditor2.png"; +const pdfeditorIcon3 = "/landing/productsPage/pdfeditor3.png"; +const pdfeditorIcon4 = "/landing/productsPage/pdfeditor4.png"; +const pdfeditorIcon5 = "/landing/productsPage/pdfeditor5.png"; +const pdfeditorIcon6 = "/landing/productsPage/pdfeditor6.png"; +const signicon1 = "/landing/productsPage/signicon1.png"; +const signicon2 = "/landing/productsPage/signicon2.png"; +const signicon3 = "/landing/productsPage/signicon3.png"; +const signicon4 = "/landing/productsPage/signicon4.png"; +const signicon5 = "/landing/productsPage/signicon5.png"; +const signicon6 = "/landing/productsPage/signicon6.png"; +const signimage = "/landing/productsPage/signimage.png"; +const workflow = "/landing/productsPage/workflow.png"; +const Editor1 = "/landing/productsPage/editor1.png"; +const Editor2 = "/landing/productsPage/editor2.png"; +const Editor3 = "/landing/productsPage/editor3.png"; +const Editor4 = "/landing/productsPage/editor4.png"; +const Editor5 = "/landing/productsPage/editor5.png"; +const Editor6 = "/landing/productsPage/editor6.png"; +const Embed1 = "/landing/productsPage/embed1.png"; +const Embed2 = "/landing/productsPage/embed2.png"; +const Embed3 = "/landing/productsPage/embed3.png"; +const Embed4 = "/landing/productsPage/embed4.png"; +const Embed5 = "/landing/productsPage/embed5.png"; +const Embed6 = "/landing/productsPage/embed6.png"; +const workflowIcon1 = "/landing/productsPage/workflowIcon1.png"; +const workflowIcon2 = "/landing/productsPage/workflowIcon2.png"; +const workflowIcon3 = "/landing/productsPage/workflowIcon3.png"; +const workflowIcon4 = "/landing/productsPage/workflowIcon4.png"; +const workflowIcon5 = "/landing/productsPage/workflowIcon5.png"; +const workflowIcon6 = "/landing/productsPage/workflowIcon6.png"; + +export interface ProductData { + hero: { + badgeText: string; + headlineMain: string; + headlineHighlight: string; + description: string; + primaryButtonText: string; + secondaryButtonText: string; + }; + faqs: { + question: string; + answer: string; + }[]; + features?: { + badge: string; + title: string; + description: string; + bulletPoints: string[]; + imagePlaceholderText?: string; + primaryButtonText?: string; + secondaryButtonText?: string; + image?: string; + }[]; + showEnterpriseFeatures?: boolean; + enterpriseFeaturesData?: { + badgeText?: string; + title?: string; + bottomNote?: string; + primaryButtonText?: string; + features?: { + title: string; + description: string; + icon?: any; + }[]; + }; +} + +export const platformData: ProductData = { + hero: { + badgeText: "ONE PLATFORM. FOUR PRODUCTS.", + headlineMain: "Everything Your Documents Need,", + headlineHighlight: "Under One Roof.", + description: "DocQube brings document management, PDF editing, workflow automation and e-signatures together — one login, one bill, one security model. Buy the whole suite and save up to ~55% versus buying modules separately.", + primaryButtonText: "START FREE TRIAL", + secondaryButtonText: "TALK TO SALES" + }, + faqs: [ + { + question: "Can I buy just one module?", + answer: "Yes. Buy any single module on its own — Drive, PDF Editor, Workflows or Sign. Each has its own plan and free trial, and each is also included in the DocQube Suite." + }, + { + question: "Is there a free plan?", + answer: "Yes, we offer a free tier with basic features so you can test out our core capabilities." + }, + { + question: "Can I upgrade from a module to the Suite later?", + answer: "Absolutely. You can easily upgrade from any individual module to the full DocQube Suite from your billing dashboard." + } + ] +}; + +export const driveData: ProductData = { + hero: { + badgeText: "DOCQUBE DRIVE", + headlineMain: "Intelligent Document Management", + headlineHighlight: "Powered by AI.", + description: "Store, organize, and search all your files with ease. DocQube Drive provides secure, AI-powered document management so you can find what you need, exactly when you need it.", + primaryButtonText: "START FREE TRIAL", + secondaryButtonText: "SEE PRICING" + }, + faqs: [ + { + question: "Does the AI assistant use my documents to train models?", + answer: "No. DocQube does not use your documents or personal data to train, fine-tune or improve any AI or machine-learning models. The assistant retrieves answers from your own indexed files at query time." + }, + { + question: "Can I recover a previous version of a document?", + answer: "Yes. Drive keeps a full version history for each file, and you can restore any prior version. Deleted files go to trash and can be restored." + }, + { + question: "How is access controlled?", + answer: "Drive uses role-based access control with custom roles, plus multi-tenant isolation so each organization's data is scoped separately. Sharing is permission-based, with optional public links." + }, + { + question: "What file formats can I convert?", + answer: "DocQube converts PDF files and images into structured HTML, Markdown and JATS XML, and exports edited documents to Word (.docx), HTML, XML and PDF." + } + ], + showEnterpriseFeatures: true, + enterpriseFeaturesData: { + features: [ + { + title: 'Role-based access', + description: 'Fine-grained RBAC with custom roles and access codes.', + icon: driveIcon1 + }, + { + title: 'Multi-tenant isolation', + description: "Each organization's data is scoped and isolated.", + icon: driveIcon2 + }, + { + title: 'Encryption', + description: 'Encrypted in transit and at rest, with virus scanning on upload.', + icon: driveIcon3 + }, + { + title: 'Convert & export', + description: 'Convert PDF and images to editable formats; export to Word, HTML, XML and PDF.', + icon: driveIcon4 + }, + { + title: 'Smart search & OCR', + description: 'Find anything across your files, including scanned documents.', + icon: driveIcon5 + }, + { + title: 'Audit & reporting', + description: 'A complete, exportable record of document activity.', + icon: driveIcon6 + } + ] + }, + features: [ + { + badge: "DOCUMENT AI", + title: "Ask A Question, Get An Answer From Your Documents", + description: "DocQube Drive indexes your documents and lets you ask questions in plain language. The AI assistant retrieves the answer from across your files, with the source in view.", + bulletPoints: [ + "Retrieval-augmented answers across your document set", + "Auto-indexing and summaries on upload", + "OCR makes scanned documents searchable", + "Your data is never used to train AI models" + ], + imagePlaceholderText: "Document AI Example", + image: drive1 + }, + { + badge: "CONTROL & VERSIONING", + title: "One Source Of Truth For Every File", + description: "Every change is versioned and every action is logged. Restore any previous version, and see who accessed, edited or shared a document, and when.", + bulletPoints: [ + "Full version history with restore", + "Tamper-evident activity log on every file", + "Soft-delete trash with restore", + "Automated backups with data restore" + ], + imagePlaceholderText: "Versioning UI", + image: drive2 + }, + { + badge: "SHARING & COLLABORATION", + title: "Share Safely, Collaborate In Real Time", + description: "Share with specific people or generate public links with view or edit permissions. Collaborate live, and keep the conversation in context with inline threaded comments.", + bulletPoints: [ + "Granular view / edit permissions", + "Public share links with controlled access", + "Real-time collaboration", + "Inline, threaded comments" + ], + imagePlaceholderText: "Sharing Example", + image: drive3 + } + ] +}; + +export const editorData: ProductData = { + hero: { + badgeText: "DOCQUBE PDF EDITOR", + headlineMain: "A Real PDF Editor", + headlineHighlight: "Right In Your Browser.", + description: "Edit text with true reflow, not overlay boxes. Add images, annotations and signatures, redact permanently, and reorder pages — powered by a native C++/PDFium engine. Free to start, no signup.", + primaryButtonText: "OPEN THE FREE EDITOR", + secondaryButtonText: "GO PRO" + }, + faqs: [ + { + question: "Is the PDF editor really free?", + answer: "Yes. The free tier lets you edit and export PDFs with no watermark, within limits (25 MB, 50 pages, 2 documents per day). No signup or credit card is required to start." + }, + { + question: "How is this different from other browser PDF editors?", + answer: "Most browser editors place text in overlay boxes on top of the page. DocQube edits the real content stream with a native C++/PDFium and HarfBuzz engine, so paragraphs reflow with correct word-wrap and font metrics." + }, + { + question: "Does redaction actually remove the content?", + answer: "Yes. Redaction permanently removes the underlying text and image objects within the selected area and burns a solid blackout into the page — not just a rectangle drawn on top." + }, + { + question: "What can I do on Pro?", + answer: "Pro unlocks larger files, unlimited documents, OCR, redaction, batch operations and saving directly to DocQube Drive." + } + ], + showEnterpriseFeatures: true, + enterpriseFeaturesData: { + badgeText: "ENTERPRISE-READY", + title: "Governed By Design", + features: [ + { + title: "Real text reflow", + description: "Edit multi-line paragraphs with automatic word wrap and line height — text pushes and pulls across pages, powered by PDFium and HarfBuzz.", + icon: pdfeditorIcon1 + }, + { + title: "Fonts preserved", + description: "Embedded fonts are reconstructed for editing, with graceful fallback that keeps the original look.", + icon: pdfeditorIcon2 + }, + { + title: "Annotations & markups", + description: "Highlights, underlines, strikeouts, shapes, sticky notes and freehand ink — written into the PDF.", + icon: pdfeditorIcon3 + }, + { + title: "Permanent redaction", + description: "Blackout that truly removes the underlying text and image objects, not just a box on top.", + icon: pdfeditorIcon4 + }, + { + title: "Signatures & stamps", + description: "Place a signature image or custom stamp anywhere, resizable to fit.", + icon: pdfeditorIcon5 + }, + { + title: "Page operations", + description: "Insert, delete, rotate and reorder pages, and replace images inside the document.", + icon: pdfeditorIcon6 + } + ] + }, + features: [ + { + badge: "FREE FOREVER, WITHIN LIMITS", + title: "Start Free. No Watermark.", + description: "The free tier is a real product — edit and export with no watermark on your files. Go Pro when you need bigger files and more power.", + bulletPoints: [ + "Free: up to 25 MB, 50 pages, 2 documents per day", + "No watermark on exports, ever", + "Pro: larger files, unlimited documents, redaction, OCR, batch and save-to-Drive", + "Runs in your browser — nothing to install" + ], + primaryButtonText: "OPEN THE FREE EDITOR", + secondaryButtonText: "GO PRO", + imagePlaceholderText: "Free Editor UI", + image: pdfeditor1 + } + ] +}; + +export const workflowsData: ProductData = { + hero: { + badgeText: "DOCQUBE WORKFLOWS", + headlineMain: "Route, Approve And", + headlineHighlight: "Sign — Automatically.", + description: "Send documents for review, collect approvals in order, and trigger signatures when they're ready. Every step is tracked and timestamped, with notifications along the way.", + primaryButtonText: "START FREE TRIAL", + secondaryButtonText: "SEE PRICING" + }, + faqs: [ + { + question: "Is DocQube Workflows a full no-code automation builder?", + answer: "Workflows today covers routing, approvals, signature loops, status tracking and notifications. More advanced, fully custom automation is available on higher tiers or on our roadmap — tell us about your process and we'll advise." + }, + { + question: "Can a workflow trigger a signature automatically?", + answer: "Yes. When a document is approved, Workflows can automatically start a DocQube Sign request, so the signing step begins without manual hand-off." + }, + { + question: "Is every step tracked?", + answer: "Yes. Each routing, approval and signature action is timestamped and recorded in a tamper-evident audit trail you can export." + } + ], + showEnterpriseFeatures: true, + enterpriseFeaturesData: { + badgeText: "WHAT WORKFLOWS DOES TODAY", + title: "Approvals And Signature Loops, Tracked End To End", + bottomNote: "Workflows focuses on routing, approvals, signature loops, status tracking and notifications. Advanced, fully custom automation is available on higher tiers or on our roadmap — talk to us about your process.", + features: [ + { + title: "Routing", + description: "Send a document to the right people, in the right order.", + icon: workflowIcon1 + }, + { + title: "Approvals", + description: "Collect reviews and approvals, with a clear status at each step.", + icon: workflowIcon2 + }, + { + title: "Signature triggers", + description: "Kick off a DocQube Sign request automatically when a document is approved.", + icon: workflowIcon3 + }, + { + title: "Notifications", + description: "Keep everyone informed as a document moves through the process.", + icon: workflowIcon4 + }, + { + title: "Status tracking", + description: "See exactly where any document is, and who's next.", + icon: workflowIcon5 + }, + { + title: "Timestamped audit", + description: "Every action is recorded for a defensible trail.", + icon: workflowIcon6 + } + ] + }, + features: [ + { + badge: "FREE FOREVER, WITHIN LIMITS", + title: "From Draft To Signed, Without The Chase", + description: "Workflows connects Drive and Sign so a document can move from review to approval to signature without leaving DocQube — and without email threads to keep track of.", + bulletPoints: [ + "One approval trail from upload to signature", + "Automatic signature requests on approval", + "Reminders and status at every step", + "A single, exportable record of the whole process" + ], + imagePlaceholderText: "Workflows Example", + image: workflow + } + ] +}; + +export const signData: ProductData = { + hero: { + badgeText: "DOCQUBE SIGN", + headlineMain: "Legally Binding Signatures", + headlineHighlight: "Built In.", + description: "Send, sign and track legally-binding e-signatures with verification built in.", + primaryButtonText: "START FREE TRIAL", + secondaryButtonText: "TALK TO SALES" + }, + faqs: [ + { + question: "Are DocQube signatures legally binding?", + answer: "Yes. DocQube Sign captures legally-binding electronic signatures through Zoho Sign and DocuSeal, with a timestamped audit trail for each envelope." + }, + { + question: "What is signature verification?", + answer: "Beyond capturing a signature, DocQube can detect signature boxes on a document using computer vision and validate digital signature certificates — giving you proof that a signed document is valid." + }, + { + question: "Can I trigger signing from a workflow?", + answer: "Yes. DocQube Workflows can automatically start a Sign request when a document is approved, and the signed result is stored in Drive." + }, + { + question: "How is pricing structured?", + answer: "Sign is available per user, per month, or per envelope. See the pricing page for current figures, and note they are indicative until confirmed before launch." + } + ], + showEnterpriseFeatures: true, + enterpriseFeaturesData: { + badgeText: "SIGN, SEND AND VERIFY", + title: "Everything You Need To Close Documents", + bottomNote: "Workflows focuses on routing, approvals, signature loops, status tracking and notifications. Advanced, fully custom automation is available on higher tiers or on our roadmap — talk to us about your process.", + features: [ + { + title: "Send for signature", + description: "Create an envelope, add signers and fields, and send — via Zoho Sign or DocuSeal.", + icon: signicon1 + }, + { + title: "Track to completion", + description: "Collect reviews and approvals, with a clear status at each step.", + icon: signicon2 + }, + { + title: "Signature verification", + description: "Kick off a DocQube Sign request automatically when a document is approved.", + icon: signicon3 + }, + { + title: "Full audit trail", + description: "A timestamped record of every step, for a defensible signing history.", + icon: signicon4 + }, + { + title: "Secure by default", + description: "Encryption in transit and at rest, with access controls.", + icon: signicon5 + }, + { + title: "Built into the platform", + description: "Trigger signatures from Workflows and store signed documents in Drive.", + icon: signicon6 + } + ] + }, + features: [ + { + badge: "VERIFICATION", + title: "Proof A Signature Is Valid", + description: "DocQube Sign doesn't just capture a signature — it detects signature boxes using computer vision and validates digital signature certificates, so you can verify that a signed document is genuine.", + bulletPoints: [ + "Computer-vision signature box detection", + "Digital certificate validation", + "Timestamped, tamper-evident audit trail", + "Signed documents stored securely in Drive" + ], + imagePlaceholderText: "Verification UI", + image: signimage + } + ] +}; + +export const allPdfToolsData: ProductData = { + hero: { + badgeText: "DOCQUBE FREE TOOLS", + headlineMain: "Every PDF Tool You Need —", + headlineHighlight: "Free", + description: "Send documents for signature, sign them yourself, and track every envelope to completion — powered by Zoho Sign and DocuSeal, with a signature verification and a full audit trail.", + primaryButtonText: "OPEN THE EDITOR", + secondaryButtonText: "ABOUT THE EDITOR" + }, + faqs: [] +}; + +export const freeEditorData: ProductData = { + hero: { + badgeText: "DOCQUBE PDF EDITOR", + headlineMain: "Drop A PDF To Start", + headlineHighlight: "Editing", + description: "Add text with true reflow, images, highlights and a signature, reorder pages, then export — right in your browser", + primaryButtonText: "UPLOAD A PDF", + secondaryButtonText: "UPGRADE TO PRO" + }, + faqs: [], + showEnterpriseFeatures: true, + enterpriseFeaturesData: { + badgeText: "WHAT YOU CAN DO", + title: "A Full Editor, Free To Start", + features: [ + { + title: "Edit text", + description: "True paragraph reflow — not overlay boxes", + icon: Editor1 + }, + { + title: "Add images", + description: "Insert and replace images inside the page", + icon: Editor2 + }, + { + title: "Annotate", + description: "Highlights, notes, shapes and freehand ink", + icon: Editor3 + }, + { + title: "Sign", + description: "Place a signature or stamp anywhere", + icon: Editor4 + }, + { + title: "Pages", + description: "Insert, reorder, rotate and extract", + icon: Editor5 + }, + { + title: "Export", + description: "Download your edited PDF — no watermark", + icon: Editor6 + } + ] + } +}; + +export const embedData: ProductData = { + hero: { + badgeText: "DOCQUBE EMBED", + headlineMain: "Put A Real PDF Editor", + headlineHighlight: "Inside Your Product.", + description: "Embed DocQube's native PDF editing engine in your own application, themed to match your brand. Give your users true reflow editing, annotations, redaction and signing — without building an engine.", + primaryButtonText: "TALK TO SALES", + secondaryButtonText: "READ THE DEVELOPER DOCS" + }, + faqs: [], + showEnterpriseFeatures: true, + enterpriseFeaturesData: { + badgeText: "BUILT TO EMBED", + title: "Your Product, Our Engine", + features: [ + { + title: "Themeable", + description: "Match your colors, fonts and layout so the editor feels native to your app.", + icon: Embed1 + }, + { + title: "API-first", + description: "A clean REST gateway over the native engine for documents, rendering, edits and export.", + icon: Embed2 + }, + { + title: "Real editing", + description: "Reflow, replace, annotate, redact and sign — the same engine that powers DocQube.", + icon: Embed3 + }, + { + title: "Isolated", + description: "Multi-tenant isolation and access controls carry through.", + icon: Embed4 + }, + { + title: "Webhooks", + description: "Get notified on document events to drive your own workflows.", + icon: Embed5 + }, + { + title: "Supported", + description: "Onboarding and integration support from our team.", + icon: Embed6 + } + ] + } +}; diff --git a/src/app/(features)/ResourcePage/BlogDetailPage.tsx b/src/app/(features)/ResourcePage/BlogDetailPage.tsx new file mode 100644 index 0000000..dba269f --- /dev/null +++ b/src/app/(features)/ResourcePage/BlogDetailPage.tsx @@ -0,0 +1,153 @@ +"use client"; +import React from "react"; +import Link from 'next/link'; +import { useParams } from 'next/navigation'; +import Navbar from "../Components/Navbar"; +import Footer from "../Components/Footer"; +import { BLOG_POSTS } from "./data/blogData"; +const squareBoxBg = "/landing/SquareBox.png"; + +const BlogDetailPage: React.FC = () => { + const { slug } = useParams<{ slug: string }>(); + + // Find post by slug or fallback to first post + const post = BLOG_POSTS.find((p) => p.slug === slug) || BLOG_POSTS[0]; + + return ( +
+ + +
+ {/* Subtle grid background */} +
+ +
+ +
+
+ + {/* Left Sidebar */} + + + {/* Right Main Article Content */} +
+ {/* Blog Badge */} +
+ + {post.badge || "BLOG"} + +
+ + {/* Headline */} +

+ {post.title} +

+ + {/* Read Time & Brand Meta */} +

+ {post.metaText || `${post.readTime} · DocQube`} +

+ + {/* Subtitle / Lead Paragraph */} +

+ {post.description} +

+ + {/* Article Content Sections */} +
+ {post.sections && post.sections.map((section, idx) => ( +
+

+ {section.title} +

+ + {section.paragraphs && section.paragraphs.map((p, pIdx) => ( +

+ {p} +

+ ))} + + {section.bullets && ( +
    + {section.bullets.map((b, bIdx) => ( +
  • + {b} +
  • + ))} +
+ )} +
+ ))} +
+
+ +
+
+
+ +
+
+ ); +}; + +export default BlogDetailPage; diff --git a/src/app/(features)/ResourcePage/BlogPage.tsx b/src/app/(features)/ResourcePage/BlogPage.tsx new file mode 100644 index 0000000..2dce2d0 --- /dev/null +++ b/src/app/(features)/ResourcePage/BlogPage.tsx @@ -0,0 +1,64 @@ +"use client"; +import React from "react"; +import Navbar from "../Components/Navbar"; +import Footer from "../Components/Footer"; +import CustomHeroSection from "../Components/CustomHeroSection"; +import ChallengeSection, { ChallengeCardItem } from "../Components/ChallengeSection"; +import { BLOG_POSTS } from "./data/blogData"; + + +const BlogPage: React.FC = () => { + const blogCards: ChallengeCardItem[] = BLOG_POSTS.map((post) => ({ + tag: post.tag, + title: post.title, + description: post.description, + linkText: post.linkText, + linkUrl: `/blog/${post.slug}`, + })); + + return ( +
+ + +
+ + + {/* Hero Section */} + + + {/* Blog Cards Grid Section */} +
+ +
+
+ + {/* Footer */} +
+
+ ); +}; + +export default BlogPage; diff --git a/src/app/(features)/ResourcePage/data/blogData.ts b/src/app/(features)/ResourcePage/data/blogData.ts new file mode 100644 index 0000000..64927bf --- /dev/null +++ b/src/app/(features)/ResourcePage/data/blogData.ts @@ -0,0 +1,301 @@ +"use client"; +export interface BlogSection { + title: string; + paragraphs?: string[]; + bullets?: string[]; +} + +export interface BlogPost { + id: string; + slug: string; + tag: string; + badge?: string; + title: string; + metaText?: string; + description: string; + linkText: string; + author?: { + name: string; + role: string; + }; + publishedAt?: string; + readTime?: string; + sections: BlogSection[]; +} + +export const BLOG_POSTS: BlogPost[] = [ + { + id: '1', + slug: 'why-browser-pdf-editors-break-formatting', + tag: 'Article', + badge: 'BLOG', + title: 'Why Browser PDF Editors Break Your Formatting — And How True Reflow Fixes It', + metaText: '6 min read · DocQube', + description: "Most online PDF editors drop text into floating boxes on top of the page. Here's why that breaks your document, and what real reflow editing does differently.", + linkText: 'Read', + author: { + name: 'DocQube Team', + role: 'Engineering & Product' + }, + publishedAt: 'Aug 24, 2026', + readTime: '6 min read', + sections: [ + { + title: 'The Overlay-Box Problem', + paragraphs: [ + "When you edit a PDF in most browser tools, the editor doesn't actually change the text in the document. It places a new text box on top of the original, often covering the old text with a white rectangle. It looks fine on screen — until you add a word and the line runs off the page, or the font doesn't quite match, or someone opens the file in a different reader and the illusion falls apart.", + "The underlying PDF is unchanged. You haven't edited the paragraph; you've stuck a sticker over it." + ] + }, + { + title: 'What ‘true Reflow’ Means', + paragraphs: [ + "Reflow editing changes the real content stream of the PDF. When you edit a sentence, the surrounding text re-wraps: line breaks recalculate, spacing adjusts, and text pushes or pulls across the page the way it would in a word processor.", + "DocQube's PDF Editor does this with a native C++ engine built on PDFium and HarfBuzz — the same shaping technology behind modern browsers. It reconstructs embedded fonts so your edits keep the original look, and falls back gracefully when a font isn't available." + ] + }, + { + title: 'Why It Matters For Real Work', + bullets: [ + "Contracts and forms stay consistent when you change a clause.", + "Redactions actually remove the underlying text, not just hide it behind a box.", + "Exports open correctly in any PDF reader." + ] + }, + { + title: 'Try It Yourself', + paragraphs: [ + "Open a PDF in the free editor, change a paragraph, and watch the text re-wrap. No signup, no watermark." + ] + } + ] + }, + { + id: '2', + slug: 'buy-module-bundle-or-whole-suite-how-to-choose', + tag: 'Article', + badge: 'BLOG', + title: 'Buy a Module, a Bundle, or the Whole Suite: How to Choose', + metaText: '5 min read · DocQube', + description: "DocQube can be bought three ways. Here's a simple way to decide which fits your team — and when upgrading makes the most financial sense.", + linkText: 'Read', + author: { + name: 'DocQube Team', + role: 'Product Strategy' + }, + publishedAt: 'Aug 18, 2026', + readTime: '5 min read', + sections: [ + { + title: 'The Hidden Cost of SaaS Sprawl', + paragraphs: [ + "Most growing companies end up with 4 to 6 disparate tools for file management, editing PDFs, routing approvals, and collecting verified signatures. Each vendor carries a separate invoice, distinct admin consoles, and overlapping per-seat costs.", + "Consolidating into a unified document operating system eliminates integration friction and cuts license overhead by up to 55%." + ] + }, + { + title: 'When to Start With a Single Module', + paragraphs: [ + "If your immediate bottleneck is strictly PDF modifications or signing contracts, purchasing standalone DocQube PDF Editor or DocQube Sign lets you solve today's operational hurdle with minimal procurement delay.", + "Every module is built on the same foundation, meaning you can easily activate Drive storage or automated Workflows down the line without migrating data." + ] + }, + { + title: 'Why Teams Upgrade to the Complete Suite', + bullets: [ + "Unified audit logs across files, changes, approvals, and legal signatures.", + "Single sign-on and role-based permissions across your entire company.", + "Predictable billing with zero surprises or hidden add-on costs." + ] + }, + { + title: 'Explore the Modules', + paragraphs: [ + "Evaluate your team's workflow requirements or speak with our solutions engineers to build a custom migration plan." + ] + } + ] + }, + { + id: '3', + slug: 'built-to-gdpr-and-hipaa-principles-actually-means', + tag: 'Article', + badge: 'BLOG', + title: "What ‘Built to GDPR and HIPAA Principles’ Actually Means", + metaText: '7 min read · DocQube', + description: "You'll see DocQube say it's ‘built to’ certain standards rather than ‘certified...’. Here is an honest deep dive into security architecture, zero-knowledge encryption, and compliance.", + linkText: 'Read', + author: { + name: 'DocQube Security', + role: 'Compliance & Infrastructure' + }, + publishedAt: 'Aug 12, 2026', + readTime: '7 min read', + sections: [ + { + title: 'Architectural Enforcement vs. Marketing Claims', + paragraphs: [ + "In compliance marketing, vendors often claim instant certification while maintaining broad internal access to customer data. True data protection requires cryptographic guarantees built directly into the software architecture.", + "When we say DocQube is built to GDPR and HIPAA principles, we mean our data pipeline enforces privacy by design, end-to-end data encryption in transit and at rest, and strict tenant isolation." + ] + }, + { + title: 'Zero-Knowledge & Encryption Standards', + paragraphs: [ + "Every document uploaded to DocQube is fragmented and encrypted using AES-256 keys managed via dedicated KMS. Server operators cannot read your documents without cryptographic delegation.", + "Audit logs are immutable, tracking every document view, modification, signature request, and export event with tamper-resistant hashing." + ] + }, + { + title: 'Key Security Guarantees', + bullets: [ + "Full compliance with DPA (Data Processing Agreement) and BAA requirements.", + "Dedicated regional storage options ensuring strict data residency.", + "Granular permissions with time-limited public sharing links." + ] + }, + { + title: 'Review Our Security Model', + paragraphs: [ + "Visit our trust center or request a detailed architectural review to verify our compliance controls." + ] + } + ] + }, + { + id: '4', + slug: 'why-browser-pdf-editors-break-formatting-reflow', + tag: 'Article', + badge: 'BLOG', + title: 'Why Browser PDF Editors Break Your Formatting — And How True Reflow Fixes It', + metaText: '6 min read · DocQube', + description: "Most online PDF editors drop text into floating boxes on top of the page. Here's why that breaks your document, and what real reflow editing does differently.", + linkText: 'Read', + author: { + name: 'DocQube Team', + role: 'Engineering & Product' + }, + publishedAt: 'Jul 29, 2026', + readTime: '6 min read', + sections: [ + { + title: 'The Overlay-Box Problem', + paragraphs: [ + "When you edit a PDF in most browser tools, the editor doesn't actually change the text in the document. It places a new text box on top of the original, often covering the old text with a white rectangle. It looks fine on screen — until you add a word and the line runs off the page, or the font doesn't quite match, or someone opens the file in a different reader and the illusion falls apart.", + "The underlying PDF is unchanged. You haven't edited the paragraph; you've stuck a sticker over it." + ] + }, + { + title: 'What ‘true Reflow’ Means', + paragraphs: [ + "Reflow editing changes the real content stream of the PDF. When you edit a sentence, the surrounding text re-wraps: line breaks recalculate, spacing adjusts, and text pushes or pulls across the page the way it would in a word processor.", + "DocQube's PDF Editor does this with a native C++ engine built on PDFium and HarfBuzz — the same shaping technology behind modern browsers. It reconstructs embedded fonts so your edits keep the original look, and falls back gracefully when a font isn't available." + ] + }, + { + title: 'Why It Matters For Real Work', + bullets: [ + "Contracts and forms stay consistent when you change a clause.", + "Redactions actually remove the underlying text, not just hide it behind a box.", + "Exports open correctly in any PDF reader." + ] + }, + { + title: 'Try It Yourself', + paragraphs: [ + "Open a PDF in the free editor, change a paragraph, and watch the text re-wrap. No signup, no watermark." + ] + } + ] + }, + { + id: '5', + slug: 'buy-module-bundle-whole-suite-strategy', + tag: 'Article', + badge: 'BLOG', + title: 'Buy a Module, a Bundle, or the Whole Suite: How to Choose', + metaText: '5 min read · DocQube', + description: "DocQube can be bought three ways. Here's a simple way to decide which fits your team — and when upgrading makes the most financial sense.", + linkText: 'Read', + author: { + name: 'DocQube Team', + role: 'Product Strategy' + }, + publishedAt: 'Jul 15, 2026', + readTime: '5 min read', + sections: [ + { + title: 'The Hidden Cost of SaaS Sprawl', + paragraphs: [ + "Most growing companies end up with 4 to 6 disparate tools for file management, editing PDFs, routing approvals, and collecting verified signatures.", + "Consolidating into a unified document operating system eliminates integration friction and cuts license overhead by up to 55%." + ] + }, + { + title: 'When to Start With a Single Module', + paragraphs: [ + "If your immediate bottleneck is strictly PDF modifications or signing contracts, purchasing standalone DocQube PDF Editor or DocQube Sign lets you solve today's operational hurdle with minimal procurement delay." + ] + }, + { + title: 'Why Teams Upgrade to the Complete Suite', + bullets: [ + "Unified audit logs across files, changes, approvals, and legal signatures.", + "Single sign-on and role-based permissions across your entire company.", + "Predictable billing with zero surprises or hidden add-on costs." + ] + }, + { + title: 'Explore the Modules', + paragraphs: [ + "Evaluate your team's workflow requirements or speak with our solutions engineers to build a custom migration plan." + ] + } + ] + }, + { + id: '6', + slug: 'what-built-to-gdpr-and-hipaa-principles-means', + tag: 'Article', + badge: 'BLOG', + title: "What ‘Built to GDPR and HIPAA Principles’ Actually Means", + metaText: '7 min read · DocQube', + description: "You'll see DocQube say it's ‘built to’ certain standards rather than ‘certified...’. Here is an honest deep dive into security architecture, zero-knowledge encryption, and compliance.", + linkText: 'Read', + author: { + name: 'DocQube Security', + role: 'Compliance & Infrastructure' + }, + publishedAt: 'Jul 02, 2026', + readTime: '7 min read', + sections: [ + { + title: 'Architectural Enforcement vs. Marketing Claims', + paragraphs: [ + "True data protection requires cryptographic guarantees built directly into the software architecture.", + "When we say DocQube is built to GDPR and HIPAA principles, we mean our data pipeline enforces privacy by design, end-to-end data encryption in transit and at rest, and strict tenant isolation." + ] + }, + { + title: 'Zero-Knowledge & Encryption Standards', + paragraphs: [ + "Every document uploaded to DocQube is fragmented and encrypted using AES-256 keys managed via dedicated KMS." + ] + }, + { + title: 'Key Security Guarantees', + bullets: [ + "Full compliance with DPA (Data Processing Agreement) and BAA requirements.", + "Dedicated regional storage options ensuring strict data residency.", + "Granular permissions with time-limited public sharing links." + ] + }, + { + title: 'Review Our Security Model', + paragraphs: [ + "Visit our trust center or request a detailed architectural review to verify our compliance controls." + ] + } + ] + } +]; diff --git a/src/app/(features)/SecurityPage/Index.tsx b/src/app/(features)/SecurityPage/Index.tsx new file mode 100644 index 0000000..eb32687 --- /dev/null +++ b/src/app/(features)/SecurityPage/Index.tsx @@ -0,0 +1,48 @@ +"use client"; +import React from "react"; +import Navbar from "../Components/Navbar"; +import Footer from "../Components/Footer"; +import Faq from "../Components/Faq"; +import CustomHeroSection from "../Components/CustomHeroSection"; +import EnterpriseFeatures from "../Components/EnterpriseFeatures"; +import CustomFeatures from "../Components/CustomFeatures"; + +import { + securityHeroData, + securityControls, + securityCommitments, + securityFaqs +} from "./data"; + +const SecurityPage: React.FC = () => { + return ( +
+ +
+ {/* Hero Section */} + + + {/* Controls Section - Reusing EnterpriseFeatures for the 6 cards */} + + + + + {/* Commitments Section - Reusing CustomFeatures */} + + + {/* FAQ Section */} +
+ +
+ +
+
+
+ ); +}; + +export default SecurityPage; diff --git a/src/app/(features)/SecurityPage/data.ts b/src/app/(features)/SecurityPage/data.ts new file mode 100644 index 0000000..5e538c2 --- /dev/null +++ b/src/app/(features)/SecurityPage/data.ts @@ -0,0 +1,89 @@ +"use client"; +const securityicon1 = "/landing/security/securityicon1.png"; +const securityicon2 = "/landing/security/securityicon2.png"; +const securityicon3 = "/landing/security/securityicon3.png"; +const securityicon4 = "/landing/security/securityicon4.png"; +const securityicon5 = "/landing/security/securityicon5.png"; +const securityicon6 = "/landing/security/securityicon6.png"; +const SecurityImage = "/landing/security/SecurityImage.png"; +export const securityHeroData = { + badgeText: "SECURITY & TRUST", + headlineMain: "Your documents, protected.", + headlineHighlight: "", + description: "DocQube is built with security at its core — encryption everywhere, strict access control, tamper-evident audit logs and a clear commitment: we never sell your data or use it to train AI.", + primaryButtonText: "Contact sales", + secondaryButtonText: "Read the DPA" +}; + +export const securityControls = { + badgeText: "CONTROLS", + title: "How we protect your data", + features: [ + { + icon: securityicon1, + title: "Encryption", + description: "In transit with TLS 1.2+ and at rest with AES-256, across every module." + }, + { + icon: securityicon2, + title: "Access control", + description: "Role-based access control, multi-tenant isolation and the principle of least privilege." + }, + { + icon: securityicon3, + title: "Audit logging", + description: "A tamper-evident record of every access, edit, share and signature." + }, + { + icon: securityicon4, + title: "Virus scanning", + description: "Every upload is scanned for malware before it lands." + }, + { + icon: securityicon5, + title: "Backups & restore", + description: "Automated backups with data restore when you need it." + }, + { + icon: securityicon6, + title: "Monitoring", + description: "Continuous monitoring and a documented incident-response plan." + } + ] +}; + +export const securityCommitments = [ + { + badge: "OUR COMMITMENTS", + title: "Two promises we put in writing", + description: "", + bulletPoints: [ + "We never sell your data — an absolute commitment that survives termination.", + "We never use your data to train AI models — your documents are yours.", + "Data is processed on your instructions under our DPA.", + "Return or secure deletion of your data on termination." + ], + image: SecurityImage, + primaryButtonText: "Read the DPA →", + secondaryButtonText: "Sub-processors →" + } +]; + +export const securityFaqs = [ + { + question: "Where is my data stored?", + answer: "The Service is operated from India. International access is protected by our Data Processing Agreement and applicable cross-border transfer safeguards under the UAE PDPL and India's DPDPA." + }, + { + question: "Do you use my documents to train AI?", + answer: "No. We never use Client Data or personal data to train, fine-tune or improve any AI or machine-learning models. This commitment is absolute and survives termination." + }, + { + question: "Are you SOC 2 / HIPAA / GDPR certified?", + answer: "DocQube is built to GDPR and HIPAA principles with SOC 2-aligned controls. We do not claim formal certification unless it is independently evidenced — contact us for our current status." + }, + { + question: "How is access controlled?", + answer: "Through role-based access control, multi-tenant isolation and least-privilege administration, with a tamper-evident audit log of every action." + } +]; diff --git a/src/app/(features)/SolutionPage/AllSolutionsPage.tsx b/src/app/(features)/SolutionPage/AllSolutionsPage.tsx new file mode 100644 index 0000000..a6a2021 --- /dev/null +++ b/src/app/(features)/SolutionPage/AllSolutionsPage.tsx @@ -0,0 +1,215 @@ +"use client"; +import React, { useEffect } from "react"; +import Link from 'next/link'; +import { Sparkles, ArrowRight } from "lucide-react"; +import Navbar from "../Components/Navbar"; +import Footer from "../Components/Footer"; +import CustomHeroSection from "../Components/CustomHeroSection"; +import EnterpriseFeatures from "../Components/EnterpriseFeatures"; +const dotBg = "/landing/DotBg.png"; +import { + allSolutionsHeroData, + audienceSolutionData, + departmentSolutionData, + industrySolutionData, + useCaseSolutionData, +} from "./data/solutionData"; + +const AllSolutionsPage: React.FC = () => { + useEffect(() => { + if (typeof window !== "undefined" && window.location.hash) { + const targetId = window.location.hash.replace("#", ""); + const elem = document.getElementById(targetId); + if (elem) { + setTimeout(() => { + elem.scrollIntoView({ behavior: "smooth", block: "start" }); + }, 100); + } + } + }, []); + + return ( +
+ + +
+ {/* Hero Section */} + + + {/* By Audience Section */} +
+ +
+ + {/* By Department Section (ChallengeSection Card Style) */} +
+
+
+
+ + + BY DEPARTMENT + +
+

+ Built For Every Department +

+
+ +
+ {departmentSolutionData.map((dept, index) => { + const targetHref = dept.link || "/contact"; + return ( + +
+

+ {dept.title} +

+

+ {dept.description} +

+
+ +
+ Learn more + +
+ + ); + })} +
+
+
+ + {/* By Industry Section (ChallengeSection Card Style) */} +
+
+
+
+ + + BY INDUSTRY + +
+

+ Specialized Workflows Across 9 Industries +

+
+ +
+ {industrySolutionData.map((industry, index) => { + const targetHref = industry.link || (industry.title === "Real Estate" ? "/solutions/real-estate" : "/contact"); + return ( + +
+

+ {industry.title} +

+

+ {industry.description} +

+
+ +
+ Learn more + +
+ + ); + })} +
+
+
+ + {/* By Use Case Section (ChallengeSection Card Style) */} +
+
+
+
+ + + BY USE CASE + +
+

+ End-To-End Document Workflows +

+
+ +
+ {useCaseSolutionData.map((useCase, index) => { + const targetHref = useCase.link || (useCase.title.includes("Contract") || useCase.title.includes("Sign") ? "/product/sign" : useCase.title.includes("Archive") ? "/product/drive" : "/product/workflows"); + return ( + +
+

+ {useCase.title} +

+

+ {useCase.description} +

+
+ +
+ Learn more + +
+ + ); + })} +
+
+
+
+ +
+
+ ); +}; + +export default AllSolutionsPage; diff --git a/src/app/(features)/SolutionPage/EnterPrisePage.tsx b/src/app/(features)/SolutionPage/EnterPrisePage.tsx new file mode 100644 index 0000000..f20c9b7 --- /dev/null +++ b/src/app/(features)/SolutionPage/EnterPrisePage.tsx @@ -0,0 +1,54 @@ +"use client"; +import React from "react"; +import Navbar from "../Components/Navbar"; +import Footer from "../Components/Footer"; +import CustomHeroSection from "../Components/CustomHeroSection"; +import ChallengeSection from "../Components/ChallengeSection"; +import EnterpriseFeatures from "../Components/EnterpriseFeatures"; +import CustomFeatures from "../Components/CustomFeatures"; +import { enterpriseSolutionData } from "./data/solutionData"; + + + +const EnterPrisePage: React.FC = () => { + return ( +
+ +
+ {/* Hero Section */} + + + {/* Challenge Section */} + + + {/* How DocQube Helps Section */} + + + {/* Built On The Whole DocQube Platform */} + + + +
+
+
+ ); +}; + +export default EnterPrisePage; diff --git a/src/app/(features)/SolutionPage/LegalPage.tsx b/src/app/(features)/SolutionPage/LegalPage.tsx new file mode 100644 index 0000000..d24aa86 --- /dev/null +++ b/src/app/(features)/SolutionPage/LegalPage.tsx @@ -0,0 +1,51 @@ +"use client"; +import React from "react"; +import Navbar from "../Components/Navbar"; +import Footer from "../Components/Footer"; +import CustomHeroSection from "../Components/CustomHeroSection"; +import ChallengeSection from "../Components/ChallengeSection"; +import EnterpriseFeatures from "../Components/EnterpriseFeatures"; +import CustomFeatures from "../Components/CustomFeatures"; +import { legalSolutionData } from "./data/solutionData"; + +const LegalPage: React.FC = () => { + return ( +
+ +
+ {/* Hero Section */} + + + {/* Challenge Section */} + + + {/* How DocQube Helps Section */} + + + {/* Built On The Whole DocQube Platform */} + + +
+
+
+ ); +}; + +export default LegalPage; diff --git a/src/app/(features)/SolutionPage/OperationsPage.tsx b/src/app/(features)/SolutionPage/OperationsPage.tsx new file mode 100644 index 0000000..a2015c7 --- /dev/null +++ b/src/app/(features)/SolutionPage/OperationsPage.tsx @@ -0,0 +1,52 @@ +"use client"; +import React from "react"; +import Navbar from "../Components/Navbar"; +import Footer from "../Components/Footer"; +import CustomHeroSection from "../Components/CustomHeroSection"; +import ChallengeSection from "../Components/ChallengeSection"; +import EnterpriseFeatures from "../Components/EnterpriseFeatures"; +import CustomFeatures from "../Components/CustomFeatures"; +import { operationsSolutionData } from "./data/solutionData"; + +const OperationsPage: React.FC = () => { + return ( +
+ +
+ {/* Hero Section */} + + + {/* Challenge Section */} + + + {/* How DocQube Helps Section */} + + + {/* Built On The Whole DocQube Platform */} + + + +
+
+
+ ); +}; + +export default OperationsPage; diff --git a/src/app/(features)/SolutionPage/RealEstatePage.tsx b/src/app/(features)/SolutionPage/RealEstatePage.tsx new file mode 100644 index 0000000..7249a8d --- /dev/null +++ b/src/app/(features)/SolutionPage/RealEstatePage.tsx @@ -0,0 +1,52 @@ +"use client"; +import React from "react"; +import Navbar from "../Components/Navbar"; +import Footer from "../Components/Footer"; +import CustomHeroSection from "../Components/CustomHeroSection"; +import ChallengeSection from "../Components/ChallengeSection"; +import EnterpriseFeatures from "../Components/EnterpriseFeatures"; +import CustomFeatures from "../Components/CustomFeatures"; +import { realEstateSolutionData } from "./data/solutionData"; + +const RealEstatePage: React.FC = () => { + return ( +
+ +
+ {/* Hero Section */} + + + {/* Challenge Section */} + + + {/* How DocQube Helps Section */} + + + {/* Built On The Whole DocQube Platform */} + + + +
+
+
+ ); +}; + +export default RealEstatePage; diff --git a/src/app/(features)/SolutionPage/data/solutionData.ts b/src/app/(features)/SolutionPage/data/solutionData.ts new file mode 100644 index 0000000..8830154 --- /dev/null +++ b/src/app/(features)/SolutionPage/data/solutionData.ts @@ -0,0 +1,1625 @@ +"use client"; +import { ProductData } from '../../ProductPage/data/productData'; +const enterpriseImg = "/landing/solutionsPage/Enterprise.png"; +const enterpriseIcon1 = "/landing/solutionsPage/solutionicon1.png"; +const enterpriseIcon2 = "/landing/solutionsPage/solutionicon2.png"; +const enterpriseIcon3 = "/landing/solutionsPage/solutionicon3.png"; +const enterpriseIcon4 = "/landing/solutionsPage/solutionicon4.png"; +const legalImg = "/landing/solutionsPage/legal.png"; +const estateImg = "/landing/solutionsPage/estate.png"; +const operationsImg = "/landing/solutionsPage/operations.png"; + +export const enterpriseSolutionData: ProductData = { + hero: { + badgeText: "FOR LARGE & REGULATED ORGANIZATIONS", + headlineMain: "DocQube For Enterprise", + headlineHighlight: "", + description: "Draft, negotiate, sign and archive contracts in one governed workspace — with real PDF editing, verification and a defensive record.", + primaryButtonText: "TALK TO SALES", + secondaryButtonText: "SEE THE SUITE" + }, + faqs: [], + enterpriseFeaturesData: { + badgeText: "", + title: "Built On The Whole DocQube Platform", + bottomNote: "Drive, PDF editor, Workflows and Sign — one login, one security model", + features: [ + { + title: "Drive", + description: "Secure DMS and AI.", + icon: enterpriseIcon1 + }, + { + title: "PDF Editor", + description: "Active PDF editing.", + icon: enterpriseIcon2 + }, + { + title: "Workflows", + description: "Approval routing.", + icon: enterpriseIcon3 + }, + { + title: "Sign", + description: "Verified e-signatures.", + icon: enterpriseIcon4 + } + ] + }, + features: [ + { + badge: "HOW DOCQUBE HELPS", + title: "One Platform For Enterprise", + description: "", + bulletPoints: [ + "One RBAC and security model across modules", + "Multi-tenant isolation and SSO", + "A single audit trail, upload to signature", + "Dedicated or on-premises deployment on Enterprise" + ], + primaryButtonText: "SEE THE FULL PLATFORM", + image: enterpriseImg + } + ] +}; + +export const legalSolutionData: ProductData = { + hero: { + badgeText: "FOR LEGAL TEAMS", + headlineMain: "DocQube For Legal", + headlineHighlight: "", + description: "Draft, negotiate, sign and archive contracts in one governed workspace — with real PDF editing, verification and a defensible record.", + primaryButtonText: "BOOK A DEMO", + secondaryButtonText: "START FREE TRIAL" + }, + faqs: [], + enterpriseFeaturesData: { + badgeText: "", + title: "Built On The Whole DocQube Platform", + bottomNote: "Drive, PDF editor, Workflows and Sign — one login, one security model", + features: [ + { + title: "Drive", + description: "Secure DMS and AI.", + icon: enterpriseIcon1 + }, + { + title: "PDF Editor", + description: "Active PDF editing.", + icon: enterpriseIcon2 + }, + { + title: "Workflows", + description: "Approval routing.", + icon: enterpriseIcon3 + }, + { + title: "Sign", + description: "Verified e-signatures.", + icon: enterpriseIcon4 + } + ] + }, + features: [ + { + badge: "HOW DOCQUBE HELPS", + title: "One Platform For Legal", + description: "", + bulletPoints: [ + "True-reflow PDF editing and permanent redaction", + "Legally-binding e-signatures with verification", + "Full version history and audit trail per matter", + "AI Q&A across your contract set" + ], + primaryButtonText: "SEE THE FULL PLATFORM", + image: legalImg + } + ] +}; + +export const realEstateSolutionData: ProductData = { + hero: { + badgeText: "BY INDUSTRY", + headlineMain: "DocQube for Real Estate", + headlineHighlight: "", + description: "Close faster with e-signing built in — manage listings, agreements and lease documents, and route approvals to signature in one flow.", + primaryButtonText: "BOOK A DEMO", + secondaryButtonText: "START FREE TRIAL" + }, + faqs: [], + enterpriseFeaturesData: { + badgeText: "", + title: "Built on the whole DocQube platform", + bottomNote: "Drive, PDF Editor, Workflows and Sign — one login, one security model.", + features: [ + { + title: "Drive", + description: "Secure DMS with AI.", + icon: enterpriseIcon1 + }, + { + title: "PDF Editor", + description: "True reflow editing.", + icon: enterpriseIcon2 + }, + { + title: "Workflows", + description: "Approvals & routing.", + icon: enterpriseIcon3 + }, + { + title: "Sign", + description: "Verified e-signatures.", + icon: enterpriseIcon4 + } + ] + }, + features: [ + { + badge: "HOW DOCQUBE HELPS", + title: "One platform for Real Estate", + description: "", + bulletPoints: [ + "Legally-binding e-signatures with verification", + "Route agreements to signature automatically", + "One record per transaction, fully searchable", + "Version history and audit trail" + ], + primaryButtonText: "See the full platform →", + image: estateImg + } + ] +}; + +export const operationsSolutionData: ProductData = { + hero: { + badgeText: "FOR OPERATIONS TEAMS", + headlineMain: "DocQube for Operations", + headlineHighlight: "", + description: "Standardise SOPs, forms and records in one place, and automate the routine document approvals that keep the business moving.", + primaryButtonText: "BOOK A DEMO", + secondaryButtonText: "START FREE TRIAL" + }, + faqs: [], + enterpriseFeaturesData: { + badgeText: "", + title: "Built on the whole DocQube platform", + bottomNote: "Drive, PDF Editor, Workflows and Sign — one login, one security model.", + features: [ + { + title: "Drive", + description: "Secure DMS with AI.", + icon: enterpriseIcon1 + }, + { + title: "PDF Editor", + description: "True-reflow editing.", + icon: enterpriseIcon2 + }, + { + title: "Workflows", + description: "Approvals & routing.", + icon: enterpriseIcon3 + }, + { + title: "Sign", + description: "Verified e-signatures.", + icon: enterpriseIcon4 + } + ] + }, + features: [ + { + badge: "HOW DOCQUBE HELPS", + title: "One platform for Operations", + description: "", + bulletPoints: [ + "One source of truth for SOPs and forms", + "Route approvals and track status end to end", + "Automated backups and data restore", + "Role-based access across sites and teams" + ], + primaryButtonText: "See the full platform \u2192", + image: operationsImg + } + ] +}; + +export const hrSolutionData: ProductData = { + hero: { + badgeText: "FOR HR TEAMS", + headlineMain: "DocQube for Human", + headlineHighlight: "Resources", + description: "Keep every employee document — contracts, policies, IDs and signed forms — in one secure, searchable place, and move onboarding and approvals along without the email chase.", + primaryButtonText: "BOOK A DEMO", + secondaryButtonText: "START FREE TRIAL" + }, + faqs: [], + enterpriseFeaturesData: { + badgeText: "", + title: "Built on the whole DocQube platform", + bottomNote: "Drive, PDF Editor, Workflows and Sign — one login, one security model.", + features: [ + { + title: "Drive", + description: "Secure DMS with AI.", + icon: enterpriseIcon1 + }, + { + title: "PDF Editor", + description: "True reflow editing.", + icon: enterpriseIcon2 + }, + { + title: "Workflows", + description: "Approvals & routing.", + icon: enterpriseIcon3 + }, + { + title: "Sign", + description: "Verified e-signatures.", + icon: enterpriseIcon4 + } + ] + }, + features: [ + { + badge: "HOW DOCQUBE HELPS", + title: "One platform for Human Resources", + description: "", + bulletPoints: [ + "A secure home for every employee record, with RBAC", + "Route offer letters and policies for e-signature", + "Ask the AI assistant to find a clause or policy instantly", + "A tamper-evident log of every access and change" + ], + primaryButtonText: "See the full platform →", + image: operationsImg + } + ] +}; + +export const financeSolutionData: ProductData = { + hero: { + badgeText: "FOR FINANCE TEAMS", + headlineMain: "DocQube for", + headlineHighlight: "Finance", + description: "Manage invoices, statements and contracts with control and a clean audit trail — route approvals in order and keep every version.", + primaryButtonText: "BOOK A DEMO", + secondaryButtonText: "START FREE TRIAL" + }, + faqs: [], + enterpriseFeaturesData: { + badgeText: "", + title: "Built on the whole DocQube platform", + bottomNote: "Drive, PDF Editor, Workflows and Sign — one login, one security model.", + features: [ + { + title: "Drive", + description: "Secure DMS with AI.", + icon: enterpriseIcon1 + }, + { + title: "PDF Editor", + description: "True reflow editing.", + icon: enterpriseIcon2 + }, + { + title: "Workflows", + description: "Approvals & routing.", + icon: enterpriseIcon3 + }, + { + title: "Sign", + description: "Verified e-signatures.", + icon: enterpriseIcon4 + } + ] + }, + features: [ + { + badge: "HOW DOCQUBE HELPS", + title: "One platform for Finance", + description: "", + bulletPoints: [ + "Route invoice and PO approvals with status tracking", + "Version history and retention on every document", + "Convert PDFs to editable formats for reconciliation", + "Export a complete audit trail on demand" + ], + primaryButtonText: "See the full platform →", + image: operationsImg + } + ] +}; + +export const procurementSolutionData: ProductData = { + hero: { + badgeText: "FOR PROCUREMENT TEAMS", + headlineMain: "DocQube for", + headlineHighlight: "Procurement", + description: "Bring vendor documents, quotes and approvals into one flow — from RFQ to signed contract — with every step tracked.", + primaryButtonText: "BOOK A DEMO", + secondaryButtonText: "START FREE TRIAL" + }, + faqs: [], + enterpriseFeaturesData: { + badgeText: "", + title: "Built on the whole DocQube platform", + bottomNote: "Drive, PDF Editor, Workflows and Sign — one login, one security model.", + features: [ + { + title: "Drive", + description: "Secure DMS with AI.", + icon: enterpriseIcon1 + }, + { + title: "PDF Editor", + description: "True reflow editing.", + icon: enterpriseIcon2 + }, + { + title: "Workflows", + description: "Approvals & routing.", + icon: enterpriseIcon3 + }, + { + title: "Sign", + description: "Verified e-signatures.", + icon: enterpriseIcon4 + } + ] + }, + features: [ + { + badge: "HOW DOCQUBE HELPS", + title: "One platform for Procurement", + description: "", + bulletPoints: [ + "Route vendor approvals with clear status", + "Trigger signatures automatically on approval", + "Store signed contracts with retention and search", + "AI assistant surfaces terms across vendor docs" + ], + primaryButtonText: "See the full platform →", + image: operationsImg + } + ] +}; + +export const salesSolutionData: ProductData = { + hero: { + badgeText: "FOR SALES TEAMS", + headlineMain: "DocQube for", + headlineHighlight: "Sales", + description: "Send proposals and order forms for signature, track them to close, and keep every signed deal in one searchable archive.", + primaryButtonText: "BOOK A DEMO", + secondaryButtonText: "START FREE TRIAL" + }, + faqs: [], + enterpriseFeaturesData: { + badgeText: "", + title: "Built on the whole DocQube platform", + bottomNote: "Drive, PDF Editor, Workflows and Sign — one login, one security model.", + features: [ + { + title: "Drive", + description: "Secure DMS with AI.", + icon: enterpriseIcon1 + }, + { + title: "PDF Editor", + description: "True reflow editing.", + icon: enterpriseIcon2 + }, + { + title: "Workflows", + description: "Approvals & routing.", + icon: enterpriseIcon3 + }, + { + title: "Sign", + description: "Verified e-signatures.", + icon: enterpriseIcon4 + } + ] + }, + features: [ + { + badge: "HOW DOCQUBE HELPS", + title: "One platform for Sales", + description: "", + bulletPoints: [ + "Send proposals and order forms for e-signature", + "Track envelopes to completion with reminders", + "Store closed deals with search and retention", + "Trigger next steps automatically on signing" + ], + primaryButtonText: "See the full platform →", + image: operationsImg + } + ] +}; + +export const administrationSolutionData: ProductData = { + hero: { + badgeText: "FOR ADMIN TEAMS", + headlineMain: "DocQube for", + headlineHighlight: "Administration", + description: "Handle the organisation's day-to-day documents — forms, records, approvals — with less manual work and a clear record of everything.", + primaryButtonText: "BOOK A DEMO", + secondaryButtonText: "START FREE TRIAL" + }, + faqs: [], + enterpriseFeaturesData: { + badgeText: "", + title: "Built on the whole DocQube platform", + bottomNote: "Drive, PDF Editor, Workflows and Sign — one login, one security model.", + features: [ + { + title: "Drive", + description: "Secure DMS with AI.", + icon: enterpriseIcon1 + }, + { + title: "PDF Editor", + description: "True reflow editing.", + icon: enterpriseIcon2 + }, + { + title: "Workflows", + description: "Approvals & routing.", + icon: enterpriseIcon3 + }, + { + title: "Sign", + description: "Verified e-signatures.", + icon: enterpriseIcon4 + } + ] + }, + features: [ + { + badge: "HOW DOCQUBE HELPS", + title: "One platform for Administration", + description: "", + bulletPoints: [ + "Route everyday approvals automatically", + "Instant search and OCR across records", + "Granular sharing with expiry and permissions", + "A complete, exportable activity log" + ], + primaryButtonText: "See the full platform →", + image: operationsImg + } + ] +}; + +export const governmentSolutionData: ProductData = { + hero: { + badgeText: "BY INDUSTRY", + headlineMain: "DocQube for Government &", + headlineHighlight: "Public Sector", + description: "Manage records, approvals and signed documents with the governance, audit trail and access control the public sector demands.", + primaryButtonText: "BOOK A DEMO", + secondaryButtonText: "START FREE TRIAL" + }, + faqs: [], + enterpriseFeaturesData: { + badgeText: "", + title: "Built on the whole DocQube platform", + bottomNote: "Drive, PDF Editor, Workflows and Sign — one login, one security model.", + features: [ + { + title: "Drive", + description: "Secure DMS with AI.", + icon: enterpriseIcon1 + }, + { + title: "PDF Editor", + description: "True reflow editing.", + icon: enterpriseIcon2 + }, + { + title: "Workflows", + description: "Approvals & routing.", + icon: enterpriseIcon3 + }, + { + title: "Sign", + description: "Verified e-signatures.", + icon: enterpriseIcon4 + } + ] + }, + features: [ + { + badge: "HOW DOCQUBE HELPS", + title: "One platform for Government & Public Sector", + description: "", + bulletPoints: [ + "Tamper-evident audit logs and retention", + "Role-based access and multi-tenant isolation", + "Routed approvals with full status tracking", + "Built to GDPR and HIPAA principles" + ], + primaryButtonText: "See the full platform →", + image: operationsImg + } + ] +}; + +export const constructionSolutionData: ProductData = { + hero: { + badgeText: "BY INDUSTRY", + headlineMain: "DocQube for", + headlineHighlight: "Construction", + description: "Keep drawings, contracts, RFIs and site records in one place, and route approvals between office and site without losing the thread.", + primaryButtonText: "BOOK A DEMO", + secondaryButtonText: "START FREE TRIAL" + }, + faqs: [], + enterpriseFeaturesData: { + badgeText: "", + title: "Built on the whole DocQube platform", + bottomNote: "Drive, PDF Editor, Workflows and Sign — one login, one security model.", + features: [ + { + title: "Drive", + description: "Secure DMS with AI.", + icon: enterpriseIcon1 + }, + { + title: "PDF Editor", + description: "True reflow editing.", + icon: enterpriseIcon2 + }, + { + title: "Workflows", + description: "Approvals & routing.", + icon: enterpriseIcon3 + }, + { + title: "Sign", + description: "Verified e-signatures.", + icon: enterpriseIcon4 + } + ] + }, + features: [ + { + badge: "HOW DOCQUBE HELPS", + title: "One platform for Construction", + description: "", + bulletPoints: [ + "One source of truth for project documents", + "Route approvals and signatures across parties", + "Version history on every drawing and contract", + "Mobile-friendly access with permissions" + ], + primaryButtonText: "See the full platform →", + image: operationsImg + } + ] +}; + +export const healthcareSolutionData: ProductData = { + hero: { + badgeText: "BY INDUSTRY", + headlineMain: "DocQube for", + headlineHighlight: "Healthcare", + description: "Handle patient forms, consents and policies with encryption, access control and an audit trail — built to HIPAA principles.", + primaryButtonText: "BOOK A DEMO", + secondaryButtonText: "START FREE TRIAL" + }, + faqs: [], + enterpriseFeaturesData: { + badgeText: "", + title: "Built on the whole DocQube platform", + bottomNote: "Drive, PDF Editor, Workflows and Sign — one login, one security model.", + features: [ + { + title: "Drive", + description: "Secure DMS with AI.", + icon: enterpriseIcon1 + }, + { + title: "PDF Editor", + description: "True reflow editing.", + icon: enterpriseIcon2 + }, + { + title: "Workflows", + description: "Approvals & routing.", + icon: enterpriseIcon3 + }, + { + title: "Sign", + description: "Verified e-signatures.", + icon: enterpriseIcon4 + } + ] + }, + features: [ + { + badge: "HOW DOCQUBE HELPS", + title: "One platform for Healthcare", + description: "", + bulletPoints: [ + "Encryption in transit and at rest", + "Role-based access and isolation", + "E-signatures for consents, tracked and verified", + "Built to HIPAA principles" + ], + primaryButtonText: "See the full platform →", + image: operationsImg + } + ] +}; + +export const manufacturingSolutionData: ProductData = { + hero: { + badgeText: "BY INDUSTRY", + headlineMain: "DocQube for", + headlineHighlight: "Manufacturing", + description: "Standardise SOPs, quality records and supplier contracts, and automate the approvals that keep production compliant.", + primaryButtonText: "BOOK A DEMO", + secondaryButtonText: "START FREE TRIAL" + }, + faqs: [], + enterpriseFeaturesData: { + badgeText: "", + title: "Built on the whole DocQube platform", + bottomNote: "Drive, PDF Editor, Workflows and Sign — one login, one security model.", + features: [ + { + title: "Drive", + description: "Secure DMS with AI.", + icon: enterpriseIcon1 + }, + { + title: "PDF Editor", + description: "True reflow editing.", + icon: enterpriseIcon2 + }, + { + title: "Workflows", + description: "Approvals & routing.", + icon: enterpriseIcon3 + }, + { + title: "Sign", + description: "Verified e-signatures.", + icon: enterpriseIcon4 + } + ] + }, + features: [ + { + badge: "HOW DOCQUBE HELPS", + title: "One platform for Manufacturing", + description: "", + bulletPoints: [ + "Controlled SOPs and quality documents", + "Routed supplier and change approvals", + "Full version history and audit trail", + "Search and OCR across technical documents" + ], + primaryButtonText: "See the full platform →", + image: operationsImg + } + ] +}; + +export const educationSolutionData: ProductData = { + hero: { + badgeText: "BY INDUSTRY", + headlineMain: "DocQube for", + headlineHighlight: "Education", + description: "Manage student records, staff documents and policies securely, and route the forms and approvals a busy institution runs on.", + primaryButtonText: "BOOK A DEMO", + secondaryButtonText: "START FREE TRIAL" + }, + faqs: [], + enterpriseFeaturesData: { + badgeText: "", + title: "Built on the whole DocQube platform", + bottomNote: "Drive, PDF Editor, Workflows and Sign — one login, one security model.", + features: [ + { + title: "Drive", + description: "Secure DMS with AI.", + icon: enterpriseIcon1 + }, + { + title: "PDF Editor", + description: "True reflow editing.", + icon: enterpriseIcon2 + }, + { + title: "Workflows", + description: "Approvals & routing.", + icon: enterpriseIcon3 + }, + { + title: "Sign", + description: "Verified e-signatures.", + icon: enterpriseIcon4 + } + ] + }, + features: [ + { + badge: "HOW DOCQUBE HELPS", + title: "One platform for Education", + description: "", + bulletPoints: [ + "Secure, searchable record management", + "E-signatures for forms and consents", + "Granular, role-based access", + "Automated backups and retention" + ], + primaryButtonText: "See the full platform →", + image: operationsImg + } + ] +}; + +export const insuranceSolutionData: ProductData = { + hero: { + badgeText: "BY INDUSTRY", + headlineMain: "DocQube for", + headlineHighlight: "Insurance", + description: "Manage policies, claims and signed forms in one workspace — route claim approvals and keep a clean, searchable archive.", + primaryButtonText: "BOOK A DEMO", + secondaryButtonText: "START FREE TRIAL" + }, + faqs: [], + enterpriseFeaturesData: { + badgeText: "", + title: "Built on the whole DocQube platform", + bottomNote: "Drive, PDF Editor, Workflows and Sign — one login, one security model.", + features: [ + { + title: "Drive", + description: "Secure DMS with AI.", + icon: enterpriseIcon1 + }, + { + title: "PDF Editor", + description: "True reflow editing.", + icon: enterpriseIcon2 + }, + { + title: "Workflows", + description: "Approvals & routing.", + icon: enterpriseIcon3 + }, + { + title: "Sign", + description: "Verified e-signatures.", + icon: enterpriseIcon4 + } + ] + }, + features: [ + { + badge: "HOW DOCQUBE HELPS", + title: "One platform for Insurance", + description: "", + bulletPoints: [ + "One archive for policies and claims", + "Routed claim approvals with status", + "E-signatures with verification", + "Instant search and OCR" + ], + primaryButtonText: "See the full platform →", + image: operationsImg + } + ] +}; + +export const logisticsSolutionData: ProductData = { + hero: { + badgeText: "BY INDUSTRY", + headlineMain: "DocQube for Logistics &", + headlineHighlight: "Supply Chain", + description: "Keep contracts, proof-of-delivery and compliance documents organised, and automate the approvals that move goods.", + primaryButtonText: "BOOK A DEMO", + secondaryButtonText: "START FREE TRIAL" + }, + faqs: [], + enterpriseFeaturesData: { + badgeText: "", + title: "Built on the whole DocQube platform", + bottomNote: "Drive, PDF Editor, Workflows and Sign — one login, one security model.", + features: [ + { + title: "Drive", + description: "Secure DMS with AI.", + icon: enterpriseIcon1 + }, + { + title: "PDF Editor", + description: "True reflow editing.", + icon: enterpriseIcon2 + }, + { + title: "Workflows", + description: "Approvals & routing.", + icon: enterpriseIcon3 + }, + { + title: "Sign", + description: "Verified e-signatures.", + icon: enterpriseIcon4 + } + ] + }, + features: [ + { + badge: "HOW DOCQUBE HELPS", + title: "One platform for Logistics & Supply Chain", + description: "", + bulletPoints: [ + "One home for contracts and PODs", + "Routed approvals with status tracking", + "Search and OCR across documents", + "Retention and exportable audit trail" + ], + primaryButtonText: "See the full platform →", + image: operationsImg + } + ] +}; + +export const contractManagementSolutionData: ProductData = { + hero: { + badgeText: "BY USE CASE", + headlineMain: "DocQube for Contract", + headlineHighlight: "Management", + description: "Draft, negotiate, sign and archive contracts in one place — with real PDF editing, verified e-signatures and a full audit trail.", + primaryButtonText: "BOOK A DEMO", + secondaryButtonText: "START FREE TRIAL" + }, + faqs: [], + enterpriseFeaturesData: { + badgeText: "", + title: "Built on the whole DocQube platform", + bottomNote: "Drive, PDF Editor, Workflows and Sign — one login, one security model.", + features: [ + { + title: "Drive", + description: "Secure DMS with AI.", + icon: enterpriseIcon1 + }, + { + title: "PDF Editor", + description: "True reflow editing.", + icon: enterpriseIcon2 + }, + { + title: "Workflows", + description: "Approvals & routing.", + icon: enterpriseIcon3 + }, + { + title: "Sign", + description: "Verified e-signatures.", + icon: enterpriseIcon4 + } + ] + }, + features: [ + { + badge: "HOW DOCQUBE HELPS", + title: "One platform for Contract Management", + description: "", + bulletPoints: [ + "True-reflow editing and redaction", + "E-signatures with verification", + "AI Q&A across contracts", + "Version history and retention" + ], + primaryButtonText: "See the full platform →", + image: operationsImg + } + ] +}; + +export const employeeOnboardingSolutionData: ProductData = { + hero: { + badgeText: "BY USE CASE", + headlineMain: "DocQube for Employee", + headlineHighlight: "Onboarding", + description: "Get new hires productive faster — route offer letters, policies and forms for signature and store everything securely.", + primaryButtonText: "BOOK A DEMO", + secondaryButtonText: "START FREE TRIAL" + }, + faqs: [], + enterpriseFeaturesData: { + badgeText: "", + title: "Built on the whole DocQube platform", + bottomNote: "Drive, PDF Editor, Workflows and Sign — one login, one security model.", + features: [ + { + title: "Drive", + description: "Secure DMS with AI.", + icon: enterpriseIcon1 + }, + { + title: "PDF Editor", + description: "True reflow editing.", + icon: enterpriseIcon2 + }, + { + title: "Workflows", + description: "Approvals & routing.", + icon: enterpriseIcon3 + }, + { + title: "Sign", + description: "Verified e-signatures.", + icon: enterpriseIcon4 + } + ] + }, + features: [ + { + badge: "HOW DOCQUBE HELPS", + title: "One platform for Employee Onboarding", + description: "", + bulletPoints: [ + "Route offers and policies for e-signature", + "Track completion with reminders", + "Secure, searchable personnel files", + "Role-based access to sensitive data" + ], + primaryButtonText: "See the full platform →", + image: operationsImg + } + ] +}; + +export const vendorApprovalsSolutionData: ProductData = { + hero: { + badgeText: "BY USE CASE", + headlineMain: "DocQube for Vendor", + headlineHighlight: "Approvals", + description: "Move vendor documents from request to signed contract with every approval tracked and every signature verified.", + primaryButtonText: "BOOK A DEMO", + secondaryButtonText: "START FREE TRIAL" + }, + faqs: [], + enterpriseFeaturesData: { + badgeText: "", + title: "Built on the whole DocQube platform", + bottomNote: "Drive, PDF Editor, Workflows and Sign — one login, one security model.", + features: [ + { + title: "Drive", + description: "Secure DMS with AI.", + icon: enterpriseIcon1 + }, + { + title: "PDF Editor", + description: "True reflow editing.", + icon: enterpriseIcon2 + }, + { + title: "Workflows", + description: "Approvals & routing.", + icon: enterpriseIcon3 + }, + { + title: "Sign", + description: "Verified e-signatures.", + icon: enterpriseIcon4 + } + ] + }, + features: [ + { + badge: "HOW DOCQUBE HELPS", + title: "One platform for Vendor Approvals", + description: "", + bulletPoints: [ + "Route vendor approvals in order", + "Auto-trigger signatures on approval", + "Searchable archive with retention", + "Full audit trail" + ], + primaryButtonText: "See the full platform →", + image: operationsImg + } + ] +}; + +export const leaveRequestsSolutionData: ProductData = { + hero: { + badgeText: "BY USE CASE", + headlineMain: "DocQube for Leave", + headlineHighlight: "Requests", + description: "Turn leave forms into a tracked approval flow — submitted, routed, approved and recorded, without the back-and-forth.", + primaryButtonText: "BOOK A DEMO", + secondaryButtonText: "START FREE TRIAL" + }, + faqs: [], + enterpriseFeaturesData: { + badgeText: "", + title: "Built on the whole DocQube platform", + bottomNote: "Drive, PDF Editor, Workflows and Sign — one login, one security model.", + features: [ + { + title: "Drive", + description: "Secure DMS with AI.", + icon: enterpriseIcon1 + }, + { + title: "PDF Editor", + description: "True reflow editing.", + icon: enterpriseIcon2 + }, + { + title: "Workflows", + description: "Approvals & routing.", + icon: enterpriseIcon3 + }, + { + title: "Sign", + description: "Verified e-signatures.", + icon: enterpriseIcon4 + } + ] + }, + features: [ + { + badge: "HOW DOCQUBE HELPS", + title: "One platform for Leave Requests", + description: "", + bulletPoints: [ + "Routed approvals with status", + "Notifications at each step", + "A clean, searchable record", + "Role-based visibility" + ], + primaryButtonText: "See the full platform →", + image: operationsImg + } + ] +}; + +export const purchaseRequestsSolutionData: ProductData = { + hero: { + badgeText: "BY USE CASE", + headlineMain: "DocQube for Purchase", + headlineHighlight: "Requests", + description: "Route purchase requests and POs for approval with clear status and a complete, exportable trail.", + primaryButtonText: "BOOK A DEMO", + secondaryButtonText: "START FREE TRIAL" + }, + faqs: [], + enterpriseFeaturesData: { + badgeText: "", + title: "Built on the whole DocQube platform", + bottomNote: "Drive, PDF Editor, Workflows and Sign — one login, one security model.", + features: [ + { + title: "Drive", + description: "Secure DMS with AI.", + icon: enterpriseIcon1 + }, + { + title: "PDF Editor", + description: "True reflow editing.", + icon: enterpriseIcon2 + }, + { + title: "Workflows", + description: "Approvals & routing.", + icon: enterpriseIcon3 + }, + { + title: "Sign", + description: "Verified e-signatures.", + icon: enterpriseIcon4 + } + ] + }, + features: [ + { + badge: "HOW DOCQUBE HELPS", + title: "One platform for Purchase Requests", + description: "", + bulletPoints: [ + "Route PR/PO approvals in order", + "Track status end to end", + "Trigger signatures automatically", + "Export the full trail" + ], + primaryButtonText: "See the full platform →", + image: operationsImg + } + ] +}; + +export const leaseAgreementsSolutionData: ProductData = { + hero: { + badgeText: "BY USE CASE", + headlineMain: "DocQube for Lease", + headlineHighlight: "Agreements", + description: "Prepare, sign and store lease agreements in one flow — with verified signatures and a record per property.", + primaryButtonText: "BOOK A DEMO", + secondaryButtonText: "START FREE TRIAL" + }, + faqs: [], + enterpriseFeaturesData: { + badgeText: "", + title: "Built on the whole DocQube platform", + bottomNote: "Drive, PDF Editor, Workflows and Sign — one login, one security model.", + features: [ + { + title: "Drive", + description: "Secure DMS with AI.", + icon: enterpriseIcon1 + }, + { + title: "PDF Editor", + description: "True reflow editing.", + icon: enterpriseIcon2 + }, + { + title: "Workflows", + description: "Approvals & routing.", + icon: enterpriseIcon3 + }, + { + title: "Sign", + description: "Verified e-signatures.", + icon: enterpriseIcon4 + } + ] + }, + features: [ + { + badge: "HOW DOCQUBE HELPS", + title: "One platform for Lease Agreements", + description: "", + bulletPoints: [ + "Edit and prepare leases in-browser", + "E-signatures with verification", + "One searchable record per lease", + "Version history and audit trail" + ], + primaryButtonText: "See the full platform →", + image: operationsImg + } + ] +}; + +export const invoiceApprovalsSolutionData: ProductData = { + hero: { + badgeText: "BY USE CASE", + headlineMain: "DocQube for Invoice", + headlineHighlight: "Approvals", + description: "Route invoices for approval with clear ownership and a clean audit trail, then archive them with retention.", + primaryButtonText: "BOOK A DEMO", + secondaryButtonText: "START FREE TRIAL" + }, + faqs: [], + enterpriseFeaturesData: { + badgeText: "", + title: "Built on the whole DocQube platform", + bottomNote: "Drive, PDF Editor, Workflows and Sign — one login, one security model.", + features: [ + { + title: "Drive", + description: "Secure DMS with AI.", + icon: enterpriseIcon1 + }, + { + title: "PDF Editor", + description: "True reflow editing.", + icon: enterpriseIcon2 + }, + { + title: "Workflows", + description: "Approvals & routing.", + icon: enterpriseIcon3 + }, + { + title: "Sign", + description: "Verified e-signatures.", + icon: enterpriseIcon4 + } + ] + }, + features: [ + { + badge: "HOW DOCQUBE HELPS", + title: "One platform for Invoice Approvals", + description: "", + bulletPoints: [ + "Route invoice approvals with status", + "Convert PDFs for reconciliation", + "Retention and search on every invoice", + "Exportable audit trail" + ], + primaryButtonText: "See the full platform →", + image: operationsImg + } + ] +}; + +export const documentArchivingSolutionData: ProductData = { + hero: { + badgeText: "BY USE CASE", + headlineMain: "DocQube for Document", + headlineHighlight: "Archiving", + description: "Keep a secure, searchable archive of your organisation's documents — with retention, OCR and access control.", + primaryButtonText: "BOOK A DEMO", + secondaryButtonText: "START FREE TRIAL" + }, + faqs: [], + enterpriseFeaturesData: { + badgeText: "", + title: "Built on the whole DocQube platform", + bottomNote: "Drive, PDF Editor, Workflows and Sign — one login, one security model.", + features: [ + { + title: "Drive", + description: "Secure DMS with AI.", + icon: enterpriseIcon1 + }, + { + title: "PDF Editor", + description: "True reflow editing.", + icon: enterpriseIcon2 + }, + { + title: "Workflows", + description: "Approvals & routing.", + icon: enterpriseIcon3 + }, + { + title: "Sign", + description: "Verified e-signatures.", + icon: enterpriseIcon4 + } + ] + }, + features: [ + { + badge: "HOW DOCQUBE HELPS", + title: "One platform for Document Archiving", + description: "", + bulletPoints: [ + "OCR makes scans searchable", + "Retention and backups built in", + "Granular, role-based access", + "Instant cross-document search" + ], + primaryButtonText: "See the full platform →", + image: operationsImg + } + ] +}; + +export const siteInspectionSolutionData: ProductData = { + hero: { + badgeText: "BY USE CASE", + headlineMain: "DocQube for Site", + headlineHighlight: "Inspection", + description: "Capture inspection documents and sign-offs, route them for approval, and keep a defensible record for every site.", + primaryButtonText: "BOOK A DEMO", + secondaryButtonText: "START FREE TRIAL" + }, + faqs: [], + enterpriseFeaturesData: { + badgeText: "", + title: "Built on the whole DocQube platform", + bottomNote: "Drive, PDF Editor, Workflows and Sign — one login, one security model.", + features: [ + { + title: "Drive", + description: "Secure DMS with AI.", + icon: enterpriseIcon1 + }, + { + title: "PDF Editor", + description: "True reflow editing.", + icon: enterpriseIcon2 + }, + { + title: "Workflows", + description: "Approvals & routing.", + icon: enterpriseIcon3 + }, + { + title: "Sign", + description: "Verified e-signatures.", + icon: enterpriseIcon4 + } + ] + }, + features: [ + { + badge: "HOW DOCQUBE HELPS", + title: "One platform for Site Inspection", + description: "", + bulletPoints: [ + "Digitise and OCR inspection records", + "Route sign-offs for e-signature", + "One record per site, searchable", + "Tamper-evident audit trail" + ], + primaryButtonText: "See the full platform →", + image: operationsImg + } + ] +}; + +export const clientOnboardingSolutionData: ProductData = { + hero: { + badgeText: "BY USE CASE", + headlineMain: "DocQube for Client", + headlineHighlight: "Onboarding", + description: "Collect, sign and store client documents in one smooth flow — faster starts, and a complete record from day one.", + primaryButtonText: "BOOK A DEMO", + secondaryButtonText: "START FREE TRIAL" + }, + faqs: [], + enterpriseFeaturesData: { + badgeText: "", + title: "Built on the whole DocQube platform", + bottomNote: "Drive, PDF Editor, Workflows and Sign — one login, one security model.", + features: [ + { + title: "Drive", + description: "Secure DMS with AI.", + icon: enterpriseIcon1 + }, + { + title: "PDF Editor", + description: "True reflow editing.", + icon: enterpriseIcon2 + }, + { + title: "Workflows", + description: "Approvals & routing.", + icon: enterpriseIcon3 + }, + { + title: "Sign", + description: "Verified e-signatures.", + icon: enterpriseIcon4 + } + ] + }, + features: [ + { + badge: "HOW DOCQUBE HELPS", + title: "One platform for Client Onboarding", + description: "", + bulletPoints: [ + "Route agreements for e-signature", + "Track completion with reminders", + "Secure, searchable client records", + "AI Q&A across client documents" + ], + primaryButtonText: "See the full platform →", + image: operationsImg + } + ] +}; + +export interface SolutionItem { + title: string; + description: string; + link?: string; + icon?: any; +} + +export const allSolutionsHeroData = { + badgeText: "SOLUTIONS FOR EVERY TEAM", + headlineMain: "Purpose-Built Document Solutions For", + headlineHighlight: "Every Team & Industry.", + description: "DocQube brings document storage, true PDF editing, workflow automation and verified e-signatures together — tailored to how your teams collaborate and get work done.", + primaryButtonText: "START FREE TRIAL", + secondaryButtonText: "TALK TO SALES" +}; + +export const audienceSolutionData = [ + { + title: "Enterprise", + description: "Governed, multi-tenant document control at scale.", + icon: enterpriseIcon1, + link: "/solutions/enterprise", + linkText: "Learn more", + }, + { + title: "Legal", + description: "Contracts, redaction, verified signing.", + icon: enterpriseIcon2, + link: "/solutions/legal", + linkText: "Learn more", + }, + { + title: "Real Estate", + description: "Faster closings with e-signing built in.", + icon: enterpriseIcon3, + link: "/solutions/real-estate", + linkText: "Learn more", + }, + { + title: "Operations", + description: "SOPs, records and routine approvals.", + icon: enterpriseIcon4, + link: "/solutions/operations", + linkText: "Learn more", + }, +]; + +export const departmentSolutionData: SolutionItem[] = [ + { + title: "Human Resources", + description: + "Keep every employee document — contracts, policies, IDs and signed forms — in one secure, searchable place with automated onboarding workflows.", + link: "/solutions/hr", + }, + { + title: "Finance", + description: + "Manage invoices, statements and contracts with control and a clean audit trail — route approvals and archive securely.", + link: "/solutions/finance", + }, + { + title: "Legal", + description: + "Draft, negotiate, sign and archive contracts in one governed workspace — with real PDF editing, redaction and defensive records.", + link: "/solutions/legal", + }, + { + title: "Procurement", + description: + "Bring vendor documents, quotes and approvals into one flow — from RFQ to signed vendor agreements and renewals.", + link: "/solutions/procurement", + }, + { + title: "Operations", + description: + "Standardise SOPs, forms and records in one place, and automate the routine document approvals that keep business moving.", + link: "/solutions/operations", + }, + { + title: "Sales", + description: + "Send proposals and order forms for signature, track them to close, and keep every signed deal neatly filed.", + link: "/solutions/sales", + }, + { + title: "Administration", + description: + "Handle the organisation's day-to-day documents — forms, records, approvals and policies with total visibility.", + link: "/solutions/administration", + }, +]; + +export const industrySolutionData: SolutionItem[] = [ + { + title: "Government & Public Sector", + description: + "Manage records, approvals and signed documents with the governance, audit trail and access control public bodies require.", + link: "/solutions/government", + }, + { + title: "Construction", + description: + "Keep drawings, contracts, RFIs and site records in one place, and route approvals between office and site seamlessly.", + link: "/solutions/construction", + }, + { + title: "Healthcare", + description: + "Handle patient forms, consents and policies with encryption, access control and an audit trail designed for care providers.", + link: "/solutions/healthcare", + }, + { + title: "Manufacturing", + description: + "Standardise SOPs, quality records and supplier contracts, and automate the approvals that keep lines moving.", + link: "/solutions/manufacturing", + }, + { + title: "Education", + description: + "Manage student records, staff documents and policies securely, and route the forms and approvals schools and universities rely on.", + link: "/solutions/education", + }, + { + title: "Banking & Financial Services", + description: + "Control agreements, KYC documents and approvals with encryption, verification and a defensible audit trail.", + }, + { + title: "Insurance", + description: + "Manage policies, claims and signed forms in one workspace — route claim approvals and customer documents fast.", + link: "/solutions/insurance", + }, + { + title: "Real Estate", + description: + "Close faster with e-signing built in — manage listings, agreements and lease documents in one unified flow.", + link: "/solutions/real-estate", + }, + { + title: "Logistics & Supply Chain", + description: + "Keep contracts, proof-of-delivery and compliance documents organised, and automate the approval steps between partners.", + link: "/solutions/logistics", + }, +]; + +export const useCaseSolutionData: SolutionItem[] = [ + { + title: "Contract Management", + description: + "Draft, negotiate, sign and archive contracts in one place — with real PDF editing, verified e-signatures and a full audit trail.", + link: "/solutions/contract-management", + }, + { + title: "Employee Onboarding", + description: + "Get new hires productive faster — route offer letters, policies and forms for signature and store everything securely.", + link: "/solutions/employee-onboarding", + }, + { + title: "Vendor Approvals", + description: + "Move vendor documents from request to signed contract with every approval tracked and every signature verified.", + link: "/solutions/vendor-approvals", + }, + { + title: "Leave Requests", + description: + "Turn leave forms into a tracked approval flow — submitted, routed, approved and recorded, without the back-and-forth.", + link: "/solutions/leave-requests", + }, + { + title: "Purchase Requests", + description: + "Route purchase requests and POs for approval with clear status and a complete, exportable audit trail.", + link: "/solutions/purchase-requests", + }, + { + title: "Lease Agreements", + description: + "Prepare, sign and store lease agreements in one flow — with verified signatures and an immutable record.", + link: "/solutions/lease-agreements", + }, + { + title: "Invoice Approvals", + description: + "Route invoices for approval with clear ownership and a clean audit trail, then archive them automatically.", + link: "/solutions/invoice-approvals", + }, + { + title: "Document Archiving", + description: + "Keep a secure, searchable archive of your organisation's documents — with retention rules, version history and OCR.", + link: "/solutions/document-archiving", + }, + { + title: "Site Inspection", + description: + "Capture inspection documents and sign-offs, route them for approval, and keep a defensible audit trail.", + link: "/solutions/site-inspection", + }, + { + title: "Client Onboarding", + description: + "Collect, sign and store client documents in one smooth flow — faster starts, and a clean compliance record.", + link: "/solutions/client-onboarding", + }, +]; diff --git a/src/app/(features)/SolutionPage/department/AdministrationPage.tsx b/src/app/(features)/SolutionPage/department/AdministrationPage.tsx new file mode 100644 index 0000000..b008023 --- /dev/null +++ b/src/app/(features)/SolutionPage/department/AdministrationPage.tsx @@ -0,0 +1,50 @@ +"use client"; +import React from "react"; +import Navbar from "../../Components/Navbar"; +import Footer from "../../Components/Footer"; +import CustomHeroSection from "../../Components/CustomHeroSection"; +import ChallengeSection from "../../Components/ChallengeSection"; +import EnterpriseFeatures from "../../Components/EnterpriseFeatures"; +import CustomFeatures from "../../Components/CustomFeatures"; +import { administrationSolutionData } from "../data/solutionData"; + +const AdministrationPage: React.FC = () => { + return ( +
+ +
+ {/* Hero Section */} + + + {/* Challenge Section */} + + + {/* How DocQube Helps Section */} + + + {/* Built On The Whole DocQube Platform */} + +
+
+
+ ); +}; + +export default AdministrationPage; diff --git a/src/app/(features)/SolutionPage/department/FinancePage.tsx b/src/app/(features)/SolutionPage/department/FinancePage.tsx new file mode 100644 index 0000000..a66c555 --- /dev/null +++ b/src/app/(features)/SolutionPage/department/FinancePage.tsx @@ -0,0 +1,50 @@ +"use client"; +import React from "react"; +import Navbar from "../../Components/Navbar"; +import Footer from "../../Components/Footer"; +import CustomHeroSection from "../../Components/CustomHeroSection"; +import ChallengeSection from "../../Components/ChallengeSection"; +import EnterpriseFeatures from "../../Components/EnterpriseFeatures"; +import CustomFeatures from "../../Components/CustomFeatures"; +import { financeSolutionData } from "../data/solutionData"; + +const FinancePage: React.FC = () => { + return ( +
+ +
+ {/* Hero Section */} + + + {/* Challenge Section */} + + + {/* How DocQube Helps Section */} + + + {/* Built On The Whole DocQube Platform */} + +
+
+
+ ); +}; + +export default FinancePage; diff --git a/src/app/(features)/SolutionPage/department/HrPage.tsx b/src/app/(features)/SolutionPage/department/HrPage.tsx new file mode 100644 index 0000000..acb7dd2 --- /dev/null +++ b/src/app/(features)/SolutionPage/department/HrPage.tsx @@ -0,0 +1,50 @@ +"use client"; +import React from "react"; +import Navbar from "../../Components/Navbar"; +import Footer from "../../Components/Footer"; +import CustomHeroSection from "../../Components/CustomHeroSection"; +import ChallengeSection from "../../Components/ChallengeSection"; +import EnterpriseFeatures from "../../Components/EnterpriseFeatures"; +import CustomFeatures from "../../Components/CustomFeatures"; +import { hrSolutionData } from "../data/solutionData"; + +const HrPage: React.FC = () => { + return ( +
+ +
+ {/* Hero Section */} + + + {/* Challenge Section */} + + + {/* How DocQube Helps Section */} + + + {/* Built On The Whole DocQube Platform */} + +
+
+
+ ); +}; + +export default HrPage; diff --git a/src/app/(features)/SolutionPage/department/ProcurementPage.tsx b/src/app/(features)/SolutionPage/department/ProcurementPage.tsx new file mode 100644 index 0000000..eed1c94 --- /dev/null +++ b/src/app/(features)/SolutionPage/department/ProcurementPage.tsx @@ -0,0 +1,50 @@ +"use client"; +import React from "react"; +import Navbar from "../../Components/Navbar"; +import Footer from "../../Components/Footer"; +import CustomHeroSection from "../../Components/CustomHeroSection"; +import ChallengeSection from "../../Components/ChallengeSection"; +import EnterpriseFeatures from "../../Components/EnterpriseFeatures"; +import CustomFeatures from "../../Components/CustomFeatures"; +import { procurementSolutionData } from "../data/solutionData"; + +const ProcurementPage: React.FC = () => { + return ( +
+ +
+ {/* Hero Section */} + + + {/* Challenge Section */} + + + {/* How DocQube Helps Section */} + + + {/* Built On The Whole DocQube Platform */} + +
+
+
+ ); +}; + +export default ProcurementPage; diff --git a/src/app/(features)/SolutionPage/department/SalesPage.tsx b/src/app/(features)/SolutionPage/department/SalesPage.tsx new file mode 100644 index 0000000..4021fd5 --- /dev/null +++ b/src/app/(features)/SolutionPage/department/SalesPage.tsx @@ -0,0 +1,50 @@ +"use client"; +import React from "react"; +import Navbar from "../../Components/Navbar"; +import Footer from "../../Components/Footer"; +import CustomHeroSection from "../../Components/CustomHeroSection"; +import ChallengeSection from "../../Components/ChallengeSection"; +import EnterpriseFeatures from "../../Components/EnterpriseFeatures"; +import CustomFeatures from "../../Components/CustomFeatures"; +import { salesSolutionData } from "../data/solutionData"; + +const SalesPage: React.FC = () => { + return ( +
+ +
+ {/* Hero Section */} + + + {/* Challenge Section */} + + + {/* How DocQube Helps Section */} + + + {/* Built On The Whole DocQube Platform */} + +
+
+
+ ); +}; + +export default SalesPage; diff --git a/src/app/(features)/SolutionPage/industry/ConstructionPage.tsx b/src/app/(features)/SolutionPage/industry/ConstructionPage.tsx new file mode 100644 index 0000000..825ff64 --- /dev/null +++ b/src/app/(features)/SolutionPage/industry/ConstructionPage.tsx @@ -0,0 +1,50 @@ +"use client"; +import React from "react"; +import Navbar from "../../Components/Navbar"; +import Footer from "../../Components/Footer"; +import CustomHeroSection from "../../Components/CustomHeroSection"; +import ChallengeSection from "../../Components/ChallengeSection"; +import EnterpriseFeatures from "../../Components/EnterpriseFeatures"; +import CustomFeatures from "../../Components/CustomFeatures"; +import { constructionSolutionData } from "../data/solutionData"; + +const ConstructionPage: React.FC = () => { + return ( +
+ +
+ {/* Hero Section */} + + + {/* Challenge Section */} + + + {/* How DocQube Helps Section */} + + + {/* Built On The Whole DocQube Platform */} + +
+
+
+ ); +}; + +export default ConstructionPage; diff --git a/src/app/(features)/SolutionPage/industry/EducationPage.tsx b/src/app/(features)/SolutionPage/industry/EducationPage.tsx new file mode 100644 index 0000000..7e8f881 --- /dev/null +++ b/src/app/(features)/SolutionPage/industry/EducationPage.tsx @@ -0,0 +1,50 @@ +"use client"; +import React from "react"; +import Navbar from "../../Components/Navbar"; +import Footer from "../../Components/Footer"; +import CustomHeroSection from "../../Components/CustomHeroSection"; +import ChallengeSection from "../../Components/ChallengeSection"; +import EnterpriseFeatures from "../../Components/EnterpriseFeatures"; +import CustomFeatures from "../../Components/CustomFeatures"; +import { educationSolutionData } from "../data/solutionData"; + +const EducationPage: React.FC = () => { + return ( +
+ +
+ {/* Hero Section */} + + + {/* Challenge Section */} + + + {/* How DocQube Helps Section */} + + + {/* Built On The Whole DocQube Platform */} + +
+
+
+ ); +}; + +export default EducationPage; diff --git a/src/app/(features)/SolutionPage/industry/GovernmentPage.tsx b/src/app/(features)/SolutionPage/industry/GovernmentPage.tsx new file mode 100644 index 0000000..502e74e --- /dev/null +++ b/src/app/(features)/SolutionPage/industry/GovernmentPage.tsx @@ -0,0 +1,50 @@ +"use client"; +import React from "react"; +import Navbar from "../../Components/Navbar"; +import Footer from "../../Components/Footer"; +import CustomHeroSection from "../../Components/CustomHeroSection"; +import ChallengeSection from "../../Components/ChallengeSection"; +import EnterpriseFeatures from "../../Components/EnterpriseFeatures"; +import CustomFeatures from "../../Components/CustomFeatures"; +import { governmentSolutionData } from "../data/solutionData"; + +const GovernmentPage: React.FC = () => { + return ( +
+ +
+ {/* Hero Section */} + + + {/* Challenge Section */} + + + {/* How DocQube Helps Section */} + + + {/* Built On The Whole DocQube Platform */} + +
+
+
+ ); +}; + +export default GovernmentPage; diff --git a/src/app/(features)/SolutionPage/industry/HealthcarePage.tsx b/src/app/(features)/SolutionPage/industry/HealthcarePage.tsx new file mode 100644 index 0000000..a0fea6f --- /dev/null +++ b/src/app/(features)/SolutionPage/industry/HealthcarePage.tsx @@ -0,0 +1,50 @@ +"use client"; +import React from "react"; +import Navbar from "../../Components/Navbar"; +import Footer from "../../Components/Footer"; +import CustomHeroSection from "../../Components/CustomHeroSection"; +import ChallengeSection from "../../Components/ChallengeSection"; +import EnterpriseFeatures from "../../Components/EnterpriseFeatures"; +import CustomFeatures from "../../Components/CustomFeatures"; +import { healthcareSolutionData } from "../data/solutionData"; + +const HealthcarePage: React.FC = () => { + return ( +
+ +
+ {/* Hero Section */} + + + {/* Challenge Section */} + + + {/* How DocQube Helps Section */} + + + {/* Built On The Whole DocQube Platform */} + +
+
+
+ ); +}; + +export default HealthcarePage; diff --git a/src/app/(features)/SolutionPage/industry/InsurancePage.tsx b/src/app/(features)/SolutionPage/industry/InsurancePage.tsx new file mode 100644 index 0000000..203a8f8 --- /dev/null +++ b/src/app/(features)/SolutionPage/industry/InsurancePage.tsx @@ -0,0 +1,50 @@ +"use client"; +import React from "react"; +import Navbar from "../../Components/Navbar"; +import Footer from "../../Components/Footer"; +import CustomHeroSection from "../../Components/CustomHeroSection"; +import ChallengeSection from "../../Components/ChallengeSection"; +import EnterpriseFeatures from "../../Components/EnterpriseFeatures"; +import CustomFeatures from "../../Components/CustomFeatures"; +import { insuranceSolutionData } from "../data/solutionData"; + +const InsurancePage: React.FC = () => { + return ( +
+ +
+ {/* Hero Section */} + + + {/* Challenge Section */} + + + {/* How DocQube Helps Section */} + + + {/* Built On The Whole DocQube Platform */} + +
+
+
+ ); +}; + +export default InsurancePage; diff --git a/src/app/(features)/SolutionPage/industry/LogisticsPage.tsx b/src/app/(features)/SolutionPage/industry/LogisticsPage.tsx new file mode 100644 index 0000000..a15ce72 --- /dev/null +++ b/src/app/(features)/SolutionPage/industry/LogisticsPage.tsx @@ -0,0 +1,50 @@ +"use client"; +import React from "react"; +import Navbar from "../../Components/Navbar"; +import Footer from "../../Components/Footer"; +import CustomHeroSection from "../../Components/CustomHeroSection"; +import ChallengeSection from "../../Components/ChallengeSection"; +import EnterpriseFeatures from "../../Components/EnterpriseFeatures"; +import CustomFeatures from "../../Components/CustomFeatures"; +import { logisticsSolutionData } from "../data/solutionData"; + +const LogisticsPage: React.FC = () => { + return ( +
+ +
+ {/* Hero Section */} + + + {/* Challenge Section */} + + + {/* How DocQube Helps Section */} + + + {/* Built On The Whole DocQube Platform */} + +
+
+
+ ); +}; + +export default LogisticsPage; diff --git a/src/app/(features)/SolutionPage/industry/ManufacturingPage.tsx b/src/app/(features)/SolutionPage/industry/ManufacturingPage.tsx new file mode 100644 index 0000000..eb24d4f --- /dev/null +++ b/src/app/(features)/SolutionPage/industry/ManufacturingPage.tsx @@ -0,0 +1,50 @@ +"use client"; +import React from "react"; +import Navbar from "../../Components/Navbar"; +import Footer from "../../Components/Footer"; +import CustomHeroSection from "../../Components/CustomHeroSection"; +import ChallengeSection from "../../Components/ChallengeSection"; +import EnterpriseFeatures from "../../Components/EnterpriseFeatures"; +import CustomFeatures from "../../Components/CustomFeatures"; +import { manufacturingSolutionData } from "../data/solutionData"; + +const ManufacturingPage: React.FC = () => { + return ( +
+ +
+ {/* Hero Section */} + + + {/* Challenge Section */} + + + {/* How DocQube Helps Section */} + + + {/* Built On The Whole DocQube Platform */} + +
+
+
+ ); +}; + +export default ManufacturingPage; diff --git a/src/app/(features)/SolutionPage/usecase/ClientOnboardingPage.tsx b/src/app/(features)/SolutionPage/usecase/ClientOnboardingPage.tsx new file mode 100644 index 0000000..c4e3487 --- /dev/null +++ b/src/app/(features)/SolutionPage/usecase/ClientOnboardingPage.tsx @@ -0,0 +1,50 @@ +"use client"; +import React from "react"; +import Navbar from "../../Components/Navbar"; +import Footer from "../../Components/Footer"; +import CustomHeroSection from "../../Components/CustomHeroSection"; +import ChallengeSection from "../../Components/ChallengeSection"; +import EnterpriseFeatures from "../../Components/EnterpriseFeatures"; +import CustomFeatures from "../../Components/CustomFeatures"; +import { clientOnboardingSolutionData } from "../data/solutionData"; + +const ClientOnboardingPage: React.FC = () => { + return ( +
+ +
+ {/* Hero Section */} + + + {/* Challenge Section */} + + + {/* How DocQube Helps Section */} + + + {/* Built On The Whole DocQube Platform */} + +
+
+
+ ); +}; + +export default ClientOnboardingPage; diff --git a/src/app/(features)/SolutionPage/usecase/ContractManagementPage.tsx b/src/app/(features)/SolutionPage/usecase/ContractManagementPage.tsx new file mode 100644 index 0000000..80869ec --- /dev/null +++ b/src/app/(features)/SolutionPage/usecase/ContractManagementPage.tsx @@ -0,0 +1,50 @@ +"use client"; +import React from "react"; +import Navbar from "../../Components/Navbar"; +import Footer from "../../Components/Footer"; +import CustomHeroSection from "../../Components/CustomHeroSection"; +import ChallengeSection from "../../Components/ChallengeSection"; +import EnterpriseFeatures from "../../Components/EnterpriseFeatures"; +import CustomFeatures from "../../Components/CustomFeatures"; +import { contractManagementSolutionData } from "../data/solutionData"; + +const ContractManagementPage: React.FC = () => { + return ( +
+ +
+ {/* Hero Section */} + + + {/* Challenge Section */} + + + {/* How DocQube Helps Section */} + + + {/* Built On The Whole DocQube Platform */} + +
+
+
+ ); +}; + +export default ContractManagementPage; diff --git a/src/app/(features)/SolutionPage/usecase/DocumentArchivingPage.tsx b/src/app/(features)/SolutionPage/usecase/DocumentArchivingPage.tsx new file mode 100644 index 0000000..8d6ded0 --- /dev/null +++ b/src/app/(features)/SolutionPage/usecase/DocumentArchivingPage.tsx @@ -0,0 +1,50 @@ +"use client"; +import React from "react"; +import Navbar from "../../Components/Navbar"; +import Footer from "../../Components/Footer"; +import CustomHeroSection from "../../Components/CustomHeroSection"; +import ChallengeSection from "../../Components/ChallengeSection"; +import EnterpriseFeatures from "../../Components/EnterpriseFeatures"; +import CustomFeatures from "../../Components/CustomFeatures"; +import { documentArchivingSolutionData } from "../data/solutionData"; + +const DocumentArchivingPage: React.FC = () => { + return ( +
+ +
+ {/* Hero Section */} + + + {/* Challenge Section */} + + + {/* How DocQube Helps Section */} + + + {/* Built On The Whole DocQube Platform */} + +
+
+
+ ); +}; + +export default DocumentArchivingPage; diff --git a/src/app/(features)/SolutionPage/usecase/EmployeeOnboardingPage.tsx b/src/app/(features)/SolutionPage/usecase/EmployeeOnboardingPage.tsx new file mode 100644 index 0000000..c46172b --- /dev/null +++ b/src/app/(features)/SolutionPage/usecase/EmployeeOnboardingPage.tsx @@ -0,0 +1,50 @@ +"use client"; +import React from "react"; +import Navbar from "../../Components/Navbar"; +import Footer from "../../Components/Footer"; +import CustomHeroSection from "../../Components/CustomHeroSection"; +import ChallengeSection from "../../Components/ChallengeSection"; +import EnterpriseFeatures from "../../Components/EnterpriseFeatures"; +import CustomFeatures from "../../Components/CustomFeatures"; +import { employeeOnboardingSolutionData } from "../data/solutionData"; + +const EmployeeOnboardingPage: React.FC = () => { + return ( +
+ +
+ {/* Hero Section */} + + + {/* Challenge Section */} + + + {/* How DocQube Helps Section */} + + + {/* Built On The Whole DocQube Platform */} + +
+
+
+ ); +}; + +export default EmployeeOnboardingPage; diff --git a/src/app/(features)/SolutionPage/usecase/InvoiceApprovalsPage.tsx b/src/app/(features)/SolutionPage/usecase/InvoiceApprovalsPage.tsx new file mode 100644 index 0000000..0334f7f --- /dev/null +++ b/src/app/(features)/SolutionPage/usecase/InvoiceApprovalsPage.tsx @@ -0,0 +1,50 @@ +"use client"; +import React from "react"; +import Navbar from "../../Components/Navbar"; +import Footer from "../../Components/Footer"; +import CustomHeroSection from "../../Components/CustomHeroSection"; +import ChallengeSection from "../../Components/ChallengeSection"; +import EnterpriseFeatures from "../../Components/EnterpriseFeatures"; +import CustomFeatures from "../../Components/CustomFeatures"; +import { invoiceApprovalsSolutionData } from "../data/solutionData"; + +const InvoiceApprovalsPage: React.FC = () => { + return ( +
+ +
+ {/* Hero Section */} + + + {/* Challenge Section */} + + + {/* How DocQube Helps Section */} + + + {/* Built On The Whole DocQube Platform */} + +
+
+
+ ); +}; + +export default InvoiceApprovalsPage; diff --git a/src/app/(features)/SolutionPage/usecase/LeaseAgreementsPage.tsx b/src/app/(features)/SolutionPage/usecase/LeaseAgreementsPage.tsx new file mode 100644 index 0000000..ba03def --- /dev/null +++ b/src/app/(features)/SolutionPage/usecase/LeaseAgreementsPage.tsx @@ -0,0 +1,50 @@ +"use client"; +import React from "react"; +import Navbar from "../../Components/Navbar"; +import Footer from "../../Components/Footer"; +import CustomHeroSection from "../../Components/CustomHeroSection"; +import ChallengeSection from "../../Components/ChallengeSection"; +import EnterpriseFeatures from "../../Components/EnterpriseFeatures"; +import CustomFeatures from "../../Components/CustomFeatures"; +import { leaseAgreementsSolutionData } from "../data/solutionData"; + +const LeaseAgreementsPage: React.FC = () => { + return ( +
+ +
+ {/* Hero Section */} + + + {/* Challenge Section */} + + + {/* How DocQube Helps Section */} + + + {/* Built On The Whole DocQube Platform */} + +
+
+
+ ); +}; + +export default LeaseAgreementsPage; diff --git a/src/app/(features)/SolutionPage/usecase/LeaveRequestsPage.tsx b/src/app/(features)/SolutionPage/usecase/LeaveRequestsPage.tsx new file mode 100644 index 0000000..4363850 --- /dev/null +++ b/src/app/(features)/SolutionPage/usecase/LeaveRequestsPage.tsx @@ -0,0 +1,50 @@ +"use client"; +import React from "react"; +import Navbar from "../../Components/Navbar"; +import Footer from "../../Components/Footer"; +import CustomHeroSection from "../../Components/CustomHeroSection"; +import ChallengeSection from "../../Components/ChallengeSection"; +import EnterpriseFeatures from "../../Components/EnterpriseFeatures"; +import CustomFeatures from "../../Components/CustomFeatures"; +import { leaveRequestsSolutionData } from "../data/solutionData"; + +const LeaveRequestsPage: React.FC = () => { + return ( +
+ +
+ {/* Hero Section */} + + + {/* Challenge Section */} + + + {/* How DocQube Helps Section */} + + + {/* Built On The Whole DocQube Platform */} + +
+
+
+ ); +}; + +export default LeaveRequestsPage; diff --git a/src/app/(features)/SolutionPage/usecase/PurchaseRequestsPage.tsx b/src/app/(features)/SolutionPage/usecase/PurchaseRequestsPage.tsx new file mode 100644 index 0000000..cbc649d --- /dev/null +++ b/src/app/(features)/SolutionPage/usecase/PurchaseRequestsPage.tsx @@ -0,0 +1,50 @@ +"use client"; +import React from "react"; +import Navbar from "../../Components/Navbar"; +import Footer from "../../Components/Footer"; +import CustomHeroSection from "../../Components/CustomHeroSection"; +import ChallengeSection from "../../Components/ChallengeSection"; +import EnterpriseFeatures from "../../Components/EnterpriseFeatures"; +import CustomFeatures from "../../Components/CustomFeatures"; +import { purchaseRequestsSolutionData } from "../data/solutionData"; + +const PurchaseRequestsPage: React.FC = () => { + return ( +
+ +
+ {/* Hero Section */} + + + {/* Challenge Section */} + + + {/* How DocQube Helps Section */} + + + {/* Built On The Whole DocQube Platform */} + +
+
+
+ ); +}; + +export default PurchaseRequestsPage; diff --git a/src/app/(features)/SolutionPage/usecase/SiteInspectionPage.tsx b/src/app/(features)/SolutionPage/usecase/SiteInspectionPage.tsx new file mode 100644 index 0000000..3e33388 --- /dev/null +++ b/src/app/(features)/SolutionPage/usecase/SiteInspectionPage.tsx @@ -0,0 +1,50 @@ +"use client"; +import React from "react"; +import Navbar from "../../Components/Navbar"; +import Footer from "../../Components/Footer"; +import CustomHeroSection from "../../Components/CustomHeroSection"; +import ChallengeSection from "../../Components/ChallengeSection"; +import EnterpriseFeatures from "../../Components/EnterpriseFeatures"; +import CustomFeatures from "../../Components/CustomFeatures"; +import { siteInspectionSolutionData } from "../data/solutionData"; + +const SiteInspectionPage: React.FC = () => { + return ( +
+ +
+ {/* Hero Section */} + + + {/* Challenge Section */} + + + {/* How DocQube Helps Section */} + + + {/* Built On The Whole DocQube Platform */} + +
+
+
+ ); +}; + +export default SiteInspectionPage; diff --git a/src/app/(features)/SolutionPage/usecase/VendorApprovalsPage.tsx b/src/app/(features)/SolutionPage/usecase/VendorApprovalsPage.tsx new file mode 100644 index 0000000..997f033 --- /dev/null +++ b/src/app/(features)/SolutionPage/usecase/VendorApprovalsPage.tsx @@ -0,0 +1,50 @@ +"use client"; +import React from "react"; +import Navbar from "../../Components/Navbar"; +import Footer from "../../Components/Footer"; +import CustomHeroSection from "../../Components/CustomHeroSection"; +import ChallengeSection from "../../Components/ChallengeSection"; +import EnterpriseFeatures from "../../Components/EnterpriseFeatures"; +import CustomFeatures from "../../Components/CustomFeatures"; +import { vendorApprovalsSolutionData } from "../data/solutionData"; + +const VendorApprovalsPage: React.FC = () => { + return ( +
+ +
+ {/* Hero Section */} + + + {/* Challenge Section */} + + + {/* How DocQube Helps Section */} + + + {/* Built On The Whole DocQube Platform */} + +
+
+
+ ); +}; + +export default VendorApprovalsPage; diff --git a/src/app/blog/[slug]/page.tsx b/src/app/blog/[slug]/page.tsx new file mode 100644 index 0000000..f585427 --- /dev/null +++ b/src/app/blog/[slug]/page.tsx @@ -0,0 +1 @@ +export { default } from "../../(features)/ResourcePage/BlogDetailPage"; \ No newline at end of file diff --git a/src/app/blog/page.tsx b/src/app/blog/page.tsx new file mode 100644 index 0000000..0a66696 --- /dev/null +++ b/src/app/blog/page.tsx @@ -0,0 +1 @@ +export { default } from "../(features)/ResourcePage/BlogPage"; \ No newline at end of file diff --git a/src/app/book-a-demo/page.tsx b/src/app/book-a-demo/page.tsx new file mode 100644 index 0000000..ea41c43 --- /dev/null +++ b/src/app/book-a-demo/page.tsx @@ -0,0 +1 @@ +export { default } from "../(features)/ContactPage/MainContactPage"; \ No newline at end of file diff --git a/src/app/contact-us/page.tsx b/src/app/contact-us/page.tsx new file mode 100644 index 0000000..ea41c43 --- /dev/null +++ b/src/app/contact-us/page.tsx @@ -0,0 +1 @@ +export { default } from "../(features)/ContactPage/MainContactPage"; \ No newline at end of file diff --git a/src/app/contact/page.tsx b/src/app/contact/page.tsx new file mode 100644 index 0000000..ea41c43 --- /dev/null +++ b/src/app/contact/page.tsx @@ -0,0 +1 @@ +export { default } from "../(features)/ContactPage/MainContactPage"; \ No newline at end of file diff --git a/src/app/demo/page.tsx b/src/app/demo/page.tsx new file mode 100644 index 0000000..ea41c43 --- /dev/null +++ b/src/app/demo/page.tsx @@ -0,0 +1 @@ +export { default } from "../(features)/ContactPage/MainContactPage"; \ No newline at end of file diff --git a/src/app/globals.css b/src/app/globals.css index a2dc41e..15f7f97 100644 --- a/src/app/globals.css +++ b/src/app/globals.css @@ -1,26 +1,1112 @@ +@import url('https://fonts.googleapis.com/css2?family=Albert+Sans:wght@100;200;300;400;500;600;700;800;900&family=IBM+Plex+Sans+Arabic:wght@300;400;500;600;700&display=swap'); + @import "tailwindcss"; -:root { - --background: #ffffff; - --foreground: #171717; +@theme { + --color-primary: #2563EB; + --color-primary-50: #eff6ff; + --color-primary-100: #dbeafe; + --color-primary-200: #bfdbfe; + --color-primary-300: #93c5fd; + --color-primary-400: #60a5fa; + --color-primary-500: #3b82f6; + --color-primary-600: #2563eb; + --color-primary-700: #1d4ed8; + --color-primary-800: #1e40af; + --color-primary-900: #1e3a8a; + --font-sans: Inter, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Arial, sans-serif; + --font-display: "Playfair Display", serif; } -@theme inline { - --color-background: var(--background); - --color-foreground: var(--foreground); - --font-sans: var(--font-geist-sans); - --font-mono: var(--font-geist-mono); -} +@layer base { + .font-albert-sans { + font-family: 'Albert Sans', sans-serif; + } -@media (prefers-color-scheme: dark) { :root { - --background: #0a0a0a; - --foreground: #ededed; + --app-font-sans: 'Albert Sans', sans-serif; + --app-font-rtl: 'IBM Plex Sans Arabic', 'Albert Sans', sans-serif; + } + + body { + font-family: var(--app-font-sans); + } + + html[dir="rtl"] body, + html[dir="rtl"] #root, + html[dir="rtl"] .font-sans { + font-family: var(--app-font-rtl); + } + + html[dir="rtl"] body { + font-size: 16.5px; + line-height: 1.5; + letter-spacing: 0; + font-weight: 400; + text-rendering: optimizeLegibility; } } -body { - background: var(--background); - color: var(--foreground); - font-family: Arial, Helvetica, sans-serif; +/* Dark Mode Styles */ +.dark { + color-scheme: dark; +} + +.dark body, +.dark #root { + background-color: #111827; + color: #f9fafb; +} + +/* Backgrounds */ +.dark .bg-white { + background-color: #1f2937 !important; +} + +.dark .bg-gray-50 { + background-color: #111827 !important; +} + +.dark .bg-gray-100 { + background-color: #1f2937 !important; +} + +.dark .bg-gray-200 { + background-color: #374151 !important; +} + +.dark .bg-gray-300 { + background-color: #4b5563 !important; +} + +.dark .bg-gray-800 { + background-color: #1f2937 !important; +} + +/* Text Colors */ +.dark .text-gray-900 { + color: #f9fafb !important; +} + +.dark .text-gray-800 { + color: #f3f4f6 !important; +} + +.dark .text-gray-700 { + color: #e5e7eb !important; +} + +.dark .text-gray-600 { + color: #d1d5db !important; +} + +.dark .text-gray-500 { + color: #9ca3af !important; +} + +.dark .text-gray-400 { + color: #6b7280 !important; +} + +/* Borders */ +.dark .border-gray-200 { + border-color: #374151 !important; +} + +.dark .border-gray-300 { + border-color: #4b5563 !important; +} + +.dark .border-gray-400 { + border-color: #6b7280 !important; +} + +/* Hover States */ +.dark .hover\:bg-gray-50:hover { + background-color: #374151 !important; +} + +.dark .hover\:bg-gray-100:hover { + background-color: #4b5563 !important; +} + +.dark .hover\:bg-gray-200:hover { + background-color: #4b5563 !important; +} + +.dark .hover\:text-gray-900:hover { + color: #f9fafb !important; +} + +.dark .hover\:text-gray-700:hover { + color: #e5e7eb !important; +} + +/* Form Inputs */ +.dark input[type="text"], +.dark input[type="email"], +.dark input[type="password"], +.dark input[type="search"], +.dark textarea, +.dark select { + background-color: #374151 !important; + color: #f9fafb !important; + border-color: #4b5563 !important; +} + +.dark input[type="text"]:focus, +.dark input[type="email"]:focus, +.dark input[type="password"]:focus, +.dark input[type="search"]:focus, +.dark textarea:focus, +.dark select:focus { + background-color: #374151 !important; + border-color: #3b82f6 !important; +} + +.dark input[type="text"]:disabled, +.dark input[type="email"]:disabled, +.dark input[type="password"]:disabled, +.dark textarea:disabled, +.dark select:disabled { + background-color: #1f2937 !important; + color: #6b7280 !important; + cursor: not-allowed; +} + +.dark input::placeholder, +.dark textarea::placeholder { + color: #6b7280 !important; +} + +/* Buttons */ +.dark button:not(.bg-blue-600):not(.bg-blue-500):not(.bg-red-600):not(.text-blue-600):not(.text-red-600) { + color: #f9fafb; +} + +/* Cards & Modals */ +.dark .shadow, +.dark .shadow-lg, +.dark .shadow-xl { + box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.5), 0 4px 6px -2px rgba(0, 0, 0, 0.3) !important; +} + +/* Dividers */ +.dark hr { + border-color: #374151 !important; +} + +/* Tables */ +.dark table { + color: #f9fafb; +} + +.dark th { + background-color: #374151 !important; + color: #f9fafb !important; +} + +.dark td { + border-color: #374151 !important; +} + +.dark tr:hover { + background-color: #374151 !important; +} + +/* Scrollbars for dark mode */ +.dark ::-webkit-scrollbar { + width: 8px; + height: 8px; +} + +.dark ::-webkit-scrollbar-track { + background: #1f2937; +} + +.dark ::-webkit-scrollbar-thumb { + background: #4b5563; + border-radius: 4px; +} + +.dark ::-webkit-scrollbar-thumb:hover { + background: #6b7280; +} + +/* Hide scrollbar utility */ +.scrollbar-hide { + -ms-overflow-style: none; + /* IE and Edge */ + scrollbar-width: none; + /* Firefox */ +} + +.scrollbar-hide::-webkit-scrollbar { + display: none; + /* Chrome, Safari and Opera */ +} + +html[dir="rtl"] .dashboard-sidebar .dashboard-sidebar__ai-link { + align-items: center; +} + +html[dir="rtl"] .font-medium, +html[dir="rtl"] .font-semibold { + font-weight: 500; +} + +html[dir="rtl"] .font-bold, +html[dir="rtl"] .font-extrabold, +html[dir="rtl"] .font-black { + font-weight: 600; +} + +html[dir="rtl"] .tracking-tight, +html[dir="rtl"] .tracking-normal, +html[dir="rtl"] .tracking-wide, +html[dir="rtl"] .tracking-wider, +html[dir="rtl"] .tracking-widest, +html[dir="rtl"] [class*="tracking-"] { + letter-spacing: 0 !important; +} + +html[dir="rtl"] p, +html[dir="rtl"] li, +html[dir="rtl"] td, +html[dir="rtl"] th, +html[dir="rtl"] label, +html[dir="rtl"] input, +html[dir="rtl"] textarea, +html[dir="rtl"] select, +html[dir="rtl"] button, +html[dir="rtl"] a, +html[dir="rtl"] h1, +html[dir="rtl"] h2, +html[dir="rtl"] h3, +html[dir="rtl"] h4, +html[dir="rtl"] h5, +html[dir="rtl"] h6, +html[dir="rtl"] [role="dialog"], +html[dir="rtl"] [data-radix-popper-content-wrapper] { + letter-spacing: 0; +} + +html[dir="rtl"] input, +html[dir="rtl"] textarea, +html[dir="rtl"] select, +html[dir="rtl"] [role="dialog"], +html[dir="rtl"] .dashboard-data-table, +html[dir="rtl"] .recharts-wrapper, +html[dir="rtl"] .Toastify__toast, +html[dir="rtl"] [data-sonner-toaster] { + line-height: 1.5; +} + +html[dir="rtl"] .dashboard-sidebar nav > * + * { + margin-block-start: 0.375rem; +} + +html[dir="rtl"] .dashboard-sidebar nav a, +html[dir="rtl"] .dashboard-sidebar nav button { + padding-top: 0.6rem; + padding-bottom: 0.6rem; + line-height: 1.62; +} + +html[dir="rtl"] .dashboard-sidebar .dashboard-sidebar__nav-main { + align-items: center; + min-width: 0; + flex: 1 1 auto; + gap: 0.75rem; +} + +html[dir="rtl"] .dashboard-sidebar .dashboard-sidebar__label { + display: inline-flex; + align-items: center; + line-height: 1.62; + min-width: 0; +} + +html[dir="rtl"] .dashboard-sidebar .dashboard-sidebar__ai-badge { + margin-inline-start: 0.5rem; + margin-inline-end: 0; + flex-shrink: 0; +} + +html[dir="rtl"] .dashboard-data-table { + font-feature-settings: "tnum" 1; +} + +html[dir="rtl"] .u-mixed-data, +html[dir="rtl"] .dashboard-data-table .rtl-ltr-value { + direction: ltr; + unicode-bidi: isolate; + display: inline-block; +} + +html[dir="rtl"] .dashboard-data-table [data-align="right"] { + text-align: left; +} + +html[dir="rtl"] .dashboard-data-table [data-align="left"] { + text-align: right; +} + +html[dir="rtl"] #tour-recent-files .dashboard-view-more { + padding-inline: 0.5rem; +} + +html[dir="rtl"] .auth-screen--login .auth-screen__content { + max-width: 30rem; +} + +html[dir="rtl"] .auth-screen--login .auth-screen__logo { + margin-bottom: 2.5rem; +} + +html[dir="rtl"] .auth-screen--login .auth-screen__header { + margin-bottom: 2.5rem; + text-align: right; +} + +html[dir="rtl"] .auth-screen--login .auth-screen__title { + font-size: 2rem; + line-height: 1.4; + margin-bottom: 0.9rem; +} + +html[dir="rtl"] .auth-screen--login .auth-screen__subtitle { + max-width: 26rem; + margin-inline: 0; + text-align: right; + line-height: 1.85; + color: rgb(107 114 128); +} + +html[dir="rtl"] .auth-screen--login .auth-screen__form { + margin-top: 0.25rem; +} + +html[dir="rtl"] .auth-screen--login .auth-screen__field + .auth-screen__field { + margin-top: 1.25rem; +} + +html[dir="rtl"] .auth-screen--login .auth-screen__input { + min-height: 4rem; +} + +html[dir="rtl"] .auth-screen--login .auth-screen__helper-row { + margin-top: 1rem; +} + +html[dir="rtl"] .auth-screen--login .auth-screen__cta { + margin-top: 1rem; + min-height: 3.625rem; +} + +html[dir="rtl"] .auth-screen--login .auth-screen__meta { + margin-top: 2.5rem; + padding-top: 2rem; +} + +html[dir="rtl"] .auth-screen--login .auth-screen__meta-text { + max-width: 24rem; + margin-inline: auto 0; + text-align: right; + line-height: 1.9; +} + +html[dir="rtl"] .terms-modal { + direction: rtl; +} + +html[dir="rtl"] .terms-modal__header { + padding-block: 1.875rem; +} + +html[dir="rtl"] .terms-modal__title { + font-weight: 600; + margin-bottom: 0.625rem; +} + +html[dir="rtl"] .terms-modal__subtitle, +html[dir="rtl"] .terms-modal__copy, +html[dir="rtl"] .terms-modal__checkbox-label { + line-height: 1.7; +} + +html[dir="rtl"] .terms-modal__body { + gap: 1.5rem; +} + +html[dir="rtl"] .terms-modal__content { + padding: 1.375rem; +} + +html[dir="rtl"] .terms-modal__links { + margin-top: 1rem; + gap: 1rem; + flex-wrap: wrap; +} + +html[dir="rtl"] .terms-modal__link { + font-weight: 500; +} + +html[dir="rtl"] .terms-modal__checkbox-row { + margin-top: 0.5rem; +} + +html[dir="rtl"] .terms-modal__footer { + padding-block: 1.375rem; +} + +html[dir="rtl"] .terms-modal__cta { + min-height: 2.875rem; + font-weight: 600; +} + + +@layer utilities { + + /* Floating animation for background elements */ + @keyframes float { + + 0%, + 100% { + transform: translateY(0px) translateX(0px); + } + + 33% { + transform: translateY(-20px) translateX(10px); + } + + 66% { + transform: translateY(10px) translateX(-10px); + } + } + + @keyframes float-slow { + + 0%, + 100% { + transform: translateY(0px) translateX(0px) scale(1); + } + + 50% { + transform: translateY(-30px) translateX(15px) scale(1.05); + } + } + + @keyframes pulse-glow { + + 0%, + 100% { + opacity: 0.3; + } + + 50% { + opacity: 0.6; + } + } + + @keyframes shimmer { + 0% { + background-position: -1000px 0; + } + + 100% { + background-position: 1000px 0; + } + } + + @keyframes fadeInUp { + from { + opacity: 0; + transform: translateY(30px); + } + + to { + opacity: 1; + transform: translateY(0); + } + } + + @keyframes fadeIn { + from { + opacity: 0; + } + + to { + opacity: 1; + } + } + + @keyframes scaleIn { + from { + opacity: 0; + transform: scale(0.9); + } + + to { + opacity: 1; + transform: scale(1); + } + } + + @keyframes slideInLeft { + from { + opacity: 0; + transform: translateX(-50px); + } + + to { + opacity: 1; + transform: translateX(0); + } + } + + @keyframes slideInRight { + from { + opacity: 0; + transform: translateX(50px); + } + + to { + opacity: 1; + transform: translateX(0); + } + } + + @keyframes bounce-subtle { + + 0%, + 100% { + transform: translateY(0); + } + + 50% { + transform: translateY(-5px); + } + } + + @keyframes gradient-shift { + + 0%, + 100% { + background-position: 0% 50%; + } + + 50% { + background-position: 100% 50%; + } + } + + @keyframes rotate-slow { + from { + transform: rotate(0deg); + } + + to { + transform: rotate(360deg); + } + } + + @keyframes wave { + + 0%, + 100% { + transform: translateX(0) translateY(0); + } + + 25% { + transform: translateX(5%) translateY(-5%); + } + + 50% { + transform: translateX(0) translateY(0); + } + + 75% { + transform: translateX(-5%) translateY(5%); + } + } + + @keyframes particle-float { + + 0%, + 100% { + transform: translate(0, 0) scale(1); + opacity: 0.3; + } + + 25% { + transform: translate(10px, -20px) scale(1.1); + opacity: 0.5; + } + + 50% { + transform: translate(-5px, -40px) scale(0.9); + opacity: 0.7; + } + + 75% { + transform: translate(-15px, -20px) scale(1.05); + opacity: 0.4; + } + } + + @keyframes drift { + + 0%, + 100% { + transform: translateX(0) translateY(0) rotate(0deg); + } + + 33% { + transform: translateX(30px) translateY(-30px) rotate(120deg); + } + + 66% { + transform: translateX(-20px) translateY(-60px) rotate(240deg); + } + } + + .animate-float { + animation: float 8s ease-in-out infinite; + } + + .animate-float-slow { + animation: float-slow 12s ease-in-out infinite; + } + + .animate-pulse-glow { + animation: pulse-glow 4s ease-in-out infinite; + } + + .animate-fadeInUp { + animation: fadeInUp 0.8s ease-out forwards; + } + + .animate-fadeIn { + animation: fadeIn 1s ease-out forwards; + } + + .animate-fade-in { + animation: fadeIn 0.15s ease-out forwards; + } + + .animate-scaleIn { + animation: scaleIn 0.6s ease-out forwards; + } + + .animate-slideInLeft { + animation: slideInLeft 0.8s ease-out forwards; + } + + .animate-slideInRight { + animation: slideInRight 0.8s ease-out forwards; + } + + .animate-bounce-subtle { + animation: bounce-subtle 2s ease-in-out infinite; + } + + .animate-gradient-shift { + animation: gradient-shift 8s ease infinite; + background-size: 200% 200%; + } + + .animation-delay-100 { + animation-delay: 0.1s; + } + + .animation-delay-200 { + animation-delay: 0.2s; + } + + .animation-delay-300 { + animation-delay: 0.3s; + } + + .animation-delay-400 { + animation-delay: 0.4s; + } + + .animation-delay-500 { + animation-delay: 0.5s; + } + + .animation-delay-600 { + animation-delay: 0.6s; + } + + .animation-delay-2000 { + animation-delay: 2s; + } + + .animation-delay-4000 { + animation-delay: 4s; + } + + .animate-rotate-slow { + animation: rotate-slow 20s linear infinite; + } + + .animate-wave { + animation: wave 15s ease-in-out infinite; + } + + .animate-particle-float { + animation: particle-float 10s ease-in-out infinite; + } + + .animate-drift { + animation: drift 15s ease-in-out infinite; + } + + @keyframes flow-line { + 0% { + stroke-dashoffset: 1000; + opacity: 0.4; + } + + 50% { + stroke-dashoffset: 500; + opacity: 1; + } + + 100% { + stroke-dashoffset: 0; + opacity: 0.4; + } + } + + @keyframes flow-line-reverse { + 0% { + stroke-dashoffset: 0; + opacity: 0.4; + } + + 50% { + stroke-dashoffset: -500; + opacity: 1; + } + + 100% { + stroke-dashoffset: -1000; + opacity: 0.4; + } + } + + @keyframes pulse-node { + + 0%, + 100% { + transform: scale(1); + opacity: 0.7; + box-shadow: 0 0 0 0 rgba(59, 130, 246, 0.7); + } + + 50% { + transform: scale(1.15); + opacity: 1; + box-shadow: 0 0 20px 5px rgba(59, 130, 246, 0.4); + } + } + + @keyframes glow-pulse { + + 0%, + 100% { + filter: drop-shadow(0 0 2px rgba(59, 130, 246, 0.5)); + } + + 50% { + filter: drop-shadow(0 0 8px rgba(99, 102, 241, 0.8)); + } + } + + .animate-flow-line { + animation: flow-line 5s ease-in-out infinite; + } + + .animate-flow-line-reverse { + animation: flow-line-reverse 5s ease-in-out infinite; + } + + .animate-pulse-node { + animation: pulse-node 2.5s ease-in-out infinite; + } + + .animate-glow-pulse { + animation: glow-pulse 3s ease-in-out infinite; + } + + /* Scroll-triggered animations */ + .scroll-fade-in { + opacity: 0; + transform: translateY(30px); + transition: opacity 0.8s ease-out, transform 0.8s ease-out; + } + + .scroll-fade-in.visible { + opacity: 1; + transform: translateY(0); + } + + .scroll-slide-left { + opacity: 0; + transform: translateX(-50px); + transition: opacity 0.7s ease-out, transform 0.7s ease-out; + } + + .scroll-slide-left.visible { + opacity: 1; + transform: translateX(0); + } + + .scroll-slide-right { + opacity: 0; + transform: translateX(50px); + transition: opacity 0.7s ease-out, transform 0.7s ease-out; + } + + .scroll-slide-right.visible { + opacity: 1; + transform: translateX(0); + } + + .scroll-scale-in { + opacity: 0; + transform: scale(0.9); + transition: opacity 0.6s ease-out, transform 0.6s ease-out; + } + + .scroll-scale-in.visible { + opacity: 1; + transform: scale(1); + } + + .scroll-zoom-in { + opacity: 0; + transform: scale(0.8); + transition: opacity 0.9s cubic-bezier(0.34, 1.56, 0.64, 1), transform 0.9s cubic-bezier(0.34, 1.56, 0.64, 1); + } + + .scroll-zoom-in.visible { + opacity: 1; + transform: scale(1); + } + + /* Staggered scroll animations */ + .scroll-stagger-1 { + transition-delay: 0.1s; + } + + .scroll-stagger-2 { + transition-delay: 0.2s; + } + + .scroll-stagger-3 { + transition-delay: 0.3s; + } + + .scroll-stagger-4 { + transition-delay: 0.4s; + } + + .scroll-stagger-5 { + transition-delay: 0.5s; + } + + .scroll-stagger-6 { + transition-delay: 0.6s; + } + + @keyframes innerWidth { + 0% { + width: 0%; + } + + 50% { + width: 70%; + } + + 100% { + width: 100%; + } + } + + .animate-innerWidth { + animation: innerWidth 8s ease-in-out infinite; + } + + /* Toast slide-in animation */ + @keyframes slide-in { + from { + transform: translateX(100%); + opacity: 0; + } + + to { + transform: translateX(0); + opacity: 1; + } + } + + .animate-slide-in { + animation: slide-in 0.3s ease-out forwards; + } +} + +/* --- Markdown Typography (Manual Prose fallback) --- */ +.prose { + font-size: 0.9375rem; + line-height: 1.625; +} + +.prose h1, +.prose h2, +.prose h3, +.prose h4 { + font-weight: 700; + color: #111827; + margin-top: 1.25rem; + margin-bottom: 0.5rem; + letter-spacing: -0.01em; +} + +.prose h3 { + font-size: 1rem; + text-transform: uppercase; + letter-spacing: 0.05em; + color: #4f46e5; + /* Indigo color for headings to make them pop */ + margin-top: 1.5rem; + border-bottom: 1px solid #f3f4f6; + padding-bottom: 0.25rem; + display: block; + width: 100%; +} + +.prose p { + margin-bottom: 0.75rem; +} + +.prose ul, +.prose ol { + padding-left: 1.25rem; + margin-bottom: 1rem; +} + +.prose ul { + list-style-type: disc; +} + +.prose ol { + list-style-type: decimal; +} + +.prose li { + margin-bottom: 0.5rem; + padding-left: 0.25rem; +} + +.prose strong { + font-weight: 700; + color: #1e1b4b; +} + +.dark .prose h1, +.dark .prose h2, +.dark .prose h3, +.dark .prose h4 { + color: #f9fafb; +} + +.dark .prose h3 { + color: #818cf8; + border-color: #374151; +} + +.dark .prose strong { + color: #ffffff; +} + +.dark .prose { + color: #d1d5db; +} + +/* Table Styles for Markdown */ +.prose table { + display: block; + width: 100%; + overflow-x: auto; + border-collapse: collapse; + margin: 1.5rem 0; + border-radius: 0.5rem; + border: 1px solid #e5e7eb; + font-size: 0.875rem; +} + +.dark .prose table { + border-color: #374151; +} + +.prose thead { + background-color: #f9fafb; + border-bottom: 2px solid #e5e7eb; +} + +.dark .prose thead { + background-color: #1f2937; + border-bottom-color: #374151; +} + +.prose th { + font-weight: 600; + color: #111827; + padding: 0.75rem 1rem; + text-align: left; +} + +.dark .prose th { + color: #f9fafb; +} + +.prose td { + padding: 0.75rem 1rem; + border-bottom: 1px solid #e5e7eb; + color: #374151; +} + +.dark .prose td { + border-bottom-color: #374151; + color: #d1d5db; +} + +.prose tr:last-child td { + border-bottom: none; +} + +.prose tr:nth-child(even) { + background-color: #fcfcfc; +} + +.dark .prose tr:nth-child(even) { + background-color: #1a202c; +} + +/* Code block horizontal scroll */ +.prose pre { + overflow-x: auto; + padding: 1rem; + border-radius: 0.5rem; + background-color: #f3f4f6; + margin: 1rem 0; +} + +.dark .prose pre { + background-color: #1f2937; } diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 9852c15..8a35022 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -17,7 +17,7 @@ export const metadata: Metadata = { description: "Generated by create next app", }; -export default function RootLayout({ children }: LayoutProps<"/">) { +export default function RootLayout({ children }: { children: React.ReactNode }) { return ( -
- Next.js logo -
-

- To get started, edit the{" "} - - page.tsx - {" "} - file. -

-

- Looking for a starting point or more instructions? Head over to{" "} - - Templates - {" "} - or the{" "} - - Learning - {" "} - center. -

-
- -
-
- ); -} +export { default } from "./(features)/HomePage/Index"; \ No newline at end of file diff --git a/src/app/pricing/page.tsx b/src/app/pricing/page.tsx new file mode 100644 index 0000000..b7dc16b --- /dev/null +++ b/src/app/pricing/page.tsx @@ -0,0 +1 @@ +export { default } from "../(features)/Pricing/index"; \ No newline at end of file diff --git a/src/app/product/drive/page.tsx b/src/app/product/drive/page.tsx new file mode 100644 index 0000000..c532815 --- /dev/null +++ b/src/app/product/drive/page.tsx @@ -0,0 +1 @@ +export { default } from "../../(features)/ProductPage/DrivePage"; \ No newline at end of file diff --git a/src/app/product/embed/page.tsx b/src/app/product/embed/page.tsx new file mode 100644 index 0000000..fcdd44b --- /dev/null +++ b/src/app/product/embed/page.tsx @@ -0,0 +1 @@ +export { default } from "../../(features)/ProductPage/EmbedPage"; \ No newline at end of file diff --git a/src/app/product/free-editor/page.tsx b/src/app/product/free-editor/page.tsx new file mode 100644 index 0000000..7352525 --- /dev/null +++ b/src/app/product/free-editor/page.tsx @@ -0,0 +1 @@ +export { default } from "../../(features)/ProductPage/FreeEditorPages"; \ No newline at end of file diff --git a/src/app/product/free-pdf-tools/page.tsx b/src/app/product/free-pdf-tools/page.tsx new file mode 100644 index 0000000..92ebceb --- /dev/null +++ b/src/app/product/free-pdf-tools/page.tsx @@ -0,0 +1 @@ +export { default } from "../../(features)/ProductPage/AllPdfToolsPage"; \ No newline at end of file diff --git a/src/app/product/pdf-editor/page.tsx b/src/app/product/pdf-editor/page.tsx new file mode 100644 index 0000000..a20de1b --- /dev/null +++ b/src/app/product/pdf-editor/page.tsx @@ -0,0 +1 @@ +export { default } from "../../(features)/ProductPage/PdfEditorPage"; \ No newline at end of file diff --git a/src/app/product/platform/page.tsx b/src/app/product/platform/page.tsx new file mode 100644 index 0000000..3d92dd8 --- /dev/null +++ b/src/app/product/platform/page.tsx @@ -0,0 +1 @@ +export { default } from "../../(features)/ProductPage/AllProductsPage"; \ No newline at end of file diff --git a/src/app/product/sign/page.tsx b/src/app/product/sign/page.tsx new file mode 100644 index 0000000..1b7fedc --- /dev/null +++ b/src/app/product/sign/page.tsx @@ -0,0 +1 @@ +export { default } from "../../(features)/ProductPage/SignPage"; \ No newline at end of file diff --git a/src/app/product/workflows/page.tsx b/src/app/product/workflows/page.tsx new file mode 100644 index 0000000..1a19067 --- /dev/null +++ b/src/app/product/workflows/page.tsx @@ -0,0 +1 @@ +export { default } from "../../(features)/ProductPage/WorkflowsPage"; \ No newline at end of file diff --git a/src/app/resources/blog/page.tsx b/src/app/resources/blog/page.tsx new file mode 100644 index 0000000..bc70d3b --- /dev/null +++ b/src/app/resources/blog/page.tsx @@ -0,0 +1 @@ +export { default } from "../../(features)/ResourcePage/BlogPage"; \ No newline at end of file diff --git a/src/app/resources/page.tsx b/src/app/resources/page.tsx new file mode 100644 index 0000000..0a66696 --- /dev/null +++ b/src/app/resources/page.tsx @@ -0,0 +1 @@ +export { default } from "../(features)/ResourcePage/BlogPage"; \ No newline at end of file diff --git a/src/app/security/page.tsx b/src/app/security/page.tsx new file mode 100644 index 0000000..5c4f31b --- /dev/null +++ b/src/app/security/page.tsx @@ -0,0 +1 @@ +export { default } from "../(features)/SecurityPage/Index"; \ No newline at end of file diff --git a/src/app/solutions/administration/page.tsx b/src/app/solutions/administration/page.tsx new file mode 100644 index 0000000..dc2ac0b --- /dev/null +++ b/src/app/solutions/administration/page.tsx @@ -0,0 +1 @@ +export { default } from "../../(features)/SolutionPage/department/AdministrationPage"; \ No newline at end of file diff --git a/src/app/solutions/client-onboarding/page.tsx b/src/app/solutions/client-onboarding/page.tsx new file mode 100644 index 0000000..72e3ce0 --- /dev/null +++ b/src/app/solutions/client-onboarding/page.tsx @@ -0,0 +1 @@ +export { default } from "../../(features)/SolutionPage/usecase/ClientOnboardingPage"; \ No newline at end of file diff --git a/src/app/solutions/construction/page.tsx b/src/app/solutions/construction/page.tsx new file mode 100644 index 0000000..45de105 --- /dev/null +++ b/src/app/solutions/construction/page.tsx @@ -0,0 +1 @@ +export { default } from "../../(features)/SolutionPage/industry/ConstructionPage"; \ No newline at end of file diff --git a/src/app/solutions/contract-management/page.tsx b/src/app/solutions/contract-management/page.tsx new file mode 100644 index 0000000..b7af028 --- /dev/null +++ b/src/app/solutions/contract-management/page.tsx @@ -0,0 +1 @@ +export { default } from "../../(features)/SolutionPage/usecase/ContractManagementPage"; \ No newline at end of file diff --git a/src/app/solutions/document-archiving/page.tsx b/src/app/solutions/document-archiving/page.tsx new file mode 100644 index 0000000..5c52e31 --- /dev/null +++ b/src/app/solutions/document-archiving/page.tsx @@ -0,0 +1 @@ +export { default } from "../../(features)/SolutionPage/usecase/DocumentArchivingPage"; \ No newline at end of file diff --git a/src/app/solutions/education/page.tsx b/src/app/solutions/education/page.tsx new file mode 100644 index 0000000..8efb83a --- /dev/null +++ b/src/app/solutions/education/page.tsx @@ -0,0 +1 @@ +export { default } from "../../(features)/SolutionPage/industry/EducationPage"; \ No newline at end of file diff --git a/src/app/solutions/employee-onboarding/page.tsx b/src/app/solutions/employee-onboarding/page.tsx new file mode 100644 index 0000000..ed12bdf --- /dev/null +++ b/src/app/solutions/employee-onboarding/page.tsx @@ -0,0 +1 @@ +export { default } from "../../(features)/SolutionPage/usecase/EmployeeOnboardingPage"; \ No newline at end of file diff --git a/src/app/solutions/enterprise/page.tsx b/src/app/solutions/enterprise/page.tsx new file mode 100644 index 0000000..785b497 --- /dev/null +++ b/src/app/solutions/enterprise/page.tsx @@ -0,0 +1 @@ +export { default } from "../../(features)/SolutionPage/EnterPrisePage"; \ No newline at end of file diff --git a/src/app/solutions/finance/page.tsx b/src/app/solutions/finance/page.tsx new file mode 100644 index 0000000..a56aab0 --- /dev/null +++ b/src/app/solutions/finance/page.tsx @@ -0,0 +1 @@ +export { default } from "../../(features)/SolutionPage/department/FinancePage"; \ No newline at end of file diff --git a/src/app/solutions/government/page.tsx b/src/app/solutions/government/page.tsx new file mode 100644 index 0000000..c883dc5 --- /dev/null +++ b/src/app/solutions/government/page.tsx @@ -0,0 +1 @@ +export { default } from "../../(features)/SolutionPage/industry/GovernmentPage"; \ No newline at end of file diff --git a/src/app/solutions/healthcare/page.tsx b/src/app/solutions/healthcare/page.tsx new file mode 100644 index 0000000..eb61f16 --- /dev/null +++ b/src/app/solutions/healthcare/page.tsx @@ -0,0 +1 @@ +export { default } from "../../(features)/SolutionPage/industry/HealthcarePage"; \ No newline at end of file diff --git a/src/app/solutions/hr/page.tsx b/src/app/solutions/hr/page.tsx new file mode 100644 index 0000000..a908d9a --- /dev/null +++ b/src/app/solutions/hr/page.tsx @@ -0,0 +1 @@ +export { default } from "../../(features)/SolutionPage/department/HrPage"; \ No newline at end of file diff --git a/src/app/solutions/insurance/page.tsx b/src/app/solutions/insurance/page.tsx new file mode 100644 index 0000000..4394d41 --- /dev/null +++ b/src/app/solutions/insurance/page.tsx @@ -0,0 +1 @@ +export { default } from "../../(features)/SolutionPage/industry/InsurancePage"; \ No newline at end of file diff --git a/src/app/solutions/invoice-approvals/page.tsx b/src/app/solutions/invoice-approvals/page.tsx new file mode 100644 index 0000000..8a2a18d --- /dev/null +++ b/src/app/solutions/invoice-approvals/page.tsx @@ -0,0 +1 @@ +export { default } from "../../(features)/SolutionPage/usecase/InvoiceApprovalsPage"; \ No newline at end of file diff --git a/src/app/solutions/lease-agreements/page.tsx b/src/app/solutions/lease-agreements/page.tsx new file mode 100644 index 0000000..ad8beb2 --- /dev/null +++ b/src/app/solutions/lease-agreements/page.tsx @@ -0,0 +1 @@ +export { default } from "../../(features)/SolutionPage/usecase/LeaseAgreementsPage"; \ No newline at end of file diff --git a/src/app/solutions/leave-requests/page.tsx b/src/app/solutions/leave-requests/page.tsx new file mode 100644 index 0000000..28dd671 --- /dev/null +++ b/src/app/solutions/leave-requests/page.tsx @@ -0,0 +1 @@ +export { default } from "../../(features)/SolutionPage/usecase/LeaveRequestsPage"; \ No newline at end of file diff --git a/src/app/solutions/legal/page.tsx b/src/app/solutions/legal/page.tsx new file mode 100644 index 0000000..7a4ee2d --- /dev/null +++ b/src/app/solutions/legal/page.tsx @@ -0,0 +1 @@ +export { default } from "../../(features)/SolutionPage/LegalPage"; \ No newline at end of file diff --git a/src/app/solutions/logistics/page.tsx b/src/app/solutions/logistics/page.tsx new file mode 100644 index 0000000..ecd2240 --- /dev/null +++ b/src/app/solutions/logistics/page.tsx @@ -0,0 +1 @@ +export { default } from "../../(features)/SolutionPage/industry/LogisticsPage"; \ No newline at end of file diff --git a/src/app/solutions/manufacturing/page.tsx b/src/app/solutions/manufacturing/page.tsx new file mode 100644 index 0000000..da9b6ad --- /dev/null +++ b/src/app/solutions/manufacturing/page.tsx @@ -0,0 +1 @@ +export { default } from "../../(features)/SolutionPage/industry/ManufacturingPage"; \ No newline at end of file diff --git a/src/app/solutions/operations/page.tsx b/src/app/solutions/operations/page.tsx new file mode 100644 index 0000000..d4f2333 --- /dev/null +++ b/src/app/solutions/operations/page.tsx @@ -0,0 +1 @@ +export { default } from "../../(features)/SolutionPage/OperationsPage"; \ No newline at end of file diff --git a/src/app/solutions/page.tsx b/src/app/solutions/page.tsx new file mode 100644 index 0000000..2a71d37 --- /dev/null +++ b/src/app/solutions/page.tsx @@ -0,0 +1 @@ +export { default } from "../(features)/SolutionPage/AllSolutionsPage"; \ No newline at end of file diff --git a/src/app/solutions/procurement/page.tsx b/src/app/solutions/procurement/page.tsx new file mode 100644 index 0000000..9e5714b --- /dev/null +++ b/src/app/solutions/procurement/page.tsx @@ -0,0 +1 @@ +export { default } from "../../(features)/SolutionPage/department/ProcurementPage"; \ No newline at end of file diff --git a/src/app/solutions/purchase-requests/page.tsx b/src/app/solutions/purchase-requests/page.tsx new file mode 100644 index 0000000..87247e6 --- /dev/null +++ b/src/app/solutions/purchase-requests/page.tsx @@ -0,0 +1 @@ +export { default } from "../../(features)/SolutionPage/usecase/PurchaseRequestsPage"; \ No newline at end of file diff --git a/src/app/solutions/real-estate/page.tsx b/src/app/solutions/real-estate/page.tsx new file mode 100644 index 0000000..7f20bf2 --- /dev/null +++ b/src/app/solutions/real-estate/page.tsx @@ -0,0 +1 @@ +export { default } from "../../(features)/SolutionPage/RealEstatePage"; \ No newline at end of file diff --git a/src/app/solutions/sales/page.tsx b/src/app/solutions/sales/page.tsx new file mode 100644 index 0000000..7c9eb8e --- /dev/null +++ b/src/app/solutions/sales/page.tsx @@ -0,0 +1 @@ +export { default } from "../../(features)/SolutionPage/department/SalesPage"; \ No newline at end of file diff --git a/src/app/solutions/site-inspection/page.tsx b/src/app/solutions/site-inspection/page.tsx new file mode 100644 index 0000000..4a84961 --- /dev/null +++ b/src/app/solutions/site-inspection/page.tsx @@ -0,0 +1 @@ +export { default } from "../../(features)/SolutionPage/usecase/SiteInspectionPage"; \ No newline at end of file diff --git a/src/app/solutions/vendor-approvals/page.tsx b/src/app/solutions/vendor-approvals/page.tsx new file mode 100644 index 0000000..1d6378f --- /dev/null +++ b/src/app/solutions/vendor-approvals/page.tsx @@ -0,0 +1 @@ +export { default } from "../../(features)/SolutionPage/usecase/VendorApprovalsPage"; \ No newline at end of file diff --git a/src/lib/utils.ts b/src/lib/utils.ts new file mode 100644 index 0000000..bd0c391 --- /dev/null +++ b/src/lib/utils.ts @@ -0,0 +1,6 @@ +import { clsx, type ClassValue } from "clsx" +import { twMerge } from "tailwind-merge" + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)) +}