Zero-knowledge habit tracking. Your growth belongs to you.
Hi Product Hunt! π
I'm Mark, solo dev and co-founder of Moss Piglet β a privacy-first public benefit company.
Habit tracking is personal. Your goals, your struggles, your progress β that's some of the most intimate data you can generate about yourself. So why does every habit tracker out there store it in plaintext on their servers?
Metamorphic is a zero-knowledge encrypted habit tracker. Your data is encrypted in your browser before it ever leaves your device. The server never sees your habits, your goals, or your progress. Not even we can read it.
How it works:
Password-derived public-key cryptography runs entirely in the browser
End-to-end encryption by default on every plan β not a premium add-on
The server stores only encrypted blobs it can never decrypt
What you get:
Habits & streaks β build consistency and track your check-ins
Reflections β journal on your progress privately
Goals & milestones β set targets and track meaningful progress
Schedule / calendar β plan your habits around your life
Progress insights β see how you're actually doing over time
Family groups β up to 6 people with shared habits, shared goals, and a group dashboard
Data export β your data, your way out. Always.
Every plan gets E2E encryption. The free tier gives you 5 habits with 7 days of history and full streak tracking β no credit card, no catch. Paid plans unlock unlimited habits, full history, reflections, goals, insights, and family features.
Why I built this:
I believe privacy is foundational to how we grow as people. You can't reflect honestly or push yourself if you know someone's watching. Metamorphic is built to give you that space.
It's built with Elixir and Phoenix LiveView, bootstrapped with zero investors, and run as a public benefit company β so the incentive is always the product, never your data.
I also built MOSSLET, a privacy-first social network with E2EE messaging and Bluesky interop, using the same encryption architecture that inspired Metamorphic.
Launch offer: Use code PH20SAVE for 20% off 6 months (good until April 30, 2026 at 11:59pm).
Would love to hear what you think β happy to answer any questions about the zero-knowledge architecture or anything else. π



