Story

Sorry - We Over-Engineered the UI and It Crashed Into Your Face

5 min read 194 views

We rewrote the interface. Not because it looked dated. Because it was actively hostile to anyone who hadn’t already used Perkoon ten times. If you tried Perkoon in the last few months and bounced - that was on us, not you. This is the apology, the autopsy, and what we did about it.

The old Perkoon sender screen showing two send buttons - 'Direct FREE Transfer' and 'Upload to Session' - separated by the word 'OR', with three queued files in the panel beside them.
The old sender view, with files queued. Two buttons fighting to be the primary action - “Direct FREE Transfer” (P2P, free, needs the receiver online) and “Upload to Session” (paid cloud, async). Equally weighted in the layout, separated only by the word OR. Reading top-to-bottom there was no signal which one was the right starting point.

What we shipped

A new sender view. A new receiver view. A leaner drop zone. Fewer modals interrupting you mid-task. The cloud upgrade prompt now shows up at the moment it’s actually useful - when you’re about to leave the page and the transfer isn’t done - instead of the moment you walk in the door. Less stuff in the way. More of the thing you came here to do.

If you’ve been using Perkoon a while, the muscle memory still works. The session code is still six characters. The drop zone is still the drop zone. We didn’t move your cheese. We just stopped putting cardboard in front of it.

What we did wrong

The honest version: we kept stacking features on top of each other and never went back to ask whether the foundation could carry the weight. WebRTC connection states. OPFS save flows. Chromium-specific quirks. Compatibility banners. Retry toasts. Save-method modals. Each one solved a real problem. Together they formed a wall.

The old empty drop zone surrounded by a header strip with LIVE/STORAGE/TIME pills, PRESS/SAVE chips, a session code, a Transfer Actions panel, and a Participants panel - all visible before any file is added.
The empty state. Before you’d done anything: a status strip (LIVE / STORAGE / TIME), header chips (PRESS / SAVE), a session code, a 00:00 “WAITING” countdown, an “Instant Share” upsell, an “Enable Upload” CTA, a Transfer Actions panel with two buttons, and a Participants panel - all surrounding a small cloud icon that was the actual drop zone.

A first-time visitor would land on the page, drop a file, and immediately get hit with three things they didn’t ask about. Browser capability warnings. Save method choices. Compatibility flow managers. Stuff that exists for a reason - but not at second one of someone’s first transfer. We were optimizing for the rare edge case at the cost of the common path. That’s the definition of over-engineering: solving problems your user doesn’t have yet in a way that prevents them from getting to the problem they actually came with.

A mobile screen with two stacked modals: a Storage Plans modal underneath and an Access List modal on top, both blocking the underlying transfer screen.
Mobile, mid-task. Two modals at once - a Storage Plans pricing modal underneath, an Access List modal on top - because the old code didn’t enforce a one-modal-at-a-time rule. This is what “three modals between you and the file” looked like in practice.

You don’t put a fire extinguisher in front of the door. We had several.

To the people who stayed anyway

A lot of you tried Perkoon, ran into the wall, and left. We don’t blame you. We blame us.

To the dozens of you who stayed anyway - who figured out the maze, who wrote in to say the modals were confusing but the underlying thing worked, who kept using it because the P2P architecture was genuinely doing something nobody else was doing - thank you. You were patient with software that didn’t deserve your patience. You shouldn’t have had to be.

We’re sorry. The interface was getting in the way of the thing the interface was supposed to expose.

What we kept

The foundation didn’t change. P2P over WebRTC is still the default for direct one-to-one transfers - files travel browser to browser, nothing stored on our end, no size limit. The cloud tier still exists for one-to-many and real async delivery. The session model is still “leave a tab open, share a code, the receiver joins within a few hours.” That’s the part that works. We didn’t touch it.

What changed is everything sitting between you and that foundation. We pulled out the intermediaries. The compatibility manager that interrupted you to explain a problem you didn’t have yet. The save banner that asked permission for a thing that should just happen. The viral celebration hook nobody wanted. Gone. The code is in the git history if anyone wants to know what it looked like.

An 'Access List' modal with an email input, an 'Add' button, and a 'No emails in access list' empty state, mounted on top of the transfer screen.
The Access List modal. A feature for the rare case where the sender wanted to gate a session by email - mounted in front of every sender, even the ones who never needed it. In the new UI it lives in a panel you can open when you want it, not a layer dropped onto your transfer.

How we rebuilt it

The new approach is boring on purpose. One drop zone. One session code. Files appear as a list. You see what’s transferring, what’s done, what failed - in that order, in plain words, without a popover explaining what the popover means.

Perkoon’s underlying architecture is fast. P2P transfers happen at whatever speed your network can handle, which is usually faster than any cloud round-trip. The previous UI was hiding that. Six modals between you and the file did not make the file move faster - they made the experience feel slower than the bytes actually were. The new UI gets out of the way and lets the architecture do its thing.

That’s the “empowered with Perkoon tech’ part. We didn’t add new capabilities. We finally let you see the ones that were already there.

What this means going forward

We’re going to add features more carefully. The rule we’re holding ourselves to: if a feature solves a problem fewer than 1% of users hit, it doesn’t get to live in the common path. It lives behind a button, or further along the flow, or it doesn’t get shipped at all. The default experience belongs to the 99% of people who just want to send a file.

If you tried Perkoon before and it felt fiddly - try it again. perkoon.com. It’s a different thing now.

If you’ve been using it the whole time and you’re wondering whether your workflow broke - it didn’t. The session code, the drop zone, the cloud tier, the CLI, the A2A agent card - all still there, all still working the same way. We just took the cardboard down.

Thanks for sticking with us. We’re going to try to deserve it.

Topics

perkoon ui rewrite perkoon new ui p2p file transfer ux over-engineered interface product apology simplified ui perkoon redesign

Ready to try P2P file transfer?

Send unlimited files for free. No signup required.

By starting, you agree to our Terms