The webserver serves the repo checkout directly as static files, so index.html at the repo root must be the production build (pointing at hashed /assets/*.js) rather than the dev template (/src/main.tsx), which was being served with an unrecognized application/octet-stream MIME type and blocked by the browser. - Move src/, public/, scripts/, server/, package.json, vite.config.ts, tsconfig.json, .env(.example), and the dev index.html into app/. - Add app/scripts/deploy.mjs: copies app/dist/* into the repo root after every `vite build`, cleaning up stale hashed filenames. - Wire it into `npm run build` (app/package.json). - Update run.sh to operate from app/, and .gitignore for the new layout. - Commit the current build output (index.html, assets/, manifest, sw.js, workbox-*.js, favicon.svg, icons/, LICENSE) to the repo root. - Update README with the new project layout and deployment model.
73 lines
2.0 KiB
TypeScript
73 lines
2.0 KiB
TypeScript
import { useId } from "react";
|
|
|
|
/**
|
|
* The derez.ai logo (icon + wordmark), taken from https://derez.ai/assets/images/logo.svg
|
|
*/
|
|
export function DerezLogo({ height = 26, withText = true }: { height?: number; withText?: boolean }) {
|
|
const gid = useId().replace(/:/g, "");
|
|
const width = withText ? (height * 132) / 34 : height;
|
|
return (
|
|
<svg
|
|
xmlns="http://www.w3.org/2000/svg"
|
|
width={width}
|
|
height={height}
|
|
viewBox={withText ? "0 0 132 34" : "0 0 34 34"}
|
|
role="img"
|
|
aria-label="derez.ai"
|
|
>
|
|
<defs>
|
|
<linearGradient id={`box-bg-${gid}`} x1="0" y1="0" x2="0" y2="1">
|
|
<stop offset="0%" stopColor="#003545" />
|
|
<stop offset="100%" stopColor="#00202e" />
|
|
</linearGradient>
|
|
</defs>
|
|
|
|
<rect
|
|
x="0"
|
|
y="0"
|
|
width="34"
|
|
height="34"
|
|
rx="10"
|
|
fill={`url(#box-bg-${gid})`}
|
|
stroke="#005570"
|
|
strokeWidth="1.2"
|
|
/>
|
|
<rect x="6" y="11" width="22" height="15" rx="2.5" fill="none" stroke="#00f5ff" strokeWidth="1.8" />
|
|
<path d="M17 11V7" stroke="#00f5ff" strokeWidth="1.8" strokeLinecap="round" />
|
|
<circle cx="17" cy="5.5" r="1.5" fill="#00f5ff" />
|
|
<circle cx="10" cy="15.5" r="1" fill="#00f5ff" />
|
|
<circle cx="14" cy="15.5" r="1" fill="#00f5ff" />
|
|
<path d="M10 20h14" stroke="#00f5ff" strokeWidth="1.5" strokeLinecap="round" />
|
|
|
|
{withText && (
|
|
<text
|
|
x="46"
|
|
y="23"
|
|
fill="#00f5ff"
|
|
fontFamily="'Courier New', Courier, monospace"
|
|
fontSize="17"
|
|
fontWeight="700"
|
|
letterSpacing="-0.5"
|
|
>
|
|
derez.ai
|
|
</text>
|
|
)}
|
|
</svg>
|
|
);
|
|
}
|
|
|
|
/** The logo wrapped in a link to the derez.ai homepage. */
|
|
export function DerezLogoLink({ height = 26 }: { height?: number }) {
|
|
return (
|
|
<a
|
|
className="brand-link"
|
|
href="https://derez.ai/"
|
|
target="_blank"
|
|
rel="noopener noreferrer"
|
|
title="derez.ai — AI Agent Hosting"
|
|
>
|
|
<DerezLogo height={height} />
|
|
</a>
|
|
);
|
|
}
|