<?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: avery</title>
    <description>The latest articles on DEV Community by avery (@avery_).</description>
    <link>https://dev.to/avery_</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%2F3509744%2F169aa902-c18b-4ab2-ac89-61f80ba99fb8.jpg</url>
      <title>DEV Community: avery</title>
      <link>https://dev.to/avery_</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/avery_"/>
    <language>en</language>
    <item>
      <title>22. EJS (Embedded JavaScript)</title>
      <dc:creator>avery</dc:creator>
      <pubDate>Thu, 30 Apr 2026 15:36:23 +0000</pubDate>
      <link>https://dev.to/avery_/22-ejs-embedded-javascript-2b3g</link>
      <guid>https://dev.to/avery_/22-ejs-embedded-javascript-2b3g</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;BootCamp by Dr.Angela&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;1. What is EJS?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;EJS (Embedded JavaScript) is a templating engine for Node.js&lt;/li&gt;
&lt;li&gt;Key Concepts

&lt;ul&gt;
&lt;li&gt;Templating : Allows you to generate dynamic HTML using JavaScript&lt;/li&gt;
&lt;li&gt;Separation of Concerns : Frontend(HTML, CSS), Backend(JavaScript)&lt;/li&gt;
&lt;li&gt;Other Templating Languages : Python(Jinja), PHP(Twig), JavaScript(EJS)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;How EJS Works : ex)
&lt;code&gt;&amp;lt;% for (let i = 0; i &amp;lt; items.length; i++) { %&amp;gt;&lt;br&gt;
&amp;lt;li&amp;gt;&amp;lt;%= items[i] %&amp;gt;&amp;lt;/li&amp;gt;&lt;br&gt;
&amp;lt;% } %&amp;gt;&lt;/code&gt;

&lt;ul&gt;
&lt;li&gt;JavaScript runs inside HTML, &amp;lt;%= %&amp;gt; outputs data to the page&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Rendering with Express

&lt;ul&gt;
&lt;li&gt;Static : ex) &lt;code&gt;res.sendFile("index.html");&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Dynamic (EJS) : ex)
&lt;code&gt;app.post("/submit", (req, res) =&amp;gt; {
res.render("index.ejs", {
name: req.body["name"]
});
});&lt;/code&gt;
&lt;code&gt;&amp;lt;body&amp;gt;
&amp;lt;h1&amp;gt;Hello &amp;lt;%= name %&amp;gt;&amp;lt;/h1&amp;gt;
&amp;lt;/body&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. EJS Tags&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&amp;lt;%= variable %&amp;gt; : output value&lt;/li&gt;
&lt;li&gt;&amp;lt;% code %&amp;gt; : execute JavaScript&lt;/li&gt;
&lt;li&gt;&amp;lt;%- html %&amp;gt; : render HTML (unescaped)&lt;/li&gt;
&lt;li&gt;&amp;lt;%% %%&amp;gt; : display &amp;lt;% %&amp;gt; literally&lt;/li&gt;
&lt;li&gt;&amp;lt;%# comment %&amp;gt; : comment (not executed)&lt;/li&gt;
&lt;li&gt;&amp;lt;%- include("header.ejs") %&amp;gt; : Include (Partials), Used to reuse components (header, footer, etc.)&lt;/li&gt;
&lt;li&gt;Using JavaScript in EJS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Passing Data&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Server → EJS : Pass data using &lt;code&gt;res.render()&lt;/code&gt;

&lt;ul&gt;
&lt;li&gt;If no data exists : Use default values or locals&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;EJS → Server : Use forms with method="POST"&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4. Partials &amp;amp; Layouts&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Static files : &lt;code&gt;app.use(express.static("public"));&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Templating syntax : &amp;lt;% %&amp;gt;(logic), &amp;lt;%= %&amp;gt;(output), &amp;lt;%- %&amp;gt;(raw HTML)&lt;/li&gt;
&lt;li&gt;Partials : ex) &amp;lt;%- include("header.ejs") %&amp;gt;, &amp;lt;%- include("footer.ejs") %&amp;gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Helps avoid code duplication, Improves maintainability&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Javascript Tip&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Variable Keywords : const(cannot be reassigned), let(can be reassigned)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;forEach : method used to loop through an array and run a function on each item. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ex) 
&lt;code&gt;array.forEach((element, index, array) =&amp;gt; {
console.log(element); 
console.log(index);  
});&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>fullstack</category>
      <category>programming</category>
    </item>
    <item>
      <title>21. Express.js with Node.js</title>
      <dc:creator>avery</dc:creator>
      <pubDate>Mon, 27 Apr 2026 16:17:38 +0000</pubDate>
      <link>https://dev.to/avery_/21-expressjs-with-nodejs-3mc4</link>
      <guid>https://dev.to/avery_/21-expressjs-with-nodejs-3mc4</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;BootCamp by Dr.Angela&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;1. What is Express?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Express.js is a backend web framework for Node.js&lt;/li&gt;
&lt;li&gt;Express vs Node.js

&lt;ul&gt;
&lt;li&gt;Node.js : Runtime environment (not a framework)&lt;/li&gt;
&lt;li&gt;Express.js : Framework built on top of Node.js, Makes backend development easier&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Why Express? : Less code, Better readability, Middleware support, Faster development&lt;/li&gt;

&lt;li&gt;“It’s All Node To Me”

&lt;ul&gt;
&lt;li&gt;Can be used for : Web backend, IoT applications, Desktop apps (e.g. VS Code is built with Electron + Node)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Creating Your First Express Server&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Backend structure

&lt;ul&gt;
&lt;li&gt;Server : computer running 24/7 (listening for requests)&lt;/li&gt;
&lt;li&gt;Application : index.js (logic)&lt;/li&gt;
&lt;li&gt;Database : data storage&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Client-side vs Server-side

&lt;ul&gt;
&lt;li&gt;Client : browser&lt;/li&gt;
&lt;li&gt;Server : backend system&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Setup steps

