<?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: Nabil Alamin</title>
    <description>The latest articles on DEV Community by Nabil Alamin (@arndom).</description>
    <link>https://dev.to/arndom</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%2F540171%2Fcd0814e7-808f-4fe4-86de-375e951a6cd1.png</url>
      <title>DEV Community: Nabil Alamin</title>
      <link>https://dev.to/arndom</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/arndom"/>
    <language>en</language>
    <item>
      <title>Hacktoberfest Rant</title>
      <dc:creator>Nabil Alamin</dc:creator>
      <pubDate>Tue, 28 Oct 2025 21:45:05 +0000</pubDate>
      <link>https://dev.to/arndom/hacktoberfest-rant-4k99</link>
      <guid>https://dev.to/arndom/hacktoberfest-rant-4k99</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest2025"&gt;2025 Hacktoberfest Writing Challenge&lt;/a&gt;: Open Source Reflections&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Intro
&lt;/h2&gt;

&lt;p&gt;Hacktoberfest exists for devs to get their feet wet with contributing to open source. We hope they find projects they're passionate about that they can contribute to long-term.&lt;/p&gt;

&lt;p&gt;The community is welcoming and supportive, while the contributors are well-meaning. From minimal contributions like haikus to solving complex bugs and adding features, all are welcome...but with the advent of LLMs, these good intentions from contributors are becoming harder to notice. &lt;/p&gt;

&lt;h2&gt;
  
  
  Rant😅
&lt;/h2&gt;

&lt;p&gt;Over the past year, I've seen several cases where people make PRs with little to no effort, from having an agent submit a PR in which it deletes chunks of JSDoc comments in the process of adding a 'feature', to submitting PRs that delete issue-causing code, to writing tests that pass without actually doing anything. Seeing stuff like this has made me chuckle at times, but they can be frustrating as well, and I'd imagine maintainers find them annoying to review.&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%2Fekxgeh9h7rbm402w2cjt.webp" 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%2Fekxgeh9h7rbm402w2cjt.webp" alt="tired" width="212" height="200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now I'm not against AI-assisted coding, far from it; I use it almost every day. What I am against is barely putting any effort just to get a badge or some other 'achievement'. &lt;/p&gt;

&lt;p&gt;At the same time, I can understand where this may be coming from. There was a time when I was obsessed with having my GH grid all green, thinking it meant productivity...I mean, some days it was, other days it was just the most mundane, trivial commit just to tick a box, so don't get me wrong, I understand the search for dev achievement. &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%2F0jhofcij4602ypwidceq.webp" 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%2F0jhofcij4602ypwidceq.webp" alt="hypocrite joke" width="326" height="200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's just that when people start contributing to projects without any actual effort, care or context about the project, you're really doing more harm than good to the project and, most importantly, yourself. &lt;/p&gt;

&lt;p&gt;The joy of OSS for me has always been in the personal growth you can achieve from working on amazing projects. So don't shortchange yourself. &lt;/p&gt;

&lt;p&gt;If you're looking for something complex to do, or something with a lower barrier, or even something in between, there are a ton of projects out there. Don't just pick something with a high number of stars and use Cursor to submit a PR just because you can. It may work out or not (and then you become the butt of a joke 😉), but either way, you've lost a potential growth/learning opportunity. &lt;/p&gt;

&lt;p&gt;So take the time to find projects you can care about and make that PR in your own time, hacktoberfest will come and go, but your contribution will always be there...make it a good one.&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%2Fxk6tulroqjc5apq7sbfc.gif" 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%2Fxk6tulroqjc5apq7sbfc.gif" alt="Rant over" width="480" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;PS: I haven't submitted a PR in almost two months, I probably should before October ends 😜&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hacktoberfest</category>
      <category>opensource</category>
    </item>
    <item>
      <title>A Recruiter's favourite tool: Powered by Postmark</title>
      <dc:creator>Nabil Alamin</dc:creator>
      <pubDate>Fri, 06 Jun 2025 22:36:57 +0000</pubDate>
      <link>https://dev.to/arndom/a-recruiters-favourite-tool-powered-by-postmark-k3k</link>
      <guid>https://dev.to/arndom/a-recruiters-favourite-tool-powered-by-postmark-k3k</guid>
      <description>&lt;p&gt;This is a submission for the &lt;a href="https://dev.to/challenges/postmark"&gt;Postmark Challenge: Inbox Innovators&lt;/a&gt;.&lt;br&gt;
 &lt;/p&gt;
&lt;h2&gt;
  
  
  ❔ What I Built
&lt;/h2&gt;

&lt;p&gt;I created a low-friction job postings management dashboard with applicant parsing and a job board for potential candidates to apply.&lt;/p&gt;


&lt;h3&gt;
  
  
  ⏩ TLDR
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Job Posts Dashboard&lt;/strong&gt;: 

&lt;ul&gt;
&lt;li&gt;Create and manage jobs.&lt;/li&gt;
&lt;li&gt;Track, evaluate and communicate directly with candidates and their applications within the app.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Job Board Site&lt;/strong&gt;: 

&lt;ul&gt;
&lt;li&gt;View and apply to jobs created on the dashboard.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Postmark implementation&lt;/strong&gt;: 

&lt;ul&gt;
&lt;li&gt;Receive candidate applications - inbound email. &lt;/li&gt;
&lt;li&gt;Auto send confirmation of application - transactional email.&lt;/li&gt;
&lt;li&gt;Email communication between the candidate and admin - transactional email.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;


