Superfile's paid-access interface states: a cardholder pay card, the Access granted and Access Denied indicators, a Pay-to-unlock action, a confirm-payment card priced at $25.00 for a named recipient, and a masked card-number field with a Visa mark.

Superfile

Role
Founding Product Designer
Industry
Cybersecurity · Fintech · B2C
Team
CEO, CTO, PM · 7 engineers
Timeline
2024 – 2025

Project overview

Designing secure monetization for a zero-trust file platform.

Directors, artists, and content creators needed to deliver valuable files without losing control of them the moment someone received access. Buyers expected the opposite: after paying, the file should open immediately. As founding product designer at Superfile, a venture-backed cybersecurity startup building files that stay under their creator's control after they're shared, I designed the system between those two expectations: an experience that felt instant to the buyer while preserving the owner's ability to monitor, limit, and revoke access, across macOS and web.

Key metrics

$14M+
Raised during Superfile's 0→1 period; investors operated the working flow themselves
01Impact metrics
0 → 1
First working pay-to-unlock flow, shipped end to end
02Impact metrics
1 flow
One Stripe + entitlement model across macOS and web
03Impact metrics

Instant for the buyer. Reversible for the owner.

A payment moved the recipient directly into the protected viewer while the file owner retained the ability to monitor, limit, and revoke access.

  1. Step 1No accessEntitlement state
  2. Step 2Access requestedRecipient
  3. Step 3Payment initiatedRecipient
  4. Step 4Payment confirmedStripe → server
  5. Step 5Recipient & file matchedSuperfile verification
  6. Step 6Access grantedEntitlement state
  7. Step 7Protected viewer opensFile-delivery service

From the granted state

Access is a verified entitlement, not a one-time unlock — so it can still change.
  • Owner revokes accessThe owner can invalidate a paid entitlement; a refund is required to do so.
  • Access expiresA time-limited entitlement ends at the owner-set duration; access simply stops.
  • Payment is refundedA refund or chargeback automatically revokes the entitlement.
  • Sharing is attemptedA shared link lands on a gated page; it never transfers the entitlement.
The entitlement lifecycle: payment establishes an entitlement, the entitlement determines access, and only a verified transition opens the protected viewer — while revoke, expiry, refund, and attempted-sharing stay live, owner-addressable states.

Selling access without surrendering control

With normal file sharing, you lose control the moment someone downloads a copy. Ownership, rights, and access are gone. For the people Superfile was built for (directors, artists, content creators, and anyone responsible for delivering a valuable file), the value isn't only in the file itself. It's in what happens afterward: who has it, how it's used, and whether it stays protected.

Superfile keeps that control. You upload a file, grant access, watch how it's used, adjust permissions, and revoke access whenever you want, all while keeping ownership. My job was to let people charge for access to those files without weakening any of that, and without making the buyer wait to open what they'd just paid for.

Two sides of the same file

The file owner

Delivers a protected file, sees who can view it, monitors access and attempted sharing, sets temporary or lasting access, and revokes it without giving up ownership.

The recipient

Encounters a protected file, pays for access, and moves straight into the viewer once the charge is confirmed, without ever receiving an unrestricted copy.

Authority · File owner
  • Sets access conditions
  • Delivers the protected file
  • Monitors who has access
  • Sees attempted sharing
  • Revokes or limits access
  • Retains ownership
Holds authoritySuperfile
  • Matches the payment to recipient & file
  • Grants the entitlement
  • Enforces the current access state
  • Records monitoring events
  • Responds to revoke, expiry & refund
Payment · Stripe
  • Processes the transaction
  • Confirms whether payment succeeded
  • Does not determine file ownership
  • Does not maintain the entitlement
Buyer · Recipient
  • Encounters a protected file
  • Requests or purchases access
  • Gets immediate viewership after confirmation
  • Views within the granted entitlement

Stripe confirms payment. Superfile grants access. The owner retains control.

The actor map: authority never moves to the payment processor. Stripe reports the charge; Superfile turns a confirmed, matched charge into an entitlement; the owner keeps ownership and the power to monitor and revoke.
The SuperFile website shown on a studio display
Introducing SuperFile

Redefining how the world secures, controls, and interacts with files.

Every file you issue is signed with a name the world can verify, and revoke in one click.

Join the waitlist
Context: the Superfile product I was designing monetization into, with one identity and one set of guarantees across every audience.

How the pieces relate

Changing how ownership works meant designing around permissions and durable access control. Rather than treating a file as infinitely copyable, Superfile tracks where it came from, verifies who's opening it, and adjusts what each viewer can do. Control flows from the creator into the file, and each viewer gets their own permissions, a little like enterprise access controls applied to creative rights.