&lt;ul&gt;
&lt;li&gt;mkdir project-folder&lt;/li&gt;
&lt;li&gt;cd project-folder&lt;/li&gt;
&lt;li&gt;touch index.js&lt;/li&gt;
&lt;li&gt;npm init -y&lt;/li&gt;
&lt;li&gt;npm i express&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Basic server : ex)
`import express from "express";&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;const app = express();&lt;br&gt;
const port = 3000;&lt;/p&gt;

&lt;p&gt;app.listen(port, () =&amp;gt; {&lt;br&gt;
  console.log(&lt;code&gt;Server running on port ${port}.&lt;/code&gt;);&lt;br&gt;
});`&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is localhost? : Local server running on your computer

&lt;ul&gt;
&lt;li&gt;Example : &lt;a href="http://localhost:3000" rel="noopener noreferrer"&gt;http://localhost:3000&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Think of it as your computer’s “door” for apps&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Check open ports

&lt;ul&gt;
&lt;li&gt;Windows : netstat -ano | findstr "LISTENING"&lt;/li&gt;
&lt;li&gt;Mac/Linux : sudo lsof -i -P -n | grep LISTEN&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. HTTP Requests&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HTTP : HyperText Transfer Protocol&lt;/li&gt;
&lt;li&gt;HTTP Methods

&lt;ul&gt;
&lt;li&gt;GET : retrieve data&lt;/li&gt;
&lt;li&gt;POST : send data&lt;/li&gt;
&lt;li&gt;PUT : replace data&lt;/li&gt;
&lt;li&gt;PATCH : update data&lt;/li&gt;
&lt;li&gt;DELETE : remove data&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Basic route : ex) 
&lt;code&gt;app.get("/", (req, res) =&amp;gt; {&lt;br&gt;
res.send("Hello, World!");&lt;br&gt;
});&lt;/code&gt;
&lt;/li&gt;

&lt;li&gt;Endpoints
&lt;code&gt;app.get("/about", (req, res) =&amp;gt; {&lt;br&gt;
res.send("&amp;lt;h1&amp;gt;About Me&amp;lt;/h1&amp;gt;");&lt;br&gt;
});&lt;/code&gt;
&lt;/li&gt;

&lt;li&gt;Nodemon : Auto-restarts server when changes are made

&lt;ul&gt;
&lt;li&gt;ex)
&lt;code&gt;npm i -g nodemon
nodemon index.js&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4. Postman&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tool for testing APIs (without frontend)&lt;/li&gt;
&lt;li&gt;HTTP Status Codes

&lt;ul&gt;
&lt;li&gt;100–199 : Informational&lt;/li&gt;
&lt;li&gt;200–299 : Success&lt;/li&gt;
&lt;li&gt;300–399 : Redirection&lt;/li&gt;
&lt;li&gt;400–499 : Client errors&lt;/li&gt;
&lt;li&gt;500–599 : Server errors&lt;/li&gt;
&lt;li&gt;Reference : &lt;a href="https://developer.mozilla.org/ko/docs/Web/HTTP/Reference/Status" rel="noopener noreferrer"&gt;https://developer.mozilla.org/ko/docs/Web/HTTP/Reference/Status&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Install all dependencies : &lt;code&gt;npm install&lt;/code&gt;

&lt;ul&gt;
&lt;li&gt;Installs everything listed in package.json&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;5. Introduction to Middleware&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Body Parser : Handles form data (x-www-form-urlencoded)

&lt;ul&gt;
&lt;li&gt;app.use(bodyParser.urlencoded({extended:true}));&lt;/li&gt;
&lt;li&gt;Express built-in middleware : app.use(express.urlencoded({ extended: true }));&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Send file : res.sendFile(path);&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;6. Custom Middleware&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is middleware? : Code that runs between request and response

&lt;ul&gt;
&lt;li&gt;Used for : Logging, Authentication, Error handling, Data preprocessing&lt;/li&gt;
&lt;li&gt;Example: Logger
&lt;code&gt;function logger(req, res, next) {
console.log("Request Method:", req.method);
console.log("Request URL:", req.url);
next();
}
app.use(logger);&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Path utilities : ex)
`import { dirname } from "path";
import { fileURLToPath } from "url";&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;const __dirname = dirname(fileURLToPath(import.meta.url));`&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Important : Middleware order matters, body-parser must come before routes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;7. Secrets Access Project&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Example : 
`var userIsAuthorised = false;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;function passwordCheck(req, res, next) {&lt;br&gt;
  const password = req.body["password"];&lt;/p&gt;

&lt;p&gt;if (password === "ILoveProgramming") {&lt;br&gt;
    userIsAuthorised = true;&lt;br&gt;
  }&lt;/p&gt;

&lt;p&gt;next();&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;app.use(passwordCheck);`&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Route protection : 
`app.post("/check", (req, res) =&amp;gt; {
if (userIsAuthorised) {
res.sendFile(&lt;strong&gt;dirname + "/public/secret.html");
} else {
res.sendFile(&lt;/strong&gt;dirname + "/public/index.html");
}&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;console.log(req.body);&lt;br&gt;
});`&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>beginners</category>
      <category>fullstack</category>
    </item>
    <item>
      <title>20. Node.js</title>
      <dc:creator>avery</dc:creator>
      <pubDate>Tue, 21 Apr 2026 20:30:34 +0000</pubDate>
      <link>https://dev.to/avery_/20-nodejs-11d8</link>
      <guid>https://dev.to/avery_/20-nodejs-11d8</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;BootCamp by Dr.Angela&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;1. What is Node.js?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Node.js is a JavaScript runtime that allows you to run JavaScript outside the browser (on a server or local machine)&lt;/li&gt;
&lt;li&gt;Why use frameworks/libraries? : Reuse components, Reduce development overhead