&lt;h2&gt;
  
  
  💻 Demo
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://admin-jobs.netlify.app/" rel="noopener noreferrer"&gt;Dashboard&lt;/a&gt;&lt;br&gt;
&lt;a href="https://site-jobs.netlify.app/" rel="noopener noreferrer"&gt;Job board&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%2Fdunirlk2huwt5620fu7c.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%2Fdunirlk2huwt5620fu7c.png" alt="dashboard" width="800" height="450"&gt;&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%2Fw8nwna92btve3erb1f8z.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%2Fw8nwna92btve3erb1f8z.png" alt="job board" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Code Repository
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/arndom" rel="noopener noreferrer"&gt;
        arndom
      &lt;/a&gt; / &lt;a href="https://github.com/arndom/job-board-admin" rel="noopener noreferrer"&gt;
        job-board-admin
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Jobs management dashboard &amp;amp; applicant parser powered by postmark
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="MD"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;🧠 JobBoard Admin: Jobs Management Dashboard &amp;amp; Applicant Parser&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;A full-stack recruitment dashboard demo that parses email-based job applications, extracts applicant data (including CVs and cover letters), stores and scores them intelligently, and allows admins to manage and communicate with candidates — all from a unified Supabase-powered UI.&lt;/p&gt;
&lt;p&gt;There's a demo app to view the jobs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://site-jobs.netlify.app" rel="nofollow noopener noreferrer"&gt;https://site-jobs.netlify.app&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/arndom/job-board-site" rel="noopener noreferrer"&gt;https://github.com/arndom/job-board-site&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;✨ Features&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;📥 &lt;strong&gt;Email-Based Applications&lt;/strong&gt;
Applicants apply via email to dynamic addresses like &lt;code&gt;xcxcxc@{custom.domain.com}&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;🔐 &lt;strong&gt;DKIM, Return-Path, and MX Setup&lt;/strong&gt;
Fully authenticated sending and receiving under a custom subdomain.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;🧠 &lt;strong&gt;AI-Powered Parsing &amp;amp; Scoring&lt;/strong&gt;
Cloudflare Workers + LLM extract:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Timezone &amp;amp; location&lt;/li&gt;
&lt;li&gt;Trust score (e.g., LinkedIn, GitHub presence)&lt;/li&gt;
&lt;li&gt;Seniority level&lt;/li&gt;
&lt;li&gt;Sentiment analysis (CV, cover letter)&lt;/li&gt;
&lt;li&gt;Match % with job description&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;📂 &lt;strong&gt;Supabase Storage Integration&lt;/strong&gt;
Stores and retrieves uploaded CVs and cover letters.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;📊 &lt;strong&gt;Admin Dashboard UI&lt;/strong&gt;
Built with Refine + Material UI:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;View all jobs, applicants, applications&lt;/li&gt;
&lt;li&gt;Track trust score, match…&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/arndom/job-board-admin" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/arndom" rel="noopener noreferrer"&gt;
        arndom
      &lt;/a&gt; / &lt;a href="https://github.com/arndom/job-board-site" rel="noopener noreferrer"&gt;
        job-board-site
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Job application demo site for https://github.com/arndom/job-board-admin
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;💼 Remote Job Board — Email-Based Applications&lt;/h1&gt;

