authorgravatar for me@t3.ggTheo Browne <me@t3.gg> 2026-02-19 01:42:56-08:00
committergravatar for me@t3.ggTheo Browne <me@t3.gg> 2026-02-19 01:42:56-08:00
logdaf8e5f53b80dd51913a058cf7012153e5e9cd09
tree938675500b2674c7bb215e50a6d1be4451d8291d
parentc89798ecb12d0cbda6c69edb3b8675636c93f271
signature Commit is signed but in an unrecognized format.

dev build iconography


15 files changed, 24 insertions(+), 10 deletions(-)

apps/desktop/package.json+1-1
...@@ -2,7 +2,7 @@...@@ -2,7 +2,7 @@
2 "name": "@t3tools/desktop",2 "name": "@t3tools/desktop",
3 "version": "0.0.0",3 "version": "0.0.0",
4 "private": true,4 "private": true,
5 "productName": "T3 Code",5 "productName": "T3 Code (Alpha)",
6 "main": "dist-electron/main.js",6 "main": "dist-electron/main.js",
7 "scripts": {7 "scripts": {
8 "dev": "bun run --parallel dev:bundle dev:electron",8 "dev": "bun run --parallel dev:bundle dev:electron",
apps/desktop/resources/icon.icns
Binary files a/apps/desktop/resources/icon.icns and b/apps/desktop/resources/icon.icns differ
apps/desktop/resources/icon.ico
Binary files a/apps/desktop/resources/icon.ico and b/apps/desktop/resources/icon.ico differ
apps/desktop/resources/icon.png
Binary files a/apps/desktop/resources/icon.png and b/apps/desktop/resources/icon.png differ
apps/desktop/scripts/electron-launcher.mjs+3-2
...@@ -1,4 +1,4 @@...@@ -1,4 +1,4 @@
1// This file mostly exists because we want dev mode to say "T3 Code" instead of "electron"1// This file mostly exists because we want dev mode to say "T3 Code (Dev)" instead of "electron"
22
3import { spawnSync } from "node:child_process";3import { spawnSync } from "node:child_process";
4import {4import {
...@@ -16,7 +16,8 @@ import { createRequire } from "node:module";...@@ -16,7 +16,8 @@ import { createRequire } from "node:module";
16import { dirname, join, resolve } from "node:path";16import { dirname, join, resolve } from "node:path";
17import { fileURLToPath } from "node:url";17import { fileURLToPath } from "node:url";
1818
19const APP_DISPLAY_NAME = "T3 Code";19const isDevelopment = Boolean(process.env.VITE_DEV_SERVER_URL);
20const APP_DISPLAY_NAME = isDevelopment ? "T3 Code (Dev)" : "T3 Code (Alpha)";
20const APP_BUNDLE_ID = "com.t3tools.t3code";21const APP_BUNDLE_ID = "com.t3tools.t3code";
21const LAUNCHER_VERSION = 1;22const LAUNCHER_VERSION = 1;
2223
apps/desktop/src/main.ts+1-1
...@@ -21,7 +21,7 @@ const BACKEND_ENTRY = path.join(ROOT_DIR, "apps/server/dist/index.mjs");...@@ -21,7 +21,7 @@ const BACKEND_ENTRY = path.join(ROOT_DIR, "apps/server/dist/index.mjs");
21const WEB_ENTRY = path.join(ROOT_DIR, "apps/web/dist/index.html");21const WEB_ENTRY = path.join(ROOT_DIR, "apps/web/dist/index.html");
22const STATE_DIR = path.join(os.homedir(), ".t3", "userdata");22const STATE_DIR = path.join(os.homedir(), ".t3", "userdata");
23const isDevelopment = Boolean(process.env.VITE_DEV_SERVER_URL);23const isDevelopment = Boolean(process.env.VITE_DEV_SERVER_URL);
24const APP_DISPLAY_NAME = "T3 Code";24const APP_DISPLAY_NAME = isDevelopment ? "T3 Code (Dev)" : "T3 Code (Alpha)";
25const APP_USER_MODEL_ID = "com.t3tools.t3code";25const APP_USER_MODEL_ID = "com.t3tools.t3code";
2626
27let mainWindow: BrowserWindow | null = null;27let mainWindow: BrowserWindow | null = null;
apps/web/index.html+1-2
...@@ -4,7 +4,6 @@...@@ -4,7 +4,6 @@
4 <meta charset="UTF-8" />4 <meta charset="UTF-8" />
5 <meta name="viewport" content="width=device-width, initial-scale=1.0" />5 <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6 <link rel="icon" href="/favicon.ico" sizes="48x48" />6 <link rel="icon" href="/favicon.ico" sizes="48x48" />
7 <link rel="icon" href="/favicon.svg" type="image/svg+xml" />
8 <link rel="apple-touch-icon" href="/apple-touch-icon.png" />7 <link rel="apple-touch-icon" href="/apple-touch-icon.png" />
9 <link rel="preconnect" href="https://fonts.googleapis.com" />8 <link rel="preconnect" href="https://fonts.googleapis.com" />
10 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />9 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
...@@ -12,7 +11,7 @@...@@ -12,7 +11,7 @@
12 href="https://fonts.googleapis.com/css2?family=DM+Sans:ital,opsz,wght@0,9..40,300..800;1,9..40,300..800&display=swap"11 href="https://fonts.googleapis.com/css2?family=DM+Sans:ital,opsz,wght@0,9..40,300..800;1,9..40,300..800&display=swap"
13 rel="stylesheet"12 rel="stylesheet"
14 />13 />
15 <title>T3 Code</title>14 <title>T3 Code (Alpha)</title>
16 </head>15 </head>
17 <body>16 <body>
18 <div id="root"></div>17 <div id="root"></div>
apps/web/public/apple-touch-icon.png
Binary files a/apps/web/public/apple-touch-icon.png and b/apps/web/public/apple-touch-icon.png differ
apps/web/public/favicon-16x16.png
Binary files a/apps/web/public/favicon-16x16.png and b/apps/web/public/favicon-16x16.png differ
apps/web/public/favicon-32x32.png
Binary files a/apps/web/public/favicon-32x32.png and b/apps/web/public/favicon-32x32.png differ
apps/web/public/favicon.ico
Binary files a/apps/web/public/favicon.ico and b/apps/web/public/favicon.ico differ
apps/web/src/branding.ts created+3
...@@ -0,0 +1,3 @@
1export const APP_BASE_NAME = "T3 Code";
2export const APP_STAGE_LABEL = import.meta.env.DEV ? "Dev" : "Alpha";
3export const APP_DISPLAY_NAME = `${APP_BASE_NAME} (${APP_STAGE_LABEL})`;
apps/web/src/components/Sidebar.tsx+9-3
...@@ -4,6 +4,7 @@ import type { ResolvedKeybindingsConfig } from "@t3tools/contracts";...@@ -4,6 +4,7 @@ import type { ResolvedKeybindingsConfig } from "@t3tools/contracts";
4import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";4import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
5import { useNavigate, useParams } from "@tanstack/react-router";5import { useNavigate, useParams } from "@tanstack/react-router";
6import { isElectron } from "../env";6import { isElectron } from "../env";
7import { APP_STAGE_LABEL } from "../branding";
7import { useTheme } from "../hooks/useTheme";8import { useTheme } from "../hooks/useTheme";
8import { DEFAULT_MODEL } from "../model-logic";9import { DEFAULT_MODEL } from "../model-logic";
9import { derivePendingApprovals } from "../session-logic";10import { derivePendingApprovals } from "../session-logic";
...@@ -431,9 +432,14 @@ export default function Sidebar() {...@@ -431,9 +432,14 @@ export default function Sidebar() {
431 <div432 <div
432 className={`flex items-center gap-2.5 px-4 ${isElectron ? "drag-region h-[52px] pl-[76px]" : "py-4"}`}433 className={`flex items-center gap-2.5 px-4 ${isElectron ? "drag-region h-[52px] pl-[76px]" : "py-4"}`}
433 >434 >
434 <span className="flex-1 text-sm font-semibold tracking-tight text-foreground">435 <div className="flex min-w-0 flex-1 items-center gap-2">
435 T3 <span className="font-normal text-muted-foreground">Code</span>436 <span className="truncate text-sm font-semibold tracking-tight text-foreground">
436 </span>437 T3 <span className="font-normal text-muted-foreground">Code</span>
438 </span>
439 <span className="rounded border border-border bg-secondary px-1.5 py-0.5 text-[10px] font-semibold uppercase tracking-wide text-muted-foreground">
440 {APP_STAGE_LABEL}
441 </span>
442 </div>
437 <button443 <button
438 type="button"444 type="button"
439 className="rounded-md p-1.5 text-muted-foreground/80 transition-colors duration-150 hover:bg-accent hover:text-muted-foreground"445 className="rounded-md p-1.5 text-muted-foreground/80 transition-colors duration-150 hover:bg-accent hover:text-muted-foreground"
apps/web/src/main.tsx+2
...@@ -9,12 +9,14 @@ import "@xterm/xterm/css/xterm.css";...@@ -9,12 +9,14 @@ import "@xterm/xterm/css/xterm.css";
9import "highlight.js/styles/github-dark.css";9import "highlight.js/styles/github-dark.css";
10import "./index.css";10import "./index.css";
1111
12import { APP_DISPLAY_NAME } from "./branding";
12import { isElectron } from "./env";13import { isElectron } from "./env";
13import { routeTree } from "./routeTree.gen";14import { routeTree } from "./routeTree.gen";
1415
15const history = isElectron ? createHashHistory() : createBrowserHistory();16const history = isElectron ? createHashHistory() : createBrowserHistory();
1617
17const queryClient = new QueryClient();18const queryClient = new QueryClient();
19document.title = APP_DISPLAY_NAME;
1820
19const router = createRouter({21const router = createRouter({
20 routeTree,22 routeTree,
apps/web/src/routes/__root.tsx+4-1
...@@ -9,6 +9,7 @@ import { invalidateGitQueries } from "../lib/gitReactQuery";...@@ -9,6 +9,7 @@ import { invalidateGitQueries } from "../lib/gitReactQuery";
9import { DEFAULT_MODEL } from "../model-logic";9import { DEFAULT_MODEL } from "../model-logic";
10import { useStore } from "../store";10import { useStore } from "../store";
11import { onServerWelcome } from "../wsNativeApi";11import { onServerWelcome } from "../wsNativeApi";
12import { APP_DISPLAY_NAME } from "../branding";
1213
13export const Route = createRootRouteWithContext<{14export const Route = createRootRouteWithContext<{
14 queryClient: QueryClient;15 queryClient: QueryClient;
...@@ -23,7 +24,9 @@ function RootRouteView() {...@@ -23,7 +24,9 @@ function RootRouteView() {
23 return (24 return (
24 <div className="flex h-screen flex-col bg-background text-foreground">25 <div className="flex h-screen flex-col bg-background text-foreground">
25 <div className="flex flex-1 items-center justify-center">26 <div className="flex flex-1 items-center justify-center">
26 <p className="text-sm text-muted-foreground">Connecting to T3 Code server...</p>27 <p className="text-sm text-muted-foreground">
28 Connecting to {APP_DISPLAY_NAME} server...
29 </p>
27 </div>30 </div>
28 </div>31 </div>
29 );32 );