&lt;ul&gt;
&lt;li&gt;ex) Reading files, writing files, URL Strings, Networking, Data Streams, Diagnostics, Tests, Debugger, Error Codes&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Definition : “Node.js is an asynchronous, event-driven JavaScript runtime designed to build scalable network applications.”

&lt;ul&gt;
&lt;li&gt;Key Concepts&lt;/li&gt;
&lt;li&gt;JavaScript Runtime : Runs JS outside the browser (server/local computer)&lt;/li&gt;
&lt;li&gt;Asynchronous : Executes tasks without blocking (non-blocking)&lt;/li&gt;
&lt;li&gt;Event-driven : Responds to events (requests, user actions, etc.)&lt;/li&gt;
&lt;li&gt;Application : On Server(Computer)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Why Node.js? : Full-stack JavaScript, Scalable, Non-blocking I/O
, Huge ecosystem&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Using Node.js&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Check version : node -v&lt;/li&gt;
&lt;li&gt;REPL (Read-Eval-Print Loop) : node

&lt;ul&gt;
&lt;li&gt;Commands&lt;/li&gt;
&lt;li&gt;.help : show commands)&lt;/li&gt;
&lt;li&gt;.exit or Ctrl + C (twice) : exit &lt;/li&gt;
&lt;li&gt;Similar to the browser console&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Run a JS file : 
cd path/to/file
node index.js&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Native Node Modules&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Native Modules : Built-in modules provided by Node.js&lt;/li&gt;
&lt;li&gt;File System (fs) : const fs = require("fs");

&lt;ul&gt;
&lt;li&gt;Write file : 
fs.writeFile("message.txt", "Hello from NodeJS!", (err) =&amp;gt; {
if (err) throw err;
console.log("The file has been saved!");
});&lt;/li&gt;
&lt;li&gt;Read file : 
fs.readFile("./message.txt", "utf8", (err, data) =&amp;gt; {
if (err) throw err;
console.log(data);
});&lt;/li&gt;
&lt;li&gt;"utf8" → encoding option&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Docs : &lt;a href="https://nodejs.org/docs/latest-v18.x/api/fs.html" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;a href="https://nodejs.org/docs/latest-v18.x/api/fs.html" rel="noopener noreferrer"&gt;https://nodejs.org/docs/latest-v18.x/api/fs.html&lt;/a&gt;
&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4. NPM (Node Package Manager)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A repository of packages and libraries&lt;/li&gt;
&lt;li&gt;Website : &lt;a href="https://www.npmjs.com/" rel="noopener noreferrer"&gt;https://www.npmjs.com/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Initialize project : npm init

&lt;ul&gt;
&lt;li&gt;Quick setup : npm init -y&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Install packages : npm install 

&lt;ul&gt;
&lt;li&gt;ex) npm i sillyname&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Module Systems

&lt;ul&gt;
&lt;li&gt;CommonJS (CJS) : ex) const generateName = require("sillyname");&lt;/li&gt;
&lt;li&gt;ES Modules (ESM) : ex) import generateName from "sillyname";&lt;/li&gt;
&lt;li&gt;Enable ESM : "type": "module"&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Example : 
import superheroes, { randomSuperhero } from "superheroes";&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;const name = randomSuperhero();&lt;br&gt;
  console.log(`I am ${name}!`);&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Mini Project: QR Code Generator&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Packages : inquirer(user input), qr-image(generate QR codes)&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Install : npm i inquirer qr-image&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Note : Be careful with package names (typos can install wrong packages), Always check package documentation&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>beginners</category>
      <category>fullstack</category>
    </item>
    <item>
      <title>19. Backend Web Development</title>
      <dc:creator>avery</dc:creator>
      <pubDate>Sun, 19 Apr 2026 09:55:33 +0000</pubDate>
      <link>https://dev.to/avery_/19-backend-web-development-1fn4</link>
      <guid>https://dev.to/avery_/19-backend-web-development-1fn4</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;BootCamp by Dr.Angela&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;1. Backend Web Development Explained&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is the backend? : The backend is the part of a web application that runs on the server and handles logic, data, and requests.&lt;/li&gt;
&lt;li&gt;Main Components

&lt;ul&gt;
&lt;li&gt;Server : A computer that runs 24/7, Can be local (localhost) or remote (cloud server)&lt;/li&gt;
&lt;li&gt;Application (Backend Logic) : Handles requests and responses&lt;/li&gt;
&lt;li&gt;Returns : HTML, Data (JSON, etc.), Status codes (e.g. 404 Not Found, 500 Server Error)&lt;/li&gt;
&lt;li&gt;Database : Stores and manages data, Ensures data persistence (data is saved long-term)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Web Page vs Web App

&lt;ul&gt;
&lt;li&gt;Web Page : Simple structure(User ↔ Server), Mostly static content&lt;/li&gt;
&lt;li&gt;Web Application : Full system(User ↔ Server ↔ Application ↔ Database), Dynamic content with data interaction&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Backend Tools and Technologies&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Frontend : HTML, CSS, JavaScript(React, Angular, Vue)&lt;/li&gt;
&lt;li&gt;Backend : Java(Spring), Ruby(Ruby on Rails), PHP(Laravel), C#(ASP.NET), Python(Django, Flask), JavaScript(Node.js)&lt;/li&gt;
&lt;li&gt;Backend choice depends on the ecosystem, scalability needs, and personal or company preference.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>fullstack</category>
      <category>programming</category>
    </item>
    <item>
      <title>18. The Unix Command Line</title>
      <dc:creator>avery</dc:creator>
      <pubDate>Sun, 19 Apr 2026 07:00:43 +0000</pubDate>
      <link>https://dev.to/avery_/18-the-unix-command-line-l60</link>
      <guid>https://dev.to/avery_/18-the-unix-command-line-l60</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;BootCamp by Dr.Angela&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;1. Install Git Bash on Windows&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Download: &lt;a href="https://gitforwindows.org/" rel="noopener noreferrer"&gt;https://gitforwindows.org/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Use Git Bash as the terminal in VS Code&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Understanding the Command Line&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Shell vs Kernel

