<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: v0phan1ee</title>
    <description>The latest articles on DEV Community by v0phan1ee (@vophanlee).</description>
    <link>https://dev.to/vophanlee</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F830768%2Fded3cda4-ae68-4601-b52d-c9a8825200e7.jpg</url>
      <title>DEV Community: v0phan1ee</title>
      <link>https://dev.to/vophanlee</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/vophanlee"/>
    <language>en</language>
    <item>
      <title>How does your company manage the test environment?</title>
      <dc:creator>v0phan1ee</dc:creator>
      <pubDate>Sun, 10 Jul 2022 07:43:20 +0000</pubDate>
      <link>https://dev.to/vophanlee/how-does-your-company-manage-the-test-environment-3mf5</link>
      <guid>https://dev.to/vophanlee/how-does-your-company-manage-the-test-environment-3mf5</guid>
      <description>&lt;p&gt;How does your company manage the test environment? Do you have an fixed test environment when you/QA need to do the test on the new feature which want to integrate into the code base? Or just create an new host/container to test the code when you need to test?&lt;/p&gt;

</description>
      <category>devops</category>
    </item>
    <item>
      <title>Bridge: The bridge from web2 to web3 for dev.to users</title>
      <dc:creator>v0phan1ee</dc:creator>
      <pubDate>Wed, 04 May 2022 14:15:32 +0000</pubDate>
      <link>https://dev.to/vophanlee/bridge-the-bridge-from-web2-to-web3-for-devto-users-1icd</link>
      <guid>https://dev.to/vophanlee/bridge-the-bridge-from-web2-to-web3-for-devto-users-1icd</guid>
      <description>&lt;h3&gt;
  
  
  Overview of My Submission
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/skyf0cker/bridge"&gt;Bridge&lt;/a&gt; is a tool i developed during the hackathon hosted by appwrite and dev.to.&lt;br&gt;
This tool provide the ability that let users sync their articles, posts to the permanent storage on Arweave network.&lt;br&gt;
By syncing the articles, no one even platform like dev.to cannot change their content, delete them, or let them just cannot be accessed. And the content we create usually cost our lot of time to make it easy to be understood by others. We hope what we post can help others and enpower others. At the meanwhile, If we can get the sponor of what we create, it will greatly encourage us to create more better content. This is a positive cycle. Future with bridge, content creator can also get more income by arweave pst token which supported by arweave and bridge (which wait to be implemented).&lt;/p&gt;
&lt;h3&gt;
  
  
  🚀 That's why i want to make &lt;code&gt;Bridge&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Arweave is a blockchain that apply permanent storage and it supports the smartweave like smart contract in ethernum. You can do lots of things by its ability.&lt;/p&gt;

&lt;p&gt;👋 Sooo, Next is the Bridge coming~&lt;/p&gt;

&lt;p&gt;bridge frontend repo: &lt;a href="https://github.com/skyf0cker/bridge"&gt;https://github.com/skyf0cker/bridge&lt;/a&gt;&lt;br&gt;
The frontend is using Vue3 and ant-design-vue to build. It can connect with &lt;a href="https://www.arconnect.io/"&gt;Arconnect Wallet&lt;/a&gt; and verify our dev.to account. User can use bridge to get what they post on dev.to and sync it to the arweave network with only one-click.&lt;/p&gt;

&lt;p&gt;bridge backend repo: &lt;a href="https://github.com/skyf0cker/bridge-appwrite"&gt;https://github.com/skyf0cker/bridge-appwrite&lt;/a&gt;&lt;br&gt;
backend of bridge is using appwrite to build. I use the cloud function to get the user's articles, verify user's account and storage the user's sync info.&lt;/p&gt;
&lt;h3&gt;
  
  
  Submission Category:
&lt;/h3&gt;

&lt;p&gt;🔮 Web3 Wunderkinds&lt;/p&gt;
&lt;h3&gt;
  
  
  Link to Code
&lt;/h3&gt;

&lt;p&gt;🚀 bridge frontend:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--566lAguM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/skyf0cker"&gt;
        skyf0cker
      &lt;/a&gt; / &lt;a href="https://github.com/skyf0cker/bridge"&gt;
        bridge
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      bridge from web2 to web3 for dev.to users. code for dev.to x appwrite hackathon
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h1&gt;
Welcome to bridge 👋
&lt;/h1&gt;
&lt;p&gt;
  &lt;a href="https://www.npmjs.com/package/bridge" rel="nofollow"&gt;
    &lt;img alt="Version" src="https://camo.githubusercontent.com/895733821b0e9bdf2a1496bc0585770f1838bbc99ddc3405f2bbbd70e85fe91d/68747470733a2f2f696d672e736869656c64732e696f2f6e706d2f762f6272696467652e737667"&gt;
  &lt;/a&gt;
  &lt;a href="https://github.com/skyf0cker/bridge/blob/master/LICENSE"&gt;
    &lt;img alt="License: Apache License 2.0" src="https://camo.githubusercontent.com/c968db536b7db21d5e16502ea110104d0ee72784e9bbcbfd2ebe6228aad8aaca/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d417061636865204c6963656e736520322e302d79656c6c6f772e737667"&gt;
  &lt;/a&gt;
  &lt;a href="https://twitter.com/vophanlee" rel="nofollow"&gt;
    &lt;img alt="Twitter: vophanlee" src="https://camo.githubusercontent.com/34ae97996855854384971da3e16e722c63b0f30202b135c50d514d7c3d255aae/68747470733a2f2f696d672e736869656c64732e696f2f747769747465722f666f6c6c6f772f766f7068616e6c65652e7376673f7374796c653d736f6369616c"&gt;
  &lt;/a&gt;
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;bridge from web2 to web3 for dev.to users.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
🏠 &lt;a href="https://github.com/skyf0cker/bridge"&gt;Homepage&lt;/a&gt;
&lt;/h3&gt;

