All work

FilerMan

Self-hosted file-sharing platform

Share a file with an expiry, a recipient list or an encryption key.

A self-hosted application for sharing files and controlling access.

FilerMan file-sharing homepage with upload and access controls
The public-facing homepage served from the local project.
Project overview

What it is.

Who it’s for

People sharing files with specific recipients, and operators who want control over the storage behind those shares.

FilerMan is a self-hosted file-sharing application. Users upload files and decide how the resulting share can be opened: through an expiring link, by named recipients or with optional browser encryption. We built the sharing flow together with storage management, account administration and background cleanup, so the operator can manage the files after the upload as well as receive them.

  • File uploads with expiring share links
  • Verified recipient restrictions and optional browser encryption
  • One-time downloads with confirmation before deletion
  • Local disk, private R2 and S3 storage options
  • Invitations, quotas, storage administration and cleanup jobs
Next.jsPostgreSQLCloudflare R2Amazon S3

What it does.

Choose who can open a share.

A share can expire at a chosen time or require access through a verified recipient account. The owner can manage the share without making every file public. Account invitations, quotas and suspension controls give the operator a way to manage who is allowed to upload and use the service.

Encryption happens before upload.

With optional browser encryption, the browser encrypts the file and keeps the decryption key in the share link’s fragment. The server stores the encrypted file rather than its readable contents. The original link matters: the operator cannot recreate a lost decryption key for the recipient.

One-time does not mean one attempt.

A one-time download first reserves the file. Deletion follows confirmation that the recipient saved it successfully. A failed decryption or ZIP creation does not immediately consume the file, and interrupted reservations can be retried. Expiry still applies, so recovery does not silently turn the share into permanent access.

Storage is part of the product.

Uploads can use local disk, private Cloudflare R2 or Amazon S3. Operators manage routing, migration and replication through storage controls, with workers handling retries and cleanup. Changing the destination for new uploads preserves access to existing files. Operational views surface delayed work and storage problems that need attention.

How it works.

  1. Upload and set access

    Choose the files, expiry and recipient rules, and decide whether to encrypt them in the browser.

  2. Share and receive

    Send the resulting link. The recipient passes the access checks and downloads or decrypts the files.

  3. Manage what remains

    Review shares and storage usage while expiry, confirmed one-time downloads and background cleanup handle removal.

Next projectComplexity
That idea you keep coming back to?

Let’s build it.

A website, an app, or something a little harder to explain.
Tell us what you have in mind. We’ll take it from there.

Tell us about your project