&lt;ul&gt;
&lt;li&gt;Shell: user interface (CLI/GUI) that interacts with the system&lt;/li&gt;
&lt;li&gt;Kernel: core of the OS that manages CPU, memory, and disks&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Bash (Bourne Again Shell) : A popular Unix shell (used in macOS and Linux)&lt;/li&gt;

&lt;li&gt;Why use CLI (Command Line Interface)? : Faster, More control, More flexible&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Command Line Navigation&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ls : list files and directories&lt;/li&gt;
&lt;li&gt;cd : change directory&lt;/li&gt;
&lt;li&gt;cd .. : move up one level&lt;/li&gt;
&lt;li&gt;Tips

&lt;ul&gt;
&lt;li&gt;Tab : auto-complete&lt;/li&gt;
&lt;li&gt;↑ / ↓ : reuse previous commands&lt;/li&gt;
&lt;li&gt;Drag &amp;amp; drop folder : auto path input&lt;/li&gt;
&lt;li&gt;Alt + Click : move cursor&lt;/li&gt;
&lt;li&gt;Ctrl + A : move to beginning of line&lt;/li&gt;
&lt;li&gt;Ctrl + E : move to end of line&lt;/li&gt;
&lt;li&gt;Ctrl + U : delete to the beginning&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4. File &amp;amp; Directory Management&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create

&lt;ul&gt;
&lt;li&gt;mkdir folder-name     # create folder&lt;/li&gt;
&lt;li&gt;touch file.txt        # create file&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Open

&lt;ul&gt;
&lt;li&gt;start file.txt        # Windows&lt;/li&gt;
&lt;li&gt;open file.txt         # macOS&lt;/li&gt;
&lt;li&gt;code file.txt         # open in VS Code&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Delete

&lt;ul&gt;
&lt;li&gt;rm file.txt           # delete file&lt;/li&gt;
&lt;li&gt;rm *                  # delete all files in current folder&lt;/li&gt;
&lt;li&gt;rm -r folder-name     # delete folder&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Other commands

&lt;ul&gt;
&lt;li&gt;pwd                   # show current path&lt;/li&gt;
&lt;li&gt;clear                 # clear terminal&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Reference : &lt;a href="https://www.learnenough.com/command-line-tutorial" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;a href="https://www.learnenough.com/command-line-tutorial" rel="noopener noreferrer"&gt;https://www.learnenough.com/command-line-tutorial&lt;/a&gt;
&lt;/li&gt;

&lt;li&gt;Note (Important)

&lt;ul&gt;
&lt;li&gt;rm * and rm -r are dangerous commands, Always double-check before running them (no undo)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>fullstack</category>
      <category>beginners</category>
    </item>
    <item>
      <title>17. jQuery</title>
      <dc:creator>avery</dc:creator>
      <pubDate>Fri, 17 Apr 2026 10:26:31 +0000</pubDate>
      <link>https://dev.to/avery_/17-jquery-c0f</link>
      <guid>https://dev.to/avery_/17-jquery-c0f</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;BootCamp by Dr.Angela&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;1. What is jQuery?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A JavaScript library that simplifies DOM manipulation&lt;/li&gt;
&lt;li&gt;ex) 
&lt;code&gt;document.querySelector("h1"); // Vanilla JS&lt;/code&gt;
&lt;code&gt;$("h1");                      // jQuery&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. How to Use jQuery&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CDN (Google Hosted Libraries) : &lt;a href="https://developers.google.com/speed/libraries#jquery" rel="noopener noreferrer"&gt;https://developers.google.com/speed/libraries#jquery&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Place

&lt;ul&gt;
&lt;li&gt;Before &lt;code&gt;&amp;lt;/body&amp;gt;&lt;/code&gt; → no timing issues (recommended)&lt;/li&gt;
&lt;li&gt;Inside &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; → may cause timing issues&lt;/li&gt;
&lt;li&gt;Fix timing issue : 
&lt;code&gt;$(document).ready(function () {
// jQuery code
});&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Minification&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Removes unnecessary spaces to reduce file size and improve loading speed&lt;/li&gt;
&lt;li&gt;Tool : &lt;a href="https://www.minifier.org/" rel="noopener noreferrer"&gt;https://www.minifier.org/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4. Selecting Elements&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ex) &lt;code&gt;$("button");&lt;/code&gt; // selects all button elements&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;5. Manipulating Styles&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Change CSS : ex) &lt;code&gt;$("h1").css("font-size", "5rem");&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Add class (multiple allowed) : ex) &lt;code&gt;$("h1").addClass("big-title margin-50");&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Remove class : ex) &lt;code&gt;$("h1").removeClass("big-title");&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Check class : ex) &lt;code&gt;$("h1").hasClass("margin-50");&lt;/code&gt; // true / false&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;6. Manipulating Text&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Text only : ex) &lt;code&gt;$("h1").text("Bye");&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Includes HTML : ex) &lt;code&gt;$("h1").html("&amp;lt;em&amp;gt;Hey&amp;lt;/em&amp;gt;");&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;7. Manipulating Attributes&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Get attribute : ex) &lt;code&gt;console.log($("img").attr("src"));&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Set attribute : ex) &lt;code&gt;$("a").attr("href", "https://www.google.com");&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Event Listeners&lt;/li&gt;
&lt;li&gt;Vanilla JS vs jQuery : ex)
&lt;code&gt;for (var i = 0; i &amp;lt; 5; i++) {
document.querySelectorAll("button")[i].addEventListener("click", function () {
document.querySelector("h1").style.color = "purple";
});
}&lt;/code&gt;
vs
&lt;code&gt;$("button").click(function () {
$("h1").css("color", "purple");
});&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Key press : ex)
&lt;code&gt;$(document).keypress(function (event) {
$("h1").text(event.key);
});&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Mouse event : ex)
&lt;code&gt;$("h1").on("mouseover", function () {
$("h1").css("color", "purple");
});&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Reference : &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model/Events" rel="noopener noreferrer"&gt;https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model/Events&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;9. Adding and Removing Elements&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;before() : ex) &lt;code&gt;$("h1").before("&amp;lt;button&amp;gt;New&amp;lt;/button&amp;gt;");&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;after() : ex) &lt;code&gt;$("h1").after("&amp;lt;button&amp;gt;New&amp;lt;/button&amp;gt;");&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;prepend() : ex) &lt;code&gt;$("h1").prepend("&amp;lt;button&amp;gt;New&amp;lt;/button&amp;gt;");&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;append() : ex) &lt;code&gt;$("h1").append("&amp;lt;button&amp;gt;New&amp;lt;/button&amp;gt;");&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;remove() : ex) &lt;code&gt;$("button").remove();&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;10. Animations&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Built-in effects: hide, show, toggle, fadeOut, fadeIn, fadeToggle, slideUp, slideDown, slideToggle

