<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Sushil Buragute: Blog</title>
        <link>https://sush.dev/</link>
        <description>Blog posts by Sushil Buragute</description>
        <lastBuildDate>Thu, 20 Aug 2026 11:20:17 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>Sushil Buragute: Blog</title>
            <url>https://sush.dev/favicon.ico</url>
            <link>https://sush.dev/</link>
        </image>
        <copyright>All rights reserved 2026</copyright>
        <atom:link href="https://sush.dev/blog/feed.xml" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[How AI Quietly Made Me a Multi-Stack Engineer]]></title>
            <link>https://sush.dev/blog/how-ai-quietly-made-me-a-multi-stack-engineer</link>
            <guid isPermaLink="false">https://sush.dev/blog/how-ai-quietly-made-me-a-multi-stack-engineer</guid>
            <pubDate>Sat, 03 Jan 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[A look back at 2025, how AI helped me move from frontend to owning products end to end, and what it taught me about engineering judgment.]]></description>
            <content:encoded><![CDATA[<p>Reflecting on 2025 and the impact AI has had on my career, I noticed a significant shift.
I've gone from being a specialized frontend developer to feeling confident writing backend code.
What started as a small task from my manager ended up with me owning the product end-to-end.</p>
<hr>
<h2>How I Became Bullish on AI</h2>
<p>Ironically, I wasn't initially keen on using AI in my day-to-day work.
That changed after a workshop with Google's team at their Bengaluru HQ.
We got hands-on with Gemini 2.5 agents and sub-agents, building end-to-end workflows and seeing how these systems actually operate in practice.</p>
<p>Watching an LLM work and then hallucinate, self-correct, and still produce usable output, felt genuinely magical. (Maybe that's why AI icons are always the ✨ emoji.)</p>
<p>That experience flipped a switch. I went from being skeptical to genuinely excited, enough to later run a workshop within my team on writing tests with AI.</p>
<hr>
<h2>How AI Entered My Workflow</h2>
<p>I started this journey back when neither ChatGPT nor Gemini had the strongest coding agents.
Claude was the go-to, though it certainly made mistakes.
My manager, gauging my potential to pick things up quickly, gave me the opportunity to take on a few backend tasks.</p>
<p>AI helped me:</p>
<ul>
<li>Grasp existing coding practices</li>
<li>Navigate domain architecture</li>
<li>Build context around the business logic of the repository</li>
</ul>
<p>For my first task, I tried to one-shot the feature using Claude. And it worked! The feature ran, passed tests, and I raised a PR.</p>
<p>That's when reality hit.</p>
<p>A senior backend engineer reviewed the PR and flagged multiple issues: design flaws, optimizations, and edge cases that <em>Claude (and I)</em> had missed.</p>
<p>That's when it clicked:</p>
<blockquote><p>Vibe-coded code is only as good as the reviewer promoting it.</p></blockquote>
<hr>
<h2>Learning the Hard Way (and the Right Way)</h2>
<p>Back to the drawing board.</p>
<p>Over the next few PRs, I went through heavy reviews: long comment threads, deep discussions, and constant back-and-forth. Painful, but invaluable. It forced me to understand not just <em>what</em> the AI suggested, but <em>where its limits were</em>.</p>
<p>What AI did exceptionally well was reduce the <strong>learning barrier</strong>.<br>
What it didn't do was replace <strong>judgment</strong>.</p>
<p>As I absorbed feedback and improved, I started shipping faster, not because AI wrote more code, but because I understood the system better.</p>
<hr>
<h2>The Bigger Shift</h2>
<p>AI is quietly making programmers <strong>multi-stack</strong>.</p>
<p>With my frontend background and my growing backend understanding, I can now own features end to end, from UI to API to data flow.
AI blurred the boundaries between stacks just enough to make that possible.</p>
<p>But one thing hasn't changed.</p>
<p>AI can review syntax.<br>
AI can suggest patterns.<br>
AI can even refactor.</p>
<p>What it <em>cannot</em> do (yet) is develop intuition:</p>
<ul>
<li>How systems behave at scale</li>
<li>Which trade-offs protect uptime</li>
<li>What decisions will hurt six months later</li>
</ul>
<p>That's still human territory.</p>
<p>And that's where seniors... at least for now... still have the upper hand. 😄</p>
<p><strong>Takeaways</strong></p>
<ul>
<li>AI reduces the learning barrier across stacks, but doesn't replace engineering judgment</li>
<li>Code reviews on AI-generated code are where the real learning happens</li>
<li>Multi-stack fluency comes from understanding systems, not from generating more code</li>
</ul>]]></content:encoded>
            <author>noreply@sush.dev (Sushil Buragute)</author>
            <category>AI</category>
            <category>Full Stack</category>
            <category>LLMs</category>
        </item>
        <item>
            <title><![CDATA[Spotify API Integration with NextJS: Build Your Own Now Playing]]></title>
            <link>https://sush.dev/blog/spotify-api-integration-with-nextjs</link>
            <guid isPermaLink="false">https://sush.dev/blog/spotify-api-integration-with-nextjs</guid>
            <pubDate>Wed, 25 Sep 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[Learn how to integrate Spotify's API with Next.js and create a dynamic 'Now Playing' feature for your website.]]></description>
            <content:encoded><![CDATA[<p>When it was time to give my portfolio a facelift (because, you know, dev life), I figured why not go big and try Next.js v14 along with the app folder structure. <em>Rolls up sleeves, cracks knuckles</em>. Time to code! Now, let me save you some trial and error: here’s how you can do it too.</p>
<h3>Why are we using nextJS’s API route to fetch our data?</h3>
<p><strong>Why use Next.js API routes?</strong></p>
<ul>
<li><strong>Server-Side Security</strong>: Sensitive credentials like <code>client_id</code>, <code>client_secret</code>, and <code>refresh_token</code> stay server-side, never exposed to the browser</li>
<li><strong>Token Management</strong>: Token refreshing logic is handled securely and transparently without involving the client</li>
<li><strong>Caching and Optimizations</strong>: Server-side requests enable <code>s-maxage</code> and <code>stale-while-revalidate</code> for better performance</li>
<li><strong>Centralized Data Fetching</strong>: All client requests go through a central point, allowing better control over logging</li>
</ul>
<h2>Service Architecture</h2>
<p><img src="https://sush.dev/static/spotify-api-integration-with-nextjs--spotify-service-architecture-e15c5157.png" alt="The request path: the browser asks the Next.js server, which trades its credentials for an access token before fetching the currently-playing track from Spotify"></p>
<h2>Step One: Sign up as a Spotify Developer</h2>
<p>To access your Spotify data and communicate with Spotify’s servers, you’ll need some tokens. Here’s how you can generate them:</p>
<ol>
<li>
<p>Head over to <a href="https://developer.spotify.com/">Spotify for Developers</a> and sign in with your Spotify account to register as a developer.</p>
</li>
<li>
<p>Click the <strong>Create App</strong> button and fill in the required details. Here’s an example to guide you.</p>
<p><img src="https://sush.dev/static/spotify-api-integration-with-nextjs--spotify-create-app-c0109b8a.png" alt="The Create app form filled in, with localhost:3000 as both the website and the redirect URI, and Web API ticked"></p>
</li>
<li>
<p>Now, go to the project you just created and make sure to note down the Client ID and Client Secret. You'll need these for authentication.</p>
<p><img src="https://sush.dev/static/spotify-api-integration-with-nextjs--spotify-basic-info-2194cb70.png" alt="The app&#x27;s Basic Information tab, where the Client ID and Client secret sit behind copy buttons"></p>
</li>
<li>
<p>You should now have the following::</p>
</li>
</ol>
<pre><code>SPOTIFY_CLIENT_ID=&#x3C;Client ID>
SPOTIFY_CLIENT_SECRET=&#x3C;Client secret>
</code></pre>
<h2>StepTwo: Generating a Refresh Token for the Spotify API</h2>
<p>We'll need to generate a refresh token for our API so that each time a user visits the site, a new access token is created to access our Spotify data. Spotify uses the OAuth 2.0 authorization framework for this process. You can dive deeper into the details here: <a href="https://developer.spotify.com/documentation/web-api/concepts/authorization">OAuth 2.0 Documentation</a>.</p>
<ol>
<li>
<p>To generate the authorization code with permissions to access your now-playing and top-songs data, open the following URL in your browser after replacing <code>&#x3C;SPOTIFY_CLIENT_ID></code> with your actual client ID:</p>
<pre><code>https://accounts.spotify.com/authorize?client_id=&#x3C;SPOTIFY_CLIENT_ID>&#x26;response_type=code&#x26;redirect_uri=http%3A%2F%2Flocalhost:3000&#x26;scope=user-read-currently-playing%20user-top-read

Note: Keep the same redirect_uri as the one in your spotify dashboard.
</code></pre>
</li>
<li>
<p>You’ll be redirected to the <code>redirect_uri</code> you configured, and the query parameter <code>code</code> will be attached to the URL. This <code>code</code> is what we’ll need to generate your <code>SPOTIFY_REFRESH_TOKEN</code>.</p>
<pre><code>Example:
http://localhost:3000/?code=AQCU5snB4rmSCKyvhWOQOEcvqsYFy17n_PcDOdoMwDVPJs
</code></pre>
</li>
<li>
<p>Head over to <a href="https://www.base64encode.org/">Base64 Encode</a> to generate your encoded base64 string. You'll need to encode your <code>&#x3C;SPOTIFY_CLIENT_ID>:&#x3C;SPOTIFY_CLIENT_SECRET></code> in this format.</p>
<pre><code>Encode your string in the format:
SPOTIFY_CLIENT_ID:SPOTIFY_CLIENT_SECRET

Note: Don't forget the ":" in between the values!
</code></pre>
</li>
<li>
<p><strong>Final Step:</strong> Open Postman or Insomnia and paste the following cURL command. Make sure that the <code>redirect_uri</code> and <code>code</code> match the ones from the previous steps</p>
<pre><code>curl --request POST \
  --url https://accounts.spotify.com/api/token \
  --header 'Authorization: Basic &#x3C;YOUR_BASE64_STRING>' \
  --header 'Content-Type: application/x-www-form-urlencoded' \
  --data redirect_uri=http%3A%2F%2Flocalhost:3000 \
  --data grant_type=authorization_code \
  --data code=&#x3C;YOUR_AUTHORIZATION_CODE>
</code></pre>
</li>
<li>
<p>And, now you’ll have the <code>SPOTIFY_REFRESH_TOKEN</code> with the response JSON:</p>
<pre><code class="language-json">{
  "access_token": "BQCE8nQzic.....rHNr",
  "token_type": "Bearer",
  "expires_in": 3600,
  "refresh_token": "AQC....c5UgIxSpl8EA",
  "scope": "user-read-currently-playing user-top-read"
}
</code></pre>
</li>
</ol>
<h2>StepThree: Writing our fetcher functions</h2>
<p>Now let's write our fetcher functions that will handle the Spotify API requests, using the <code>SPOTIFY_REFRESH_TOKEN</code> to generate an access token and fetch the necessary data.</p>
<ol>
<li>
<p>Store the Spotify Tokens in the <code>.env</code> file of your nextJS project:</p>
<pre><code class="language-json">SPOTIFY_CLIENT_ID=&#x3C;Client ID>
SPOTIFY_CLIENT_SECRET=&#x3C;Client secret>
SPOTIFY_REFRESH_TOKEN=&#x3C;refresh_token>
</code></pre>
</li>
</ol>
<blockquote><p>Never commit your <code>.env</code> file. Make sure it's in your <code>.gitignore</code>.</p></blockquote>
<ol start="2">
<li>Create a <code>spotify.ts</code> file inside of your nextJS project, I prefer the path to be <code>/src/lib</code> and we’ll define our Spotify data-fetching functions here:
<ol>
<li><code>getAccessToken</code> ⇒ Retrieves a new access token using the refresh token.</li>
<li><code>fetchFromSpotify</code> ⇒ Utilizes the access token to fetch data from Spotify.</li>
</ol>
</li>
</ol>
<pre><code class="language-tsx">import querystring from 'querystring'

const client_id = process.env.SPOTIFY_CLIENT_ID
const client_secret = process.env.SPOTIFY_CLIENT_SECRET
const refresh_token = process.env.SPOTIFY_REFRESH_TOKEN

const basic = Buffer.from(`${client_id}:${client_secret}`).toString('base64')
const TOKEN_ENDPOINT = 'https://accounts.spotify.com/api/token'

const ENDPOINTS = {
  nowPlaying: 'https://api.spotify.com/v1/me/player/currently-playing',
  topTracks: 'https://api.spotify.com/v1/me/top/tracks',
  topArtists: 'https://api.spotify.com/v1/me/top/artists',
}

const getAccessToken = async () => {
  const response = await fetch(TOKEN_ENDPOINT, {
    method: 'POST',
    headers: {
      Authorization: `Basic ${basic}`,
      'Content-Type': 'application/x-www-form-urlencoded',
    },
    body: querystring.stringify({
      grant_type: 'refresh_token',
      refresh_token,
    }),
  })

  const data = await response.json()
  return data.access_token
}

const fetchFromSpotify = async (endpoint: string) => {
  const access_token = await getAccessToken()
  return fetch(endpoint, {
    headers: {
      Authorization: `Bearer ${access_token}`,
      'Cache-Control': 'public, s-maxage=60, stale-while-revalidate=30',
    },
  })
}

export const getNowPlaying = async () => fetchFromSpotify(ENDPOINTS.nowPlaying)
export const getTopTracks = async () => fetchFromSpotify(ENDPOINTS.topTracks)
export const getTopArtists = async () => fetchFromSpotify(ENDPOINTS.topArtists)
</code></pre>
<h2>StepFour: Serving the Data Using Next.js API Routes</h2>
<p>Now we’ll use Next.js API routes to serve the Spotify data. This allows you to securely fetch the data on the server-side and return it to your frontend.</p>
<h3>Now Playing - <code>/api/playing</code></h3>
<p>Create a file at <code>/src/app/api/playing/route.ts</code>, which will generate an endpoint at <code>/api/playing</code>. We'll set the revalidation interval to 120 seconds, which is more than enough to keep the currently playing song updated.</p>
<pre><code class="language-tsx">import { getNowPlaying } from '@/lib/spotify'

type Artist = { name: string }

export const revalidate = 120

export async function GET() {
  const response = await getNowPlaying()

  if (!response.ok || response.status === 204) {
    return Response.json({ isPlaying: false })
  }

  const song = await response.json()
  const item = song.item

  if (!item) {
    return Response.json({ isPlaying: false })
  }

  const { is_playing: isPlaying } = song
  const { name: title, album, artists, external_urls } = item
  const artist = artists.map((artist: Artist) => artist.name).join(', ')
  const albumImageUrl = album.images[0]?.url
  const songUrl = external_urls.spotify

  return Response.json({
    album: album.name,
    albumImageUrl,
    artist,
    isPlaying,
    songUrl,
    title,
  })
}
</code></pre>
<p>Spotify Documentation for the API: <a href="https://developer.spotify.com/documentation/web-api/reference/get-the-users-currently-playing-track">https://developer.spotify.com/documentation/web-api/reference/get-the-users-currently-playing-track</a></p>
<h3>Top Tracks - <code>/api/tracks</code></h3>
<p>Create a file at <code>/src/app/api/tracks/route.ts</code>, which will provide an endpoint at <code>/api/tracks</code>. We'll configure the revalidation interval to 86,400 seconds (1 day), since this data doesn't need frequent updates.</p>
<pre><code class="language-tsx">import { getTopTracks } from '@/lib/spotify'

type Artist = { name: string }

type Track = {
  artists: Artist[]
  external_urls: { spotify: string }
  name: string
}

export const revalidate = 86400

export async function GET() {
  const response = await getTopTracks()
  const { items } = await response.json()

  const tracks = items
    .slice(0, 10)
    .map(({ artists, external_urls, name }: Track) => ({
      artist: artists.map((artist) => artist.name).join(', '),
      songUrl: external_urls.spotify,
      title: name,
    }))

  return Response.json({ tracks })
}
</code></pre>
<p>Spotify Documentation for the API: <a href="https://developer.spotify.com/documentation/web-api/reference/get-users-top-artists-and-tracks">https://developer.spotify.com/documentation/web-api/reference/get-users-top-artists-and-tracks</a></p>
<details><summary>Bonus: Top Artists</summary><p>You can create a similar API to fetch the top artists by using Spotify's "Get User's Top Artists" endpoint. Create a file at <code>/src/app/api/artists/route.ts</code> for an endpoint at <code>/api/artists</code>, and set the revalidation config to <code>86400</code> seconds (1 day), as the top artist data doesn't update frequently.</p></details>
<h2>StepFive: Consuming the data on the Frontend</h2>
<p>On any page where you want to use this API, you can call the endpoint as shown in the following example:</p>
<pre><code class="language-tsx">import { SimpleLayout } from '@/components/SimpleLayout'

export const revalidate = 60 * 60 * 24

export default async function Stats() {
  const response = await fetch(`${process.env.NEXT_PUBLIC_SITE_URL}/api/tracks`)
  const data: TopTracks = await response.json()

  return (
    &#x3C;SimpleLayout
      title="Music"
      intro="My current jam? Got it listed right here!"
    >
      // Your components here
    &#x3C;/SimpleLayout>
  )
}
</code></pre>
<p>Also, don’t miss the footer for a live update of what I’m currently listening to!</p>]]></content:encoded>
            <author>noreply@sush.dev (Sushil Buragute)</author>
            <category>Next.js</category>
            <category>Spotify API</category>
            <category>Tutorial</category>
            <category>Frontend Development</category>
        </item>
        <item>
            <title><![CDATA[A Basic Guide for Github Actions]]></title>
            <link>https://sush.dev/blog/basic-guide-to-github-actions</link>
            <guid isPermaLink="false">https://sush.dev/blog/basic-guide-to-github-actions</guid>
            <pubDate>Tue, 05 Jan 2021 00:00:00 GMT</pubDate>
            <description><![CDATA[Automating the build process for my old portfolio website!]]></description>
            <content:encoded><![CDATA[<p>I sort of ran into a problem. I needed to manually build and deploy my portfolio website to github pages every time I made any changes to the codebase. That’s when I thought, let’s approach this with the mindset of an engineer and try to automate this process.</p>
<h3>Enter Github Actions</h3>
<p>Well I did know about Github Actions, because every repo has a tab called Actions and I did my basic research for it. At this point I was intrigued, I grabbed my coffee at 2pm and started reading the docs and a few blogs on how I can approach the problem.</p>
<p>4 hours in, I had come across a solution via youtube, but it didn't work. It was a sign I was going to struggle with Github Actions for a long time, and I liked the challenge. I started hot-swapping code to see if I was missing something, rechecked my .env variables and still no success.</p>
<p><img src="https://sush.dev/static/basic-guide-to-github-actions--github-ss-0a6a92cc.png" alt="Nine consecutive failed runs of the Publish the Gatsby Site workflow, with commit messages that get progressively more desperate"></p>
<p>I pulled myself back at night, it was time to slow down and think over the problem instead of trying my luck. I watched a couple of youtube videos to better grasp at the concept. Here's the summary for you!</p>
<blockquote><p>Wind down and think about a problem when you can't fix it!</p></blockquote>
<h3>What is Github Actions?</h3>
<p>In a sentence, Github Action is a tool which will automate your development process. It lets you build, test, and deploy your code right from GitHub. You can also assign code reviews, manage branches, and place issues the way you want with actions.</p>
<h3>Why do we need it?</h3>
<p>Well, to save time. Get freedom from doing repetitive tasks. One such use-case I read about was about onboarding a new member to an open source project. Say a new member joins your open source project. Using Github actions, we can greet him, send him the contributing guidelines and resources based on the project. Another such use case is setting up your custom solution for CI/CD or testing the latest commit.</p>
<p>Github Actions is super flexible to your needs.</p>
<h3>How does it work?</h3>
<p>Github actions are stored inside the <code>/.github/workflows</code> and are written in <code>.yaml</code> format. Here are the three pillars of Github Actions, collectively, these three pillars would make up most of the workflow.</p>
<ol><li><p><strong>Name</strong></p><p>You can set the display name for your workflow by using <code>name</code> syntax. If you don't set any name, the default name would be the file's name.</p><pre><code class="language-yaml">name: Test-Actions
</code></pre></li><li><p><strong>On (Trigger)</strong></p><p><code>on</code> is a trigger for the Github Action to run. You can set your action to run on specific events like push to a branch, a new issue being created or a new pull request has just come in!</p><pre><code class="language-yaml">on: push
</code></pre><pre><code class="language-yaml">on: issues
</code></pre><pre><code class="language-yaml">on: pull_request
</code></pre></li><li><p><strong>Jobs</strong></p><p>Now we know what triggers a Github Action, how do we tell it to process something? We use the <code>jobs</code> keyword. There can be multiple 'Mini Jobs' under a job. Each job definition <code>runs-on</code> and <code>steps</code> are required.</p><pre><code class="language-yaml">jobs:
  first-job:
    name: This job will run first
    runs-on: ubuntu-latest
    steps:
      - name: Prints a greeting
        run: |
          echo Hello World - ❤ Github Actions
</code></pre></li></ol>
<h3>How I Implemented it for my portfolio website!</h3>
<p><img src="https://sush.dev/static/basic-guide-to-github-actions--github-ss2-8395fffd.png" alt="The finished gh-pages.yml: check out the repo, set up Node 14, restore the npm cache, build, then hand the output to peaceiris/actions-gh-pages"></p>
<p><em>Google, Docs, Open Source, Youtube to the rescue!</em></p>
<h4>Declaration of Action</h4>
<pre><code class="language-yaml">name: github pages

on:
    push:
		branches:
		- development

</code></pre>
<p>I declared my Github Action with the name "github pages". And I added a trigger to run this action whenever I commit to the <code>development</code> branch of my repo.</p>
<h4>Setting up the job</h4>
<pre><code class="language-yaml">jobs:
  deploy:
    runs-on: ubuntu-18.04
</code></pre>
<p>I gave the name <code>deploy</code> to the job and then set it to run of v18.04 of Ubuntu on Github's Servers. After that, came to write the <code>steps</code> for the actions.</p>
<pre><code class="language-yaml">steps:
	- uses: actions/checkout@v2

	- name: Setup Node
	uses: actions/setup-node@v2.1.2
	with:
		node-version: "14.x"

	- name: Cache dependencies
	uses: actions/cache@v2
	with:
		path: ~/.npm
		key: ${{ runner.os }}-node-${{ hashFiles('\*\*/package-lock.json') }}
	restore-keys: |
		${{ runner.os }}-node-

	- run: npm install
	- run: npm run build

	- name: Deploy
	uses: peaceiris/actions-gh-pages@v3
	with:
		github\_token: ${{ secrets.GITHUB\_TOKEN }}
		publish\_branch: master
</code></pre>
<p>Let's break down the code,</p>
<ol>
<li><strong>actions/checkout@v2</strong></li>
</ol>
<p>actions/checkout is an open-source code by github where it checks out your current repo so that the workflow is able to access it. Basically, it fetches all the branches and commits which are present in your repo, and allows you to perform tasks on them.</p>
<ol start="2">
<li>
<p><strong>actions/setup-node@v2</strong>
With this mini job, I've specified a node version on which the upcoming npm commands would take place on Github's Server.</p>
<ul>
<li><code>node-version</code> - is used to set the version of node to be used.</li>
</ul>
</li>
<li>
<p><strong>actions/cache@v2</strong>
This action allows caching dependencies and build outputs to improve workflow execution time.</p>
<ul>
<li><code>path</code> - A list of files, directories, and wildcard patterns to cache and restore.</li>
<li><code>key</code> - An explicit key for restoring and saving the cache.</li>
<li><code>restore-keys</code> - An ordered list of keys to use for restoring the cache if no cache hit occurred for key</li>
<li><code>Via the docs</code></li>
</ul>
</li>
<li>
<p><strong>npm install</strong>
This command installs on the dependencies required for the codebase to run.</p>
</li>
<li>
<p><strong>npm run build</strong>
This command builds the project and makes it ready for deployment.</p>
</li>
<li>
<p><strong>peaceiris/actions-gh-pages@v3</strong>
It's the Github Action I'm using to deploy the files generated in the previous step to the <code>master</code> branch in my repo. (Power of Open Source + Abstraction!)</p>
<ul>
<li><code>github_token</code> - Shh it's a secret token which grants access to the repo.</li>
<li><code>publish_branch</code> - It's the target branch for the built files to be pushed.</li>
</ul>
</li>
</ol>
<h3>Conclusion</h3>
<p>After a day since I took up the challenge, I was able to automate my deployment process! With the time I spent learning github actions, I'm sure I've become pretty good at making up my own Github Actions. If you have found this useful, please consider recommending and sharing it with other fellow developers!</p>
<p><img src="https://sush.dev/static/basic-guide-to-github-actions--github-ss3-01b397cc.png" alt="The github pages workflow after the rewrite, four runs and four green checks"></p>
<p>You can check the <code>gh-pages.yml</code> file mentioned in the blog <a href="https://github.com/sushilburagute/sushilburagute.github.io/blob/development/.github/workflows/gh-pages.yml">here</a>.</p>]]></content:encoded>
            <author>noreply@sush.dev (Sushil Buragute)</author>
            <category>CI/CD</category>
            <category>DevOps</category>
        </item>
    </channel>
</rss>