That model spans a macOS app, a web platform, secure viewers, payments, permissioning, ownership verification, accounts, and usage tracking. The map below lays out how the pieces relate and where value moves between them, so the system stays legible whether you're an engineer or an investor.

Where people work
macOS app
Web platform
Secure viewers
The fileOwned · signed · revocableControl flows from the creator into the file; every viewer gets their own scoped permissions.
What keeps it true
Payments
Permissioning
Ownership verification
Usage tracking
Accounts
The SuperFile ecosystem: the surfaces people work in, the file at the centre, and the services that keep ownership provable wherever it travels.
The line the whole system turned on

A successful payment could grant access. It could never grant ownership. Every screen, state, and Stripe event had to hold that line.

Payment is not permission

The CEO wanted access to feel instant. The work was making it instant without letting the charge become the authority.

The push to monetize came straight from leadership, and the CEO wanted access to feel immediate: pay, and the file opens. Anything slower would make the purchase feel broken. That constraint didn't loosen security. It just meant the buyer could never be the one left waiting.

So we used Stripe for payments instead of building our own, and the real work wasn't dropping in a checkout form. It was deciding what a successful charge was allowed to mean. The obvious version, unlocking the instant the charge succeeds, was the one we rejected: a charge can succeed and still be wrong, from fraud to a mismatched recipient to a refund seconds later. Access was released only after the payment was confirmed and matched to the right file and the right recipient. To the buyer it still felt immediate; underneath, Superfile, not Stripe, stayed the authority over access.

I led how Stripe's events connected to Superfile's entitlement model, in both design and implementation. The map became a shared contract between design and engineering: it drew who owned what, and separated the states that were technically impossible from the ones we simply chose not to allow.

From the obvious model to the one we shipped

Initial assumptionDesigned model
Successful Stripe charge → file unlocksPayment intent → charge confirmed → recipient and file matched → entitlement granted → viewer opens
Stripe is the source of truth for accessSuperfile owns the entitlement; Stripe only reports the charge
A refund or wrong recipient has already leaked the fileRefund, mismatch, expiry, and attempted sharing stay addressable states
Access is a one-time unlockAccess is a verified entitlement the owner can monitor and revoke

Designing the entitlement boundary

I mapped how payment, identity, and entitlement had to work together before a file could open, and, just as important, every way that could fail. The model carried the states the system actually needed: denied, paying, confirmed, granted, refunded, revoked, expired, mismatched, and attempted-sharing. Each one had an owner and a defined next step, so design and engineering could agree on what was technically impossible versus what we simply chose not to allow.

The interactive map below is that model: the same contract I documented in Figma and Notion for the team. Follow the primary journey, or open any node for what it does, who owns it, and where a policy was still undecided.

Once a transaction was confirmed, the interface itself needed only a small visible change: an indicator that the buyer could now view the file. The screen update was minor. The transition behind it, from requesting access to holding a verified entitlement, was the substantial work.

Select
Capture
Charge
Match
Grant
Open
Recipientlane
Selects “Pay to unlock”
Payment cardlane
Captures recipient, price & payment inputs
Stripelane
Processes, then confirms server-side; the browser screen isn't proof
Superfile entitlement servicelane
Matches the charge to the intended recipient & file
Entitlement → Access granted
Protected viewerlane
Opens the protected session
Immediate in the interface Verified underneath
Immediate in the interface. Verified underneath. Throughout, the owner remains able to monitor the entitlement or revoke it — the buyer’s fast path never removes the owner’s control.
User & customer experience
Product interface
Identity & account
Payment & Stripe
Entitlement & authorization
File delivery & protection
File owner
Platform admin & support
Monitoring, notification & audit
80%

Superfile paid access & entitlement system — text description

Payment establishes an entitlement. The entitlement determines access. Access produces a controlled file session.

User & customer experience
  • Request file access (Process) — Owner: Purchaser / Guest purchaser. A user opens a file, file version, or collection they want to view. Next: The app runs an access-control check.
  • Shared link opened (System event) — Owner: Anyone with the link. A shared link opens a gated landing page. Next: Routes into the same access-control check.
  • Initiate payment (Process) — Owner: Purchaser / Guest purchaser. The user starts checkout. No sign-in is required to begin paying. Next: Stripe processes the transaction.
  • User accesses the file (Terminal outcome) — Owner: Authenticated user. The user views or downloads the content through the app. Next: Views and downloads are logged.
  • Retry? (Decision) — Owner: Purchaser. The user chooses whether to retry the payment. Next: Yes → initiate payment. No → no access.
  • No access (not purchased) (Terminal outcome) — Owner: Purchaser. If the user does not retry, they end without access. Next: They can start a new purchase later.
