···1414</html>
1515```
16161717-Suppose it was the only piece of HTML you've ever seen in your life. If you had complete freedom, which features would you add to HTML, and in what order?
1818-1919-How would you reimagine the *HTML itself?*
1717+Imagine this was the only piece of HTML you've ever seen in your life. If you had complete freedom, which features would you add to HTML, and in what order?
20182119---
22202323-### Components
2121+### Tags
24222525-Personally, I'd like to start by adding a way to define my own custom HTML tags.
2323+Personally, I'd like to start by adding a way to define my own HTML tags.
26242725It doesn't need to be complicated. We can just use JavaScript functions:
2826···3836}
3937```
40384141-We'll specify that *sending* HTML involves unwrapping all of these custom tags:
3939+To make this work, let's say that whenever the HTML is sent over the network--that is, *serialized*--all custom tags get replaced with the output of their functions:
42404341```js {3}
4442<html>
···58565957---
60586161-### Props
5959+### Parameters
62606361Functions take parameters.
6462···1009810199Objects let us group related stuff together.
102100103103-Suppose we wanted to *send* this HTML. First, according to our specification for custom tags, we'd have to replace all custom tags like `Greeting` with their output:
101101+Suppose we wanted to *send* the HTML above to the browser. The first step, as we specified earlier, would involve replacing custom tags with their output:
104102105103```js {3,4}
106104<html>
···199197}
200198```
201199202202-Actually, this looks a bit repetitive--let's have `Greeting` itself do the `readFile`:
200200+Actually, this looks a bit repetitive--let's move the `readFile` *into* the `Greeting`:
203201204202```js {3-4,8-10}
205203<html>
···241239}]
242240```
243241244244-(which, as you might recall, can always be converted to the "real" HTML:)
242242+(If we wanted, we could then convert this JSON into the "real" HTML:)
245243246244```js
247245<html>
···252250</html>
253251```
254252255255-But it's nice to think of it like this:
253253+But note how our original "imaginary HTML" allowed us to *name* this concept:
256254257257-```js
255255+```js {3-4}
258256<html>
259257 <body>
260258 <Greeting username="alice123" />
261259 <Greeting username="bob456" />
262260 </body>
263261</html>
262262+263263+async function Greeting({ username }) {
264264+ // ...
265265+}
264266```
265267266266-These are self-contained abstractions that can load their own data.
268268+It allowed us to create a [self-contained abstraction](/impossible-components/#local-state-local-data) that loads its own data.
267269268270Cool beans!
269271