Skip to content
Merged
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
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ For local OIDC development without a real identity database, use the app-agnosti
### Run with Docker

```bash
docker run -d -p 9080:9080 -p 9081:9081 ghcr.io/puzed/darkauth:latest
docker run -p 9080:9080 -p 9081:9081 ghcr.io/puzed/darkauth:latest
```

Then visit `http://localhost:9081` to complete installation.
Expand Down
2 changes: 1 addition & 1 deletion packages/brochureware/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
<link rel="apple-touch-icon" href="/icons/apple-touch-icon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>DarkAuth — Zero-Knowledge Authentication</title>
<meta name="description" content="Drop-in OpenID Connect for your apps, with a zero-knowledge core. Passwords are verified using OPAQUE, so they never reach the server. Self-hosted, open-source, no SaaS." />
<meta name="description" content="Drop-in OpenID Connect for your apps, with a zero-knowledge core." />
<meta name="author" content="DarkAuth" />
<meta property="og:title" content="DarkAuth — Zero-Knowledge Authentication" />
<meta property="og:description" content="Self-hosted, open-source OIDC authentication server. Passwords never reach the server. Optional zero-knowledge key delivery for end-to-end encryption." />
Expand Down
2 changes: 1 addition & 1 deletion packages/brochureware/src/components/CTABlock.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ interface CTABlockProps {
secondaryHref?: string;
}

const DOCKER_CMD = "docker run -d -p 9080:9080 -p 9081:9081 ghcr.io/puzed/darkauth:latest";
const DOCKER_CMD = "docker run -p 9080:9080 -p 9081:9081 ghcr.io/puzed/darkauth:latest";

