diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..7a550fe --- /dev/null +++ b/.env.example @@ -0,0 +1,9 @@ +# GEMINI_API_KEY: Required for Gemini AI API calls. +# AI Studio automatically injects this at runtime from user secrets. +# Users configure this via the Secrets panel in the AI Studio UI. +GEMINI_API_KEY="MY_GEMINI_API_KEY" + +# APP_URL: The URL where this applet is hosted. +# AI Studio automatically injects this at runtime with the Cloud Run service URL. +# Used for self-referential links, OAuth callbacks, and API endpoints. +APP_URL="MY_APP_URL" diff --git a/index.html b/index.html index ae72e37..942edd3 100644 --- a/index.html +++ b/index.html @@ -3,7 +3,9 @@
-- LiteCharms (PTY) Ltd was born in Midrand in 2020 , initially serving as a specialist interface consulting firm for the emerging mobile industry in South Africa. As local enterprise operations expanded, we observed a crucial bottleneck: software layout design cannot achieve its full potential if clients lack reliable, containerized hosting environments and flexible scale options. + LiteCharms (PTY) Ltd was born in Midrand in 2020, initially serving as a specialist interface consulting firm for the emerging mobile industry in South Africa. As local enterprise operations expanded, we observed a crucial bottleneck: software layout design cannot achieve its full potential if clients lack reliable, containerized hosting environments and flexible scale options.
- In 2024, we expanded our core divisions to provide automated Docker container layouts, declarative Kubernetes blueprints, and cloud setups, powered by our high-performance private cloud platform, khongisa.co.za. + In 2022, we expanded our core divisions to provide automated Docker container layouts, declarative Kubernetes blueprints, and cloud setups, powered by our high-performance private cloud platform, khongisa.co.za.
Today, we bridge the gap between user experience and modern cloud orchestration, delivering reliable structures that are optimized, secure, and fully documented. @@ -281,7 +278,7 @@ export default function App() {
+
Completion Roadmap
@@ -557,7 +568,7 @@ export default function ProjectEstimator({ onInquirySubmitted }: ProjectEstimato
+
Priority Mode
diff --git a/src/data.ts b/src/data.ts
index 1b161b6..21eb533 100644
--- a/src/data.ts
+++ b/src/data.ts
@@ -138,24 +138,12 @@ export const TIMELINE: TimelineEvent[] = [
},
{
year: '2022',
- title: 'Multi-Platform Pivot',
- description: 'Expanded our services to full web and desktop software layout design, securing major clients in Gauteng\'s logistics and retail sectors.',
- milestone: false
- },
- {
- year: '2023',
- title: 'Private Cloud R&D',
- description: 'In response to clients facing local server limitations, we began research into dedicated hypervisors, virtualization technologies, and private network clusters.',
- milestone: false
- },
- {
- year: '2024',
title: 'Khongisa Cloud Platform Launch',
description: 'Successfully built and rolled out our proprietary private cloud hosting platform (khongisa.co.za), allowing client applications to host seamlessly without third-party servers.',
milestone: true
},
{
- year: '2025',
+ year: '2024',
title: 'Kubernetes & IaC Integration',
description: 'Expanded our operations to offer enterprise-grade Docker containerization, Kubernetes configuration blueprints, and multi-cloud Infrastructure as Code (IaC) designs.',
milestone: true
diff --git a/src/index.css b/src/index.css
index 62bad8c..b7d920d 100644
--- a/src/index.css
+++ b/src/index.css
@@ -71,6 +71,14 @@
}
/* Base custom classes */
+html, body {
+ font-family: var(--font-sans);
+}
+
+button, input, select, textarea {
+ font-family: inherit;
+}
+
.font-display {
font-family: var(--font-display);
}
diff --git a/src/utils/emailController.ts b/src/utils/emailController.ts
new file mode 100644
index 0000000..dc334aa
--- /dev/null
+++ b/src/utils/emailController.ts
@@ -0,0 +1,147 @@
+import { Inquiry } from '../types';
+
+export interface EmailData {
+ name: string;
+ email: string;
+ phone?: string;
+ company?: string;
+ subject: string;
+ message: string;
+ isEstimate: boolean;
+ estimateSummary?: {
+ totalMin: number;
+ totalMax: number;
+ timelineWeeks: number;
+ breakdown: Array<{ item: string; price: string }>;
+ };
+}
+
+// Dynamically load the SMTPJS script to ensure it is always available
+export function loadSmtpScript(): Promise