&lt;/div&gt;
&lt;p&gt;A simple job board built as demo for the JobBoard admin app:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://admin-jobs.netlify.app" rel="nofollow noopener noreferrer"&gt;https://admin-jobs.netlify.app&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/arndom/job-board-admin" rel="noopener noreferrer"&gt;https://github.com/arndom/job-board-admin&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Built with &lt;strong&gt;Next.js&lt;/strong&gt;, &lt;strong&gt;Tailwind CSS&lt;/strong&gt;, and &lt;strong&gt;Supabase&lt;/strong&gt; — designed for email-driven applications. Applicants apply by sending emails..&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;✨ Features&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;📃 &lt;strong&gt;Live Job Listings&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Publicly viewable jobs pulled from Supabase&lt;/li&gt;
&lt;li&gt;Styled with &lt;code&gt;shadcn/ui&lt;/code&gt; and Tailwind&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;✉️ &lt;strong&gt;Email-to-Apply&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Each job post displays a unique email (e.g., &lt;code&gt;xcxcxc@{custom.domain.com}&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Clicking opens the user’s email client with prefilled email, subject, body.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;💻 &lt;strong&gt;Responsive Design&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Clean, minimal, and responsive with &lt;code&gt;shadcn/ui&lt;/code&gt; + Tailwind&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;⚡ &lt;strong&gt;Built with:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Next.js (App Router)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;pnpm&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Supabase&lt;/strong&gt; (for job data)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tailwind CSS&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;shadcn/ui&lt;/strong&gt; components&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;📸 Preview&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/arndom/job-board-siteimage.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Farndom%2Fjob-board-siteimage.png" alt="preview"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;⚙️ Local dev&lt;/h2&gt;

&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;Setup .env&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;NEXT_PUBLIC_SUPABASE_URL=your-supabase-url
NEXT_PUBLIC_SUPABASE_KEY=your-key&lt;/pre&gt;

&lt;/div&gt;
&lt;ol start="2"&gt;
&lt;li&gt;Add types from your supbase&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;npx supabase gen types typescript --project-id {projectId}  &lt;span class="pl-k"&gt;&amp;gt;&lt;/span&gt; types/database.types.ts&lt;/pre&gt;

&lt;/div&gt;
&lt;ol start="3"&gt;
&lt;li&gt;Run locally&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;pnpm install
pnpm dev&lt;/pre&gt;

&lt;/div&gt;
&lt;/div&gt;



&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/arndom/job-board-site" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;





&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;It was my first time hearing about Postmark, so I was unsure of what to build with it, and with limited time to join, I chose not to participate. When the hackathon got extended, I had more leeway and decided to go with what I see as a practical use of Postmark's inbound email parsing feature as part of a larger system: A job posts management dashboard for a small company.&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%2Fsexzel1e7ls6lb6jyyp3.gif" 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%2Fsexzel1e7ls6lb6jyyp3.gif" alt="cliche" width="480" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I started by creating my database on Supabase, comprising tables for jobs, applicants and applications. The goal was speed, due to trying to get a lot done with my already tight schedule, so I used v0 to quickly draft the job board UI, which I tweaked after generation. Next, I used refine to create the base admin dashboard, added some material ui theme customisations and eventually got my layouts for both apps done. That was the easy part.&lt;br&gt;
 &lt;/p&gt;

&lt;p&gt;Setting up Postmark was relatively straightforward. I joined the platform and verified the subdomain &lt;code&gt;jobs&lt;/code&gt; of my portfolio site &lt;code&gt;arndom.dev&lt;/code&gt; by updating my DNS records for &lt;code&gt;DKIM and Return-Path&lt;/code&gt; next, I followed the &lt;a href="https://postmarkapp.com/developer/user-guide/inbound/configure-an-inbound-server" rel="noopener noreferrer"&gt;Configure an Inbound Server&lt;/a&gt; guide and also updated my DNS records &lt;code&gt;MX&lt;/code&gt; value for inbound domain forwarding. These two steps would allow me to send and "receive" emails via my subdomain: &lt;code&gt;[anything]@jobs.arndom.dev&lt;/code&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%2Fb91w8tgdi4dgzes449cm.gif" 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%2Fb91w8tgdi4dgzes449cm.gif" alt="lets-go" width="480" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I got started building my inbound webhook leveraging Supabase edge functions. I started with simple functionality like receiving the application email and extracting the necessary information:&lt;br&gt;
 &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Getting the job info based on the unique job email the candidate applied for.&lt;br&gt;
 &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Then, creating/updating a candidate(applicant) entry in the database, giving basic information like name and email, after which I created an application.&lt;br&gt;
 &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;After getting that working and testing my flow end-to-end, from the job board to the job board dashboard, I began working on the evaluation of candidates with the use of an LLM.&lt;br&gt;
 &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I opted for a Cloudflare worker AI integration with Ollama simply because it was what I already knew.&lt;br&gt;
 &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;After some fiddling around, I was able to produce some usable outputs and feed them into the tables.&lt;br&gt;
 &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I used the LLM to parse values:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Calculate the match of the applicant to the job based on CV, letter, email body to job requirements, skills, and description.
 &lt;/li&gt;
&lt;li&gt;Calculate of applicant trust value based on "proof" of public URLs like github, and LinkedIn
 &lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;I also added a confirmation email to be sent when the inbound email is done being processed.&lt;/p&gt;&lt;/li&gt;

&lt;/ul&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%2Ft76zcrrc1cbme86se4pk.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%2Ft76zcrrc1cbme86se4pk.png" alt="confirmation-email" width="800" height="407"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At the time, I thought that was all, but with a bit more time on my hands, I went all in and added a communications feature within the app. I already had the send email functionality implemented, so I extended it by making another edge function to use in the admin via a chat interface. &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%2F6b7hj1u7ypslvrx8h4xk.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%2F6b7hj1u7ypslvrx8h4xk.png" alt="chat-ui" width="800" height="460"&gt;&lt;/a&gt;&lt;br&gt;
 &lt;/p&gt;

&lt;p&gt;This also led to creating an email table and making necessary changes to the inbound parser and send-email functions.&lt;br&gt;
 &lt;/p&gt;

&lt;p&gt;The last thing I did in development was fetch the jobs for the job board using Tanstack Query. After which, I deployed everything and wrote some documentation. Overall, it was a fun and interesting build. Learnt a lot more about the DNS system thanks to this.&lt;/p&gt;

&lt;p&gt;Thanks for reading, do check out the apps &lt;a href="https://admin-jobs.netlify.app/" rel="noopener noreferrer"&gt;Dashboard&lt;/a&gt;, &lt;a href="https://site-jobs.netlify.app/" rel="noopener noreferrer"&gt;Job board&lt;/a&gt; and have a day👋.&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%2Ferwez4r44cwyfjehlzau.gif" 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%2Ferwez4r44cwyfjehlzau.gif" alt="bye" width="480" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>postmarkchallenge</category>
      <category>webdev</category>
      <category>api</category>
    </item>
    <item>
      <title>Still worth a read 5+ years later</title>
      <dc:creator>Nabil Alamin</dc:creator>
      <pubDate>Sat, 08 Feb 2025 17:31:57 +0000</pubDate>
      <link>https://dev.to/arndom/still-worth-a-read-5-years-later-2e2</link>
      <guid>https://dev.to/arndom/still-worth-a-read-5-years-later-2e2</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/moopet" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&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%2Fuser%2Fprofile_image%2F31518%2Ffda7f57e-7bcf-4a04-b7bf-529373e2a1cd.jpg" alt="moopet"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/moopet/what-s-my-age-again-14eh" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;What's my age again?&lt;/h2&gt;
      &lt;h3&gt;Ben Sinclair ・ Sep 22 '19&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#discuss&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#career&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#watercooler&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>discuss</category>
      <category>career</category>
      <category>watercooler</category>
    </item>
    <item>
      <title>Integrating Stellar with Next.js, Nuxt 3 and SvelteKit</title>
      <dc:creator>Nabil Alamin</dc:creator>
      <pubDate>Sun, 18 Aug 2024 16:14:40 +0000</pubDate>
      <link>https://dev.to/arndom/integrating-stellar-with-nextjs-nuxt-3-and-sveltekit-2f4c</link>
      <guid>https://dev.to/arndom/integrating-stellar-with-nextjs-nuxt-3-and-sveltekit-2f4c</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/stellar"&gt;Build Better on Stellar: Smart Contract Challenge &lt;/a&gt;: Create a Tutorial&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Your Tutorial
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://soroban-js-docs.netlify.app/" rel="noopener noreferrer"&gt;https://soroban-js-docs.netlify.app/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What I Created
&lt;/h2&gt;

&lt;p&gt;This tutorial covers integrating a Soroban smart contract with an app built with &lt;strong&gt;Next.js, Nuxt 3 or SvelteKit&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://soroban-js-docs.netlify.app/" rel="noopener noreferrer"&gt;How to build the same app in Next, Nuxt and SvelteKit&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&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%2F3g3fz0oaq0lvxzy7tpfz.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%2F3g3fz0oaq0lvxzy7tpfz.png" alt="Tutorial Image" width="800" height="450"&gt;&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%2F39jb55pbc4btetotdru2.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%2F39jb55pbc4btetotdru2.png" alt="Demo Image" width="800" height="450"&gt;&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%2F5td2ezi2m250nmxhjcdk.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%2F5td2ezi2m250nmxhjcdk.png" alt="Tutorial frameworks" width="800" height="336"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Journey
&lt;/h2&gt;

&lt;p&gt;It had been a while since I last tinkered with web3. This competition was good motivation to play around a bit. It was my first time hearing about Stellar and the SDF but I was impressed by their work, especially with the UNHCR.&lt;/p&gt;

&lt;h3&gt;
  
  
  What to build?
&lt;/h3&gt;

&lt;p&gt;I had initially intended to make a dApp to find charities that can be supported with crypto and gamify the experience; sort of like a continuous giving experience in which users try to aid consistently and get rewarded with some character/EXP growth in the app. But work and life schedules didn't allow for this.&lt;/p&gt;

&lt;p&gt;I pivoted to making a tutorial about integrating Soroban into an application. The tutorial had to be something that helped people get a hands-on approach to integrating with smart contracts. I make apps with React but I noticed there was a lack of resources for building with other frameworks in the space so why not try that as well?&lt;/p&gt;

&lt;p&gt;It would be a tutorial that would appeal to more people, potentially grow the stellar community and enable me to learn about other frameworks.&lt;/p&gt;

&lt;h3&gt;
  
  
  The experience
&lt;/h3&gt;

&lt;p&gt;I took inspiration from the &lt;a href="https://github.com/paltalabs/create-soroban-dapp" rel="noopener noreferrer"&gt;soroban-example-app&lt;/a&gt; created by paltalabs and made an app using NextJS, Tailwind and DaisyUI. That was the easy bit, I now had to recreate the experience in Nuxt and SvelteKit...fireship would be proud 😉.&lt;/p&gt;

&lt;p&gt;Having never used both frameworks it was all about the docs to understand how they work, especially state management, luckily it wasn't too hard to wrap my head around. &lt;/p&gt;

&lt;p&gt;After which there was the integration to figure out;  there were no out-of-the-box solutions like for react, so I had to look at how &lt;a href="https://soroban-react.paltalabs.io/" rel="noopener noreferrer"&gt;soroban-react&lt;/a&gt; did it and then create my implementation for each framework. After some later nights and weekends, it was all working and I was glad for the experience.&lt;/p&gt;

&lt;p&gt;You can check out the tutorial built with docusaurus here: &lt;a href="https://soroban-js-docs.netlify.app/" rel="noopener noreferrer"&gt;https://soroban-js-docs.netlify.app/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  LINKS
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Next Demo: &lt;a href="https://next-soroban.netlify.app/" rel="noopener noreferrer"&gt;https://next-soroban.netlify.app/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Next Repo: &lt;a href="https://github.com/arndom/nextjs-soroban-app" rel="noopener noreferrer"&gt;https://github.com/arndom/nextjs-soroban-app&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Nuxt Demo: &lt;a href="https://nuxt-soroban.netlify.app/" rel="noopener noreferrer"&gt;https://nuxt-soroban.netlify.app/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Nuxt Repo: &lt;a href="https://github.com/arndom/nuxt-soroban-app" rel="noopener noreferrer"&gt;https://github.com/arndom/nuxt-soroban-app&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Svelte Demo: &lt;a href="https://sveltekit-soroban.netlify.app/" rel="noopener noreferrer"&gt;https://sveltekit-soroban.netlify.app/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Svelte Repo: &lt;a href="https://github.com/arndom/sveletekit-soroban-app" rel="noopener noreferrer"&gt;https://github.com/arndom/sveletekit-soroban-app&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>stellarchallenge</category>
      <category>web3</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Net Gala: Netlify Img Transforms</title>
      <dc:creator>Nabil Alamin</dc:creator>
      <pubDate>Sat, 11 May 2024 10:23:09 +0000</pubDate>
      <link>https://dev.to/arndom/net-gala-web-edition-143f</link>
      <guid>https://dev.to/arndom/net-gala-web-edition-143f</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/netlify"&gt;Netlify Dynamic Site Challenge&lt;/a&gt;: Visual Feast.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;It's more of a snack than a feast, but I made a gallery app to recreate pieces of a couple of sites I found on awwwards. It's got nice transitions, has a monochromatic feel and takes advantage of Netlify's Image CDN and it's transforms feature.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/U-Ei_pGPoIQ"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Give it a try: &lt;a href="https://net-gala.netlify.app/" rel="noopener noreferrer"&gt;Link ✨&lt;/a&gt;&lt;br&gt;
Here's the &lt;a href="https://github.com/arndom/netlify-gallery-cdn" rel="noopener noreferrer"&gt;Code💻&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Platform Primitives
&lt;/h2&gt;

&lt;p&gt;I used the CDN for fetching and transforming images in my NextJS app, it also provides some amazing cache out of the box. Using the custom loader prop in the &lt;code&gt;next/image&lt;/code&gt; component, I was able to apply the following transforms: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sizing&lt;/li&gt;
&lt;li&gt;Object Fit&lt;/li&gt;
&lt;li&gt;Format&lt;/li&gt;
&lt;li&gt;Quality&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here's a snippet of the loader:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;loadImage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ImageLoaderProps&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;src&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;`.netlify/images?url=&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;src&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;amp;w=&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;transforms&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;width&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;amp;h=&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;transforms&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;height&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;amp;q=&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;transforms&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;quality&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;amp;fit=&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;transforms&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fit&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;amp;fm=&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;transforms&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;format&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And here's the UI implementation:&lt;br&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%2F7u6z3bxsd3yo6l2d4d0m.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%2F7u6z3bxsd3yo6l2d4d0m.png" alt="Transformation UI" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Generally, when using NextJS 13.5+ with Netlify, you don't need a custom loader, the cdn works by default with &lt;code&gt;next/image&lt;/code&gt; but I needed the loader for some of the transforms and flexibility in rendering. Thanks &lt;a class="mentioned-user" href="https://dev.to/hrishikeshk"&gt;@hrishikeshk&lt;/a&gt; for pointing that out.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;It was a fun experience building this, I got the chance to implement some nice designs and transitions, play around with CSS and try out a new component library. I'm also really delighted with how the bottom section turned out:&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%2F2rpgj56y4uhmqcblr20u.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%2F2rpgj56y4uhmqcblr20u.png" alt="bottom-section" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thanks for reading and have a great day 👋&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%2Fjf93hajhozurx37uwmv0.gif" 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%2Fjf93hajhozurx37uwmv0.gif" alt="wave-gif" width="498" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;...I wonder if anyone got the pun in the title 🤔&lt;/p&gt;

</description>
      <category>netlifychallenge</category>
      <category>devchallenge</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>WebDev Docs Workflow</title>
      <dc:creator>Nabil Alamin</dc:creator>
      <pubDate>Thu, 25 Apr 2024 05:57:27 +0000</pubDate>
      <link>https://dev.to/arndom/webdevdocs-workflow-46p0</link>
      <guid>https://dev.to/arndom/webdevdocs-workflow-46p0</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/devteam/join-us-for-the-coze-ai-bot-challenge-3000-in-prizes-4dp"&gt;Coze AI Bot Challenge&lt;/a&gt;: Trailblazer.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;WebDevDocs is a workflow that aims to provide bots with up-to-date documentation and information regarding various areas of web development; from a library, package, framework, standard, programming language and everything in between.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/uieuqMbWYTk"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Here's an example bot to see it in use: &lt;a href="https://www.coze.com/store/bot/7361663484335194117" rel="noopener noreferrer"&gt;Web Dev Docs&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.coze.com/work_flow?space_id=7358836595295797253&amp;amp;workflow_id=7361165139888046086" rel="noopener noreferrer"&gt;&lt;em&gt;Workflow Link&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Journey
&lt;/h2&gt;

&lt;p&gt;Whenever I tried using ChatGPT or Gemini to get real-time information, they weren't always helpful so hearing about the Coze platform allowed me to create a potential solution. &lt;/p&gt;

&lt;p&gt;While making this, I tried to jam as many features as possible; looking for up-to-date articles, parsing through github issues, going through code, and many more... at the end of the day, the workflow test run failed. After some interactions on their discord, I figured that running such complex activities would lead to hitting a limit.&lt;/p&gt;

&lt;p&gt;After a night of fighting trying to make a loop work to reduce the load (which didn't work, was tempted to make conditional loops workflows my submission 😅), I cut it down to simply finding the links and pointing a user in that direction, the reason being those extra features can be built using this workflow as a base.&lt;/p&gt;

&lt;p&gt;Thanks for reading and I hope you find this workflow helpful 👋&lt;/p&gt;

</description>
      <category>cozechallenge</category>
      <category>devechallenge</category>
      <category>ai</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>Recreating a GIF with CSS: Earth Day Edition</title>
      <dc:creator>Nabil Alamin</dc:creator>
      <pubDate>Sat, 20 Apr 2024 22:18:46 +0000</pubDate>
      <link>https://dev.to/arndom/recreating-a-gif-with-css-earth-day-edition-3f5a</link>
      <guid>https://dev.to/arndom/recreating-a-gif-with-css-earth-day-edition-3f5a</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/devteam/join-us-for-the-next-frontend-challenge-earth-day-edition-52e4"&gt;Frontend Challenge v24.04.17&lt;/a&gt;, CSS Art: Earth Day.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Inspiration
&lt;/h2&gt;

&lt;p&gt;When I saw the challenge I wanted to participate to improve my skills, and when I saw the GIF in the announcement post I knew what to attempt. I had never done any "complex" animations with CSS alone so this was the right time to try.&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%2Fv9uqyofk6o73vgdfcov5.gif" 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%2Fv9uqyofk6o73vgdfcov5.gif" alt="earth-day-gif" width="498" height="373"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/arndomG/embed/LYvgaQY?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;sadly, it doesn't loop so click &lt;strong&gt;rerun&lt;/strong&gt;↗️ to replay&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Journey
&lt;/h2&gt;

&lt;p&gt;Upon reading the announcement and seeing the GIF, I knew I had to attempt a CSS recreation. It was unique, outside my comfort zone and something worth doing and sharing.&lt;/p&gt;

&lt;p&gt;I started by watching &lt;a href="https://www.youtube.com/watch?v=NdftnCDwKaU" rel="noopener noreferrer"&gt;a video about CSS animations&lt;/a&gt; from Kevin Powell on YT as I had no idea where to start from. After this, I created a codepen account and started figuring things out.&lt;/p&gt;

&lt;p&gt;I broke the GIF into chunks, starting from the clouds, then the earth, its face, its map background and its tree, while sequentially animating these elements along the way.&lt;/p&gt;

&lt;p&gt;Time flew by as I initially struggled but eventually got the hang of things. At the end of it all, the animation was done and though it wasn't perfect, It looked great and I was pleased with it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Used Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=NdftnCDwKaU" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=NdftnCDwKaU&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cssanimation.rocks/spheres/" rel="noopener noreferrer"&gt;https://cssanimation.rocks/spheres/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lauryndbrown.github.io/2017/06/08/creating-clouds-in-css.html" rel="noopener noreferrer"&gt;https://lauryndbrown.github.io/2017/06/08/creating-clouds-in-css.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://codepen.io/nelledejones/pen/gOOPWrK?editors=1100" rel="noopener noreferrer"&gt;https://codepen.io/nelledejones/pen/gOOPWrK?editors=1100&lt;/a&gt;&lt;/li&gt;
&lt;/ul&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%2Frduevddrctj90zu6c4u5.gif" 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%2Frduevddrctj90zu6c4u5.gif" alt="bye-bye" width="302" height="498"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>frontendchallenge</category>
      <category>devchallenge</category>
      <category>css</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Rewrite Movie/TV endings with AI</title>
      <dc:creator>Nabil Alamin</dc:creator>
      <pubDate>Fri, 12 Apr 2024 07:27:14 +0000</pubDate>
      <link>https://dev.to/arndom/ending-maker-ai-5aeo</link>
      <guid>https://dev.to/arndom/ending-maker-ai-5aeo</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/devteam/join-us-for-the-cloudflare-ai-challenge-3000-in-prizes-5f99"&gt;Cloudflare AI Challenge&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;A simple site where you can reimagine how your favourite shows ended (unsatisfactory or cancelled too early). Using GenAI you can get a summary and an accompanying illustration for up to 5 different alternate endings.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://ending-maker.pages.dev/" rel="noopener noreferrer"&gt;https://ending-maker.pages.dev/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&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%2F95cgk529oaeukbq5ss0u.gif" 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%2F95cgk529oaeukbq5ss0u.gif" alt="GIF demo" width="600" height="338"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  My Code
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/arndom" rel="noopener noreferrer"&gt;
        arndom
      &lt;/a&gt; / &lt;a href="https://github.com/arndom/ending-maker" rel="noopener noreferrer"&gt;
        ending-maker
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Reimagine your favourite TV and Movie endings
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;About Ending  Maker 🌟&lt;/h1&gt;

&lt;/div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/arndom/ending-makerpublic/banner.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Farndom%2Fending-makerpublic%2Fbanner.png" alt="banner-demo"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Stack&lt;/h1&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;NextJS&lt;/li&gt;
&lt;li&gt;TailwindCSS&lt;/li&gt;
&lt;li&gt;MUI BaseUI&lt;/li&gt;
&lt;li&gt;Cloudfare Pages&lt;/li&gt;
&lt;li&gt;Cloudfare Workers REST API&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Development&lt;/h1&gt;

&lt;/div&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; install dependencies&lt;/span&gt;
npm i

&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; run locally&lt;/span&gt;
npm run dev&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Leave a 🌟 if you found this interesting.&lt;/p&gt;
&lt;/div&gt;



&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/arndom/ending-maker" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;h2&gt;
  
  
  Journey
&lt;/h2&gt;

&lt;p&gt;I always rewatch the Forever TV series, it was a great show imo but for some reason, it got cancelled after the first season and on a cliffhanger at that😩...ever since then, I've wanted a comeback or maybe even a reboot but a man can only dream. &lt;/p&gt;

&lt;p&gt;So when I saw this hackathon I thought this could be my chance to sate my desire to some extent. This site uses &lt;strong&gt;Text Generation&lt;/strong&gt; to offer possible endings and then uses &lt;strong&gt;Image Generation&lt;/strong&gt; to add further niceties.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Multiple Models&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Text Generation: llama-2-7b-chat-int8&lt;/li&gt;
&lt;li&gt;Image Generation: stable-diffusion-xl-lightning&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>cloudflarechallenge</category>
      <category>devchallenge</category>
      <category>ai</category>
      <category>nextjs</category>
    </item>
    <item>
      <title>Making a simple trivia Game</title>
      <dc:creator>Nabil Alamin</dc:creator>
      <pubDate>Thu, 29 Feb 2024 21:17:31 +0000</pubDate>
      <link>https://dev.to/arndom/i-made-a-trivia-game-4oj2</link>
      <guid>https://dev.to/arndom/i-made-a-trivia-game-4oj2</guid>
      <description>&lt;h2&gt;
  
  
  TLDR
&lt;/h2&gt;

&lt;p&gt;I created a trivia game over the past couple of weeks. It's inspired by the Waveform podcast that comes out weekly on Fridays. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Play:&lt;/em&gt;&lt;/strong&gt; &lt;a href="https://www.wvfrmtrivia.xyz/" rel="noopener noreferrer"&gt;https://www.wvfrmtrivia.xyz/&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%2Fa0wqxvaedypdpu2e2397.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%2Fa0wqxvaedypdpu2e2397.png" alt="homepage" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Source Code 🌟&lt;/em&gt;&lt;/strong&gt; &lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/arndom" rel="noopener noreferrer"&gt;
        arndom
      &lt;/a&gt; / &lt;a href="https://github.com/arndom/wvfrm-trivia" rel="noopener noreferrer"&gt;
        wvfrm-trivia
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A trivia game based off MKBHD's  waveform podcast
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;About Waveform Trivia 🌟&lt;/h1&gt;

&lt;/div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/arndom/wvfrm-triviademo.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Farndom%2Fwvfrm-triviademo.png" alt="demo"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A simple trivia game made with NextJS, Typescript, Material-UI and Firebase.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Development&lt;/h1&gt;

&lt;/div&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; install dependencies&lt;/span&gt;
npm i

&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; run locally&lt;/span&gt;
npm run dev&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Leave a 🌟 if you found this interesting.&lt;/p&gt;
&lt;/div&gt;



&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/arndom/wvfrm-trivia" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;h3&gt;
  
  
  The Idea
&lt;/h3&gt;

&lt;p&gt;I watch the Waveform podcast the MKBHD team hosts on Fridays after work. It's a great way to catch up on tech plus their personalities also make it more enjoyable. They have this entertaining trivia segment that ranges across tech, science and randomness.&lt;/p&gt;

&lt;p&gt;Sometime last year a fan built a dashboard with stats for the segment and it was so nice to see that I got inspired to make a game out of it(there's also been a lack of hackathons 🤷‍♂️).&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%2Fmjhnykf7zl6k02bhd7nm.gif" 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%2Fmjhnykf7zl6k02bhd7nm.gif" alt="Intro GIF" width="498" height="496"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  How I built it
&lt;/h3&gt;

&lt;p&gt;I used these to build the app&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;NextJS&lt;/li&gt;
&lt;li&gt;MUI &lt;/li&gt;
&lt;li&gt;Firebase (Firestore and Cloud Functions)&lt;/li&gt;
&lt;li&gt;Vercel&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I got the question bank from the source of the &lt;a href="https://wvfrmtrivia.com/" rel="noopener noreferrer"&gt;dashboard&lt;/a&gt; created by Howie Adderly. After which I wrote a script to upload to firestore...it's pretty weird that firestore still doesn't support JSON imports directly. After which it was a matter of building out the UI and functionalities of the app.&lt;/p&gt;

&lt;p&gt;I was able to build some of these features with the others on the way:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Gameplay&lt;/li&gt;
&lt;li&gt;Anonymous users with a point system&lt;/li&gt;
&lt;li&gt;Leaderboard (Currently limited)&lt;/li&gt;
&lt;li&gt;Social sharing (TBD)&lt;/li&gt;
&lt;li&gt;Push Notifications (TBD)&lt;/li&gt;
&lt;li&gt;Community Questions via FireCMS (TBD)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I hope you enjoyed the &lt;a href="https://wvfrmtrivia.xyz/" rel="noopener noreferrer"&gt;game&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;PS: I recently joined Twitter and made a post about this, some love there would be nice 🥹&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1762959126567555576-805" src="https://platform.twitter.com/embed/Tweet.html?id=1762959126567555576"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1762959126567555576-805');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1762959126567555576&amp;amp;theme=dark"
  }



&lt;/p&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>showdev</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Play a Game of Tetris generated from your GitHub</title>
      <dc:creator>Nabil Alamin</dc:creator>
      <pubDate>Tue, 23 May 2023 10:07:40 +0000</pubDate>
      <link>https://dev.to/arndom/play-a-game-of-tetris-generated-from-your-github-2mf4</link>
      <guid>https://dev.to/arndom/play-a-game-of-tetris-generated-from-your-github-2mf4</guid>
      <description>&lt;h2&gt;
  
  
  What I built
&lt;/h2&gt;

&lt;p&gt;I built a site where you can generate and play Tetris based on your GitHub contribution graph.&lt;/p&gt;

&lt;h3&gt;
  
  
  Category Submission:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Wacky Wildcards&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  App Link
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://gh-tetris.vercel.app/" rel="noopener noreferrer"&gt;https://gh-tetris.vercel.app/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Screenshots
&lt;/h3&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%2Figoj4mjob9fnlqaypqjs.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%2Figoj4mjob9fnlqaypqjs.png" alt="Game Select Screen" width="800" height="251"&gt;&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%2Fq2q159ldyfzimiexw3kw.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%2Fq2q159ldyfzimiexw3kw.png" alt="Game Piece Screen" width="800" height="343"&gt;&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%2Fu70lg86qa15p3icbbsua.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%2Fu70lg86qa15p3icbbsua.png" alt="Game screen" width="724" height="799"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Description
&lt;/h3&gt;

&lt;p&gt;GH Tetris is a site where you enter your GitHub username, select a year of activity, and then get a playable generated Tetris game from that activity.&lt;br&gt;
 &lt;/p&gt;
&lt;h3&gt;
  
  
  Link to Source Code
&lt;/h3&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/arndom" rel="noopener noreferrer"&gt;
        arndom
      &lt;/a&gt; / &lt;a href="https://github.com/arndom/github-contribution-tetris" rel="noopener noreferrer"&gt;
        github-contribution-tetris
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Play a game of Tetris generated from your github contribution graph
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;
  &lt;a rel="noopener noreferrer" href="https://github.com/arndom/github-contribution-tetris/gh-tetris.gif"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Farndom%2Fgithub-contribution-tetris%2Fgh-tetris.gif" alt="demo"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;About GitHub Contribution Tetris 🌟&lt;/h1&gt;

&lt;/div&gt;

&lt;p&gt;GitHub Contribution Tetris is a site where you enter your GitHub username, select a year of activity, and then get a playable generated Tetris game from that activity. It was built with Next.js and TS, while also taking bits and pieces from npm packages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/sallar/github-contributions-canvas" rel="noopener noreferrer"&gt;GitHub Contributions Canvas&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/brandly/react-tetris" rel="noopener noreferrer"&gt;React-tetris&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Developing locally&lt;/h1&gt;

&lt;/div&gt;

&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; install dependencies&lt;/span&gt;
yarn

&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; run locally&lt;/span&gt;
yarn dev&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Developing using codespaces&lt;/h1&gt;

&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;Navigate to the repo link: &lt;a href="https://github.com/arndom/github-contribution-tetris" rel="noopener noreferrer"&gt;https://github.com/arndom/github-contribution-tetris&lt;/a&gt; and click &lt;code&gt;&amp;lt;&amp;gt;Code&lt;/code&gt; then select codespaces and click &lt;code&gt;+&lt;/code&gt; to create a codespace with the already provided dev-container&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Leave a 🌟 if you found this interesting.&lt;/p&gt;

&lt;/div&gt;
&lt;br&gt;
&lt;br&gt;
  &lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/arndom/github-contribution-tetris" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;h3&gt;
  
  
  Permissive License
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;MIT&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Background
&lt;/h2&gt;

&lt;p&gt;When this was announced, I had no intention of participating, as time and ideas were scarce. Then one evening while on YT shorts I saw this &lt;em&gt;ad&lt;/em&gt; and got instantly reminded of the GitHub Contribution graph:&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%2Fskgax9e9uvvwfu5n32no.jpeg" 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%2Fskgax9e9uvvwfu5n32no.jpeg" alt="Inspiration" width="531" height="1080"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That changed my mind, and I went down the rabbit hole of planning and building.&lt;br&gt;
 &lt;/p&gt;

&lt;h3&gt;
  
  
  How I built it
&lt;/h3&gt;

&lt;p&gt;OSS really helped a lot during the build process; initially while thinking about this, I had planned to build it all from the ground up in &lt;em&gt;Next.js&lt;/em&gt;, but time was the biggest constraint so after some googling and prompt engineering 😉, I found two repositories that were npm packages that helped me a lot:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/sallar/github-contributions-canvas" rel="noopener noreferrer"&gt;GitHub Contributions Canvas&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/brandly/react-tetris" rel="noopener noreferrer"&gt;React-tetris&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So with these two I had a solid starting point which allowed me to build fast. I took bits and pieces coupled with my own logic, custom functionalities and UI to create this application. &lt;/p&gt;

&lt;p&gt;My biggest pain point while building this was that when I got to production, there was a 504 gateway timeout due to the SSR not being properly optimised in the &lt;code&gt;/[user]&lt;/code&gt; route. Trying to fix that took more time than I'd like to admit...at the end of the day, I went with CSR as a hotfix (will attempt refactoring back to SSR after submission).&lt;/p&gt;

&lt;p&gt;I added a base development container to the repo to allow potential contributors to test the repository in Codespaces without having to clone/fork the repo.&lt;/p&gt;

&lt;h3&gt;
  
  
  Additional Info (Future plans)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Mobile responsive&lt;/li&gt;
&lt;li&gt;Sounds &lt;/li&gt;
&lt;li&gt;And more...&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Anyway, I hope you enjoy my &lt;a href="https://gh-tetris.vercel.app/" rel="noopener noreferrer"&gt;submission&lt;/a&gt;, have a nice day.&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%2Fw3tf17fy8q2e3c8seq8x.gif" 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%2Fw3tf17fy8q2e3c8seq8x.gif" alt="End GIF" width="498" height="291"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>githubhack23</category>
      <category>nextjs</category>
      <category>typescript</category>
      <category>react</category>
    </item>
    <item>
      <title>Pic Placeholder: categorised image placeholders</title>
      <dc:creator>Nabil Alamin</dc:creator>
      <pubDate>Sun, 28 Aug 2022 16:46:00 +0000</pubDate>
      <link>https://dev.to/arndom/pic-placeholder-categorised-image-placeholders-8kj</link>
      <guid>https://dev.to/arndom/pic-placeholder-categorised-image-placeholders-8kj</guid>
      <description>&lt;h3&gt;
  
  
  Overview of My Submission
&lt;/h3&gt;

&lt;p&gt;⏩ TLDR: Pic placeholder is a stylish image placeholder with 6 categories (animals, cats, dogs, houses, landscapes &amp;amp; people) which collectively sums up to 500+ images. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://picc.vercel.app/" rel="noopener noreferrer"&gt;Demo&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%2Fucx7mtmm0g4lo116gf1k.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%2Fucx7mtmm0g4lo116gf1k.png" alt="demo image" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Idea&lt;/strong&gt;: Usually I use lorem picsum to get placeholders, but they didn't allow searches by categories, so I made mine.&lt;/p&gt;

&lt;p&gt;This solution uses images from &lt;em&gt;unsplash&lt;/em&gt;, where the image details were converted to JSON and placed in &lt;em&gt;redis(redis json)&lt;/em&gt; enabled with &lt;em&gt;redis search&lt;/em&gt; for filtering by categories. The actual images are stored on &lt;em&gt;aws s3&lt;/em&gt;. The client and api were built using NextJS.&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h3&gt;
  
  
  Submission Category:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Microservice Mavens (app also falls technically in the MEAN/MERN Mavericks)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h3&gt;
  
  
  Video Explainer of My Project
&lt;/h3&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/Ji_q9ZADONE"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  Language Used
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Javascript (NextJS, Node)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Link to Code
&lt;/h3&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/arndom" rel="noopener noreferrer"&gt;
        arndom
      &lt;/a&gt; / &lt;a href="https://github.com/arndom/pic-placeholder" rel="noopener noreferrer"&gt;
        pic-placeholder
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Pic placeholder is a stylish image placeholder with 6 categories (animals, cats, dogs, houses, landscapes &amp;amp; people) which collectively sums up to 500+ images.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;🖼️ Pic Placeholder&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Pic placeholder is a stylish image placeholder with 6 categories (animals, cats, dogs, houses, landscapes &amp;amp; people) which collectively sums up to 500+ images.&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/arndom/pic-placeholderimage/README/1661616205565.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Farndom%2Fpic-placeholderimage%2FREADME%2F1661616205565.png" alt="landing"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/arndom/pic-placeholderimage/README/1661615955557.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Farndom%2Fpic-placeholderimage%2FREADME%2F1661615955557.png" alt="demo slideshow"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/arndom/pic-placeholderimage/README/1661616056281.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Farndom%2Fpic-placeholderimage%2FREADME%2F1661616056281.png" alt="landscape image"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/arndom/pic-placeholderimage/README/1661616139707.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Farndom%2Fpic-placeholderimage%2FREADME%2F1661616139707.png" alt="specific image"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/arndom/pic-placeholderimage/README/1661616337586.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Farndom%2Fpic-placeholderimage%2FREADME%2F1661616337586.png" alt="json output"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Overview video&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Here's a short video that explains the project and how it uses redis
&lt;a href="https://youtu.be/Ji_q9ZADONE" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/4320028a20c0f6ac747a9667ea5bfbf32dae7b2fc910c80a7939ff9ec0d89e74/68747470733a2f2f692e7974696d672e636f6d2f76692f767978644331714b344e452f6d617872657364656661756c742e6a7067" alt="Overview YouTube video"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;How it works&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Pic placeholder is a microservice that provides endpoints to get placeholder images. These endpoints are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;/api/categories/[type]&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;returns JSON of all images with the supported types filtered from redis&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/api/images/[id]&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;redirects to specific image stored on aws S3&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/api/images&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;returns JSON of all images from redis&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/api/random/[category]&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;redirects to a random image matching the category&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/api/random&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;redirects to a random image&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;How the data is stored:&lt;/h3&gt;

&lt;/div&gt;
&lt;p&gt;There are two parts to this; the Redis JSON storage and the aws s3 storage.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;The Redis JSON contains the placeholders which are of this schema:&lt;/p&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;
&lt;pre class="notranslate"&gt;&lt;code&gt;{
    file: { type: "number" }
    width: { type: "number" },
    height: { type:&lt;/code&gt;&lt;/pre&gt;…&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/arndom/pic-placeholder" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt; &lt;/p&gt;

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

&lt;p&gt;Demo Video ⏬&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/2K7QKsOiSSg"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://picc.vercel.app/" rel="noopener noreferrer"&gt;Try it out&lt;/a&gt;.&lt;/p&gt;




&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Check out &lt;a href="https://redis.io/docs/stack/get-started/clients/#high-level-client-libraries" rel="noopener noreferrer"&gt;Redis OM&lt;/a&gt;, client libraries for working with Redis as a multi-model database.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Use &lt;a href="https://redis.info/redisinsight" rel="noopener noreferrer"&gt;RedisInsight&lt;/a&gt; to visualize your data in Redis.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Sign up for a &lt;a href="https://redis.info/try-free-dev-to" rel="noopener noreferrer"&gt;free Redis database&lt;/a&gt;.&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>redishackathon</category>
      <category>javascript</category>
      <category>showdev</category>
      <category>nextjs</category>
    </item>
    <item>
      <title>Introducing Pic Placeholder</title>
      <dc:creator>Nabil Alamin</dc:creator>
      <pubDate>Sat, 20 Aug 2022 00:03:46 +0000</pubDate>
      <link>https://dev.to/arndom/introducing-pic-placeholder-4cn1</link>
      <guid>https://dev.to/arndom/introducing-pic-placeholder-4cn1</guid>
      <description>&lt;h2&gt;
  
  
  📝Introduction
&lt;/h2&gt;

&lt;p&gt;So I saw this hackathon for a while and wanted to participate, mainly because I needed an excuse to get started with reddis, the issue now was what to build.&lt;/p&gt;

&lt;p&gt;I spent some time trying to figure that out but nothing came to mind...until sometime this week I was helping a friend with a project where he needed to get placeholder images for a real estate app.&lt;/p&gt;

&lt;p&gt;In doing that, I realised that my goto site &lt;a href="https://picsum.photos/" rel="noopener noreferrer"&gt;lorem picsum&lt;/a&gt; didn't have a way to sort images by categories...and thus pic placeholder was born.&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%2Fisb89fjpiy2o4mixxvj2.gif" 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%2Fisb89fjpiy2o4mixxvj2.gif" alt="demo gif" width="600" height="338"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The idea was to build a service that primarily allows the fetching of easy-to-use and stylish placeholders 😉 while allowing some filtering for specific use cases. Currently, a simple UI exists, here's a link: &lt;a href="https://picc.vercel.app/" rel="noopener noreferrer"&gt;https://picc.vercel.app/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  💭 What's next??
&lt;/h2&gt;

&lt;p&gt;In the subsequent post(s), I'll go over the building of the API and submission of the project. Stay tuned for more 👍&lt;/p&gt;

</description>
      <category>redishackathon</category>
      <category>redis</category>
      <category>javascript</category>
      <category>nextjs</category>
    </item>
  </channel>
</rss>