&lt;ul&gt;
&lt;li&gt;ex)
&lt;code&gt;$("button").on("click", function () {
$("h1").hide();
});&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;animate() (numeric values only) : ex)
&lt;code&gt;$("button").on("click", function () {&lt;br&gt;
$("h1").animate({ opacity: 0.5 });&lt;br&gt;
});&lt;/code&gt;
&lt;/li&gt;

&lt;li&gt;Chaining : ex)
&lt;code&gt;$("button").on("click", function () {&lt;br&gt;
$("h1").slideUp().slideDown().animate({ opacity: 0.5 });&lt;br&gt;
});&lt;/code&gt;
&lt;/li&gt;

&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>programming</category>
      <category>fullstack</category>
    </item>
    <item>
      <title>16. Advanced JavaScript and DOM Manipulation</title>
      <dc:creator>avery</dc:creator>
      <pubDate>Wed, 15 Apr 2026 18:16:46 +0000</pubDate>
      <link>https://dev.to/avery_/16-advanced-javascript-and-dom-manipulation-3464</link>
      <guid>https://dev.to/avery_/16-advanced-javascript-and-dom-manipulation-3464</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;BootCamp by Dr.Angela&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;1. Adding Event Listeners&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ex) &lt;code&gt;document.querySelector("button").addEventListener("click", handleClick);&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Anonymous function

&lt;ul&gt;
&lt;li&gt;ex) 
&lt;code&gt;document.querySelector("button").addEventListener("click", function () {
// what to do when clicked
});&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Apply to multiple elements (using a loop)

&lt;ul&gt;
&lt;li&gt;ex)
`var numberOfDrumButtons = document.querySelectorAll(".drum").length;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;for (var i = 0; i &amp;lt; numberOfDrumButtons; i++) {&lt;br&gt;
  document.querySelectorAll(".drum")[i].addEventListener("click", function () {&lt;br&gt;
    alert("I got clicked!");&lt;br&gt;
  });&lt;br&gt;
}`&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Higher Order Functions&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Functions that take other functions as arguments or return functions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Playing Sounds on a Website&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ex)
&lt;code&gt;var audio = new Audio("audio.mp3");
audio.play();&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;this(keyword) : Refers to the element that triggered the event

&lt;ul&gt;
&lt;li&gt;ex)
&lt;code&gt;document.querySelector(".drum").addEventListener("click", function () {
this.style.color = "white";
});&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4. Switch Statements&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Used to compare a single value against multiple cases&lt;/li&gt;
&lt;li&gt;ex) 
`switch (value) {
case "A":
break;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;case "B":&lt;br&gt;
    break;&lt;/p&gt;

&lt;p&gt;default:&lt;br&gt;
}`&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. JavaScript Objects&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Objects store related data and behavior together&lt;/li&gt;
&lt;li&gt;Constructor Function : Starts with a capital letter

&lt;ul&gt;
&lt;li&gt;ex)
&lt;code&gt;function BellBoy(name, age, hasWorkPermit, languages) {
this.name = name;
this.age = age;
this.hasWorkPermit = hasWorkPermit;
this.languages = languages;
}&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Create object : ex) &lt;code&gt;var bellBoy1 = new BellBoy("Timmy", 19, true, ["French", "English"]);&lt;/code&gt;
&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;6. Object Methods &amp;amp; Dot Notation&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Constructor Function Including Methods : ex)
function BellBoy(name, age, hasWorkPermit, languages) {
this.name = name;
this.age = age;
this.hasWorkPermit = hasWorkPermit;
this.languages = languages;
this.moveSuitcase = function () {
alert("May I take your suitcase?");
};
}&lt;/li&gt;
&lt;li&gt;Call method : ex) bellBoy1.moveSuitcase();&lt;/li&gt;
&lt;li&gt;Dot notation (.) : Used to access properties and methods of an object

&lt;ul&gt;
&lt;li&gt;ex) &lt;code&gt;object.property&lt;/code&gt; or &lt;code&gt;object.method()&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;7. Keyboard Event Listeners&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;keydown : Fires when a key is pressed (includes all keys)&lt;/li&gt;
&lt;li&gt;keypress : Fires when a character key is pressed (deprecated in modern JS)&lt;/li&gt;
&lt;li&gt;Check pressed key : ex)
&lt;code&gt;document.addEventListener("keydown", function (event) {
console.log(event.key);
});&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;8. Callbacks and Events&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Higher-order function: takes a function as an argument&lt;/li&gt;
&lt;li&gt;Callback function: the function passed into another function&lt;/li&gt;
&lt;li&gt;Tip :  &lt;code&gt;$0&lt;/code&gt; (DevTools, Refers to the currently selected element in the Elements panel)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;9. Adding Animation&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Using classList : ex) &lt;code&gt;document.querySelector("name").classList.add("pressed");&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;setTimeout(function, milliseconds)&lt;/code&gt; : Used to create temporary visual effects

