Formsify | Let's Create Better Forms 📋
Project Links 🔗
📌 Website (formsify.vercel.app)
🌐 Twitter (@formsifying)
💻 GitHub Source Code: Web3 App | Smart Contract
Formsify In A Tweet ✒️
Your forms are Good, but they can be Better 💯
👉 Formsify helps you in creating better forms, which are Decentralized, Trustless & Distributed.
Project Evolution 🚀
👉 All the below links show the evolution of project - from building idea to shipping features and finally current state.
Inspiration 📌
👉 Currently available "Online Survey Services" are Centralized, Trust-Based & Dependent.
" Thus, we have challenges of Integrity, Transparency and Accessibility. "
🔎 Let's have a discussion on the problems and drawbacks of Online Survey Services
1. Integrity 🤝
Definition 👋
The quality of being honest and having strong moral principles.
Problems 💢
How do you make sure 👇
- that the server which holds your information wouldn't be compromised?
- that the platform which holds your forms, wouldn't go down?
- that the system which holds your data, wouldn't betray you?
2. Transparency 📋
Definition 👋
Operating in such a way that it is easy for others to see what actions were performed.
Problems 💢
How do you confirm 👇
- that your data was unaltered?
- that your forms were fair to all respondents?
- that no-one filled forms on behalf of others?
3. Accessibility ✅
Definition 👋
The information that the user needs must be perceivable to them.
Problems 💢
How do you ensure 👇
- that your data will be accessible, even when system goes down?
- that your forms can be independently interacted with at all the times?
- that access to your information cannot be revoked?
What Formsify Does 💯
👉 Formsify helps in creating Decentralized, Trustless & Distributed forms by giving each form their own digital identity in terms of smart contract and storing them on-chain.
" Thus, we address the challenges of Integrity, Transparency and Accessibility. "
🔎 Let's have a discussion on how Formsify solves the problems and drawbacks of Online Survey Services
1. Integrity 🤝
We make sure 👇
- that your data is decentralized and therefore, it remains uncompromised because there isn't any single point of failure.
- that your forms are platform independent and the interface can be re-built by anyone if we go down.
- that the system isn't controlled by any single entity, therefore betrayal isn't possible until majority of the network gets compromised.
2. Transparency 📋
We confirm 👇
- that data is immutable by storing it on Blockchain.
- that your forms are unbiased in all scenarios by ensuring that they cannot be altered.
- that no-one can fill forms on behalf of others, until and unless respondent's wallet is compromised.
3. Accessibility ✅
We ensure 👇
- that your data is accessible, even if go down by storing it on-chain.
- that your forms can be independently interacted with by representing them as separate smart contracts.
- that access to your information cannot be revoked because no single entity can stop you from accessing it.
Improvements in Web3 Ecosystem 🌐
1. Accountability ❗️
Respondent cannot deny, once their transaction is recorded on-chain which makes them accountable to their responses.
2. Spam Infeasibility ⚠️
Since each form submit will be backed by some amount of gas, it makes the intention of spam entries infeasible in a long run.
3. Independency ☑️
Forms are unbiased and have their own digital identity which cannot be tampered with.
How We Built It 🧱
Each form is represented as an indiviudal smart contract The Smart Contract has following main features:
- Owner (Form Deployer)
- Fills (Total fills of the deployed form)
- maxFills (Maximum fills that are allowed per form)
- startTime and endTime (Opening and closing times of form)
- allowedTotalFills (Number of fills allowed per user for a particular form)
- formHead (Headers of the form which includes the initial parameters of heading and description)
- fields (Question fields of the form)
- records (Stores responses of the deployed form)
- filledRecords (Tracks fill id and total number of fills of a particular address)
We had to make sure that each form response, although stored on-chain, would still remain unreadable to ensure data privacy.
- We achieved it using AES Cryptography, where key of each form would be unique, generated using react-uuid and encryption-decryption is carried out using crypto-js.
App is based on following:
- made using React
- styled using Tailwind
- designed using DaisyUI
- data is stored on Firebase
- chain on which forms are stored is Polygon
- connect wallet funtionality is abstracted from RainbowKit
- chain APIs are fetched from Alchemy
- web3 app is deployed on Vercel
Challenges Tackled Down 😎
- deploying smart contracts from frontend
- synchronizing block time and local time of forms deployed on-chain
- maintaining data privacy while storing data on-chain
- cryptographic encryption and decryption of fetched form data locally
- setting form parameters of smart contracts to ensure fill frequency and limits
Accomplishments 😇
👉 Formsify has been a part of 🦄 Buildspace's Nights and Weekends Program - Season 1 and was also presented under their "Demo Day" held on 6.8.2022
What We Learned 🎓
Added the following learnings to our portfolio:
- Pre-planning of solution before coding does matter. (We learnt it the hard-way. 😅)
- Making separate components helps in saving a lot of development time. (Reusability is highly underrated! ⌛️)
- Take proper backups before forcing a git repo to commit back to previous release. (Just in case you mess up like us, there is a command called 'git reflog', use it wisely. May the force be with you! 🌌)
- Things which work locally, can create serious problems after deployement, if left untested. (What happens on localhost, stays on localhost. 😬)
- Conduct experiments on a trial project before breaking up the main code. (Breaking & fixing is the endgame after all. 😌)
What's Next For Formsify 👀
We are looking forward on the inclusion of following features:
- make dynamic smart contract creation based on forms
- include more customization options
- have forms record information as solitary variables instead of a JSON string
- provide saving & editing functionalities for form respondents
- add editable smart contract functions for after deployment changes
Contact 👋
Uday Khokhariya
- Twitter - yupuday
- Email - uday.khokhariya@gmail.com
Built With
- alchemyapi
- daisyui
- ethersjs
- firebase
- fluentemoji
- rainbowkit
- react
- reacttoastify
- tailwindcss
- vercel
- wagmi
Log in or sign up for Devpost to join the conversation.