Something cool I've been working on recently: I made a “Type” keyword in the viewer’s VM, so that you can write `const type = Type.get(${accountId}/type/${Thing})` within a Widget in order to get an object schema from the Social contract. This schema can be used to describe data and the widgets used to create or display it. It can look like this: ```json { evrything.near: { type: { Idea: { properties: [ { name: "title", type: "String", required: true }, { name: "description", type: "md", required: false }, ], widgets: { summary: "evrything.near/widget/Everything.Summary.Idea", view: "evrything.near/widget/Everything.View.Idea", create: "evrything.near/widget/Everything.Create.Idea" } } } } } ``` So, for example, if you go to https://temp.everything.dev; every component in the “Masonry”-like grid is a Summary Widget representing that data’s Type... and that data can be on-chain or off. This means that data can be predictable; and if data is predictable, then Widgets can be predictable, too. Not only could you customize the view of any individual piece of data — you could automatically generate the widgets necessary. ### Walkthrough Open the editor: https://temp.everything.dev/#/editor Create a new type (such as “Article”) then describe it with some properties and those property’s types. If you select to auto generate, then three widgets will automatically be created: * {accountId}/widget/**Everything.Summary.Article** — small view, shows up on Everything.MainPage * {accountId}/widget/**Everything.View.Article** — large view, shows up when you click the Summary * {accountId}/widget/**Everything.Create.Article** — creator with necessary inputs, textareas, image uploader, etc…. In order to create data of Type: **{accountId}/type/Article**. The Summary and View are basic templates already provided with data through the [Everything.Summary.Thing](https://alpha.near.org/#/calebjacob.near/widget/ComponentDetailsPage?src=evrything.near/widget/Everything.View.Thing) component and the basic elements necessary to display it. The last widget (Create) is automatically tagged with "everything-creator", and so you should be able to view it as an option here: https://temp.everything.dev/#/create. Go ahead and click your new widget to create some data. Once created, you'll see it as a new "Summary" Widget that appeared on the main page. If you click the summary widget, you can view the data alone on a page. If you want, you can go ahead and edit/style either widget to change how this data is displayed. In the default Create template, the data is stored on chain, so that means it is permanent... and while Types can change, this data will stay the same... To address this, something like saving Widgets w/ their block heights for versioning would be helpful. OR data could be made editable by saving it off-chain such as done [here](http://localhost:3000/#/evrything.near/widget/Everything.View.Thing?src=evrything.near/widget/Everything.View.Idea&accountId=evrything.near&blockHeight=87749882), and so it can always adapt whenever a Type is updated. Not only that, but I think there are a lot of opportunities for integration with a decentralized storage provider like [On Machina](https://www.onmachina.io) or [Verida](https://www.verida.network/ecosystem/near), such as allowing customizable and granular data privacy among other things. Pretty cool, right?