CryptoWeddings DApp

Features

Marry on Blockchain
leverages immutable smart contracts to declare marriage status that cannot be changed/censored by anyone but the two participants through mutual agreement.
Watch Wedding Live
Smart contract events are picked up in real time so that viewers around the world can see the wedding happen in real time.
Send Wedding Gifts with Messages
Messages for couples can be sent via contract events. (Can be muted/filtered client side by the wedding owners (couple/fiances)).
Set Wedding Photo
Save wedding photo location on smart contract.
Divorce (if needed)
Destroy wedding contract through mutual agreement.
Integrated Wallet using Ethers
No need for MetaMask. Users can use either integrated wallet built using ethers, or MetaMask.
Live Contract Events
All important data is updated in realtime through contract event listeners.
QR Code Scanning for ease of address use
Handling ether transfers for gas or adding fiances to a wedding is easy when using qr codes. No need to type in long addresses!
Voice API (chrome only) to say "I do" or "I don't"
Really capture that moment by actually saying the words rather than just pressing a button.

Languages & Frameworks

Javascript
Used for dapp
Vue
Used for dapp
Vuex
standard state management library for vue
Ethers
A more stable and bug free way of connecting to the ethereum blockchain.
Vuetify
Uses Vuetify to implement a reasonably good looking ui quickly
Aws
hosted and deployed via aws s3 bucket.

My First Personal Project Decentralized Application

While talking with my wife one night, we came up with this idea. She took care of the designs and I took care of the smart contracts, and DApp.

Great Practice

The original version was built while I was working at Brickblock. A lot of the patterns that I decided to use, I eventually implemented in the Brickblock platform.

The Rewrite... and Taking it to Mainnet!

The first version was built in 2017 but never got deployed to mainnet. Once when my wife and I decided to have a wedding ceremony, I decided to rewrite the whole thing from scratch. I had learnt a lot more about smart contract and dapp best practices in the two years since the dapp was originally built!

The dapp was rebuilt, launched on mainnet, and used by myself and my wife on July 10th 2019. The wedding was streamed on twitch and gained a bit of media attention. We had an interview on blocktv.com.

Most of the development process, from contract rewrites to client development, was streamed live on twitch.

Useability as a focus

While creating this dapp, I really tried to focus on useability. I ended up building my own wallet implementation in the browser instead of forcing users to install MetaMask, though it is still an option to use it if desired.

The wallet's private keys are kept secure by being encrypted via password in local storage on the browser. Private Keys are retrieved through mnemonics, which the user is prompted to write and down and back up.

I also tried to create as uninvasive of a user flow as possible. This means only prompting the user for an account when one is really needed.

Evolution of patterns

Many of the components and user flow is an evolution of my work on my earlier pet project: rps-ethereum. You can find many less well thought out implementation of these concepts in that project.