I am working on an application that will allow chat and a shared file system (cross-OS). It will feature end-to-end encryption through key exchange and it will be mostly peer-to-peer.
The basic idea is that users should have privacy. Real privacy would disqualify a service in the middle from intercepting and retaining user traffic. There must be some compromise though because the current internet model makes actual peer-to-peer without a middle service incredibly challenging. This is the problem I am attempting to solve, a client-to-client model instead of a client-server-client model. There will likely have to be a service in the middle to provide routing via DNS and tunneling via port 80 to get around things like firewalls and non-routable addressing, but traffic should be encrypted so that the middle service only provides a tunnel for encrypted data.
When I get far enough that I can turn this into a business I would not be able to serve advertisements to users, because their traffic would be encrypted. The disadvantage there is that I would have to find an alternate revenue model. The advantage here is that law enforcement could issue legal requests for user data and the only thing I could give them are account or billing details. I could not give out user contributed data, because you cannot give what you don't have.
I have also thought of a scheme to anonymize users in the system so that users are known to each other, but to everybody else the user ID is just some 128 character hash string bound to a private IP address. I haven't really thought through discovery yet, such as a user looking for their friend to exchange keys. With an anonymous user scheme in place user would have even more privacy. Users should never be anonymous to each other, because should be anonymous to those without access to their encryption. I will solve for this once I get to it.
As a service provider I would retain the power to disallow traffic via certain keys or anonymous IDs provided a proper legal request from a legal authority. If there is evidence of illegal activity gathered from regular police work I should be able to discontinue access to specifically identified accounts in accordance with the law, but it would require evidence I could not provide to law enforcement.
So far the shared file system operations are mostly built. I would like for this work as a Window-like GUI in the browser, which is built, and a command driven application from the terminal which is half built. I haven't started work on the security model or key exchange yet but I have a plan on how these should work. Once I debug copy/paste/delete from a file system on one computer to the file system on another computer from within the browser I will move on from the technical tasks to more revenue worthy tasks. I am almost there, but still have some work to do. This is taking long to write and test than I originally imagined.