Backend: - Add file_handlers.go: presigned upload/download for item attachments - Add item_files.go: item file and thumbnail DB operations - Add migration 011: item_files table and thumbnail_key column - Update items/projects/relationships DB with extended field support - Update routes: React SPA serving from web/dist, file upload endpoints - Update auth handlers and middleware for cookie + bearer token auth - Remove Go HTML templates (replaced by React SPA) - Update storage client for presigned URL generation Frontend: - Add TagInput component for tag/keyword entry - Add SVG assets for Silo branding and UI icons - Update API client and types for file uploads, auth, extended fields - Update AuthContext for session-based auth flow - Update LoginPage, ProjectsPage, SchemasPage, SettingsPage - Fix tsconfig.node.json Deployment: - Update config.prod.yaml: single-binary SPA layout at /opt/silo - Update silod.service: ReadOnlyPaths for /opt/silo - Add scripts/deploy.sh: build, package, ship, migrate, start - Update docker-compose.yaml and Dockerfile - Add frontend-spec.md design document
78 lines
2.3 KiB
XML
78 lines
2.3 KiB
XML
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
<svg
|
|
viewBox="0 0 64 64"
|
|
fill="none"
|
|
version="1.1"
|
|
id="svg6"
|
|
sodipodi:docname="silo.svg"
|
|
inkscape:version="1.4.3 (0d15f75042, 2025-12-25)"
|
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
xmlns="http://www.w3.org/2000/svg"
|
|
xmlns:svg="http://www.w3.org/2000/svg">
|
|
<defs
|
|
id="defs6" />
|
|
<sodipodi:namedview
|
|
id="namedview6"
|
|
pagecolor="#ffffff"
|
|
bordercolor="#000000"
|
|
borderopacity="0.25"
|
|
inkscape:showpageshadow="2"
|
|
inkscape:pageopacity="0.0"
|
|
inkscape:pagecheckerboard="0"
|
|
inkscape:deskcolor="#d1d1d1"
|
|
inkscape:zoom="12.81631"
|
|
inkscape:cx="31.366282"
|
|
inkscape:cy="33.472973"
|
|
inkscape:window-width="2560"
|
|
inkscape:window-height="1371"
|
|
inkscape:window-x="0"
|
|
inkscape:window-y="0"
|
|
inkscape:window-maximized="1"
|
|
inkscape:current-layer="svg6" />
|
|
<!-- Silo icon - grain silo with database/sync symbolism -->
|
|
<!-- Uses Catppuccin Mocha colors -->
|
|
<!-- Silo body (cylindrical tower) -->
|
|
<rect
|
|
width="64"
|
|
height="64"
|
|
rx="8"
|
|
fill="#313244"
|
|
id="rect1"
|
|
inkscape:label="rect1"
|
|
x="0"
|
|
y="0"
|
|
style="stroke-width:2" />
|
|
<path
|
|
d="M 16,20 V 50.234483 C 16,52.901149 21.333333,56 32,56 42.666667,56 47.4671,52.9008 47.510287,50.234483 L 48,20"
|
|
fill="#313244"
|
|
stroke="#cba6f7"
|
|
stroke-width="2"
|
|
id="path1"
|
|
sodipodi:nodetypes="csssc"
|
|
style="fill:#45475a;fill-opacity:1;stroke-width:2.5;stroke-dasharray:none" />
|
|
<!-- Silo dome/roof -->
|
|
<ellipse
|
|
cx="32"
|
|
cy="20"
|
|
rx="16"
|
|
ry="6"
|
|
fill="#45475a"
|
|
stroke="#cba6f7"
|
|
stroke-width="2"
|
|
id="ellipse1"
|
|
style="stroke:#cba6f7;stroke-opacity:1;stroke-width:2.5;stroke-dasharray:none" />
|
|
<path
|
|
d="M 16,20 C 16,0 48,0 48,20"
|
|
fill="none"
|
|
stroke="#cba6f7"
|
|
stroke-width="4.65698"
|
|
stroke-linecap="round"
|
|
id="path2"
|
|
style="stroke-width:2.5;stroke-dasharray:none;fill:#45475a;fill-opacity:1"
|
|
sodipodi:nodetypes="cc" />
|
|
<!-- Horizontal bands (like database rows / silo rings) -->
|
|
<!-- Base ellipse -->
|
|
<!-- Sync arrows (circular) - represents upload/download -->
|
|
</svg>
|