Thread

Saturday night launch. πŸš€ Nostr's UX problem isn't a secret. 30-day retention trends to 0%. Daily active users stuck at ~10k. Posts disappear. Followers vanish when you switch apps. Every app feels like beta software. I've spent 2+ years arguing that great UX wins. So I designed a meta-study, threw a few hundred dollars at Claude, and put together what the evidence indicates. tl;dr: Ship working experiences, then add features. πŸ”— 6 critical patterns backed by 100+ citations: β€£ Onboarding, content discovery, core interactions β€£ Performance, progressive complexity, cross-client consistency β€£ Anti-patterns to avoid + validation checklists I'm not a designer, but I know what good looks like. This is opinionated, evidence-based, and focused on retention. What am I missing? What did I get wrong? Send PRs this way: cc: @Karnage @elsat @daniele

Replies (55)

Amazing πŸ‘πŸ‘πŸ‘ I would be very interested to see these issues and stats broken down per client. Each client has issues, but some do UX much better than others. How does user retention compare between users who onboard to various clients? I imagine of us have our primary client that we do most everything on, and then we supplement with other apps for missing features. If users onboard to a client with shitty UX, I would guess they’re more likely to leave than a user who onboards to a client with a better UX.
I think a review of general code quality, clean coding practices, and automated testing is worth including as well. I've attached a system prompt snippet to teach an LLM composite design, which is the best way I know for determining code quality. A prompt would then go something like: "Evaluate this codebase according to the principles of composite design. Summarize the module strength and coupling of the various parts of the codebase. Inspect how well the included unit, integration, and end-to-end tests validate the intended function of the program." --- ## Software Design Principles The following is a methodology for evaluating software code according to Composite Design (Glenford Myers, 1975) in the form of Functional Decomposition. Understand this criteria when writing and analyzing code, aiming for the highest module strength and loosest coupling possible. ### Definitions - **Module**: A group of program statements that have a defined beginning and end, collectively referenced by a module name, and can be called from other modules. Corresponds to the "function" in most modern languages. ### Problem Structure Composite analysis begins with the problem structure. A piece of software is typically comprised of several problem structures. The problem structure is a rough sketch of the problem the software is attempting to solve. It is presented in functional, rather than procedural, terms. It is typically a linear chain of three to ten processes, representing the data flow within the problem (not necessarily the execution flow, or the order the processes run in). For example, the problem structure of an airline reservation system might be - Input transaction - Read flight files - Update flight files - Update accounts-receivable file - Write ticket - Send load & trim data - Return flight information ### External Data Streams After the problem structure is defined, the next step is to identify the streams of data that are both external and conceptual. External streams of data are those that begin and/or end outside of the system. Conceptual streams of data are those containing related data. ### Points of Highest Abstraction From the identified external streams of data, the next step is to determine the points of highest abstraction for those streams. Data is transformed as it moves through the problem. From the starting input, there comes a point where input stream seems to disappear, as its data has transformed into a form that no longer resembles its origins. That point is called the Most Abstract Input Data. When the problem is viewed in reverse, from the ending output, a similar point can be found, the Most Abstract Output Data. The section of the problem in between the Most Abstract Input and the Most Abstract Output is the Central Transform. Sometimes, there is no Central Transform, and the point of Most Abstract Input and Most Abstract Output are the same. Visually, the parts of the problem structure become as follows: Major Input Stream -> Most Abstract Input Data -> Central Transform -> Most Abstract Output Data -> Major Output Stream ### Functional Decomposition Following from the determination of the points of highest abstraction, the next step is decomposition. The problem structure is broken into three parts: the major input stream, the central transform, and the major output stream. Take each part and describe it as a function, with its inputs and outputs. The input and output streams usually have no input nor output, respectively. From these three submodules, the process of composite analysis can repeat, treating each as a subproblem, which will have its own problem structure and points of highest abstraction. The recursion continues until the subproblems cannot be broken down further. #### Formatting Decompositions If a program contains modules A, B, and C, where A calls B and C, and B calls C, the functional decompositions would be notated as follows. Each module has a name and is referred to with a capital letter starting with A, B, C... then AA, AB, AC... and so on. The first column shows whether the called module has other dependencies, with "β€”" indicating a root module and "↓" indicating a mid-level module, which must have a section listing the modules it calls, until only root modules remain. Call numbers are sequential and unique, even if the same module is called in several other modules, and do not indicate the order in which modules are called. --- **A. Name of Module A** | | Call # | Module | Module Name | Inputs | Outputs | | --- | ------ | ------ | ---------------- | ------ | ------- | | ↓ | 1 | B | Name of Module B | A | X | | β€” | 2 | C | Name of Module C | B | Y | **B. Name of Module B** | | Call # | Module | Module Name | Inputs | Outputs | | --- | ------ | ------ | ---------------- | ------ | ------- | | β€” | 3 | C | Name of Module C | C | Z | --- ### Evaluating Software #### Module Strength In composite design, there are several levels of module strength. In the generated code, make each module as strong as possible. - **Functional**: The strongest module. All of the elements are related to the performance of a single function. - **Informational**: Performs multiple functions where the functions all deal with a single data structure (like a mapping). Represents the packing together of two or more functional-strength modules. - **Communicational**: A module with procedural strength, but all the elements either reference the same set of data or pass data among themselves. - **Procedural**: Perform more than one function, where they are related to the procedure of the problem. - **Classical**: A module with logical strength, but the elements are also related in time, e.g. sequentially. - **Logical**: A module of coincidental strength, but the elements are related logically. - **Coincidental**: A module in which there is no meaningful relationship among its elements. #### Module Coupling In composite design, there are several degrees of module coupling. In the generated code, make each module as loosely coupled as possible. - **Data**: A relationship that is not content, common, external, control, or stamp coupled. All input and output are passed as arguments or return variables. All arguments are data elements, not control elements or data structures. - **Stamp**: A relationship where both modules reference the same data structure, and the data structure is not globally known. - **Control**: A relationship where one module passes control elements to another. Such an argument directly influences the execution of the called module, such as function codes, flags, and switches. - **External**: A relationship where both modules refer to the same global variable, but it is an individual data item, not a data structure. - **Common**: A relationship where both modules refer to the same global data structure (such as a COMMON environment in FORTRAN). - **Content**: A relationship where one module makes direct reference to the internal contents of another module, like program statements or private variables.
We are looking for someone who can invest 45,000 US dollars in our company. We are looking for an investor who can lend 45,000 US dollars to our company. We are looking for an investor who can invest 45,000 US dollars in our company. With this budget, we will produce our own uniquely designed furniture through our contracted manufacturers and offer them to the global market. By producing in bulk (wholesale), we will significantly reduce production costs and be able to sell high-quality, durable, and aesthetically pleasing furniture at affordable prices. With the budget of 45,000 US dollars you will invest in our company, we will produce our own designed furniture and sell it in the global market. With the money you lend, we will have the company we have agreed on produce quality furniture for a certain amount of money and sell it on the international market. Since our furniture will be produced wholesale, we will provide a cost advantage and will be offered to customers at affordable prices. In short, we will be able to sell quality, beautiful-looking, comfortable furniture to people at affordable prices. Since the furniture we produce will be made of cheap and high-quality materials, people will want to buy it quickly. You know that furniture is a type of profession that has been very profitable for years and will provide us with a large profit in a short time. Thanks to our experience in advertising, we will expand into international markets and make quick profits. Because our advertising network is strong, we will be able to acquire a customer base from many countries in a short time. This means that within this project, your money will grow more than fivefold in a short period, providing you with a high and guaranteed profit. πŸ’Ό Your Profit: You will provide a loan of 45,000 US dollars to our company. We will invest these funds in our furniture business, grow the investment, and return a total of 250,000 US dollars to you by March 22, 2026. You will invest 45,000 US dollars in our company. When 22.03.2026 comes, I will return your money as 250,000 US dollars. In short, you will receive back the 45,000 US dollars you lent to our company as 250,000 US dollars, and we will give you back your money in an increased amount. We will contact you on March 22, 2026, and refund your winnings of 250,000 US dollars. To learn how to lend 45,000 US dollars to our company and to get detailed information about our educational project, send a message to my Telegram username below. To learn how you can invest 45,000 US dollars in our company and how you can participate in our furniture project, send a message to my Telegram username below and I will give you detailed information. To learn how you can multiply your money by investing 45,000 US dollars in our company and to get detailed information about our furniture project, send a message to my Telegram username below. To learn how you can lend 45,000 US dollars to our company and increase your money by participating in our furniture project, send a message to my Telegram username below and all detailed information will be given to you. Turn your capital into opportunity! Our company is seeking a 45,000 USD investment to expand our innovative furniture project. Join us and discover how your money can grow while supporting a global venture. For full details, message us on Telegram at the username below. For detailed information and to learn how you can participate in our furniture project, send a message to my Telegram username below and I will give you detailed information. My telegram username: @adenholding
The UX of the late 90s internet by the standard knowledge was abysmal. You had to get a guy to come to your house and run wires, you paid for connectivity by the minute, nobody could call anyone while someone was using it unless you doubled your phone bill, videos just weren't a thing, you had to use special software to get anything interesting like music or movies, and those took days to download. You needed to learn IRC just to chat with people, you needed to learn something weird to do just about anything. Why does the name of a website start with .com? Still, it exploded. By every conventional metric the UX of the internet is better. You've got it in your phone, you can literally touch a website with your fingers and resize it, video everywhere in seconds. But in reality everyone feels stuck, nobody knows why, everyone is being guided into silos, you have to run software to read articles, some AI tells you to eat one small rock a day. Everyone still uses it. The UX for the internet is abysmal, most people don't even know it, for many it's just s feeling, some talk about social media addiction, and a few really understand how bad it is. The UX of nostr applications doesnt need to be "fixed" to onboard the masses. Whether or not the masses come is of little consequence. They'll come if they want, just like they used torrents for years. What will fix nostr isn't hiding everything behind veneer, it's the fact that all the clients are built by web devs who overcomplicate everything and need a NIP just to build something. We don't need business case minded tech people who've spent years answering to a CTO and bring that mindset with them on how to improve nostr. What we need is creativity, that and a serious reduction in code complexity.
One really cool thing about Nostr is that you can create guest accounts for users, allowing them to not only browse but also interact with content before committing to the platform. After they’ve completed about seven engagement actionsβ€”such as posting, liking, following, or resharingβ€”you can prompt them with something like: β€œEnjoying Nostr? You can make this account yours! Update your profile here.” Boom. Hooked. View quoted note β†’
While I am a strong advocate of investing in UX, refining UIs, and workflows, I believe that in this case it is more of a yardstick than the main culprit. The success of any project is achieved through the sum of several interconnected factors; with Nostr, we have completely new rules and values that impact user expectations, so it is not easy to know in advance how the various elements will interact with each other. So improvements in any area can help in dramatic and unexpected ways. We have a lot of work to do in the UX area, but I don't think it's that serious; quality is increasing at a rapid pace. Instead, I think we need to kick-start the network effect, which brings more content and therefore more variety and quality, creating an upward spiral. Given the specific values that Nostr promotes and the inevitable technical challenges that come with it, I believe that promoting small groups may be the right push to break the deadlock. Passionate people are more willing to put up with certain limitations or imperfections, and in fact help development by creating a solid and reliable foundation. I think that the work of @ hodlbod, @verbiricha and other on this topic is really promising. In fact, we must not forget that Nostr is not just a clone of the traditional social layer, but we have many other interconnected stuff. A note on citations: it's a good approach, but using a single random citation to support a claim isn't really helpful; you need a UX expert or a minimum study to evaluate each point. Finally, thank you for your work. All points of view are valuable for improving Nostr!
Nostr is like TCP/IP - nobody cared until the web came along. I don’t think censorship resistant social media is the thing either. Look how Twitter is turning out. My hunch is that it will be something to do with controlling and sharing your own records that can official and informal. That is what I am trying to do with #nostr #safebox
I’ve said it since day one: everyone is busy trying to rebuild Twitter or Facebook on Nostr, but that misses the point. Those platforms aren’t broken only because of content, they’re broken because the user experience is miserable.
Have you considered that it might be time to throw in the towel on Nostr 1.0 and start looking towards Nostr 2.0? An outright refresh? I think the protocol is too paralysed to be able to implement these recommendations in any serious way. It's been 2 years to remove NIP4 DMs, which everyone agrees are bad (and critically insecure to boot). If something that everyone agrees is bad, and has agreed as such for two years, takes this much work to be rid of (and is STILL here) then what hope for the things you're proposing? There's just no mechanism, and no mechanism to make a mechanism. And the proof is in the numbers. They are flat for 2 years at 10k, as you point out, and they will likely drop overall this year. And that's *with* all the work that's gone in. And there's no reason to think 2026 and 2027 will be different. Many hopes seem pinned on some Deus ex machina, but there are no signs what that Deus ex machina might be. I think some thoughts on what Nostr 2.0 could look like would the best thing at this stage.
Much of the work can absolutely be ported over. If you remember Mozilla Suite, it became this bloated application that combined a browser, email client, and other junk. Some devs forked it and started the Firefox project as an experiment to create a leaner, faster, standalone browser alternative. That worked well enough. Many such cases. It can be the way. What we have now is not what people want. It just isn't. Not only normies but most people. Even Ross Ulbricht left to go back to posting couple pics on Instagram. I'm not saying there isn't some Deux ex machina waiting in the wings, but the numbers do not look good no matter how you frame them.
SeaMonkey, are you kidding me? SeaMonkey is used by like 17 Simpsons comic book store guy bearded weirdos who get a kick out of 1990s retro interfaces. If the end-game for Nostr is to preserve the messy origins of what we have now and then chug along in a SeaMonkey-esque way, beloved by every one of its 17 loyal users, then we may as well all just give up now.