&lt;ul&gt;
&lt;li&gt;ex)
&lt;code&gt;setTimeout(function () {
activeButton.classList.remove("pressed");
}, 100);&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>programming</category>
      <category>fullstack</category>
    </item>
    <item>
      <title>15. The Document Object Model (DOM)</title>
      <dc:creator>avery</dc:creator>
      <pubDate>Tue, 14 Apr 2026 21:16:13 +0000</pubDate>
      <link>https://dev.to/avery_/15-the-document-object-model-dom-442i</link>
      <guid>https://dev.to/avery_/15-the-document-object-model-dom-442i</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;BootCamp by Dr.Angela&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;1. Adding JavaScript to Websites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;script src="index.js" charset="utf-8"&amp;gt;&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Place the &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; tag at the end of the &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Ensures JavaScript runs after the HTML elements are loaded&lt;/li&gt;
&lt;li&gt;Can only manipulate elements that already exist in the DOM&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Introduction to the DOM&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Properties : ex) innerHTML, style, firstChild&lt;/li&gt;
&lt;li&gt;Methods : ex) click(), appendChild(), setAttribute()&lt;/li&gt;
&lt;li&gt;Tool : HTML Tree Generator (&lt;a href="https://chromewebstore.google.com/detail/html-tree-generator/dlbbmhhaadfnbbdnjalilhdakfmiffeg" rel="noopener noreferrer"&gt;https://chromewebstore.google.com/detail/html-tree-generator/dlbbmhhaadfnbbdnjalilhdakfmiffeg&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Selecting HTML Elements&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;querySelector() : Returns the first matching element, Supports #id, .class, and tag selectors&lt;/li&gt;
&lt;li&gt;querySelectorAll() : Returns all matching elements (NodeList)&lt;/li&gt;
&lt;li&gt;getElementsByTagName() : Returns elements by tag name (HTMLCollection)&lt;/li&gt;
&lt;li&gt;getElementsByClassName() : Returns elements by class name&lt;/li&gt;
&lt;li&gt;getElementById() : Returns a single element&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4. Manipulating Styles&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use the DOM Style Object : &lt;a href="https://www.w3schools.com/jsref/dom_obj_style.asp" rel="noopener noreferrer"&gt;https://www.w3schools.com/jsref/dom_obj_style.asp&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Ex) &lt;code&gt;document.querySelector("h1").style.color = "red";&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;5. Separation of Concerns (Structure vs Style vs Behaviour)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add class : ex) &lt;code&gt;document.querySelector("name").classList.add("className");&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Remove class : ex) &lt;code&gt;document.querySelector("name").classList.remove("className");&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Toggle class : ex) &lt;code&gt;document.querySelector("name").classList.toggle("className");&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;6. Text Manipulation&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;innerHTML(can include HTML) vs textContent(text only)

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;document.querySelector("h1").innerHTML = "&amp;lt;em&amp;gt;Hello&amp;lt;/em&amp;gt;";&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;document.querySelector("h1").textContent = "Hello";&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;7. Manipulating Attributes&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;attributes : shows all attributes&lt;/li&gt;
&lt;li&gt;getAttribute() : gets attribute value&lt;/li&gt;
&lt;li&gt;setAttribute() : sets or updates attribute value

&lt;ul&gt;
&lt;li&gt;ex) &lt;code&gt;document.querySelector("a").setAttribute("href", "https://www.bing.com");&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>programming</category>
      <category>fullstack</category>
    </item>
    <item>
      <title>14. Intermediate Javascript</title>
      <dc:creator>avery</dc:creator>
      <pubDate>Mon, 13 Apr 2026 21:46:46 +0000</pubDate>
      <link>https://dev.to/avery_/14-intermediate-javascript-3ge2</link>
      <guid>https://dev.to/avery_/14-intermediate-javascript-3ge2</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;BootCamp by Dr.Angela&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;1. Random Number Generation&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Generate random numbers

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;var n = Math.random();&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Returns a number between 0 (inclusive) and 1 (exclusive)&lt;/li&gt;

&lt;li&gt;Change range

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Math.floor(n * x) + 1;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Generates a number between 1 and x&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Control Statements – If / Else&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If / Else condition

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;if (track === "clear") {
goStraight();
} else {
turnRight();
}&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Tip : Use a flowchart to visualize logic&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Comparators and Equality&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;===(is equal to), !==(is not equal to), &amp;gt;(greater than), &amp;lt;(less than), &amp;gt;=(greater than or equal to), &amp;lt;=(less than or equal to)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4. Combining Conditions&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&amp;amp;&amp;amp;(AND), ||(OR), !(NOT)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;5. Arrays (Collections)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ex) &lt;code&gt;var list = ["A", "B", "C"];&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Length : &lt;code&gt;list.length;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Access element : &lt;code&gt;list[x];&lt;/code&gt; // index starts from 0&lt;/li&gt;
&lt;li&gt;Check if value exists : &lt;code&gt;list.includes("A");&lt;/code&gt; // returns true or false&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;6. Adding Elements to Arrays&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add to the end : &lt;code&gt;list.push("D");&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;7. While Loop&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;while (condition) {
// do something
}&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Runs while the condition is true&lt;/li&gt;
&lt;li&gt;Used for state-based repetition&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;8. For Loop&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;for (let i = 0; i &amp;lt; 2; i++) {
// do something
}&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Structure : (start; condition; change)&lt;/li&gt;
&lt;li&gt;Used to iterate a specific number of times&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>beginners</category>
      <category>fullst</category>
    </item>
    <item>
      <title>13. Introduction to JavaScript (ES6)</title>
      <dc:creator>avery</dc:creator>
      <pubDate>Sun, 12 Apr 2026 19:19:09 +0000</pubDate>
      <link>https://dev.to/avery_/13-introduction-to-javascript-es6-4i94</link>
      <guid>https://dev.to/avery_/13-introduction-to-javascript-es6-4i94</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;BootCamp by Dr.Angela&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;1. Introduction to JavaScript&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Why it was created : Created by Brendan Eich, To enable interactive web pages instead of only server-rendered content&lt;/li&gt;
