| id |
title |
status |
assignee |
created_date |
updated_date |
labels |
dependencies |
references |
priority |
| TASK-140 |
IPFS integration for backups and generated files |
Done |
|
2026-04-02 22:11 |
2026-04-02 22:11 |
|
|
| server/ipfs.ts |
| server/ipfs-routes.ts |
| server/local-first/backup-store.ts |
| server/local-first/backup-routes.ts |
| server/index.ts |
|
medium |
Description
Add IPFS as a redundant storage layer via Kubo (ipfs.jeffemmett.com). Pin encrypted backups and AI-generated files (images, 3D models, zines) to IPFS fire-and-forget. Filesystem remains primary — IPFS failures are non-fatal. API routes at /api/ipfs for status, pin/unpin, and gateway proxy.
Acceptance Criteria
Final Summary
Implemented IPFS integration for rspace-online. Created server/ipfs.ts (client library) and server/ipfs-routes.ts (API routes at /api/ipfs). Modified backup-store.ts to pin encrypted backups fire-and-forget with CID stored in manifest. Added pinGeneratedFile() helper in server/index.ts called from 8 producer endpoints (3D models, fal.ai images, Gemini/Imagen images, zine pages). Each pinned file gets a .cid sidecar loaded into memory cache on startup. Kubo container is collab-server-ipfs-1 on traefik-public network. Deployed and verified on Netcup. Key deployment discovery: server uses local Gitea registry (localhost:3000/jeffemmett/rspace-online), not compose build — documented in MEMORY.md.