diff --git a/.drone.yml b/.drone.yml
new file mode 100644
index 0000000..e7c4bbb
--- /dev/null
+++ b/.drone.yml
@@ -0,0 +1,100 @@
+---
+kind: pipeline
+type: docker
+name: build
+
+steps:
+ - name: dotnet-build
+ image: mcr.microsoft.com/dotnet/sdk:10.0
+ commands:
+ - dotnet restore LiteCharms.slnx
+ - dotnet build LiteCharms.slnx -c Release
+
+ - name: dotnet-test
+ image: mcr.microsoft.com/dotnet/sdk:10.0
+ commands:
+ - dotnet restore LiteCharms.slnx
+ - dotnet test LiteCharms.slnx -c Release --no-restore
+
+trigger:
+ event: [ pull_request ]
+
+---
+kind: pipeline
+type: docker
+name: package
+
+steps:
+ - name: docker-build
+ image: plugins/docker
+ settings:
+ registry: nexus.khongisa.co.za
+ repo: nexus.khongisa.co.za/litecharms-leadgenerator
+ tags: [ latest, "1.${DRONE_BUILD_NUMBER}" ]
+ username: { from_secret: docker_username }
+ password: { from_secret: docker_password }
+ dockerfile: shop/Dockerfile
+ context: .
+
+ - name: gitea-tag
+ image: alpine/git
+ environment:
+ GITEA_USER: { from_secret: git_username }
+ GITEA_PASS: { from_secret: git_password }
+ commands:
+ - git config --global user.email "drone@litecharms.co.za"
+ - git config --global user.name "Drone CI"
+ - git remote set-url origin https://$${GITEA_USER}:$${GITEA_PASS}@gitea.khongisa.co.za/litecharms/leadgenerator.git
+ - git tag 1.${DRONE_BUILD_NUMBER}
+ - git push origin 1.${DRONE_BUILD_NUMBER}
+
+depends_on:
+ - build
+
+trigger:
+ event: [ pull_request ]
+
+---
+kind: pipeline
+type: docker
+name: uat
+
+steps:
+ - name: deploy
+ image: bitnami/kubectl:latest
+ environment:
+ KUBE_CONFIG: { from_secret: kube_config }
+ commands:
+ - mkdir -p $HOME/.kube
+ - echo "$KUBE_CONFIG" > $HOME/.kube/config
+ - kubectl apply -f shop/litecharms-shop-uat.yml
+ - kubectl rollout restart deployment/litecharms-leadgenerator -n litecharms-shop-uat
+
+depends_on:
+ - package
+
+trigger:
+ event: [ pull_request ]
+
+---
+kind: pipeline
+type: docker
+name: prod
+
+steps:
+ - name: deploy
+ image: bitnami/kubectl:latest
+ environment:
+ KUBE_CONFIG: { from_secret: kube_config }
+ commands:
+ - mkdir -p $HOME/.kube
+ - echo "$KUBE_CONFIG" > $HOME/.kube/config
+ - kubectl apply -f litecharms-shop.yml
+ - kubectl rollout restart shop/deployment/litecharms-leadgenerator -n litecharms-shop
+
+depends_on:
+ - uat
+
+trigger:
+ event: [ promote ]
+ target: [ production ]
\ No newline at end of file
diff --git a/.filenesting.json b/.filenesting.json
new file mode 100644
index 0000000..483aefc
--- /dev/null
+++ b/.filenesting.json
@@ -0,0 +1,14 @@
+{
+ "root": true,
+ "dependentFileProviders": {
+ "add": {
+ "addedExtension": {},
+ "extensionToExtension": {
+ "add": {
+ ".css": [ ".razor" ],
+ ".cs": [ ".razor" ]
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..cee292d
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,25 @@
+# Stage 1: Build
+FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
+WORKDIR /app
+
+COPY ["../nuget.config", "./"]
+COPY ["../LeadGenerator/LeadGenerator.csproj", "LeadGenerator/"]
+RUN dotnet restore "LeadGenerator/LeadGenerator.csproj" --configfile nuget.config
+COPY . .
+RUN dotnet publish "../LeadGenerator/LeadGenerator.csproj" -c Release -o /app/publish /p:UseAppHost=false
+
+# Stage 2: Final Image
+FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS final
+WORKDIR /app
+RUN addgroup --system --gid 1000 appgroup && \
+ adduser --system --uid 1000 --ingroup appgroup appuser
+
+EXPOSE 8080
+EXPOSE 8081
+
+COPY --from=build /app/publish .
+
+RUN chown -R appuser:appgroup /app
+USER appuser
+
+ENTRYPOINT ["dotnet", "LeadGenerator.dll"]
\ No newline at end of file
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..d3f8705
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,18 @@
+PROPRIETARY LICENSE
+
+Copyright (c) 2026 Lite Charms (PTY) Ltd. All rights reserved.
+
+This software and its associated documentation (the "Software") are the
+proprietary property of Lite Charms (PTY) Ltd.
+
+The Software is provided for internal use only. Unauthorized copying,
+distribution, modification, or use of this file via any medium is
+strictly prohibited.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
diff --git a/LiteCharms.snk b/LiteCharms.snk
new file mode 100644
index 0000000..598e6da
Binary files /dev/null and b/LiteCharms.snk differ
diff --git a/LiteCharmsShop.slnx b/LiteCharmsShop.slnx
index 4e2253d..86ba73c 100644
--- a/LiteCharmsShop.slnx
+++ b/LiteCharmsShop.slnx
@@ -1 +1,3 @@
-
At Lite Charms, we don't believe in "budget blackholes." We deliver targeted, cloud-native solutions on budget and on time.
+From basic templated sites to full enterprise solutions, we develop mobile-friendly, SEO-optimized applications powered by secure, tailored APIs.
+Enabling growth through secure financial system integrations—from PayFast to direct payment gateways.
+When off-the-shelf products fail to close the gap in your business process, we design and produce the perfect fit for your value proposition.
+Whether you have a specific project in mind or need strategic technical advice, we're ready to help.
++27 87 265 0198
+contact@litecharms.co.za
+Midrand, Johannesburg
+High-Tech Hub, Northern Suburbs
+
+ Request ID: @RequestId
+
+ Swapping to Development environment will display more detailed information about the error that occurred. +
++ The Development environment shouldn't be enabled for deployed applications. + It can result in displaying sensitive information from exceptions to end users. + For local debugging, enable the Development environment by setting the ASPNETCORE_ENVIRONMENT environment variable to Development + and restarting the app. +
+ +@code{ + [CascadingParameter] + private HttpContext? HttpContext { get; set; } + + private string? RequestId { get; set; } + private bool ShowRequestId => !string.IsNullOrEmpty(RequestId); + + protected override void OnInitialized() => + RequestId = Activity.Current?.Id ?? HttpContext?.TraceIdentifier; +} diff --git a/Shop/Components/Pages/Home.razor b/Shop/Components/Pages/Home.razor new file mode 100644 index 0000000..48b8e7c --- /dev/null +++ b/Shop/Components/Pages/Home.razor @@ -0,0 +1,62 @@ +@page "/" +@inject NavigationManager NavigationManager + ++ Software Builds, Server (VPS) Configuration, Secure Tunnels, Private VPN, Private Cloud Builds +
+ +Sorry, the content you are looking for does not exist.
\ No newline at end of file diff --git a/Shop/Components/Pages/Privacy.razor b/Shop/Components/Pages/Privacy.razor new file mode 100644 index 0000000..885a243 --- /dev/null +++ b/Shop/Components/Pages/Privacy.razor @@ -0,0 +1,40 @@ +@page "/privacy" + +Last Updated: May 2026
+ +At Lite Charms (PTY) LTD, we value your privacy. This policy explains how we collect, use, and protect your personal information in accordance with South African and global data protection standards.
+ +In accordance with the Protection of Personal Information Act (POPIA) of South Africa, we are committed to protecting the privacy of our clients. We act as the "Responsible Party" for any data processed through our services.
+ +We only collect information necessary to provide our software development and infrastructure services, including:
+Your data is used strictly for professional purposes:
+We implement industry-standard security measures to prevent unauthorized access. Given our expertise in corporate-grade Kubernetes and automation, we apply the same high-security principles to our internal data management. We do not sell or lease your personal information to third parties.
+ +Under POPIA and global standards, you have the right to:
+Bespoke technical solutions from infrastructure to the handheld.
+We specialize in engineering high-performance, native desktop software tailored for Windows, macOS, and Linux environments. Our development process prioritizes resource efficiency and hardware integration.
+Modernize your commercial workflows with robust, cross-platform Android and iOS applications. We focus on secure, scalable mobile solutions that empower your workforce with real-time data.
+We architect scalable digital ecosystems using industry-standard protocols. Our builds feature OIDC authentication and fully interactive documentation for rapid developer integration.
+Ensure your virtual infrastructure is hardened and production-ready. We focus on securing client-owned machines through rigorous security audits and proactive hardening.
+Deploy with confidence using containerized environments. We build robust Docker server instances utilizing Dockhand and Howzer for automated lifecycle management.
+We implement HA K3s orchestrations designed to rival bank infrastructure. Our builds leverage external databases to ensure uptime even during hardware failures.
+Take control of your organization’s security with dedicated identity management. We specialize in Authentik and Keycloak for a centralized "Zero-Trust" gateway.
+Leverage expert advisory for AI integration and cybersecurity. We provide deep-dive code audits and tutorage in Python and C# for academic and professional excellence.
+Our ultimate service provides a complete digital transformation. We build a unified, high-availability ecosystem from infrastructure to custom applications ready for production.
+Last Updated: May 2026
+ +Welcome to Lite Charms. These terms govern your use of our website and services. By using our site or purchasing our services, you agree to these terms in full. All transactions and communications with Lite Charms (PTY) LTD will be conducted in English.
+ +These terms are governed by and interpreted in accordance with the laws of the Republic of South Africa. We explicitly adhere to:
+Any disputes arising from these terms will be subject to the exclusive jurisdiction of the South African courts.
+ +Best Effort Quotes: All quotes provided are "best effort" estimates. Prices are subject to market fluctuations and third-party provider changes. Upfront Fees: We do not hold deposits. However, certain services require a 50% upfront payment before work commences. Due correspondence will be provided for these requirements before any payment is requested.
+ +Standard Support: We offer a free 3-month support period starting from the date of project delivery. Response Times: For Server and Cloud builds, we maintain a 73-hour SLA during the free support period.
+Expiration: Unless a separate, paid SLA is purchased outside of the standard offerings on this site, all support obligations expire exactly 3 months after delivery. Service Hours: Our standard operating hours are Monday to Friday, 9:00 AM to 5:00 PM. Requests made on weekends or public holidays will attract an hourly rate quoted on call.
+ +In accordance with ECTA, all payments must be made via our approved electronic channels. We take reasonable and industry-standard technical measures to secure your payment information. However, users are responsible for ensuring their own hardware and network security during transactions.
+ +Work-Based Refunds: Refunds are granted based on whether the technical work has been initiated or completed, and strictly within the parameters allowed by the Consumer Protection Act regarding professional digital services. Due to the nature of custom code and server configurations, refunds may be limited once resources are provisioned.
+ +No Warranties: To the extent permitted by South African law, we provide our code and services "as is" and offer no warranties, express or implied. Usage Risks: Lite Charms (PTY) LTD cannot be held liable for any "breakages," data loss, or system downtime ensuing from the use of our code or configurations.
+