desmos-labs / mooncake Goto Github PK
View Code? Open in Web Editor NEWThe first decentralized social app based on Desmos
License: MIT License
The first decentralized social app based on Desmos
License: MIT License
We need to implement the full UX to ask users to backup their mnemonic phrase at a certain condition. It will be like this.
@RiccardoM @bragaz Let's discuss. We will also need @Rooty2020 to help prepare the design.
Currently when a new version is ready to be published, we have to compile it and publish it by hand every time. What it would be ideal to have is an automatic system that when needed publishes both the Android and iOS versions to the respective beta testing programs automatically.
I think that this can be achieved pretty easily by:
Point 1 is tracked inside #41.
About point 2, I've found the following resources that might be interested to check out:
Let me know what you think @ryuash
4018
Currently the posts are not displaying newline characters (\n
, \r
) properly. All messages are shown as one-liners.
The post message should be viewed as a multi-lines message, instead of a single liner.
Can't post new messages from a new account after posting several messags.
The last message sent from this account is
which is the poll I have tested at #33
After that the posts can't be synced
4016
Inside the comments items, the Markdown is not loaded properly.
Visualize the detail of a post
The Markdown should be loaded properly
CC @kwunyeung
Loading list of posts and content of the posts are very slow. This will discourage users to use the application.
#999999
and the colour of the#ECECEC
Other
is always the last option, change the style of input boxLogin screen on smaller devices are overflowing at the bottom.
Enhancements:
The T&C should be responsive at the bottom.
Currently all content in the transactions are not encrypted and public. Although the system is censorship resistance, it still enable trace of content delivery which link back to a certain user. As Mooncake
holds the private key of the user, the content can be first encrypted and then put inside the tx message before broadcasting. The user sign the encrypted message rather than the original content. The content in the tx can be decrypted by Mooncake
using the corresponding users's public key when the users load the data. The content being encrypted should be a salted string instead of the plain content so that other users can't decrypt it using users public key as they don't know the secret salt.
One scenario this feature can benefit is as below.
Mooncake
or on chain.Mooncake
holds a secret salt. This can be the original value of the hashed subspace
or another piece of random string. It acts like the app_id
and secret
of a Facebook app.secret
and encrypted. Then the post message holds this encryptedSaltedContent
and broadcast.saltedContent = secret + content
encryptedSaltedContent = encrypt(saltedContent, privKey)
djuno
should still store the encryptedSaltedContent
to keep itself as the chain parser.Mooncake
displays the content, it decrypts with poster's pubkey and remove the secret
content = remove( secret, decrypt( encryptedSaltedContent, pubkey ) )
The secret should only be available in the binary build of the Mooncake
, it should not be stored on GitHub
. This should be purely done during build time.
We need to update the messages and all the other necessary things to be compatible with the upcoming Desmos v0.8.0 release
4018
When recovering an account from a mnemonic backup, if the user inputs the wrong password while recovering it the screen does not tell anything to the user itself.
An alert should be seen telling the password or input text is incorrect.
Is it possible to use the native OS emoji keyboard instead of Flutter package? I am trying to adapt the emoji keyboard but I find it really hard to get a comfortable experience with it.
When there is one failed message, all messages be trying to broadcast after it will not be committed. It is because all the messages will be grouped together and sent as a single transaction. The ValidateBasic
will already blocked the tx being delivered. This can be solved if we can remove any failed messages or edit the message to become the correct format.
Starting from Desmos v0.3.0, the users are able to create polls withing messages and answer existing polls. We should definitely implement this feature inside Mooncake as well. The UI for the posts have been already defined as follows:
From @kwunyeung
When the user wants to view the mnemonic, currently it has to go through the following warning screen. The problem is that he can tap on the "View mnemonic" button without reading the warning text.
We should also ask him to check a checkbox to make sure he's read it.
When editing the profile info (DTag, Biograpgy, etc), the input fields do not properly validate the input. Currently, if the user enters a value ending with a space (
), when saving the DTag an error will be returned.
The input fields should be validated properly following the parameters that are present on chain as well. The user should not be allowed to save the profile if the input fields do not pass the validation rules.
Starting from Desmos v0.4.0 users are able to create their own personal profile with a moniker, cover and profile picture and a set of other different data. What we should do is implement the profile visualization following the below defined UI:
4016
Sometime, the liker profile picture is appearing twice.
Like a post.
The liker profile picture should appear only once.
CC @kwunyeung
4018
While viewing a poll's results, the bars are not displayed properly.
Update: this only happens when poll answer it not added to chain yet
The poll bars width should be sized accordingly to the percentage of voting people.
Currently the users are able to create a new account upon opening the application. Although this is a nice feature to onboard new users, we should provide them the ability to later retrieve that mnemonic so that they can properly store it and use it later if needed (e.g. in the case where a backup is needed).
Android 10.0
4004
Inside release applications, Firebase Cloud Messaging is not working properly and the users are not receiving notifications when their posts are liked, commented or reacted to.
A notification should be received. Instead nothing happens.
Currently when the user creates a post containing one or more link(s), the link appear as a simple clickable text.
update: https://www.youtube.com/watch?v=sZQ4Ddtz2A4&feature=youtu.be another reference
I think that in order to give the users a better experience, we should implement links previews.
Navigating across pub.dev, I've found that it might be a good library to use to implement this: rich_link_preview.
The way we could handle this is by getting any URL present inside the message body and using that to generate the link preview.
Also, the following conditions should apply:
Update: this is not a poll bug but a a post bug as a whole
User should not be able to vote again in post details
User vote once and it stays
The comments number is not displayed correctly on a post which I have commented.
List object
Details
The correct number of comments should be visualized.
It takes time when a new key is being created and receive tokens from the faucet. It will generate errors if the user quickly post message or like before the account not being created.
We should either
Block the user from entering the main screen and show a progress animation (a running lion?) right after the key is being created. The app keeps making a query to the chain and see if the address exists. If so, display a button. The user tap on the button and jump to the main screen.
Disable all the buttons by default. The app keeps making a query to the chain and see if the address exists. Enable the buttons if it exists.
It's safer to query the account every time when the app is being loaded. This can also be a local checking to block the users make any posts when the account balance is too low.
4102
When a post is created, the following series of actions is performed:
Unluckily, if the application is closed in between 2 and 3, the post status never gets updated.
This is even more disturbing since refreshing the posts list does not update the post status even if it has already been sent to the chain.
The post will be in the wrong state (its background is going to stay dimmed).
Even refreshing the posts list, the status is not updated.
The post status should be updated and sent as being stored online if the remote contents are equals to the local ones.
Currently Mooncake is based on the data which is read directly from the chain, without any intermediary layer in between the application and the blockchain itself. This allows for very small operating room as we need to be 100% compliant to what the chain offers when reading data, without having the possibility of extending the current features.
With the creation of a middle layer (Djuno), we instead might be able to extend the chain features by anticipating the ones that will come in later updates.
As an example, suppose we want to implement the account profile now (which will be shipped on the next Desmos version), what we could do is:
Pros:
Cons:
I'm just throwing this idea out there, as I want a place to discuss this. I'm still trying to figure out my opinion of whether this might be a good or bad idea. What do you guys think? @bragaz @kwunyeung
Currently when a user opens Mooncake, he is prompted with the latest 50 messages that are present inside the chain. Such messages can be written in many different languages.
In order to make users more comfortable inside the application itself, we should provide them with the ability of selecting the language(s) they would want the content to be displayed on. A possible implementation of a system could be the following:
Currently any user can create one or more profiles very easily. In order to make sure he can uses them properly, we should allow any user to easily switch between previously added profiles.
We could implement a UX the same as Twitter does.
Inside a single post item, the posting time does not appear correct. After a minute that a post has been created, the text displays "A couple of hours ago". This is due to the fact that the time is considered to be in UTC instead of the local user time zone.
The posting time should be appropriately displayed based on the current timezone of the user, not UTC.
In order to have the iOS version published on the App Store publicly, we are required to implement a reporting system that allows users to:
A possible solution to this since we have no on-chain reporting feature yet, could be the one of sending an email for each report to us.
Hiding the post locally should be trivial.
4102
Currently, the request for new funds is done only when the available amount inside the wallet is less than 1 token.
However, if the user has 0.10 daric
in his wallet, he will not be able to create new posts (since it's less than 0.20 daric
). This will put him in a state from which more funds will not be asked and from which he cannot create new posts.
0.10 daric
(edit your account, create 2 posts and add 3 likes).The post will never be created.
The ask for funding should be proportional based on the number of actions that the user is doing per transaction, not based on a predefined value.
Currently when logging in the user is only able to perform the mnemonic login by manually typing each and every word of the mnemonic itself. At the same time, once he has logged in, he can only see his mnemonic and manually write it down on a piece of paper.
In order to facilitate the export and later login using the mnemonic, what we could do is allowing him to export it as a shielded file. The overall working could then be:
Currently it's not possible to delete a poll once it has been added to the post being created inside the proper screen. We should allow for that.
Add a button that allows to delete the entire post all together after having added it.
Move all util functions inside the ui folder in to its own utils folder and update theme export.
Currently we have a test coverage of ~ 18% which in my opinion is very low compared to the 70-80% coverage that is recommended for most projects.
This is partly due to the fact that most of the code we currently have is UI-related, and I've personally tested only the non-UI code which makes up for quite a small part of the overall code lines.
In order to solve this problem, we should start implementing UI tests. Following, some references I've found that might be useful when writing such tests.
In order to properly test blocs, we should use the concepts outlined inside the Testing section of the Bloc documentation, which highlights how Bloc should be tested independently from other components.
When testing Bloc what I suggest to do is not use the create
method that they have. Instead, use the public constructor passing mocked arguments when needed. This should ensure that the BuildContext
is never used (as it should).
The second type of tests that should be done are Widget tests. These allow to test single widgets independently and make sure they work properly. An introduction on these kind of tests can be found inside the official Flutter documentation.
Finally, integration tests should be created in order to test the integration between a lot of widgets and how they react. A nice guide on these kind of tests can be found inside Flutter docs.
What I suggest we do is create multiple PRs that over time implement all these tests when different bugs are found. This should ensure we do not over-due something, and also that we build proper tests that we need.
What do you think @ryuash
4018
Currently the user is not able to edit the biography without re-writing everything.
The user should be able to edit the biography properly.
Currently there is no other way to show people what is going on Mooncake. Mooncake should have the ability to share the posts to other platforms like how FB, Instagram, Twitter are doing.
The item being shared is a web link which the post will be displayed on a web interface. This is how Instagram shows the content https://www.instagram.com/p/CCc80DAjhIW/
To achieve this, we will need
mooncake.space
web link on MooncakeCurrently our CI system relies on CircleCI to build and test the application, and Travis to build and publish the documentation.
I honestly think that we might be able to properly switch to the new GitHub Actions CI/CD system. This wold probably would bring some improvements such as:
Here are some resource I've found interesting and we might want to look at:
What do you think about this @ryuash?
The native iOS font SF Pro
is being displayed improperly. The text looks narrower than normal and the letter spacing is too tight.
XD on the left vs iOS screen capture on the right
This is due to the fact that Flutter is not handling the font on iOS 13+ correctly.
flutter/flutter#43998
flutter/flutter#60013
Interestingly, the font display correctly with Markdown.
This comment may give some light.
flutter/flutter#41101 (comment)
4102
While inside Android everything works properly, iOS devices do not receive the proper push notifications.
You should receive a push notifications telling someone has liked the post, but nothing happens.
The mnemonic phrase was not cleared after restoring the key from backup. It stays in memory. After I logged out and tap "I have a written mnemonic", it will shows the exact same mnemonic of the account I restored from backup.
The previous mnemoinc will be shown on the 24 blanks.
The 24 blanks should be all clear in all situations.
4102
From a @lauranori message on Slack.
If I’m writing a poll and I don’t pay much attention reading the ‘What do you want to ask?’ section, I won’t see any differences between that and the various answers of the poll. I think more than one person could get it wrong (as in the example)
The UI should reflect better the meaning of each input field.
Originally reported by @lauranori inside the internal Slack.
iOS 13.5.1
4004
mobile
and Wi-Fi
After saving the profile, the loading bar never stops spinning.
The profile should be saved and the loading bar should stop spinning.
8px
) - 140px
) - 2#000000
- 3#646464
- 4#F4F4FC
- 5#6D4DDB
- 6#6D4DDB
or #6D4DDB 15% transparency
- 7#999999
- 820 px
), - 9Currently the user mnemonic is securely stored using flutter_secure_storage
which stores the value inside the device secured storage which is Keychain on iOS. The default behaviour of iOS is to not remove any data in Keychain even when the app is uninstalled. The mnemonic is securely stored this way as only the app with the specific provisional profile can access the specific key/value in the storage. However, users will feel uncomfortable if the value always stay on the device even if the app is removed and feel strange if the app sign in automatically when the app is reinstalled.
It is better to force the user sign out when the user remove the app or force the user sign in again when the app is reinstalled. The solution to this UX is to remove all the key/value in the secured storage on every app install. This can be achieved by detecting the First Run
on iOS.
Here is a reference to the implementation in Flutter
.
Currently the appBar theme uses englishLike2018 but the body textTheme uses englishLike2014
Update body textTheme to use englishLike2018 while keeping the default merge theme as a fallback
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.