&lt;li&gt;ECMAScript : A standard that defines how JavaScript should work across different environments&lt;/li&gt;
&lt;li&gt;JavaScript vs Java

&lt;ul&gt;
&lt;li&gt;JavaScript: Interpreted language (like Python, Ruby)&lt;/li&gt;
&lt;li&gt;Java: Compiled language (like C/C++, Swift)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Evolution : Initially used for front-end only, Now used for full-stack development&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. JavaScript Alerts – Adding Behaviour to Websites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Console : Used for testing code line by line&lt;/li&gt;
&lt;li&gt;DevTools : Sources → Snippets → New Snippet (run full scripts)&lt;/li&gt;
&lt;li&gt;Basic structure : &lt;code&gt;alert("Hello");&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Function + Message + Execution&lt;/li&gt;
&lt;li&gt;Best Practices

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/rwaldron/idiomatic.js" rel="noopener noreferrer"&gt;https://github.com/rwaldron/idiomatic.js&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/The_Elements_of_Style" rel="noopener noreferrer"&gt;https://en.wikipedia.org/wiki/The_Elements_of_Style&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Data Types&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;String (use quotes), Number, Boolean (true, false)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;typeof()&lt;/code&gt; : Returns the data type of a value&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4. JavaScript Variables&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Example : &lt;code&gt;var name = "Value";&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;prompt()&lt;/code&gt; : Displays an input popup for the user&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;5. Naming Conventions for Variables&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Do not use reserved keywords&lt;/li&gt;
&lt;li&gt;Cannot start with a number&lt;/li&gt;
&lt;li&gt;No spaces allowed&lt;/li&gt;
&lt;li&gt;Only _ and $ are allowed as special characters&lt;/li&gt;
&lt;li&gt;Use camelCase : First word lowercase, next words start with uppercase&lt;/li&gt;
&lt;li&gt;Tip : Clear console(Empty Cache and Hard Reload)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;6. String Concatenation&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use &lt;code&gt;+&lt;/code&gt; to combine strings

&lt;ul&gt;
&lt;li&gt;ex) &lt;code&gt;"Hello" + " " + "World"&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;7. String Length&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;name.length;&lt;/code&gt; : Returns the number of characters&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;8. Slicing Strings&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;name.slice(x, y);&lt;/code&gt; : Extracts characters from index x to y-1&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;9. Changing Case&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;name.toUpperCase();&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;name.toLowerCase();&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;10. Basic Arithmetic &amp;amp; Modulo&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;+(Addition), -(Subtraction), *(Multiplication), /(Division), %(Modulo, remainder)&lt;/li&gt;
&lt;li&gt;Use parentheses &lt;code&gt;()&lt;/code&gt; to control order&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;11. Increment &amp;amp; Decrement&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;x++;&lt;/code&gt;(increment), &lt;code&gt;x--;&lt;/code&gt;(decrement)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;x += y; x -= y; x *= y; x /= y;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;12. Creating and Calling Functions&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a function : &lt;code&gt;function func() {};&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Call a function : &lt;code&gt;func();&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Naming rules are the same as variables&lt;/li&gt;
&lt;li&gt;Tip : Ctrl + F → find and replace&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;13. Parameters and Arguments&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ex) &lt;code&gt;function getMilk(money) {}&lt;/code&gt;

&lt;ul&gt;
&lt;li&gt;Parameter: variable inside the function (money)&lt;/li&gt;
&lt;li&gt;Argument: actual value passed when calling the function&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Reference : &lt;a href="https://www.w3schools.com/jsref/jsref_floor.asp" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;a href="https://www.w3schools.com/jsref/jsref_floor.asp" rel="noopener noreferrer"&gt;https://www.w3schools.com/jsref/jsref_floor.asp&lt;/a&gt;
&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;14. Outputs &amp;amp; Return Values&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;return : Sends a value back from the function

&lt;ul&gt;
&lt;li&gt;ex) &lt;code&gt;function add(a, b) {
  return a + b;
 }&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>fullstack</category>
      <category>programming</category>
    </item>
    <item>
      <title>12. Web Design School - Create a Website that People Love</title>
      <dc:creator>avery</dc:creator>
      <pubDate>Sun, 05 Apr 2026 21:36:05 +0000</pubDate>
      <link>https://dev.to/avery_/12-web-design-school-create-a-website-that-people-love-3l2o</link>
      <guid>https://dev.to/avery_/12-web-design-school-create-a-website-that-people-love-3l2o</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;BootCamp by Dr.Angela&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;1. Introduction to Web Design&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Core Principles : Colour Theory, User Interface (UI) Design, Typography, User Experience (UX) Design&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Understanding Colour Theory&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Moods of Colors : Red(Love, Energy, Intensity), Yellow(Joy, Intellect, Attention), Green( Freshness, Safety, Growth), Blue(Stability, Trust, Serenity), Purple(Royalty, Wealth, Femininity)&lt;/li&gt;
&lt;li&gt;Combining Colors : Use harmonious color palettes, Balance contrast and consistency&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Understanding Typography and Choosing Fonts&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Font Categories

&lt;ul&gt;
&lt;li&gt;Serif : Minion Pro (Traditional), Trajan (Stable), Baskerville (Respectable)&lt;/li&gt;
&lt;li&gt;Sans-Serif : Helvetica (Sensible), Avenir (Simple), DIN (Straightforward)&lt;/li&gt;
&lt;li&gt;Script : Freestyle Script (Personal), Adios Script Pro (Creative), Snell Roundhand (Elegant)&lt;/li&gt;
&lt;li&gt;Display : VAG Rounded (Friendly), Gin (Loud), Thirsty Rough (Amusing)&lt;/li&gt;
&lt;li&gt;Modern : Sackers Gothic (Stylish), Gotham (Chic), Futura (Smart)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Readability : Open shapes, Ample inter-character spacing, Unambiguous letterforms, Varying proportions&lt;/li&gt;

