ArweaveTeam/Bounties

Build a WeaveMail Client

cedriking opened this issue · 6 comments

Build a WeaveMail Client

PRIZE BOUNTY

2,000 DAI.

OVERVIEW

WeaveMail allows its users to send and receive messages without being tracked or watched by big corporations. Weavemail cannot be censored as it’s fully decentralized and it cannot be lost since it’s permanently available on the Arweave network.

WeaveMail has been live for years now and it’s used by hundreds of users. Now we need your help creating a new WeaveMail client! WeaveMail is outdated, it needs a new design and a new structure. We offer all the required resources, including the current WeaveMail source code, fully available on Github for you to start working on this amazing project!

GOALS

  1. Build your own version of a WeaveMail client. The new client has to improve the loading messages speed and the UI for your client. Weavemail is a completely open-source project, available on GitHub.

  2. You can build the UI from scratch or work with an already available framework, as long as it’s open source. WeaveMail is built on top of simple API calls, it’s up to you on how to interact with the Arweave SDK.

  3. It is recommended to play around with the current WeaveMail client to see how it works and some of the features that are already in place. Any extra features are welcome.

  4. Your client needs to be a fully functional dApp and must be deployed on the permaweb at the time of submission.

CRITERIA

  1. Submissions must be your original work.

  2. Previously published dApps aren’t eligible to participate in this bounty.

  3. You must make your full source code available over Github and it needs to include an OSS license. Which one is up to you!

  4. Complete all the goals set in the Goals section.

There will be one single winner of 2,000 DAI.

If submission dApps don’t meet all of the goals and criteria outlined above, there will not be a winner.

We are here to help you build your idea for the bounty, Join us on our tech Discord if you have any questions!

For entries that show high potential, you can apply for funding for further development and drive adoption through our Grants Program, and bring your hackathon entry to the next level.

RESOURCES

  • WeaveMail is fully open-source and available over GitHub here.

  • You can find the documentation needed to start BUIDLing on Arweave here.

  • Documentation for ArweaveJS library that allows you to read from and write to the permaweb is available here.

  • ArweaveID is a great integrated protocol used on WeaveMail, it’s open-source and available here.

  • We’re providing free tokens for you to get started building and testing your dApp - Grab your wallet here. For guidance on how to use the Chrome web extension wallet, check out this user guide.

  • You can find very useful information about Creative Commons here.

Don’t forget to join us on our developers’ Discord server to chat and get feedback/assistance from the Arweave team & our community!

SUBMISSION PROCESS

  • Click "Start Work" and start BUIDLing.

  • Hack! Join us on our tech Discord if you have any questions!

  • Provide the links to the permaweb version and your GitHub WeaveMail client repo.

SUBMISSION DEADLINE

11:59pm EST on May 21st

JUDGING CRITERIA

The prize will be awarded to the individual/team that produces the best approach and the most user-friendly WeaveMail client while respecting the challenge description, goals, and criteria.

WINNER ANNOUNCEMENT DATE

May 27th

HAPPY HACKING!!

Issue Status: 1. Open 2. Started 3. Submitted 4. Done


This issue now has a funding of 2000.0 DAI (2000.0 USD @ $1.0/DAI) attached to it as part of the @ArweaveTeam fund.

Issue Status: 1. Open 2. Started 3. Submitted 4. Done


Work has been started.

These users each claimed they can complete the work by 1 year, 9 months ago.
Please review their action plans below:

1) uivlis has started work.

I'll try my best at building a new and wonderful client for WeaveMail.
2) aliceasuna94 has started work.

I will create an email / weavemail client with a variety of different features and views.
3) mikehibbert has started work.

I've looked over the requirements and I'm happy I can add improvements to this app!
4) cromatikap has started work.

I will make a modern and fully usable mail client
5) jandersonconstantino has started work.

I will go to create a new app to WeaveMail client.
6) anish-agnihotri has started work.

Hey folks, I'm currently building a new client for WeaveMail called Weve and am excited to share soon!
7) akanimorex has started work.

I will use reactjs framework to build the frontend and add functionalities.Node and express for the backend
8) psudoanon has started work.

Working on a PWA WeaveMail client which only stores what is essential on the blockchain with local management of traditional email "features" like sorting, tagging, starring, etc. Responsive and mobile focused and potentially support for attachments to be linked on IPFS
9) rekpero has started work.

Building a cool UI for weavemail, try to integrate most of the email features.
10) x5engine has started work.

I will building an awesome beautiful mail app on Arweave

Learn more on the Gitcoin Issue Details page.

Issue Status: 1. Open 2. Started 3. Submitted 4. Done


Work for 2000.0 DAI (2000.0 USD @ $1.0/DAI) has been submitted by:

  1. @mikehibbert
  2. @aliceasuna94
  3. @anish-agnihotri
  4. @mmitrasish

@arweave-sophie please take a look at the submitted work:


Weve

I'm excited to share the final hackathon submission for Weve—a private, decentralized, and open-source WeaveMail client implementation (repo, license). Alongside my Gitcoin submission, this comment serves as a birds-eye view into the development process, key decisions made, and goals overview.

