From 2ed9551cf9a56449cfbf4d2e94f34775ec76c722 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marvin=20R=C3=BChe?= <471338+Marv51@users.noreply.github.com> Date: Sat, 11 Jul 2026 20:55:26 +0200 Subject: [PATCH 1/2] Add MR favicon Serif "MR" monogram on the accent-purple background, generated at SVG plus 16/32px PNG, apple-touch (180px), and legacy .ico. Wired into every page via the root links export. Co-Authored-By: Claude Fable 5 --- src/app/root.tsx | 4 ++++ src/public/apple-touch-icon.png | Bin 0 -> 6627 bytes src/public/favicon-16x16.png | Bin 0 -> 617 bytes src/public/favicon-32x32.png | Bin 0 -> 1215 bytes src/public/favicon.ico | Bin 0 -> 4414 bytes src/public/favicon.svg | 4 ++++ 6 files changed, 8 insertions(+) create mode 100644 src/public/apple-touch-icon.png create mode 100644 src/public/favicon-16x16.png create mode 100644 src/public/favicon-32x32.png create mode 100644 src/public/favicon.ico create mode 100644 src/public/favicon.svg diff --git a/src/app/root.tsx b/src/app/root.tsx index 8a01556..f3d637c 100644 --- a/src/app/root.tsx +++ b/src/app/root.tsx @@ -12,6 +12,10 @@ import type { Route } from "./+types/root"; import stylesheet from "./app.css?url"; export const links: Route.LinksFunction = () => [ + { rel: "icon", href: "/favicon.svg", type: "image/svg+xml" }, + { rel: "icon", href: "/favicon-32x32.png", type: "image/png", sizes: "32x32" }, + { rel: "icon", href: "/favicon-16x16.png", type: "image/png", sizes: "16x16" }, + { rel: "apple-touch-icon", href: "/apple-touch-icon.png", sizes: "180x180" }, { rel: "stylesheet", href: stylesheet }, ]; diff --git a/src/public/apple-touch-icon.png b/src/public/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..9ab7c68fe0b1f291db3076fabaf8af9bfa748dd8 GIT binary patch literal 6627 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 literal 0 HcmV?d00001 diff --git a/src/public/favicon-16x16.png b/src/public/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..6ade7028b12324310bf3909ac143a3aa2dad7732 GIT binary patch literal 617 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(-uuz(rC1}QWNE&K#jcG=U#F~mY} z>g2oH&4Dt<_dl<^;U=8>+0SFiRTJ*w#3yU_>=w}5ai?|m+f!HdRK$xGPAPh9|G+8e zL~Bq`+^p%F+{Cn>x}7?GV{`hm!gHEtnU~KUeObP5|M~B8?pMzHti0fG=yRE{1wKs+ zx*9rsy3IAj8=JgO`JR{2Un7vV?AX(aww7H@f{pX%Oz4`Q64y9YR{p2D^WH=C<$haO zKQA*_ka(i)&ncyId1ux;)$uPZ+`@WuX(h*APmilB6grp|XiQ*oytAWr$F1)L^Hw!f z|7AFqCY<$KIw8y0dFnd1)qA_w+wOk8!|ubUAIEBWojvuAJ$rLOJl)-#qy5m1-5-=c z{AijruPUTG;>RpO`5=iRgCmKdv!tZfvOQeTvwgWk3A0$On_c0)w{9zU%3M3>7V~CK zp+ecK5}pr#ZoT1Ja$UjyqxJ@m#lDAMJ~QM{-0}H`qIc1n>Bnz(zphvs`puU|Njv_y z>BX>&xmoh>9evAX3?-387Kl)QDS+7a#zmg($<#gPm5~Fz$(<+bd{q5Yp_Q0#9PbD(r qU#$G`IX&s&`x)_(jnj+xuAPf7Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91AfN*P1ONa40RR91AOHXW0IY^$^8f$@DM>^@R9FekS8q&}RT%%B_rCXv zf>#i3=>=oj75u}-P~?UMWv-%cnz=Rq)J>Mo zMO$ErDC8tSl&rW{kig3g4CLPTbe;q6x%cJTXv=$VXM5lC{5#L{JO9ta5K~?$sdX`( z)e2D+8211yBS!rnNInYAE(-@f9_IVrY}+?zI%6iWyY$8Fn#Mj6L7k>7F*Oev2H&~2 zb^l@VF9A?+#@H9)Q-Bf^e99}IDo+v!CWqY)F+7Rx`OGfy5TArcpPuss5BtpE#4{(; zQLAyrx86>jBw3XvCjH(d1&a?OcA6%J;tp-Kc>l9YScU+Q+LCery4nBqtPEu5<(RCj zBVhyn&fhGu`PoinxffbwW5F@ZNl$}rw^`)Gh(iZAgQFN32qF@W#OW1)b=%fs;|rUi zY1Tn`XZs!u_x+(7KKR@tD6gqhJP}vhu3&LNt^{E!48ySa8Xx@&Ek~MhqTXkk$l6ws z>wS%=tL<0N-PD1#RrgsMPK=GC_gs%Orh~G2cMZ}q=1QJ^CqMAvNZsf7{3io;qjYx6T6hZp(nKaB=x**1b7x4y%tZ^a ztaQ1gOShI|*iSw1Oa9;doUR2HvtKX#V&UTekapyH5WTHa!%qB~$Gn)gARQ|zi*U~O zBXw@pVzcWgC|`+9wbjaYK#WjV(?!J-p%$SNUcki732EyP3u(j7M{((gPJ{+WV%z^C zO}(WBY?f6UiZRzY&tz2{2SC#`*mN5v$8QM`?aGj3tzVv2{A>hm-NSnhDl=NVPuD#U zMz>E)i331$JwIn^;j}fJRi=Lqg~a0gS@E+HV#{_k{)Fa(jmnf3^Ol#kDV_)gfKI~7 zXEuUPy2ATcVa?-ST)X5)aNve)Ky$AGlluk6=9^$<4isurD`euBJOwu{r({>|Cxmr}Gk`o}dd_soxQv1;cqt&%6r>=w4EcWmAd-fZ6+Ws> zXDq3KAhIQz0_z2xTqr(`ay5X5k{g$ziNr+2)+kY=T#YtqvOrKQib=8MBd#gX()ob9 z?4me5H;HHZoWueVJ?DIfnVhOuqy%x7_hWHcjEih3Q(PG$Uto?q14gFjbdh|-!`QL+ d{Qg$c@83bU!v^$rfi3_5002ovPDHLkV1hCtI8guq literal 0 HcmV?d00001 diff --git a/src/public/favicon.ico b/src/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..8ddcdc041411509a644c3216c36aa91b617543f3 GIT binary patch literal 4414 zcmeHKTTc^F5MKX*KIk)#yqeg0OVkH1QD0ON-^8d-8Viy%kroKGfEe4VkxRW1Q6!*} z5R@jhD7IEEiUQ$Mtx_e5v?gE$~aohNbbTU@{S>io4Yjvx$RC=REt?SjO^;21DJt#4WE|tEA z=;kpN!aun#H-qP!Py$a*2Vx+W&<297(*2T?Q*uwkV^JG0=E?9|YCmGq^Oo)y>f$eGwL?cls*n18V@t+CLzhK-K^IeFK`ANr1TQ}%- z6hruD7@Dn)gz!D>Ua)3Y1IC;Vj7iSs0@)a#|GljP5RFEu7+@ZvZ9R|sVQgd^h6g{h zy?FVD=Z`XY_k;s;0_pK4-sNy8%tXfhLB?B|b(7FB4s zguSYj@n^5kWA%V4#rlN$@NT{m)G)k%SQ9#$x+p7IYYg|9KA|0WuELm8A*_2sKG)rL zy2aL^?vJ8e#|^2jnW + + MR + From 2c41a005f706a718a327eecbcc125d2a34457691 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marvin=20R=C3=BChe?= <471338+Marv51@users.noreply.github.com> Date: Sat, 11 Jul 2026 20:57:18 +0200 Subject: [PATCH 2/2] Add Claude Code launch config for dev servers Defines the Vite dev server (on a dedicated port 5273 to avoid colliding with a manually-run instance) and a production preview. Co-Authored-By: Claude Fable 5 --- .claude/launch.json | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 .claude/launch.json diff --git a/.claude/launch.json b/.claude/launch.json new file mode 100644 index 0000000..7244bf7 --- /dev/null +++ b/.claude/launch.json @@ -0,0 +1,17 @@ +{ + "version": "0.0.1", + "configurations": [ + { + "name": "dev", + "runtimeExecutable": "npm", + "runtimeArgs": ["--prefix", "src", "run", "dev", "--", "--port", "5273"], + "port": 5273 + }, + { + "name": "preview-build", + "runtimeExecutable": "npm", + "runtimeArgs": ["--prefix", "src", "start"], + "port": 3000 + } + ] +}