fix: tfcode web fails after npm install — copy app dist in postinstall

The web command crashed because postinstall scripts never copied the
app/dist directory from the platform package. Added copyAppDir() to
both postinstall scripts, multi-path resolution in findAppDir() and
server static serving, and updated branding to use local favicon.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Gab
2026-04-15 13:57:44 +10:00
parent c3e504f036
commit 3639218879
15 changed files with 251 additions and 175 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

@@ -1,4 +1,13 @@
[data-component="logo-mark"] {
width: 16px;
aspect-ratio: 4/5;
aspect-ratio: 137/120;
object-fit: contain;
}
[data-component="logo-splash"] {
object-fit: contain;
}
[data-component="logo-full"] {
object-fit: contain;
}

View File

@@ -1,60 +1,39 @@
import { ComponentProps } from "solid-js"
import tfIcon from "../assets/favicon.png"
export const Mark = (props: { class?: string }) => {
return (
<svg
<img
data-component="logo-mark"
classList={{ [props.class ?? ""]: !!props.class }}
viewBox="0 0 16 20"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path data-slot="logo-logo-mark-shadow" d="M12 16H4V8H12V16Z" fill="var(--icon-weak-base)" />
<path data-slot="logo-logo-mark-o" d="M12 4H4V16H12V4ZM16 20H0V0H16V20Z" fill="var(--icon-strong-base)" />
</svg>
src={tfIcon}
alt="ToothFairyAI"
draggable={false}
/>
)
}
export const Splash = (props: Pick<ComponentProps<"svg">, "ref" | "class">) => {
export const Splash = (props: Pick<ComponentProps<"img">, "ref" | "class">) => {
return (
<svg
<img
ref={props.ref}
data-component="logo-splash"
classList={{ [props.class ?? ""]: !!props.class }}
viewBox="0 0 80 100"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path d="M60 80H20V40H60V80Z" fill="var(--icon-base)" />
<path d="M60 20H20V80H60V20ZM80 100H0V0H80V100Z" fill="var(--icon-strong-base)" />
</svg>
src={tfIcon}
alt="ToothFairyAI"
draggable={false}
/>
)
}
export const Logo = (props: { class?: string }) => {
return (
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 180 42"
fill="none"
<img
data-component="logo-full"
classList={{ [props.class ?? ""]: !!props.class }}
>
<g>
<path d="M18 30H6V18H18V30Z" fill="var(--icon-weak-base)" />
<path d="M18 12H6V30H18V12ZM24 36H0V6H24V36Z" fill="var(--icon-base)" />
<path d="M48 30H36V18H48V30Z" fill="var(--icon-weak-base)" />
<path d="M36 30H48V12H36V30ZM54 36H36V42H30V6H54V36Z" fill="var(--icon-base)" />
<text
x="66"
y="32"
font-size="28"
font-weight="600"
fill="var(--icon-strong-base)"
font-family="var(--font-family-sans)"
>
Code
</text>
</g>
</svg>
src={tfIcon}
alt="ToothFairyAI"
draggable={false}
/>
)
}