Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 39 additions & 2 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,16 +20,33 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0

- uses: pnpm/action-setup@v4
with:
version: 10

- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: "20"
cache: "pnpm"
cache-dependency-path: pnpm-lock.yaml

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Generate IndexNow key file
if: ${{ secrets.INDEXNOW_KEY != '' }}
run: printf '%s' "$INDEXNOW_KEY" > "public/${INDEXNOW_KEY}.txt"
env:
INDEXNOW_KEY: ${{ secrets.INDEXNOW_KEY }}

- name: Setup Pages
id: setup_pages
uses: actions/configure-pages@v5

- name: Restore cache
uses: actions/cache@v4
with:
Expand All @@ -38,10 +55,12 @@ jobs:
key: ${{ runner.os }}-nextjs-${{ hashFiles('**/pnpm-lock.yaml') }}-${{ hashFiles('**.[jt]s', '**.[jt]sx') }}
restore-keys: |
${{ runner.os }}-nextjs-${{ hashFiles('**/pnpm-lock.yaml') }}-
- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Build with Next.js
run: pnpm run build
env:
PAGES_BASE_PATH: ${{ steps.setup_pages.outputs.base_path }}

- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
Expand All @@ -57,3 +76,21 @@ jobs:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4

indexnow:
runs-on: ubuntu-latest
needs: deploy
if: github.ref == 'refs/heads/main'
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: "20"

- name: Submit URLs to IndexNow
run: node scripts/indexnow.mjs
env:
INDEXNOW_KEY: ${{ secrets.INDEXNOW_KEY }}
3 changes: 2 additions & 1 deletion app/(marketing)/imprint/page.tsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import { createMetadata } from '@/lib/metadata';

export const metadata = createMetadata({
title: 'Imprint - Ultraviolet',
title: 'Imprint | Cube AI',
description: 'Imprint and Legal Information for Ultraviolet',
alternates: { canonical: '/imprint/' },
});