Replies
What happens if a user forgets their password completely?
Metamorphic
@isaac_dominic1Great question β this is the tradeoff that comes with real zero-knowledge encryption. If you forget your password completely and haven't set up a recovery code, your encrypted data is unrecoverable. We can't decrypt it for you because we never had the ability to.
That said, we make it easy to protect yourself: during signup you can generate a recovery code in settings. If you ever forget your password, that recovery code lets you reset it and re-encrypt your data. We also encourage storing it somewhere safe like a password manager.
It's a similar model to Proton Mail β real privacy means only you hold the keys. π
Is there any performance hit from doing everything in browser?
Metamorphic
@daisy_morgan2Β No noticeable performance hit. The heavy crypto (key derivation) only happens once at login. After that, decrypting each item uses NaCl/libsodium compiled to WebAssembly β each decrypt takes under a millisecond. Loading a page with dozens of items adds maybe 10-20ms of total decrypt time. Any performance hit you might notice is minimal and will be more noticeable due to general internet latency.
How do family groups work without exposing private data?
Metamorphic
@bella_christineΒ Great question, Bella! Family groups use the same zero-knowledge, end-to-end encryption as everything else in Metamorphic. Here's how it works:
Each group gets its own encryption key β when you create a family group, a random symmetric key (group_key) is generated entirely in your browser. The server never sees this key in plaintext.
Keys are distributed per-member using asymmetric encryption β the group key is encrypted individually for each member using their public key (box_seal). So each member gets their own sealed copy that only their private key can open. The server stores these encrypted blobs but can't read any of them.
Shared habits and goals are encrypted with the group key β when you create a shared habit or goal, the data (name, description, check-ins) is encrypted with the group key before it leaves your browser. Every group member can decrypt it because they each have their own sealed copy of the group key.
Member removal triggers key rotation β if someone leaves or is removed, a brand new group key is generated. All shared data is re-encrypted with the new key, and the new key is re-sealed to each remaining member. The removed member's copy of the old key can't decrypt anything going forward.
The server is zero-knowledge β it only ever stores encrypted blobs and blind indexes. Even a full database breach reveals nothing about your family's habits, goals, or progress. There's also a second layer of AES-256-GCM encryption at rest in the database (via Cloak).
In short: every member can see the shared group data, but the server (and anyone who isn't in the group) cannot. It's the same architecture used by apps like Proton Mail β just applied to habit tracking.
Can users audit or verify the encryption implementation?
Metamorphic
@yara_simoneΒ Yes β the client-side encryption is verifiable right now in your browser.
But, thank you for this question, because we just released a page explaining how our encryption works and how people can verify: https://metamorphic.app/encryption
All encryption and decryption happens in JavaScript that ships to your browser. You can open DevTools, inspect the source, and see exactly what's happening. The crypto code uses libsodium-wrappers-sumo (a well-audited, widely-used NaCl implementation) β not custom cryptography. You can verify:
Network tab: No plaintext user data ever leaves the browser. You'll see only encrypted blobs in requests.
Source tab: The crypto modules (key generation, encryption, decryption) are all in the client-side JS bundle.
sessionStorage: Your derived keys live only in your browser session β the server never receives them.
We use standard, proven primitives: XSalsa20-Poly1305 for symmetric encryption, X25519 for key exchange, and Argon2id for key derivation. No homegrown crypto.
The codebase is private today, but we're considering publishing the crypto modules independently so anyone can audit the encryption layer without needing access to the full app source. A formal third-party security audit is also on our roadmap.
@f0rest8Β That's solid, giving users a way to verify it themselves builds real trust
What made you choose this architecture over simpler ones?
Metamorphic
@sienna_claireΒ Great question. It starts with my other app, Mosslet. I was becoming a new dad and had just finished reading The Age of Surveillance Capitalism by Shoshana Zuboff -- and I wanted a better world for my little one. At the time I went with a trust-the-server model for Mosslet (which is fine -- the code is open source and you can verify it). But when I read about Meta rolling back end-to-end encryption on its direct messaging, it pushed me to implement real E2EE in Mosslet's messaging, built on an asymmetric, password-derived key architecture.
As for Metamorphicβs features itself, I was inspired by my partner who is always thinking of ways to improve, figuring out how to break old habits and form better ones β sheβs passionate about psychology and behavior. And then it just made sense to me that something so personal as your habits/goals should be private to only you β and you shouldnβt have to worry about it being otherwise.
@f0rest8Β That's a strong reason, building it from values not just convenience
I personally like the idea of ownership over data, but I would still hesitate if onboarding feels even slightly fragile.
Metamorphic
@noah_bennett5Β Thanks Noah β that's a really valid concern. Onboarding is something we've put a lot of thought into precisely because of this tension. The encryption setup happens transparently during sign-up β you create an account with email and password like any other app, and all the key generation happens automatically in the background. There's no key management, no seed phrases, nothing extra to configure.
The one intentional friction point is the recovery key β we prompt you to save it after sign-up in case you ever forget your password, since we can't reset it for you (by design). But day-to-day usage feels like any other habit tracker.
Would love to know how it went for you.
Are there tradeoffs users should be aware of upfront?
Metamorphic
@violet_ameliaΒ Yes. I would say they are:
If you lose your password and don't have a recovery key, your data is gone. That's the real cost of zero-knowledge encryption -- we genuinely cannot reset your password or read your data on the server side. We mitigate this with a recovery key you can set up (like Proton or Signal), but it's on you to write it down and keep it safe.
No server-side search. Since the server only stores encrypted blobs, we can't search your habits or reflections server-side. Search and filtering happen client-side after decryption. For a habit tracker this is a non-issue (you're not searching thousands of records), but it's a fundamental constraint of the architecture.
Reminders are generic. Because habit names are end-to-end encrypted, our reminder emails and push notifications can't say "Time to meditate!" -- they say something like "You have a habit reminder." You'll know what it's for; we won't.
A little more responsibility than a typical app. Between the recovery key and the "Stay signed in" preference (which controls whether your decryption keys persist across browser restarts), there are one or two decisions a normal cloud app wouldn't ask you to make. We've tried to make the defaults sensible -- keys persist by default so it feels like a normal app, and recovery key setup is guided -- but it's still a bit more to think about than a zero-friction sign-up.
The short version: you get real privacy, but real privacy means we can't bail you out if you lose your credentials. We think that's a worthwhile trade for something so personal as your habits and goals.
The "your data never leaves your device" angle is genuinely differentiated, Mark. Most habit trackers treat privacy as a footnote in the settings page rather than the whole product thesis.
As a solo founder myself (building ad-vertly), what strikes me about this approach is that you picked a moat that big companies are actually worse at. A funded startup with investors asking for growth dashboards will always be tempted to mine user data. You can credibly commit to never doing that.
The messaging challenge is going to be helping people understand what zero-knowledge means without making them feel like they need a CS degree. "We can't read your habits, even if we wanted to" is a line that does a lot of work there.
Rooting for you on this one. Privacy as a first principle is a rare and defensible position.
Metamorphic
@gaurav_singh91Β Really appreciate this, Gaurav β I actually use almost that exact line on the site: "We can't read your data, even if we wanted to." Glad to hear it lands. Finding that balance between "this is serious cryptography" and "you don't need to care about any of that, it just works" is an ongoing process. To me, it just matters that people have another service out there they can trust.
Best of luck with ad-vertly, it looks really fascinating β solo founder life is a journey. Rooting for you too.
Hello Aria
The zero-knowledge approach here is genuinely rare. Most habit trackers treat privacy as a legal checkbox; youβre making it a core architectural constraint. Thatβs the kind of commitment that actually earns trust.
Whatβs interesting is the contrast with AI-assisted productivity tools. At Hello Aria, our AI assistant that works over WhatsApp/Telegram, users share a lot of context with the AI to make it useful β which creates the opposite tension. Weβve had long internal conversations about what gets stored, what stays ephemeral, and how to be transparent about it.
Your approach of never touching the data server-side forces a different (and more disciplined) design. Curious how you handle streak recovery if someone loses local access? Any encryption key backup mechanism?
Metamorphic
@sai_tharun_kakiralaΒ Thanks β that's a really thoughtful observation about the tension between AI usefulness and privacy, and I ran into that when designing Mossletβs privacy-first AI features. You're right that they pull in opposite directions: AI needs context to be helpful, but context means data exposure. The fact that you're having those internal conversations about what stays ephemeral vs. what gets stored is exactly the right instinct. Most teams don't even ask the question. Iβd also look into Confer and Proton Mailβs Lumo if you havenβt already.
To answer your question: your encryption keys aren't at risk from losing local access. Your private keys are stored on our server β encrypted with a session key that's derived from your password via Argon2id. The session key lives temporarily in your browser, but if your device dies or your session is wiped, you just log in again. Your password re-derives the session key, which unlocks your private keys from the server. Nothing critical is local-only but it is only able to be decrypted locally by you.
On top of that, we have a recovery key system for the "forgot my password" scenario. You can generate a human-readable recovery code in Settings that acts as a backup decryption path β it lets you re-derive your private keys and set a new password. The recovery key is shown once, never stored by us (only an Argon2 hash for verification), and consumed on use.
Without your password or recovery key, your data is permanently unrecoverable β by design. It's a real tradeoff: we give up "forgot password" email resets in exchange for genuine zero-knowledge. For us that's worth it, but it means we have to be clear with users about setting up their recovery key early.
Metamorphic
Hey, Product Hunt. Mark here, solo dev behind Metamorphic. Just wanted to say thank you to everyone checking it out on launch day. I was inspired to build this by my partner's focus on little daily life hacks to improve and grow as a better person.
It also felt like a perfect choice for privacy. If you've ever felt weird about a habit tracker knowing everything about your daily life, that's exactly why I built Metamorphic to be zero-knowledge from the start. Your data is encrypted before it leaves your browser. I literally can't see it (or anyone else). Try the free tier, no credit card needed, and let me know what you think. Happy to answer any questions in the thread.