AddThisFeature

File Upload

Uploads with drag-and-drop, progress, and real error handling.

moderate Forms & Input

What it adds

A file upload that shows progress, validates properly, and fails gracefully.

What your agent is told to do

4
  1. 1

    Support both drag-and-drop and a normal file picker — never drag-only, which is unusable on touch and by keyboard.

  2. 2

    Show real upload progress, and allow cancelling an in-flight upload.

  3. 3

    Validate type and size on the client for fast feedback, and AGAIN on the server. Client validation is trivially bypassed.

  4. 4

    Never trust the file's declared MIME type or extension — verify server-side.

Edge cases it handles

5
  • A file over the size limit must fail before uploading, not after.
  • A dropped connection mid-upload must report failure and allow retry.
  • Uploading a file with the same name as an existing one must not silently overwrite it.
  • Filenames must be sanitized — a filename is untrusted user input and a path traversal vector.
  • The upload must not be the only thing that saves the form.

Definition of done

7
  • Drag-and-drop and click-to-browse both work.
  • Progress is shown and uploads can be cancelled.
  • Type and size are enforced server-side, not just client-side.
  • Filenames are sanitized and never used raw as paths.
  • Failures are reported with a retry path.
  • The feature matches the existing design system.
  • No existing functionality is broken.

Related features

How it works

  1. 1

    Copy the link

    Grab the Markdown instruction URL for this feature.

  2. 2

    Give it to your AI

    Paste it into Claude Code, Cursor, v0, Lovable — whatever you build with.

  3. 3

    It inspects, then implements

    Your agent reads your existing app first, then adds the feature to fit it.

Works with your stack

These instructions are written to adapt. They tell the agent to detect your framework, match your existing design system, and reuse what you already have — rather than assuming a particular stack.

Need it tighter than that? Customize the feature and tell it exactly what you're running.