Every upload or saved link becomes one row with a type badge and a durable URL — the same shape whether it's an image, a file, a bookmarked link, or an invoice PDF that arrived on its own.
The image links to the committed self-contained map. After cloning or downloading the repository, open docs/architecture/architecture.html locally to search components, trace relationships, switch themes, and export the diagram.
- File and link sharing. Upload any file (≤100 MB) or save an external URL; both get a short, permanent, shareable URL. Images, files, and links are all tracked with visit counts.
- One dashboard. A single HTML page lists everything — filterable by type, sortable by column, with drag-and-drop upload, bulk print, and bulk delete.
- Invoice pipeline. An external fetcher (Hermes) posts PDFs to
/inbox; a background poller extracts text withmarkitdown, classifies and pulls structured fields (vendor, amount, dates, VAT) via Together AI, dedupes against existing invoices, and stores the result — all visible in the same dashboard under the Invoices filter. - Monthly reporting.
POST /invoices/reportemails an HTML summary of a month's invoices via Resend and marks them reported. - Request log dashboard. Every HTTP request is logged and browsable at
/logs, filterable by path and status family.
cp .env.example .env # set INSFORGE_URL/INSFORGE_API_KEY, API_KEY, etc.
docker compose up -d --buildThe app listens on port 3765 (mapped from 8000 in the container). Open http://<server>:3765/ for the dashboard.
Uploaded files live on a local Docker volume (/uploads) — that part is unchanged from a typical self-hosted setup. All structured records (resources, invoices, inbox items, request logs) live in one table (img_url_items) in the shared InsForge "Connections" project, reached over InsForge's REST API — there's no local database to run or back up. See CLAUDE.md for the full schema and every environment variable.
Full endpoint reference, request/response shapes, and curl examples: API.md.
Every write endpoint (POST/DELETE) requires an X-API-Key header matching the API_KEY env var; read endpoints (GET) are public.
Built by Fractals