Product interface
  • Access-control check (Process) — Owner: Product interface. The app authorizes before revealing anything. Next: Evaluate whether an active entitlement exists.
  • Gated landing / pay-to-unlock (User-facing interface) — Owner: Product interface. Shows a gated file landing page or the custom pay-to-unlock interface. Next: The user may initiate payment.
  • “Confirming payment” state (User-facing interface) — Owner: Product interface. While server confirmation is pending, the user sees a loading / confirming state. Next: The server validates the confirmation.
  • Payment failed (Entitlement state) — Owner: Product interface. A failed payment leads to a clear failure state. Next: The user may retry.
Identity & account
  • Guest → account creation (Process) — Owner: Identity system. A guest purchase begins account creation using the purchaser's email. Next: Requires email verification before access.
  • Email verification (Entitlement state) — Owner: Guest purchaser / Identity system. The purchaser must verify ownership of the checkout email before the entitlement can grant access. Next: Verified → the entitlement can grant access.
  • Match payment → account, email, resource (Process) — Owner: Identity + entitlement service. Payment is matched to the user account, email, resource, and a purchase identifier (UUID). Next: A valid match creates or activates the entitlement.
  • Billing identity (Entitlement state) — Owner: Stripe billing. The Stripe billing email may differ from the account email. Next: Related to, but distinct from, account identity.
Payment & Stripe
  • Stripe processes transaction (Process) — Owner: Stripe / payment provider. The card is charged through Stripe. Taxes are added and paid by the purchaser; discount codes may apply. Next: The server awaits a verified confirmation.
  • Transaction result (Decision) — Owner: Stripe / payment provider. Did the charge succeed? Next: Success → verified confirmation. Failure → failure state.
  • Verified Stripe payment confirmation (System event) — Owner: Stripe / payment provider → server. The server validates a verified Stripe payment confirmation (server-side, not the browser). Next: Match the payment to the account and resource.
  • Duplicate-purchase guard (Unresolved policy (TBD), unresolved) — Owner: Payment service. The system is intended to prevent multiple checkout sessions and duplicate purchases. Next: The exact duplicate-event handling is an unresolved operational detail.
  • Stripe unavailable (Unresolved policy (TBD), unresolved) — Owner: TBD. The recovery behavior when Stripe is unavailable is not defined. Next: Operational policy decision required.
  • Refund issued (System event) — Owner: Stripe / admin. A refund automatically revokes the entitlement. Next: → Entitlement: Refunded → Revoked.
  • Chargeback / dispute (System event) — Owner: Stripe. A chargeback automatically revokes the entitlement. Next: → Entitlement: Disputed → Revoked.
Entitlement & authorization
  • Active entitlement? (Decision) — Owner: Entitlement & authorization service. Is there a current entitlement for this user and resource? Next: Yes → entitlement check. No → gated landing / pay-to-unlock.
  • Create / activate entitlement (Process) — Owner: Entitlement & authorization service. A valid payment creates or activates the entitlement for a file, version, or collection. Next: The entitlement is checked before any file session.
  • Collection entitlement (dynamic) (Unresolved policy (TBD), unresolved) — Owner: Entitlement service. A collection entitlement includes files added after purchase. Next: What happens when a file is later removed from the collection is a Policy decision required.
  • Entitlement check before session (Decision) — Owner: Authorization service. The entitlement and its state are checked before a controlled file session is created. Next: Active + verified → device authorization.
  • Device authorization (Decision) — Owner: Authorization service. Evaluates the current device. Each entitlement supports up to two registered devices. Next: Registered → continue. New & <2 → register. 2 already → block.
  • Register device (Process) — Owner: Authorization service. A new device is registered when fewer than two are on file. Next: Access may continue on this device.
  • Device limit reached (Terminal outcome, unresolved) — Owner: Authorization service. Two devices are already registered. Viewing is blocked on this device. Next: Device-reset behavior is still TBD.
  • Device management (Unresolved policy (TBD), unresolved) — Owner: TBD. Device removal, replacement, reset, cooldown, and support-assisted recovery are not defined. Next: Policy decision required.
  • Provisioning failed (Entitlement state) — Owner: Entitlement service / Support. Payment succeeded, but access was not created. Next: Support can locate and reconcile the purchase.
  • Awaiting email verification (Entitlement state) — Owner: Identity system. The entitlement can't grant access until the checkout email is verified. Next: Verify email → proceed.
  • Awaiting payment confirmation (Entitlement state) — Owner: Entitlement service. Waiting on a verified Stripe confirmation before activation. Next: Confirmed → Provisioning.
  • Active entitlement (Entitlement state) — Owner: Authorization service. A current permission for a file, file version, or collection. Next: Passes authorization + device checks → session.
  • Expired (Entitlement state) — Owner: Authorization service. A time-limited entitlement reached the end of its owner-set duration. Next: Access ends; a new purchase is required.
  • Revoked (Entitlement state) — Owner: Authorization service. Access is invalidated; previously issued access no longer works. Next: Cannot be simply restored; it needs a new purchase or complimentary grant.
  • Refunded (Entitlement state) — Owner: Payment + entitlement service. A refund automatically revoked the entitlement. Next: → Revoked.
  • Disputed / charged back (Entitlement state) — Owner: Payment + entitlement service. A chargeback automatically revoked the entitlement. Next: → Revoked.
  • Resource unavailable (Entitlement state, unresolved) — Owner: File owner / Authorization service. The purchaser loses access when the resource is replaced, archived, or deleted. Next: The related refund policy still requires clarification.