export default function ImprintPage() {
Expand Down
74 changes: 74 additions & 0 deletions app/(marketing)/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,90 @@ import Integrations from "@/components/sections/Integrations";
import Gateway from "@/components/sections/Gateway";
import UseCases from "@/components/sections/UseCases";
import Partners from "@/components/sections/Partners";
import FAQ from "@/components/sections/FAQ";
import JsonLd from "@/components/JsonLd";

const homepageFAQs = [
{
question: "What is Cube AI?",
answer: "Cube AI is an open-source framework that deploys Large Language Models inside hardware Trusted Execution Environments (TEEs), providing cryptographic guarantees that neither the cloud provider nor infrastructure operators can access your data or model weights.",
},
{
question: "How does TEE isolation work in Cube AI?",
answer: "Cube AI runs LLM inference inside AMD SEV-SNP or Intel TDX enclaves — hardware-isolated memory regions where code and data are encrypted in use. Remote attestation lets you verify cryptographically that the code running inside the enclave has not been tampered with.",
},
{
question: "Is Cube AI HIPAA compliant?",
answer: "Cube AI's architecture supports HIPAA compliance by ensuring PHI never leaves the TEE in plaintext, applying automated PII/PHI masking at the AI Gateway layer, and generating cryptographic audit trails for all model interactions.",
},
{
question: "Can Cube AI run on-premises?",
answer: "Yes. Cube AI is deployment-agnostic and supports on-premise hospital data centers, private cloud environments, and air-gapped government networks — anywhere your data sovereignty requirements demand the AI runs locally.",
},
{
question: "Does Cube AI support OpenAI-compatible APIs?",
answer: "Yes. Cube AI exposes an OpenAI-compatible REST API, enabling teams to switch from public LLM APIs to confidential AI infrastructure with minimal code changes.",
},
{
question: "Who is behind Cube AI?",
answer: "Cube AI is developed by Ultraviolet, a member of the Linux Foundation and the Confidential Computing Consortium, with backing from the European Commission and enterprise partners including Nokia, Ericsson, Thales, and Fujitsu.",
},
];

const organizationSchema = {
"@context": "https://schema.org",
"@type": "Organization",
"@id": "https://cube.ultraviolet.rs/#organization",
"name": "Ultraviolet",
"url": "https://ultraviolet.rs",
"description": "Confidential computing and secure AI platform provider",
"email": "info@ultraviolet.rs",
"sameAs": [
"https://github.com/ultravioletrs/cube",
"https://linkedin.com/company/ultravioletrs",
"https://twitter.com/ultravioletrs",
],
"memberOf": [
{ "@type": "Organization", "name": "Linux Foundation" },
{ "@type": "Organization", "name": "Confidential Computing Consortium" },
],
};

const softwareApplicationSchema = {
"@context": "https://schema.org",
"@type": "SoftwareApplication",
"name": "Cube AI",
"applicationCategory": "SecurityApplication",
"applicationSubCategory": "AI Security",
"operatingSystem": "Linux",
"offers": { "@type": "Offer", "price": "0", "priceCurrency": "USD" },
"url": "https://cube.ultraviolet.rs",
"sameAs": "https://github.com/ultravioletrs/cube",
"codeRepository": "https://github.com/ultravioletrs/cube",
"downloadUrl": "https://github.com/ultravioletrs/cube",
"license": "https://github.com/ultravioletrs/cube/blob/main/LICENSE",
"description": "Open-source framework for securing LLMs with TEEs, built-in governance, and privacy-preserving AI gateways.",
"featureList": ["Hardware TEE isolation", "AI Gateway", "PII redaction", "Cryptographic audit trails", "RBAC", "OpenAI-compatible API"],
"author": { "@type": "Organization", "@id": "https://cube.ultraviolet.rs/#organization", "name": "Ultraviolet" },
};

export const metadata = {
alternates: {
canonical: "/",
},
};

export default function Home() {
return (
<div className="flex flex-col min-h-screen">
<JsonLd data={[organizationSchema, softwareApplicationSchema]} />
<Hero />
<Partners />
<Features />
<Integrations />
<Gateway />
<UseCases />
<FAQ items={homepageFAQs} />
</div>
);
}
3 changes: 2 additions & 1 deletion app/(marketing)/privacy/page.tsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import { createMetadata } from '@/lib/metadata';

export const metadata = createMetadata({
title: 'Privacy Policy - Ultraviolet',
title: 'Privacy Policy | Cube AI',
description: 'Privacy Policy for Cube AI Platform',
alternates: { canonical: '/privacy/' },
});

export default function PrivacyPage() {
Expand Down
3 changes: 2 additions & 1 deletion app/(marketing)/terms/page.tsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import { createMetadata } from '@/lib/metadata';

export const metadata = createMetadata({
title: 'Terms of Service - Ultraviolet',
title: 'Terms of Service | Cube AI',
description: 'Terms of Service for Cube AI Platform',
alternates: { canonical: '/terms/' },
});

export default function TermsPage() {
Expand Down
136 changes: 122 additions & 14 deletions app/(marketing)/use-cases/[slug]/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,91 @@ import React from "react";
import { notFound } from "next/navigation";
import { Metadata } from "next";
import { getUseCaseBySlug, useCases } from "@/lib/use-cases";
import { createMetadata, baseUrl } from "@/lib/metadata";

const useCaseOgImages: Record<string, string> = {
"financial-services": "/img/finance-hero.png",
"healthcare": "/img/healthcare-hero.png",
"government": "/img/government-hero.png",
};

import JsonLd from "@/components/JsonLd";
import FAQ from "@/components/sections/FAQ";
import UseCaseHero from "@/components/use-cases/UseCaseHero";
import UseCaseChallenges from "@/components/use-cases/UseCaseChallenges";
import UseCaseSolutions from "@/components/use-cases/UseCaseSolutions";
import UseCaseDeployments from "@/components/use-cases/UseCaseDeployments";
import UseCaseCTA from "@/components/use-cases/UseCaseCTA";

const useCaseFAQs: Record<string, { question: string; answer: string }[]> = {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not so sure about some of these FAQs. Some seem to be answering questions regarding Prism and not cube-ai. The accuracy of some needs to be confirmed (integrations, latency values, compliance). Did you give ai proper context as to what Cube-ai is all about?

"financial-services": [
{
question: "Is Cube AI compliant with SEC and FINRA regulations?",
answer: "Cube AI's verifiable compute policies and cryptographic audit trails support compliance with SEC Rule 17a-4 and FINRA requirements for data integrity and access control in AI-assisted trading systems.",
},
{
question: "How does Cube AI protect proprietary trading algorithms?",
answer: "Trading models run inside hardware TEEs, making model weights and inference logic inaccessible to cloud operators, co-tenants, or unauthorized employees — even with root access to the host system.",
},
{
question: "Can multiple banks collaborate on AI models without sharing raw data?",
answer: "Yes. Cube AI's attestation layer enables multi-party computation where each institution can verify the model and policies before contributing data, without any party seeing another's raw inputs.",
},
{
question: "What latency overhead does TEE-based inference add?",
answer: "Typical overhead is 5–15% compared to unprotected inference, depending on workload. For compliance-sensitive use cases, this is an acceptable trade-off versus regulatory and reputational risk.",
},
{
question: "Does Cube AI integrate with existing Bloomberg or Reuters data feeds?",
answer: "Cube AI's OpenAI-compatible API layer allows integration with any data pipeline. Specific connector support depends on your deployment configuration.",
},
],
"healthcare": [
{
question: "How does Cube AI prevent PHI from entering LLM training data?",
answer: "Cube AI's AI Gateway applies automated PHI detection and masking (names, SSNs, MRNs, dates of birth) before prompts reach the model, and hardware TEEs ensure the model operator cannot log or access the raw prompt stream.",
},
{
question: "Is Cube AI HIPAA compliant?",
answer: "Cube AI's architecture supports HIPAA compliance through encrypted-in-use computation, PHI masking, role-based access control, and cryptographic audit logs. Compliance certification requires your specific deployment configuration to be assessed.",
},
{
question: "Can hospitals securely collaborate on AI research without sharing patient records?",
answer: "Yes. Hardware attestation allows multiple institutions to verify that an agreed model policy is enforced before contributing data. No institution sees another's raw patient records.",
},
{
question: "Does Cube AI support on-premise deployment in hospital data centers?",
answer: "Yes. Cube AI is designed for environments where data cannot leave the hospital network. Full on-premise deployment is a primary use case.",
},
{
question: "How are medical AI model outputs audited for regulatory purposes?",
answer: "Every inference request generates a cryptographically signed audit trail stored outside the TEE, providing tamper-evident logs suitable for regulatory review and medical liability documentation.",
},
],
"government": [
{
question: "Is Cube AI FedRAMP aligned?",
answer: "Cube AI's confidential computing architecture aligns with FedRAMP High baseline controls around data-at-rest and data-in-use encryption, zero-trust access, and audit logging. Formal FedRAMP authorization requires a specific deployment assessment.",
},
{
question: "Can Cube AI operate in air-gapped environments?",
answer: "Yes. Cube AI supports fully isolated, air-gapped deployments with no external network dependencies for inference. Model updates and attestation verification can be performed offline.",
},
{
question: "How does Cube AI support zero-trust security models?",
answer: "Cube AI assumes no implicit trust in the host OS, hypervisor, or cloud provider. All sensitive operations are confined to hardware TEEs with cryptographic proof of integrity available at any time via remote attestation.",
},
{
question: "What classification levels can Cube AI support?",
answer: "Cube AI has been evaluated for environments requiring IL4-equivalent protections. Specific classification level support depends on your hardware platform (AMD SEV-SNP, Intel TDX) and deployment configuration.",
},
{
question: "Does Cube AI support multi-agency data sharing?",
answer: "Yes. Using hardware attestation, multiple government agencies can share AI infrastructure while maintaining cryptographic guarantees that each agency's data is processed only by authorized models under agreed policies.",
},
],
};

interface UseCasePageProps {
params: Promise<{ slug: string }>;
}
Expand All @@ -27,20 +105,24 @@ export async function generateMetadata({ params }: UseCasePageProps): Promise<Me
return {};
}

let keywords = ["Cube AI", "enterprise AI"];
if (useCase.slug === "financial-services") {
keywords = ["finance AI", "quantitative trading AI", "SEC compliance AI", "FINRA compliant LLM", "secure banking AI", "confidential computing finance"];
} else if (useCase.slug === "healthcare") {
keywords = ["healthcare AI", "HIPAA compliant LLM", "medical AI security", "PHI protection AI", "confidential computing healthcare", "AI for life sciences"];
} else if (useCase.slug === "government") {
keywords = ["government AI", "defense AI security", "FedRAMP compliant LLM", "IL4 compliant AI", "zero-trust AI", "sovereign cloud AI"];
}

return {
return createMetadata({
title: `${useCase.title} AI Solutions | Cube`,
description: useCase.heroDescription,
keywords,
};
alternates: {
canonical: `/use-cases/${useCase.slug}/`,
},
openGraph: {
title: `Cube AI for ${useCase.title}`,
description: useCase.heroDescription,
url: `${baseUrl}/use-cases/${useCase.slug}/`,
images: [{ url: useCaseOgImages[useCase.slug] ?? "/img/cube-ai-hero.png", width: 1200, height: 630, alt: `Cube AI — ${useCase.title}` }],
},
twitter: {
title: `Cube AI for ${useCase.title}`,
description: useCase.heroDescription,
images: [useCaseOgImages[useCase.slug] ?? "/img/cube-ai-hero.png"],
},
});
}

export default async function UseCasePage({ params }: UseCasePageProps) {
Expand All @@ -51,9 +133,31 @@ export default async function UseCasePage({ params }: UseCasePageProps) {
notFound();
}

const breadcrumbSchema = {
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{ "@type": "ListItem", "position": 1, "name": "Home", "item": "https://cube.ultraviolet.rs/" },
{ "@type": "ListItem", "position": 2, "name": "Use Cases", "item": "https://cube.ultraviolet.rs/use-cases/" },
{ "@type": "ListItem", "position": 3, "name": useCase.title, "item": `https://cube.ultraviolet.rs/use-cases/${useCase.slug}/` },
],
};

const webPageSchema = {
"@context": "https://schema.org",
"@type": "WebPage",
"@id": `https://cube.ultraviolet.rs/use-cases/${useCase.slug}/#webpage`,
"url": `https://cube.ultraviolet.rs/use-cases/${useCase.slug}/`,
"name": `${useCase.title} AI Solutions | Cube`,
"description": useCase.heroDescription,
"isPartOf": { "@id": "https://cube.ultraviolet.rs/#website" },
"breadcrumb": { "@id": `https://cube.ultraviolet.rs/use-cases/${useCase.slug}/#breadcrumb` },
};

return (
<div className="flex flex-col min-h-screen">
<UseCaseHero
<JsonLd data={[breadcrumbSchema, webPageSchema]} />
<UseCaseHero
title={useCase.title}
heroText={useCase.heroText}
heroDescription={useCase.heroDescription}
Expand All @@ -73,9 +177,13 @@ export default async function UseCasePage({ params }: UseCasePageProps) {
imageAlt={useCase.deploymentImageAlt}
/>

<UseCaseCTA
{useCaseFAQs[useCase.slug] && (
<FAQ items={useCaseFAQs[useCase.slug]} />
)}
<UseCaseCTA
heading={useCase.ctaHeading}
description={useCase.ctaDescription}
currentSlug={useCase.slug}
/>
</div>
);
Expand Down
Loading
Loading