&lt;h2&gt;
Introduction&lt;/h2&gt;

&lt;p&gt;bridge can get dev.to users' articles and let them deploy their articles to the permanent storage provided by Arweave so that they can make their artices be permanently hosted in blockchain and no one can change them, delete them, and let them can not be accessed.&lt;/p&gt;

&lt;p&gt;The frontend is built by using vue3 and ant-design-vue. The backend is built by Appwrite which is a self-hosted backend-as-a-service platform that gives developers all the APIs required to build any application.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/skyf0cker/bridge-appwrite"&gt;bridge-appwrite&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;permanent storage is provided by &lt;a href="https://www.arweave.org/" rel="nofollow"&gt;arweave&lt;/a&gt; team. Deploying articles to arweave needs an arweave wallet
Bridge now only support &lt;a href="https://www.arconnect.io/" rel="nofollow"&gt;Arconnect&lt;/a&gt; wallet.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;notice: this project is done during the dev.to x appwrite hackathon and i don't have enough time to tidy the code and perfect the details. If you are interested in this project, feel free to&lt;/em&gt;…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/skyf0cker/bridge"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;🚀 bridge cloud functions:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--566lAguM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/skyf0cker"&gt;
        skyf0cker
      &lt;/a&gt; / &lt;a href="https://github.com/skyf0cker/bridge-appwrite"&gt;
        bridge-appwrite
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      appwrite backend cloud functions for bridge.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h1&gt;
Welcome to bridge-appwrite 👋
&lt;/h1&gt;
&lt;p&gt;
  &lt;a rel="noopener noreferrer" href="https://camo.githubusercontent.com/14339434978865b5c2572060fb2c4d8594854ada748b3b788f02710e14659868/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f76657273696f6e2d302e302e312d626c75652e7376673f63616368655365636f6e64733d32353932303030"&gt;&lt;img alt="Version" src="https://camo.githubusercontent.com/14339434978865b5c2572060fb2c4d8594854ada748b3b788f02710e14659868/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f76657273696f6e2d302e302e312d626c75652e7376673f63616368655365636f6e64733d32353932303030"&gt;&lt;/a&gt;
  &lt;a href="https://github.com/skyf0cker/bridge-appwrite#"&gt;
    &lt;img alt="License: Apache License 2.0 " src="https://camo.githubusercontent.com/feabd3be3da7daaba49c3311cec1313e9d25c9cb66ac1f75ee29106e6d297498/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d417061636865204c6963656e736520322e30202d79656c6c6f772e737667"&gt;
  &lt;/a&gt;
  &lt;a href="https://twitter.com/vophanlee" rel="nofollow"&gt;
    &lt;img alt="Twitter: vophanlee" src="https://camo.githubusercontent.com/34ae97996855854384971da3e16e722c63b0f30202b135c50d514d7c3d255aae/68747470733a2f2f696d672e736869656c64732e696f2f747769747465722f666f6c6c6f772f766f7068616e6c65652e7376673f7374796c653d736f6369616c"&gt;
  &lt;/a&gt;
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;appwrite backend cloud functions for bridge.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
Introduction&lt;/h2&gt;

&lt;p&gt;this is the backend cloud function for bridge. It uses the appwrite clound function ability and is based on node.js runtime.&lt;/p&gt;

&lt;p&gt;It has one function named &lt;code&gt;articleService&lt;/code&gt; which is used for fetching user's post on dev.to and verify user's account and so on.&lt;/p&gt;

&lt;h2&gt;
How to use&lt;/h2&gt;

