This contact form

use Aiflo as a backend. The code is realy simple just a few lines of Aiflo code. It collects the input form data and store it in firestore. // The highligted parts are comments explaining what happens and not part of the code as JSON do not allow comments.

[
  // This node handles the external inputs
  { 
    "type":"inputs", "then":[
    { 
      // Sends { "name": "name entered" } to node 'message'
      "target": "message", "value":"name", "name":"name",
      // Validates that a string input of max length 50 is received
      "validate":{ "maxLength":50, "required":true, "ofType":"text" }
    },
    { 
      // Sends { "email": "email entered" } to node 'message'
      "target": "message", "value":"email", "name":"email", 
      "validate":{ "maxLength":50, "required":true, "ofType":"email" }
    },
    { 
      // Sends { "message": "message entered"} to node 'message'
      "target": "message", "value":"message", "name":"message", 
      "validate": { "maxLength":200, "required":true, "ofType":"text" }
    }
  ]},
  // This node assembles input as an object
  { 
    "name":"message", "type":"object", "then": [ 
      { "target": "message_store", "name":"__document" }
  ]},
  // The name of the collection in firestore
  { 
    "type":"text", "value":"aiflo-messages", "then":[
      { "target": "message_store", "name":"__collection" }
  ]},
  // Generates an UUID, ie 43efee2f-3453-4876-b694-a06f975b7eee
  { 
    "type":"uuid", "then":[
      { "target": "message_store", "name":"__documentID" }
  ]},
  // The firestore operation in this case 'set'
  { 
    "type":"text", "value":"set", "then":[
      { "target": "message_store", "name":"__operation" }
  ]},
  // This node stores the object in firestore
  { 
    "name":"message_store", "type":"firestore", "then":[
      { "target": "application/json", "type":"response" }
  ]},
  // Response
  { "name": "application/json", "type": "response" }
]