Initial commit 🚀

This commit is contained in:
Felix Klement committed 2026-10-09 14:00:40 +02:00
commit fd58a8d32f
235 files changed
+19775

No files matched your search

+52
View File
@@ -0,0 +1,52 @@
import { Surface, Section, Container, Stack, Button, TextLink, Text } from 'ciphercell-homepage';
export const Primary = () => (
<Surface>
<Section spacing="tight">
<Container>
<Stack gap={5} align="start">
<Button href="/contact">Talk to us</Button>
</Stack>
</Container>
</Section>
</Surface>
);
export const WithSecondary = () => (
<Surface>
<Section spacing="tight">
<Container>
<Stack gap={4} align="start">
<Button href="/cipherverifier">Explore CipherVerifier</Button>
<TextLink href="/method">Explore the method</TextLink>
<Text size="small" muted>A second action is a link, never a second button.</Text>
</Stack>
</Container>
</Section>
</Surface>
);
export const Small = () => (
<Surface>
<Section spacing="tight">
<Container>
<Stack gap={5} align="start">
<Button size="small">Copy the report</Button>
</Stack>
</Container>
</Section>
</Surface>
);
export const OnNight = () => (
<Surface tone="night">
<Section spacing="tight">
<Container>
<Stack gap={4} align="start">
<Button href="/contact">Talk to us</Button>
<Text size="small" muted>On a night surface the button inverts itself.</Text>
</Stack>
</Container>
</Section>
</Surface>
);
+37
View File
@@ -0,0 +1,37 @@
import { Surface, Section, Container, Grid, Col, Stack, Heading, Text } from 'ciphercell-homepage';
export const Offset = () => (
<Surface>
<Section spacing="tight">
<Container>
<Grid>
<Col span={8}>
<Heading>Four stages. One method.</Heading>
</Col>
<Col span={5} start={8}>
<Text measure>
Threat analysis, engineering, verification and monitoring run alongside your development.
</Text>
</Col>
</Grid>
</Container>
</Section>
</Surface>
);
export const FullWidth = () => (
<Surface>
<Section spacing="tight">
<Container>
<Grid>
<Col>
<Stack gap={4}>
<Heading level={3}>A block across all twelve columns.</Heading>
<Text muted>Twelve is the default, so span may be left out.</Text>
</Stack>
</Col>
</Grid>
</Container>
</Section>
</Surface>
);
+17
View File
@@ -0,0 +1,17 @@
import { Surface, Section, Container, Stack, Heading, Text, Rule } from 'ciphercell-homepage';
export const Default = () => (
<Surface>
<Section spacing="tight">
<Container>
<Stack gap={5}>
<Heading level={3}>Talk to us.</Heading>
<Text measure muted>
The page margins and the maximum page width both come from the Container.
</Text>
<Rule />
</Stack>
</Container>
</Section>
</Surface>
);
+26
View File
@@ -0,0 +1,26 @@
import { Surface, Section, Container, Stack, Display, Text } from 'ciphercell-homepage';
export const Hero = () => (
<Surface tone="night">
<Section spacing="tight">
<Container>
<Display>
Security for the software<br />everything else runs on.
</Display>
</Container>
</Section>
</Surface>
);
export const OnPaper = () => (
<Surface>
<Section spacing="tight">
<Container>
<Stack gap={5}>
<Display as="p">CipherVerifier.<br />Every finding, verified.</Display>
<Text muted>Set as a paragraph, because the page heading is elsewhere.</Text>
</Stack>
</Container>
</Section>
</Surface>
);
+17
View File
@@ -0,0 +1,17 @@
import { Surface, Section, Container, Stack, Eyebrow, Heading, Text } from 'ciphercell-homepage';
export const AboveHeadline = () => (
<Surface>
<Section spacing="tight">
<Container>
<Stack gap={3}>
<Eyebrow>Insights</Eyebrow>
<Heading>What a verification report owes you.</Heading>
<Text measure muted>
The eyebrow names the section. It is sentence case, and never set in all caps.
</Text>
</Stack>
</Container>
</Section>
</Surface>
);
+53
View File
@@ -0,0 +1,53 @@
import { Surface, Section, Container, Grid, Col, Stack, Heading, Text, TextLink } from 'ciphercell-homepage';
export const Asymmetric = () => (
<Surface>
<Section spacing="tight">
<Container>
<Grid>
<Col span={7}>
<Heading>Security is built in,<br />not bolted on.</Heading>
</Col>
<Col span={4} start={9}>
<Stack gap={5} align="start">
<Text measure>
We model real adversaries and build zero trust into the architecture rather than
around it.
</Text>
<TextLink href="/about">About CipherCell</TextLink>
</Stack>
</Col>
</Grid>
</Container>
</Section>
</Surface>
);
export const Thirds = () => (
<Surface>
<Section spacing="tight">
<Container>
<Grid>
<Col span={4}>
<Stack gap={3}>
<Heading level={3}>Private 5G</Heading>
<Text size="small" muted>Open interfaces, many vendors.</Text>
</Stack>
</Col>
<Col span={4}>
<Stack gap={3}>
<Heading level={3}>Critical networks</Heading>
<Text size="small" muted>Where a breach stops production.</Text>
</Stack>
</Col>
<Col span={4}>
<Stack gap={3}>
<Heading level={3}>Cloud-native</Heading>
<Text size="small" muted>Security that runs as code.</Text>
</Stack>
</Col>
</Grid>
</Container>
</Section>
</Surface>
);
+35
View File
@@ -0,0 +1,35 @@
import { Surface, Section, Container, Stack, Heading, Text } from 'ciphercell-homepage';
export const SectionHeadline = () => (
<Surface>
<Section spacing="tight">
<Container>
<Heading>Verifiable, not asserted.</Heading>
</Container>
</Section>
</Surface>
);
export const Levels = () => (
<Surface>
<Section spacing="tight">
<Container>
<Stack gap={6}>
<Heading>Four stages. One method.</Heading>
<Stack gap={3}>
<Heading level={3}>Threat analysis</Heading>
<Text measure muted>
Automated analysis of real attack paths, running inside your pipeline.
</Text>
</Stack>
<Stack gap={3}>
<Heading level={3}>Verification</Heading>
<Text measure muted>
Independent review of code and security measures, hardening and testing.
</Text>
</Stack>
</Stack>
</Container>
</Section>
</Surface>
);
+23
View File
@@ -0,0 +1,23 @@
import { Surface, Section, Container, Prose } from 'ciphercell-homepage';
export const Insight = () => (
<Surface>
<Section spacing="tight">
<Container>
<Prose>
<h2>What a verification report owes you</h2>
<p>
A finding without its reasoning is an opinion. Every verdict in a CipherVerifier report
carries the file, the line and the argument that produced it.
</p>
<ul>
<li>The analyser that raised it</li>
<li>The verdict, and how certain it is</li>
<li>The fix we would ship</li>
</ul>
<blockquote>Verifiable, not asserted.</blockquote>
</Prose>
</Container>
</Section>
</Surface>
);
+26
View File
@@ -0,0 +1,26 @@
import { Surface, Section, Container, Stack, Rule, Heading, Text } from 'ciphercell-homepage';
export const BetweenItems = () => (
<Surface>
<Section spacing="tight">
<Container>
<Stack gap={5}>
<Stack gap={3}>
<Heading level={3}>Threat analysis</Heading>
<Text size="small" muted>Threat model, attack paths, CI/CD integration.</Text>
</Stack>
<Rule />
<Stack gap={3}>
<Heading level={3}>Engineering</Heading>
<Text size="small" muted>Zero trust, key management, secure APIs.</Text>
</Stack>
<Rule />
<Stack gap={3}>
<Heading level={3}>Verification</Heading>
<Text size="small" muted>Independent review, hardening, testing.</Text>
</Stack>
</Stack>
</Container>
</Section>
</Surface>
);
+57
View File
@@ -0,0 +1,57 @@
import { Surface, Section, Container, Stack, Heading, Text } from 'ciphercell-homepage';
export const Default = () => (
<Surface>
<Section>
<Container>
<Stack gap={5}>
<Heading>Who we work with</Heading>
<Text measure muted>Operators, integrators and the people who run critical networks.</Text>
</Stack>
</Container>
</Section>
</Surface>
);
export const Tight = () => (
<Surface>
<Section spacing="tight">
<Container>
<Stack gap={4}>
<Heading level={3}>In numbers.</Heading>
<Text measure muted>A subordinate band carries less air than a full section.</Text>
</Stack>
</Container>
</Section>
</Surface>
);
export const Intro = () => (
<Surface>
<Section spacing="intro">
<Container>
<Stack gap={5}>
<Heading>Insights</Heading>
<Text measure muted>
Notes on software security in private 5G, critical networks and the systems that run them.
</Text>
</Stack>
</Container>
</Section>
</Surface>
);
export const Night = () => (
<Surface>
<Section tone="night">
<Container>
<Stack gap={5}>
<Heading>Where we come from.</Heading>
<Text measure muted>
CipherCell grew out of Open RAN security research at the University of Passau.
</Text>
</Stack>
</Container>
</Section>
</Surface>
);
+45
View File
@@ -0,0 +1,45 @@
import { Surface, Section, Container, Stack, Heading, Text, Button } from 'ciphercell-homepage';
export const Default = () => (
<Surface>
<Section spacing="tight">
<Container>
<Stack gap={5}>
<Heading>Four stages. One method.</Heading>
<Text measure>
Threat analysis, engineering, verification and monitoring, applied to your software as
one continuous method rather than four separate projects.
</Text>
</Stack>
</Container>
</Section>
</Surface>
);
export const Tight = () => (
<Surface>
<Section spacing="tight">
<Container>
<Stack gap={2}>
<Text size="small" muted>Threat analysis</Text>
<Text size="small">Threat model</Text>
<Text size="small">Attack paths</Text>
<Text size="small">CI/CD integration</Text>
</Stack>
</Container>
</Section>
</Surface>
);
export const AlignStart = () => (
<Surface>
<Section spacing="tight">
<Container>
<Stack gap={5} align="start">
<Text measure muted>A button should keep its natural width.</Text>
<Button href="/contact">Talk to us</Button>
</Stack>
</Container>
</Section>
</Surface>
);
+32
View File
@@ -0,0 +1,32 @@
import { Surface, Section, Container, Stack, Heading, Text, Button } from 'ciphercell-homepage';
export const Paper = () => (
<Surface>
<Section spacing="tight">
<Container>
<Stack gap={5}>
<Heading>Security is built in,<br />not bolted on.</Heading>
<Text measure>
Infrastructure is software now. Every interface between components is an attack surface.
</Text>
</Stack>
</Container>
</Section>
</Surface>
);
export const Night = () => (
<Surface tone="night">
<Section spacing="tight">
<Container>
<Stack gap={5} align="start">
<Heading>Four stages.<br />One method.</Heading>
<Text measure muted>
Threat analysis, engineering, verification and monitoring, applied as one method.
</Text>
<Button href="/cipherverifier">Explore CipherVerifier</Button>
</Stack>
</Container>
</Section>
</Surface>
);
+41
View File
@@ -0,0 +1,41 @@
import { Surface, Section, Container, Stack, Text } from 'ciphercell-homepage';
export const Measured = () => (
<Surface>
<Section spacing="tight">
<Container>
<Text measure>
Infrastructure is software now. Private 5G networks, industrial control systems and cloud
platforms are assembled from the code and components of many vendors. Every interface
between them is an attack surface, and off-the-shelf tools were not built for that.
</Text>
</Container>
</Section>
</Surface>
);
export const Muted = () => (
<Surface>
<Section spacing="tight">
<Container>
<Text measure muted>
CipherCell is a security engineering company for software. From the first threat model to
the running system.
</Text>
</Container>
</Section>
</Surface>
);
export const Small = () => (
<Surface>
<Section spacing="tight">
<Container>
<Stack gap={3}>
<Text size="small">Threat model, attack paths, CI/CD integration.</Text>
<Text size="small" muted>Passau, Innstr. 43</Text>
</Stack>
</Container>
</Section>
</Surface>
);
+26
View File
@@ -0,0 +1,26 @@
import { Surface, Section, Container, Stack, TextLink, Text } from 'ciphercell-homepage';
export const Standalone = () => (
<Surface>
<Section spacing="tight">
<Container>
<Stack gap={5} align="start">
<TextLink href="/method">Explore the method</TextLink>
</Stack>
</Container>
</Section>
</Surface>
);
export const InSentence = () => (
<Surface>
<Section spacing="tight">
<Container>
<Text measure>
Every finding is verified twice. The pipeline is described in{' '}
<TextLink href="/cipherverifier">the CipherVerifier notes</TextLink>.
</Text>
</Container>
</Section>
</Surface>
);