diff --git a/index.html b/index.html index 942edd3..cc7292c 100644 --- a/index.html +++ b/index.html @@ -3,13 +3,114 @@ - Lite Charms - - + + + + LiteCharms | Custom Web & Mobile App Development & IT Solutions | Midrand, South Africa + + + + + + + + + + + + + + + + + + + + + + + +
- diff --git a/public/favicon.svg b/public/favicon.svg new file mode 100644 index 0000000..c1655c8 --- /dev/null +++ b/public/favicon.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/public/robots.txt b/public/robots.txt new file mode 100644 index 0000000..679b9f3 --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,7 @@ +# https://www.robotstxt.org/robotstxt.html +User-agent: * +Allow: / + +# Host & Sitemap specification +Host: https://litecharms.co.za +Sitemap: https://litecharms.co.za/sitemap.xml diff --git a/public/sitemap.xml b/public/sitemap.xml new file mode 100644 index 0000000..e8e7ae7 --- /dev/null +++ b/public/sitemap.xml @@ -0,0 +1,9 @@ + + + + https://litecharms.co.za/ + 2026-07-17 + monthly + 1.0 + + diff --git a/src/App.tsx b/src/App.tsx index 56dd8dd..0e6a04c 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -8,6 +8,7 @@ import AuroraBackground from './components/AuroraBackground'; import { BrandIcon, BrandLogo } from './components/BrandAssets'; import { Inquiry } from './types'; import { sendEmailClientSide } from './utils/emailController'; +import { CompliancePageWrapper, ComplianceModal } from './components/ComplianceContent'; import { MapPin, Mail, @@ -16,10 +17,17 @@ import { Send, CheckCircle2, ArrowRight, - Sparkles + Sparkles, + Cookie, + X } from 'lucide-react'; export default function App() { + // Page Routing State + const [activePage, setActivePage] = useState<'home' | 'privacy' | 'terms'>('home'); + const [footerModalType, setFooterModalType] = useState<'privacy' | 'terms' | null>(null); + const [showCookieBanner, setShowCookieBanner] = useState(false); + // General Contact Form States const [contactName, setContactName] = useState(''); const [contactEmail, setContactEmail] = useState(''); @@ -32,6 +40,48 @@ export default function App() { const [activeClients, setActiveClients] = useState(1); const [completedProjects, setCompletedProjects] = useState(5); + // Route syncing with query param on mount + useEffect(() => { + const params = new URLSearchParams(window.location.search); + const pageParam = params.get('page'); + if (pageParam === 'privacy' || pageParam === 'terms') { + setActivePage(pageParam); + } + + const cookiesAccepted = localStorage.getItem('litecharms_cookies_accepted'); + if (!cookiesAccepted) { + setShowCookieBanner(true); + } + }, []); + + // Listen for browser navigation (back/forward) + useEffect(() => { + const handlePopState = () => { + const params = new URLSearchParams(window.location.search); + const pageParam = params.get('page') as 'privacy' | 'terms' | null; + setActivePage(pageParam || 'home'); + }; + window.addEventListener('popstate', handlePopState); + return () => window.removeEventListener('popstate', handlePopState); + }, []); + + const navigateTo = (page: 'home' | 'privacy' | 'terms') => { + setActivePage(page); + const url = new URL(window.location.href); + if (page === 'home') { + url.searchParams.delete('page'); + } else { + url.searchParams.set('page', page); + } + window.history.pushState(null, '', url.toString()); + window.scrollTo({ top: 0, behavior: 'instant' }); + }; + + const dismissCookieBanner = () => { + localStorage.setItem('litecharms_cookies_accepted', 'true'); + setShowCookieBanner(false); + }; + useEffect(() => { // Soft animate stats for visual delight const clientsTimer = setInterval(() => { @@ -116,6 +166,15 @@ export default function App() { console.log('Received Estimate Inquiry:', inquiry); }; + if (activePage !== 'home') { + return ( + navigateTo('home')} + /> + ); + } + return (
{/* Aurora Background */} @@ -562,7 +621,7 @@ export default function App() {
{/* Branding Column */} -
+
@@ -575,14 +634,14 @@ export default function App() {
{/* Links Columns */} -
+
Services Links
  • @@ -597,7 +656,7 @@ export default function App() {
@@ -626,13 +685,58 @@ export default function App() {
+ {/* Compliance Section */} + +
Specifications
- Container & Cloud Ready + Container & Cloud Ready

Fully optimized container configurations with integrated Docker structures, designed for easy deployment to khongisa.co.za or custom Kubernetes setups. @@ -653,6 +757,57 @@ export default function App() {

+ + {/* Cookie Acceptance Popup Banner (Bottom Left, Dismissible, Design-language cohesive) */} + {showCookieBanner && ( + + )} + + {/* Footer Modals */} + {footerModalType && ( + setFooterModalType(null)} + /> + )}
); } diff --git a/src/components/ComplianceContent.tsx b/src/components/ComplianceContent.tsx new file mode 100644 index 0000000..a4e7d2b --- /dev/null +++ b/src/components/ComplianceContent.tsx @@ -0,0 +1,268 @@ +import React from 'react'; +import { Shield, Key, FileText, CheckCircle, Scale, AlertTriangle, HelpCircle } from 'lucide-react'; + +export function PrivacyPolicyContent() { + return ( +
+
+ +
+

POPIA Privacy Policy

+

Last Updated: July 2026 • LiteCharms (PTY) Ltd

+
+
+ +

+ LiteCharms (PTY) Ltd ("LiteCharms", "we", "us", or "our"), registered in South Africa under Registration Number 2020/269438/07, is committed to safeguarding your privacy in strict compliance with the Protection of Personal Information Act, No. 4 of 2013 (POPIA). This privacy policy describes how we collect, process, use, and store your personal information when you use our website, interactive project estimator, and contact portals. +

+ +
+

+ + 1. Information We Collect +

+

+ We collect personal information directly from you when you actively fill out forms on our website or request custom software development estimators. This includes: +

+
    +
  • Identity Information: Full Name, company name, or registered organizational details.
  • +
  • Contact Information: Active email addresses, mobile or landline telephone numbers.
  • +
  • Project & Estimate Data: Desired service categories (such as APIs, MCP, gRPC servers, or identity servers), scale preferences, timeline urgency, custom operational briefs, and ballpark budget specifications.
  • +
+
+ +
+

+ + 2. Legal Basis and Purpose of Processing +

+

+ In accordance with Section 11 of POPIA, we process your personal information solely for the following legitimate business purposes: +

+
    +
  • To formulate and adjust interactive estimation cost guides and SOW (Statement of Work) draft packages.
  • +
  • To contact you regarding your submitted project configurations or schedule corporate consultations.
  • +
  • To design, test, and host isolated container environments on our khongisa.co.za cloud infrastructures.
  • +
  • To ensure legal compliance under South African trade, accounting, and communication safety statutes.
  • +
+
+ +
+

+ + 3. Information Security Measures +

+

+ We employ robust technical and organizational measures to prevent unauthorized access, loss, misuse, or alteration of your personal data. All interactive inquiries saved locally are managed securely in isolated web states, and emails containing project layouts are transmitted through industry-standard TLS encryption protocols. +

+
+ +
+

+ + 4. Your Data Subject Rights under POPIA +

+

+ Under Sections 23 to 25 of POPIA, South African data subjects have the following legal rights: +

+
    +
  • Right to Access: You may request a record of the personal information we hold about you.
  • +
  • Right to Correction: You may request that we update, correct, or complete inaccurate or outdated records.
  • +
  • Right to Destruction: You may request that we delete or permanently de-identify your personal record databases.
  • +
+

+ To exercise any of these rights, please contact our designated Information Officer at contact@litecharms.co.za. +

+
+ +
+

+ LiteCharms (PTY) Ltd is located at 1633 Liebenburg Rd, Noordwyk, Midrand, Gauteng, 1687, South Africa. Information Officer Email: contact@litecharms.co.za. +

+
+
+ ); +} + +export function TermsContent() { + return ( +
+
+ +
+

Terms & Conditions

+

Last Updated: July 2026 • LiteCharms (PTY) Ltd

+
+
+ +

+ Please read these Terms and Conditions ("Terms", "Agreement") carefully before utilizing the interactive estimator, submitting inquiry forms, or engaging the custom software engineering, server setups, or secure tunnel services of LiteCharms (PTY) Ltd ("LiteCharms", "we", "us", or "our"). By accessing this platform or accepting an estimated project roadmap, you signify absolute consent to these South African-governed terms. +

+ +
+
+ + Critical Financial Notice: Upfront Project Initiation Cost +
+

+ Engaging LiteCharms for active project execution requires an **Upfront Project Initiation Cost** calculated proportionately based on your chosen development timeframe: +

+
    +
  • Express Delivery: 50% upfront project initiation fee
  • +
  • Balanced Schedule: 40% upfront project initiation fee
  • +
  • Phased Rollout: 30% upfront project initiation fee
  • +
+

+ IMPORTANT: These initiation payments are dedicated immediately to securing critical engineering resources, software layout drafting, and isolated server environments. They are NOT refundable deposits and cannot be returned under any circumstances once development operations have officially commenced. +

+
+ +
+

+ + 1. Interactive Estimator Limitations & Revisions +

+

+ Any calculation, budget range, or delivery schedule generated by the LiteCharms interactive estimator tool serves strictly as a non-binding ballpark cost layout guide. +

+
    +
  • These estimates are for initial feasibility planning and expectation management.
  • +
  • An estimate is NOT a formal commercial offer, quote, or binding invoice.
  • +
  • Actual project fees are finalized solely inside a comprehensive, signed Statement of Work (SOW) after our technical consultants evaluate complete API integrations, legacy databases, or local hardware constraints.
  • +
+
+ +
+

+ + 2. Delivery & System Testing (SIT & UAT) +

+

+ LiteCharms follows strict software quality assurance guidelines. Before final digital assets, source repositories, or server configurations are handed over to live production or transferred to client ownership, the following protocol is mandatory: +

+
    +
  • System Integration Testing (SIT): The software is evaluated inside isolated testing environments or private staging instances.
  • +
  • User Acceptance Testing (UAT): The client is given a designated timeframe to perform exhaustive functional reviews and submit sign-off approval.
  • +
  • Payment Terms: Upon successful UAT completion and acceptance, the final outstanding project balance must be paid in full in accordance with quoted invoice terms (usually within 7 business days) before production publication, App Store launch, or server admin credential handover.
  • +
+
+ +
+

+ + 3. Mitigation of Scope Creep +

+

+ We budget engineering hours and container resources precisely based on initial agreed specifications. + If a client requests features, fields, database structures, additional gRPC/MCP integrations, or server configurations that exceed the signed SOW, such requests constitute Scope Creep. +

+
    +
  • Scope creep will attract separate, additional billing charges, determined by LiteCharms at the time of the request.
  • +
  • These changes are subject to written estimate revisions, updated delivery timelines, and formal consent from both parties.
  • +
  • No work on scope revisions will start until both parties formally sign off on the pricing adjustment.
  • +
+
+ +
+

+ + 4. Liability Limitations & Governing Law +

+

+ To the maximum extent permitted under South African law, including the Electronic Communications and Transactions Act, 2002 (ECTA) and the Consumer Protection Act, 2008 (CPA): +

+
    +
  • LiteCharms is not liable for indirect, incidental, or consequential damages, including loss of profits, system downtimes, local internet blackouts, or cloud hosting interruptions.
  • +
  • Our total combined liability for any dispute arising out of or related to this agreement is strictly capped at the direct ZAR amount paid to us by the client for the specific project segment.
  • +
  • This Agreement is governed by and construed in accordance with the laws of the Republic of South Africa, and any dispute is subject to the exclusive jurisdiction of the Gauteng High Court, Johannesburg/Pretoria.
  • +
+
+
+ ); +} + +interface CompliancePageWrapperProps { + type: 'privacy' | 'terms'; + onBack: () => void; +} + +export function CompliancePageWrapper({ type, onBack }: CompliancePageWrapperProps) { + React.useEffect(() => { + window.scrollTo({ top: 0, behavior: 'instant' }); + }, [type]); + + return ( +
+
+
+ + + LiteCharms PTY Ltd • South Africa + +
+ + {type === 'privacy' ? : } + +
+ © {new Date().getFullYear()} LiteCharms (PTY) Ltd + +
+
+
+ ); +} + +interface ComplianceModalProps { + isOpen: boolean; + type: 'privacy' | 'terms'; + onClose: () => void; +} + +export function ComplianceModal({ isOpen, type, onClose }: ComplianceModalProps) { + if (!isOpen) return null; + + return ( +
+
+ {/* Header */} +
+ + {type === 'privacy' ? 'POPIA Compliance Statement' : 'Commercial Agreement Terms'} + + +
+ + {/* Content */} +
+ {type === 'privacy' ? : } +
+ + {/* Footer */} +
+ +
+
+
+ ); +} diff --git a/src/components/ProjectEstimator.tsx b/src/components/ProjectEstimator.tsx index 1d9423a..b9a7967 100644 --- a/src/components/ProjectEstimator.tsx +++ b/src/components/ProjectEstimator.tsx @@ -1,7 +1,8 @@ import { useState, useEffect, FormEvent, useRef } from 'react'; import { Inquiry } from '../types'; import { sendEmailClientSide } from '../utils/emailController'; -import { Calculator, Sparkles, Send, ShieldCheck, CheckCircle2, History, Trash2 } from 'lucide-react'; +import { Calculator, Sparkles, Send, ShieldCheck, CheckCircle2, History, Trash2, FileText } from 'lucide-react'; +import { ComplianceModal } from './ComplianceContent'; interface ProjectEstimatorProps { onInquirySubmitted: (inquiry: Inquiry) => void; @@ -20,8 +21,15 @@ export default function ProjectEstimator({ onInquirySubmitted }: ProjectEstimato legacy: false, support: false, }); + const [identityType, setIdentityType] = useState<'none' | 'duende' | 'custom'>('none'); + const [serverConfigType, setServerConfigType] = useState<'none' | 'linux' | 'windows'>('none'); + const [tunnelService, setTunnelService] = useState<'none' | 'khongisa'>('none'); const [timeline, setTimeline] = useState<'express' | 'balanced' | 'phased'>('balanced'); + // Compliance states + const [termsAgreed, setTermsAgreed] = useState(false); + const [termsModalOpen, setTermsModalOpen] = useState(false); + // Contact Form States const [name, setName] = useState(''); const [email, setEmail] = useState(''); @@ -44,17 +52,22 @@ export default function ProjectEstimator({ onInquirySubmitted }: ProjectEstimato } }, []); - const isMounted = useRef(false); + const prevStepRef = useRef<1 | 2>(1); + const prevSuccessRef = useRef(false); - // Scroll to estimator top when step or success state changes + // Scroll to estimator top when step or success state actually changes useEffect(() => { - if (!isMounted.current) { - isMounted.current = true; - return; - } - const element = document.getElementById('estimator'); - if (element) { - element.scrollIntoView({ behavior: 'smooth', block: 'start' }); + const prevStep = prevStepRef.current; + const prevSuccess = prevSuccessRef.current; + + prevStepRef.current = step; + prevSuccessRef.current = success; + + if (prevStep !== step || prevSuccess !== success) { + const element = document.getElementById('estimator'); + if (element) { + element.scrollIntoView({ behavior: 'smooth', block: 'start' }); + } } }, [step, success]); @@ -85,6 +98,18 @@ export default function ProjectEstimator({ onInquirySubmitted }: ProjectEstimato baseWeeks = 9; serviceLabel = 'Desktop Software Layout'; break; + case 'api-grpc': + baseMin = 50000; + baseMax = 100000; + baseWeeks = 6; + serviceLabel = 'API, MCP & gRPC Engineering'; + break; + case 'consultancy': + baseMin = 30000; + baseMax = 70000; + baseWeeks = 4; + serviceLabel = 'Enterprise Architecture & IT Consultancy'; + break; case 'infra-planning': baseMin = 25000; baseMax = 55000; @@ -103,6 +128,18 @@ export default function ProjectEstimator({ onInquirySubmitted }: ProjectEstimato baseWeeks = 7; serviceLabel = 'Khongisa Private Cloud Hosting'; break; + case 'server-config': + baseMin = 35000; + baseMax = 80000; + baseWeeks = 5; + serviceLabel = 'On-Premise Server Setup & OS Configuration'; + break; + case 'identity-security': + baseMin = 45000; + baseMax = 95000; + baseWeeks = 6; + serviceLabel = 'Identity Management & Secure Tunnels'; + break; } // Scale multiplier @@ -154,6 +191,45 @@ export default function ProjectEstimator({ onInquirySubmitted }: ProjectEstimato breakdown.push({ item: 'Proactive 12-Month Support SLA (Est.)', price: `R ${minAdd.toLocaleString('en-ZA')} - R ${maxAdd.toLocaleString('en-ZA')}` }); } + // Identity Management Solutions Pricing + if (identityType === 'duende') { + const minAdd = 25000; + const maxAdd = 45000; + minCost += minAdd; + maxCost += maxAdd; + breakdown.push({ item: 'Self-Hosted Duende Skoruba Identity Server', price: `R ${minAdd.toLocaleString('en-ZA')} - R ${maxAdd.toLocaleString('en-ZA')}` }); + } else if (identityType === 'custom') { + const minAdd = 15000; + const maxAdd = 30000; + minCost += minAdd; + maxCost += maxAdd; + breakdown.push({ item: 'Custom IAM Integration (Auth0/Keycloak)', price: `R ${minAdd.toLocaleString('en-ZA')} - R ${maxAdd.toLocaleString('en-ZA')}` }); + } + + // OS & Server Configurations Pricing + if (serverConfigType === 'linux') { + const minAdd = 20000; + const maxAdd = 35000; + minCost += minAdd; + maxCost += maxAdd; + breakdown.push({ item: 'Linux Environment Server Configuration', price: `R ${minAdd.toLocaleString('en-ZA')} - R ${maxAdd.toLocaleString('en-ZA')}` }); + } else if (serverConfigType === 'windows') { + const minAdd = 25000; + const maxAdd = 40000; + minCost += minAdd; + maxCost += maxAdd; + breakdown.push({ item: 'Windows Server OS & AD Configuration', price: `R ${minAdd.toLocaleString('en-ZA')} - R ${maxAdd.toLocaleString('en-ZA')}` }); + } + + // Secure Tunnel Service Pricing + if (tunnelService === 'khongisa') { + const minAdd = 10000; + const maxAdd = 18000; + minCost += minAdd; + maxCost += maxAdd; + breakdown.push({ item: 'khongisa.co.za Private Secure Cloud Tunnel', price: `R ${minAdd.toLocaleString('en-ZA')} - R ${maxAdd.toLocaleString('en-ZA')}` }); + } + // Timeline factors if (timeline === 'express') { minCost *= 1.3; @@ -239,6 +315,7 @@ export default function ProjectEstimator({ onInquirySubmitted }: ProjectEstimato setPhone(''); setCompany(''); setNotes(''); + setTermsAgreed(false); } }; @@ -300,9 +377,13 @@ export default function ProjectEstimator({ onInquirySubmitted }: ProjectEstimato { id: 'web-design', label: 'Web App Design', type: 'Software' }, { id: 'mobile-design', label: 'Mobile App Eng', type: 'Software' }, { id: 'desktop-design', label: 'Desktop Software', type: 'Software' }, + { id: 'api-grpc', label: 'API & gRPC Engineering', type: 'Software' }, + { id: 'consultancy', label: 'Architecture Consultancy', type: 'Software' }, { id: 'infra-planning', label: 'Docker Containerization', type: 'Cloud & Hosting' }, { id: 'infra-design', label: 'Kubernetes & IaC', type: 'Cloud & Hosting' }, { id: 'infra-rollout', label: 'Khongisa Private Cloud', type: 'Cloud & Hosting' }, + { id: 'server-config', label: 'Server & OS Setup', type: 'Cloud & Hosting' }, + { id: 'identity-security', label: 'Identity & Secure Tunnels', type: 'Cloud & Hosting' }, ].map((srv) => (
- {/* Option 3: Technical Add-ons */} + {/* Option 3: Identity & Access Management (IAM) */} +
+ +

+ Enable high-grade user authentication and unified Single Sign-On (SSO) systems. +

+
+ {[ + { id: 'none', label: 'None / Standard', desc: 'Default local security model' }, + { id: 'duende', label: 'Duende Skoruba', desc: 'Self-hosted SSO identity server' }, + { id: 'custom', label: 'Custom Provider', desc: 'Auth0, Keycloak or Active Directory' }, + ].map((iam) => ( + + ))} +
+
+ + {/* Option 4: Local OS & Server Setup */} +
+ +

+ Configure hardware platforms, operating systems, and domains in your local environment. +

+
+ {[ + { id: 'none', label: 'No Local Setup', desc: 'Deploy onto cloud container instances' }, + { id: 'linux', label: 'Linux OS Setup', desc: 'Ubuntu/Rocky bare-metal or hypervisor config' }, + { id: 'windows', label: 'Windows Server', desc: 'Windows OS rollout with Active Directory' }, + ].map((os) => ( + + ))} +
+
+ + {/* Option 5: Secure Tunnel Service */} +
+ +

+ Establish isolated connections and secure client routing. +

+
+ {[ + { id: 'none', label: 'No Dedicated Tunnel', desc: 'Standard firewall access logic' }, + { id: 'khongisa', label: 'khongisa.co.za Secure Tunnel', desc: 'Encrypted tunnel hosted on our secure private cloud' }, + ].map((tnl) => ( + + ))} +
+
+ + {/* Option 6: Technical Add-ons */}
{[ @@ -392,10 +568,10 @@ export default function ProjectEstimator({ onInquirySubmitted }: ProjectEstimato
- {/* Option 4: Timeline Priority */} + {/* Option 7: Timeline Priority */}
{[ @@ -500,6 +676,23 @@ export default function ProjectEstimator({ onInquirySubmitted }: ProjectEstimato />
+ {/* Compliance Terms Agreement Checkbox */} +
+ +
+

- *Approximate cloud deployment, software engineering & layout rates. Scaled via khongisa.co.za Private Cloud. + *Approximate cloud deployment, software engineering & layout rates. Scaled via khongisa.co.za Private Cloud. +

+
+ + {/* Project Initiation Cost Notice */} +
+

+ {timeline === 'express' ? '50%' : timeline === 'balanced' ? '40%' : '30%'} Upfront Initiation Cost +

+
+ + R {Math.round(estimate.totalMin * (timeline === 'express' ? 0.50 : timeline === 'balanced' ? 0.40 : 0.30)).toLocaleString('en-ZA')} + + to + + R {Math.round(estimate.totalMax * (timeline === 'express' ? 0.50 : timeline === 'balanced' ? 0.40 : 0.30)).toLocaleString('en-ZA')} + +
+

+ Non-refundable upfront project initiation cost (not a deposit) expected prior to work kick-off.

@@ -592,6 +804,16 @@ export default function ProjectEstimator({ onInquirySubmitted }: ProjectEstimato
+ {/* Expectation Management Section */} +
+

+ 💡 Mandatory SIT & UAT: Before live environment transfer or production rollout, the client must perform System Integration Testing (SIT) & User Acceptance Testing (UAT). Upon successful test approval, final balance payment must be settled within formal quoted invoice terms. +

+

+ ⚠️ Scope Creep Policy: Deliverables, features, or setups beyond this initial layout proposal will attract separate, mutually agreed engineering fees. +

+
+ {/* Compliance Box */}
@@ -642,6 +864,7 @@ export default function ProjectEstimator({ onInquirySubmitted }: ProjectEstimato
)}
+ setTermsModalOpen(false)} /> ); } diff --git a/src/data.ts b/src/data.ts index 21eb533..05172d0 100644 --- a/src/data.ts +++ b/src/data.ts @@ -84,6 +84,62 @@ export const SERVICES: Service[] = [ ], icon: 'Server', category: 'infra' + }, + { + id: 'api-grpc', + title: 'API, MCP & gRPC Engineering', + description: 'High-performance API architectures, Model Context Protocol (MCP) servers, and gRPC microservices for fast, ultra-reliable data exchange and AI workflows.', + details: [ + 'Custom RESTful, GraphQL, and webhook api backends', + 'Model Context Protocol (MCP) server integration for LLM/AI interaction pipelines', + 'Ultra-fast gRPC messaging layers and cross-service communication meshes', + 'Strict schema validation, robust rate limiting, and performance profiling', + 'Automated OpenAPI/Swagger specification layouts and Client SDK generation' + ], + icon: 'Network', + category: 'apps' + }, + { + id: 'consultancy', + title: 'Enterprise Architecture & IT Consultancy', + description: 'High-level strategic consulting, feasibility reports, system health checks, and technology stack optimization blueprints tailored for your team.', + details: [ + 'Custom technological stack evaluation and performance auditing', + 'System health checks, architectural diagrams, and feasibility studies', + 'Migration roadmap planning, software layout reviews, and risk profiling', + 'Regulatory compliance consultation (including POPIA data safety standards)', + 'Disaster recovery planning, server failover strategy, and database design' + ], + icon: 'Compass', + category: 'apps' + }, + { + id: 'server-config', + title: 'On-Premise Server Setup & OS Configuration', + description: 'Expert bare-metal or virtualized server setups on Linux and Windows Server environments, fully configured for your local infrastructure and security constraints.', + details: [ + 'Linux (Ubuntu, Rocky, RHEL) and Windows Server bare-metal OS setup', + 'Hypervisor installation (VMware ESXi, Proxmox VE, or Hyper-V)', + 'Active Directory configuration, Domain Controllers, and local DNS/DHCP routing', + 'Local hardware storage pooling (RAID configuration) and automated backup scripts', + 'Host-level firewall policies, secure SSH, and local network audit readiness' + ], + icon: 'Settings', + category: 'infra' + }, + { + id: 'identity-security', + title: 'Identity Management & Secure Tunnels', + description: 'Enterprise identity services featuring self-hosted Duende Skoruba OpenID/OAuth servers and secure remote tunnel deployments on khongisa.co.za cloud.', + details: [ + 'IdentityServer4 / Duende Skoruba SSO self-hosted setups and customization', + 'Integration with third-party providers (Auth0, Okta, Keycloak, or Active Directory)', + 'Secure client-to-cloud tunnel routing hosted on khongisa.co.za cloud', + 'Multi-factor authentication (MFA) and granular token-based access control', + 'End-to-end encrypted connection channels with automatic port-knocking and firewalling' + ], + icon: 'Key', + category: 'infra' } ];