File delivery & protection
  • Controlled in-app streaming & protection (Process) — Owner: File-delivery service. The original file is protected from direct public access and streamed through the app; authorization happens before unlock. Next: The user accesses the content in-app.
File owner
  • Replace / archive / delete file (Administrative action) — Owner: File owner. If the owner replaces, archives, or deletes a file, the purchaser loses access. Next: → Entitlement: Resource unavailable.
  • Owner-initiated revoke (Administrative action) — Owner: File owner. A paid entitlement cannot be revoked by the owner without a refund. Next: Revoke a paid entitlement → refund required → Revoked.
  • Replace/archive/delete ↔ refund (Unresolved policy (TBD), unresolved) — Owner: Policy. The relationship between owner replacement/archival/deletion and the paid-revocation-refund rule is unresolved. Next: Policy decision required: do not assume every change triggers a refund.
  • Restoring access (Process) — Owner: File owner / Admin. A revoked entitlement cannot simply be restored. Next: Requires a new purchase or a separate complimentary grant.
Platform admin & support
  • Support reconciles purchase (Administrative action) — Owner: Support / operations agent. Support can locate the purchase and manually reconcile it with the entitlement. Next: Restores the intended access without a second charge.
  • Automated recovery (Unresolved policy (TBD), unresolved) — Owner: TBD. The final automated recovery policy for provisioning failure is not yet defined. Next: TBD.
  • Grant complimentary access (Administrative action) — Owner: Platform administrator. Admins grant complimentary access through a separate entitlement-creation path; no payment occurs. Next: Enters the same authorization and delivery checks as a paid entitlement.
Monitoring, notification & audit
  • Notify owner, user & admins (System event) — Owner: Monitoring & notification. The file owner, affected user, and platform administrators are notified of the provisioning failure. Next: Support picks up the reconciliation.
  • Log views & downloads (System event) — Owner: Monitoring & audit. File views and downloads are logged. Next: Feeds the audit log.
  • Audit log (Process) — Owner: Monitoring & audit. Logs views, downloads, payment/refund relationships, entitlement changes, admin access changes, and device-authorization outcomes.
  • Audit-log retention policy: TBD (Unresolved policy (TBD), unresolved) — Owner: TBD. The retention duration is not defined. Next: TBD: no compliance claims.
This model defined the checkout boundary: payment could initiate access, but only a verified entitlement could authorize a protected session.

Collecting payment without leaking authority

Monetization had to live inside the product without weakening its security.

Instead of Stripe's default checkout, I designed a custom pay card that lived natively inside Superfile. It captured transaction intent (the intended recipient, the unlock price, and the payment inputs behind a single Pay to unlock action) and nothing more. The authority to grant or keep access was deliberately kept out of the card itself.

The surface is built in layers that separate the intent to pay from the authority to grant access. As you move up the stack, the product takes on more of the decision and the user controls less of the outcome: from basic inputs like card number and cardholder name, through the transaction-intent layer, up to the container that finally releases access.

Keeping one payment model across macOS and web

One big call was whether to build separate payment logic for macOS and web. Going fully native on each was tempting, but over time the two would drift apart in how they handled payments, webhooks, and security. I proposed embedding a lightweight web view inside the macOS app so both platforms ran the same Stripe flow and the same backend logic, leaving fewer places for bugs or security gaps to creep in.

