<?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: jicking bebiro</title>
    <description>The latest articles on DEV Community by jicking bebiro (@jicking).</description>
    <link>https://dev.to/jicking</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%2F242790%2Ffb43c92f-275f-42ad-a880-dbd70132dcd3.jpg</url>
      <title>DEV Community: jicking bebiro</title>
      <link>https://dev.to/jicking</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jicking"/>
    <language>en</language>
    <item>
      <title>Dockerize a Nodejs Express Api with VS Code</title>
      <dc:creator>jicking bebiro</dc:creator>
      <pubDate>Thu, 28 Mar 2024 22:15:10 +0000</pubDate>
      <link>https://dev.to/jicking/dockerize-a-nodejs-express-api-with-vs-code-4gob</link>
      <guid>https://dev.to/jicking/dockerize-a-nodejs-express-api-with-vs-code-4gob</guid>
      <description>&lt;p&gt;With VS Code (and &lt;a href="https://code.visualstudio.com/docs/containers/overview" rel="noopener noreferrer"&gt;Docker extension&lt;/a&gt;) it is much easier to dockerize a nodejs express app and monitor containers if you dont like to do it all via terminal like myself. &lt;/p&gt;

&lt;h2&gt;
  
  
  Create a simple nodejs express api
&lt;/h2&gt;

&lt;p&gt;create a new folder then open it on VS Code.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mkdir node-docker
cd nodeapp
code .
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Initialize a node project, and set the defaults.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;then install express&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm i express
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;in project root, create app.js file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const express = require('express');
const app = express();

const PORT = 3000;

app.get('/', (req, res) =&amp;gt; {
  res.send('Hello World');
});

