Interplanetary Apps: Disco Chat - Blog Post#517
Conversation
|
It seems like the build is failing due to the missing header image. I would point it to another random one temporarily so that the build works. |
|
I fixed the syntax highlighting in #519 |
|
@2colo the PR it doesn't build, but the linked version did build and is updated, can you use that? Thanks for fixing the highlighting! It's going to really help a lot of technical posts pop. |
Co-authored-by: Daniel Norman <1992255+2color@users.noreply.github.com>
Co-authored-by: Daniel Norman <1992255+2color@users.noreply.github.com>
There was a problem hiding this comment.
This is an excellent overview of the journey from a web app to a desktop app. It alternates from high level to very technical quickly which can throw off reader, hence the suggestion to set expectations/goals for the reader.
A couple of high-level suggestions:
- Set reader expectations in the beginning in terms of what they can expect to learn from this,
- Add more concrete CTAs
- Add a video/gif showing the app in action
- Make the titles a bit more SEO friendly, e.g instead of
IPNS profiles, `How Disc Chat uses IPNS for mutable profiles". Phrasing the titles as a question is helpful - Update the link to the header image to fix the build so that it can be previewed
- Add a warning about the fact that while this uses common crypto primitives, it hasn't been audited.
mishmosh
left a comment
There was a problem hiding this comment.
Overall this is a great tour of the app! Let's make this more streamlined by removing some of the convoluted history of js-ipfs, browser support, etc. — and focus more on what Disco Chat can do today.
Also included a few minor grammar/spelling edits.
Co-authored-by: Daniel Norman <1992255+2color@users.noreply.github.com>
Co-authored-by: Mosh <1306020+mishmosh@users.noreply.github.com>
Co-authored-by: Mosh <1306020+mishmosh@users.noreply.github.com>
Co-authored-by: Mosh <1306020+mishmosh@users.noreply.github.com>
Co-authored-by: Mosh <1306020+mishmosh@users.noreply.github.com>
Co-authored-by: Mosh <1306020+mishmosh@users.noreply.github.com>
Co-authored-by: Mosh <1306020+mishmosh@users.noreply.github.com>
Co-authored-by: Mosh <1306020+mishmosh@users.noreply.github.com>
Co-authored-by: Daniel Norman <1992255+2color@users.noreply.github.com>
Co-authored-by: Mosh <1306020+mishmosh@users.noreply.github.com>
Thanks for the review! I believe I've streamlined it significantly, keeping the history down to 1 paragraph in the journey section. |
Thanks!
Complete.
Complete.
I might record something and link it in. I think a full video format version of the post would be much better though (and we could link to it on this post).
I believe this is complete.
Complete.
There is a warning currently along the lines of "don't trust random crypto code", and a reference to the warning was recently removed. Is there something specific you'd like to see changed? |
|
This is ready for final review & merge. Ideally this will be merged tomorrow EoD at the latest. |
|
|
||
| I **wanted to keep Disco Chat in the browser** as it's easy to create graphical applications that work cross-platform, not to mention the current popularity of Javascript. First I looked at Electron, but I'm haunted by many complaints developers and users have about the behemoth (not to mention it's quite large). After some searching I **found Tauri, a very thin/lightweight browser view** tied together with Rust. | ||
|
|
||
| From there I **created [native-ipfs-building-blox](https://github.com/TheDiscordian/native-ipfs-building-blox)** to assist in creating desktop applications with a webview powered by a Kubo node in the background. The API on the Javascript side is exactly the same, but by using [kubp-rpc-client](https://github.com/ipfs/js-kubo-rpc-client) it's **Kubo handling all the heavy lifting** like running the IPFS node instead of js-ipfs. This **gives us a lot of powers like advanced hole punching techniques** using CircuitRelayV2 and being able to listen on a socket in general. |
There was a problem hiding this comment.
| From there I **created [native-ipfs-building-blox](https://github.com/TheDiscordian/native-ipfs-building-blox)** to assist in creating desktop applications with a webview powered by a Kubo node in the background. The API on the Javascript side is exactly the same, but by using [kubp-rpc-client](https://github.com/ipfs/js-kubo-rpc-client) it's **Kubo handling all the heavy lifting** like running the IPFS node instead of js-ipfs. This **gives us a lot of powers like advanced hole punching techniques** using CircuitRelayV2 and being able to listen on a socket in general. | |
| From there I **created [native-ipfs-building-blox](https://github.com/TheDiscordian/native-ipfs-building-blox)** to assist in creating desktop applications with a webview powered by a Kubo node in the background. The API on the Javascript side is exactly the same, but by using [kubo-rpc-client](https://github.com/ipfs/js-kubo-rpc-client) it's **Kubo handling all the heavy lifting** like running the IPFS node instead of js-ipfs. This **gives us a lot of powers like advanced [hole punching](https://docs.libp2p.io/concepts/nat/hole-punching/) techniques** using CircuitRelayV2 and being able to listen on a socket in general. |
|
|
||
| From there I **created [native-ipfs-building-blox](https://github.com/TheDiscordian/native-ipfs-building-blox)** to assist in creating desktop applications with a webview powered by a Kubo node in the background. The API on the Javascript side is exactly the same, but by using [kubp-rpc-client](https://github.com/ipfs/js-kubo-rpc-client) it's **Kubo handling all the heavy lifting** like running the IPFS node instead of js-ipfs. This **gives us a lot of powers like advanced hole punching techniques** using CircuitRelayV2 and being able to listen on a socket in general. | ||
|
|
||
| After this I **just dropped the browser-based Disco Chat into the [ui directory](https://github.com/TheDiscordian/disco-chat/tree/master/ui) with some tweaks**. The browser version of Disco Chat used js-ipfs in the browser which was no longer needed in the new Disco Chat which uses Kubo and Kubo RPC API. After this, I cleaned up that ui directory, added a boatload of comments, and implemented IPNS-based profiles and end-to-end encryption. |
There was a problem hiding this comment.
| After this I **just dropped the browser-based Disco Chat into the [ui directory](https://github.com/TheDiscordian/disco-chat/tree/master/ui) with some tweaks**. The browser version of Disco Chat used js-ipfs in the browser which was no longer needed in the new Disco Chat which uses Kubo and Kubo RPC API. After this, I cleaned up that ui directory, added a boatload of comments, and implemented IPNS-based profiles and end-to-end encryption. | |
| After this, I **just dropped the browser-based Disco Chat into the [ui directory](https://github.com/TheDiscordian/disco-chat/tree/master/ui) with some tweaks**. The browser version of Disco Chat used js-ipfs in the browser, which was no longer needed in the new Disco Chat because it uses Kubo and Kubo RPC API. After this, I cleaned up that `ui` directory, added a boatload of comments, and implemented IPNS-based profiles and end-to-end encryption. |
| 1. **How to have mutable data beyond just a website / redirect** | ||
| 2. **How to encrypt or hide data** | ||
|
|
||
| So to assist with those problems, I created **IPNS-based profiles** for Disco Chat - to show off mutable data, and a **simple end-to-end encryption** feature - to show the basics of how to hide or encrypt data over IPFS (or any public room). This was made possible as each IPFS node has a unique identifier known as a PeerID which is generated via a keypair. I utilise the PeerID as the IPNS name for profile lookups, and the keypair to generate a secret used for data encryption. |
There was a problem hiding this comment.
| So to assist with those problems, I created **IPNS-based profiles** for Disco Chat - to show off mutable data, and a **simple end-to-end encryption** feature - to show the basics of how to hide or encrypt data over IPFS (or any public room). This was made possible as each IPFS node has a unique identifier known as a PeerID which is generated via a keypair. I utilise the PeerID as the IPNS name for profile lookups, and the keypair to generate a secret used for data encryption. | |
| So to assist with those problems, I created **IPNS-based profiles** for Disco Chat - to show off mutable data, and a **simple end-to-end encryption** feature - to show the basics of how to hide or encrypt data over IPFS (or any public room). This was made possible as each IPFS node has a unique identifier known as a [PeerID](https://docs.libp2p.io/concepts/fundamentals/peers/#peer-id) which is generated via a keypair. I utilise the PeerID as the IPNS name for profile lookups, and the keypair to generate a secret used for data encryption. |
Co-authored-by: Daniel Norman <1992255+2color@users.noreply.github.com>
|
Forgot to hit the magic button last week! Merging after checks complete 🎉 |

https://bafybeifox3br34rvtcdo336cf2k7gcpqozpvwpvqpmwkuy6hvqk6qni4cm.ipfs.dweb.link/interplanetary-apps-disco-chat/
This is ready for review.
TODO