brand: an icon, ~/ and a block cursor

The app was a ring and a dot, drawn in CSS in the bar and inlined as a data
URL for the favicon. It now has an icon of its own: the `~/` of the prompt it
is named after, with the cursor waiting beside it in the alarm colour of the
theme. It is the favicon, a full-bleed touch icon for a phone's home screen,
and the mark in the bar, on the login and on the share page, served from
`web/public` so all of them are the same file.

The banner and a 512 px copy in docs/images are for the README and the wiki.
The crate description says what the workspace is now, not the diary it was.
This commit is contained in:
nvrl committed 2026-10-21 12:07:32 +02:00
1 parent 909abf5fcb
commit 7b2fd5579c
10 files changed
+26 -33

No files matched your search

+1 -1
View File
@@ -4,7 +4,7 @@ version = "0.1.0"
edition = "2021" edition = "2021"
# The Proton crates set the floor. # The Proton crates set the floor.
rust-version = "1.96" rust-version = "1.96"
description = "A terminal-themed personal diary for the browser" description = "A private, terminal-themed workspace for the browser: diary, notes, boards and files"
[dependencies] [dependencies]
axum = { version = "0.8", features = ["multipart", "macros"] } axum = { version = "0.8", features = ["multipart", "macros"] }
Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

+2 -1
View File
@@ -6,7 +6,8 @@
<meta name="color-scheme" content="dark" /> <meta name="color-scheme" content="dark" />
<meta name="theme-color" content="#0c0d0b" /> <meta name="theme-color" content="#0c0d0b" />
<title>~/workspace</title> <title>~/workspace</title>
<link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64'%3E%3Crect width='64' height='64' rx='14' fill='%230c0d0b'/%3E%3Ccircle cx='32' cy='32' r='15' fill='none' stroke='%23eef1ea' stroke-width='3'/%3E%3Ccircle cx='32' cy='32' r='7' fill='%23eef1ea'/%3E%3C/svg%3E" /> <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<link rel="apple-touch-icon" href="/apple-touch-icon.png" />
</head> </head>
<body> <body>
<div id="app"></div> <div id="app"></div>
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

+14
View File
@@ -0,0 +1,14 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
<!-- ~/ and a block cursor: the prompt the app is named after. -->
<defs>
<linearGradient id="hull" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#181b17"/>
<stop offset="1" stop-color="#0c0d0b"/>
</linearGradient>
</defs>
<rect width="512" height="512" rx="112" fill="url(#hull)"/>
<rect x="22" y="22" width="468" height="468" rx="92" fill="none" stroke="#2a2f28" stroke-width="8"/>
<path d="M64 282 C86 226 128 220 158 254 C188 288 228 282 250 226" fill="none" stroke="#eef1ea" stroke-width="40" stroke-linecap="round"/>
<path d="M332 136 L274 376" fill="none" stroke="#eef1ea" stroke-width="40" stroke-linecap="round"/>
<rect x="360" y="150" width="88" height="212" rx="12" fill="#c8684f"/>
</svg>

After

Width:  |  Height:  |  Size: 812 B

+4 -12
View File
@@ -330,20 +330,12 @@ input::placeholder { color: var(--muted); }
} }
/* A ring with a dot in it: the favicon, and the desktop's launcher. */ /* A ring with a dot in it: the favicon, and the desktop's launcher. */
/* The app icon, ~/ and a block cursor, as on the login and the favicon. */
.bar .mark { .bar .mark {
position: relative; display: block;
width: 12px; width: 18px;
height: 12px; height: 18px;
flex: none; flex: none;
border: 1.5px solid var(--light);
border-radius: 999px;
}
.bar .mark::after {
content: '';
position: absolute;
inset: 2px;
border-radius: 999px;
background: var(--light);
} }
.bar .divider { .bar .divider {
+1 -1
View File
@@ -17,7 +17,7 @@
</script> </script>
<header class="bar"> <header class="bar">
<span class="mark" aria-hidden="true"></span> <img class="mark" src="/favicon.svg" alt="" width="18" height="18" />
<span class="divider"></span> <span class="divider"></span>
<nav class="spaces" aria-label="spaces"> <nav class="spaces" aria-label="spaces">
+3 -17
View File
@@ -37,7 +37,7 @@
<main> <main>
<form class="resolve" onsubmit={submit}> <form class="resolve" onsubmit={submit}>
<div class="brand"> <div class="brand">
<span class="mark" aria-hidden="true"></span> <img class="mark" src="/favicon.svg" alt="" width="34" height="34" />
<h1 class="display">workspace</h1> <h1 class="display">workspace</h1>
</div> </div>
@@ -95,22 +95,8 @@
.brand { display: flex; align-items: center; gap: 14px; } .brand { display: flex; align-items: center; gap: 14px; }
h1 { margin: 0; font-size: 26px; text-shadow: 0 2px 24px var(--ink); } h1 { margin: 0; font-size: 26px; text-shadow: 0 2px 24px var(--ink); }
/* The ring-and-dot mark, larger than in the bar. */ /* The app icon: ~/ and a block cursor. */
.mark { .mark { flex: none; display: block; }
position: relative;
width: 18px;
height: 18px;
flex: none;
border: 2px solid var(--light);
border-radius: 999px;
}
.mark::after {
content: '';
position: absolute;
inset: 3px;
border-radius: 999px;
background: var(--light);
}
p { margin: 0 0 4px; font-size: 10px; } p { margin: 0 0 4px; font-size: 10px; }
+1 -1
View File
@@ -78,7 +78,7 @@
<div class="shell shared"> <div class="shell shared">
<header class="bar"> <header class="bar">
<span class="mark" aria-hidden="true"></span> <img class="mark" src="/favicon.svg" alt="" width="18" height="18" />
<span class="divider"></span> <span class="divider"></span>
<span class="pill" aria-current="true">shared</span> <span class="pill" aria-current="true">shared</span>
<span class="divider"></span> <span class="divider"></span>