app.listen(PORT,() =&amp;gt; {
  console.log(`Server listening on Port ${PORT}`);
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add a new script on package .json  to start api.&lt;br&gt;
For simplicity copy this package.json&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "name": "nodedocker",
  "version": "1.0.0",
  "main": "app.js",
  "scripts": {
    "start": "node app.js"
  },
  "dependencies": {
    "express": "4.19.2"
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Running &lt;strong&gt;npm run start&lt;/strong&gt; will run api on port 3000.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fibvzxthhuk3ntesdisn5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fibvzxthhuk3ntesdisn5.png" alt="Image description" width="298" height="120"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once confirmed terminate running app to free port 3000 on local machine as leaving it running prevents you from running your docker instance (this happens to me a lot).&lt;/p&gt;

&lt;h2&gt;
  
  
  Dockerize express api
&lt;/h2&gt;

&lt;p&gt;Install &lt;a href="https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-docker" rel="noopener noreferrer"&gt;docker vscode extension&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Using Ctrl + shift + p , to open command pallete. then run&lt;br&gt;
&lt;code&gt;&amp;gt; Docker: Add Docker Files to Workspace...&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;You can leave options to default as it will automatically detects your platform (Nodejs) and creates vs code launch configuration for debugging.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzc8zl0x70hfowjdfuw05.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzc8zl0x70hfowjdfuw05.png" alt="Image description" width="424" height="272"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;By default It will create a Docker file, 2 docker compose (another one for debug) ,handy docker ignore and vs code launch settings.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fopunbholkkdbegt9hnzh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fopunbholkkdbegt9hnzh.png" alt="Image description" width="290" height="274"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For simplicity, you can ryun docker compose via file system pane menu. Select docker compose file and right click to open context menu. Then click compose up to spawn a container instance.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr1281whjc89lxysh2jik.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr1281whjc89lxysh2jik.png" alt="Image description" width="565" height="780"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can then check on docker panel that container is running.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F42xwsq23jbkyiy2etgvx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F42xwsq23jbkyiy2etgvx.png" alt="Image description" width="435" height="427"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;I might write next&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;mount virtual path&lt;/li&gt;
&lt;li&gt;add db to compose&lt;/li&gt;
&lt;li&gt;&lt;a href="https://code.visualstudio.com/docs/devcontainers/containers" rel="noopener noreferrer"&gt;Vscode dev container&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>Check Website Headers</title>
      <dc:creator>jicking bebiro</dc:creator>
      <pubDate>Sun, 12 Feb 2023 02:06:41 +0000</pubDate>
      <link>https://dev.to/jicking/check-website-headers-38n1</link>
      <guid>https://dev.to/jicking/check-website-headers-38n1</guid>
      <description>&lt;p&gt;From time to time you'll have to check http headers of your website for security compliance or to make a feature work.&lt;/p&gt;

&lt;p&gt;Here's a handy tool to check your site headers.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://securityheaders.com/?q=https%3A%2F%2Fdev.to%2F"&gt;https://securityheaders.com/?q=https%3A%2F%2Fdev.to%2F&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr0it1s2ee9x908xqnosf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr0it1s2ee9x908xqnosf.png" alt="Image description" width="800" height="612"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>backenddevelopment</category>
      <category>claude</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Vite multi-environment setup</title>
      <dc:creator>jicking bebiro</dc:creator>
      <pubDate>Mon, 28 Nov 2022 04:56:08 +0000</pubDate>
      <link>https://dev.to/jicking/vite-multi-environment-setup-5d2</link>
      <guid>https://dev.to/jicking/vite-multi-environment-setup-5d2</guid>
      <description>&lt;p&gt;&lt;a href="https://github.com/jicking/vite-multi-env-demo" rel="noopener noreferrer"&gt;Demo Github Repo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here's a quick personal public post on setting/reading env variables on Vite.&lt;br&gt;
By default, Vite uses Development env mode when running on local then switches to Production on Build. For demonstration I will add a staging mode since I use it on most projects I'm working on.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create env files with vars corresponds to environment (I have staging here)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy50rpbtjwo209mqjkm79.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy50rpbtjwo209mqjkm79.png" alt="Image description" width="557" height="355"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Read variable
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let envMode = import.meta.env.MODE
let envVariableValue = import.meta.env.VITE_GREETINGS

...

&amp;lt;div&amp;gt;
  Mode: {envMode} &amp;lt;br&amp;gt;
  Variable value: {envVariableValue} &amp;lt;br&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Update script to run on specific environment mode (package.json)
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  "scripts": {
    "start": "vite",
    "start:staging": "vite --mode staging",
    "start:production": "vite --mode production",
    "build": "vite build",
    "build:staging": "vite build --mode staging",
    "preview": "vite preview"
  },
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Reference: &lt;a href="https://vitejs.dev/guide/env-and-mode.html#modes" rel="noopener noreferrer"&gt;https://vitejs.dev/guide/env-and-mode.html#modes&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>ASP.NET Core custom scaffold templates</title>
      <dc:creator>jicking bebiro</dc:creator>
      <pubDate>Tue, 18 Oct 2022 09:43:24 +0000</pubDate>
      <link>https://dev.to/jicking/aspnet-core-custom-scaffold-templates-d2h</link>
      <guid>https://dev.to/jicking/aspnet-core-custom-scaffold-templates-d2h</guid>
      <description>&lt;h2&gt;
  
  
  My problem
&lt;/h2&gt;

&lt;p&gt;Earlier this week I had to create a couple of .net core razor pages app and used scaffolding to generate CRUD pages. Then i had to update the look and feel of each app to match with my client's branding. &lt;br&gt;
Geez , this will be tedious.&lt;br&gt;
Good thing I can create an ASP.NET CORE Project Template and modify scaffolding templates as described on this &lt;a href="https://dotnetthoughts.net/custom-scaffold-templates-in-asp-net-core/" rel="noopener noreferrer"&gt;post&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;Copy desired template folders from&lt;/p&gt;

&lt;p&gt;&lt;code&gt;C:\Users\$USER\.nuget\packages\microsoft.visualstudio.web.codegenerators.mvc\$VERSION\Templates&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;$USER and $VERSION will depend on you local setup.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fozs58p7nrgc8ftdj5247.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fozs58p7nrgc8ftdj5247.png" alt="Image description" width="745" height="402"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;in the root of your project, create a 'Templates' folder.&lt;br&gt;
When you scaffold an item, visual studio will first check and use if you have 'Templates' folder in your project before using templates from nugget package.&lt;/p&gt;

&lt;p&gt;Modify the templates as you see fit.&lt;/p&gt;

</description>
      <category>dotnet</category>
    </item>
    <item>
      <title>Webdev Browser Extensions</title>
      <dc:creator>jicking bebiro</dc:creator>
      <pubDate>Sun, 10 Apr 2022 19:18:39 +0000</pubDate>
      <link>https://dev.to/jicking/webdev-browser-extensions-28a5</link>
      <guid>https://dev.to/jicking/webdev-browser-extensions-28a5</guid>
      <description>&lt;p&gt;Here's a list of chromium browser extensions I use to be more productive as a web dev.&lt;br&gt;
Posting it here in case you find these useful too.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Web Developer &lt;a href="https://chrome.google.com/webstore/detail/web-developer/bfbameneiokkgbdmiekhjnmfkcnldhhm" rel="noopener noreferrer"&gt;Link&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsemjkrwblcv3ukavkbly.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsemjkrwblcv3ukavkbly.jpg" alt="Image description" width="793" height="153"&gt;&lt;/a&gt;&lt;br&gt;
A handy extension for web dev utilities if you are like me who prefers to show block element borders in a click.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;CSS Inspector &lt;a href="https://chrome.google.com/webstore/detail/css-inspector/ncgpjidaohcjajcpafgagmejnooepbml" rel="noopener noreferrer"&gt;link&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1zi2su0ehnsutt32vuse.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1zi2su0ehnsutt32vuse.png" alt="Image description" width="518" height="156"&gt;&lt;/a&gt;&lt;br&gt;
Quickly view element's css and copy styles.&lt;br&gt;
Much polished than &lt;a href="https://chrome.google.com/webstore/detail/cssviewer/ggfgijbpiheegefliciemofobhmofgce" rel="noopener noreferrer"&gt;CSSViewer&lt;/a&gt;.&lt;br&gt;
Will require a subscription key in exchange for a donation,&lt;br&gt;
but you can have it for free.&lt;br&gt;
This extension is well made that you'll feel guilty for not donating.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Colorzilla &lt;a href="https://chrome.google.com/webstore/detail/colorzilla/bhlhnicpbhignbdhedgjhgdocnmhomnp" rel="noopener noreferrer"&gt;Link&lt;/a&gt;&lt;br&gt;
My color picker of choice.&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi7gk8sqg6tebmvbejuem.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi7gk8sqg6tebmvbejuem.jpg" alt="Image description" width="623" height="222"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;PixelPerfect &lt;a href="https://chrome.google.com/webstore/detail/perfectpixel-by-welldonec/dkaagdgjmgdmbnecmcefdhjekcoceebi" rel="noopener noreferrer"&gt;Link&lt;/a&gt;&lt;br&gt;
Easily compare your working web page to your design, for pixel perfection (is that really a thing?)&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flytb6y5mki0kd5f57htt.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flytb6y5mki0kd5f57htt.jpg" alt="Image description" width="637" height="365"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;JSON Viewer &lt;a href="https://chrome.google.com/webstore/detail/json-viewer/gbmdgpbipfallnflgajpaliibnhdgobh" rel="noopener noreferrer"&gt;Link&lt;/a&gt;&lt;br&gt;
Pretty prints json and set theme if you get eyesore viewing default light theme.&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd0r7gbr6fbv6a4kwuvfy.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd0r7gbr6fbv6a4kwuvfy.jpg" alt="Image description" width="643" height="279"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Accessibility Insights &lt;a href="https://chrome.google.com/webstore/detail/accessibility-insights-fo/pbjjkligggfmakdaogkfomddhfmpjeni" rel="noopener noreferrer"&gt;Link&lt;/a&gt;&lt;br&gt;
Do quick A11y tests.&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa3cbxskclpmjf8c2p3o4.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa3cbxskclpmjf8c2p3o4.jpg" alt="Image description" width="624" height="323"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Vue Devtools &lt;a href="https://chrome.google.com/webstore/detail/vuejs-devtools/nhdogjmejiglipccpnnnanhbledajbpd" rel="noopener noreferrer"&gt;Link&lt;/a&gt;&lt;br&gt;
A must have for a vue js dev.&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyvq3l1zln45amee7ffzt.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyvq3l1zln45amee7ffzt.jpg" alt="Image description" width="645" height="206"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Marinara Pomodoro &lt;a href="https://chrome.google.com/webstore/detail/marinara-pomodoro%C2%AE-assist/lojgmehidjdhhbmpjfamhpkpodfcodef" rel="noopener noreferrer"&gt;Link&lt;/a&gt;&lt;br&gt;
A simple pomodori app that does it's best at it, no clumsy popping features.&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe0va1i51p3bnv5gv55ak.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe0va1i51p3bnv5gv55ak.jpg" alt="Image description" width="509" height="173"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;There are lots of extensions out there in the wild for web devs, feel free to post recommendations in the comment section.&lt;/p&gt;

&lt;p&gt;Better DX, Happy Devs&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Adding Web Api Controller to a Razor Page ASP.NET Core app</title>
      <dc:creator>jicking bebiro</dc:creator>
      <pubDate>Sat, 28 Aug 2021 06:22:25 +0000</pubDate>
      <link>https://dev.to/jicking/adding-web-api-controller-to-a-razor-page-asp-net-core-app-5hgl</link>
      <guid>https://dev.to/jicking/adding-web-api-controller-to-a-razor-page-asp-net-core-app-5hgl</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;This is part of a personal ASP.NET Core cookbook that i am working on.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Open an existing  asp.net core 5 razor pages app. &lt;/p&gt;

&lt;p&gt;Add Swashbuckle.AspNetCore via nugget. This will auto generate api docs, cool right?&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd7w6i5t1738whugf53k9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd7w6i5t1738whugf53k9.png" alt="image" width="445" height="80"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Update Startup.cs to include controller and swagger services and middlewares.&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1md9pcf00iefseqvuq3s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1md9pcf00iefseqvuq3s.png" alt="image" width="734" height="530"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At project root, add Controllers directory then open context menu under that folder by selecting the folder and right click.&lt;br&gt;
On context menu, click add &amp;gt; controller&lt;/p&gt;

&lt;p&gt;A new dialog window will open for scaffolding options.&lt;br&gt;
Select API.&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3es6unzq0t8zqv0kriob.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3es6unzq0t8zqv0kriob.png" alt="image" width="800" height="253"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Run project then go to &lt;a href="https://localhost:PORT/swagger" rel="noopener noreferrer"&gt;https://localhost:PORT/swagger&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6a34njimnnhaonvl8hwk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6a34njimnnhaonvl8hwk.png" alt="image" width="630" height="606"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There you have it, happy hacking.&lt;/p&gt;

</description>
      <category>dotnet</category>
      <category>webdev</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
