# David Dal Busco - Full Stack dApps, Zero Stack Stress

- Channel: [ETHCluj Meetup](https://streameth.org/ethcluj-meetup)
- Date: 2026-02-09
- Duration: 55:51
- Watch: https://streameth.org/watch/yt-6jk8eqLkoxU
- YouTube: https://www.youtube.com/watch?v=6jk8eqLkoxU

## Description

Still gluing together Web2 backends and frontends with a sprinkle of Web3? Drop the duct tape. In this workshop, I’ll show you how to build entire dApps that run fully on-chain using Juno on the Internet Computer.

We’ll pack a full app into a single smart contract—frontend, backend, storage, and logic—sealed, shipped, and running on decentralized cloud infrastructure. No glue code. No servers. Just Web3.

We’ll work locally during the workshop, so if you want to code along, make sure you have Node and Docker installed.

## Transcript

Okay, cool. So, thanks for joining this workshop. How about Juno? Um, my idea is um I just going to show you I don't want to be too boring. So, I just going to show you one or two slides so that everybody understand a bit how it works and then we start coding, right? And um if you want to follow along while we code, we're going to work locally. So you're going to need the CLI that we can install. That's not going to be too too complicated. But you need Docker Desktop or Podman to work locally. So just if you don't have it, right? Anyway, so let me go back to the presentation I just give like few minutes ago. All right. it. Oh, the the there is some problem with the Wi-Fi or it's just me. &gt;&gt; No, the internet is a bit bad in this &gt;&gt; in this room. Yeah. &gt;&gt; Yeah. &gt;&gt; All right. Uh yeah. So, I cannot show you the slides. All right. Uh yeah. All right. Um, that's a bit annoying. Um, yeah. &gt;&gt; Yeah, sure. If someone has a Wi-Fi to share. &gt;&gt; So, technically I can make the workshop without it. It's just to show you a bit some resources and the kind of things. And so, I should go to the All right. So, which one? &gt;&gt; Uh, yes. &gt;&gt; Thanks a lot. Server not food. That should be the one. Yeah. So just want to show you that. So basically Juno is not a chain. Juno provides smart contract platform tooling and so on and so on. But underneath it's the internet computer that's the power that's all the infrastructure right and there is no web two infrastructure is everything runs on the IC and that's like a slide that's going to be important for for for what we're going to do. The idea when you build on Juno is that me Davidid on Juno has absolutely no control whatsoever on what you do. So as a developer you get kind you get a smart contract a mission control that it's the name I gave it. It's basically a wallet and from there or from you you can spin project like satellites which what we're going to do. It's basically it's a container where you're going to put your front end and your back end inside right and that container is only controlled by your wallet and yourself. me I don't have any any any option to to come there and for example before I give that example like if you if we build the ETH cluge app we can put the old ETH cluge app within that container right and then your user access it here all right and that's what we're going to do all right so is anyone one following along when I going to code or I just do it and then you watch. All right. Okay. So, I will make this a bit bigger. It's better or it should be bigger. &gt;&gt; All right. It's not going to it's not going to be that much in the in the CLI anyway. So all right. So what I've prepared also if you go home and want to play a bit there is like a a repo GitHub Juno build workshop right and in the in the repo the readme is basically what we're going to do today. So you can also do that later and it's also a good way to get started if you want to understand how it works and so on. It looks like lots of step but actually it's not that much complicated. It's always the same once you know how it works. So I clone the repo work at CL and basically what we're going to do is we're going to build a note taking app right with some fun things inside. So I go there and I install the node dependency. So so far just standard JavaScript singy, right? and I will open it in my editor because we are not yet vip coding things but I will be really cool in the future if I can do the demo by v coding it I was thinking so it's the kind of like one of the next um things I want to do I want to provide some uh some rules that can help cursor and those kind of tools to better understand how juno works anyway So big enough. &gt;&gt; All right. You you tell if I should zoom anytime. All right. So if I follow a bit my my my uh my playbook, I'm going to use Docker as I say. You can also use Ponman if you want because we're going to work locally and We make the demo and afterwards I show you some example of what you can build. Right? Is it okay like that? Okay. So on my machine I got a CLI installed which I installed with npm build CLI. Right? So that's the CLI I provide. And once it's installed you can start something called June of start. And when you when you do that it launch a fully emulator on your machine. So this way you can work fully locally and only when you will be ready you can go to uh to mainet right and here I see that everything is already spins because I'm reusing like an existing container. So what I going to do because I want to start from fresh I just going to go in my so basically here I going to say I want to use docker but I want my container name to be workshop it cluge and here I just do that all right so let's start again that's a fresh start so now what is going do it's going to spin all the smart contract that we need to work locally. So it going to spins for example a ledger. It going to spins the internet identity which we going to use for the authentication or it going to spins like that mission control I told you about right and at the end you see there is like console started and this is because now when I go in my browser I have like the full Juno experience you see if I go to production &gt;&gt; is Juno like a scaffold is Juno like one scaffold thing. &gt;&gt; So Juno itself is um Juno itself is this one here is a is a is a smart contract and from there you can scaffold your own smart contract. &gt;&gt; Okay. So it's like a smart contract scaffold. &gt;&gt; Yeah kind of. Yeah. So just you see so that's production and that's local. So it's really same same and what we're going to do we're going to scaffold our mission control and then from there we're going to scaffold our satellite. So we going to I going to sign in locally to create this one and from this one I going to create one container from our project that we're going to build locally. So one smart contract one smart contract. Okay. So when I sign in, I have to create an identity. So identity is the that's the authentic the most common authentication provider in the IC. It's fully decentralized and this allow me to of course here we are working locally but I will use a pass key and this allow me to sign in on apps on the internet computer without the need to have a private key on my side. So I basically defer the the sign in to to that decentralized application. So I can sign in everywhere right and here you see I'm signing. So I have my mission control and now we going to create our satellite. So our smart contract to work. So it works. It spins. It's a bit faster locally but it's relatively fast on mainet too. Right. All right. So at this point here what we see here is is uh that's no where was I here. So here what I see is the overview the administration overview of that one. Okay. And when I spin it it doesn't come empty. I can already open it and then I have like a blank HTML page. So that means that this smart contract is already available on the web. When I open it, then I have links to go to the documentation and whatsoever. But it's not what we're going to use. All right, I'm going to copy that ID because now I want to start having my code that connects to that container so that can interact from my code to it. Right? And in my configuration just put the ID. All right. And now what I can do is I can start my app. All right. So if I go that. So that's typical developer experience I guess. So that's my note takingaking app, right? But what I did is like I commented all the pieces that are important in the app. This way we go through the the the pieces so that we understand oh we we build the bricks basically. So because you see here when I click sign in it doesn't work. So to have the sign in what we need to do is initialize Juno. So to do that I just do this. So it's a React app by the way. Uh this one I guess. Yes. So what it does it's at the top of your app you say initialize my application to work with the satellites. And because all the tooling is included and you have plugin and so on all the configuration is automatically automatically injected so that the ID that we used before is there and it's fine. You don't have to to configure it. And then the second things that you have to do is you have to uncomment a call back. So you don't have like to implement like a complex flow or whatever. Basically at the top of your app you have one function that going to give you the user is subscuated the user is locked out the user is there and so on. And then you can just react on it and then you add a sign in. So the same is like you get a function from the Juno SD card that is called sign in. You put sign in and boom you have your authentication. So if I sign in here you see now it works. And I use the same that we had before. And maybe there is one more step. Maybe not. Let me refresh. Yes, it works, right? And if I go back to my uh authentication or console, you see here authentication. Now I see that there is one person that was authentication in that local app and it's anonymous. So I just have identifier, nothing else. So it's like basically a public ID. I just see the public ID of the person that sign in. So yeah, if I logged in and do another one, you know, like here, if I create another identity, if I do I have a refresh button? Not yet. So if I refresh, now I have two entries, right? So and so on and so on. was the the hash of something the identifier &gt;&gt; um so on the internet computer you have that that that notion of is it called it's called principal which is basically a public key of the of the derived by your login &gt;&gt; and then that public key can be used for you can also use it as a as a wallet address too and the the thing which is bit particular is that everywhere you logged in it's a different ID because it's &gt;&gt; based on the ID &gt;&gt; uh based on the domain name &gt;&gt; and that's done because that way you cannot track P person so even if you use the same you you see I use that number when to sign in and I will use a pass key then that way you cannot be tracked because every time it's it's another principle and uh worth to note that right now I use that number it should be a key on a on on a in production. For example, if here I just going to show you if I or maybe not here, maybe there not good example. Maybe here. Yes. If I sign in here, you see then I have numbers again. And then when sign in, I have to use my uh my pass key to for for for the authentication. That's that that's a security model. But soon it will also be possible to use a Google account to sign in. So yeah, but still like PI uh where was I? And in that authentication things is also interesting because I don't have yet metrics but for example I could ban you authentication ID and and as of course then the user can do just a new identity and coms but there is all those features you you would find like in a standard web two application basically right &gt;&gt; can users use the same identifier Yeah. Uh no because the identify here is given by internet identity when you sign in. So it's it's constant like if you sign in with a number and pass key you always get the same public ID for the same website. All right. So we got a we got our um our login. But now we want to be able to add notes to to our note takingaking app, right? So I design it that way. Basically you have it's not really a database more like a small key store. Let's call it like that where you can save key and a blob of data and that's organized by collection. So we're going to create a collection called node. So you have different level of permission. And you can say okay only the user can access it or it's public or me and the user those kind of things but just going to stick to the standard you also have option all right and as soon as that collection it means that I can begin to say blobby in it right so if I go in the in the code again that's a function that is provided by by the the JavaScript library you see that set docs come from go right it's a JavaScript library and here I just say my target which is not the name of the collection and then in the document I give a key which should just be a unique string basically and then I get the data and here in my data I can add anything and it just like one document should be less than 2 mega but in a case you maybe don't want 2 mega because it's going to be a bit slow but yeah it's up to 2 mega for that particular constraint and here the input text is this one right so now if I write hello world and I submit we don't see it yet in the application because we don't have implemented reading the data right but if I go in my administration console in the nose you see I see the entry and here I going to see hello world right so we have that um that tools that allow us from here I can for example download the the data as JSON update it manually change it I can delete the entry and so on I got like really like an administration tool right and uh we want to read the data. So I mean I guess you understand the the the how it works, right? But so here here and if I refresh here you see we have our own trees, right? So now every time I then it works. Okay. And as I told you, it's limited to 2 mega those. But if you want to go further or if you have like some some data that are more like images or file that should be available on the web like with an URL or something like that, you can use the file storage. But it's a file storage but technically speaking it's also just saving chunks of blob right and there is one smart contract can goes up to 500 gig so it means that technically you can push your old smart contract to 500 gig ultimately I mean the more data you have the more expensive it is of course you know so and I'm not sure it's the best suited like to you you probably don't want to use that solution to build Netflix. It's probably not what you want, you know, but for an application where I don't know like your user can upload their profile image profile that that that does well the job. So same same ID you get collection with with blah blah blah. And if we uncommon this So, and I think I have another line. Yes. But that's really just So, basically what we're going to do is we upload the file. Once it's uploaded, I get a URL back and then in the document that we had before, I add the URL. That way in my UI, I can I can make the link. just convenience reason right let's go here and we say clu and here I think I have an image on the on my desktop yes right and you see here it's save and I can open this so because we are working locally I got local blah blah blah but if I would be like on production I would have blah blah blah that's my satellite ID ICP0 because it would be on ICP.io and then the same URL and what things know that that of course that data is public. So what you can do is if you want to have like some sort of privacy for data that are on the web, you can do this a bit like the same same pattern that you find in Firebase and those kind of tools is you can add here a token uh I don't know like I just going to put like a UID or whatever which means that. Now, if I go here and I add another image, if I open this one, you see I need the token, but if I remove that from the URL, I don't I cannot access it. So this way you can kind of make your your your images and so on private because fundamentally speaking the token if you use a long enough token then it would take too much time to brute force it. Of course unless you start the you share the link publicly then it's not anymore. All right. So actually I actually actually we have already built an app you know like I don't know like we took 10 minutes maybe and of course it was already prepared but we we have set up a notification with two function we have added save document on chain with one and we have save file with another so it's kind of nice right and Um maybe you want we want to go a step further like right now we have built all the front end but when it comes to real life application at some point you're going to say all right there is lots of features but maybe I want to add some more features like um particularly in the back end maybe you want to go a step uh further. So I was thinking that we can maybe try to do that. So what we're going to do is there is that notion of of serverless function on Juno which is a bit like any um it's not edge function because of course edge are distributed and as close as possible but it's it's a way for you to to extend the native capabilities. So what I going to do is here I will do eject. I can choose to add function in Rust or TypeScript or JavaScript. And I'm I'm I'm more fluent in JavaScript. So since it's a workshop, I don't go to to Rust and start having bugs and this kind of things. So I just going to take JavaScript, right? And if I have a look here now, I have a new project, new satellites. And I see here I have a set of function that comes by default. I can delete everything. But the idea is that uh function. So that's the ID basically. You see what we have done is we have done that we have done set doc right and when it's dock it it save the data on the on the chain. So the idea right now is that we still do that set dock but once the document is saved it kind of the smart contracts going to call itself kind of and on that call I going to receive the payload and who was the caller and this kind of things and then I can kind of do a post processing or something like that and do the stuff I want on the back end and um yeah so what Yeah. So to assert it works out actually. Well, that's a good point. You have the things that works after the document is saved and you can also inject code before it's saved. This way you can implement your own assertion. You know like for example if you just want that particular principle and that particular authentication to have access you can add a rule where you say if not that one then stop everything. So here I will just add when something is saved I just going to print hello right. So let's build that and and so all those things are was container. So what it does build an index htm javascript file and then it repack a was and then it upgrade the whole was. So you all the time you upgrade the whole container basically and yeah. All right. So it has been updated. So if no I want to assert. So when I do that here I should find a console log. You see? So yeah. And if we want to go a bit more fancy, we're going to do the following. We're going to try out the post-processing. So in that onset dock here. Oh, no. Yeah. All right. Sorry. So what we want to do now is actually like I told you we can use that assertion to block something. So if the text that comes as the word hello it cannot be written in the in the store. So I will build that there is live reload. So if I want I can start build blah blah blah watch. But just for the demo, I I like to do it like way. All right. So there is a low, right? And here it fails because that there is my custom code that works before before Juno, right? And if I remove a lot, then it still works. And I told you about postprocessing. So I going to copy this one. So what we want to do is when a document is written in the collection note, we decode it and then I I modify the text to add checked and then basically I save it back to the to the store. So that's of course like the most simple use cases, right? All right. So if I postprocess and oh it's already done. So it's asynchronous. So I was kind of lucky that while it save the reload already have the new data. So you know maybe someday I will add like a function where you can just pull until you get the the the function because there is no web you can have websocket but if you want websocket you have to have like a web two proxy in the middle. So generally I prefer like tupole that way you don't compromise on on using web two stuff. So yeah, that's basically uh already a bit like the the syncs and um I can show you how to go to production, but then I going to need to open my uh my uh my my password manager. But uh yeah, we can try. Um, okay. So, let's do that. Um, that's production, right? Should work, I guess, or not. Yes. All right. Okay. Same as that we as what we have. All right. So I will create a new oo that's a good example so I can show you oh we transfer ICP on the on the internet computer right so do I have ICP so that's o is a wallet on the IC and you see I always use that authentication to to sign in and it's a crosschain wallet so you can also have Ethereum this kind of things there. Oh, Bitcoin, right? Do I have ICP? Is it Is it enough? I don't think so. So, I going to &gt;&gt; Should I send you some? &gt;&gt; Oh, I can send me some. It's fine. Um I guess uh Uh, so I going to use the same application on my phone if I got uh Wi-Fi. Yes. So you see I sign in with the same stuff on my phone, right? And all right. Come on. All right. So send no I select ICP. I use the go and I will send one ICP. Okay. All right. So it should be here. I think it the this one runs every few seconds. So let me refresh. All right. So here I have one ICP. So now I going to bring some ICP here to my mission control or wallet that I have in Juno. And here I can click reserve and I can use that o things. It's the wallet that we use and basically I can use it and there are some standard that let me interact with it and it ask if I can use the wallet address and so on. All right. And here I will bring one ICP. It show me. Yeah, I should confirm it's so on. All right. So, no, I should also have it. Yes, we have not yet. Maybe I should refresh. All right, we have it. Right. Okay. So, I going to spin satellites for the demo. same as before, right? You see, as I told you, it's a bit slower on on production than than than locally, but I mean, it should take like 20 30 seconds, something like that, I guess. And while we do that here, I just going to close this and All right. So, I just going to disconnect and copy my password if you don't mind even though I don't have that much things to not uh not show but yeah. All right. So, I've copied it. All right. I got it. So I'm going to put it back. We back. Yes. All right. So it's ready. Same experience as before. Maybe. Yes. And you see it's the same as before. Like if I open the default, it works, right? And you see I already have like it's not local host anymore. Yeah. So now in my I have my CLI I have the the that project on the web or on the chain &gt;&gt; you pay only once. &gt;&gt; Yeah. To launch it. &gt;&gt; So &gt;&gt; how much was it? 0.5 or one &gt;&gt; 0.5 I think. Yeah. &gt;&gt; So when you start on it's free. So the if I uh take this shima again, this one and this one, I pay for you. So it's free &gt;&gt; currently. And then when you want to spin others, it's cost 0.5 ICP, which is &gt;&gt; Yeah, something like that. But it's almost the same price as starting one empty smart contract. &gt;&gt; As long as it stays you post it like forever. &gt;&gt; So when you have your things that are ups um you see it has uh the available cycles &gt;&gt; here. So as long as you have cycles, it's going to leave. &gt;&gt; All right. &gt;&gt; And there is like something called the the grace period or the threshold and basically you can tell what buffer of security you want to give and right now the the buffer of security is 30 days. So basically it says okay to cover those 30 days with your current consumption you would need that much cycles. So basically your your project works and accept update and so on as long as it doesn't reach that and when it reach that you can just read it right and then after 30 days if you still not have done anything then it dies. But like for example, I don't know like &gt;&gt; how much is a cycle &gt;&gt; like if we if we have a look &gt;&gt; 0.9 &gt;&gt; so if I want to do a top up which means adding more cycles right so if I do one ICP it's three cycles and one things to know is like cycle the price is constant they are basically I don't know if they are indexed to USDC or whatever. I don't exactly know to what &gt;&gt; token. &gt;&gt; Yeah. And if the token goes high, then you get less cycles and so on. So they goes both together &gt;&gt; also to USD. &gt;&gt; Yeah. Something like that. Yeah. &gt;&gt; So &gt;&gt; yeah. And how with one with one ICP, how long can I give it up for 3.5 cycles? &gt;&gt; So it really depends of what you do with your app. Is it just a front end app? Let's say just your website. &gt;&gt; Yeah. &gt;&gt; Then I guess your website you're going to have with five or $10 for a year your website's going to work. And actually like my my own website, I moved it there recently because it was more expensive to use Google Firebase than to use the IC because right now there is a difference between reading data from just one uh one one entity or read reading from using update to to have a consensus and if you just read one with a certificate then it's free. Yes. So that's why your website come rapidly, but also why it's it's really interesting financially to to have a website there. &gt;&gt; So it's for one it's free. &gt;&gt; Yeah. I mean no it's it's not free but it's like then you just going to pay for the space. &gt;&gt; Yeah. &gt;&gt; And they say that for example it cost I think they say it cost $5 a year for one gig of data. &gt;&gt; Yeah. And for a personal website shouldn't be more. &gt;&gt; Yeah. Exactly. But I I think my website which has I mean it doesn't have a massive traffic but so if I check my website here you see I don't have like a crazy traffic like thousand session a month. I think I'm maybe going to pay $10 this year or something like that. And the doain, can you buy the doain from here as well? &gt;&gt; You cannot buy the domain, but you can connect it. &gt;&gt; So for example, for the the the satellites that we just created, I can go to hosting and here I can add custom domain say demo.rl.org, right? And then Yeah, then I get the DNS entries. So I go to my DNS, I put those entry, I wait that it's rolled out and when it's done I do ready and then all those all the things is connected. &gt;&gt; How how redundantly basically is this done right? So how many guess you do one operation right it's like kind of like blockchain operation on how many nodes kind of is that being like verified &gt;&gt; I don't know exactly it's do you know sorry &gt;&gt; only going through the consensus &gt;&gt; doesn't go through &gt;&gt; yeah yeah &gt;&gt; because &gt;&gt; like how many nodes or how many nodes is it stored usually that depends because you can have more depends on how you deploy only deploy to one sub network. &gt;&gt; Okay. And then every update call all the 13 nodes have to do the have to do the thing as well &gt;&gt; I think. So yeah. So you you got like the the default Juno subnet is this one with 13, right? But then &gt;&gt; different system there is also a subnet that is just scoped in Europe if you want to keep your data in Europe &gt;&gt; and I think there is a proposal to have one subnet just in in the states too and &gt;&gt; the way you're expecting people to build apps is like you separate right you have the app and then smart contract only for let's say like identity or financial stuff right &gt;&gt; but here you're expecting every every step in the app kind of to be to every update call of the app to go into the consensus. &gt;&gt; Yeah, I think so. Yeah. Yeah. &gt;&gt; Basically, &gt;&gt; yeah, that's what launch means. &gt;&gt; And yeah. &gt;&gt; Um yeah. So, let me just see if I uh let me get my password because I copied something in the meantime, right? Um you can set up a CLI without a password, but it's not really professional, you know. All right. So, I'm David. So, I gonna just use my other profile locally. All right. And now what I going to do is I want to log in my CLI against that satellites. Right? So here and I want to reuse it. All right. So I use a satellite what happened. All right. And at some points I will have to copy again but doesn't matter. So what I do is this is the princip public ID of my celli. So what I do is I take it I go to my CLI and here I going to add that access key and I can choose the level. I can have that level where I say I can only propose things which is really useful if you set up a GitHub action because then you can do you can build your stuff in your GitHub action like your front end your back end and then GitHub can just basically make a proposal of code changes and you in your CLI on your console you're going to approve or not but here since I'm CLI I trust him so I going to put it administrator that way I can do everything and therefore why the password is really important All right. And that's the CLI things. So yeah, have you completed? Yes. Blah blah. Can you provide a name demo clue? All right. And here I just need one more time. I'm sorry. All right. So I going to build my application. Wait, we need to set up the So let's do that. So the production ID is I don't want to copy otherwise I have to copy again. E 5 m air what? That's that's really convenient. So is it a E50 m? All right, I gave up. All right, so now we are it and I just going to build it and while it builds I going to take this one and now we are good. So sorry for that. All right. So here I've built my app like I would build like a normal JavaScript app, you know, like npm run build, right? And now I going to do juno deploy and build it again because I've set a config but yeah anyway and now it starts pulling the data. So it's really like the same as we we before we have seen the file storage where we uploaded an image. So it's the same same thing. So except that there is ethers and it's jzped and this kind of things and everything going to go up. All right. And that's it. So if I go here, oh you see not there is a proposal but if now I open my my URL then we have the app we developed and of course now I will need to create the same uh collection that we had before you know like the the notes collection. It's a bit slower but still and the image collection. But now that is done here I can sign in. same experience as before, right? And yeah, you see we are on mainet and it works out and that's the cool things about it. I think it's like since you don't start with a blank page, you start with function that are tested that have been tested also on mainet you know that it works. So if you just use that it cannot really fail and um yeah maybe just to show you so I'm going to skip upgrading blah blah blah but same principle analytics we have seen that there is a monitoring tools so basically here I can I can show you in my account so there is in my um that mission control here also takes care of watching the the cycles of those. So what it does is basically he going to observe and I set a threshold and I say if this one goes under the cycles you top it up and because that one has also cycles and ICP that one can send cycles to the other. So basically this one is used to keep everything alive automatically. And when this one transfer cycles to this one, I get an email. And to get an email, it's just like um it do a a call to to web two and then web two send me an email. Basically, that's one of the the the small compromise that I do because it's still convenient to have a notification when when when when something happens. So you see here for example, I see where is my that's my website. We see that that's the rule and we see that the last statist was 30 minutes ago and there was nothing to do and this kind of things. I don't know if there is one that was toped up. Yeah. But we don't see it because it was just a week ago. Yeah. So everything is &gt;&gt; open. &gt;&gt; Yeah, sure. So that's my personal website, right? &gt;&gt; JavaScript. &gt;&gt; Yeah. Yeah. Yeah. &gt;&gt; Yeah. &gt;&gt; Yeah. Yeah. Exactly. And &gt;&gt; does it matter if I I make small changes upload different time or I do it all the start and upload only once. So what's important so that's a best practice is to have reproducible code you know like that when you change something not all your apps got new new ash so that each file that wen touch if if a file that wasn't changes won't be uploaded again &gt;&gt; all right so the welcome componers basically &gt;&gt; yeah exactly &gt;&gt; and yeah I can show you some examples so I going to Close this. So this one is one of the new things that were built on Juno. It's like someone has built like a it's called Gods are dead. I don't know if there is a sign out button. Yeah. So that's like a game where you can uh have some quest and progress and then fight and then craft some things. And they all use that that I think they use that data store to to save the the progression and so on. So you see here it's what I've crafted and so on. And then here I can go and have a fight and um if it works I think so it's really it's a fun game. I like it. So you see then going to play and of course it will evolve in the future. they are still in beta but it's kind of it's kind of fun to see that at least for me I've built a platform where people can build stuff and then you are someone somewhere that comes and say hey I've built a game I find that really exciting &gt;&gt; and um this one is a so the back end is not used on Juno they just have the front end and this kind of thing totally fine for me if we just want to have the front end there and that's a tools that helps um people govern their DAO on the IC because on the IC you can do an ICO and then have a DAO and when you do that you have multiple smart contract and you need proposal and so on and to to avoid the need to have like some some CLI stuff and yeah to to go to as we discussed yesterday evening like to have like a long list of task to to go through to manage your neuron here they have like a they have a nice application that uh I don't know where is it they have a nice application where you can man all stuff and yeah again the back end is not from Juno but the front end is on Juno and otherwise um do I have some more examples so the the documentation of Juno is obviously on Juno right and um what we have also So yeah, there was that project for some times that was like um they wanted to make something where you can um you say I have that ID and I pledge so much ICP and if everyone anybody wants to uh to build that then you get the ICP and so on. Um, there are some uh some some memecoins that don't have the meme coins on the on Juno, but they have their their their website &gt;&gt; like this, you know, like super funny website and like friend of mine has his portfolio there. Uh here it's a it's a board with a VC and uh at the end you got few stuff that I built but for example there's this one which is basically it just like you know excal which is a tool where you can you can draw so I just put excal and a bit of colors around it and then when you save when you when you draw then the draw is saved on the on the on the IC. So yeah, you know, like there's a kind of things and then it's because at the end it's just a JSON. So I save the JSON in the file storage. So this one and uh maybe this one is um that's a tools where you can u see the proposals that are made on the internet computer or in any of those DO and you can use that tools to submit a motion proposal. That way again you don't need a CLI. You can just go through an editor and do those stuff. Yeah. Yeah. All right. So that's basically it. Um thanks for attending the workshop and yeah enjoy the rest of the conference and see you around. Thank you.
