Zurück zum Blog
Updates

Download All, Lightbox-Navigation und ein MCP, der Attachments endlich sieht

Alle Anhänge als ZIP, Bild-Vorschau mit Thumbnail-Leiste und Swipe auf dem Handy, plus: der MCP findet Dateien jetzt wirklich. Build-in-public Update.

Spedy Team4 Min. LesezeitRead in English
Download All, Lightbox-Navigation und ein MCP, der Attachments endlich sieht
#attachments#anhänge#mcp#download#lightbox#mobile#build-in-public#dx

Vier Änderungen rund um Anhänge in einer Session: Download All, ein kompakter Upload-Bereich, eine neue Bild-Vorschau mit Thumbnail-Leiste und Swipe auf dem Handy -- plus ein Fix, damit der MCP überhaupt merkt, dass Attachments existieren. Klassischer Build-in-Public-Moment: ein Feature, drei spürbare Nebeneffekte.


Download All: ein ZIP für alle Anhänge

Wenn mehrere Anhänge an einem Ticket hängen -- Screenshots, ein PDF, ein Export-Log, eine CSV -- war die einzige Option bisher, jede Datei einzeln anzuklicken. Ab jetzt steht oben über der Anhangsliste ein Alle herunterladen-Button.

Was passiert im Hintergrund

  • Die API streamt alle nicht gelöschten Anhänge aus dem Storage und packt sie in ein ZIP.
  • Dateinamen werden dedupliziert: Zwei logs.txt im selben Ticket werden zu logs.txt und logs (1).txt.
  • Legacy-Anhänge ohne S3-Key werden übersprungen -- du siehst, wie viele Dateien im ZIP gelandet sind und wie viele ausgelassen wurden.
  • Limit: 500 MB kumuliert pro ZIP. Darüber sagt die API freundlich ab, statt zu crashen.
  • Der Endpunkt ist rate-limited (20 Bulk-Downloads pro Stunde), damit niemand versehentlich den Storage DoS-t.

Wann der Button auftaucht

Sobald mindestens zwei Anhänge im Ticket liegen. Bei einem einzigen Anhang lohnt der Umweg über ein ZIP nicht.


Upload, der Platz macht

Der alte Upload-Bereich hat immer eine große gestrichelte Zone oben auf dem Tab angezeigt -- auch wenn schon zwanzig Dateien im Ticket lagen. Jetzt verhält sich der Tab anpassungsfähiger:

  • Leeres Ticket: volle Drop-Zone mit Icon, Text und Klick-Fläche wie bisher.
  • Schon Anhänge da: die Zone schrumpft auf einen schlanken One-Liner über der Liste.
  • Drag-Target ist die Liste selbst: ziehst du eine Datei irgendwo über die Anhangsliste, zeigt sich ein Overlay mit Hinweis -- loslassen reicht, der Upload startet.

Bild-Vorschau: Lightbox, die nicht springt

Die Bildvorschau hatte bisher ein Problem: Bilder haben ihre eigene natürliche Größe mitgebracht, die Lightbox ist mitgewachsen, und beim Wechsel zwischen Hoch- und Querformat ist die gesamte UI herumgesprungen.

Was jetzt anders ist

  • Das Lightbox-Fenster ist auf 90vw × 90vh fixiert -- egal wie groß das Bild ist, die Umrandung bleibt an Ort und Stelle.
  • Das Bild selbst skaliert via object-contain ins verfügbare Feld.
  • Pfeil-Buttons links und rechts am Bild, dazu ← / → auf der Tastatur und Escape zum Schließen.
  • Thumbnail-Leiste rechts (auf Mobile unten): ein Klick auf ein Miniaturbild springt direkt dorthin. Die aktive Vorschau ist mit einem farbigen Rahmen markiert.

Mobile: Swipe statt Pfeil-Hunt

Pfeile mit dem Daumen treffen war auf kleinen Screens mühsam. Auf Mobile:

  • Die Thumbnails wandern unter das Bild und scrollen horizontal.
  • Swipe nach links/rechts auf dem Bild blättert zum nächsten/vorigen Screenshot.
  • Das Bild nutzt die volle Breite, weil die Thumbnail-Leiste nicht seitlich Platz wegfrisst.

MCP: Attachments sind jetzt sichtbar

