feat: production release with React SPA, file attachments, and deploy tooling
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
This commit is contained in:
96
web/assets/silo-new.svg
Normal file
96
web/assets/silo-new.svg
Normal file
@@ -0,0 +1,96 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="#cba6f7"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
version="1.1"
|
||||
id="svg2"
|
||||
sodipodi:docname="silo-new.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="defs2" />
|
||||
<sodipodi:namedview
|
||||
id="namedview2"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:zoom="32"
|
||||
inkscape:cx="5.96875"
|
||||
inkscape:cy="12.09375"
|
||||
inkscape:window-width="2560"
|
||||
inkscape:window-height="1371"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="g2" />
|
||||
<!-- Folder open icon -->
|
||||
<!-- Search magnifier -->
|
||||
<rect
|
||||
width="24"
|
||||
height="24"
|
||||
rx="3"
|
||||
fill="#313244"
|
||||
id="rect1"
|
||||
inkscape:label="rect1"
|
||||
x="0"
|
||||
y="0"
|
||||
style="stroke:none;stroke-width:0.749719;stroke-dasharray:none" />
|
||||
<path
|
||||
d="M 6.1818179,7.6363633 V 18.63072 c 0,0.969697 1.9393931,2.096551 5.8181811,2.096551 3.878787,0 5.624399,-1.126981 5.640104,-2.096551 L 17.81818,7.6363633"
|
||||
fill="#313244"
|
||||
stroke="#cba6f7"
|
||||
stroke-width="2"
|
||||
id="path1"
|
||||
sodipodi:nodetypes="csssc"
|
||||
style="fill:#45475a;fill-opacity:1;stroke-width:0.909091;stroke-dasharray:none" />
|
||||
<ellipse
|
||||
cx="11.999998"
|
||||
cy="7.6363635"
|
||||
rx="5.818182"
|
||||
ry="2.181818"
|
||||
fill="#45475a"
|
||||
stroke="#cba6f7"
|
||||
stroke-width="2"
|
||||
id="ellipse1"
|
||||
style="stroke:#cba6f7;stroke-width:0.909091;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
d="m 6.1818179,7.6363633 c 0,-7.272727 11.6363621,-7.272727 11.6363621,0"
|
||||
fill="none"
|
||||
stroke="#cba6f7"
|
||||
stroke-width="4.65698"
|
||||
stroke-linecap="round"
|
||||
id="path2"
|
||||
style="fill:#45475a;fill-opacity:1;stroke-width:0.909091;stroke-dasharray:none"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<g
|
||||
id="g2"
|
||||
transform="translate(-13.871014,1.4359614)">
|
||||
<line
|
||||
x1="30.375973"
|
||||
y1="17.251537"
|
||||
x2="33.911507"
|
||||
y2="17.251539"
|
||||
stroke="#a6e3a1"
|
||||
stroke-width="1.5"
|
||||
id="line2" />
|
||||
<line
|
||||
x1="32.143738"
|
||||
y1="15.483771"
|
||||
x2="32.143738"
|
||||
y2="19.019306"
|
||||
stroke="#a6e3a1"
|
||||
stroke-width="1.5"
|
||||
id="line2-6" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.7 KiB |
Reference in New Issue
Block a user