From 85d34f234b74226f496c545fe62a74a92b281c5e Mon Sep 17 00:00:00 2001 From: jake Date: Sat, 21 Mar 2026 11:04:06 +0000 Subject: [PATCH] =?UTF-8?q?agent:=20firstrun=20=E2=80=94=20restyle=20with?= =?UTF-8?q?=20brand=20voice,=20progressive=20disclosure?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.6 (1M context) --- src/lib/pages/FirstRunPage.svelte | 41 ++++++++++++++++++++++--------- 1 file changed, 30 insertions(+), 11 deletions(-) diff --git a/src/lib/pages/FirstRunPage.svelte b/src/lib/pages/FirstRunPage.svelte index 55aab82..6b7cccc 100644 --- a/src/lib/pages/FirstRunPage.svelte +++ b/src/lib/pages/FirstRunPage.svelte @@ -3,6 +3,7 @@ import { listen } from "@tauri-apps/api/event"; import { page, settings } from "$lib/stores/page.svelte.js"; import UnicodeSpinner from "$lib/components/UnicodeSpinner.svelte"; + import { Download, CheckCircle } from 'lucide-svelte'; let systemInfo = $state(null); let models = $state([]); @@ -12,6 +13,16 @@ let downloadingModel = $state(""); let error = $state(""); let ready = $state(false); + let downloadStartedAt = $state(0); + + /** Estimated minutes remaining based on progress so far */ + let estimatedMinutes = $derived.by(() => { + if (!downloading || downloadProgress <= 0 || !downloadStartedAt) return 0; + const elapsed = (Date.now() - downloadStartedAt) / 1000; + const total = elapsed / (downloadProgress / 100); + const remaining = total - elapsed; + return remaining / 60; + }); async function probe() { try { @@ -28,6 +39,7 @@ downloading = true; downloadingModel = modelId; downloadProgress = 0; + downloadStartedAt = Date.now(); const unlisten = await listen("model-download-progress", (event) => { downloadProgress = event.payload.percent; @@ -80,37 +92,41 @@ {#if probing}
-

Setting up Kon

-

Detecting your hardware...

+

Checking your hardware

+

One moment.

{:else if ready}
- +

Ready to go

-

Starting Kon...

+

Press the button. Start talking. That's it.

{:else if downloading}
+

Downloading model

{downloadingModel}

{downloadProgress}%

+ {#if estimatedMinutes > 2} +

Download in background — this may take a while

+ {/if}
{:else}

Welcome to Kon

-

Think out loud

+

Press the button. Start talking. That's it.

{#if error} -
{error}
+
{error}
{/if} {#if systemInfo} @@ -131,12 +147,14 @@ {#if models.length > 0}
-

Recommended models

+

Pick a model

+

One tap — we handle the rest.

{#each models as model, i}
{model.disk_size_mb} MB @@ -161,6 +179,7 @@