browse the protocol like its 2008 ibex.desertthunder.dev
ubuntu atproto svelte
7

Configure Feed

Select the types of activity you want to include in your feed.

feat: add build version to sticky note

Owais Jamil (Jun 16, 2026, 10:36 PM -0500) d3f80a32 c1dfad79

+134 -52
+5
.changeset/sunny-clubs-check.md
··· 1 + --- 2 + 'intrepid-ibex': minor 3 + --- 4 + 5 + add build version to sticky note
+83
src/lib/components/StickyNote.svelte
··· 1 + <script lang="ts"> 2 + import { version } from '$app/environment'; 3 + let { onclose }: { onclose: () => void } = $props(); 4 + const sourceUrl = 'https://tangled.org/desertthunder.dev/ibex'; 5 + </script> 6 + 7 + <aside class="sticky-note" aria-label="Design note"> 8 + <button type="button" aria-label="Close note" onclick={onclose}>x</button> 9 + <h2>Intrepid Ibex</h2> 10 + <p>This app is a recreation of the spirit of Ubuntu 8.10</p> 11 + <hr /> 12 + <p class="version-label"> 13 + <a href={sourceUrl} target="_blank" rel="noreferrer">{version}</a> 14 + </p> 15 + </aside> 16 + 17 + <style> 18 + .sticky-note { 19 + position: relative; 20 + align-self: end; 21 + width: min(18rem, 100%); 22 + margin-bottom: var(--space-8); 23 + padding: var(--space-4); 24 + transform: rotate(1.2deg); 25 + color: #3a250e; 26 + background: linear-gradient(135deg, #fff1a9, #e9bf51); 27 + border: 1px solid #946b19; 28 + border-radius: var(--radius-2); 29 + box-shadow: 30 + 0 12px 24px rgb(0 0 0 / 0.25), 31 + 0 1px 0 rgb(255 255 255 / 0.72) inset; 32 + } 33 + 34 + .sticky-note button { 35 + position: absolute; 36 + top: var(--space-1); 37 + right: var(--space-1); 38 + width: 1.25rem; 39 + height: 1.25rem; 40 + color: #6b4a12; 41 + font-weight: 700; 42 + cursor: default; 43 + } 44 + 45 + .sticky-note h2 { 46 + font-size: var(--text-4); 47 + line-height: var(--leading-tight); 48 + } 49 + 50 + .sticky-note p { 51 + margin-top: var(--space-2); 52 + font-size: var(--text-2); 53 + } 54 + 55 + .sticky-note hr { 56 + margin: var(--space-3) 0 var(--space-2); 57 + border: 0; 58 + border-top: 1px solid rgb(104 74 18 / 0.48); 59 + box-shadow: 0 1px 0 rgb(255 255 255 / 0.42); 60 + } 61 + 62 + .version-label { 63 + font-family: var(--font-mono); 64 + font-size: var(--text-1); 65 + } 66 + 67 + .version-label a { 68 + color: inherit; 69 + text-decoration: underline; 70 + text-decoration-thickness: 1px; 71 + text-underline-offset: 2px; 72 + } 73 + 74 + .version-label a:hover { 75 + color: #211205; 76 + } 77 + 78 + @media (max-width: 1000px) { 79 + .sticky-note { 80 + display: none; 81 + } 82 + } 83 + </style>
+3 -47
src/routes/+layout.svelte
··· 24 24 import NativeWindow from '$lib/components/NativeWindow.svelte'; 25 25 import NotImplementedDialog from '$lib/components/NotImplementedDialog.svelte'; 26 26 import SetupDialog from '$lib/components/SetupDialog.svelte'; 27 + import StickyNote from '$lib/components/StickyNote.svelte'; 27 28 import '$lib/styles/style.css'; 28 29 29 30 let { children } = $props(); ··· 112 113 { 113 114 label: 'Trash', 114 115 icon: '/icons/humanity/places/user-trash.svg', 115 - onactivate: () => window.open('https://tangled.org/desertthunder.dev/ibex', '_blank', 'noopener,noreferrer') 116 + onactivate: () => window.open('https://github.com/desertthunder.dev/ibex', '_blank', 'noopener,noreferrer') 116 117 } 117 118 ]); 118 119 ··· 378 379 {/if} 379 380 380 381 {#if showStickyNote} 381 - <aside class="sticky-note" aria-label="Design note"> 382 - <button type="button" aria-label="Close note" onclick={() => (showStickyNote = false)}>×</button> 383 - <h2>Intrepid Ibex</h2> 384 - <p>This app is a recreation of the spirit of Ubuntu 8.10</p> 385 - </aside> 382 + <StickyNote onclose={() => (showStickyNote = false)} /> 386 383 {/if} 387 384 </main> 388 385 ··· 492 489 height: 100%; 493 490 } 494 491 495 - .sticky-note { 496 - position: relative; 497 - align-self: end; 498 - width: min(18rem, 100%); 499 - margin-bottom: var(--space-8); 500 - padding: var(--space-4); 501 - transform: rotate(1.2deg); 502 - color: #3a250e; 503 - background: linear-gradient(135deg, #fff1a9, #e9bf51); 504 - border: 1px solid #946b19; 505 - border-radius: var(--radius-2); 506 - box-shadow: 507 - 0 12px 24px rgb(0 0 0 / 0.25), 508 - 0 1px 0 rgb(255 255 255 / 0.72) inset; 509 - } 510 - 511 - .sticky-note button { 512 - position: absolute; 513 - top: var(--space-1); 514 - right: var(--space-1); 515 - width: 1.25rem; 516 - height: 1.25rem; 517 - color: #6b4a12; 518 - font-weight: 700; 519 - cursor: default; 520 - } 521 - 522 - .sticky-note h2 { 523 - font-size: var(--text-4); 524 - line-height: var(--leading-tight); 525 - } 526 - 527 - .sticky-note p { 528 - margin-top: var(--space-2); 529 - font-size: var(--text-2); 530 - } 531 - 532 492 @media (max-width: 1000px) { 533 493 .desktop-stage { 534 494 grid-template-columns: 6.5rem minmax(0, 1fr); ··· 540 500 .identity-inspector-window { 541 501 left: auto; 542 502 right: var(--space-3); 543 - } 544 - 545 - .sticky-note { 546 - display: none; 547 503 } 548 504 } 549 505
+10 -4
src/routes/docs/CHANGELOG.md
··· 1 1 # Changelog 2 2 3 - ## 1.1.0 3 + ## 1.1.0 - 2026-06-16 4 4 5 5 ### Minor Changes 6 6 7 - - added an identity inspector to inspect atproto identity 7 + - Added Changesets release tracking and contributor documentation. 8 + - Added an Identity Inspector for ATProto identity material, handle validation, services, 9 + verification methods, and PLC rotation keys. 10 + - Added canonical `/repos/:did/identity` routing and desktop/Nautilus launchers for the 11 + Identity Inspector. 12 + - Added a build version label in the sticky note linked to the project source. 13 + - Marked the current app release as `v1.1.0`. 8 14 9 - ## [Unreleased] 15 + --- 10 16 11 - Target release: `v1.0.0`. 17 + ## 1.0.0 12 18 13 19 ### 2026-06-09 14 20
+33 -1
svelte.config.js
··· 1 1 import adapter from '@sveltejs/adapter-static'; 2 + import * as proc from 'node:child_process'; 3 + import * as fs from 'node:fs'; 2 4 import { mdsvex } from 'mdsvex'; 3 5 6 + const packageJson = JSON.parse(fs.readFileSync(new URL('./package.json', import.meta.url), 'utf8')); 7 + const buildVersion = buildVersionLabel(packageJson.version); 8 + 9 + function getVersion(v) { 10 + const verify = gitOutput(['rev-parse', '--verify', v]); 11 + if (verify === null) return v; 12 + return gitOutput(['describe', '--tags', '--abbrev=0', '--match', 'v[0-9]*']); 13 + } 14 + 15 + function buildVersionLabel(version) { 16 + const versionTag = `v${version}`; 17 + const tag = getVersion(versionTag); 18 + const count = gitOutput(tag ? ['rev-list', '--count', `${tag}..HEAD`] : ['rev-list', '--count', 'HEAD']) ?? '0'; 19 + 20 + if (count === '0') { 21 + return `v${version}`; 22 + } 23 + 24 + const commit = gitOutput(['rev-parse', '--short', 'HEAD']) ?? 'unknown'; 25 + return `v${version}-${count}+g${commit}`; 26 + } 27 + 28 + function gitOutput(args) { 29 + try { 30 + return proc.execFileSync('git', args, { encoding: 'utf8', stdio: ['ignore', 'pipe', 'ignore'] }).trim(); 31 + } catch { 32 + return null; 33 + } 34 + } 35 + 4 36 /** @type {import('@sveltejs/kit').Config} */ 5 37 const config = { 6 38 extensions: ['.svelte', '.svx', '.md'], 7 39 preprocess: [mdsvex({ extensions: ['.svx', '.md'] })], 8 40 compilerOptions: { runes: ({ filename }) => (filename.split(/[/\\]/).includes('node_modules') ? undefined : true) }, 9 - kit: { adapter: adapter({ fallback: 'index.html' }) } 41 + kit: { adapter: adapter({ fallback: 'index.html' }), version: { name: buildVersion } } 10 42 }; 11 43 12 44 export default config;