Goals

  1. The first goal for this bounty was to build your own version of a WeaveMail client. My submission is a completely new and improved platform built keeping in mind the basic principles of the WeaveMail protocol (and complete backwards compatibility), and catering to an audience coming from a Web 2.0 background. The client significantly improves loading messages speed, and the UI is new and fully mobile-responsive.
  2. The second goal for this bounty was in regards to the WeaveMail UI. Weve has been built from scratch, using no external UI/CSS frameworks (in pursuit of reduced dependencies and fast loading). It is built adhering to modern ReactJS practices, and the UI/UX emulates that of a conventional email client (to simplify on-boarding for new users and those familiar with Web 2.0 email clients).
  3. The third goal for this bounty was in regards to incorporating existing features and new features. Weve is a fully-backwards-compatible client implementation, meaning it works with the original WeaveMail application without a hitch. All existing functionality of the original WeaveMail client has been implemented. In addition to existing functionality, significant additional functionality has been added, as discussed in the Highlighted Features section.
  4. The fourth goal for this bounty was in regards to deployment on the permaweb. Weve has been deployed to the permaweb for ~a week now, and is accessible at http://weve.email.

Criteria

  • Submissions must be your original work.
  • Previously published dApps aren't eligible to participate in this bounty.
  • You must make your full source code available over Github and it needs to include an OSS license. Which one is up to you.
  • Complete all the goals set in the Goals section.

Highlighted Features

  1. Simplified/familiar UI/UX.
    Simplified UX

  2. Session-based keyfile storage.
    Session-based keyfile storage

  3. Markdown-extensible message bodies.
    Markdown-extensible message bodies

  4. Session-based mail drafts.
    Session-based mail drafts

  5. Sent mail outbox.
    Sent mail outbox

  6. Mobile-responsiveness.
    Mobile responsiveness

  7. Additional mail functionalities (quick reply, download raw content, save draft, delete draft)
    Download and reply
    Delete and Edit

  8. Live mail confirmation tracking with a notifications panel
    Live confirmation tracking

  9. Improved error handling via toast notifications
    Error handling via toast

  10. Direct add email receiver via URL (a.k.a quick-links to send individuals mail), with /inbox/to=address format.
    Direct add links

  11. Experimental: Contacts
    Contacts

  12. and much more...

Community Feedback

To gauge as much community feedback as possible, I released beta versions of Weve to the Discord community early-on. In this way, I was able to collect valuable feedback from users, hands-on, and implement it directly towards application improvements. Some of the feedback I iterated upon included:

  1. Virtualizing inbox list to improve performance for users with >100 mails in their inbox (kudos @tiamat).
  2. Cached transactions post-first-load to reduce network requests and improve performance (kudos @SystemWizard).
  3. Added an outbox (aka sent page) to show outgoing mail transactions (kudos @tiamat, @woombash).
  4. Added error handling for insufficient balances (kudos @dwrx).
  5. Updated text copy of keyfile upload to make more user-friendly (kudos @woombash).
  6. and more... (you can see full changelogs in the weavemail-client channel in Discord)

Significant design decisions

  1. The first significant design decision that I analyzed was prompting the user to confirm the transaction fee (validation) when composing a mail. In earlier beta versions of Weve, the user would be prompted to confirm the fee that they were paying for sending a transaction. Upon analysis, though, I found that at any given point of time, the cost of sending even a large markdown mail would be minimal if any (in the 1/1000s of a cent, at least at current permaweb usage benchmarks). Thus, to reduce friction and make the experience as seamless as possible for an average Web 2.0 user, I've removed the fee validation.
  2. The second significant design decision that I analyzed was the use of sessionStorage vs localStorage. In my opinion, a large majority of individuals working on this bounty will have likely opted to use localStorage. After conducting some research, and asking various individuals their preference through Discord, I found that localStorage is a very insecure means of saving secure keyfile data. Since it is exposed to every single website, and lasts for the complete browsing session, any malicious website can easily retrieve your keyfile from storage. As such, saving data like the keyfile and mail drafts in localStorage could prove to be harmful for user security. As such, I opted to use sessionStorage instead which is limited to a browser-tab and domain scope, significantly increasing the security of the users data. Although it adds some minimal friction (the user has to re-upload their keyfile should they close the tab), it is well worth it for the added security.
  3. I debated adding an account page to weve, but ended up choosing against it. The only information I would be able to show on an account page would be an individuals address and their wallet balance, which I felt were not necessary and would retract from the core-focus of the mail client.
  4. Experimental feature: Contacts. This is an experimental feature I choose to include, which lets users save frequent addresses as contacts (that they can easily send mail to in the future). It uses a repository account (a.k.a, when you create a contact, it sends a transaction to the repository from your account). This is currently experimental since it requires significantly more testing before I am happy with its functionality. For the time being, though, it is fully operational (albeit without encrypting the contact data with your public_key, so be careful if you're linking names to addresses—it will be public to the complete blockchain should they choose to parse it).

Conclusion

I had a great time working with the Arweave team, building on the permaweb, and finishing Weve. I'm looking forward to continuing development! Thanks for running this bounty!

The winners will be announced tomorrow 28th May. Stay tuned 🚀

Issue Status: 1. Open 2. Started 3. Submitted 4. Done


The funding of 2000.0 DAI (2000.0 USD @ $1.0/DAI) attached to this issue has been approved & issued to @Anish-Agnihotri.