Während wir den Download-All-Pfad gebaut haben, fiel beim Debuggen etwas auf: Der MCP konnte Anhänge laden (attachment://{attachmentId}), aber wusste nicht, dass sie existieren.

Konkret: Weder das tickets_get-Tool noch das ticket://{id}/timeline-Resource lieferten Attachment-IDs zurück. Die Timeline hatte nur Kommentare und PR-Events. Agenten, die per MCP arbeiten -- egal ob Claude Desktop, ein eigener Bot oder eine Spedy-Routine -- hatten also einen blinden Fleck für Dateien.

Was sich geändert hat

  • tickets_get liefert jetzt attachmentCount und ein attachments-Array mit id, uri, originalName, mimeType, size, uploadedBy und uploadedAt. Die uri (attachment://...) kann ein Agent direkt an das Resource weiterreichen.
  • ticket://{id}/timeline enthält jetzt ein attachment_uploaded-Event pro Datei, inline sortiert mit Kommentaren und User-Events. Wer fragt "Was ist hier in den letzten Tagen passiert?", sieht Uploads am richtigen Zeitpunkt.
  • Berechtigungen bleiben unverändert: Access-Check läuft weiter über den Board-Level, Soft-Deletes werden respektiert.

Wer einen Agenten auf Spedy loslässt ("Fass das Ticket zusammen und schau dir die angehängten Logs an"), braucht ab jetzt keinen Extra-Call mehr, um Attachments zu finden.


Build in Public: warum das alles zusammen?

Klassische Release-Notes trennen "Feature X" und "Bugfix Y" sauber. In der Praxis hängen die aber oft zusammen: Beim Bauen eines Features fällt auf, dass die Vorschau ein Layout-Bug hat. Beim Feedback-Durchgang kommt ein Mobile-Problem dazu. Beim Debuggen entdeckst du, dass der MCP auf einem anderen Layer dasselbe Problem hat.

Wir haben uns entschieden, das abzubilden -- ein Feature, plus das was wir unterwegs mitgenommen haben. Statt "Download All geshippt" und drei Wochen später "MCP-Fix geshippt" bekommst du das wie. Build in public heißt für uns: Keine polierte Inszenierung, sondern die Arbeit wie sie entsteht.


Nächste Schritte

  • Download-Progress für Einzeldateien: Der Bulk-Download zeigt einen klaren Start-/Ende-Zustand. Für große Einzelanhänge fehlt aber noch ein Fortschrittsbalken.
  • Preview für mehr Dateitypen: Aktuell werden Bilder direkt im Lightbox angezeigt. PDF- und Office-Previews sind auf der Liste.
  • Pinch-Zoom in der Lightbox: Swipe und Thumbnails sind da, tiefer reinzoomen in hochauflösende Screenshots steht noch aus.

Häufige Fragen

Die wichtigsten Fragen rund um dieses Thema — kurz beantwortet.

Wo finde ich den Download-All-Button?
Im Attachments-Tab eines Tickets, direkt über der Liste -- sobald mindestens zwei Anhänge hochgeladen sind. Der Button heißt Alle herunterladen, packt alle Dateien in ein ZIP und lädt es herunter.
Gibt es ein Limit für die ZIP-Größe?
Ja. Die Gesamtgröße aller Anhänge eines Tickets ist auf 500 MB begrenzt, damit die API-Instanz nicht in den Swap geht. Einzelne Dateien dürfen weiterhin bis zu 50 MB groß sein.
Wie navigiere ich zwischen Bildern in der Vorschau?
Links/Rechts-Pfeile, die Pfeiltasten auf der Tastatur, ein Klick auf die Thumbnail-Leiste rechts -- oder auf dem Handy ein Swipe nach links/rechts auf dem Bild. Das Lightbox-Layout bleibt dabei stabil, auch wenn die Bilder unterschiedlich groß sind.
Was war der Bug beim MCP und Attachments?
Der MCP konnte Anhänge zwar über attachment://{id} laden, aber weder tickets_get noch das Timeline-Resource lieferten IDs zurück. Agenten wussten also gar nicht, dass es Dateien gibt. Beide Endpunkte liefern die IDs jetzt mit.
Was heißt 'build in public' bei Spedy?
Wir schreiben zu jedem spürbaren Release einen kurzen Devlog-Eintrag. Keine Marketing-Releases, sondern was wir diese Woche tatsächlich gebaut und warum. Du liest gerade einen davon.
Download All, Lightbox-Navigation und ein MCP, der Attachments endlich sieht – Spedy Blog | Spedy