&lt;p&gt;You should follow the &lt;a href="https://appwrite.io/docs/functions" rel="nofollow"&gt;appwrite guidince&lt;/a&gt; to setup the appwrite server, create the project, register the cloud funtion.&lt;br&gt;
&lt;strong&gt;Note that you should set the correct server port for using the server. You can check out the code to get the detail&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;
How to debug&lt;/h2&gt;
&lt;p&gt;You can check the docker log of the &lt;code&gt;runtime&lt;/code&gt; and &lt;code&gt;appwrite executor&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;
Author&lt;/h2&gt;
&lt;p&gt;👤 &lt;strong&gt;vophanlee&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Website: vophan.dev&lt;/li&gt;
&lt;li&gt;Twitter: &lt;a href="https://twitter.com/vophanlee" rel="nofollow"&gt;@vophanlee&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Github: &lt;a href="https://github.com/skyf0cker"&gt;@skyf0cker&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
Show your support&lt;/h2&gt;
&lt;p&gt;Give a ⭐️ if this project helped you!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This README was generated with ❤️ by &lt;a href="https://github.com/kefranabg/readme-md-generator"&gt;readme-md-generator&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;/div&gt;



&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/skyf0cker/bridge-appwrite"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;h3&gt;
  
  
  Additional Resources / Info
&lt;/h3&gt;

&lt;p&gt;This is my first time to join into a hackathon. It's a really amazing experience. I did all these stuffs by myself and it was a really tired trip, hahah.&lt;br&gt;
During the hackathon, i learn lots of things and sharpen my develop skills. At the meanwhile, i communicate with other friendly guys in appwrite discord channel. They are really nice and helped me a lot.&lt;br&gt;
We talked about the usage of appwrite and even found some points can improve (already in the progress)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ku1BTEJ4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yxrm7yipkvskjqwt7o23.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ku1BTEJ4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yxrm7yipkvskjqwt7o23.png" alt="discussion" width="880" height="255"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Anyway, this is really a amazing experience. Thanks everybody.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tech Stack
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Vue3&lt;/li&gt;
&lt;li&gt;ant-design-vue&lt;/li&gt;
&lt;li&gt;Arconnect&lt;/li&gt;
&lt;li&gt;Appwrite (cloud function and storage)&lt;/li&gt;
&lt;li&gt;Arweave (storage)&lt;/li&gt;
&lt;li&gt;node.js&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  screenshots
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--C4usc8tP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yltwublbcbzreaoqu1q2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--C4usc8tP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yltwublbcbzreaoqu1q2.png" alt="Home" width="880" height="488"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--P9cOd7qX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jq8x6un3us24tskrmepr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--P9cOd7qX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jq8x6un3us24tskrmepr.png" alt="Login" width="880" height="495"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--uN6ZbE0v--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t02hm6ofh64v0yhdz4zz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uN6ZbE0v--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t02hm6ofh64v0yhdz4zz.png" alt="Connect Wallet" width="880" height="558"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--91JJI-2C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5u7mw1rit1ysase4c8c0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--91JJI-2C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5u7mw1rit1ysase4c8c0.png" alt="Verify Account" width="880" height="492"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gRNWtJ3q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2b4bgdpvaw4ycv7ls14l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gRNWtJ3q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2b4bgdpvaw4ycv7ls14l.png" alt="Get Articles" width="880" height="493"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6o6vL_11--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zf4yg17t0oe5lf9zhl6m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6o6vL_11--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zf4yg17t0oe5lf9zhl6m.png" alt="Sync Articles" width="880" height="493"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--funj2dxv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/60a9yfguon585ziy7yp8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--funj2dxv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/60a9yfguon585ziy7yp8.png" alt="Viewblock" width="880" height="583"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>appwritehack</category>
    </item>
    <item>
      <title>Vue3 Learning Record.</title>
      <dc:creator>v0phan1ee</dc:creator>
      <pubDate>Wed, 04 May 2022 13:07:24 +0000</pubDate>
      <link>https://dev.to/vophanlee/vue3-learning-record-51mi</link>
      <guid>https://dev.to/vophanlee/vue3-learning-record-51mi</guid>
      <description>&lt;p&gt;This is vophanlee's Vue3 Learning Record. Guys&lt;/p&gt;

</description>
      <category>javascript</category>
    </item>
    <item>
      <title>Hello, guys. This is from bridge.</title>
      <dc:creator>v0phan1ee</dc:creator>
      <pubDate>Wed, 04 May 2022 13:02:46 +0000</pubDate>
      <link>https://dev.to/vophanlee/hello-guys-this-is-from-bridge-5anp</link>
      <guid>https://dev.to/vophanlee/hello-guys-this-is-from-bridge-5anp</guid>
      <description>&lt;p&gt;This is a test post for bridge.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>I'm verifying my bridge account: 626931a7e0d4f987c7432c685b03d284</title>
      <dc:creator>v0phan1ee</dc:creator>
      <pubDate>Wed, 04 May 2022 03:34:23 +0000</pubDate>
      <link>https://dev.to/vophanlee/im-verifying-my-bridge-account-626931a7e0d4f987c7432c685b03d284-3390</link>
      <guid>https://dev.to/vophanlee/im-verifying-my-bridge-account-626931a7e0d4f987c7432c685b03d284-3390</guid>
      <description>&lt;p&gt;Hello, folks.&lt;br&gt;
I'm verifing my bridge account with dev.to. Join me.&lt;/p&gt;

</description>
      <category>verify</category>
    </item>
  </channel>
</rss>
