RFC: ComposeDB Visual IDE + Node-as-a-Service

Hi Ceramic Comunnity, I am Liang, founder of US3R Network and I am looking forward to any early feedbacks on something we have been working on to improve DX of building with ComposeDB/Ceramic:

The idea is to enable devs to:

  1. create models or explore & reuse models AND
  2. deploy them to node
    Without touching cli tools or running servers.

This is an effort to consolidate products we built previously into one coherent workflow:

  • scan.s3.xyz
  • console.s3.xyz

@msena @mzk

@msena check this out

  1. deploy node
  2. query
curl https://api-dev.s3.xyz/ceramic-instances/c45920ed234fddb28ab84da0b39b0c9ec93580e8f4cbaf6752d6849dba82878d/api/v0/streams/kjzl6hvfrbw6c8qj2r0l59n7zu6g1i7bdw6nswexyy3gbpybn6pllxhqfn9dud3\?sync\=0

response

{
   "state" : {
      "anchorProof" : {
         "chainId" : "eip155:100",
         "root" : "bafyreieqz726v3zfwavdq544dav5mxkm3gfd2l3bwinzbyg4sttd2lbdde",
         "txHash" : "bagjqcgzahgprr43viggn5rosysq4ltdsrhu3bcxik57dmzneugviuj32doda",
         "txType" : "f(bytes32)"
      },
      "anchorStatus" : "ANCHORED",
      "content" : {
         "accountRelation" : {
            "type" : "single"
         },
         "description" : "profile for us3r-network v2",
         "name" : "Profile",
         "relations" : {},
         "schema" : {
            "$defs" : {
               "ChainType" : {
                  "enum" : [
                     "EVM",
                     "SOLANA",
                     "APTOS",
                     "SUI",
                     "ATOM"
                  ],
                  "title" : "ChainType",
                  "type" : "string"
               },
               "Wallet" : {
                  "additionalProperties" : false,
                  "properties" : {
                     "address" : {
                        "maxLength" : 60,
                        "minLength" : 20,
                        "type" : "string"
                     },
                     "chain" : {
                        "$ref" : "#/$defs/ChainType"
                     },
                     "primary" : {
                        "type" : "boolean"
                     }
                  },
                  "required" : [
                     "chain",
                     "address",
                     "primary"
                  ],
                  "title" : "Wallet",
                  "type" : "object"
               }
            },
            "$schema" : "https://json-schema.org/draft/2020-12/schema",
            "additionalProperties" : false,
            "properties" : {
               "avatar" : {
                  "maxLength" : 1000,
                  "type" : "string"
               },
               "bio" : {
                  "maxLength" : 200,
                  "minLength" : 3,
                  "type" : "string"
               },
               "name" : {
                  "maxLength" : 100,
                  "minLength" : 3,
                  "type" : "string"
               },
               "tags" : {
                  "items" : {
                     "maxLength" : 60,
                     "type" : "string"
                  },
                  "maxItems" : 20,
                  "type" : "array"
               },
               "wallets" : {
                  "items" : {
                     "$ref" : "#/$defs/Wallet"
                  },
                  "maxItems" : 20,
                  "type" : "array"
               }
            },
            "required" : [
               "name"
            ],
            "type" : "object"
         },
         "version" : "1.0",
         "views" : {
            "version" : {
               "type" : "documentVersion"
            }
         }
      },
      "doctype" : "model",
      "log" : [
         {
            "cid" : "bagcqcerasvsuzvrmmm5v25ecaunjhe5bxumxpifiyj2oxho4womfooa6v73q",
            "timestamp" : 1696844220,
            "type" : 0
         },
         {
            "cid" : "bafyreih5gh7z6wlihc3ujqqhphghiuhjsogtixednde5wywyba2mnimx6m",
            "timestamp" : 1696844220,
            "type" : 2
         }
      ],
      "metadata" : {
         "controllers" : [
            "did:key:z6MkmmK9GVwKfEmX4mJHcnQfiD76SSCy62N54bYXsdD5rLeG"
         ],
         "model" : "kh4q0ozorrgaq2mezktnrmdwleo1d"
      },
      "signature" : 2,
      "type" : 2
   },
   "streamId" : "kjzl6hvfrbw6c8qj2r0l59n7zu6g1i7bdw6nswexyy3gbpybn6pllxhqfn9dud3"
}

Thanks for the update @0xEE3CA4dd4CeB341691! Going to take a deep dive very soon and come back with some thoughts. In the meantime, would love to hear what others think about this workflow proposal.

Hello @0xEE3CA4dd4CeB341691 !

Just added a bunch of comments from my end - really looking forward to these new upcoming features!

1 Like

@0xEE3CA4dd4CeB341691 is there anyway to get access to a figma file or something so I can drop comments on the screengrabs? That’d likely be the easiest way for me to give feedback on finer details.

In general though, I really like this user flow that starts with just one click getting a ComposeDB node up and running with a template set of models/composite indexed and then having that node follow the user along their journey all in a visual interface. I think this has been missing from ComposeDB for a while now!

you should be able to comment in the notion doc. does that work?

  1. We got the “running node” part working as shown in the demo above.
  2. Just need to integrate the new “node” feature with existing visual workflow, which was using our own node previously.
  3. Deploy or index a template set of models/composite should also be rather doable once we get #2 working

Thank you for all the valuable feedback!

Looking forward to our virtual zoom review later today. This flow is really coming together for ComposeDB developers.