Higher in the stack, the product decides more
Entitlement result

A confirmed, matched charge activates the entitlement, the only thing that opens the file.

Confirmation state

The card reflects a “confirming” state; the browser success screen is never authoritative.

Payment intent

What is being bought, for whom, and under which permissions.

Transaction inputs

Card number, cardholder name, amount.

Transaction intent — what the card captured

  • Intended recipient
  • Unlock price
  • Payment method
  • Confirmation action

Not access authority — deliberately kept out

  • Ownership
  • Ongoing entitlement
  • Revocation
  • Expiration
  • Sharing permissions
The payment surface captured transaction intent, not access authority. It established the recipient, price, and payment details before Superfile matched the confirmed charge to the correct file and entitlement.

Access is not ownership

The payment surface stopped at intent; the entitlement carried authority. The clearest way to see the difference is to lay every capability against every actor. What a buyer received was a scoped, revocable right to view, not the owner's standing control, and never anything Stripe could touch.

Access vs. ownership — what each actor can do after a purchase
CapabilityFile ownerRecipient · activeRecipient · no accessStripeSuperfile system
View fileYesYesNoNoEnforces
Download or exportYesYesNoNoEnforces
Share accessYesNoNoNoEnforces
Monitor activityYesNoNoNoEnforces
Set access durationYesNoNoNoEnforces
Revoke accessYesNoNoNoEnforces
Change protection settingsYesNoNoNoEnforces
Paying for access never conferred ownership. The owner keeps every control; a recipient with active access can only view and download within the entitlement; Stripe performs no file-access action; Superfile enforces each capability without ever becoming the owner.

Turning infrastructure into a story investors could operate

Complex technology only matters if people get it. Early on, investors were handed technical diagrams. Later, they followed a story instead: the problem, ownership, how it makes money, control, and the market. Making it legible visually, and operable in their own hands, turned out to be the bridge between technical depth and business value.

Reframing infrastructure as narrative

What investors saw beforeWhat they understood after
Technical diagrams & processesA story: problem → ownership → monetization
Raw infrastructure detailControl and market opportunity
Product depth without contextBusiness value made legible

What we proved, and what remained unproven

A working pay-to-unlock flow, operated end to end before it ever went public.

The feature launched internally first. From invite-only accounts, investors ran the full flow themselves: they purchased access, opened the protected file immediately, monitored who had access, saw an attempted share, and revoked access live, completing real tasks instead of reading a diagram.

That validated the model's clarity and technical viability. It was not creator adoption or behavioral validation. The work happened before Superfile had an active creator cohort, so the flow couldn't yet be tested against real seller behavior; I pressure-tested it against payment and entitlement failures instead, then used the live investor walkthroughs to confirm the system was understandable and operable. Creator validation remained the next step.

Because the feature kept changing while the company pivoted, I documented every flow, state, and security boundary in Figma and Notion, the same contract shown in the map above. On a security-sensitive surface those weren't deliverables; they were how design and engineering stayed aligned on what was impossible versus what we chose not to allow.

  1. 1Purchase access
  2. 2View the protected file
  3. 3Monitor who has access
  4. 4Observe attempted sharing
  5. 5Revoke access live

Investors operated the complete control loop themselves — they did not only watch a prototype or read a technical diagram.

Validated

  • The end-to-end flow functioned
  • The model was understandable to investors
  • Access could be monitored and revoked live

Not yet validated

  • Creator adoption
  • Buyer comprehension at scale
  • Conversion
  • Retention
  • Marketplace behavior
A working loop, operated end to end — evidence the system was legible and operable, not a claim about adoption, conversion, or the raise.
Before

“A successful payment changes the screen.”

After

“A verified entitlement changes the state; the screen communicates the result.”

The interface revision was small because the important redesign happened in the model underneath it.

States before screens

The hardest part of this project was never the interface. It was holding one line steady, that a payment can unlock access without ever transferring ownership, across product, design, and engineering while the rest of the product kept moving underneath it.

If I did it again, I'd draw the state diagram before the first screen, not after. My early screens treated access as a simple visual condition: paid, so unlocked. Once the state model settled, that same indicator turned out to represent a verified entitlement, something the owner could still monitor and revoke, and the screens I'd made had to be redrawn around it. On a product where the states are the thing you're selling, the interface is downstream of getting those boundaries right.

It taught me that on infrastructure this abstract, the design work is as much about making the system legible to engineers, investors, and users as it is about the screens themselves.

The hard part was never secure file sharing. It was designing for confidence and control in a place where ownership usually feels temporary.