Skip to content
This repository was archived by the owner on Jan 6, 2025. It is now read-only.

Milestones

List view

  • Checkbox during sign up: I have read and understood the Terms of Service. Disclaimer at footer of personal form page: All customizations/opinions/images in this page have been set by the [user](github user id). Easyform denies any liability.

    No due date
  • file.io transfer.sh 0x0.st custom-url 1pt.co spoo.me -- this even allows password protection. so may be used for sign in ?

    No due date
  • https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules#loading_non-javascript_resources importing means no separate fetch is needed

    No due date
  • No due date
  • No due date
  • hidden form submits automatically (using document.getElementByID(formID).submit()) when someone opens the user's presonalized page (i.e. onload and when sessionStorage is empty meaning its not a reload). `server.js` parses this and adds to the page view count. This may be made general purpose as a JS library that can be used simply as a "page view counter" to be embedded in any HTML page.

    No due date
  • Inbox contains separate sub-inboxes for each `from = <originID>`. Each sub-inbox contains its own unread msg count.

    No due date
  • Use jsdelivr and release tags to cache the js and css in CDN in production. Deploy from production branch.

    No due date
  • Personalized contact form page uses [localStorage](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage) to enable visitors check on in later to see if the user has responded or at least get a read receipt. Requires Securelay one-to-one key-val store for this.

    No due date
  • [docs](https://docs.github.com/en/apps/creating-github-apps/authenticating-with-a-github-app/generating-a-user-access-token-for-a-github-app#using-the-web-application-flow-to-generate-a-user-access-token) and [tutorial](https://docs.github.com/en/apps/creating-github-apps/writing-code-for-a-github-app/building-a-login-with-github-button-with-a-github-app). Use [@octokit/core.js](https://github.com/octokit/core.js) or [@octokit/request.js](https://github.com/octokit/request.js/) framework [modules](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules) for interacting with the GitHub API. Don't write your own code for this. Authenticate the single-page-app (EasyForm) on GitHub as the user to create a private repo and a public gist. Use [localStorage](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage) and sessionStorage, if not cookies, to hold on to the GitHub API auth token. Use a *Keep me logged in* checkbox. Data in the private repo is meant for the EasyForm webapp itself. So, add received form data to the private repo, say, as comments. Also store the user-settings including the GET API URL and the public gist URL in the private repo. Data in the public gist is meant for to be used by the user's personalized form page, which is also a single-page-app. But only the EasyForm app can edit this gist. Public gist contains the form action or POST API URL. If comments are included, then add the received comments to the public gist file after taking out the commenter email from the form data. The gist also contains the avatar (logo/image), custom text and socials for the personalized form page. URL for user's personalized form page: https://somajitdey.github.io/easyform/public-gist-url. This is to be served by a SPA 404 page which will read the window.location path and act on it.

    No due date
  • A great way to compress any data/information is to use URL shorteners! You don't need to upload/fetch any file or post-to / query-from any database. Just: - take your `minified JSON` and turn it into a URL safe base64 string. The length of this string can be as big as [this](https://stackoverflow.com/questions/812925/what-is-the-maximum-possible-length-of-a-query-string). - make a dummy url like `http://dummy.com/<the base64 string>` and shorten it using any URL shortener. - save the unique path of the shortened url as your key. To get all the data back from the key make a fetch to the url shortener using the key as the path and just parse the response for the redirect url. Therefrom, you get your base64 string and in turn, your data. Use this principle to create an EasyForm private key that would compress the following: - Telegram Bot API token (Dont store chat ID as it may change. It can always be fetched JIT). - form action url. - EasyForm Public key. - Optional RSA private key for decryption of encrypted form data. This way, the user only needs to set up EasyForm just once, generating a *tiny* EasyForm Key. The EasyForm Public key compresses the following (all things public): - form action url - picture/logo/gravatar (google drive link!) - socials (X, FB, Instagram, GitHub, ORCID) - Custom Heading to EasyForm form page - Optional RSA public key for encryption of form data. The EasyForm form.html takes the public key from its window.location query string and retrieves all the data for dynamic content generation/modification. Shows gravatar / logo / image in card as well as socials and the custom blurb written by the user. User's user data is safe in transit if encrypted. EasyForm form.html actually becomes a microsite by this.

    No due date
  • Use a hidden iframe as target of the form. Show form submission success alert without verification on submit. Or, better yet, `try` / `catch` a time constrained fetch to piping-server's hash(email) path. EasyForm shall make a time constrained POST to that URL upon receiving the submitted data and parsing it. If the fetch succeeds, show form submission success. Otherwise, show failure alert. Time constraining may be achieved using JavaScript [AbortController](https://developer.mozilla.org/en-US/docs/Web/API/AbortController).

    No due date
  • Checkbox to email client an acknowledgment of receiving the message. Config requires API key for POST to sendgrid, as well as the email text.

    No due date
  • Validation is alright. You are not sharing your user's email with anybody. But verification, be it using OTP or by simply looking at deliverability using a 3rd part API depends on policy. Do you really want to share your user's data with 3rd party? Provide a checkbox if 3rd party email verification is required to filter out spam before sending to Telegram. Check out [this](https://medium.com/@phone-email) for a free OTP based email API provided by [phone.email](https://www.phone.email/).

    No due date
  • Comment HTML, CSS and JS. Detailed working principle in Readme.

    No due date
  • Ask community, in Readme, for reporting such projects through Discussions.

    No due date
  • Build a new backend API that works like [piping-server](https://github.com/nwtgck/piping-server?tab=readme-ov-file#transfer-to-multiple-receivers), but for multiple senders (POST) aggregated to single receiver (GET) stream. POSTs are restricted to contain only text data of < n bytes size. Aggregation happens based on concurrency of POSTs and not the number of POSTs. If new POSTs arrive before the first POST ends, only then are the new POSTs appended to the GET stream. The GET stream is closed when all concurrent POSTs close. API interface should concur with piping-server, to be usable by EasyForm. Build on [go-piping-server](https://github.com/nwtgck/go-piping-server) code. Or, write in Python using flask /fastapi. Or write in NodeJS fastify framework. Host on Glitch or [alternatives](https://support.glitch.com/t/temporary-glitch-alternatives/26915) like Vercel. Or, self-host using ngrok exposure. If it can be hosted on services like Glitch for free, then anybody can host - resulting in much needed redundancy. Provide as package or docker for the willing ones to self-host.

    No due date
  • Auto replace FormActionURL in the code snippet with actual URL emitted by config.

    No due date
  • Post user comments/messages to some database API. Google sheets? User's page can now show other users' comments too! Like [Disqus](https://disqus.com/), but safer. Like [Commento](https://commento.io/), but easier.

    No due date
  • Small file storage URL provides JSON: { "key": "<Telegram Bot APIKey>", "chatID": "<chatID>"]

    No due date
  • Form data input validation.

    No due date
  • For all pages. Floating.

    No due date
  • User is given a personalized contact page with same origin as EasyForm and path = github userID. It is a single page app, or website, containing at least custom text, avatar, socials, status and even blog posts. Comments may be enabled in this personalized page too. In that case the above-mentioned storage contains all past contents to be retrieved and displayed dynamically. One good way to deal with this is to use 404 pages on the easyform github page website. Visitors can opt for "I prefer to be contacted by Phone | Email | Whatsapp | Telegram" or "I will check on this page later". Visitors to this page are shown message delivery status on form submit. They can also come back to see if there is any reply from the owner user. This is achieved using localStorage (shared by all ready form pages thanks to their same origin) and a random but unique visitorID=UUID. As long as the vistor's localStorage survives they can see their chat history with the owner. Because a visitor can simultaneously visit personalized pages of multiple github users, their localStorage stores their chat history as values to github user ID keys. Use cases: - personal website - "Contact (vehicle) owner" sticker with QR code of the URL.

    No due date
    1/1 issues closed