export default function CTABlock({
title = "Run it with Docker",
Expand Down
2 changes: 1 addition & 1 deletion packages/brochureware/src/components/Documentation.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ const Documentation = () => {
{
step: "1",
title: "Run with Docker",
code: `docker run -d \
code: `docker run \
-p 9080:9080 \
-p 9081:9081 \
ghcr.io/puzed/darkauth:latest`,
Expand Down
2 changes: 1 addition & 1 deletion packages/brochureware/src/pages/Developers.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import PageHero from "../components/PageHero";
import CodeBlock from "../components/CodeBlock";
import styles from "./Developers.module.css";

const DOCKER_CMD = "docker run -d -p 9080:9080 -p 9081:9081 ghcr.io/puzed/darkauth:latest";
const DOCKER_CMD = "docker run -p 9080:9080 -p 9081:9081 ghcr.io/puzed/darkauth:latest";
const MOCK_DOCKER_CMD = `docker run --rm -p 3020:3020 \\
-e DARKAUTH_MOCK_CONFIG=/config/darkauth-mock.yaml \\
-v "$PWD/darkauth-mock.yaml:/config/darkauth-mock.yaml:ro" \\
Expand Down
8 changes: 4 additions & 4 deletions packages/brochureware/src/pages/Home.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import {
} from "../lib/screenshots";
import styles from "./Home.module.css";

const DOCKER_CMD = "docker run -d -p 9080:9080 -p 9081:9081 ghcr.io/puzed/darkauth:latest";
const DOCKER_CMD = "docker run -p 9080:9080 -p 9081:9081 ghcr.io/puzed/darkauth:latest";
const MOCK_DOCKER_CMD = `docker run --rm -p 3020:3020 \\
-e DARKAUTH_MOCK_CONFIG=/config/darkauth-mock.yaml \\
-v "$PWD/darkauth-mock.yaml:/config/darkauth-mock.yaml:ro" \\
Expand Down Expand Up @@ -108,10 +108,10 @@ export default function Home() {
<section className={styles.hero}>
<div className="container">
<div className={styles.heroContent}>
<span className={styles.heroEyebrow}>Open source · Self-hosted · AGPL-3.0</span>
<h1 className={styles.heroTitle}>Authentication that can't leak what it never had.</h1>
<span className={styles.heroEyebrow}>Open source · Self-hosted · Zero Knowledge</span>
<h1 className={styles.heroTitle}>Can't leak what you don't have</h1>
<p className={styles.heroSub}>
Drop-in OpenID Connect for your apps, with a zero-knowledge core. Passwords are verified using OPAQUE, so they never reach the server. And with optional zero-knowledge key delivery, your app can offer true end-to-end encryption — keys are derived on the user's device and never touch the database.
Drop-in OpenID Connect for your apps, with a zero-knowledge core.
</p>
<div className={styles.heroCtas}>
<Link to="/developers/quickstart" className={styles.btnPrimary}>Run it with Docker</Link>
Expand Down
2 changes: 1 addition & 1 deletion packages/brochureware/src/pages/OpenSource.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import CodeBlock from "../components/CodeBlock";
import RelatedLinks from "../components/RelatedLinks";
import styles from "./OpenSource.module.css";

const DOCKER_CMD = "docker run -d -p 9080:9080 -p 9081:9081 ghcr.io/puzed/darkauth:latest";
const DOCKER_CMD = "docker run -p 9080:9080 -p 9081:9081 ghcr.io/puzed/darkauth:latest";

const LICENSES = [
{
Expand Down
4 changes: 2 additions & 2 deletions packages/brochureware/src/pages/SelfHost.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ import CTABlock from "../components/CTABlock";
import RelatedLinks from "../components/RelatedLinks";
import styles from "./SelfHost.module.css";

const DOCKER_RUN = "docker run -d -p 9080:9080 -p 9081:9081 ghcr.io/puzed/darkauth:latest";
const DOCKER_POSTGRES = `docker run -d \\
const DOCKER_RUN = "docker run -p 9080:9080 -p 9081:9081 ghcr.io/puzed/darkauth:latest";
const DOCKER_POSTGRES = `docker run \\
-p 9080:9080 \\
-p 9081:9081 \\
-v /path/to/config.yaml:/app/config.yaml:ro \\
Expand Down
4 changes: 2 additions & 2 deletions packages/brochureware/src/pages/developers/Quickstart.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import CodeBlock from "../../components/CodeBlock";
import RelatedLinks from "../../components/RelatedLinks";
import styles from "./Quickstart.module.css";

const DOCKER_CMD = "docker run -d -p 9080:9080 -p 9081:9081 ghcr.io/puzed/darkauth:latest";
const DOCKER_POSTGRES = `docker run -d -p 9080:9080 -p 9081:9081 \\
const DOCKER_CMD = "docker run -p 9080:9080 -p 9081:9081 ghcr.io/puzed/darkauth:latest";
const DOCKER_POSTGRES = `docker run -p 9080:9080 -p 9081:9081 \\
-e DATABASE_URL=postgresql://user:pass@host:5432/darkauth \\
ghcr.io/puzed/darkauth:latest`;

Expand Down
2 changes: 1 addition & 1 deletion packages/docs/src/content/docs/admins/install.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ Most people should use the web installer. It guides you through database choice,
Docker is the quickest runtime path:

```bash
docker run -d -p 9080:9080 -p 9081:9081 ghcr.io/puzed/darkauth:latest
docker run -p 9080:9080 -p 9081:9081 ghcr.io/puzed/darkauth:latest
```

For source installs, run dependencies and migrations from the repository:
Expand Down
2 changes: 1 addition & 1 deletion packages/docs/src/content/docs/quickstart.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ This quickstart gets a DarkAuth instance running so you can see the admin portal
The published image starts DarkAuth with the default user and admin ports exposed:

```bash
docker run -d -p 9080:9080 -p 9081:9081 ghcr.io/puzed/darkauth:latest
docker run -p 9080:9080 -p 9081:9081 ghcr.io/puzed/darkauth:latest
```

Open `http://localhost:9081` to complete the first-run installer. During installation, the admin port serves the installer instead of the normal admin portal. After setup is complete, the same port serves the admin UI.
Expand Down
6 changes: 3 additions & 3 deletions specs/BROCHUREWARE.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
> **DarkAuth is a self-hosted, open-source authentication server with OpenID Connect — built so the server never sees your users' passwords, and (optionally) never sees the keys that encrypt their data.**

### 1.2 The elevator pitch (≈40 words, for the hero subhead)
> Drop-in OpenID Connect for your apps, with a zero-knowledge core. Passwords are verified using OPAQUE, so they never reach the server. And with optional zero-knowledge key delivery, your app can offer true end-to-end encryption — keys are derived on the user's device and never touch the database.
> Drop-in OpenID Connect for your apps, with a zero-knowledge core.

### 1.3 The 3 pillars (the "why DarkAuth")
These are the three ideas every page should reinforce. Use them as the homepage's primary feature triad.
Expand Down Expand Up @@ -136,7 +136,7 @@ Visitors should never be forced through a wall of text; they pick a thread and p
- Bottom line: "DarkAuth is open source under AGPL-3.0. Self-host it forever, free." + Docker pull command.

### 4.3 Recurring CTAs (use across pages)
- Primary: **"Run it with Docker"** → shows `docker run -d -p 9080:9080 -p 9081:9081 ghcr.io/puzed/darkauth:latest`.
- Primary: **"Run it with Docker"** → shows `docker run -p 9080:9080 -p 9081:9081 ghcr.io/puzed/darkauth:latest`.
- Secondary: **"Read the whitepaper"** / **"Browse the source"**.
- Avoid a "Sign up" / "Start free trial" CTA — there is no SaaS. The conversion is *self-host* or *star/read*.

Expand All @@ -151,7 +151,7 @@ Visitors should never be forced through a wall of text; they pick a thread and p
**Purpose:** Answer "what is this?" in 10 seconds; tease the depth; route people to their thread.

**Hero**
- H1: *Authentication that can't leak what it never had.*
- H1: *Can't leak what you don't have*
- Sub: the elevator pitch (§1.2).
- CTAs: "Run it with Docker" (primary) · "How it works" (secondary).
- Visual: `logos/hero.png` (admin dashboard + login), framed on the dark canvas with the purple glow / logo motif.
Expand Down