&lt;li&gt;Best Practices

&lt;ul&gt;
&lt;li&gt;Use no more than two fonts per website&lt;/li&gt;
&lt;li&gt;Combine fonts using : Similarity (same mood or era), Contrast (serif vs sans-serif, different weights)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4. Managing Attention with UI Design&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Visual Hierarchy : Colour, Size, Layout (consistent alignment and grid usage), White space, Target audience&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;5. User Experience (UX) Design&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Principles : Simplicity, Consistency, Reading patterns(F-layout(text-heavy pages), Z-layout (landing pages)), Responsive design (all platforms), Ethical design(Don’t misuse user attention)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;6. Web Design in Practice&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Practice Resources

&lt;ul&gt;
&lt;li&gt;Daily UI Challenge (100-day design challenge)
→ &lt;a href="https://www.dailyui.co/" rel="noopener noreferrer"&gt;https://www.dailyui.co/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Canva (easy design &amp;amp; web publishing tool)
→ &lt;a href="https://www.canva.com/" rel="noopener noreferrer"&gt;https://www.canva.com/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>fullstack</category>
      <category>programming</category>
    </item>
    <item>
      <title>11. Bootstrap</title>
      <dc:creator>avery</dc:creator>
      <pubDate>Thu, 26 Mar 2026 23:54:33 +0000</pubDate>
      <link>https://dev.to/avery_/11-bootstrap-2nn6</link>
      <guid>https://dev.to/avery_/11-bootstrap-2nn6</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;BootCamp by Dr.Angela&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;1. What is Bootstrap?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CSS Frameworks: Bootstrap, Foundation, MUI, Tailwind, etc.&lt;/li&gt;
&lt;li&gt;When to use vs not to use

&lt;ul&gt;
&lt;li&gt;Use: for fast, responsive, mobile-first development&lt;/li&gt;
&lt;li&gt;Avoid: for very simple projects or highly customized/complex designs&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;How to use Bootstrap (CDN; Content Delivery Network)

&lt;ul&gt;
&lt;li&gt;Official website: &lt;a href="https://getbootstrap.com/" rel="noopener noreferrer"&gt;https://getbootstrap.com/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;CSS (inside ) : &lt;code&gt;&amp;lt;link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-sRIl4kxILFvY47J16cr9ZwB07vP4J8+LH7qKQnuqkuIAvNWLzeN8tE5YBujZqJLB" crossorigin="anonymous"&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;min → minified file (faster loading, no unnecessary spaces)&lt;/li&gt;
&lt;li&gt;JavaScript (before ) : &lt;code&gt;&amp;lt;script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/js/bootstrap.bundle.min.js" integrity="sha384-FKyoEForCGlyvwx9Hj09JcYn3nv7wiPVlz7YYwJrWVcXK/BmnVDxM+D2scQbITxI" crossorigin="anonymous"&amp;gt;&amp;lt;/script&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Bootstrap Layout&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;12-column system : Uses container → row → col(items)&lt;/li&gt;
&lt;li&gt;Auto fit : Columns automatically adjust based on available space&lt;/li&gt;
&lt;li&gt;Containers : .container, .container-sm(mobile)/md(iPad)/lg(laptop)/xl(desktop)/xxl(TV)/fluid(full-width)&lt;/li&gt;
&lt;li&gt;Sized columns

&lt;ul&gt;
&lt;li&gt;ex.
&lt;code&gt;&amp;lt;div class="container"&amp;gt;
&amp;lt;div class="row"&amp;gt;
&amp;lt;div class="col-2"&amp;gt;Hello&amp;lt;/div&amp;gt;
&amp;lt;div class="col-4"&amp;gt;Hello&amp;lt;/div&amp;gt;
&amp;lt;div class="col-6"&amp;gt;Hello&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Breakpoints : &amp;lt;576px, ≥576px, ≥768px, ≥992px, ≥1200px, ≥1400px

&lt;ul&gt;
&lt;li&gt;Multiple breakpoints&lt;/li&gt;
&lt;li&gt;ex. &lt;code&gt;&amp;lt;div class="col-sm-12 col-md-8 col-lg-4"&amp;gt;&amp;lt;/div&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Bootstrap Components&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Common components: card, button, carousel, navbar, etc.&lt;/li&gt;
&lt;li&gt;Navbar : Can include icons using SVG

&lt;ul&gt;
&lt;li&gt;Download and use : ex. &lt;code&gt;&amp;lt;img src="./briefcase.svg" alt="briefcase" height="30"&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Or copy SVG directly: ex. &lt;code&gt;&amp;lt;svg ~ &amp;gt; ~ &amp;lt;/svg&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Snippets (Pre-built sections) : Heroes, Features, Footers, ...

&lt;ul&gt;
&lt;li&gt;How to use : Inspect → copy → paste → customize&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Carousel : Use inside a .container for responsive layout

&lt;ul&gt;
&lt;li&gt;ex.
&lt;code&gt;&amp;lt;div class="container"&amp;gt;
&amp;lt;!-- carousel here --&amp;gt;
&amp;lt;/div&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Spacing(ex. mb-2)&lt;/li&gt;

&lt;li&gt;Structure

&lt;ul&gt;
&lt;li&gt;Property: m (margin), p (padding)&lt;/li&gt;
&lt;li&gt;Side: t (top), b (bottom), s (start), e (end), x, y&lt;/li&gt;
&lt;li&gt;Size: 0 / 1 / 2 / 3 / 4 / 5 / auto&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Dark Mode : ex. &lt;code&gt;&amp;lt;html lang="en" data-bs-theme="dark"&amp;gt;&lt;/code&gt;
&lt;/li&gt;

&lt;li&gt;Jumbotron-style : Used for highlighting user feedback(Testimonials) or important content&lt;/li&gt;

&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>fullstack</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
