Inspiration
In some places in the world, parents still choose couples for their daughters and sons. No one cares whether they love each other or not. I’d like to give such people a choice, so that their happiness would not depend on other people’s decisions.
My wife and I wanted to register our marriage as quickly as possible but it was not feasible in our home country because of the state rules, so we had to wait for two months in the queue. I want people like us to be able to register their family when they want it regardless of the rules that the state enforces.
I have a couple of friends who had to go to Copenhagen, Denmark to sign their marital agreement because same-sex marriages were absolutely illegal in their home country. I’d love people to be able to get married without the need to go to another country for that.
I believe that current family registering approaches are wrong and I want to challenge them. That’s why I came up with the idea of MarrySign, a platform for registering marriages online, on Blockchain, fully transparently and openly.
Similar to how cryptocurrencies extend our freedom, MarrySign gives us freedom of choice with whom, where and when we'd like to build families despite other people's opinions.
No need to wait in the queue for two months or ask for approval from any people or institutions. We accept any couple at any time. The only thing that matters is the couple’s sincere wish to become a family, and we take care of the rest.
When I was asked by a hackathon mate, would I implement this idea in the real world? I answered positively without thinking. In fact, I’m already building it for the real world.
What it does
MarrySign is a responsive web app that lets any couple get married online. Thanks to the Blockchain backend, the marital agreements are publicly accessible, verifiable and indestructible.
Life is life and a partner can change their mind. For that case, we provide an ability to terminate their marital agreement. However, the terminating partner should pay a pre-agreed compensation to the opposite partner. MarrySign deducts 10% of that compensation as a service fee. Everything else is free on the platform (except moderate gas fees for data changes, of course).
How I built it
The first couple of weeks were dedicated to the backend (Solidity contract). I wrote automated tests for everything using the Hardhat framework, so the development resembled the TTD approach. Learned a few Hardhat starters and borrowed the best pieces from them. Watched a few very relevant sessions given by Chainlink guys and partners. Learned a lot actually.
Next three weeks were spent on designing and developing the frontend (Figma, React, Next.js). Here is where I could demonstrate my passion for front-end development.
When I was Integrating Chainlink PriceFeed during the fifth week, I suddenly realised that it’s not enough to qualify for prizes, so I had to quickly integrate V3AggregatorInterface into my contract. Developed a Solidity library (CurrencyConverter) which communicated with Chainlink and got the latest currency exchange rates.
As it usually happens, everything worked perfectly on my local machine using MochV3AggregatorInterace and Hardhat network, but real work began when I deployed the contract to Goerli network. Had to fix a few hard-to-debug issues, to name a few: number overflow, underflow, insufficient balance. Had to search for more GoerliETH faucets because Chainlink’s one was not enough.
Finally, it makes sense to mention that the project has been built in public. Here is a Twitter thread where I shared my progress and insights starting from brainstorming ideas to launching the app https://twitter.com/kkomelin/status/1572157121214685184
All code is open-sourced here https://github.com/kkomelin/marrysign and https://github.com/kkomelin/marrysign.com
Most of the assets are developed by me in Figma https://www.figma.com/file/fatlcezjL29UUBWS72SKXu/MarrySign-assets?node-id=0%3A1&t=I15MBXpTDBcbP4Uq-1
The contract is on Goerli https://goerli.etherscan.io/address/0xCce4880C3DAf296d87FE710953E12D008608C6A2
And the app is on Vercel https://marrysign.com/
Challenges I ran into
- Big numbers in JS are not fully supported, so I had to find workarounds and fix things.
- Lacking float numbers in Solidity made me rethink some calculator logic.
- It was hard to debug contracts on the Goerli network because of lacking sufficient GoerliETH balance.
Accomplishments that I’m proud of
- I’ve built my first Web3 app which I believe addresses real world problems and contributes to the common good.
- I’ve given unique shareable urls to agreements with my custom algorithm
- Invented my own unique design. None of it has been copied from others. I’ve just unleashed what was inside me.
- I’ve made the app mobile-friendly because many people in the world still don’t have desktop computers.
- I’ve decided to store partner's data inside the Agreement.content field in JSON format serialized to Bytes, which makes it possible to extend the data with new fields in the future without deploying a new contract. For example, we could extend it with IPFS CIDs of couples’ pictures.
What I learned
- How to develop, test and deploy Solidity projects with Hardhat.
- How to integrate with Chainlink services at the frontend and backend levels.
- How to treat big numbers in JS.
- How to work with float numbers in Solidity.
- How to deploy contracts to a real network.
- How to verify contracts and analyse what’s going on with a contract through Etherscan.
- How to connect different wallets and networks to a web app.
What's next for MarrySign
- Fix known issues (agreement termination doesn’t work on Goerly, agreement wizard UI needs some more love, etc.).
- Deploy to mainnet.
- Start customer development and try to find product market fit.
- Support multiple marriages by the same person (for Arabic countries for example).
- Support more networks.
- Make it possible to upload partners’ images. A marriage is about happy pictures for good memories, so IPFS or some other storage could help us.
- Since the front-end part is totally static, it’d be good to upload it to some decentralised hosting, e.g Arweave.
- Develop a mobile app.
- Add templates of vows in different languages/religions/cultures.
- Make the interface multilingual.
- Implement email and push notifications.
- Make it possible to share an agreement via social nets.
- Generating the list of accepted agreements for the frontpage is resource-consuming operation, so it may exceed network limits which may cause the list to not appear. We need to either optimise it or cache it somewhere off-chain.
- We use Chainlink Price Feed at the frontend and backend level. On the frontend, the agreement termination depends on it heavily. But we use it without signing up for the service, which means no guarantees provided. So it’s necessary to develop a fallback system at the front-end level to stay operational in case of the unexpected.
- Add a service worker to improve performance on slow networks (PWA). Improve Lighthouse score (performance and TimeToInteractive in particular).
Built With
- blockchain
- chainlink
- ethers.js
- hardhat
- headlessui
- next.js
- rainbowkit
- react
- solidity
- tailwind
- typescript
- wagmi



Log in or sign up for Devpost to join the conversation.