IPFS Forms as a service

Description

Build a small library, ipfs-forms, that allows the user to submit form data

User Impact

Who would want to use this and why?

Static site builders use forms as the first backend feature they need that makes them pick a hosted service or write server side code to store and work with the data.

More generally, forms are the fundamental building block of app data collection. This basic beginning can be used to store data in IPFS, which can then in turn be used to query and visualize for different IPFS connected apps.

IPFS forms lets site builders use IPFS for form collection without needing another backend service.

Background

FISSION Form Handling

For many websites, basic form handling is one of the first features that needs backend services.

Contact forms, email signups, RSVPs, and similar functions are implemented as either JavaScript widgets that submit to third party hosted services, or a chunk of PHP or similar code that runs on the server.

That submitted data is then emailed to the site owner and/or submitted into a backend service that has a view which allows browsing of tabular data. CSV export and Zapier integration for further processing and connection into other systems are some typical features.

Storing form data on IPFS

Initial sample forms should include email subscription (name + email), contact (name, email, message), and RSVP (name, yes/no, optional email).

Features

Encrypted form data

Data is stored in plain text on IPFS. Initial PoC of this could store in plain text, but we should quickly move to app encrypted.

Tabular Data view and CSV Export

It is likely that we will store submitted form data as JSON objects (in a directory?). Submitted form data can be seen as an append only log.

Convenience functions should allow for outputting / viewing submissions as tabular data. In addition, from this view we should be able to generate a CSV version, which in turn can be stored in IPFS as well.

Zapier Integration

This may be a useful feature to hook into a number of FISSION services. This needs to be implemented in a general way (eg on pin of new CID) beyond just this library, so out of scope / future feature for now.

On submit of data to FISSION IPFS and point, would trigger Zapier integration. Will also need to pass form data / key-value pairs in a way that Zapier can process individual form fields.

Look at Cloudflare Workers as another place to store this sort of data. Compare / contrast with IPFS.