LiveSecret - A LiveView app for sharing E2EE secret data (with Presence!)

Hi everyone! :wave:

I’ve released and open sourced LiveSecret, a Phoenix LiveView app built for sharing single-use secret data between 2 people E2EE. A great example use case is sharing a home WiFi password with your trusted guests.

The basic workflow is:

  1. :shushing_face: The owner of the secret information creates a secret link using LiveSecret.
  2. :calling: The creator shares the secret link and passphrase with the intended recipient using some out-of-band method.
  3. :unlock: The recipient visits the link and enters the passphrase to decrypt the secret.
  4. :fire: The encrypted content is immediately deleted from the sever.

LiveSecret source on GitHub

For demonstration purposes, it’s temporarily available at LiveSecret Demo on Fly. However, if you have your own secrets to share, you need to self-host the app - for your own good.

There are other projects out there that are mature and full-featured (sniptt/ots, guardedbox, yopass, onetimesecret), but I hadn’t seen one that takes advantage of LiveView and Presence, so I decided to put one together.

There is one feature of LiveSecret that I haven’t seen elsewhere: Presence allows the creator of the secret content to unlock a specific web client in real time. This allows the creator to (optionally) verify some information about the receiver before releasing the encrypted data.

I’m a long-time Erlang developer, and this is my first open source Elixir project. Thank you to the community for the great projects and tooling!




Wow, this is really cool! I’ve wanted to build/see something like this with LiveView for a while. This could even be useful for work. It’s a much nicer UX than the secrets transfer tools we use now, and handier than Signal.

One potentially useful feature would be video verification. It would be very useful for me to be able to send a link and then, as the manager, verify the recipient via video and then unlock the secret.

Great work, this is really slick!


Thanks for the feedback fellow Jesse! I like the idea of increasing the live-ness with some extra challenges, and the webcam idea is pretty great. I can definitely picture some other challenge types too. Thanks for taking a look and I hope you find the project useful!


Booom! It Security CAN be easy and fun to use!
Tried it and love it! Especially the live unlock feature. Just send someone a link and in a quick call unlock for that someone to copy the secret, be it a password or personal information. Easy as pie, nice to use and feels safe.
We’ll check it out further and might deploy it next to our services for our company to use for secret sharing.
Thank you so much!

P.S. The feedback after a burn could use improvement, like a redirect to home page with a short burn status information

1 Like

Thanks for the kind words. Can you elaborate on your burn interaction ideas? Current behavior is:

  • Add a flash to the page with some explanation of what happened
  • Change the presence badge to “Revealed” where relevant
  • Disable most UI buttons on the page since they’re no longer relevant.

I would like to keep the “Revealed” badge since it provides positive confirmation that the secret has been successfully decrypted. Otherwise I am open to ideas. I’m certainly no UX expert!

Perhaps something like this to add a little flare:

Sorry my bad! the first few times I used livesecret, the flash didn’t show up…
Now it does so now I feel well informed enough about what happened to my secret.

No worries. But since you missed it the first time through, there is either a bug or a UX issue to address. I’ll take a look to see if there is a better way to manage the flash.

1 Like

Hello again,

I’ve upgraded LiveSecret to Phoenix 1.7 and thought I’d post some information here in case it’s helpful for those looking to upgrade their own apps.

LiveSecret commit

Overall it was a very simple upgrade process, as LiveSecret itself is a very simple app. I followed the links below

Upgrading from Phoenix v1.6.x to v1.7.0 - chrismccord
Verified Routes Official Docs

One minor hiccup was that I had to include a new dependency called phoenix_view to resolve the error below

== Compilation error in file lib/livesecret_web/views/layout_view.ex ==
** (CompileError) lib/livesecret_web/views/layout_view.ex:2: module Phoenix.View is not loaded and could not be found
    (elixir 1.14.0) expanding macro: Kernel.use/2
    lib/livesecret_web/views/layout_view.ex:2: LiveSecretWeb.LayoutView (module)
    expanding macro: LiveSecretWeb.__using__/1
    lib/livesecret_web/views/layout_view.ex:2: LiveSecretWeb.LayoutView (module)
    (elixir 1.14.0) expanding macro: Kernel.use/2

Fixed by adding this to deps in mix.exs:

{:phoenix_view, "~> 2.0"}

If I understand correctly, I could have resolved this error by removing the use of a a so-called “Dead View”, but I wasn’t up for that at the time, so including this dependency seemed like the way to go. I only mention it here because I didn’t see it mentioned in the official docs for the upgrade.

1 Like