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
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
# Web Video Optimizer

<picture>
<source media="(prefers-color-scheme: light)" srcset="docs/assets/brand/wordmark-light.svg">
<img src="docs/assets/brand/wordmark-dark.svg" alt="Web Video Optimizer" width="420">
</picture>

[![CI](https://github.com/Artsen/web-video-optimizer/actions/workflows/ci.yml/badge.svg)](https://github.com/Artsen/web-video-optimizer/actions/workflows/ci.yml)
[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
![Node.js 20+](https://img.shields.io/badge/Node.js-20%2B-339933)
Expand Down Expand Up @@ -119,6 +124,7 @@ flowchart LR
- [API reference](docs/api.md)
- [Architecture](docs/architecture.md)
- [Testing](docs/testing.md)
- [Brand system](docs/brand-system.md)
- [Troubleshooting](docs/troubleshooting.md)

## Privacy And Security
Expand Down
1 change: 1 addition & 0 deletions apps/web/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<title>Local Web Video Optimizer</title>
</head>
<body>
Expand Down
13 changes: 13 additions & 0 deletions apps/web/public/favicon.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
5 changes: 5 additions & 0 deletions apps/web/src/assets/brand/mark-monochrome.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
14 changes: 14 additions & 0 deletions apps/web/src/assets/brand/mark.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
16 changes: 16 additions & 0 deletions apps/web/src/assets/brand/wordmark-dark.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
16 changes: 16 additions & 0 deletions apps/web/src/assets/brand/wordmark-light.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
21 changes: 21 additions & 0 deletions apps/web/src/components/ui/AppMark.test.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import { render, screen } from "@testing-library/react";
import { describe, expect, it } from "vitest";
import { AppMark } from "./AppMark";

describe("AppMark", () => {
it("renders the compression-frame brand mark as decorative SVG geometry", () => {
render(
<div>
<AppMark />
<span>Web Video Optimizer</span>
</div>
);

const mark = document.querySelector(".app-mark");
expect(mark).toHaveAttribute("aria-hidden", "true");
expect(screen.getByText("Web Video Optimizer")).toBeVisible();
expect(document.querySelector(".app-mark-frame")).toBeInTheDocument();
expect(document.querySelectorAll(".app-mark-band")).toHaveLength(3);
expect(document.querySelector(".app-mark-play")).toBeInTheDocument();
});
});
20 changes: 17 additions & 3 deletions apps/web/src/components/ui/AppMark.tsx
Original file line number Diff line number Diff line change
@@ -1,9 +1,23 @@
import { Clapperboard } from "lucide-react";

export function AppMark({ size = "default" }: { size?: "default" | "small" }) {
return (
<span className={`app-mark ${size === "small" ? "small" : ""}`} aria-hidden="true">
<Clapperboard size={size === "small" ? 17 : 20} strokeWidth={2.4} />
<svg className="app-mark-icon" viewBox="0 0 64 64" focusable="false" aria-hidden="true">
<defs>
<linearGradient id="app-mark-spectral" x1="10" x2="54" y1="14" y2="50" gradientUnits="userSpaceOnUse">
<stop offset="0" stopColor="#5f6fe5" />
<stop offset="0.54" stopColor="#765bc8" />
<stop offset="1" stopColor="#e66a3a" />
</linearGradient>
</defs>
<path
className="app-mark-frame"
d="M10 16.5C10 13.46 12.46 11 15.5 11h33C51.54 11 54 13.46 54 16.5v31C54 50.54 51.54 53 48.5 53h-33C12.46 53 10 50.54 10 47.5v-31Z"
/>
<path className="app-mark-band band-wide" d="M18 22h20v6H18z" />
<path className="app-mark-band band-mid" d="M18 32h15v6H18z" />
<path className="app-mark-band band-small" d="M18 42h10v5H18z" />
<path className="app-mark-play" d="M39 27.2v19.6l12-9.8-12-9.8Z" />
</svg>
</span>
);
}
Loading
Loading