<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Praveen Juge</title><description>Praveen Juge is a designer and developer for everything on the web.</description><link>https://praveenjuge.com/</link><category>Design</category><category>Technology</category><language>en-us</language><copyright>Copyright Praveen Juge</copyright><item><title>I made three iOS apps and shipped them to the App Store</title><link>https://praveenjuge.com/blog/i-made-three-ios-apps-and-shipped-them-to-the-app-store/</link><guid isPermaLink="true">https://praveenjuge.com/blog/i-made-three-ios-apps-and-shipped-them-to-the-app-store/</guid><description>Over the last few months, I stopped talking about making iOS apps and actually shipped three of them: One Hour, Practice, and Teak.</description><pubDate>Mon, 06 Apr 2026 09:30:00 GMT</pubDate><content:encoded>Over the last few months, I stopped talking about making iOS apps and actually shipped three of them: One Hour, Practice, and Teak.&lt;p&gt;I stopped talking about making iOS apps and shipped three: &lt;a href=&quot;https://apps.apple.com/in/app/one-hour-hourly-reminders/id6756283371&quot;&gt;&lt;strong&gt;One Hour&lt;/strong&gt;&lt;/a&gt;, &lt;a href=&quot;https://apps.apple.com/in/app/practice-habit-tracker/id6756779057&quot;&gt;&lt;strong&gt;Practice&lt;/strong&gt;&lt;/a&gt;, and &lt;a href=&quot;https://apps.apple.com/in/app/teak-save-inspirations/id6756574989&quot;&gt;&lt;strong&gt;Teak&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;You can see all three on my &lt;a href=&quot;https://apps.apple.com/in/developer/juge-praveen/id1859809495&quot;&gt;&lt;strong&gt;developer page&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/teak-auth-and-settings.CYoJEy_w_1KI5ee.webp&quot; alt=&quot;Teak iPhone screens showing authentication, settings, and add flows.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot;&gt;&lt;/p&gt;
&lt;p&gt;Each one started with the same rule: make it &lt;strong&gt;useful&lt;/strong&gt;, make it &lt;strong&gt;focused&lt;/strong&gt;, and make it &lt;strong&gt;small enough to finish&lt;/strong&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://apps.apple.com/in/app/one-hour-hourly-reminders/id6756283371&quot;&gt;&lt;strong&gt;One Hour&lt;/strong&gt;&lt;/a&gt; helps me build healthier routines with simple hourly reminders.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://apps.apple.com/in/app/practice-habit-tracker/id6756779057&quot;&gt;&lt;strong&gt;Practice&lt;/strong&gt;&lt;/a&gt; is my habit tracker for daily streaks and consistency.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://apps.apple.com/in/app/teak-save-inspirations/id6756574989&quot;&gt;&lt;strong&gt;Teak&lt;/strong&gt;&lt;/a&gt; is my inspiration vault for saving links, images, notes, audio, and documents. It also has its own site at &lt;a href=&quot;https://teakvault.com&quot;&gt;teakvault.com&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/one-hour-screens.BudRYx0C_Z1dw4GH.webp&quot; alt=&quot;One Hour iPhone screens showing reminders, add flow, and settings.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot;&gt;&lt;/p&gt;
&lt;p&gt;The lesson was not about motivation.&lt;/p&gt;
&lt;p&gt;It was about &lt;strong&gt;clarity&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;When I kept the scope tight, the app improved.&lt;/p&gt;
&lt;p&gt;When I tried to add too much, the product got blurry.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Expo&lt;/strong&gt; made this whole thing feel possible. I could build fast, test often, and spend my time on the product instead of getting dragged into native setup. And &lt;a href=&quot;https://docs.expo.dev/versions/latest/sdk/ui/&quot;&gt;&lt;strong&gt;@expo/ui&lt;/strong&gt;&lt;/a&gt; helped me ship &lt;strong&gt;real native UI&lt;/strong&gt; by letting me build with SwiftUI from React.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Codex&lt;/strong&gt; helped me keep going. It sped up features, helped fix bugs, and gave me momentum when I would normally stall.&lt;/p&gt;
&lt;p&gt;Shipping an app is not just code.&lt;/p&gt;
&lt;p&gt;It is the &lt;strong&gt;icon&lt;/strong&gt;, the &lt;strong&gt;screenshots&lt;/strong&gt;, the &lt;strong&gt;copy&lt;/strong&gt;, the &lt;strong&gt;privacy details&lt;/strong&gt;, and the quiet responsibility of keeping the thing alive after version 1.0.&lt;/p&gt;
&lt;p&gt;Getting through App Review is a milestone. &lt;strong&gt;Continuing to improve the app is the job.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/teak-onboarding-and-feed.kkmwttC5_1gi9Pg.webp&quot; alt=&quot;Teak onboarding and feed screens on iPhone.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot;&gt;&lt;/p&gt;
&lt;p&gt;That is my favorite part.&lt;/p&gt;
&lt;p&gt;These are not concepts sitting in Figma. They are &lt;strong&gt;real apps&lt;/strong&gt; people can download, use, and judge.&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/teak-icon.DlAz4RLS_10E6F.webp&quot; alt=&quot;Close-up of the Teak app icon on iPhone.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1200&quot;&gt;&lt;/p&gt;
&lt;p&gt;I want to make more.&lt;/p&gt;</content:encoded><author>Praveen Juge (hi@praveenjuge.com)</author></item><item><title>What the fuck is a designer after Codex?</title><link>https://praveenjuge.com/blog/what-the-fuck-is-a-designer-after-codex/</link><guid isPermaLink="true">https://praveenjuge.com/blog/what-the-fuck-is-a-designer-after-codex/</guid><description>If AI can generate decent UI and front-end code on demand, the designer&apos;s job shifts from making screens to making decisions.</description><pubDate>Sun, 05 Apr 2026 00:00:00 GMT</pubDate><content:encoded>If AI can generate decent UI and front-end code on demand, the designer&apos;s job shifts from making screens to making decisions.&lt;p&gt;For years, we treated design like it was mostly the act of making screens. Move the pixels. Pick the type. Make the flow. Ship the file. That was always incomplete, but now the gap is impossible to ignore. If Codex can produce interfaces, write front-end code, and generate ten decent options before lunch, then “the person who makes the screens” is no longer a very durable definition.&lt;/p&gt;
&lt;p&gt;So what is a designer now?&lt;/p&gt;
&lt;p&gt;A designer is the person who decides what matters. What should be there, and what should not. What needs to be clear. What needs to be quiet. What earns trust. What creates tension. What helps someone move forward without feeling confused, rushed, or small. When making goes faster, deciding becomes more valuable.&lt;/p&gt;
&lt;p&gt;That means the work moves up a level. Less arranging, more noticing. Less polishing every corner by hand, more understanding what the product is trying to say. The designer becomes an editor, a translator, a curator of intent. Not just someone who makes the interface look good, but someone who helps it mean something.&lt;/p&gt;
&lt;p&gt;Codex does not remove the need for design. It reveals what the job was actually about all along. The easy part to automate is the artifact. The hard part is the choice. After codex, a designer is the person still responsible for the decision, and for how that decision feels when it reaches another human being.&lt;/p&gt;</content:encoded><author>Praveen Juge (hi@praveenjuge.com)</author></item><item><title>My 2026 Tech Stack</title><link>https://praveenjuge.com/blog/my-2026-tech-stack/</link><guid isPermaLink="true">https://praveenjuge.com/blog/my-2026-tech-stack/</guid><description>Here is the stack I am using to build Teak in 2026, from product UI to backend operations.</description><pubDate>Fri, 20 Feb 2026 05:47:55 GMT</pubDate><content:encoded>Here is the stack I am using to build Teak in 2026, from product UI to backend operations.&lt;ul&gt;
&lt;li&gt;⚙️ &lt;a href=&quot;https://nextjs.org/&quot;&gt;&lt;strong&gt;Next.js&lt;/strong&gt;&lt;/a&gt; - Full-stack framework&lt;/li&gt;
&lt;li&gt;🪐 &lt;a href=&quot;https://astro.build/&quot;&gt;&lt;strong&gt;Astro&lt;/strong&gt;&lt;/a&gt; - Landing pages&lt;/li&gt;
&lt;li&gt;🎨 &lt;a href=&quot;https://tailwindcss.com/&quot;&gt;&lt;strong&gt;Tailwind CSS&lt;/strong&gt;&lt;/a&gt; - Styling system&lt;/li&gt;
&lt;li&gt;🧩 &lt;a href=&quot;https://ui.shadcn.com/&quot;&gt;&lt;strong&gt;shadcn/ui&lt;/strong&gt;&lt;/a&gt; - UI components&lt;/li&gt;
&lt;li&gt;🖼️ &lt;a href=&quot;https://mynaui.com/icons&quot;&gt;&lt;strong&gt;MynaUI Icons&lt;/strong&gt;&lt;/a&gt; - Icon set&lt;/li&gt;
&lt;li&gt;✍️ &lt;a href=&quot;https://vercel.com/font&quot;&gt;&lt;strong&gt;Geist Sans&lt;/strong&gt;&lt;/a&gt; - Typography&lt;/li&gt;
&lt;li&gt;🌐 &lt;a href=&quot;https://vercel.com/&quot;&gt;&lt;strong&gt;Vercel&lt;/strong&gt;&lt;/a&gt; - Hosting and deployment&lt;/li&gt;
&lt;li&gt;🌩️ &lt;a href=&quot;https://www.cloudflare.com/products/cloudflare-images/&quot;&gt;&lt;strong&gt;Cloudflare Images&lt;/strong&gt;&lt;/a&gt; - Image processing&lt;/li&gt;
&lt;li&gt;🗄️ &lt;a href=&quot;https://convex.dev/&quot;&gt;&lt;strong&gt;Convex&lt;/strong&gt;&lt;/a&gt; - Backend and database platform&lt;/li&gt;
&lt;li&gt;🔐 &lt;a href=&quot;https://www.better-auth.com/&quot;&gt;&lt;strong&gt;Better Auth&lt;/strong&gt;&lt;/a&gt; - Authentication&lt;/li&gt;
&lt;li&gt;💸 &lt;a href=&quot;https://polar.sh/&quot;&gt;&lt;strong&gt;Polar&lt;/strong&gt;&lt;/a&gt; - Payments&lt;/li&gt;
&lt;li&gt;📧 &lt;a href=&quot;https://resend.com/&quot;&gt;&lt;strong&gt;Resend&lt;/strong&gt;&lt;/a&gt; - Email delivery&lt;/li&gt;
&lt;li&gt;📊 &lt;a href=&quot;https://vercel.com/analytics&quot;&gt;&lt;strong&gt;Vercel Analytics&lt;/strong&gt;&lt;/a&gt; - Product analytics&lt;/li&gt;
&lt;li&gt;🧪 &lt;a href=&quot;https://vitest.dev/&quot;&gt;&lt;strong&gt;Vitest&lt;/strong&gt;&lt;/a&gt; - Testing framework&lt;/li&gt;
&lt;li&gt;🛠️ &lt;a href=&quot;https://sentry.io/&quot;&gt;&lt;strong&gt;Sentry&lt;/strong&gt;&lt;/a&gt; - Error monitoring&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This stack keeps &lt;a href=&quot;https://teakvault.com&quot;&gt;Teak&lt;/a&gt; fast, reliable, and easy to iterate on.&lt;/p&gt;</content:encoded><author>Praveen Juge (hi@praveenjuge.com)</author></item><item><title>Designing an AI Metadata Pipeline for a Personal Knowledge Hub</title><link>https://praveenjuge.com/blog/designing-an-ai-metadata-pipeline-for-a-personal-knowledge-hub/</link><guid isPermaLink="true">https://praveenjuge.com/blog/designing-an-ai-metadata-pipeline-for-a-personal-knowledge-hub/</guid><description>How Teak uses a simple, predictable AI pipeline to quietly make sense of all your saved links, screenshots, notes, and files.</description><pubDate>Sun, 30 Nov 2025 14:18:58 GMT</pubDate><content:encoded>How Teak uses a simple, predictable AI pipeline to quietly make sense of all your saved links, screenshots, notes, and files.&lt;p&gt;Teak is a personal knowledge hub.
You save links, screenshots, notes, files.
Teak’s job is to quietly make sense of all that. (&lt;a href=&quot;https://teakvault.com&quot;&gt;Teak&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;The way it does that is through &lt;strong&gt;metadata&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Not the glamorous kind.
The boring kind that makes everything else possible.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;metadata-as-a-promise&quot;&gt;Metadata as a promise&lt;/h2&gt;
&lt;p&gt;For every card in Teak, I treat metadata like a &lt;strong&gt;promise&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;There will be a title.&lt;/li&gt;
&lt;li&gt;There might be a short description.&lt;/li&gt;
&lt;li&gt;There will be tags.&lt;/li&gt;
&lt;li&gt;The shape of this data will not surprise you.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That promise is written down as a &lt;strong&gt;schema&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;In the backend (Convex)&lt;/li&gt;
&lt;li&gt;In the web app&lt;/li&gt;
&lt;li&gt;In the browser extension&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Same fields. Same types. Same meaning.&lt;/p&gt;
&lt;p&gt;The AI model doesn’t get to invent new shapes.
It only gets to fill in the blanks.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;the-simple-pipeline&quot;&gt;The simple pipeline&lt;/h2&gt;
&lt;p&gt;Most AI products hide behind magic.
Teak is more like a kitchen.&lt;/p&gt;
&lt;p&gt;For each thing you save, the pipeline is:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Scrape&lt;/strong&gt;
Grab what we can without AI: title tags, HTML, file info.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Enrich&lt;/strong&gt;
Clean it up. Normalize URLs. Strip noise. Prepare a clear input.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;AI&lt;/strong&gt;
Send a single, boring request:
“Given this content, return JSON in &lt;em&gt;this&lt;/em&gt; format. Nothing else.”&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Post-process&lt;/strong&gt;
Check the JSON. Trim it. Sanity-check tags. Throw away junk.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Card UI&lt;/strong&gt;
Show a card that feels “smart”, but is really just consistent.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;From the user’s point of view:
a rough card appears → a few seconds later, it sharpens into something useful.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;making-ai-boring-on-purpose&quot;&gt;Making AI boring on purpose&lt;/h2&gt;
&lt;p&gt;The hard part is not getting AI to be clever.
It’s getting it to be &lt;strong&gt;predictable&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;So I give it constraints:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A fixed schema.&lt;/li&gt;
&lt;li&gt;A clear role (“help a designer find this later”).&lt;/li&gt;
&lt;li&gt;Limits (“1–8 tags, all lowercase, no poetry”).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Then I add guardrails:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If the JSON is broken, I ignore it.&lt;/li&gt;
&lt;li&gt;If the AI title is worse than the original, I keep the original.&lt;/li&gt;
&lt;li&gt;If tags are nonsense, I hide them instead of forcing them.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The result is an AI system that feels calm:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The UI rarely breaks.&lt;/li&gt;
&lt;li&gt;Filters work because tags are stable.&lt;/li&gt;
&lt;li&gt;You can design around the behavior and trust it.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;In the end, “AI metadata pipeline” sounds complex.
But the idea is simple:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;One contract&lt;/strong&gt; for metadata.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;One pipeline&lt;/strong&gt; that respects it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;One boring AI&lt;/strong&gt; that behaves well enough
for you to build a beautiful product on top.&lt;/li&gt;
&lt;/ul&gt;</content:encoded><author>Praveen Juge (hi@praveenjuge.com)</author></item><item><title>Raise Your First Pull Request as a Designer</title><link>https://praveenjuge.com/blog/raise-your-first-pull-request-as-a-designer/</link><guid isPermaLink="true">https://praveenjuge.com/blog/raise-your-first-pull-request-as-a-designer/</guid><description>A step-by-step guide for designers to ship a focused, review-friendly pull request without becoming a developer.</description><pubDate>Sun, 02 Nov 2025 00:00:00 GMT</pubDate><content:encoded>A step-by-step guide for designers to ship a focused, review-friendly pull request without becoming a developer.&lt;p&gt;You don’t need to “become a developer” to open a good pull request. You just need a tiny, focused change and a clear story.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;pick-a-tiny-win&quot;&gt;Pick a tiny win&lt;/h2&gt;
&lt;p&gt;Ship something you can finish today:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Swap hard-coded values for &lt;strong&gt;tokens&lt;/strong&gt; (spacing, color, radius).&lt;/li&gt;
&lt;li&gt;Add/standardize &lt;strong&gt;states&lt;/strong&gt; (hover, focus, disabled, loading).&lt;/li&gt;
&lt;li&gt;Fix &lt;strong&gt;copy&lt;/strong&gt; via i18n keys.&lt;/li&gt;
&lt;li&gt;Clean up an &lt;strong&gt;empty state&lt;/strong&gt; component.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Small scope keeps the diff readable and review friendly.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;branch--title&quot;&gt;Branch + title&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Branch: &lt;code&gt;feat/ui-empty-state-invoices&lt;/code&gt; or &lt;code&gt;fix/tokens-modal-spacing&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Title (area + intent):
&lt;code&gt;feat(ui): consistent focus ring across buttons&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Clear names help teammates scan and trust your change.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;tell-a-short-story-paste-this&quot;&gt;Tell a short story (paste this)&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Context&lt;/strong&gt; — What’s off? Who feels it?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Proposal&lt;/strong&gt; — The smallest change that fixes it (and what you didn’t touch).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Evidence&lt;/strong&gt; — Before/After (light &amp;#x26; dark), a 10–15s GIF, Storybook link.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verify&lt;/strong&gt; — Exact steps/URL/flags to reproduce.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Blast radius&lt;/strong&gt; — Files touched, tokens changed, components affected.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rollout&lt;/strong&gt; — Behind a flag? Any fallback?&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;the-checklist-reviewers-love&quot;&gt;The checklist reviewers love&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Visual&lt;/strong&gt;&lt;/p&gt;
&lt;ul class=&quot;contains-task-list&quot;&gt;
&lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; disabled&gt; Before/After screenshots (light/dark)&lt;/li&gt;
&lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; disabled&gt; Edge cases (long text, error, loading)&lt;/li&gt;
&lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; disabled&gt; Responsive at sm/md/lg&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;A11y&lt;/strong&gt;&lt;/p&gt;
&lt;ul class=&quot;contains-task-list&quot;&gt;
&lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; disabled&gt; Contrast passes&lt;/li&gt;
&lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; disabled&gt; &lt;code&gt;:focus-visible&lt;/code&gt; ring present&lt;/li&gt;
&lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; disabled&gt; Useful labels/roles (or remove redundant ones)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Tokens&lt;/strong&gt;&lt;/p&gt;
&lt;ul class=&quot;contains-task-list&quot;&gt;
&lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; disabled&gt; No raw hex/px; use semantic tokens (&lt;code&gt;fg.muted&lt;/code&gt;, &lt;code&gt;bg.surface&lt;/code&gt;, &lt;code&gt;space.x&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Perf/QA&lt;/strong&gt;&lt;/p&gt;
&lt;ul class=&quot;contains-task-list&quot;&gt;
&lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; disabled&gt; No new heavy assets&lt;/li&gt;
&lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; disabled&gt; Storybook story added/updated&lt;/li&gt;
&lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; disabled&gt; Repro steps work on a clean checkout&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;what-to-attach&quot;&gt;What to attach&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Screenshot grid&lt;/strong&gt;: Before/After × light/dark in one image&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;15s GIF&lt;/strong&gt;: keyboard nav → focus → error → loading&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Links&lt;/strong&gt;: Figma frame URL&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;tiny-example-tokens--focus&quot;&gt;Tiny example (tokens + focus)&lt;/h2&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;tsx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// before&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;button&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; className&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;px-3 py-2 text-white bg-[#1a73e8] rounded-[4px]&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  Pay invoice&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;button&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;// after&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;button&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;  className&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    px-space-3 py-space-2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    text-fg-on-primary bg-bg-primary&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    rounded-radius-2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-outline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  &quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  {&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;t&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;invoices.payCta&apos;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;button&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2 id=&quot;ship-it&quot;&gt;Ship it&lt;/h2&gt;
&lt;p&gt;Open the pull request. Ask for one engineer and one designer to review. The goal isn’t perfect code—it’s a &lt;strong&gt;clear, safe change&lt;/strong&gt; that moves the system forward. If it takes more than a day, the scope is too big. Slice it and try again.&lt;/p&gt;</content:encoded><author>Praveen Juge (hi@praveenjuge.com)</author></item><item><title>Designing for Edge Cases Makes You a Better Designer</title><link>https://praveenjuge.com/blog/designing-for-edge-cases-makes-you-a-better-designer/</link><guid isPermaLink="true">https://praveenjuge.com/blog/designing-for-edge-cases-makes-you-a-better-designer/</guid><description>Polishing happy paths is fun, but the real craft comes from exploring how your systems respond when data misbehaves.</description><pubDate>Sat, 01 Nov 2025 00:00:00 GMT</pubDate><content:encoded>Polishing happy paths is fun, but the real craft comes from exploring how your systems respond when data misbehaves.&lt;p&gt;We all know the thrill of polishing a flow until it feels slick. But the real growth happens when you zoom out and ask: what happens when the data doesn’t behave? Advanced designers live in that uncomfortable space where perfect mocks meet messy reality. Embracing edge cases isn’t a nice‑to‑have—it’s a key to systemic thinking.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Beyond the happy path&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Designing a component once is easy; designing it for arbitrary inputs exposes the invisible constraints in your system. Treat long strings, empty states, or even network failure as first‑class citizens in your Figma files. It forces you to think in variables, not static pixels. Once you’ve defined how a card responds to a 60‑character title, truncates gracefully, or shows a skeleton loader, you start to see patterns that inform your entire design language.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The shortcomings of many Figma files&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Even sophisticated files often skip the unsightly states. You might see components with pristine labels but no variant for when that label fails. Or flows that assume perfect connectivity without a fallback. This creates friction during handoff—engineers improvise behaviors you never specified. Advanced designers shouldn’t leave those gaps. Use Figma’s variant and property systems to model variability: error messaging, accessibility toggles, and content scaling. These aren’t “extras”; they’re part of the contract your UI makes with the user and the team.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cultivating an edge‑case mindset&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This isn’t about documenting every hypothetical. It’s about making space in your process to challenge assumptions. Ask yourself:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;What happens when the API returns no results?&lt;/li&gt;
&lt;li&gt;How does this component behave at minimum and maximum content lengths?&lt;/li&gt;
&lt;li&gt;Does the layout accommodate translated strings or right‑to‑left languages?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You don’t need to build exhaustive matrices for everything, but having at least one divergent example per component trains your brain (and your collaborators) to think more holistically. Over time, this discipline translates into cleaner systems, fewer regressions, and designs that feel resilient, not brittle.&lt;/p&gt;
&lt;p&gt;Designing for edge cases isn’t a chore; it’s an investment in the integrity of your work. For those of us who care about craft, that’s where the real mastery shows.&lt;/p&gt;</content:encoded><author>Praveen Juge (hi@praveenjuge.com)</author></item><item><title>New Updates to MynaUI!</title><link>https://praveenjuge.com/blog/new-updates-to-mynaui/</link><guid isPermaLink="true">https://praveenjuge.com/blog/new-updates-to-mynaui/</guid><pubDate>Tue, 18 Mar 2025 20:54:05 GMT</pubDate><content:encoded>undefined&lt;p&gt;Today, I’m thrilled to share the latest updates to &lt;a href=&quot;https://mynaui.com&quot;&gt;MynaUI&lt;/a&gt;.
If you’ve been following along, you’ll notice some significant changes that
enhance usability and functionality. Let’s dive into what’s new!&lt;/p&gt;
&lt;h3 id=&quot;goodbye-early-access&quot;&gt;Goodbye Early Access!&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://mynaui.com&quot;&gt;MynaUI&lt;/a&gt; is no longer in early access. I’ve spent a lot of
time refining and adding features, and I believe it’s now fully ready for prime
time. This transition marks a new chapter for &lt;a href=&quot;https://mynaui.com&quot;&gt;MynaUI&lt;/a&gt;, and
I couldn’t be more excited.&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/mynaui_previous_version.L-9scgS8_Z1EtEkB.webp&quot; alt=&quot;MynaUI previous version&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1920&quot; height=&quot;1080&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;a-fresh-sidebar-for-components&quot;&gt;A Fresh Sidebar for Components&lt;/h3&gt;
&lt;p&gt;One of the major updates is the addition of a sidebar for all components and
elements. This new feature makes navigation easier and more intuitive.&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/new_sidebar_feature_in_mynaui.D-duGUkO_1u7bbr.webp&quot; alt=&quot;New sidebar feature in MynaUI&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1920&quot; height=&quot;1080&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;moving-to-tailwind-4&quot;&gt;Moving to Tailwind 4&lt;/h3&gt;
&lt;p&gt;I’ve updated all components to Tailwind 4, bringing better performance and more
customization options.&lt;/p&gt;
&lt;h3 id=&quot;shifting-to-the-shad-new-york-theme&quot;&gt;Shifting to the Shad New York Theme&lt;/h3&gt;
&lt;p&gt;MynaUI now features the Shad New York theme, offering a sleek, modern design
that enhances the interface’s look and feel.&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/shad_new_york_theme_in_mynaui.BAaCoxB6_Z1WR3HA.webp&quot; alt=&quot;Shad New York theme in MynaUI&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1920&quot; height=&quot;1080&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;react-updates&quot;&gt;React Updates&lt;/h3&gt;
&lt;p&gt;MynaUI is updated to the latest version of React, ensuring smooth and efficient
performance.&lt;/p&gt;
&lt;h3 id=&quot;new-icons-on-the-horizon&quot;&gt;New Icons on the Horizon&lt;/h3&gt;
&lt;p&gt;I’m excited to announce that I’ll be adding a variety of new icons that many of
you have been requesting.&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/upcoming_icons_for_mynaui.Cf1ExUIA_Y9DWy.webp&quot; alt=&quot;Upcoming icons for MynaUI&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1920&quot; height=&quot;1080&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;more-components-coming-soon&quot;&gt;More Components Coming Soon&lt;/h3&gt;
&lt;p&gt;After the icons, I’ll be adding more components, focusing on marketing and
application components.&lt;/p&gt;
&lt;h3 id=&quot;visual-changes-a-new-color-palette&quot;&gt;Visual Changes: A New Color Palette&lt;/h3&gt;
&lt;p&gt;The updated color palette transitions to a more neutral scheme, aligning with
the Shad New York theme.&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/new_color_palette_in_mynaui.DuQzK3Q5_psHSz.webp&quot; alt=&quot;New color palette in MynaUI&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1920&quot; height=&quot;1080&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;updated-color-system&quot;&gt;Updated Color System&lt;/h3&gt;
&lt;p&gt;All colors in MynaUI have been updated to OKLCH for enhanced color accuracy and
consistency.&lt;/p&gt;
&lt;h3 id=&quot;new-components-to-explore&quot;&gt;New Components to Explore&lt;/h3&gt;
&lt;p&gt;Several new components have been added, including new badge and button
components.&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/new_components_in_mynaui.TzafiQeQ_2tggAc.webp&quot; alt=&quot;New components in MynaUI&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1920&quot; height=&quot;1080&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;feedback-welcome&quot;&gt;Feedback Welcome!&lt;/h3&gt;
&lt;p&gt;Your feedback is invaluable. Submit requests directly through the platform, and
I’ll do my best to accommodate them.&lt;/p&gt;
&lt;h3 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;That wraps up the latest updates to &lt;a href=&quot;https://mynaui.com&quot;&gt;MynaUI&lt;/a&gt;! Be sure to
check out the new sidebar, explore the updated components, and keep an eye out
for the upcoming icons and additional features. Have fun experimenting with
&lt;a href=&quot;https://mynaui.com&quot;&gt;MynaUI&lt;/a&gt;, and as always, happy coding!&lt;/p&gt;</content:encoded><author>Praveen Juge (hi@praveenjuge.com)</author></item><item><title>Embrace Your Craft Daily</title><link>https://praveenjuge.com/blog/embrace-your-daily-craft/</link><guid isPermaLink="true">https://praveenjuge.com/blog/embrace-your-daily-craft/</guid><description>Every day is a chance to improve your skills, even if you only have 10 minutes. I block out time on my calendar for a quick design session, just like I would for a meeting.</description><pubDate>Thu, 13 Feb 2025 12:37:47 GMT</pubDate><content:encoded>Every day is a chance to improve your skills, even if you only have 10 minutes. I block out time on my calendar for a quick design session, just like I would for a meeting.&lt;p&gt;Start small by sketching one idea or creating a simple graphic. These small
projects help build the habit without feeling overwhelming.&lt;/p&gt;
&lt;p&gt;Don’t stress about perfection; treat each piece as a practice attempt. Mistakes
are just steps toward learning what works and what doesn’t.&lt;/p&gt;
&lt;p&gt;Make creative time a regular part of your routine, like your morning coffee.
When it becomes routine, you’ll find it easier to overcome creative blocks.&lt;/p&gt;
&lt;p&gt;Share your work with friends or on social media to get real feedback. Honest
opinions from real people help guide your improvements.&lt;/p&gt;
&lt;p&gt;Keep a folder or journal of your daily designs. Looking back at your work lets
you see your progress and spot trends in your style.&lt;/p&gt;
&lt;p&gt;Consistency is key; even a little daily effort builds creative muscle over time.
Just like exercising strengthens your body, regular practice strengthens your
design skills.&lt;/p&gt;
&lt;p&gt;Turn off distractions and focus on your craft for those few minutes each day. A
quiet, dedicated space can make a big difference in your productivity.&lt;/p&gt;
&lt;p&gt;Start today and commit to the habit of daily design practice. Every small step
moves you closer to mastering your craft.&lt;/p&gt;</content:encoded><author>Praveen Juge (hi@praveenjuge.com)</author></item><item><title>Top 10 Fonts for UI Design That I Love</title><link>https://praveenjuge.com/blog/top-10-fonts-for-ui-design-that-i-love/</link><guid isPermaLink="true">https://praveenjuge.com/blog/top-10-fonts-for-ui-design-that-i-love/</guid><description>You know how fonts can make or break a design, right? They set the mood, deliver the message, and make things pop. I’ve tried a bunch of them over the years, and these are my go-to picks. They’re reliable, stylish, and just fun to use. Let’s jump in!</description><pubDate>Sat, 04 Jan 2025 00:00:00 GMT</pubDate><content:encoded>You know how fonts can make or break a design, right? They set the mood, deliver the message, and make things pop. I’ve tried a bunch of them over the years, and these are my go-to picks. They’re reliable, stylish, and just fun to use. Let’s jump in!&lt;h2 id=&quot;10-zcool-qingke-huangyou&quot;&gt;10. &lt;a href=&quot;https://fonts.google.com/specimen/ZCOOL+QingKe+HuangYou&quot;&gt;ZCOOL QingKe HuangYou&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://fonts.google.com/specimen/ZCOOL+QingKe+HuangYou&quot;&gt;&lt;img  src=&quot;/_astro/10.ClJWiFlr_Z2m4Yja.webp&quot; alt=&quot;ZCOOL QingKe HuangYou Font&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;3420&quot; height=&quot;1685&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Okay, this one’s a mouthful to say, but it’s awesome. It’s got this futuristic vibe that’s perfect for techy landing pages or anything enterprise-y. If you’re going for that “cutting-edge” look, this is the one.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;9-handjet&quot;&gt;9. &lt;a href=&quot;https://fonts.google.com/specimen/Handjet&quot;&gt;Handjet&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://fonts.google.com/specimen/Handjet&quot;&gt;&lt;img  src=&quot;/_astro/9.DaIw2TpD_WbJhe.webp&quot; alt=&quot;Handjet Font&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;3420&quot; height=&quot;1685&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Handjet is super retro and just plain cool. I use it on posters and tech-themed designs. The uppercase letters all being the same height make it stand out—perfect for banners, landing pages, and apps where you want to go bold.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;8-shantell-sans&quot;&gt;8. &lt;a href=&quot;https://fonts.google.com/specimen/Shantell+Sans&quot;&gt;Shantell Sans&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://fonts.google.com/specimen/Shantell+Sans&quot;&gt;&lt;img  src=&quot;/_astro/8.Cvn4DENb_Z1v8ot8.webp&quot; alt=&quot;Shantell Sans Font&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;3420&quot; height=&quot;1685&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This one’s got personality without being over-the-top. It’s kind of handwritten but polished. I use it for landing pages and banners when I want to add a little warmth. It’s not great for mobile or web apps, but for posters? Gold.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;7-just-another-hand&quot;&gt;7. &lt;a href=&quot;https://fonts.google.com/specimen/Just+Another+Hand&quot;&gt;Just Another Hand&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://fonts.google.com/specimen/Just+Another+Hand&quot;&gt;&lt;img  src=&quot;/_astro/7.D1xf05zC_Z1fWplp.webp&quot; alt=&quot;Just Another Hand Font&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;3420&quot; height=&quot;1685&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you want even more of that handwritten vibe, this is your font. It’s playful and perfect for kid-friendly designs, posters, and banners. Whenever I’m doing something fun or casual, this one’s a lifesaver.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;6-sn-pro&quot;&gt;6. &lt;a href=&quot;https://supernotes.app/open-source/sn-pro/&quot;&gt;SN Pro&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://supernotes.app/open-source/sn-pro/&quot;&gt;&lt;img  src=&quot;/_astro/6.CYHBu3Uf_Rjynf.webp&quot; alt=&quot;SN Pro Font&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;3420&quot; height=&quot;1685&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This one’s a gem. It’s like a friendlier version of Apple’s SF Pro Rounded. SN Pro has this rounded, calming feel—great for anything that needs to look approachable but not childish. Think soft but professional.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;5-jaro&quot;&gt;5. &lt;a href=&quot;https://fonts.google.com/specimen/Jaro&quot;&gt;JARO&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://fonts.google.com/specimen/Jaro&quot;&gt;&lt;img  src=&quot;/_astro/5.BSxS5_eG_3ysMt.webp&quot; alt=&quot;JARO Font&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;3420&quot; height=&quot;1685&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Bold and edgy, JARO is amazing for grabbing attention. I use it for landing pages and posters when I need to emphasize something. It’s versatile—can swing between retro and futuristic depending on the design. Love it for banners too.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;4-instrument-serif&quot;&gt;4. &lt;a href=&quot;https://fonts.google.com/specimen/Instrument+Serif&quot;&gt;Instrument Serif&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://fonts.google.com/specimen/Instrument+Serif&quot;&gt;&lt;img  src=&quot;/_astro/4.Bc8Gsgfx_EICKT.webp&quot; alt=&quot;Instrument Serif Font&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;3420&quot; height=&quot;1685&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Everyone’s using this one lately, and for good reason. It’s got this luxurious, polished look that’s ideal for landing pages. Plus, it’s free on Google Fonts. Can’t argue with style and affordability, right?&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;3-big-shoulders-display&quot;&gt;3. &lt;a href=&quot;https://fonts.google.com/specimen/Big+Shoulders+Display&quot;&gt;Big Shoulders Display&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://fonts.google.com/specimen/Big+Shoulders+Display&quot;&gt;&lt;img  src=&quot;/_astro/3.DsWx0U_w_2eHIsU.webp&quot; alt=&quot;Big Shoulders Display Font&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;3420&quot; height=&quot;1685&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Big, bold, and perfect for making a statement. I’ve used this in so many posters and landing pages. It commands attention and ensures the message is clear. If you want to shout something loud and proud, this is your font.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;2-jetbrains-mono&quot;&gt;2. &lt;a href=&quot;https://fonts.google.com/specimen/JetBrains+Mono&quot;&gt;JetBrains Mono&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://fonts.google.com/specimen/JetBrains+Mono&quot;&gt;&lt;img  src=&quot;/_astro/2.B566xuhx_26OGxa.webp&quot; alt=&quot;JetBrains Mono Font&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;3420&quot; height=&quot;1685&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;For web apps and anything involving code or numbers, JetBrains Mono is unbeatable. It’s clean, easy on the eyes, and just feels right. I use it for paragraphs in apps and any place I need that monospaced charm.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;1-inter-or-geist&quot;&gt;1. &lt;a href=&quot;https://fonts.google.com/specimen/Inter&quot;&gt;Inter&lt;/a&gt; or &lt;a href=&quot;https://fonts.google.com/specimen/Geist&quot;&gt;Geist&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://fonts.google.com/specimen/Inter&quot;&gt;&lt;img  src=&quot;/_astro/1.CyBbvZUI_2ty35L.webp&quot; alt=&quot;Inter or Geist Font&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;3420&quot; height=&quot;1685&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I couldn’t pick just one, so here’s a tie! Inter and Geist are my ultimate workhorses. They’re versatile, clean, and just work everywhere—landing pages, apps, you name it. Inter’s been around on Google Fonts forever, and Geist just joined the party. Both are top-notch.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;So there you have it—my top 10 fonts for UI design. Each one brings something special to the table. If you’ve got favorites I didn’t mention, hit me up. I’m always looking for cool new fonts to try. Let’s keep the font love going!&lt;/p&gt;</content:encoded><author>Praveen Juge (hi@praveenjuge.com)</author></item><item><title>Why You Should Play the Tomb Raider Survivor Trilogy</title><link>https://praveenjuge.com/blog/why-you-should-play-the-tomb-raider-survivor-trilogy/</link><guid isPermaLink="true">https://praveenjuge.com/blog/why-you-should-play-the-tomb-raider-survivor-trilogy/</guid><description>I recently played all three games—2013’s Tomb Raider, Rise of the Tomb Raider (2015), and Shadow of the Tomb Raider (2018)—and I’m here to convince you why these should be on your must-play list. Each game offers something unique, and together, they tell an incredible story of survival, growth, and adventure. Let’s break it down.</description><pubDate>Tue, 17 Dec 2024 00:00:00 GMT</pubDate><content:encoded>I recently played all three games—2013’s Tomb Raider, Rise of the Tomb Raider (2015), and Shadow of the Tomb Raider (2018)—and I’m here to convince you why these should be on your must-play list. Each game offers something unique, and together, they tell an incredible story of survival, growth, and adventure. Let’s break it down.&lt;h2 id=&quot;1-tomb-raider-2013-where-it-all-begins&quot;&gt;1. Tomb Raider (2013): Where It All Begins&lt;/h2&gt;
&lt;p&gt;Picture this: Lara is young, inexperienced, and stranded on a dangerous island after a shipwreck. You’re thrown into survival mode with her, and honestly? It’s a blast.&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/1.pPb3QdQ6_2247E2.webp&quot; alt=&quot;Tomb Raider&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1920&quot; height=&quot;1080&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What Makes It Great?&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Character Development&lt;/strong&gt;: You watch Lara evolve from a scared adventurer into a confident, resourceful survivor. Her growth feels &lt;em&gt;earned&lt;/em&gt;. You’re with her through every injury, every puzzle, and every fight.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gameplay&lt;/strong&gt;: It’s smooth and addictive. You get puzzle-solving, resource gathering, and combat—all balanced perfectly.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The World&lt;/strong&gt;: The island feels alive. Exploring tombs, scavenging for supplies, and solving mysteries kept me hooked.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;One of my favorite moments? Solving my first tomb puzzle after a tough battle—it felt so satisfying.&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/2.C9InlGVR_Z30amQ.webp&quot; alt=&quot;Tomb Raider&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1920&quot; height=&quot;1080&quot;&gt;&lt;/p&gt;
&lt;p&gt;If you’re new to the series, this game is a perfect entry point. It’s easy to pick up, the story pulls you in, and you’ll finish it wanting more.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;2-rise-of-the-tomb-raider-2015-bigger-better-and-more-confident&quot;&gt;2. Rise of the Tomb Raider (2015): Bigger, Better, and More Confident&lt;/h2&gt;
&lt;p&gt;Lara’s second outing cranks everything up. The story moves to snowy Siberia, where Lara is on a quest to uncover a lost city. This time, she’s more confident, more skilled, and the stakes are higher.&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/3.Dr8iZgqA_Vuo2p.webp&quot; alt=&quot;Rise of the Tomb Raider&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1920&quot; height=&quot;1080&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What Stands Out?&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Mythology and Story&lt;/strong&gt;: The game dives into legends and myths in a way that’s both fascinating and cinematic. Lara becomes a true explorer.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stealth and Combat&lt;/strong&gt;: While the stealth could be better (some areas felt repetitive), the combat still delivers a solid mix of bow-and-arrow fun and creative takedowns.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Graphics&lt;/strong&gt;: The snowy landscapes? Breathtaking. The visuals here are a major upgrade.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The game also introduces larger, open environments to explore, which I absolutely loved. There are hidden challenges, side quests, and gorgeous tombs scattered across the world. I remember getting sidetracked for hours just exploring.&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/4.CLON_J9Y_Z25qswj.webp&quot; alt=&quot;Rise of the Tomb Raider&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1920&quot; height=&quot;1080&quot;&gt;&lt;/p&gt;
&lt;p&gt;If you enjoyed the first game, &lt;em&gt;Rise&lt;/em&gt; feels like a natural evolution. It’s bigger, more refined, and adds layers to Lara’s story.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;3-shadow-of-the-tomb-raider-2018-the-grand-finale&quot;&gt;3. Shadow of the Tomb Raider (2018): The Grand Finale&lt;/h2&gt;
&lt;p&gt;This is it—the conclusion of Lara’s Survivor arc. &lt;em&gt;Shadow&lt;/em&gt; takes you deep into the jungles of South America as Lara faces the Maya apocalypse.&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/5.D7nj7_zp_1Pna0c.webp&quot; alt=&quot;Shadow of the Tomb Raider&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;3840&quot; height=&quot;2160&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why It Works:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;The Setting&lt;/strong&gt;: The dense jungle environment is both stunning and terrifying. It’s crawling with challenges, hidden secrets, and danger at every turn.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lara’s Journey&lt;/strong&gt;: Lara is now fully aware of her responsibilities. She’s a confident leader and adventurer, and this game gives her story the closure it deserves.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The Culture&lt;/strong&gt;: Exploring Maya and Incan ruins feels authentic and immersive. The developers really went all out on the cultural elements.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That said, I did feel that some gameplay mechanics started to feel repetitive—like solving puzzles that felt &lt;em&gt;too&lt;/em&gt; familiar. But by the time I reached the finale, it didn’t matter. Seeing Lara’s transformation come full circle was worth it.&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/6.DPQFvq2v_2m0zGu.webp&quot; alt=&quot;Shadow of the Tomb Raider&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1920&quot; height=&quot;1080&quot;&gt;&lt;/p&gt;
&lt;p&gt;One of my most memorable moments? A stealth section where I had to blend into the environment and take out enemies one by one. It felt like being a &lt;em&gt;real&lt;/em&gt; predator in the jungle—so intense!&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;why-play-the-whole-trilogy&quot;&gt;Why Play the Whole Trilogy?&lt;/h2&gt;
&lt;p&gt;If you have the time, play all three. Trust me:&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/7.Dfxwrkt8_ZXqk6F.webp&quot; alt=&quot;Tomb Raider&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1920&quot; height=&quot;1080&quot;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;The Evolution of Lara&lt;/strong&gt;: You won’t just play games; you’ll experience a character’s growth from vulnerable survivor to legendary explorer.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Great Puzzles and Exploration&lt;/strong&gt;: The games balance combat, puzzles, and exploration beautifully. Each game has its own vibe, but they all deliver satisfying moments of discovery.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stunning Graphics&lt;/strong&gt;: Whether it’s the eerie island in &lt;em&gt;Tomb Raider&lt;/em&gt;, the snowy peaks of &lt;em&gt;Rise&lt;/em&gt;, or the dense jungles of &lt;em&gt;Shadow&lt;/em&gt;, these games look gorgeous.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;final-thoughts-start-your-adventure&quot;&gt;Final Thoughts: Start Your Adventure&lt;/h2&gt;
&lt;p&gt;Sure, there are moments where things feel repetitive—the trilogy doesn’t reinvent the wheel with every installment. But what it does do is offer an engaging story, fun gameplay, and a Lara Croft who feels more &lt;em&gt;human&lt;/em&gt; than ever before.&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/8.81Fk8TwI_2caXfL.webp&quot; alt=&quot;Tomb Raider&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1920&quot; height=&quot;1080&quot;&gt;&lt;/p&gt;
&lt;p&gt;If you haven’t played these games yet, start with the first one. It’s the easiest to get into, and once you’re hooked, you’ll want to see Lara’s journey through to the end. Plus, there’s nothing like the satisfaction of solving a tomb puzzle after hours of exploring—you’ll see what I mean.&lt;/p&gt;
&lt;p&gt;So, dive in, and start your own &lt;em&gt;Tomb Raider&lt;/em&gt; adventure. You won’t regret it!&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/9.B0ZLc9BM_1HAsot.webp&quot; alt=&quot;Tomb Raider&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;3840&quot; height=&quot;2160&quot;&gt;&lt;/p&gt;</content:encoded><author>Praveen Juge (hi@praveenjuge.com)</author></item><item><title>What Good Developers Ask for in a Design Handoff</title><link>https://praveenjuge.com/blog/what-good-developers-ask-for-in-design-handoff/</link><guid isPermaLink="true">https://praveenjuge.com/blog/what-good-developers-ask-for-in-design-handoff/</guid><description>Ah, the handoff phase—where my carefully crafted designs meet the developers who’ll turn them into something functional and polished. A smooth design handoff isn’t magic; it’s all about communication. Over time, I’ve noticed the best developers ask the right questions, and it makes the process much smoother.</description><pubDate>Wed, 11 Dec 2024 00:00:00 GMT</pubDate><content:encoded>Ah, the handoff phase—where my carefully crafted designs meet the developers who’ll turn them into something functional and polished. A smooth design handoff isn’t magic; it’s all about communication. Over time, I’ve noticed the best developers ask the right questions, and it makes the process much smoother.&lt;p&gt;Here’s a breakdown of what good developers usually ask for (and why):&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;1-design-specifications&quot;&gt;1. Design Specifications&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;“Can you share the pixel dimensions, spacings, and font sizes?”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Why it’s important: Developers need precision to avoid inconsistencies. They’ll ask for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Spacing between elements&lt;/li&gt;
&lt;li&gt;Font styles and sizes&lt;/li&gt;
&lt;li&gt;Button dimensions&lt;/li&gt;
&lt;li&gt;Icon sizes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For a web project, I usually go with Tailwind Design System, it’s the most popular with developers.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;2-assets&quot;&gt;2. Assets&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;“Do you have the icons, images, and logos exported and ready to go?”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Why it’s important: This ensures the assets match the design. They’ll clarify:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Export formats (SVG, PNG, etc.)&lt;/li&gt;
&lt;li&gt;File naming conventions&lt;/li&gt;
&lt;li&gt;Retina-ready versions (e.g., @2x and @3x)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Bonus: Some may ask about versions for light and dark modes.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;3-responsiveness-details&quot;&gt;3. Responsiveness Details&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;“What happens on smaller screens or larger resolutions?”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Why it’s important: A design that works perfectly on a desktop might struggle on a smartphone. They’ll ask about:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Breakpoints&lt;/li&gt;
&lt;li&gt;Element resizing behavior&lt;/li&gt;
&lt;li&gt;Hidden/show elements in specific views&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;4-interaction-guidelines&quot;&gt;4. Interaction Guidelines&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;“How should this button behave?”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Why it’s important: Developers want to know how things move and react. They’ll ask about:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Hover states&lt;/li&gt;
&lt;li&gt;Click/tap animations&lt;/li&gt;
&lt;li&gt;Transition durations (e.g., 0.3s fade-in)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;5-edge-cases&quot;&gt;5. Edge Cases&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;“What happens if a user enters an absurdly long name?”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Why it’s important: Real-life users will find ways to break things. Developers ask about:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Overflow text&lt;/li&gt;
&lt;li&gt;Missing images&lt;/li&gt;
&lt;li&gt;Error messages&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This makes the final product feel more complete.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;6-design-system-alignment&quot;&gt;6. Design System Alignment&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;“Is this following our design system?”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Why it’s important: Developers know consistency matters. They’ll check if:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Components are reusable&lt;/li&gt;
&lt;li&gt;Colors are from the existing palette&lt;/li&gt;
&lt;li&gt;Typography follows the brand’s rules&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;7-dependencies-and-constraints&quot;&gt;7. Dependencies and Constraints&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;“Are there any platform limitations I should know about?”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Why it’s important: They’re realistic about what’s possible (or not) within a timeline or tech stack. They’ll flag:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;API dependencies&lt;/li&gt;
&lt;li&gt;Performance considerations&lt;/li&gt;
&lt;li&gt;Accessibility standards&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;8-localization-needs&quot;&gt;8. Localization Needs&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;“Will this design support multiple languages?”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Why it’s important: Developers consider global audiences. They’ll ask about:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Space for longer text in languages like German or French&lt;/li&gt;
&lt;li&gt;Right-to-left (RTL) support for languages like Arabic&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;9-state-variations&quot;&gt;9. State Variations&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;“What should this look like when loading, empty, or in error?”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Why it’s important: Developers prepare for all user scenarios. They’ll ask about:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Loading spinners or placeholders&lt;/li&gt;
&lt;li&gt;Empty states with call-to-action suggestions&lt;/li&gt;
&lt;li&gt;Error state designs&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;10-testing-considerations&quot;&gt;10. Testing Considerations&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;“Are there any user flows or interactions we need to test extensively?”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Why it’s important: Developers ensure the design works in real-world scenarios. They’ll ask about:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Complex interactions like drag-and-drop&lt;/li&gt;
&lt;li&gt;Key user flows that must work flawlessly&lt;/li&gt;
&lt;li&gt;Animations that need cross-browser testing&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;why-this-matters&quot;&gt;Why This Matters&lt;/h2&gt;
&lt;p&gt;When developers ask these questions, it’s not just about making their job easier—it’s about making the &lt;em&gt;whole product better&lt;/em&gt;. For me, it’s a chance to clarify my vision while building trust with my team.&lt;/p&gt;
&lt;p&gt;So, if you’re a developer reading this, keep those questions coming. And if you’re a designer like me, let’s address these concerns upfront. It’ll save everyone a lot of time (and maybe a few late-night Slack messages).&lt;/p&gt;</content:encoded><author>Praveen Juge (hi@praveenjuge.com)</author></item><item><title>Why I Switched My Website from Next.js to Astro</title><link>https://praveenjuge.com/blog/why-i-switched-my-website-from-nextjs-to-astro/</link><guid isPermaLink="true">https://praveenjuge.com/blog/why-i-switched-my-website-from-nextjs-to-astro/</guid><description>I wanted to share my recent experience with astro.build. If you’re into static site generators—or even if you&apos;re just curious about how to build simple, fast websites—this one’s for you.</description><pubDate>Tue, 10 Dec 2024 00:00:00 GMT</pubDate><content:encoded>I wanted to share my recent experience with astro.build. If you’re into static site generators—or even if you&apos;re just curious about how to build simple, fast websites—this one’s for you.&lt;p&gt;&lt;a href=&quot;https://astro.build/&quot;&gt;Astro&lt;/a&gt; (or Astro.js) is a relatively new kid on the block in the world of static site generators. But I’ve gotta say, it’s got some neat tricks up its sleeve. I recently revamped my personal website, &lt;strong&gt;praveenjuge.com&lt;/strong&gt;, using Astro, and spoiler alert: I’m a fan.&lt;/p&gt;
&lt;h3 id=&quot;why-switch-to-astro&quot;&gt;Why Switch to Astro?&lt;/h3&gt;
&lt;p&gt;Before Astro, my site was built on &lt;a href=&quot;https://nextjs.org/&quot;&gt;Next.js&lt;/a&gt;, using its static build option. It worked fine, but honestly, for a simple blog and design showcase like mine, Next.js was overkill. I didn’t need a full ReactJS to download every time someone visited my site—just plain HTML and CSS would do.&lt;/p&gt;
&lt;p&gt;I’ve dabbled with other static site generators like &lt;a href=&quot;https://gohugo.io/&quot;&gt;Hugo&lt;/a&gt;, &lt;a href=&quot;https://jekyllrb.com/&quot;&gt;Jekyll&lt;/a&gt;, and &lt;a href=&quot;https://middlemanapp.com/&quot;&gt;Middleman&lt;/a&gt;, but Astro caught my eye. I had used it for some client projects and loved how straightforward it was. Plus, it has some standout features that made me take the plunge:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Content Collections&lt;/strong&gt;: With Astro, I didn’t have to manually parse Markdown files or handle syntax highlighting—it’s all baked in.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Zero JavaScript by Default&lt;/strong&gt;: This is a big deal. My site doesn’t need JavaScript to function, so having zero js by default is a massive win.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Built-in Integrations&lt;/strong&gt;: From prefetching links to inline stylesheets, Astro makes these tasks a breeze.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And the latest Astro v5 version has made content management even easier.&lt;/p&gt;
&lt;h3 id=&quot;the-migration-process&quot;&gt;The Migration Process&lt;/h3&gt;
&lt;p&gt;Switching from Next.js to Astro took me about 3-4 hours, thanks to Astro’s simplicity and the small size of my site. Deployment was another smooth process. While I initially used GitHub Pages, I eventually moved to Cloudflare Pages for their free tier and analytics. Highly recommend it if you’re looking for a reliable deployment option.&lt;/p&gt;
&lt;h3 id=&quot;pros-of-astro&quot;&gt;Pros of Astro&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Performance&lt;/strong&gt;: My website size shrunk by 50% just by removing all the React/Next.js-related JavaScript. Now, it’s super lightweight and fast.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Developer Experience&lt;/strong&gt;: The CLI wizard for creating a new project is fantastic. It’s easy to add integrations and feels very “web-native.”&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Type Safety&lt;/strong&gt;: If you love TypeScript, Astro has you covered with full type safety.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CMS Simplicity&lt;/strong&gt;: I’ve been using &lt;a href=&quot;https://cursor.com/&quot;&gt;Cursor&lt;/a&gt; as my CMS for Astro, and while it’s not a traditional CMS, it gets the job done with minimal hassle.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;cons-of-astro&quot;&gt;Cons of Astro&lt;/h3&gt;
&lt;p&gt;No tool is perfect, right? Here are a couple of areas where Astro could improve:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Prefetching Isn’t Perfect&lt;/strong&gt;: Compared to Next.js’s &lt;code&gt;Link&lt;/code&gt; tag, Astro’s prefetching feels a bit clunky, especially on some browsers.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;More docs on Content Collections&lt;/strong&gt;: I struggled to create web pages dynamically from images in a folder. It might be a documentation gap—or a skill issue in my side—but either way, it could be more intuitive.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;final-thoughts&quot;&gt;Final Thoughts&lt;/h3&gt;
&lt;p&gt;For static sites, Astro gets a big thumbs up from me. It’s fast, efficient, and developer-friendly. While it’s not yet ready to take on full-fledged web apps (though it’s evolving with features like actions), it’s perfect for content-focused projects.&lt;/p&gt;
&lt;p&gt;If you’re considering a switch—or starting a new project—give Astro a shot. You might just love it as much as I do!&lt;/p&gt;</content:encoded><author>Praveen Juge (hi@praveenjuge.com)</author></item><item><title>How I Use ChatGPT</title><link>https://praveenjuge.com/blog/how-i-use-chatgpt/</link><guid isPermaLink="true">https://praveenjuge.com/blog/how-i-use-chatgpt/</guid><description>Alright, let’s talk about ChatGPT. It’s basically my go-to work buddy these days. Whether I’m tackling design challenges, creating content, planning my day, or just trying to learn something new, ChatGPT’s got my back. Here’s how I use it for pretty much everything.</description><pubDate>Mon, 09 Dec 2024 00:00:00 GMT</pubDate><content:encoded>Alright, let’s talk about ChatGPT. It’s basically my go-to work buddy these days. Whether I’m tackling design challenges, creating content, planning my day, or just trying to learn something new, ChatGPT’s got my back. Here’s how I use it for pretty much everything.&lt;hr&gt;
&lt;h2 id=&quot;designing&quot;&gt;Designing&lt;/h2&gt;
&lt;p&gt;You know how designing can sometimes feel like you’re spinning your wheels? ChatGPT helps me keep things moving:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Improving UX:&lt;/strong&gt; I’ll toss my Figma designs its way and ask for tips on how to make the user experience smoother. It’s like having an extra set of eyes—and a pretty smart brain—on the team.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Clarifying Briefs:&lt;/strong&gt; Ever get one of those vague project briefs that leaves you scratching your head? I send them to ChatGPT, and it turns them into something I can actually work with.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Creative Ideas:&lt;/strong&gt; Need inspiration for website banners, branding kits, or social media posters? ChatGPT’s brainstorming skills are &lt;em&gt;chef’s kiss&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;content-creation&quot;&gt;Content Creation&lt;/h2&gt;
&lt;p&gt;ChatGPT is also my partner in crime when it comes to content:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Blog Writing:&lt;/strong&gt; Sometimes I’ll just ramble out loud, send my notes to ChatGPT, and boom—I’ve got a polished blog post (like this one!).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Presentation Prep:&lt;/strong&gt; If I’ve got a big presentation, ChatGPT helps with everything from building the deck to practicing my delivery.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Marketing Materials:&lt;/strong&gt; Stuck on a tagline or ad copy? ChatGPT’s there with fresh ideas.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;personal-development&quot;&gt;Personal Development&lt;/h2&gt;
&lt;p&gt;I’m always trying to improve myself, and ChatGPT’s like my personal coach:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Language Learning:&lt;/strong&gt; I’m working on my French, and ChatGPT helps me with grammar, vocab, and even pronunciation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Accent Practice:&lt;/strong&gt; Speaking more naturally? Yes, please. I use ChatGPT’s voice mode to practice without feeling self-conscious.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Small Talk Help:&lt;/strong&gt; Need ideas for casual client conversations? ChatGPT’s got tips to keep things chill but professional.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;strategic-work-planning&quot;&gt;Strategic Work Planning&lt;/h2&gt;
&lt;p&gt;Let’s face it—work can get overwhelming. Here’s how ChatGPT helps me stay sane:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Prioritizing Tasks:&lt;/strong&gt; From balancing self-care to figuring out what needs to get done first, it helps me sort my day.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Project Management:&lt;/strong&gt; Got multiple projects going? ChatGPT helps me integrate client feedback and keeps everything on track.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Negotiation Tips:&lt;/strong&gt; Whether I’m drafting a tricky email or prepping for a meeting, ChatGPT gives me solid advice on phrasing things.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;stress-management--communication&quot;&gt;Stress Management &amp;#x26; Communication&lt;/h2&gt;
&lt;p&gt;Sometimes, work (or life) throws curveballs. Here’s how ChatGPT helps me hit them out of the park:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Conflict Resolution:&lt;/strong&gt; If I’m dealing with a tricky situation, ChatGPT helps me figure out fair, constructive solutions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Breaking Down Complex Issues:&lt;/strong&gt; Whether it’s a technical problem or a confusing email, ChatGPT simplifies things so I can handle them.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;creative-thinking--learning&quot;&gt;Creative Thinking &amp;#x26; Learning&lt;/h2&gt;
&lt;p&gt;When I need to think outside the box, ChatGPT’s always there:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Brainstorming:&lt;/strong&gt; From blog topics to storytelling angles, it helps me see things differently.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Learning Support:&lt;/strong&gt; Got a tricky concept to grasp? ChatGPT breaks it down and makes learning feel less daunting.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;why-it-works-for-me&quot;&gt;Why It Works for Me&lt;/h2&gt;
&lt;p&gt;The best part about ChatGPT? It’s like having a whole team of experts on call—24/7. No judgment, no egos, just solutions. Whether I’m looking for a designer, writer, tutor, or coach, it’s there.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Honestly, it’s made my work ten times easier.&lt;/strong&gt;&lt;/p&gt;</content:encoded><author>Praveen Juge (hi@praveenjuge.com)</author></item><item><title>Some Good Figma Plugins — Part 1</title><link>https://praveenjuge.com/blog/some-good-figma-plugins/</link><guid isPermaLink="true">https://praveenjuge.com/blog/some-good-figma-plugins/</guid><description>A list of some good Figma plugins that I use in my workflow to make my life easier.</description><pubDate>Sun, 08 Dec 2024 18:06:29 GMT</pubDate><content:encoded>A list of some good Figma plugins that I use in my workflow to make my life easier.&lt;h2 id=&quot;batch-styler&quot;&gt;&lt;a href=&quot;https://www.figma.com/community/plugin/818203235789864127/batch-styler&quot;&gt;Batch Styler&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.figma.com/community/plugin/818203235789864127/batch-styler&quot;&gt;&lt;img  src=&quot;/_astro/1.B5jGZ_6F_uWAf2.webp&quot; alt=&quot;Batch Styler plugin interface&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1920&quot; height=&quot;960&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you work with design systems, you need this in your life! I use Batch Styler almost daily, especially for bulk updates to text or color styles. It’s perfect when you want to experiment with different typefaces - imagine switching from Inter to Roboto across your entire design system in seconds. Trust me, your future self will thank you.&lt;/p&gt;
&lt;h2 id=&quot;styles--variables-organizer&quot;&gt;&lt;a href=&quot;https://www.figma.com/community/plugin/816627069580757929/styles-variables-organizer&quot;&gt;Styles &amp;#x26; Variables Organizer&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.figma.com/community/plugin/816627069580757929/styles-variables-organizer&quot;&gt;&lt;img  src=&quot;/_astro/2.7u3frT3f_Z14Vzqg.webp&quot; alt=&quot;Styles &amp;#38;#x26; Variables Organizer plugin interface&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1920&quot; height=&quot;1080&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This one’s a game-changer for keeping your design system tidy. You know how messy things can get with styles and variables spread everywhere? This plugin helps manage everything in one place. The best part? It automatically finds and links similar values throughout your file - super handy when dealing with those legacy files we all love to hate.&lt;/p&gt;
&lt;h2 id=&quot;code-syntax-highlighter&quot;&gt;&lt;a href=&quot;https://www.figma.com/community/plugin/938793197191698232/code-syntax-highlighter&quot;&gt;Code Syntax Highlighter&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.figma.com/community/plugin/938793197191698232/code-syntax-highlighter&quot;&gt;&lt;img  src=&quot;/_astro/3.mHqc-Dtc_yyB9f.webp&quot; alt=&quot;Code Syntax Highlighter plugin interface&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1920&quot; height=&quot;960&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Need to drop some code snippets into your mockups? This plugin is your best friend. It handles pretty much any programming language you throw at it, and switches between light and dark themes like a champ. Makes our developer handoffs look way more professional!&lt;/p&gt;
&lt;h2 id=&quot;fill-rule-editor&quot;&gt;&lt;a href=&quot;https://www.figma.com/community/plugin/771155994770327940/fill-rule-editor&quot;&gt;Fill Rule Editor&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.figma.com/community/plugin/771155994770327940/fill-rule-editor&quot;&gt;&lt;img  src=&quot;/_astro/4.DVYprRtr_Zod7O8.webp&quot; alt=&quot;Fill Rule Editor plugin interface&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2048&quot; height=&quot;1024&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you’re into icon work, you’ll love this one. It’s my go-to for fixing those annoying vector fill issues - you know, when your icons look perfect in Figma but break on export? This plugin lets you switch between fill rules easily, which is a lifesaver for platform-specific exports.&lt;/p&gt;
&lt;h2 id=&quot;noise--texture&quot;&gt;&lt;a href=&quot;https://www.figma.com/community/plugin/1138854718618193875/noise-texture&quot;&gt;Noise &amp;#x26; Texture&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.figma.com/community/plugin/1138854718618193875/noise-texture&quot;&gt;&lt;img  src=&quot;/_astro/5.DiRyHMce_GqAi5.webp&quot; alt=&quot;Noise &amp;#38;#x26; Texture plugin interface&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1920&quot; height=&quot;1080&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Last but not least - this plugin is fantastic for adding some subtle texture to your designs. No more jumping between Photoshop and Figma! The real-time preview is super helpful, and it’s perfect for those times when you need to add a bit of depth to your work. I use it all the time for background textures and grain effects.&lt;/p&gt;</content:encoded><author>Praveen Juge (hi@praveenjuge.com)</author></item><item><title>Setup a RSS Feed with NextJS</title><link>https://praveenjuge.com/blog/setup-a-rss-feed-with-nextjs/</link><guid isPermaLink="true">https://praveenjuge.com/blog/setup-a-rss-feed-with-nextjs/</guid><description>I recently moved my RSS feed from using a custom package to a custom route file. Here&apos;s a simple guide to help you set up your own RSS feed.</description><pubDate>Sun, 13 Oct 2024 19:34:36 GMT</pubDate><content:encoded>I recently moved my RSS feed from using a custom package to a custom route file. Here&apos;s a simple guide to help you set up your own RSS feed.&lt;h4 id=&quot;step-1-create-a-route-file&quot;&gt;Step 1: Create a Route File&lt;/h4&gt;
&lt;p&gt;First, create a new file at &lt;code&gt;blog/rss.xml/route.js&lt;/code&gt; and add the following code:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; { load } &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;outstatic/server&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; { NextResponse } &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;next/server&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; markdownToHtml &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;../utils&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; dynamic&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;force-static&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; SITE_URL&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;https://praveenjuge.com&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; AUTHOR_NAME&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;Praveen Juge&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; AUTHOR_EMAIL&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;hi@praveenjuge.com&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; FEED_ICON&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; `${&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;SITE_URL&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;}/favicon.ico`&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; FEED_SELF_LINK&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; `${&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;SITE_URL&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;}/blog/rss.xml`&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; FEED_SUBTITLE&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  &quot;Praveen Juge is a designer and developer for everything on the web.&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; allBlogs&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; await&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;await&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; load&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;())&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  .&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;find&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;({ collection: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;blog&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; }, [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;title&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;pubDate&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;description&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;content&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;slug&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  ])&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  .&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;sort&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;({ pubDate: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; })&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  .&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;toArray&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;();&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; async&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; GET&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; feed&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; `&amp;#x3C;feed xmlns=&quot;http://www.w3.org/2005/Atom&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;		&amp;#x3C;id&gt;${&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;SITE_URL&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;}/&amp;#x3C;/id&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;		&amp;#x3C;title&gt;${&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;AUTHOR_NAME&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;}&amp;#x3C;/title&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;		&amp;#x3C;updated&gt;${&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; Date&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;toISOString&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;}&amp;#x3C;/updated&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;		&amp;#x3C;author&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;			&amp;#x3C;name&gt;${&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;AUTHOR_NAME&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;}&amp;#x3C;/name&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;			&amp;#x3C;email&gt;${&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;AUTHOR_EMAIL&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;}&amp;#x3C;/email&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;			&amp;#x3C;uri&gt;${&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;SITE_URL&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;}/&amp;#x3C;/uri&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;		&amp;#x3C;/author&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;		&amp;#x3C;link rel=&quot;alternate&quot; href=&quot;${&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;SITE_URL&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;}/&quot;/&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;		&amp;#x3C;link rel=&quot;self&quot; href=&quot;${&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;FEED_SELF_LINK&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;}&quot;/&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;		&amp;#x3C;subtitle&gt;${&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;FEED_SUBTITLE&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;}&amp;#x3C;/subtitle&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;		&amp;#x3C;icon&gt;${&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;FEED_ICON&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;}&amp;#x3C;/icon&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;		&amp;#x3C;rights&gt;${&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;AUTHOR_NAME&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;}&amp;#x3C;/rights&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;		&amp;#x3C;category term=&quot;Design&quot;/&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;		&amp;#x3C;category term=&quot;Technology&quot;/&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;		&amp;#x3C;contributor&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;			&amp;#x3C;name&gt;${&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;AUTHOR_NAME&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;}&amp;#x3C;/name&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;			&amp;#x3C;email&gt;${&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;AUTHOR_EMAIL&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;}&amp;#x3C;/email&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;			&amp;#x3C;uri&gt;${&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;SITE_URL&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;}/&amp;#x3C;/uri&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;		&amp;#x3C;/contributor&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;		${&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;allBlogs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;      .&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;        (&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;entry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; `&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;			&amp;#x3C;entry&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;				&amp;#x3C;title type=&quot;html&quot;&gt;${&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;entry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;}&amp;#x3C;/title&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;				&amp;#x3C;id&gt;${&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;SITE_URL&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;}/blog/${&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;entry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;slug&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;}&amp;#x3C;/id&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;				&amp;#x3C;link href=&quot;${&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;SITE_URL&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;}/blog/${&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;entry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;slug&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;}&quot;/&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;				&amp;#x3C;updated&gt;${&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; Date&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;entry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;pubDate&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;toISOString&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;()&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;}&amp;#x3C;/updated&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;				&amp;#x3C;summary type=&quot;html&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;					${&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;entry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;description&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;				&amp;#x3C;/summary&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;				&amp;#x3C;content type=&quot;html&quot;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;					${&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;markdownToHtml&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;entry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;content&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;				&amp;#x3C;/content&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;				&amp;#x3C;author&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;					&amp;#x3C;name&gt;${&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;AUTHOR_NAME&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;}&amp;#x3C;/name&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;					&amp;#x3C;email&gt;${&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;AUTHOR_EMAIL&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;}&amp;#x3C;/email&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;					&amp;#x3C;uri&gt;${&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;SITE_URL&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;}/&amp;#x3C;/uri&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;				&amp;#x3C;/author&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;			&amp;#x3C;/entry&gt;`&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;      )&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;      .&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;join&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;	&amp;#x3C;/feed&gt;`&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; NextResponse&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(feed, {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    headers: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;      &quot;Content-Type&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;application/xml&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;step-2-replace-variables&quot;&gt;Step 2: Replace Variables&lt;/h4&gt;
&lt;p&gt;Make sure to replace the variables like &lt;code&gt;SITE_URL&lt;/code&gt;, &lt;code&gt;AUTHOR_NAME&lt;/code&gt;, and &lt;code&gt;AUTHOR_EMAIL&lt;/code&gt; with your own information. Also, ensure the blog list is imported properly.&lt;/p&gt;
&lt;h4 id=&quot;step-3-youre-done&quot;&gt;Step 3: You’re Done!&lt;/h4&gt;
&lt;p&gt;Now, your RSS feed is set up and will be available at &lt;code&gt;/blog/rss.xml&lt;/code&gt;.&lt;/p&gt;
&lt;hr&gt;</content:encoded><author>Praveen Juge (hi@praveenjuge.com)</author></item><item><title>My 2024 Tech Stack</title><link>https://praveenjuge.com/blog/my-2024-tech-stack/</link><guid isPermaLink="true">https://praveenjuge.com/blog/my-2024-tech-stack/</guid><description>While building my SaaS app, mosaicimg.com, I had to take a moment and document the tech stack I used. Here&apos;s a quick rundown of all the tools that made it happen.</description><pubDate>Wed, 25 Sep 2024 15:58:55 GMT</pubDate><content:encoded>While building my SaaS app, mosaicimg.com, I had to take a moment and document the tech stack I used. Here&apos;s a quick rundown of all the tools that made it happen.&lt;ul&gt;
&lt;li&gt;⚙️ &lt;a href=&quot;https://nextjs.org/&quot;&gt;&lt;strong&gt;Next.JS 15&lt;/strong&gt;&lt;/a&gt; – Full Stack Framework&lt;/li&gt;
&lt;li&gt;🎨 &lt;a href=&quot;https://tailwindcss.com/&quot;&gt;&lt;strong&gt;TailwindCSS&lt;/strong&gt;&lt;/a&gt; – CSS Framework&lt;/li&gt;
&lt;li&gt;🧩 &lt;a href=&quot;https://ui.shadcn.com/&quot;&gt;&lt;strong&gt;ShadCN&lt;/strong&gt;&lt;/a&gt; – UI Components&lt;/li&gt;
&lt;li&gt;🖼️ &lt;a href=&quot;https://mynaui.com/icons&quot;&gt;&lt;strong&gt;MynaUI Icons&lt;/strong&gt;&lt;/a&gt; – Icons&lt;/li&gt;
&lt;li&gt;✍️ &lt;a href=&quot;https://vercel.com/font&quot;&gt;&lt;strong&gt;Geist Sans&lt;/strong&gt;&lt;/a&gt; – Font&lt;/li&gt;
&lt;li&gt;📄 &lt;a href=&quot;https://outstatic.com/&quot;&gt;&lt;strong&gt;Outstatic&lt;/strong&gt;&lt;/a&gt; – CMS&lt;/li&gt;
&lt;li&gt;🌐 &lt;a href=&quot;https://vercel.com/&quot;&gt;&lt;strong&gt;Vercel&lt;/strong&gt;&lt;/a&gt; – Deployment&lt;/li&gt;
&lt;li&gt;🗄️ &lt;a href=&quot;https://supabase.com/&quot;&gt;&lt;strong&gt;Supabase&lt;/strong&gt;&lt;/a&gt; – Database&lt;/li&gt;
&lt;li&gt;📊 &lt;a href=&quot;https://counterscale.dev&quot;&gt;&lt;strong&gt;Counterscale&lt;/strong&gt;&lt;/a&gt; – Web Analytics&lt;/li&gt;
&lt;li&gt;🌩️ &lt;a href=&quot;https://cloudflare.com/&quot;&gt;&lt;strong&gt;Cloudflare&lt;/strong&gt;&lt;/a&gt; – Image Processing&lt;/li&gt;
&lt;li&gt;💸 &lt;a href=&quot;https://gumroad.com/&quot;&gt;&lt;strong&gt;Gumroad&lt;/strong&gt;&lt;/a&gt; – Payment Processor&lt;/li&gt;
&lt;li&gt;🔐 &lt;a href=&quot;https://clerk.com/&quot;&gt;&lt;strong&gt;Clerk&lt;/strong&gt;&lt;/a&gt; – Auth Provider&lt;/li&gt;
&lt;li&gt;🧪 &lt;a href=&quot;https://playwright.dev/&quot;&gt;&lt;strong&gt;Playwright&lt;/strong&gt;&lt;/a&gt; – Testing&lt;/li&gt;
&lt;li&gt;🛠️ &lt;a href=&quot;https://sentry.io/&quot;&gt;&lt;strong&gt;Sentry&lt;/strong&gt;&lt;/a&gt; – Error Monitoring&lt;/li&gt;
&lt;li&gt;📧 &lt;a href=&quot;https://loops.so/&quot;&gt;&lt;strong&gt;Loops&lt;/strong&gt;&lt;/a&gt; – Marketing Emails&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This setup has been key to making &lt;a href=&quot;https://mosaicimg.com&quot;&gt;Mosaic&lt;/a&gt; smooth and scalable!&lt;/p&gt;</content:encoded><author>Praveen Juge (hi@praveenjuge.com)</author></item><item><title>My Top Raycast Extensions</title><link>https://praveenjuge.com/blog/my-top-raycast-extensions/</link><guid isPermaLink="true">https://praveenjuge.com/blog/my-top-raycast-extensions/</guid><description>If you&apos;re a Mac user like me, you probably know how valuable a good launcher can be. Enter Raycast—it&apos;s more than just a Mac launcher; it&apos;s a productivity powerhouse that makes managing your tasks and apps incredibly efficient. Today, I&apos;m sharing some of my favorite Raycast extensions that help me streamline my workflow every day. This isn’t a ranked list—just a collection of tools I find indispensable.</description><pubDate>Wed, 14 Aug 2024 13:41:51 GMT</pubDate><content:encoded>If you&apos;re a Mac user like me, you probably know how valuable a good launcher can be. Enter Raycast—it&apos;s more than just a Mac launcher; it&apos;s a productivity powerhouse that makes managing your tasks and apps incredibly efficient. Today, I&apos;m sharing some of my favorite Raycast extensions that help me streamline my workflow every day. This isn’t a ranked list—just a collection of tools I find indispensable.&lt;h3 id=&quot;1-kill-process&quot;&gt;&lt;strong&gt;1. &lt;a href=&quot;https://www.raycast.com/rolandleth/kill-process&quot;&gt;Kill Process&lt;/a&gt;&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Think of this as your go-to replacement for Activity Monitor. Kill Process displays all running processes, allowing you to terminate them with ease. It’s particularly handy if, like me, you’re still on an Intel Mac and have to deal with power-hungry apps like Chromium, Figma, or VS Code. This extension saves me a ton of time by letting me quickly close down processes that are slowing down my system.&lt;/p&gt;
&lt;h3 id=&quot;2-ulysses&quot;&gt;&lt;strong&gt;2. &lt;a href=&quot;https://www.raycast.com/praveenjuge/ulysses&quot;&gt;Ulysses&lt;/a&gt;&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;As someone who does a lot of writing, Ulysses is my writing app of choice. This Raycast extension lets me open Ulysses, create new documents, and access my notes without breaking my flow. I created this extension to fit my workflow, and I’m currently working on updates to make it even more functional.&lt;/p&gt;
&lt;h3 id=&quot;3-mynaui-icons&quot;&gt;&lt;strong&gt;3. &lt;a href=&quot;https://www.raycast.com/praveenjuge/mynaui-icons&quot;&gt;MynaUI Icons&lt;/a&gt;&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;This is another extension I created, designed to work with my MynaUI Icons pack. It’s perfect for quickly searching and copying icons that I use across various platforms like Canva, Figma, and VS Code. Whether I’m working on design projects or writing code, having these icons readily available is a lifesaver.&lt;/p&gt;
&lt;h3 id=&quot;4-coffee&quot;&gt;&lt;strong&gt;4. &lt;a href=&quot;https://www.raycast.com/mooxl/coffee&quot;&gt;Coffee&lt;/a&gt;&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Coffee is a nifty little extension that prevents your Mac from going to sleep while you’re on a call. It sits in the menu bar, and you can toggle it on whenever you need to keep your mic active. It’s a simple but effective tool, especially during those long online meetings.&lt;/p&gt;
&lt;h3 id=&quot;5-reminders-and-apple-notes&quot;&gt;&lt;strong&gt;5. &lt;a href=&quot;https://www.raycast.com/raycast/apple-reminders&quot;&gt;Reminders&lt;/a&gt; and &lt;a href=&quot;https://www.raycast.com/raycast/apple-notes&quot;&gt;Apple Notes&lt;/a&gt;&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;These two extensions are must-haves if you’re embedded in the Apple ecosystem. The Reminders extension is a powerful tool for managing tasks, and the Apple Notes extension is perfect for quickly jotting down ideas. I often start my notes in Apple Notes and later transfer them to Ulysses if they’re worth expanding on.&lt;/p&gt;
&lt;h3 id=&quot;6-color-picker&quot;&gt;&lt;strong&gt;6. &lt;a href=&quot;https://www.raycast.com/thomas/color-picker&quot;&gt;Color Picker&lt;/a&gt;&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;If you work with design tools outside of Figma, the Color Picker extension is a must. I use it frequently in Canva and DaVinci Resolve to grab and use specific colors on the fly. It’s one of those small utilities that makes a big difference in my day-to-day work.&lt;/p&gt;
&lt;h3 id=&quot;honorable-mentions&quot;&gt;Honorable Mentions&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.raycast.com/linear/linear&quot;&gt;&lt;strong&gt;Linear Extension&lt;/strong&gt;&lt;/a&gt;: Great for managing tasks in Linear.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Clipboard History&lt;/strong&gt;: An absolute must for managing copied text.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.raycast.com/erics118/change-case&quot;&gt;&lt;strong&gt;Change Case Extension&lt;/strong&gt;&lt;/a&gt;: Quickly change the case of any text—very handy for coding or writing.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;Raycast has made creating and managing extensions incredibly easy. Whether you’re looking to boost your productivity or tailor your Mac to your needs, chances are there’s already an extension for that—or you can easily create your own. That’s the magic of Raycast. Happy launching!&lt;/p&gt;</content:encoded><author>Praveen Juge (hi@praveenjuge.com)</author></item><item><title>Exploring FreshRSS and Fly.io: A Designer&apos;s Perspective</title><link>https://praveenjuge.com/blog/exploring-freshrss-and-fly-io-a-designer-s-perspective/</link><guid isPermaLink="true">https://praveenjuge.com/blog/exploring-freshrss-and-fly-io-a-designer-s-perspective/</guid><description>Today, I want to share my experience with two fantastic tools: FreshRSS and Fly.io. As a designer and not a backend nerd, these platforms have impressed me with their ease of use and outstanding UI/UX. Let&apos;s dive in!</description><pubDate>Sun, 23 Jun 2024 15:51:38 GMT</pubDate><content:encoded>Today, I want to share my experience with two fantastic tools: FreshRSS and Fly.io. As a designer and not a backend nerd, these platforms have impressed me with their ease of use and outstanding UI/UX. Let&apos;s dive in!&lt;h3 id=&quot;freshrss-the-ultimate-rss-solution&quot;&gt;FreshRSS: The Ultimate RSS Solution&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://freshrss.org&quot;&gt;FreshRSS&lt;/a&gt; is a web-based RSS reader that you can deploy anywhere using Docker. It’s free, easy to deploy, and boasts one of the best UIs for reading your favorite content. Initially, I thought the UI could use some improvement, but after using it, I realized it has the perfect balance for its purpose. The interface is dense yet scannable, making it easy to go through your RSS feeds one by one. Here are some highlights:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Keyboard Shortcuts:&lt;/strong&gt; Navigating through feeds is a breeze.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dark Mode:&lt;/strong&gt; Perfect for night-time reading.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Subscription Management:&lt;/strong&gt; Easily manage and organize your RSS feeds with labels and favorites.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Views:&lt;/strong&gt; Multiple views for reading feeds and managing subscriptions.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;FreshRSS may not have the flashiest UI, but its UX is top-notch, making it the best RSS reader I’ve used.&lt;/p&gt;
&lt;h3 id=&quot;flyio-deploy-anything-anywhere&quot;&gt;Fly.io: Deploy Anything, Anywhere&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://fly.io&quot;&gt;Fly.io&lt;/a&gt; is a deployment platform similar to Heroku and DigitalOcean, but with a unique twist. It offers a sleek, modern UI combined with a terminal-based approach for control, giving you the best of both worlds. Here’s how easy it is to deploy an app on Fly.io:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Create an Account:&lt;/strong&gt; Sign up on Fly.io.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Login:&lt;/strong&gt; Use your Mac terminal to log in.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Create a fly.toml File:&lt;/strong&gt; Specify your Docker file, RAM, storage, and more.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Here’s an example of my &lt;code&gt;fly.toml&lt;/code&gt; configuration for FreshRSS:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;toml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;app = &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;praveenjuge-freshrss&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;kill_signal = &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;SIGINT&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;kill_timeout = &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;5s&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;experimental&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  auto_rollback = &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;build&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  image = &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;freshrss/freshrss&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;env&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  CRON_MIN = &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;*/20&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;[[&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;mounts&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  source = &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;freshrss_data&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  destination = &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;/var/www/FreshRSS/data&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;[[&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;services&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  protocol = &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;tcp&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  internal_port = &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;80&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  processes = [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;app&apos;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;[[&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;services&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;ports&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    port = &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;80&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    handlers = [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;http&apos;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    force_https = &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;[[&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;services&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;ports&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    port = &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;443&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    handlers = [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;tls&apos;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;http&apos;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  [&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;services&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;concurrency&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    type = &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;connections&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    hard_limit = &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;25&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    soft_limit = &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;20&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;[[&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;services&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;tcp_checks&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    interval = &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;15s&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    timeout = &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;2s&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    grace_period = &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;1s&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;[[&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;vm&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  size = &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;shared-cpu-1x&apos;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;After creating this file, deploying your app is as simple as running a deploy command. The combination of a clean UI and powerful terminal commands makes Fly.io an excellent choice for deploying applications.&lt;/p&gt;
&lt;h3 id=&quot;final-thoughts&quot;&gt;Final Thoughts&lt;/h3&gt;
&lt;p&gt;As a designer, I prioritize good UI and UX. Fly.io has both in spades, with an intuitive interface and seamless functionality. FreshRSS, while not the flashiest, provides an excellent user experience with all the features you need in an RSS reader. Both tools have earned a place in my workflow, and I highly recommend them.&lt;/p&gt;
&lt;p&gt;Got any thoughts? Share them with me on &lt;a href=&quot;https://twitter.com/praveenjuge&quot;&gt;Twitter&lt;/a&gt;.&lt;/p&gt;</content:encoded><author>Praveen Juge (hi@praveenjuge.com)</author></item><item><title>Review of Assassin&apos;s Creed Odyssey and Valhalla</title><link>https://praveenjuge.com/blog/review-of-assassin-s-creed-odyssey-and-valhalla/</link><guid isPermaLink="true">https://praveenjuge.com/blog/review-of-assassin-s-creed-odyssey-and-valhalla/</guid><description>After spending over 100 hours on Assassin&apos;s Creed Odyssey and Assassin&apos;s Creed Valhalla, I have a lot to share. Historically, I&apos;ve enjoyed most of the Assassin&apos;s Creed games, but these two, in particular, have left a lasting impression on me.</description><pubDate>Sat, 22 Jun 2024 12:58:14 GMT</pubDate><content:encoded>After spending over 100 hours on Assassin&apos;s Creed Odyssey and Assassin&apos;s Creed Valhalla, I have a lot to share. Historically, I&apos;ve enjoyed most of the Assassin&apos;s Creed games, but these two, in particular, have left a lasting impression on me.&lt;h2 id=&quot;assassins-creed-odyssey&quot;&gt;Assassin’s Creed Odyssey&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Setting and Storyline&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Assassin’s Creed Odyssey is set in ancient Greece, a setting that is both rich and immersive. The game allows you to step into the shoes of Cassandra (or Alexios, but Cassandra is canonically correct). Cassandra’s character is compelling, with her interactions with historical figures and philosophers adding depth to the storyline. The main plot revolves around her journey through Greece, reuniting with her family, and facing numerous challenges.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;img  src=&quot;/_astro/vfxwpam-A2NT.CsDQnbb-_1ywzbu.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1920&quot; height=&quot;1080&quot;&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Despite its engaging storyline, some reviews note that the main plot can feel a bit disjointed due to the game’s massive scope. The sheer size of the world sometimes detracts from the narrative coherence, whisking players from one end of Greece to the other without much time to develop characters and relationships deeply.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Gameplay&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The gameplay in Odyssey is engaging, with a variety of activities to keep you occupied. The cultist hunting is a standout feature, providing a sense of mystery and challenge as you uncover and eliminate members of the Cult of Kosmos. The combat system is robust, with a range of abilities and a leveling system that allows for customization and growth. However, the stealth mechanics felt a bit lacking. While stealth is a core aspect of the Assassin’s Creed franchise, Odyssey leans more towards direct combat, which might disappoint purists looking for a more traditional stealth experience.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;img  src=&quot;/_astro/vg06olq-U0MD.DZILKl7e_iGglj.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2560&quot; height=&quot;1440&quot;&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Odyssey also introduces a new Mercenary system which adds an extra layer of challenge and excitement to the game. The naval combat, a beloved feature from Black Flag, allows players to engage in epic sea battles.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Graphics and Sound&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;img  src=&quot;/_astro/ipcleoj-E0Nz.AyQe_btU_Z11Xh2G.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1920&quot; height=&quot;1080&quot;&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;One of the most breathtaking aspects of Odyssey is its graphics. The depiction of ancient Greece is stunning, with beautiful landscapes, detailed architecture, and vibrant colors that make exploration a joy. The music complements the setting perfectly, enhancing the atmosphere and immersion.&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/xcjgfug-E4MD.7rhJBHxl_ZbHWh1.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2560&quot; height=&quot;1440&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Verdict&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;As a story-driven gamer, I found Odyssey to be one of the better narratives in the series. Cassandra’s arc, the family dynamics, and the rich historical context all come together to create a compelling experience. Despite some shortcomings in stealth, the overall package is impressive. I would rate Assassin’s Creed Odyssey a 8 or 9 out of 10.&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/mr2vtyq-cxNj.CugqC2YM_3WgU9.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2560&quot; height=&quot;1440&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;assassins-creed-valhalla&quot;&gt;Assassin’s Creed Valhalla&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Setting and Storyline&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Valhalla takes a different approach, setting the stage in the Viking era. You play as Eivor, a Viking warrior who travels to England to establish a new settlement. The game blends historical and mythical elements, including trips to Asgard and Jotunheim, which, while interesting, sometimes felt out of place.&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/uprryf8-g4OT.BnMsNcto_1ejTFc.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;3840&quot; height=&quot;2160&quot;&gt;&lt;/p&gt;
&lt;p&gt;The story revolves around building alliances across England, with each region offering unique narratives and challenges. However, the mission structure can feel repetitive, with many tasks boiling down to raiding and pillaging, which can get monotonous over time.&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/s6u0qkl-c5Mz.OuoAHyMM_j95W4.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;3840&quot; height=&quot;2160&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Gameplay&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The gameplay in Valhalla is a mix of traditional Viking raids and Assassin’s Creed’s stealth mechanics. This combination can feel a bit jarring as the two styles clash. The game’s structure revolves around building alliances across England, with each region offering unique stories and challenges. However, the repetition in missions and the overall pacing can be a bit of a drag.&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/lil1c7t-A0Mz.CgGEaDPU_26Ldy7.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2560&quot; height=&quot;1440&quot;&gt;&lt;/p&gt;
&lt;p&gt;Valhalla does introduce some improvements in stealth mechanics compared to Odyssey, but it still struggles to balance the Viking’s brute force with the Assassin’s finesse. The combat system is more refined, and the inclusion of settlement building adds a new strategic layer to the gameplay.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Graphics and Sound&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Valhalla shines in its environmental design. From the snowy landscapes of Norway to the lush fields of England, the game is visually stunning. The sound design is equally impressive, with a score that captures the Viking spirit and enhances the immersion.&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/lzkhfjm-IyMT.CjR5sxva_VsJAo.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2560&quot; height=&quot;1440&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Verdict&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;While Valhalla has its moments, it doesn’t quite reach the heights of Odyssey for me. The clash between Viking combat and stealth, the repetitive mission structure, and the less compelling story make it less enjoyable. I would rate Assassin’s Creed Valhalla around 6 to 7 out of 10.&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/2yiszpn-Y5Mj.Dmw2olbK_ZSn2rF.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;3840&quot; height=&quot;2160&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;final-thoughts&quot;&gt;Final Thoughts&lt;/h3&gt;
&lt;p&gt;Both games have their strengths and weaknesses. Odyssey’s strong narrative and beautiful setting make it a standout in the series, while Valhalla’s immersive Viking world and unique blend of gameplay styles offer a different experience. If you’re a fan of story-driven games, Odyssey is the clear winner. However, if you’re looking for something different and enjoy the Viking era, Valhalla is worth a try.&lt;/p&gt;
&lt;p&gt;Ultimately, both games are worth playing, and they offer hours of entertainment and exploration. Whether you’re sailing the Aegean Sea or raiding English monasteries, the worlds of Assassin’s Creed Odyssey and Valhalla are rich, immersive, and full of adventure. Highly recommend!&lt;/p&gt;</content:encoded><author>Praveen Juge (hi@praveenjuge.com)</author></item><item><title>How I Start a New Figma Project Nowadays</title><link>https://praveenjuge.com/blog/how-i-start-a-new-figma-project-nowadays/</link><guid isPermaLink="true">https://praveenjuge.com/blog/how-i-start-a-new-figma-project-nowadays/</guid><description>Today, I want to share with you how I start a new Figma project nowadays, whether it&apos;s for work or a personal endeavor. Over time, I&apos;ve honed a process that revolves around a few key tools and design systems that make my workflow efficient and enjoyable. Let’s dive in!</description><pubDate>Tue, 18 Jun 2024 19:16:52 GMT</pubDate><content:encoded>Today, I want to share with you how I start a new Figma project nowadays, whether it&apos;s for work or a personal endeavor. Over time, I&apos;ve honed a process that revolves around a few key tools and design systems that make my workflow efficient and enjoyable. Let’s dive in!&lt;h3 id=&quot;tailwindcss-design-system-my-go-to-resource&quot;&gt;TailwindCSS Design System: My Go-To Resource&lt;/h3&gt;
&lt;p&gt;Whenever I start a new project, I can’t imagine working without the TailwindCSS Design System. I’ve been a fan of Tailwind since its beta days, and it’s been a game-changer for me. Tailwind’s robust framework offers a comprehensive design system with everything you need: colors, variables, shadows, typography, grids, opacity, borders, and spacing.&lt;/p&gt;
&lt;p&gt;For those of you who haven’t tried it yet, I’ve published a &lt;a href=&quot;https://www.figma.com/community/file/1052575036916494414/tailwindcss-v3-4-4-design-system&quot;&gt;TailwindCSS v3.4.4 Design System&lt;/a&gt; on Figma Community. This resource is invaluable, and duplicating it is my first step whenever I embark on a new web project.&lt;/p&gt;
&lt;h3 id=&quot;getting-started-with-a-new-figma-project&quot;&gt;Getting Started with a New Figma Project&lt;/h3&gt;
&lt;p&gt;Here’s my typical workflow:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Duplicate the Design System:&lt;/strong&gt; I start by heading over to the Figma Community and duplicating the TailwindCSS Design System. This gives me a solid foundation with pre-set styles and components.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Set Up the Project Structure:&lt;/strong&gt; I create a new page within this file called “UI” or “Wireframes”. This page serves as my canvas for designing and iterating.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Leverage Pre-Built Design System:&lt;/strong&gt; The design system includes a variety of pre-built components like avatars, grids, blur effects, and shadows, which I use extensively. Sticking to these predefined elements not only speeds up my design process but also fosters creativity within constraints.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;shadcn-ui-the-new-kid-on-the-block&quot;&gt;ShadCN UI: The New Kid on the Block&lt;/h3&gt;
&lt;p&gt;I have also created &lt;a href=&quot;https://www.figma.com/community/file/1340017605248937608/myna-ui-tailwindcss-shadcn-ui-radix-premium-ui-kit&quot;&gt;Myna UI&lt;/a&gt;, a UI kit that combines TailwindCSS with ShadCN UI and Radix UI. ShadCN UI offers additional components such as buttons, dropdowns, and tooltips, which aren’t available in the standard TailwindCSS system.&lt;/p&gt;
&lt;p&gt;Here’s why Myna UI is fantastic:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Comprehensive Theming:&lt;/strong&gt; It includes theming options that allow for dynamic changes. For instance, modifying one primary color variable updates all associated colors, making theme adjustments seamless.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enhanced Components:&lt;/strong&gt; The combination of TailwindCSS and Radix UI provides a rich set of UI elements that enhance the design possibilities.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When I’m sure I’ll use ShadCN UI for a project, duplicating the Myna UI file from the Figma Community is my go-to move.&lt;/p&gt;
&lt;h3 id=&quot;sticking-to-the-system&quot;&gt;Sticking to the System&lt;/h3&gt;
&lt;p&gt;One of the key aspects of my design process is sticking to the design system. By working within the constraints of TailwindCSS or ShadCN UI, I find that my creativity flourishes. Knowing the limits of colors, sizes, and styles helps me push the boundaries of what’s possible within those parameters, leading to innovative and cohesive designs.&lt;/p&gt;
&lt;h3 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;Starting a new Figma project with a solid design system not only streamlines my workflow but also ensures that the end product is both beautiful and functional. Whether you’re a seasoned designer or just starting out, I highly recommend trying out these design systems. They’ve made a world of difference in my projects, and I hope they’ll do the same for you.&lt;/p&gt;
&lt;p&gt;Feel free to check out the resources I mentioned and let me know if you have any questions or need any changes in the TailwindCSS design system. Happy designing!&lt;/p&gt;</content:encoded><author>Praveen Juge (hi@praveenjuge.com)</author></item><item><title>Thoughts on WWDC24</title><link>https://praveenjuge.com/blog/thoughts-on-wwdc24/</link><guid isPermaLink="true">https://praveenjuge.com/blog/thoughts-on-wwdc24/</guid><description>I just finished watching the WWDC24 sessions and wanted to share my thoughts on the announcements. Here’s a quick rundown of what stood out to me, especially the things I might actually use in my daily routine.</description><pubDate>Mon, 17 Jun 2024 18:38:47 GMT</pubDate><content:encoded>I just finished watching the WWDC24 sessions and wanted to share my thoughts on the announcements. Here’s a quick rundown of what stood out to me, especially the things I might actually use in my daily routine.&lt;h4 id=&quot;apple-mail-inbox-categories&quot;&gt;Apple Mail Inbox Categories&lt;/h4&gt;
&lt;p&gt;First up, Apple Mail introduced inbox categories. Honestly, I’ll probably disable this feature. I don’t get enough emails in my primary inbox to need additional sorting. It seems like overkill for my needs.&lt;/p&gt;
&lt;h4 id=&quot;new-passwords-app&quot;&gt;New Passwords App&lt;/h4&gt;
&lt;p&gt;Now, the new passwords app is something I’m excited about. I’ve been using Apple’s Hide My Email for all my online accounts, so integrating this with a dedicated passwords app is a big win for me. I don’t use third-party apps like 1Password, so this will streamline my workflow.&lt;/p&gt;
&lt;h4 id=&quot;iphone-mirroring-on-macos&quot;&gt;iPhone Mirroring on macOS&lt;/h4&gt;
&lt;p&gt;A feature I’m thrilled about is iPhone mirroring on macOS. This is a game-changer for me. No more constantly checking my phone while I’m working on my Mac. It’s going to make multitasking so much easier.&lt;/p&gt;
&lt;h4 id=&quot;window-snapping-in-macos&quot;&gt;Window Snapping in macOS&lt;/h4&gt;
&lt;p&gt;Window snapping in macOS? Probably not something I’ll use. I’ve never felt the need for it, and my current setup works just fine without it.&lt;/p&gt;
&lt;h4 id=&quot;swift-and-swiftui&quot;&gt;Swift and SwiftUI&lt;/h4&gt;
&lt;p&gt;I watched all the developer sessions relevant to me, and there were some exciting updates in Swift and SwiftUI. New animations, Swift Data features, and dynamic type support are fantastic. I’m still new to Swift, so there’s a learning curve, but the new features are promising.&lt;/p&gt;
&lt;h4 id=&quot;ai-and-app-intents&quot;&gt;AI and App Intents&lt;/h4&gt;
&lt;p&gt;The AI stuff was interesting. Apple’s making it easier for developers to integrate AI without relying on third-party providers. I’m curious to see how this plays out, especially with App Intents making app functions accessible through AI. I already have a few ideas on how to use this for my projects.&lt;/p&gt;
&lt;h4 id=&quot;safari-and-other-updates&quot;&gt;Safari and Other Updates&lt;/h4&gt;
&lt;p&gt;Safari updates didn’t bring much new. It looks pretty much the same, but I appreciate the consistency. The design guide playlist is a nice touch for yearly updates, keeping everything fresh.&lt;/p&gt;
&lt;h4 id=&quot;chatgpt-integration&quot;&gt;ChatGPT Integration&lt;/h4&gt;
&lt;p&gt;ChatGPT integration seems like a transitional phase before Apple rolls out its proprietary solution. It’s a wait-and-see situation for me.&lt;/p&gt;
&lt;h4 id=&quot;vision-pro-and-swift-testing&quot;&gt;Vision Pro and Swift Testing&lt;/h4&gt;
&lt;p&gt;Vision Pro isn’t available in India yet, so I’ll pass on that for now. However, Swift Testing looks promising. As a developer platform, Swift keeps getting better, and I’m excited to dive into these new tools.&lt;/p&gt;
&lt;h4 id=&quot;final-thoughts&quot;&gt;Final Thoughts&lt;/h4&gt;
&lt;p&gt;Overall, it was a solid WWDC. The macOS updates and developer tools, especially Xcode and SwiftUI enhancements, were the highlights for me. I can’t wait to start experimenting with all these new features.&lt;/p&gt;
&lt;p&gt;Happy coding!&lt;/p&gt;</content:encoded><author>Praveen Juge (hi@praveenjuge.com)</author></item><item><title>Excited for CSS Masonry Layout</title><link>https://praveenjuge.com/blog/excited-for-css-masonry-layout/</link><guid isPermaLink="true">https://praveenjuge.com/blog/excited-for-css-masonry-layout/</guid><description>Everyone&apos;s talking about the upcoming updates in CSS Grid Layouts, thanks to some cool insights from WebKit and Chrome. </description><pubDate>Sun, 05 May 2024 12:45:36 GMT</pubDate><content:encoded>Everyone&apos;s talking about the upcoming updates in CSS Grid Layouts, thanks to some cool insights from WebKit and Chrome. &lt;p&gt;&lt;a href=&quot;https://webkit.org/blog/15269/help-us-invent-masonry-layouts-for-css-grid-level-3/&quot;&gt;WebKit&lt;/a&gt; is working on adding masonry layouts to CSS Grid. This means we might soon get to create these layouts easily without needing JavaScript or tricky CSS.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://developer.chrome.com/blog/masonry&quot;&gt;Chrome&lt;/a&gt; is showing off how &lt;code&gt;display: masonry&lt;/code&gt; works, and it’s pretty slick. It lets us manage content of different sizes in a grid without any ugly gaps. No more wrestling with the grid system to get things to line up right!&lt;/p&gt;
&lt;p&gt;I can’t wait until &lt;code&gt;display: masonry&lt;/code&gt; is something we can all use. It’s going to change how we design frontends by saving us a ton of time and letting us get more creative without fussing over layout issues.&lt;/p&gt;
&lt;p&gt;It’d be even cooler if CSS could automatically figure out the best number of columns for a masonry layout by looking at the space and content size. That would make our designs adapt smoothly to different screens, making websites look awesome everywhere without extra work.&lt;/p&gt;</content:encoded><author>Praveen Juge (hi@praveenjuge.com)</author></item><item><title>Where I look for Design Inspirations</title><link>https://praveenjuge.com/blog/where-i-look-for-design-inspirations/</link><guid isPermaLink="true">https://praveenjuge.com/blog/where-i-look-for-design-inspirations/</guid><description>A list of websites where I look when I want some design inspirations.</description><pubDate>Tue, 05 Mar 2024 05:34:15 GMT</pubDate><content:encoded>A list of websites where I look when I want some design inspirations.&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://layers.to&quot;&gt;Layers.to&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.ogimage.gallery&quot;&gt;ogimage.gallery&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.logggos.club/&quot;&gt;Logggos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://admiretheweb.com&quot;&gt;admiretheweb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://land-book.com&quot;&gt;Land-book&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Will update this list updated if there is something new.&lt;/p&gt;</content:encoded><author>Praveen Juge (hi@praveenjuge.com)</author></item><item><title>One More Next.js Starter Kit</title><link>https://praveenjuge.com/blog/one-more-next-js-starter-kit/</link><guid isPermaLink="true">https://praveenjuge.com/blog/one-more-next-js-starter-kit/</guid><description>There are, quite literally, a thousand starter kits for Next.js, with next-create-app being the top choice for many. However, when I embark on a new project, I prefer to start with as few files as possible. This approach helps me kick off new projects quickly and without any unnecessary clutter.</description><pubDate>Sat, 02 Mar 2024 04:35:22 GMT</pubDate><content:encoded>There are, quite literally, a thousand starter kits for Next.js, with next-create-app being the top choice for many. However, when I embark on a new project, I prefer to start with as few files as possible. This approach helps me kick off new projects quickly and without any unnecessary clutter.&lt;p&gt;So, I’ve created a Next.js starter kit tailored for myself, which you can check out &lt;a href=&quot;https://github.com/praveenjuge/nextjs-minimal-starter&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This kit contains just 5 files but comes packed with everything you need right out of the box:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;React&lt;/li&gt;
&lt;li&gt;Next.js&lt;/li&gt;
&lt;li&gt;TypeScript&lt;/li&gt;
&lt;li&gt;TailwindCSS&lt;/li&gt;
&lt;li&gt;Prettier&lt;/li&gt;
&lt;li&gt;ESLint&lt;/li&gt;
&lt;li&gt;Geist Font&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When starting a new project, I either duplicate this template or simply copy and paste the 5 files. This method saves me the hassle of removing unwanted code from other starter kits and ensures Prettier and ESLint are configured exactly to my liking.&lt;br&gt;
&lt;br&gt;
See it here: &lt;a href=&quot;https://github.com/praveenjuge/nextjs-minimal-starter&quot;&gt;github.com/praveenjuge/nextjs-minimal-starter&lt;/a&gt;&lt;/p&gt;</content:encoded><author>Praveen Juge (hi@praveenjuge.com)</author></item><item><title>To Use or Not to Use Auto Layout in Figma</title><link>https://praveenjuge.com/blog/to-use-or-not-to-use-auto-layout-in-figma/</link><guid isPermaLink="true">https://praveenjuge.com/blog/to-use-or-not-to-use-auto-layout-in-figma/</guid><description>The debate on whether or not to use Auto Layout in Figma is a hot topic that frequently surfaces on Twitter. Based on my experience with this feature, I&apos;ve developed some insights and guidelines on when and how to leverage Auto Layout to its full potential.</description><pubDate>Fri, 01 Mar 2024 05:16:06 GMT</pubDate><content:encoded>The debate on whether or not to use Auto Layout in Figma is a hot topic that frequently surfaces on Twitter. Based on my experience with this feature, I&apos;ve developed some insights and guidelines on when and how to leverage Auto Layout to its full potential.&lt;p&gt;Here’s a breakdown, based on personal experience, of where Auto Layout shines and where it might not be the best fit:&lt;/p&gt;
&lt;h3 id=&quot;when-to-use-auto-layout&quot;&gt;When to Use Auto Layout:&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Design Systems:&lt;/strong&gt; Auto Layout is invaluable for creating design systems. It ensures consistency across components and layouts, making it easier to maintain and update your design system over time.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Application Design:&lt;/strong&gt; For designing UI/UX for applications, Auto Layout can drastically reduce the time needed to create and adjust layouts. It helps in managing the spacing and alignment of elements, ensuring that your designs are both aesthetically pleasing and functionally effective.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Landing Page Content:&lt;/strong&gt; When it comes to the content sections of landing pages, Auto Layout can help manage the flow of text, buttons, and images seamlessly.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;when-not-to-use-auto-layout&quot;&gt;When Not to Use Auto Layout:&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Landing Page Graphics:&lt;/strong&gt; For more graphic-intensive elements of a landing page, such as hero images or complex visual compositions, Auto Layout may not offer the flexibility needed to achieve the desired outcome. In these cases, manual adjustments might provide better control over the design.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Graphic Design:&lt;/strong&gt; In the realm of graphic design, where designs often require a high level of creativity and flexibility, Auto Layout might restrict the designer’s ability to manipulate elements freely.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Icon Design:&lt;/strong&gt; Similar to graphic design, designing icons often requires precise adjustments and a level of detail that Auto Layout might not support effectively.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The decision to use Auto Layout in Figma ultimately depends on the specific needs of your project and your personal design process.&lt;/p&gt;</content:encoded><author>Praveen Juge (hi@praveenjuge.com)</author></item><item><title>All the AI Subscriptions I Have</title><link>https://praveenjuge.com/blog/all-the-ai-subscriptions-i-have/</link><guid isPermaLink="true">https://praveenjuge.com/blog/all-the-ai-subscriptions-i-have/</guid><description>I recently decided to list all the subscriptions I have in Excel to determine which category is the largest. Spoiler alert: it&apos;s AI.</description><pubDate>Thu, 15 Feb 2024 16:21:09 GMT</pubDate><content:encoded>I recently decided to list all the subscriptions I have in Excel to determine which category is the largest. Spoiler alert: it&apos;s AI.&lt;ul&gt;
&lt;li&gt;ChatGPT Plus&lt;/li&gt;
&lt;li&gt;OpenAI API&lt;/li&gt;
&lt;li&gt;Midjourney&lt;/li&gt;
&lt;li&gt;Raycast AI&lt;/li&gt;
&lt;li&gt;Magnific AI&lt;/li&gt;
&lt;li&gt;Canva AI&lt;/li&gt;
&lt;li&gt;Adobe Photoshop AI&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I wonder how all of these will integrate into a single system in the future.&lt;/p&gt;</content:encoded><author>Praveen Juge (hi@praveenjuge.com)</author></item><item><title>Why Simplicity Matters</title><link>https://praveenjuge.com/blog/why-simplicity-matters/</link><guid isPermaLink="true">https://praveenjuge.com/blog/why-simplicity-matters/</guid><description>Simplicity in design makes technology accessible and products intuitive, focusing on user needs and usability. </description><pubDate>Tue, 23 Jan 2024 18:50:14 GMT</pubDate><content:encoded>Simplicity in design makes technology accessible and products intuitive, focusing on user needs and usability. &lt;p&gt;This approach is not about stripping away features or reducing functionality, but rather about prioritizing usability and user needs.&lt;br&gt;
&lt;br&gt;
In doing so, designers can create products that are not only efficient but also resonate more deeply with their audience. This resonates particularly well in the corporate world, where the balance between innovation and usability becomes a critical factor in a product’s success.&lt;/p&gt;
&lt;p&gt;Simplicity in design is more than an aesthetic choice – it’s a fundamental principle that should guide modern design philosophy. It’s about creating products that are not only efficient and easy to use but also bring joy and ease into our increasingly complex lives.&lt;br&gt;
&lt;br&gt;
The future of design is clear – it must be simple.&lt;/p&gt;</content:encoded><author>Praveen Juge (hi@praveenjuge.com)</author></item><item><title>Pushing to the Front - Book Review</title><link>https://praveenjuge.com/blog/pushing-to-the-front-book-review/</link><guid isPermaLink="true">https://praveenjuge.com/blog/pushing-to-the-front-book-review/</guid><description>As a designer, I&apos;m always on the lookout for inspiration, not just in visuals but in words too. That&apos;s how I stumbled upon &quot;Pushing to the Front&quot; by Orison Swett Marden. This book, although over a century old, surprisingly resonates with the creative struggles and triumphs we face today.</description><pubDate>Sun, 21 Jan 2024 18:23:51 GMT</pubDate><content:encoded>As a designer, I&apos;m always on the lookout for inspiration, not just in visuals but in words too. That&apos;s how I stumbled upon &quot;Pushing to the Front&quot; by Orison Swett Marden. This book, although over a century old, surprisingly resonates with the creative struggles and triumphs we face today.&lt;p&gt;Marden, who later founded Success Magazine, wrote this during the 1890s depression, aiming to inspire success in challenging times. As designers, we often face our own kind of recession - creative blocks, challenging clients, and the ever-evolving nature of design trends. Marden’s book, filled with stories of people achieving great things against the odds, is a reminder that success is possible despite these hurdles.&lt;/p&gt;
&lt;p&gt;The book is a goldmine of wisdom, offering advice on progressing through small, consistent steps - a principle very much applicable to design projects. I found it beneficial to read it like a daily design brief: one chapter a day, with time afterwards to reflect on how its lessons apply to my work.&lt;/p&gt;
&lt;p&gt;But what’s truly inspiring for any creative professional is the story behind the book. After losing his original manuscript in a hotel fire, Marden, with incredible resilience, began rewriting it from scratch. This act of starting over, with nothing but a nightshirt and a 25-cent notebook, is a powerful metaphor for the design process. We often have to scrap our concepts and begin anew, finding strength in our vision and determination.&lt;/p&gt;
&lt;p&gt;Marden’s perseverance is a lesson in not giving up on our creative dreams. He rewrote not just “Pushing to the Front” but also penned “Architects of Fate” in a modest Boston room. His dedication resulted in a manuscript that caught the attention of multiple publishers, finally getting published in 1894.&lt;/p&gt;
&lt;p&gt;For designers, “Pushing to the Front” is more than a book. It’s a source of daily inspiration, a reminder of the timeless nature of creativity, hard work, and resilience. As we navigate the world of design, where trends come and go, and projects can be as fleeting as they are fulfilling, Marden’s journey and his words stand as a testament to the enduring power of perseverance. This book isn’t just a read; it’s a daily dose of motivation, reminding us that our creative journey, much like Marden’s, is filled with limitless possibilities.&lt;/p&gt;</content:encoded><author>Praveen Juge (hi@praveenjuge.com)</author></item><item><title>Open Source Tips</title><link>https://praveenjuge.com/blog/open-source-tips/</link><guid isPermaLink="true">https://praveenjuge.com/blog/open-source-tips/</guid><description>Imagine the open source community as a bustling city, alive with people sharing, learning, and creating together. It&apos;s an exciting place for both experienced developers and newcomers. Like any new adventure, knowing a few essential tips can make your journey smoother and more rewarding.</description><pubDate>Sat, 20 Jan 2024 18:06:29 GMT</pubDate><content:encoded>Imagine the open source community as a bustling city, alive with people sharing, learning, and creating together. It&apos;s an exciting place for both experienced developers and newcomers. Like any new adventure, knowing a few essential tips can make your journey smoother and more rewarding.&lt;p&gt;Think of a README file as your project’s welcoming brochure. It’s essential. This file should give a clear tour of your project, highlighting its goals and what it’s not about. Setting up a CONTRIBUTING file is like a guidebook for travelers wanting to join your journey. It ensures everyone knows the path and makes their contributions count, making the whole trip more organized and inclusive.&lt;/p&gt;
&lt;p&gt;When coding, remember the saying, “Slow and steady wins the race.” Regular, small updates are better than rare, big changes. This keeps the project easy to handle and invites constant input from your fellow travelers. Use tools like automated testing and continuous updates – they’re like reliable travel gadgets that keep your project on track and improving.&lt;/p&gt;
&lt;p&gt;Open source isn’t just about the code – it’s about building a friendly neighborhood. A Code of Conduct is like the rules of a clubhouse, making sure everyone feels safe and welcome. Licenses are the signs that tell others how they can use and share your project, so pick them thoughtfully.&lt;/p&gt;
&lt;p&gt;To sum up, succeeding in the open source world is about being organized, communicating clearly, and always being ready to learn and grow.&lt;/p&gt;</content:encoded><author>Praveen Juge (hi@praveenjuge.com)</author></item><item><title>Designing for Everyone</title><link>https://praveenjuge.com/blog/designing-for-everyone/</link><guid isPermaLink="true">https://praveenjuge.com/blog/designing-for-everyone/</guid><description>In today&apos;s digital age, it&apos;s important to design websites and apps that everyone can use. Inclusive design is about making sure that all sorts of people, including those with different abilities, can have a good experience when they use these digital platforms.</description><pubDate>Fri, 19 Jan 2024 08:08:00 GMT</pubDate><content:encoded>In today&apos;s digital age, it&apos;s important to design websites and apps that everyone can use. Inclusive design is about making sure that all sorts of people, including those with different abilities, can have a good experience when they use these digital platforms.&lt;p&gt;Here’s what inclusive design is all about:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Equal Experience for All:&lt;/strong&gt; Whether someone is using a smartphone, a computer, or special technology to help them, the website or app should work well for them. For instance, if there’s a picture, there should also be a text description for people who can’t see it. Or, if there’s a video, there should be captions for those who can’t hear it.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Giving Users Control:&lt;/strong&gt; It’s important to respect how people have set up their browsers. For example, if someone likes to view things in a certain way, like with bigger text, the website shouldn’t change that. Also, it’s good to offer different ways to do things on the site. This way, people can choose the way that works best for them.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;In short, inclusive design is about knowing that people use websites and apps in many different ways. By thinking about these different needs, we can make the digital world a welcoming place for everyone.&lt;/p&gt;</content:encoded><author>Praveen Juge (hi@praveenjuge.com)</author></item><item><title>50 Days of Daily Design</title><link>https://praveenjuge.com/blog/50-days-of-daily-design/</link><guid isPermaLink="true">https://praveenjuge.com/blog/50-days-of-daily-design/</guid><description>I embarked on an exciting challenge: to post a new design every day. Now, 50 days in, I&apos;ve not only sharpened my skills but also doubled my Twitter following. This daily commitment, initially just an experiment, has turned into a goal to continue for at least a year.</description><pubDate>Thu, 18 Jan 2024 11:28:41 GMT</pubDate><content:encoded>I embarked on an exciting challenge: to post a new design every day. Now, 50 days in, I&apos;ve not only sharpened my skills but also doubled my Twitter following. This daily commitment, initially just an experiment, has turned into a goal to continue for at least a year.&lt;p&gt;My routine involves crafting several designs at the start of each week and then sharing them daily. These designs are a mix of work from client projects and my own ventures, like the mynaui icons and Teak. You can check these out at &lt;a href=&quot;https://icons.mynaui.com&quot;&gt;icons.mynaui.com&lt;/a&gt; and &lt;a href=&quot;https://teakvault.com&quot;&gt;teakvault.com&lt;/a&gt;, respectively.&lt;/p&gt;
&lt;p&gt;This journey has been more than just about improving my design skills; it’s been a crucial step in overcoming imposter syndrome. The rule I set for myself is simple yet transformative: regardless of how I feel about a design, it gets posted. This process of creating, sharing, and receiving feedback is a continuous learning curve.&lt;/p&gt;
&lt;p&gt;Now, I’m venturing into daily blogging to keep my thoughts organized. I must admit, writing daily poses a different set of challenges compared to designing. But, as with design, I believe it’s a path filled with growth and learning. So here’s to more days of creating, sharing, and evolving!&lt;/p&gt;</content:encoded><author>Praveen Juge (hi@praveenjuge.com)</author></item><item><title>Is Training Necessary for UI Design?</title><link>https://praveenjuge.com/blog/is-training-necessary-for-ui-design/</link><guid isPermaLink="true">https://praveenjuge.com/blog/is-training-necessary-for-ui-design/</guid><description>I recently saw an ad for college students. It was about an expensive web design course that teaches UI design using Photoshop. This made me think: do you really need formal classes to be a designer?</description><pubDate>Wed, 17 Jan 2024 10:55:47 GMT</pubDate><content:encoded>I recently saw an ad for college students. It was about an expensive web design course that teaches UI design using Photoshop. This made me think: do you really need formal classes to be a designer?&lt;p&gt;People often argue about whether designers need formal training. But really, design is more about solving problems than just working with visual stuff like colors and fonts. Think about how you set up your phone screen or arrange your living room – that’s design thinking too! And many people do this kind of design in their everyday life without any formal training.&lt;/p&gt;
&lt;p&gt;What makes you a good designer isn’t just having a degree or knowing certain tools. It’s really about being good at figuring out and creatively solving problems. Good designers turn challenges into great solutions. It’s kind of like how an architect turns a simple idea for a space into something that looks good and works well. This means anyone who’s good at solving problems can be a designer, even if they haven’t studied it in school.&lt;/p&gt;</content:encoded><author>Praveen Juge (hi@praveenjuge.com)</author></item><item><title>Fewer, Better Features</title><link>https://praveenjuge.com/blog/fewer-better-features/</link><guid isPermaLink="true">https://praveenjuge.com/blog/fewer-better-features/</guid><description>People gravitate towards simplicity. </description><pubDate>Tue, 16 Jan 2024 05:07:15 GMT</pubDate><content:encoded>People gravitate towards simplicity. &lt;p&gt;Initially, a product’s simple and intuitive nature draws people in. However, as features are added, complexity creeps in, and the essence of simplicity can be lost.&lt;/p&gt;
&lt;p&gt;This complexity often leads people back to seek simpler alternatives.&lt;/p&gt;
&lt;p&gt;The lesson for designers is clear: maintain simplicity at the core of design.&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/cleanshot-2024-01-16-at-10.41.43-2x-kyMD.IoocVfST_QhON1.webp&quot; alt=&quot;Graph depicting a bell curve labeled &apos;Happiness&apos; on the vertical axis and &apos;Features&apos; on the horizontal axis, illustrating that happiness peaks at a certain point with the addition of features before declining as more features are added.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1966&quot; height=&quot;1496&quot;&gt;&lt;/p&gt;
&lt;p&gt;But people want more features all the time. It’s crucial to regularly step back and view the product, asking if the added features enhance or hinder the experience.&lt;/p&gt;
&lt;p&gt;How would you decide what feature to add next?&lt;/p&gt;</content:encoded><author>Praveen Juge (hi@praveenjuge.com)</author></item><item><title>Far Cry 6 Review</title><link>https://praveenjuge.com/blog/far-cry-6-review/</link><guid isPermaLink="true">https://praveenjuge.com/blog/far-cry-6-review/</guid><description>As a longtime fan of the series, particularly for its storytelling, I approached this game with high expectations. While it may not surpass the legendary status of Far Cry 3 in terms of its story, it certainly carves its own niche with compelling characters and a vivid, expansive world.</description><pubDate>Fri, 12 Jan 2024 05:32:40 GMT</pubDate><content:encoded>As a longtime fan of the series, particularly for its storytelling, I approached this game with high expectations. While it may not surpass the legendary status of Far Cry 3 in terms of its story, it certainly carves its own niche with compelling characters and a vivid, expansive world.&lt;p&gt;&lt;img  src=&quot;/_astro/tnmdga9-I5NT.DHABVhEl_Z1xwSBn.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;3840&quot; height=&quot;2160&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;story-and-characters&quot;&gt;Story and Characters&lt;/h2&gt;
&lt;p&gt;Far Cry 6 takes us to Yara, a fictional Caribbean island under the dictatorship of Anton Castillo, played with scene-chewing brilliance by Giancarlo Esposito. The story, though not as groundbreaking as Far Cry 3, is engaging enough to keep players hooked. The real standout is Dani Rojas, the protagonist, whose journey from a disillusioned citizen to a fervent revolutionary is both relatable and inspiring. Esposito’s portrayal of Castillo, a tyrant with a vision for his country, adds depth to the narrative, making him more than just a one-dimensional villain.&lt;/p&gt;
&lt;h2 id=&quot;world-design&quot;&gt;World Design&lt;/h2&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/gcvvzp8-MxNj.Bw7rQ0iY_Z2fLoei.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1920&quot; height=&quot;1080&quot;&gt;&lt;/p&gt;
&lt;p&gt;The world of Yara is a breathtaking spectacle. Its massive and varied landscapes range from lush jungles to urban streets, each painted with meticulous detail. However, the game does not shy away from the repetitive elements typical of Ubisoft’s open-world games, which can be a double-edged sword for players seeking variety. The graphical beauty of Yara is undeniable, showcasing some of the best visuals in modern gaming.&lt;/p&gt;
&lt;h2 id=&quot;writing-and-character-interactions&quot;&gt;Writing and Character Interactions&lt;/h2&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/xsdkjnn-U3OT.DmtHtLHs_1d5mEm.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;4096&quot; height=&quot;2304&quot;&gt;&lt;/p&gt;
&lt;p&gt;Where Far Cry 6 truly shines is in its writing and character interactions. The dialogues are slick, peppered with humor and emotional depth. Castillo’s character, despite his tyranny, is constantly humanized through his speeches and justifications, showcasing excellent writing. The interactions between Dani and other characters are filled with witty banter and heartfelt moments, creating a narrative that’s both entertaining and thought-provoking.&lt;/p&gt;
&lt;h2 id=&quot;far-cry-3&quot;&gt;Far Cry 3&lt;/h2&gt;
&lt;p&gt;Comparing Dani Rojas to Vaas from Far Cry 3, it’s clear that while Vaas remains the series’ most iconic villain, Dani represents one of its best heroes. Their journeys and impacts on the player are different but equally memorable.&lt;/p&gt;
&lt;h2 id=&quot;music&quot;&gt;Music&lt;/h2&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/fck6494-QxOD.Dgv9Cjuz_QfYWa.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;3840&quot; height=&quot;2160&quot;&gt;&lt;/p&gt;
&lt;p&gt;The auditory experience in Far Cry 6 is another high point. The music, ranging from local tunes to action-packed scores, enhances the gameplay experience. I often found myself lingering in cars just to listen to the songs, a testament to the game’s sound design.&lt;/p&gt;
&lt;h2 id=&quot;810&quot;&gt;8/10&lt;/h2&gt;
&lt;p&gt;Far Cry 6 is a game that thrives on its character development, stunning visuals, and a world brimming with stories. While it may not have the most groundbreaking story in the franchise, it makes up for it with its detailed world and compelling characters. For those who play games for their stories, Far Cry 6 is a journey worth embarking on, a tale of tyranny, rebellion, and the spirit of revolution.&lt;/p&gt;</content:encoded><author>Praveen Juge (hi@praveenjuge.com)</author></item><item><title>A Late Review of Folklore</title><link>https://praveenjuge.com/blog/a-late-review-of-folklore/</link><guid isPermaLink="true">https://praveenjuge.com/blog/a-late-review-of-folklore/</guid><description>Yesterday, I watched Taylor Swift&apos;s Eras Tour Movie (for the third time), reaffirming that &apos;Folklore&apos; is my favorite album. Here, I share why this album resonates so deeply with me.</description><pubDate>Sun, 03 Dec 2023 16:58:50 GMT</pubDate><content:encoded>Yesterday, I watched Taylor Swift&apos;s Eras Tour Movie (for the third time), reaffirming that &apos;Folklore&apos; is my favorite album. Here, I share why this album resonates so deeply with me.&lt;p&gt;&lt;img  src=&quot;/_astro/taylor-evermore-resized.jpg-UxOT.DFbtwVJh_ZESQQ0.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2240&quot; height=&quot;1260&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;the-unique-charm-of-folklore&quot;&gt;The Unique Charm of Folklore&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;A Shift from the Norm&lt;/strong&gt;: Taylor Swift, who we all know for her catchy pop tunes and personal stories, took a different route with “Folklore.” This album isn’t just about her life; it’s a mix of made-up stories and a few personal touches. It’s like she’s telling us tales from a magical forest in her mind.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Lyrical Genius&lt;/strong&gt;: Taylor’s always been great with words, but “Folklore” takes it to another level. The lyrics are like vivid stories - from tales of wild adventures to the raw emotions of doctors during the pandemic. It’s storytelling at its best.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Cottagecore Vibes&lt;/strong&gt;: The album gives off this ‘cottage in the woods’ feel. It’s all about finding peace in nature, something we all longed for when stuck indoors during the lockdowns. Taylor uses this to express her need for escape - from the pandemic chaos and the pressures of fame.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;narrative-craftsmanship&quot;&gt;Narrative Craftsmanship&lt;/h2&gt;
&lt;p&gt;Swift’s decision to craft stories beyond her personal experiences adds depth and diversity to the album. This approach highlights her skill as a storyteller, weaving narratives that, while not autobiographical, are deeply influenced by her perspectives and experiences​​.&lt;/p&gt;
&lt;h2 id=&quot;the-atmosphere-of-folklore&quot;&gt;The Atmosphere of “Folklore”&lt;/h2&gt;
&lt;p&gt;From the very first listen, “Folklore” felt like stepping into a misty, otherworldly forest. The album’s overall tone was melancholic yet soothing, interspersed with moments of profound introspection and emotional rawness. Each track contributed to a cohesive narrative, creating an experience that was both deeply personal and universally relatable.&lt;/p&gt;
&lt;h2 id=&quot;lets-dive-into-each-song-and-the-emotions-they-evoke-in-me&quot;&gt;Let’s dive into each song and the emotions they evoke in me.&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;The Curtain Rises: “the 1”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;As the opening chords of “the 1” played, I was immediately transported to a world tinged with the soft light of nostalgia. The song’s reflective lyrics about lost love and what-ifs, combined with its mellow melody, set the tone for the album. It’s like sitting by a window on a rainy day, lost in thoughts of what could have been.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Echoes of the Past: “cardigan” and “the last great american dynasty”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;“cardigan” took me on a journey through the complexities of a mature love. Its haunting melody, layered with rich, poetic lyrics, felt like a warm, familiar embrace. Then, “the last great american dynasty” unfolded a story that was not mine but felt strangely personal. Swift’s storytelling prowess shone through, painting vivid pictures with her words.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Heart of the Album: “exile” and “my tears ricochet”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;“exile,” a duet with Bon Iver, struck a chord with its portrayal of a failed relationship. The contrast between Swift’s and Bon Iver’s voices added depth to the narrative of miscommunication and regret. Following this, “my tears ricochet” was a raw, emotional experience. Its haunting melody and lyrics about betrayal and loss resonated deeply, as if echoing the pain of every broken heart.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A Soothing Balm: “mirrorball” and “seven”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;“mirrorball” shimmered with a vulnerability, a soft confession of one’s desire to be loved and seen. It was like watching light dance off a disco ball in a dimly lit room – mesmerizing and a little melancholic. In “seven,” there was a return to innocence, a reminiscence of childhood friendships and simplicity, offering a soothing balm to the album’s earlier intensity.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Reflective Moments: “august” and “this is me trying”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;“august” felt like a fleeting summer romance, full of longing and wistfulness. Its airy melody carried the bittersweet tang of memories best left untouched. “this is me trying” was a raw acknowledgment of effort and struggle, a poignant reminder of the strength it takes to keep going.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Twilight of the Album: “illicit affairs” and “invisible string”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;“illicit affairs” was a journey into the complexities of forbidden love, its hushed tones and vivid imagery creating an intimate atmosphere. “invisible string,” on the other hand, offered a sense of serendipity and connection, a reminder that life’s tapestry is intricately woven with threads of fate.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Final Act: “mad woman,” “epiphany,” and “betty”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;“mad woman” was a fiery expression of anger and defiance, a striking contrast to the album’s earlier tranquility. In “epiphany,” there was a shift to a more somber tone, a reflection on the fragility of life. Finally, “betty” brought a sense of closure, a return to the roots with its more traditional narrative structure and harmonica-infused melody.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Encore: “peace” and “hoax”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;As the album neared its end, “peace” offered a raw, honest confession of one’s imperfections in love. And finally, “hoax” was like the last brushstroke on a canvas, a melancholic yet beautiful end to a masterful album.&lt;/p&gt;
&lt;h2 id=&quot;final-thoughts&quot;&gt;Final Thoughts&lt;/h2&gt;
&lt;p&gt;“Folklore” by Taylor Swift is more than just an album; it’s a journey through the human experience. Each track is a chapter in a larger story, one of love, loss, and the bittersweet taste of life. Swift has crafted an album that resonates on a deeply personal level, inviting listeners to find pieces of their own stories within her songs. As the final notes faded, I was left with a sense of having been part of something truly magical.&lt;/p&gt;</content:encoded><author>Praveen Juge (hi@praveenjuge.com)</author></item><item><title>Default Apps 2023 </title><link>https://praveenjuge.com/blog/default-apps-2023/</link><guid isPermaLink="true">https://praveenjuge.com/blog/default-apps-2023/</guid><description>Some of the default apps I use based on the list by this podcast https://defaults.rknight.me</description><pubDate>Mon, 27 Nov 2023 08:05:42 GMT</pubDate><content:encoded>Some of the default apps I use based on the list by this podcast https://defaults.rknight.me&lt;p&gt;📨 Mail Client: Apple Mail&lt;/p&gt;
&lt;p&gt;📮 Mail Server: iCloud Custom Email Domain&lt;/p&gt;
&lt;p&gt;📝 Notes: Apple Notes&lt;/p&gt;
&lt;p&gt;✅ To-Do: &lt;a href=&quot;https://todoist.com/&quot;&gt;Todoist&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;📷 Photo Shooting: iOS Camera&lt;/p&gt;
&lt;p&gt;🎨 Photo Editing: &lt;a href=&quot;https://lightroom.adobe.com&quot;&gt;Adobe Lightroom&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;📆 Calendar: &lt;a href=&quot;https://cron.com&quot;&gt;Cron&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;📁 Cloud File Storage: iCloud&lt;/p&gt;
&lt;p&gt;📖 RSS: &lt;a href=&quot;https://netnewswire.com&quot;&gt;NetNewsWire&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;🙍🏻‍♂️ Contacts: iOS Contacts&lt;/p&gt;
&lt;p&gt;🌐 Browser: Safari&lt;/p&gt;
&lt;p&gt;💬 Chat: WhatsApp, iMessages&lt;/p&gt;
&lt;p&gt;🔖 Bookmarks: &lt;a href=&quot;https://raindrop.io&quot;&gt;Raindrop.io&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;📑 Read It Later: &lt;a href=&quot;https://raindrop.io&quot;&gt;Raindrop.io&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;📜 Word Processing: &lt;a href=&quot;https://ia.net/writer&quot;&gt;iA Writer&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;📈 Spreadsheets: Google Spreadsheets&lt;/p&gt;
&lt;p&gt;📊 Presentations: Slides&lt;/p&gt;
&lt;p&gt;🛒 Shopping Lists: &lt;a href=&quot;https://todoist.com/&quot;&gt;Todoist&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;🍴 Meal Planning: N/A&lt;/p&gt;
&lt;p&gt;💰 Budgeting and Personal Finance: N/A&lt;/p&gt;
&lt;p&gt;📰 News: N/A&lt;/p&gt;
&lt;p&gt;🎵 Music: Apple Music&lt;/p&gt;
&lt;p&gt;🎤 Podcasts: &lt;a href=&quot;https://pocketcasts.com&quot;&gt;Pocket Casts&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;🔐 Password Management: iCloud Keychain&lt;/p&gt;
&lt;p&gt;🧑‍💻 Code Editor: &lt;a href=&quot;https://code.visualstudio.com&quot;&gt;VSCode&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;✈️ VPN: N/A&lt;/p&gt;
&lt;p&gt;🎮 Gaming: &lt;a href=&quot;https://www.xbox.com/en-IN/xbox-game-pass&quot;&gt;Xbox One with Game Pass&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;🔎 Search: &lt;a href=&quot;https://chat.openai.com&quot;&gt;ChatGPT&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;🖼️ Screenshots: &lt;a href=&quot;https://cleanshot.com/&quot;&gt;CleanShot X&lt;/a&gt;&lt;/p&gt;</content:encoded><author>Praveen Juge (hi@praveenjuge.com)</author></item><item><title>Figma Speedruns: Watch Me Design at Lightning Speed!</title><link>https://praveenjuge.com/blog/figma-speedruns-watch-me-design-at-lightning-speed/</link><guid isPermaLink="true">https://praveenjuge.com/blog/figma-speedruns-watch-me-design-at-lightning-speed/</guid><description>Dive into Figma speedrun videos and see awesome designs pop up super fast! Come along as I show off my love for design and Figma, and hit me up with what you wanna see on the channel.</description><pubDate>Fri, 31 Mar 2023 19:26:29 GMT</pubDate><content:encoded>Dive into Figma speedrun videos and see awesome designs pop up super fast! Come along as I show off my love for design and Figma, and hit me up with what you wanna see on the channel.&lt;p&gt;You know how we all enjoy watching those mesmerizing speed drawing and speed art videos on YouTube, right? I mean, who doesn’t love seeing a blank canvas transform into a stunning piece of art in just a matter of minutes?&lt;/p&gt;
&lt;p&gt;Well, I noticed that there wasn’t much content like that for Figma designs, and being a designer myself, I decided to do something about it. So, guess what? I’ve started uploading my very own Figma speedrun videos!&lt;/p&gt;
&lt;p&gt;I’ve already added 4 videos to my channel, and I promise there are more to come! I’d really appreciate it if you could check them out and let me know what you think. Are they good? Do they inspire you to create your own designs? And most importantly, is there anything else design-related you’d like to see on the channel? I’m open to all your suggestions and ideas!&lt;/p&gt;
&lt;p&gt;Here’s the link to my YouTube channel: &lt;a href=&quot;https://www.youtube.com/@praveenjuge&quot;&gt;https://www.youtube.com/@praveenjuge&lt;/a&gt;&lt;/p&gt;
&lt;div style=&quot;position:relative;padding-bottom:56.25%;height:0;overflow:hidden;&quot;&gt;
  &lt;iframe src=&quot;https://www.youtube.com/embed/wVrV4m7ofRA&quot; title=&quot;Figma Speedrun by Praveen Juge&quot; style=&quot;position:absolute;top:0;left:0;width:100%;height:100%;border:0;&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;p&gt;LIKE AND SUBSCRIBE, or I will be slightly disappointed.&lt;/p&gt;
&lt;p&gt;P.S: I don’t design that fast; all videos are 2x sped up.&lt;/p&gt;</content:encoded><author>Praveen Juge (hi@praveenjuge.com)</author></item><item><title>If I had known AI would write commit messages, I would have stayed as a developer.</title><link>https://praveenjuge.com/blog/if-i-had-known-ai-would-write-commit-messages-i-would-have-stayed-as-a-developer/</link><guid isPermaLink="true">https://praveenjuge.com/blog/if-i-had-known-ai-would-write-commit-messages-i-would-have-stayed-as-a-developer/</guid><description>Recently, I stumbled upon OpenCommit, a package that generates commit messages based on the files changed with GPT. Now, my skin is clearer, I walk with a brisk step, and I appreciate nature more. If this is what AI does for us, I&apos;ll welcome it with open hands.</description><pubDate>Wed, 22 Mar 2023 19:04:12 GMT</pubDate><content:encoded>Recently, I stumbled upon OpenCommit, a package that generates commit messages based on the files changed with GPT. Now, my skin is clearer, I walk with a brisk step, and I appreciate nature more. If this is what AI does for us, I&apos;ll welcome it with open hands.&lt;p&gt;My commit messages last week:&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/cleanshot-2023-03-23-at-00.33.32-2x.VpayTXZh_zPR6k.webp&quot; alt=&quot;Bunch of commits with the same title: Fixes&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;866&quot; height=&quot;1260&quot;&gt;&lt;/p&gt;
&lt;p&gt;My commit messages now:&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/cleanshot-2023-03-23-at-00.22.48-2x.CY0YxDgG_Z1jN38t.webp&quot; alt=&quot;Well detailed commit messages&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1194&quot; height=&quot;488&quot;&gt;&lt;/p&gt;
&lt;p&gt;I’ve always admired how other people in popular open source projects and some of my peers take the time to write detailed commit messages and PR requests. In the past, I would often be impatient and write something quickly just to get it out of the way.&lt;/p&gt;
&lt;p&gt;After transitioning to design full-time from development, the rare commits I make to my websites still don’t have any meaningful commit messages, which I didn’t mind until I had to go back to find something in the wall of commits.&lt;/p&gt;
&lt;p&gt;But &lt;a href=&quot;https://github.com/di-sukharev/opencommit&quot;&gt;opencommit&lt;/a&gt; changed all that. As soon as I saw it, I went to OpenAI, got an API key, and tried it out. I have to say, I love the result! As you can see in the image above, it generates perfect commit messages, and I love it.&lt;/p&gt;
&lt;p&gt;That’s enough of me raving about it - try it out for yourself -&gt; &lt;a href=&quot;https://github.com/di-sukharev/opencommit&quot;&gt;github.com/di-sukharev/opencommit&lt;/a&gt;.&lt;/p&gt;</content:encoded><author>Praveen Juge (hi@praveenjuge.com)</author></item><item><title>Creating a Number Badge UI Component</title><link>https://praveenjuge.com/blog/creating-a-number-badge-ui-component/</link><guid isPermaLink="true">https://praveenjuge.com/blog/creating-a-number-badge-ui-component/</guid><description>We recently shipped a feature that shows the count of all the lists in Hellonext. While it seems like a simple feature it had a lot of challenges to figure out. Here is how we solved some of the frontend problems.</description><pubDate>Sat, 18 Dec 2021 12:37:47 GMT</pubDate><content:encoded>We recently shipped a feature that shows the count of all the lists in Hellonext. While it seems like a simple feature it had a lot of challenges to figure out. Here is how we solved some of the frontend problems.&lt;p&gt;A number badge is just as it sounds, a number shown in a badge like UI. In our case, we are showing a badge next to the tab names that shows the number of posts in a particular view. Let’s go through the process of developing a UI for it.&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/1.D0UQuvBx_Z1ipKob.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1245&quot; height=&quot;364&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;design&quot;&gt;Design&lt;/h2&gt;
&lt;p&gt;There are lot of ways to denote this type of UI to the user, here are some of the early ideas I had.&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/2.DgmauEkZ_Z1m7jQA.webp&quot; alt=&quot;&amp;#34;Idea 1&amp;#34;&quot; title=&quot;Idea 1&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1263&quot; height=&quot;114&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/3.u9AVCWFX_Z1YiSam.webp&quot; alt=&quot;&amp;#34;Idea 2&amp;#34;&quot; title=&quot;Idea 2&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1263&quot; height=&quot;114&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/4.D4mAonnN_sQKMe.webp&quot; alt=&quot;&amp;#34;Idea 3&amp;#34;&quot; title=&quot;Idea 3&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1263&quot; height=&quot;114&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/5.CrrvpvK-_ZK3j8H.webp&quot; alt=&quot;&amp;#34;Idea 4&amp;#34;&quot; title=&quot;Idea 4&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1263&quot; height=&quot;114&quot;&gt;&lt;/p&gt;
&lt;p&gt;Displaying the number right next to the tab names seemed a little off as it’s easy to read it as a continuous text with the tab name.&lt;/p&gt;
&lt;p&gt;I decided that the last idea would be a better solution overall. As it’s easy to understand with the context of the tab name and it has really distinctive active states, it’s easier for people to glance at it while scrolling through it and know how many items are in the current list.&lt;/p&gt;
&lt;p&gt;As we decided on how the UI is going to look, let’s create the needed figma component for it. We have two variants here, the active and normal state. Let’s make use of figma’s variants feature and create it.&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/6.DjeuiRqn_Z21NNTD.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1263&quot; height=&quot;543&quot;&gt;&lt;/p&gt;
&lt;p&gt;We also have different themes that people can choose and a dark mode. As our solution is not that complicated, it will easily adapt to those scenarios too.&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/7.CuvCSqiR_Z1S2Hbl.webp&quot; alt=&quot;&amp;#34;Pink Theme&amp;#34;&quot; title=&quot;Pink Theme&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1263&quot; height=&quot;114&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/8.d_nUz6gp_Z4IUpn.webp&quot; alt=&quot;&amp;#34;Blue Theme&amp;#34;&quot; title=&quot;Blue Theme&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1263&quot; height=&quot;114&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/9.CUUujcld_Z10FUVU.webp&quot; alt=&quot;&amp;#34;Dark Green Theme&amp;#34;&quot; title=&quot;Dark Green Theme&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1263&quot; height=&quot;114&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;html-and-css-design&quot;&gt;HTML and CSS Design&lt;/h2&gt;
&lt;p&gt;Now, it’s time to create the component in code, let’s take the green theme for example. We are going to use TailwindCSS to make these components.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;span&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;  class&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;inline-flex rounded-full bg-gray-100 px-1.5 py-px font-mono text-xs font-medium text-gray-500&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  4&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The code above will create the following UI. It has text, background and padding on the same element which works for the following normal badge variant.&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/10.CBr4rgd__2a05NT.webp&quot; alt=&quot;&amp;#34;On light theme and dark theme.&amp;#34;&quot; title=&quot;On light theme and dark theme.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1254&quot; height=&quot;114&quot;&gt;&lt;/p&gt;
&lt;p&gt;But a problem comes when we go to the active variant. Here is all the colors we have:&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/11.4JHdgKmw_Z2sEQdY.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1263&quot; height=&quot;360&quot;&gt;&lt;/p&gt;
&lt;p&gt;The primary color is the color that is selected by the user so don’t have a light version of the color for the active badge’s background.&lt;/p&gt;
&lt;p&gt;Now, we have to reduce the primary color’s opacity to denote that there is a brand background on the number badge.&lt;/p&gt;
&lt;p&gt;For this, we have to add a decoration component inside the number badge so that it will have primary color as it’s background with reduced opacity.&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/12.B-qfLB-8_ZXuHTS.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1233&quot; height=&quot;435&quot;&gt;&lt;/p&gt;
&lt;p&gt;The wrapping &lt;code&gt;span&lt;/code&gt; will have relative position so that we can have an absolute positioned empty background &lt;code&gt;span&lt;/code&gt; inside it. The order also matters here, inside the wrapper span, the background should come first and then the number &lt;code&gt;span&lt;/code&gt; should come which is also relatively positioned.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;span&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;  class&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;text-primary relative ml-1 inline-flex rounded-full px-1.5 py-px font-mono text-xs font-medium transition&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;span&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;    aria-hidden&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;true&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;    class&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;bg-primary absolute inset-0 select-none rounded-full opacity-5 transition&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  &gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;relative&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;393&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This way we can easily add opacity to the background alone and we don’t need another color here to depict the light primary background color.&lt;/p&gt;
&lt;h2 id=&quot;react-component&quot;&gt;React Component&lt;/h2&gt;
&lt;p&gt;TailwindCSS needs to have the full class names present in our files to generate those css, so we need to have some decider functions that will help us set our variant colors.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;jsx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; clsx &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;clsx&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; default&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; function&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; NumberBadge&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;({ &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;number&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;variant&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;light&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; }) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; setTextColor&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;color&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (color &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;primary&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;text-primary&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (color &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;light&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;text-gray-600&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (color &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;white&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;text-gray-600&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;text-gray-600&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  const&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; setBackgroundColor&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;color&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (color &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;primary&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;bg-primary opacity-5&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (color &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;light&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;bg-gray-100&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (color &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;===&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;white&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;bg-white border border-gray-200&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;bg-gray-100&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  };&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;  return&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; (&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;span&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;      className&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;clsx&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;        setTextColor&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(variant),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;        &quot;relative ml-1 inline-flex rounded-full px-1.5 py-px font-mono text-xs font-medium transition&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      )}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    &gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;span&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;        aria-hidden&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;true&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;        className&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;clsx&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;          setBackgroundColor&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(variant),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;          &quot;absolute inset-0 select-none rounded-full transition&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        )}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; className&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;relative&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;{number}&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    &amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;span&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  );&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;setBackgroundColor&lt;/code&gt; and &lt;code&gt;setTextColor&lt;/code&gt; here will decide the color class names based on the variant that is passed through the component’s props.&lt;/p&gt;
&lt;p&gt;Then you can use the NumberBadge component in your code.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;jsx&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;NumberBadge&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; number&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;5&quot;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; variant&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;light&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;p&gt;Another small optimization is to use monospace font for the number so that it won’t move the layout when the number is dynamically updated.&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/13.AYFer8bM_YLGNh.webp&quot; alt loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1263&quot; height=&quot;564&quot;&gt;&lt;/p&gt;</content:encoded><author>Praveen Juge (hi@praveenjuge.com)</author></item><item><title>Use Tailwind JIT with Hugo</title><link>https://praveenjuge.com/blog/use-tailwind-jit-with-hugo/</link><guid isPermaLink="true">https://praveenjuge.com/blog/use-tailwind-jit-with-hugo/</guid><description>Tailwind released a new CLI which made JIT watch mode possible. We can use it to integrate JIT into a Hugo site. Let&apos;s see how to do that.</description><pubDate>Sun, 06 Jun 2021 03:57:04 GMT</pubDate><content:encoded>Tailwind released a new CLI which made JIT watch mode possible. We can use it to integrate JIT into a Hugo site. Let&apos;s see how to do that.&lt;p&gt;&lt;a href=&quot;https://github.com/praveenjuge/hugo-tailwind-jit&quot;&gt;Just show me the repo →&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;setup-new-hugo-site&quot;&gt;Setup New Hugo Site&lt;/h2&gt;
&lt;p&gt;Let’s create a new hugo site to test on, run the following commands in your terminal:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;hugo&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; site&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; hugo-tailwind-jit&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;cd&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; hugo-tailwind-jit&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;We have to add some new files for tailwind to work, so run the following command in your terminal:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;touch&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; layouts/index.html&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; static/tailwind.css&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; package.json&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; tailwind.config.js&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;We are going to transform &lt;code&gt;static/tailwind.css&lt;/code&gt; into &lt;code&gt;static/main.css&lt;/code&gt;, which we will include in our hugo layout:&lt;/p&gt;
&lt;p&gt;In &lt;code&gt;layouts/index.html&lt;/code&gt; add the following code,&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;#x3C;!&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;DOCTYPE&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; html&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;html&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; lang&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;en&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;head&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;meta&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; charset&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;UTF-8&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;meta&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; name&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;viewport&quot;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; content&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;width=device-width, initial-scale=1.0&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;Hello World&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;link&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; rel&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;stylesheet&quot;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; href&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;/main.css&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  &amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;head&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;body&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;p-20 text-2xl font-bold&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;Hello World&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  &amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;body&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;html&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;add-tailwind&quot;&gt;Add Tailwind&lt;/h2&gt;
&lt;p&gt;Let’s add our tailwind code, add the following code to &lt;code&gt;static/tailwind.css&lt;/code&gt;,&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;css&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;@tailwind&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; base;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;@tailwind&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; components;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;@tailwind&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; utilities;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;We have to add our build scripts for Tailwind’s new CLI work for us.&lt;/p&gt;
&lt;p&gt;In &lt;code&gt;package.json&lt;/code&gt; add the following code,&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;scripts&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;dev&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;NODE_ENV=development ./node_modules/tailwindcss/lib/cli.js -i ./static/tailwind.css -o ./static/main.css -w&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;build&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;NODE_ENV=production ./node_modules/tailwindcss/lib/cli.js -i ./static/tailwind.css -o ./static/main.css --minify&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;dependencies&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;tailwindcss&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;^3.0.5&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And next the basic Tailwind config, where we mention our JIT mode, and tell where to purge.&lt;/p&gt;
&lt;p&gt;In &lt;code&gt;tailwind.config.js&lt;/code&gt; add the following code,&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;module&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;exports&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  content: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;./content/**/*.md&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;./content/**/*.html&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;./layouts/**/*.html&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;install-dependencies&quot;&gt;Install Dependencies&lt;/h2&gt;
&lt;p&gt;We only have tailwind as a dependency, install it by using the following code in your terminal:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;npm&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; install&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;development-server&quot;&gt;Development Server&lt;/h2&gt;
&lt;p&gt;For Tailwind watcher, run the following code in your terminal:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;npm&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; dev&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;For Hugo Server, run the following code in another terminal tab:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;hugo&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; server&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And go to &lt;a href=&quot;http://localhost:1313&quot;&gt;&lt;code&gt;http://localhost:1313&lt;/code&gt;&lt;/a&gt; to see the Tailwind JIT enabled hugo server in action.&lt;/p&gt;
&lt;h2 id=&quot;production-build&quot;&gt;Production Build&lt;/h2&gt;
&lt;p&gt;Our build script will minify the css while building for production, you can use the following combined script for building minified production ready code.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;npm&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; build&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; &amp;#x26;&amp;#x26; &lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;hugo&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --minify&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;p&gt;And don’t forget to add &lt;code&gt;static/main.css&lt;/code&gt; to your &lt;code&gt;.gitignore&lt;/code&gt; file. Otherwise the automatically generated css file will be pushed to your repo.&lt;/p&gt;
&lt;p&gt;That’s it. ✨&lt;/p&gt;</content:encoded><author>Praveen Juge (hi@praveenjuge.com)</author></item><item><title>Add all Tailwind 2 Color Palettes to your config</title><link>https://praveenjuge.com/blog/add-all-tailwind-2-color-palette-in-your-config/</link><guid isPermaLink="true">https://praveenjuge.com/blog/add-all-tailwind-2-color-palette-in-your-config/</guid><description>Tailwind 2 has eight default color palette that you can use in your project, but internally it ships with 22 colour palettes. Here is how you can import them all. This increases your css size by a lot so make sure you purge during production build.</description><pubDate>Thu, 04 Feb 2021 15:40:42 GMT</pubDate><content:encoded>Tailwind 2 has eight default color palette that you can use in your project, but internally it ships with 22 colour palettes. Here is how you can import them all. This increases your css size by a lot so make sure you purge during production build.&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;javascript&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6A737D&quot;&gt;//tailwind.config.js&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; colors&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; require&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;tailwindcss/colors&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;module&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;exports&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  theme: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    colors: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      transparent: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;transparent&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      current: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;currentColor&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      black: colors.black,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      white: colors.white,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;      &quot;blue-gray&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: colors.blueGray,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;      &quot;cool-gray&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: colors.coolGray,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      gray: colors.gray,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;      &quot;true-gray&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: colors.trueGray,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;      &quot;warm-gray&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: colors.warmGray,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      red: colors.red,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      orange: colors.orange,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      amber: colors.amber,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      yellow: colors.yellow,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      lime: colors.lime,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      green: colors.green,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      emerald: colors.emerald,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      teal: colors.teal,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      cyan: colors.cyan,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      sky: colors.sky,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      blue: colors.blue,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      indigo: colors.indigo,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      violet: colors.violet,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      purple: colors.purple,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      fuchsia: colors.fuchsia,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      pink: colors.pink,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      rose: colors.rose,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content:encoded><author>Praveen Juge (hi@praveenjuge.com)</author></item><item><title>Install Tailwind on Hugo [2021]</title><link>https://praveenjuge.com/blog/install-tailwind-on-hugo/</link><guid isPermaLink="true">https://praveenjuge.com/blog/install-tailwind-on-hugo/</guid><description>Hugo has come a long way. It has postcss support built-in, so we can use all the goodness that comes from it. In this article, let&apos;s see how to install TailwindCSS on Hugo.</description><pubDate>Tue, 19 Jan 2021 08:40:34 GMT</pubDate><content:encoded>Hugo has come a long way. It has postcss support built-in, so we can use all the goodness that comes from it. In this article, let&apos;s see how to install TailwindCSS on Hugo.&lt;p&gt;&lt;a href=&quot;https://github.com/praveenjuge/hugo-tailwind&quot;&gt;Just show me the repo&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Tested on Hugo Version 0.83.1 and Tailwind Version 2.1.2, learn how to &lt;a href=&quot;https://gohugo.io/getting-started/installing/&quot;&gt;install Hugo here&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;setup-new-hugo-site&quot;&gt;Setup New Hugo Site&lt;/h2&gt;
&lt;p&gt;Let’s create a new empty hugo site to test on:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;hugo&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; site&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; hugo-tailwind&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;cd&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; hugo-tailwind&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Run the above command in your terminal. It will create a new folder called &lt;code&gt;hugo-tailwind&lt;/code&gt; which will contain your new Hugo site.&lt;/p&gt;
&lt;p&gt;Let’s create some basic layout files by using the following commands:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;mkdir&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; assets/css&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; layouts/_default&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;touch&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; layouts/index.html&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; layouts/_default/baseof.html&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; assets/css/main.css&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In &lt;code&gt;layouts/_default/baseof.html&lt;/code&gt;, add:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;#x3C;!&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;DOCTYPE&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; html&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;html&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;head&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;{{ .Title }}&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    {{ $styles := resources.Get &quot;css/main.css&quot; }} {{ $styles = $styles |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    resources.PostCSS (dict &quot;inlineImports&quot; true) }} {{ if hugo.IsProduction }}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    {{ $styles = $styles | minify }} {{ end }}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;link&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; href&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;{{ $styles.Permalink }}&quot;&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; rel&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;stylesheet&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  &amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;head&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  &amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;body&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    {{ block &quot;main&quot; . }}{{ end }}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  &amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;body&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;html&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In &lt;code&gt;layouts/index.html&lt;/code&gt;, add:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;html&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{{ define &quot;main&quot; }}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; class&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;mx-auto mt-5 text-3xl&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;Hello from the other side!&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;h1&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{{ end }}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Now, let’s add tailwind.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;install-packages&quot;&gt;Install Packages&lt;/h2&gt;
&lt;p&gt;Run the following command in your terminal to add a package.json file and complete the required steps.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;npm&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; init&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then install the following packages,&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;npm&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; install&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; tailwindcss@latest&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; postcss@latest&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; postcss-cli@latest&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; autoprefixer@latest&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --save&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;tailwind-and-postcss-config&quot;&gt;Tailwind and Postcss Config&lt;/h2&gt;
&lt;p&gt;In the root folder, run the following code:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;npx&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; tailwindcss&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; init&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -p&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This will create a &lt;code&gt;tailwind.config.js&lt;/code&gt; and &lt;code&gt;postcss.config.js&lt;/code&gt; file.&lt;/p&gt;
&lt;p&gt;For proper purging add the following to your &lt;code&gt;tailwind.config.js&lt;/code&gt; file:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;js&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;  purge&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;    enabled&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: process.env.&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;HUGO_ENVIRONMENT&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; ===&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;production&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;    content&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;./layouts/**/*.html&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;./content/**/*.md&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;./content/**/*.html&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Next, add the following to &lt;code&gt;assets/css/main.css&lt;/code&gt; to get the sweet tailwind css on your project.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;css&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;@tailwind&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; base;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;@tailwind&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; components;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;@tailwind&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; utilities;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now, if you run &lt;code&gt;hugo server&lt;/code&gt; in your terminal, you should see this:&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/install-tailwind-on-hugo-1.Cqvxvbu__Z16RTkY.webp&quot; alt=&quot;Screenshot of hugo site with tailwind styles&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;946&quot; height=&quot;520&quot;&gt;&lt;/p&gt;
&lt;p&gt;That’s all, tailwind css is integrated into your hugo site!&lt;/p&gt;</content:encoded><author>Praveen Juge (hi@praveenjuge.com)</author></item><item><title>Tips to Wake up Early Everyday</title><link>https://praveenjuge.com/blog/rise-early/</link><guid isPermaLink="true">https://praveenjuge.com/blog/rise-early/</guid><description>I used to struggle to wake up early, I’ll snooze, talk myself to sleep and just sleep through the alarm sometimes. But that was 5 years ago. Now I wake up at 5:30 am daily, most of the time even before the alarm.</description><pubDate>Thu, 23 Jul 2020 10:06:54 GMT</pubDate><content:encoded>I used to struggle to wake up early, I’ll snooze, talk myself to sleep and just sleep through the alarm sometimes. But that was 5 years ago. Now I wake up at 5:30 am daily, most of the time even before the alarm.&lt;p&gt;Here are some of the tricks I used:&lt;/p&gt;
&lt;h2 id=&quot;the-magic-happens-at-night&quot;&gt;The magic happens at night&lt;/h2&gt;
&lt;p&gt;The only way you can wake up early is by going to bed early. Start slow, if you goto bed at 23:00, then try going to bed at 22:45 the next week, then 15 mins earlier the next week.&lt;/p&gt;
&lt;p&gt;I go to bed by 22:00 with a book and sleep by 22:30 at the most. This is the main reason, I think, that I can wake up early. Whenever I go to bed later at night, I miss my 5:30 deadline in the morning.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Early to bed and early to rise makes a man healthy, wealthy, and wise. ~ Benjamin Franklin&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;no-devices&quot;&gt;No devices&lt;/h2&gt;
&lt;p&gt;I close all my devices at 21:00 and put my mobile in a shelf across the room while going to bed. This has several benefits:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;No blue light before going to bed which will reduce quality of sleep&lt;/li&gt;
&lt;li&gt;No scrolling social media in bed&lt;/li&gt;
&lt;li&gt;I have to physically get up and cross the room to turn off the alarm in the morning&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;have-purpose&quot;&gt;Have purpose&lt;/h2&gt;
&lt;p&gt;You should have a strong reason to wake up early, or else you will rationalize yourself to sleep in the morning. My reasons are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I can get so much work done during the quiet hours in the morning&lt;/li&gt;
&lt;li&gt;I feel better throughout the day if I start early&lt;/li&gt;
&lt;li&gt;I can meditate in absolute silence&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;give-yourself-a-reward&quot;&gt;Give yourself a Reward&lt;/h2&gt;
&lt;p&gt;Reward’s work wonders to make habits, whenever you wake up early give yourself a reward that you look forward to.&lt;/p&gt;
&lt;p&gt;It can be anything you like, one episode from your favorite TV show, coffee or even instagram. I forgot what I used to reward myself since I started so long ago. After some time you will also stop doing it for the rewards and do it just for the pleasure of waking up early.&lt;/p&gt;
&lt;h2 id=&quot;set-up-your-environment-for-next-steps&quot;&gt;Set up your environment for next steps&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Drinking water can freshen you up very quickly, so keep a bottle of water nearby the night before.&lt;/li&gt;
&lt;li&gt;If you are going to exercise, have the cloths and equipment ready&lt;/li&gt;
&lt;li&gt;If you are going to work, setup the work environment the night before for easily going to flow&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Whatever you do, don’t go back to the bed.&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;At dawn, when you have trouble getting out of bed, tell yourself: I have to go to work — as a human being. What do I have to complain of, if I’m going to do what I was born for — the things I was brought into the world to do? Or is this what I was created for? To huddle under the blankets and stay warm?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;So you were born to feel “nice”? Instead of doing things and experiencing them? Don’t you see the plants, the birds, the ants and spiders and bees going about their individual tasks, putting the world in order, as best they can? And you’re not willing to do your job as a human being? Why aren’t you running to do what your nature demands?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;You don’t love yourself enough. Or you’d love your nature too, and what it demands of you.
~ Marcus Aurelius, Meditations&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded><author>Praveen Juge (hi@praveenjuge.com)</author></item><item><title>Down to 8 Apps on My Phone</title><link>https://praveenjuge.com/blog/digital-minimalism/</link><guid isPermaLink="true">https://praveenjuge.com/blog/digital-minimalism/</guid><description>It&apos;s been a year since I read Cal Newport&apos;s Digital Minimalism where he talks about taking back control of your time and not feeling like you need your phone attached to you all the time. Here are some steps I took to implement Digital Minimalism in my life.</description><pubDate>Wed, 08 Jul 2020 02:22:50 GMT</pubDate><content:encoded>It&apos;s been a year since I read Cal Newport&apos;s Digital Minimalism where he talks about taking back control of your time and not feeling like you need your phone attached to you all the time. Here are some steps I took to implement Digital Minimalism in my life.&lt;p&gt;The major takeaway for me was Cal Newport’s call to join the attention resistance movement.&lt;/p&gt;
&lt;p&gt;Like most people, I don’t have the self-control to read a book if I have the opportunity to watch Netflix. So I use the following techniques to trick my brain into doing what I want even when I don’t want to do it.&lt;/p&gt;
&lt;h2 id=&quot;set-a-list-of-purposes-for-each-device&quot;&gt;Set a list of purposes for each device&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Phone:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Talking, Messaging to Friends&lt;/li&gt;
&lt;li&gt;Listening to Music and Podcasts&lt;/li&gt;
&lt;li&gt;Manage Todo List&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;iPad:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Netflix, Music, Podcasts&lt;/li&gt;
&lt;li&gt;Reading Books&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;MacBook:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Work (Design, Develop, Meetings, Mail)&lt;/li&gt;
&lt;li&gt;Music&lt;/li&gt;
&lt;li&gt;Browsing&lt;/li&gt;
&lt;li&gt;Video Editing&lt;/li&gt;
&lt;li&gt;Manage Todo List, Notes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;PC:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Gaming&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;remove-all-the-other-unneeded-apps&quot;&gt;Remove all the other unneeded apps&lt;/h2&gt;
&lt;p&gt;After I set the main purpose for each device, I got into removing all the other cruft apps that I didn’t need.&lt;/p&gt;
&lt;h3 id=&quot;phone&quot;&gt;Phone&lt;/h3&gt;
&lt;p&gt;I ended up with a total of 8 essential apps on my phone. I have rooted my phone, so I could remove Play Store and other unneeded apps. I installed third-party apps with APK from trusted sources which I manually update once a month.&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/digital-minimalism-phone.uIg6_z6D_Z2uRFiF.webp&quot; alt=&quot;Screenshot of apps in my Phone&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1017&quot; height=&quot;954&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;ipad&quot;&gt;iPad&lt;/h3&gt;
&lt;p&gt;iPad is my main entertainment device. Apart from some, I didn’t have the need to install apps that are already available in the browser.&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/digital-minimalism-ipad.DUZbDHm4_1VJBmj.webp&quot; alt=&quot;Screenshot of apps in my iPad&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2160&quot; height=&quot;676&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;macbook&quot;&gt;MacBook&lt;/h3&gt;
&lt;p&gt;As my work device, it has everything I need to get into a flow, attend meetings, and collaborate with my coworkers.&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/digital-minimalism-mac.CBnno27c_Z16uhv9.webp&quot; alt=&quot;Screenshot of apps in my MacBook&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1199&quot; height=&quot;257&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;reduce-screen-time&quot;&gt;Reduce screen time&lt;/h2&gt;
&lt;p&gt;Already my screen time has reduced a lot, but here are more steps I followed:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Turn off all notifications other than the ringer and alarm.&lt;/li&gt;
&lt;li&gt;Keep your phone and iPad away from your work desk and bed.&lt;/li&gt;
&lt;li&gt;Consolidate texting.&lt;/li&gt;
&lt;li&gt;Set leisure activities in the real world.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;where-i-can-improve-on&quot;&gt;Where I can improve on&lt;/h2&gt;
&lt;p&gt;Though I gain more time every day by getting rid of unnecessary apps, I seem to be spending a lot of time on video games lately which might be an effect of quarantine.&lt;/p&gt;
&lt;p&gt;I also observed that playing games for 30 mins to an hour makes me happy. And playing for more than 4 hours a day makes me miserable.&lt;/p&gt;
&lt;p&gt;So that’s my next target. Play games for an hour a day and then move on to the next thing.&lt;/p&gt;
&lt;h2 id=&quot;next-steps&quot;&gt;Next Steps&lt;/h2&gt;
&lt;p&gt;Here are some steps that Cal Newport suggests which I intend to do more of:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Be bored on purpose&lt;/li&gt;
&lt;li&gt;Be alone with my thoughts&lt;/li&gt;
&lt;li&gt;Embrace slow media&lt;/li&gt;
&lt;li&gt;Take long walks&lt;/li&gt;
&lt;li&gt;Let go of the fear of missing out&lt;/li&gt;
&lt;/ul&gt;</content:encoded><author>Praveen Juge (hi@praveenjuge.com)</author></item><item><title>You can read this page on July 2030</title><link>https://praveenjuge.com/blog/you-can-read-this-page-on-july-2030/</link><guid isPermaLink="true">https://praveenjuge.com/blog/you-can-read-this-page-on-july-2030/</guid><description>Bookmark this page and come back after 10 years. You will see the same page with the same content. But what about after 50 years? After 100? Will the browser you bookmarked this page work after 100 years?</description><pubDate>Wed, 01 Jul 2020 02:22:50 GMT</pubDate><content:encoded>Bookmark this page and come back after 10 years. You will see the same page with the same content. But what about after 50 years? After 100? Will the browser you bookmarked this page work after 100 years?&lt;p&gt;I love anything that is long-lasting. Trees, Tortoise, Hugh Hefner.&lt;/p&gt;
&lt;p&gt;The modern web is volatile, constantly evolving, and prone to break at a thousand different points. It’s a constant challenge to support all the devices that can access web and its even more terrifying when you think about the future.&lt;/p&gt;
&lt;p&gt;But the web has one big supporter on its side. &lt;strong&gt;Backward Compatibility&lt;/strong&gt;. HTML and CSS written in 1999 can still be seen without any problem. Even JavaScript has excellent backward compatibility.&lt;/p&gt;
&lt;p&gt;But how can &lt;strong&gt;we&lt;/strong&gt; make our content last?&lt;/p&gt;
&lt;p&gt;I came across this manifesto called &lt;a href=&quot;https://jeffhuang.com/designed_to_last/&quot;&gt;Designed to Last&lt;/a&gt; by Jeff Huang in which he shares similar ideas. His advice was to make your build process simple and go back to HTML/CSS.&lt;/p&gt;
&lt;p&gt;Here are the steps I’ve taken to ensure that this &lt;a href=&quot;https://praveenjuge.com&quot;&gt;site&lt;/a&gt; works for the foreseeable future:&lt;/p&gt;
&lt;h2 id=&quot;two-external-services&quot;&gt;Two external services&lt;/h2&gt;
&lt;p&gt;Netlify and GitHub are the only services that are needed to make this site work. I’ve brought this domain and hosted the static HTML files on netlify. The layouts and the content files are stored in GitHub.&lt;/p&gt;
&lt;p&gt;I trust both of these services to work for a long time but I have backup plans if either of these services stopped working.&lt;/p&gt;
&lt;h2 id=&quot;hugo-for-creating-static-pages&quot;&gt;Hugo for creating static pages&lt;/h2&gt;
&lt;p&gt;Hugo is a static site generator. It takes my layouts as HTML and content as Markdown and converts it into HTML format.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Hugo is available in binary format and it can be installed anywhere.&lt;/li&gt;
&lt;li&gt;Hugo is well maintained and has big community support.&lt;/li&gt;
&lt;li&gt;New version releases won’t break the older versions.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And most importantly, it is fast and easy to work with.&lt;/p&gt;
&lt;h2 id=&quot;no-third-party-domains&quot;&gt;No Third Party Domains&lt;/h2&gt;
&lt;p&gt;All the files on this website are served from &lt;code&gt;praveenjuge.com&lt;/code&gt;. The more the external domains you hit, the chances that something will break is higher. Better safe than sorry.&lt;/p&gt;
&lt;h2 id=&quot;no-analytics&quot;&gt;No Analytics&lt;/h2&gt;
&lt;p&gt;Analytics has some benefits, but 90% of analytics is just problems. My marketing brain always tells me to add some form of analytics to every website I make.&lt;/p&gt;
&lt;p&gt;But I convinced myself to let go and removed the need to measure vanity metrics.&lt;/p&gt;
&lt;h2 id=&quot;self-hosted-fonts&quot;&gt;Self Hosted Fonts&lt;/h2&gt;
&lt;p&gt;This site uses &lt;strong&gt;Merriweather&lt;/strong&gt; font which is self-hosted on this website rather than using Google Fonts. This means that I have to update it to the latest version from time to time. But that’s better than having to hit Google’s domain.&lt;/p&gt;
&lt;h2 id=&quot;no-javascript&quot;&gt;No JavaScript&lt;/h2&gt;
&lt;p&gt;I’m gonna be honest with you, I don’t like JavaScript that much. I write it all the time, I understand how it works, I even like React and other JavaScript frameworks. But it seems to be the cause of most of the bloat on the web today.&lt;/p&gt;
&lt;p&gt;And for a blog site, I don’t see a reason to add any JavaScript.&lt;/p&gt;
&lt;h2 id=&quot;compressing-images-checking-broken-links&quot;&gt;Compressing images, checking broken links&lt;/h2&gt;
&lt;p&gt;I compress all the images before uploading it to GitHub repo so that everything stays easy to download at all network speeds.&lt;/p&gt;
&lt;p&gt;And I use an Netlify Plugin called &lt;a href=&quot;https://github.com/munter/netlify-plugin-checklinks#readme&quot;&gt;Checklinks&lt;/a&gt; to check for broken links in the build process.&lt;/p&gt;
&lt;h2 id=&quot;and-then-life-happens&quot;&gt;And then life happens…&lt;/h2&gt;
&lt;p&gt;I get lazy. Netlify doesn’t work anymore. I’ve moved on to carpentry.&lt;/p&gt;
&lt;p&gt;Just like that, I may forget about this website. But I don’t want that to happen. So this blog post is my commitment to make this website last for at least the next 10 years.&lt;/p&gt;
&lt;p&gt;Go ahead and bookmark this page. Visit it after 10 years. It will work as intended and will probably look the same.&lt;/p&gt;
&lt;p&gt;But no one can promise 50 years.&lt;/p&gt;</content:encoded><author>Praveen Juge (hi@praveenjuge.com)</author></item><item><title>How I Overcame YouTube Addiction</title><link>https://praveenjuge.com/blog/how-i-overcame-youtube-addiction/</link><guid isPermaLink="true">https://praveenjuge.com/blog/how-i-overcame-youtube-addiction/</guid><description>I don&apos;t use social media often, that&apos;s by design. I know if I start using it regularly, I will become addicted to it. So, imagine my surprise when on one Sunday afternoon I found out that I spent the entire day doing nothing but watching videos on YouTube.</description><pubDate>Sun, 21 Jun 2020 05:07:47 GMT</pubDate><content:encoded>I don&apos;t use social media often, that&apos;s by design. I know if I start using it regularly, I will become addicted to it. So, imagine my surprise when on one Sunday afternoon I found out that I spent the entire day doing nothing but watching videos on YouTube.&lt;p&gt;The saddest thing is that I didn’t even remember what I was watching. It was just a clockwork for my brain at that point. Wake up, open YouTube, watch a video, continue watching videos.&lt;/p&gt;
&lt;p&gt;I write this blog on another Sunday afternoon, almost three months after, to say that I watched YouTube for just 10 minutes this week to watch a work-related video that a colleague sent.&lt;/p&gt;
&lt;p&gt;I’m a little proud of myself, to tell the truth.&lt;/p&gt;
&lt;p&gt;This is a log of everything I did to overcome this addiction. If it helped me, it might help someone else too.&lt;/p&gt;
&lt;h2 id=&quot;how-and-why-i-became-addicted&quot;&gt;How and Why I Became Addicted&lt;/h2&gt;
&lt;p&gt;YouTube is a community where billions of people share their talents, interests and findings with you.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;That’s the hook.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;real&lt;/strong&gt; YouTube is a billion-dollar company where hundreds of researchers and designers manipulate an algorithm to deliver a low-quality video to you.&lt;/p&gt;
&lt;p&gt;I thought about why I was addicted for a long time. It basically was three things,&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Types of videos I watch&lt;/li&gt;
&lt;li&gt;YouTube’s Algorithm&lt;/li&gt;
&lt;li&gt;YouTube’s Story&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;types-of-videos-i-watch&quot;&gt;Types of videos I watch&lt;/h3&gt;
&lt;h4 id=&quot;gaming-30&quot;&gt;Gaming (30%)&lt;/h4&gt;
&lt;p&gt;This one was easy to justify for me, I like watching someone be good at something. Until I realized that this was a passive way of thinking about it.&lt;/p&gt;
&lt;p&gt;I’m not raising my skill by watching this, so what’s the point? The only way I could get better at video games is to play it more, not by watching someone else play it.&lt;/p&gt;
&lt;h4 id=&quot;self-help-30&quot;&gt;Self Help (30%)&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Biggest trap of them all.&lt;/strong&gt; Productivity, Self Help, Motivational channels might seem to have a good agenda on the onset but they can’t profit if you actually improve yourself.&lt;/p&gt;
&lt;p&gt;Most of the YouTubers in this category are good people at heart. But they know that 90% of the people watching them won’t improve anything in their life. They just like the feeling of improving themselves.&lt;/p&gt;
&lt;p&gt;Every time you watch one of the self-help videos, your brain plays a trick on you. It makes you think that you are actually improving yourself but when in reality you are just actually watching a video that you will forget in 40 minutes.&lt;/p&gt;
&lt;p&gt;You will come for more when that rush is over. And YouTube tells them to create more videos quickly for us to consume.&lt;/p&gt;
&lt;p&gt;For quick reference these are the only things they will say to you from now until eternity:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Self Help YouTubers: Take care of yourself&lt;/li&gt;
&lt;li&gt;Productivity YouTubers: Organize your life for deep work&lt;/li&gt;
&lt;li&gt;Motivational YouTubers: Never stop the Hustle (This will lead to burnout by the way.)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ironically most of these YouTubers recommend you to read a book.&lt;/p&gt;
&lt;h4 id=&quot;design-and-development-20&quot;&gt;Design and Development (20%)&lt;/h4&gt;
&lt;p&gt;I’m a professional web designer, so it’s important for me to keep up with the latest developments in my field. Of course, that’s what I told myself.&lt;/p&gt;
&lt;p&gt;Things always change but YouTube is not a place to capture it. YouTube videos seem to be the fast-food sector of the industry. Fast to the point but not impactful and everlasting.&lt;/p&gt;
&lt;p&gt;I’ve found that written content like&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Blog Posts&lt;/li&gt;
&lt;li&gt;Documentation&lt;/li&gt;
&lt;li&gt;Best Practices&lt;/li&gt;
&lt;li&gt;Newsletters&lt;/li&gt;
&lt;li&gt;Case Studies&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;are often more informative and educational. They let you,&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Read at your own pace&lt;/li&gt;
&lt;li&gt;Accessible and Developer Friendly&lt;/li&gt;
&lt;li&gt;Most of them are intended to be everlasting or updated frequently&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;One might argue developer tutorials are inherently good and I agree, but I usually get a better flow in my work from written tutorials.&lt;/p&gt;
&lt;h4 id=&quot;commentary-channels-10&quot;&gt;Commentary Channels (10%)&lt;/h4&gt;
&lt;p&gt;These are mostly for entertainment, but as I distance myself from these more and more I find them to be passive entertainment.&lt;/p&gt;
&lt;p&gt;Netflix has a collection of marvelously produced entertainment that will take my entire lifetime to watch. Why should I settle for this glut?&lt;/p&gt;
&lt;h4 id=&quot;pointless-internet-drama-10&quot;&gt;Pointless Internet Drama (10%)&lt;/h4&gt;
&lt;p&gt;This was the cone of shame for me, I liked reality TV, YouTubers fighting with each other and mostly pointless drama. I was thinking about why I like this, and then a quote someone said came to me,&lt;/p&gt;
&lt;p&gt;Don’t live on someone else’s life.&lt;/p&gt;
&lt;p&gt;I was projecting. I have a simple life with no problems. So, I liked watching other people have problems. I thought I was superior to them in some way and that made me feel good.&lt;/p&gt;
&lt;p&gt;Of course, I was the idiot watching videos while they simply got paid and went home.&lt;/p&gt;
&lt;h3 id=&quot;youtubes-algorithm&quot;&gt;YouTube’s Algorithm&lt;/h3&gt;
&lt;p&gt;Whenever I open YouTube, it shows me a carefully chosen list of videos that interests me. It’s a combination of what I recently liked, latest videos from the creators I like, trending videos from my location, and cute animals.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;It’s impossible not to click on any of these.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;YouTube’s algorithm is very powerful at this point, probably the most sophisticated recommendation engine in the world. You simply can’t win it.&lt;/p&gt;
&lt;p&gt;You can, however, not participate in its game. Some steps you can take:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Do not &lt;code&gt;smash that like button&lt;/code&gt; on any videos.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If you want to see a video again, download it to your drive. The YouTube video can be removed, blocked, or altered but you can always have what you want.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Do not &lt;code&gt;hit that bell icon&lt;/code&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Voluntarily having more notifications on your phone is the first step to becoming mindless and have other people dictate where you spend your time.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Pause Watched History and Search History.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Again, download important videos. 98% of what you watch is not worth it and the other 2% can easily be searched again.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Clear watch history, remove previously liked videos, clear out your comments. Do not give any indication to YouTube on what you like.&lt;/p&gt;
&lt;p&gt;I even ran a puppeteer (automated script) to remove all the videos from my recommendation but it just pops back up. The &lt;code&gt;Not Interested&lt;/code&gt; option is not real.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ultimately, be utilitarian on what you want.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If you want to learn &lt;em&gt;How to Tie a Tie&lt;/em&gt;, search for it, learn it and close it. Don’t needlessly subscribe, like or engage in any way.&lt;/p&gt;
&lt;h3 id=&quot;youtubes-story&quot;&gt;YouTube’s Story&lt;/h3&gt;
&lt;p&gt;A brand’s story is what you want other people to tell about your brand. YouTube’s story is,&lt;/p&gt;
&lt;p&gt;YouTube is a community of people giving free information and entertainment.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;YouTube is not a community.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Individual creators may create a community. But YouTube is a company that wants nothing but profits.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;YouTube is not free.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Nothing Google does is free.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;YouTube gives low-quality information and entertainment.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Only 5% of its millions of videos are actually helpful. Don’t take that burden of sifting through all that to find something you might like.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-i-overcame-youtube&quot;&gt;How I Overcame YouTube&lt;/h2&gt;
&lt;p&gt;Here are some simple and actionable steps that I took over the months,&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Cancelling YouTube Premium&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If you get pissed off at the ads like I do, then it’s good. You will quit the video soon.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Turn off notifications&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Taylor Swift’s new music video is not that important to notify you. No one should have the right to disturb you anytime they want.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Reducing subscriptions&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Go through your subscription list and remove anyone who you don’t need in your life anymore. I followed this and removed almost 300 subscriptions and I don’t even remember what they were now.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Uninstalling apps&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;YouTube is available everywhere, it doesn’t need to be on your phone or tablet. You can always watch in your mobile browser for something urgent.&lt;/p&gt;
&lt;p&gt;Mobile apps have 30% higher engagement rate. We actively go back to an app more often than a website. That’s why everyone keeps pushing you to download their app. Don’t.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Remove all subscriptions&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;After some time, I naturally removed all my subscriptions, I found alternate sources to topics I was interested in. Books, Newsletters, Spotify, and Netflix was enough for me.&lt;/p&gt;
&lt;p&gt;Tip: Subscribe to a channel called &lt;code&gt;Sub with no videos&lt;/code&gt; to reduce the recommendations in your subscriptions tab.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Add alternate habits&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;My viewing hours reduced exponentially at this point. Now I opened YouTube, searched for some good creators, watched their latest video, and closed the site.&lt;/p&gt;
&lt;p&gt;But to quit fully I knew I needed to replace YouTube time with something else. This can be a different thing for you and me. I started writing more often. The silence is great for creative thoughts and reflection.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Today, after all this, I realized that I’m not addicted to YouTube anymore. I should be careful to make sure I don’t go back to it slowly. But I have high hopes for the future.&lt;/p&gt;
&lt;p&gt;And always remember,&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Too much of anything can make you sick ~ Cheryl Cole&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded><author>Praveen Juge (hi@praveenjuge.com)</author></item><item><title>I Hate Figma&apos;s Empty Canvas</title><link>https://praveenjuge.com/blog/i-hate-figmas-empty-canvas/</link><guid isPermaLink="true">https://praveenjuge.com/blog/i-hate-figmas-empty-canvas/</guid><description>Figma&apos;s empty canvas is where dreams go to die for me. That white screen had stopped me from starting my work more than anything else.</description><pubDate>Wed, 17 Jun 2020 02:03:24 GMT</pubDate><content:encoded>Figma&apos;s empty canvas is where dreams go to die for me. That white screen had stopped me from starting my work more than anything else.&lt;p&gt;Every project I start, starts with the problem of facing an empty canvas. That blank white screens that stare at me.&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/i-hate-figmas-empty-canvas-1.LH8TAoRA_1NxXqP.webp&quot; alt=&quot;Figma Empty Frame&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1440&quot; height=&quot;900&quot;&gt;&lt;/p&gt;
&lt;p&gt;Thousands of thoughts run through my head,&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;How will the end design look like?&lt;/li&gt;
&lt;li&gt;How will people react to it when they see it?&lt;/li&gt;
&lt;li&gt;Will it be good enough to post on Dribbble?&lt;/li&gt;
&lt;li&gt;What if no one understands it?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;While these are important questions to ask, these are the dialogues that will stop you from completing anything.&lt;/p&gt;
&lt;p&gt;Ask these questions at the end.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Always be stupid and just start your work without thinking.&lt;/strong&gt; You will always have time to improve anything.&lt;/p&gt;
&lt;p&gt;For me, adding the first object is the hardest part.&lt;/p&gt;
&lt;p&gt;My advice for beginners and to myself is to start with something, &lt;strong&gt;add the first stroke&lt;/strong&gt;, add the first text, add the first rectangle. Then, slowly, you go into a flow state where you forget about the difficulty of the situation and just get things done.&lt;/p&gt;
&lt;p&gt;You should face adversity head-on and you will always find that it is 10x times easier than you imagined.&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/i-hate-figmas-empty-canvas-lilvincent.D8vRsRDF_1wqf5B.webp&quot; alt=&quot;VINCENT VAN GOGH: The blank canvas&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;980&quot; height=&quot;2812&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.zenpencils.com/comic/lilvincent/&quot;&gt;VINCENT VAN GOGH: The blank canvas by Zen Pencils&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Many painters are afraid of the blank canvas, but the blank canvas is afraid of the truly passionate painter who dares-and who has once broken the spell of ‘you can’t.’ ~ Vincent Van Gogh&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;em&gt;Reminder to myself: Come back and read this whenever I start something new.&lt;/em&gt;&lt;/p&gt;</content:encoded><author>Praveen Juge (hi@praveenjuge.com)</author></item><item><title>Books I Love - The War of Art by Steven Pressfield</title><link>https://praveenjuge.com/blog/books-i-love-the-war-of-art/</link><guid isPermaLink="true">https://praveenjuge.com/blog/books-i-love-the-war-of-art/</guid><description>The War of Art is one of my favorite non-fiction book, it helped me recognize why I put off doing my work and how to fix it easily. I recommend this book to anyone doing creative work where you often second guess yourself and don&apos;t ship things.</description><pubDate>Tue, 09 Jun 2020 06:57:23 GMT</pubDate><content:encoded>The War of Art is one of my favorite non-fiction book, it helped me recognize why I put off doing my work and how to fix it easily. I recommend this book to anyone doing creative work where you often second guess yourself and don&apos;t ship things.&lt;p&gt;&lt;strong&gt;Rating:&lt;/strong&gt; 10/10, would definitely read again.&lt;/p&gt;
&lt;p&gt;This book is written by Steven Pressfield who is an author of both fiction and non-fiction works. After reading this book, out of curiosity, I read his fiction works like &lt;em&gt;Gates of Fire&lt;/em&gt; which delivers spectacularly on the grit and discipline of the Spartan warriors.&lt;/p&gt;
&lt;h2 id=&quot;book-summary&quot;&gt;Book Summary&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;It’s not the writing part that’s hard. What’s hard is sitting down to write.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This book is a quick read on why we put off doing our work and how to procrastinate less. Pressfield expresses these by telling us about his own problems while writing his books and how he overcomes them. This will be a good read for anyone who has a creative pursuit but can’t seem to fill the gap of becoming a pro.&lt;/p&gt;
&lt;p&gt;The War of Art is divided into three parts,&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Defining our enemy, Resistance&lt;/li&gt;
&lt;li&gt;Dealing with Resistance by Turning Pro&lt;/li&gt;
&lt;li&gt;Beyond Resistance, the self&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;my-notes&quot;&gt;My Notes&lt;/h2&gt;
&lt;h3 id=&quot;resistance&quot;&gt;Resistance&lt;/h3&gt;
&lt;p&gt;Pressfield uses the term &lt;code&gt;Resistance&lt;/code&gt; to label the thing that distracts and prevents anyone from doing their work. He argues that Resistance comes to us whenever we attempt to improve our long-term growth, health, or integrity.&lt;/p&gt;
&lt;p&gt;What keeps us from sitting down (to do our work) is Resistance.&lt;/p&gt;
&lt;p&gt;Resistance cannot be seen, touched, heard, or smelled. But it can be felt. We experience it as an energy field radiating from a work-in-potential. It’s a repelling force. It’s negative. Its aim is to shove us away, distract us, prevent us from doing our work.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Resistance is Invisible&lt;/li&gt;
&lt;li&gt;Resistance is Infallible&lt;/li&gt;
&lt;li&gt;Resistance Creates Self-Doubt&lt;/li&gt;
&lt;li&gt;Resistance Never Sleeps&lt;/li&gt;
&lt;li&gt;Resistance Causes Procrastination&lt;/li&gt;
&lt;li&gt;Resistance Creates Unhappiness&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Resistance never goes away, even if you complete one project, it comes to the next one with twice as much strength.&lt;/p&gt;
&lt;p&gt;There is however one thing we can do to deal with resistance, turning pro.&lt;/p&gt;
&lt;h3 id=&quot;turning-pro&quot;&gt;Turning Pro&lt;/h3&gt;
&lt;p&gt;Here are the characteristics of a professional:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The amateur plays for fun. The professional plays for keeps.&lt;/li&gt;
&lt;li&gt;To the amateur, the game is his avocation. To the pro it’s his vocation.&lt;/li&gt;
&lt;li&gt;The amateur plays part-time, the professional full-time.&lt;/li&gt;
&lt;li&gt;The amateur is a weekend warrior. The professional is there seven days a week.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Someone once asked Somerset Maugham if he wrote on a schedule or only when struck by inspiration. “I write only when inspiration strikes,” he replied. “Fortunately it strikes every morning at nine o’clock sharp.” &lt;strong&gt;That’s a pro.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Some qualities that define us as a professional:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;We show up every day.&lt;/li&gt;
&lt;li&gt;We show up no matter what.&lt;/li&gt;
&lt;li&gt;We stay on the job all day.&lt;/li&gt;
&lt;li&gt;We are committed over the long haul.&lt;/li&gt;
&lt;li&gt;The stakes for us are high and real.&lt;/li&gt;
&lt;li&gt;We accept remuneration for our labor.&lt;/li&gt;
&lt;li&gt;We do not over-identify with our jobs.&lt;/li&gt;
&lt;li&gt;We master the technique of our jobs.&lt;/li&gt;
&lt;li&gt;We have a sense of humor about our jobs.&lt;/li&gt;
&lt;li&gt;We receive praise or blame in the real world.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;There’s no mystery to turning pro. It’s a decision brought about by an act of will. We make up our minds to view ourselves as pros and we do it. Simple as that.&lt;/p&gt;
&lt;h3 id=&quot;muses-beyond-resistance&quot;&gt;Muses, Beyond Resistance&lt;/h3&gt;
&lt;p&gt;In this part, Pressfield goes to the metaphysical by using terms like muses and angels to dramatize how we get inspired to do our work. I quite like the idea of muses watching over us and calling us to do our best work. But it’s not for everyone.&lt;/p&gt;
&lt;p&gt;When we sit down, day after day and keep grinding, something mysterious starts to happen. A process is set into motion by which, inevitably and infallibly, heaven comes to our aid. Unseen forces enlist in our cause; serendipity reinforces our purpose.&lt;/p&gt;
&lt;p&gt;This is the other secret that real artists know and wannabe writers don’t. When we sit down each day and do our work, power concentrates around us. The Muse takes note of our dedication. She approves. We have earned favor in her sight. When we sit down and work, we become like a magnetized rod that attracts iron filings. Ideas come. Insights accrete.&lt;/p&gt;
&lt;p&gt;Clearly, some intelligence is at work, independent of our conscious mind and yet in alliance with it, processing our material for us and alongside us.&lt;/p&gt;
&lt;p&gt;This is why artists are modest. They know they’re not doing the work; they’re just taking dictation. It’s also why “noncreative people” hate “creative people.” Because they’re jealous. They sense that artists and writers are tapped into some grid of energy and inspiration that they themselves cannot connect with.&lt;/p&gt;
&lt;p&gt;Of course, this is nonsense. We’re all creative. We all have the same psyche. The same everyday miracles are happening in all our heads day by day, minute by minute.&lt;/p&gt;
&lt;p&gt;The Ego and the Self:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The Self wishes to create, to evolve. The Ego likes things just the way they are.&lt;/li&gt;
&lt;li&gt;The Ego is that part of the psyche that believes in material existence.&lt;/li&gt;
&lt;li&gt;The Self believes all beings are one. If I hurt you, I hurt myself.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Creative work is not a selfish act or a bid for attention on the part of the actor. It’s a gift to the world and every being in it. Don’t cheat us of your contribution. Give us what you’ve got.&lt;/strong&gt;&lt;/p&gt;</content:encoded><author>Praveen Juge (hi@praveenjuge.com)</author></item><item><title>How I take Notes using VS Code and GitHub</title><link>https://praveenjuge.com/blog/how-i-take-notes-using-vs-code-and-github/</link><guid isPermaLink="true">https://praveenjuge.com/blog/how-i-take-notes-using-vs-code-and-github/</guid><description>I have used dozens of note-taking apps, read lots and lots of hacker news threads on how different people organize their notes and finally settled on VS Code as the editor and GitHub Repo as the storage.</description><pubDate>Tue, 26 May 2020 16:07:25 GMT</pubDate><content:encoded>I have used dozens of note-taking apps, read lots and lots of hacker news threads on how different people organize their notes and finally settled on VS Code as the editor and GitHub Repo as the storage.&lt;p&gt;Here is how I did it and let’s see what’s good and what’s bad about this setup.&lt;/p&gt;
&lt;h2 id=&quot;github-setup&quot;&gt;GitHub Setup&lt;/h2&gt;
&lt;p&gt;I got this whole idea when GitHub made private repo free for personal use. I simply created a private repo, cloned it to local for offline access.&lt;/p&gt;
&lt;p&gt;Now, I just have to push to the repo whenever I make a change to my files. I know it would lead to many unnecessary commits but if I want I can squash commits anytime.&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/how-i-take-notes-using-vs-code-and-github-2.sLdoPE9w_Z1lFicB.webp&quot; alt=&quot;Screenshot of Github Page&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1122&quot; height=&quot;685&quot;&gt;&lt;/p&gt;
&lt;p&gt;Be sure to clone it locally to take notes on.&lt;/p&gt;
&lt;h2 id=&quot;vs-code-setup&quot;&gt;VS Code Setup&lt;/h2&gt;
&lt;p&gt;Now to the editor, I like to write my notes on markdown format cause it’s easily parsable on the web and it’s easy to write it.&lt;/p&gt;
&lt;p&gt;I already use VS Code for development and it has a sweet markdown viewer, so we will be using that for editing the notes.&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/how-i-take-notes-using-vs-code-and-github-8.CHCXJSmC_Z19sd1M.webp&quot; alt=&quot;Screenshot of VS Code Markdown Editor&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1388&quot; height=&quot;927&quot;&gt;&lt;/p&gt;
&lt;p&gt;And I also use these extensions:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker&quot;&gt;Code Spell Checker&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=DavidAnson.vscode-markdownlint&quot;&gt;markdownlint&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Markdown linter is not really necessary but it does help when you are learning markdown for the first time.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=pucelle.run-on-save&quot;&gt;Run on Save&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This helps in pushing the markdown files to git whenever you save it. After installing this extention, in VS code settings.json, add this:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;runOnSave.commands&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;match&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;{{ path_to_folder }}.md$&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;command&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;pushnotes&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;runIn&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;terminal&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Here the &lt;code&gt;pushnotes&lt;/code&gt; command executes in the terminal whenever a save occurs. And now in your &lt;code&gt;bash_profile&lt;/code&gt; add these lines:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;pushnotes&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  cd&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; &amp;#x26;&amp;#x26; &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;cd&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; projects/notes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  now&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;$(&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;date&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &apos;+%A %d %m %Y %X&apos;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;  git&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; add&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; .&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -v&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;  git&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; commit&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -a&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -s&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -v&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -m&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; $now&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;  git&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; push&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -v&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;These will push your code to GitHub with the time and date as the commit messsage. So now, whenever you save a file, you push to the repository.&lt;/p&gt;
&lt;h2 id=&quot;automator-setup-only-on-mac&quot;&gt;Automator Setup (Only on Mac)&lt;/h2&gt;
&lt;p&gt;After some days, I noticed that starting up VS Code and going to my notes folder was taking a lot of time, precious seconds that I could spend watching Netflix.&lt;/p&gt;
&lt;p&gt;So I made a automator script to open my notes in VS Code with a keyboard shortcut from any application.&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/how-i-take-notes-using-vs-code-and-github-1.DnBKcy5B_Z1wkUXW.webp&quot; alt=&quot;Screenshot of Menu Bar with Shortcuts&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;524&quot; height=&quot;341&quot;&gt;&lt;/p&gt;
&lt;p&gt;You can reproduce it by:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Open Automator App&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Create New Quick Action&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/how-i-take-notes-using-vs-code-and-github-3.BxsHEudH_9x6i5.webp&quot; alt=&quot;Screenshot of New Quick Action&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;572&quot; height=&quot;506&quot;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Change &lt;code&gt;Workflow receives current&lt;/code&gt; to no input in any application&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/how-i-take-notes-using-vs-code-and-github-4.f7onOvug_ZlYtlv.webp&quot; alt=&quot;Screenshot of Workflow receives current&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;521&quot; height=&quot;117&quot;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Drag Run Shell Script from the sidebar to the workflow pane&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/how-i-take-notes-using-vs-code-and-github-5.wPP8L0Or_2i4jCl.webp&quot; alt=&quot;Screenshot of Run Shell Script&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1096&quot; height=&quot;400&quot;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add &lt;code&gt;opennotes&lt;/code&gt; to the text box&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/how-i-take-notes-using-vs-code-and-github-6.CzK39NHb_Z1klU9o.webp&quot; alt=&quot;Screenshot of text box&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;556&quot; height=&quot;282&quot;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Now go to System Preferences &gt; Keyboard &gt; Shortcuts and Services in the left pane. Find the service you just created, it should be under General.&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/how-i-take-notes-using-vs-code-and-github-7.DIbcn5wo_Z27SbOd.webp&quot; alt=&quot;Screenshot of System Preferences&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;622&quot; height=&quot;361&quot;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;You should see add shortcut when you hover over it, I have used &lt;code&gt;CMD + SHIFT + &apos;&lt;/code&gt; as my shortcut.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;And finally add this code to your &lt;code&gt;bash_profile&lt;/code&gt; to actually open VS code:&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;alias&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; opennotes&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;cd &amp;#x26;&amp;#x26; cd projects/notes &amp;#x26;&amp;#x26; code .&apos;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;pros-of-this-setup&quot;&gt;Pros of this setup&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Offline Access&lt;/li&gt;
&lt;li&gt;No new apps needed&lt;/li&gt;
&lt;li&gt;Own your data&lt;/li&gt;
&lt;li&gt;Everything is open source, no need for any unreliable branded apps.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;cons-of-this-setup&quot;&gt;Cons of this Setup&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;No mobile access, you can view GitHub on the web. But editing is not that great.&lt;/li&gt;
&lt;li&gt;Limited to markdown, I miss notion blocks.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;i-love-it-so-far&quot;&gt;I love it so far…&lt;/h2&gt;
&lt;p&gt;I’ve been using this setup for 2 months and I love it so far, but I don’t know how long I can go without editing on my mobile or iPad. For now I’ve been adding tasks in Todoist and copying to my notes when I’m on my laptop.&lt;/p&gt;
&lt;p&gt;So there are few problems, but in this moment I’m happy with this.&lt;/p&gt;</content:encoded><author>Praveen Juge (hi@praveenjuge.com)</author></item><item><title>My 2020 Goals</title><link>https://praveenjuge.com/blog/my-2020-goals/</link><guid isPermaLink="true">https://praveenjuge.com/blog/my-2020-goals/</guid><description>Another year, another set of goals to keep this year interesting. Last year I failed almost 70% of my goals so let&apos;s set a new record this year.</description><pubDate>Tue, 07 Jan 2020 04:01:53 GMT</pubDate><content:encoded>Another year, another set of goals to keep this year interesting. Last year I failed almost 70% of my goals so let&apos;s set a new record this year.&lt;h3 id=&quot;dev-goals&quot;&gt;Dev Goals:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Complete the &lt;a href=&quot;https://www.beginnerjavascript.com/&quot;&gt;Beginner Javascript&lt;/a&gt; course fully with practice.&lt;/li&gt;
&lt;li&gt;Go to intermediate levels on &lt;a href=&quot;https://reactjs.org/&quot;&gt;React&lt;/a&gt; and &lt;a href=&quot;https://svelte.dev/&quot;&gt;Svelte&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Keep my &lt;a href=&quot;https://github.com/praveenjuge&quot;&gt;GitHub Profile&lt;/a&gt; alive with daily commits to side projects.&lt;/li&gt;
&lt;li&gt;Create a daily habit tracker web app for personal use.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;design-goals&quot;&gt;Design Goals:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Learn more about UI, UX and Illustrations with courses on Skillshare.&lt;/li&gt;
&lt;li&gt;Keep &lt;a href=&quot;https://dribbble.com/praveenjuge&quot;&gt;Dribbble&lt;/a&gt; and &lt;a href=&quot;https://instagram.com/praveenjuge&quot;&gt;Instagram&lt;/a&gt; alive with daily posts.&lt;/li&gt;
&lt;li&gt;Learn other design tools such as Illustrator, Photoshop and Procreate.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;content-goals&quot;&gt;Content Goals:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;New blog post every two weeks.&lt;/li&gt;
&lt;li&gt;New YouTube video every two weeks.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;lets-see-how-my-goals-go-this-year&quot;&gt;Let’s see how my goals go this year.&lt;/h3&gt;</content:encoded><author>Praveen Juge (hi@praveenjuge.com)</author></item><item><title>Speed up Audiobooks using Audacity Macros</title><link>https://praveenjuge.com/blog/audacity-macro-speed-up-bulk-audiobooks/</link><guid isPermaLink="true">https://praveenjuge.com/blog/audacity-macro-speed-up-bulk-audiobooks/</guid><description>I came by an iPod Shuffle recently, it worked great but I used to listen to my audiobooks at 2x speed which the shuffle does not have. But audacity is there to help.</description><pubDate>Mon, 18 Nov 2019 09:21:22 GMT</pubDate><content:encoded>I came by an iPod Shuffle recently, it worked great but I used to listen to my audiobooks at 2x speed which the shuffle does not have. But audacity is there to help.&lt;h3 id=&quot;step-1-download-or-update-audacity&quot;&gt;Step 1: Download or Update Audacity&lt;/h3&gt;
&lt;p&gt;You can download the latest version of Audacity &lt;a href=&quot;https://www.audacityteam.org/download/&quot;&gt;here&lt;/a&gt;. Make sure it’s the latest version, I’m on a mac and at the time of writing this the latest version is &lt;code&gt;2.3.2&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&quot;step-2-open-macros-in-audacity&quot;&gt;Step 2: Open Macros in Audacity&lt;/h3&gt;
&lt;p&gt;Once you open audacity you can go to &lt;code&gt;Tools -&gt; Macros...&lt;/code&gt; to open this window.&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/1.BqwM2n1p_1zKSQG.webp&quot; alt=&quot;&amp;#34;Audacity Macro Window&amp;#34;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1029&quot; height=&quot;841&quot;&gt;&lt;/p&gt;
&lt;p&gt;Click on &lt;code&gt;New&lt;/code&gt; to create a new macro and give a new name to your macro.&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/2.iXEnM0fp_1o98Qy.webp&quot; alt=&quot;&amp;#34;New Macro&amp;#34;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;367&quot; height=&quot;178&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;step-3-add-steps-to-your-macro&quot;&gt;Step 3: Add steps to your macro&lt;/h3&gt;
&lt;p&gt;On the edit steps pane, click on the &lt;code&gt;Insert&lt;/code&gt; button. You will see another window where you can add the steps to be taken when this macro runs.&lt;/p&gt;
&lt;p&gt;In our case, we need to speed up our audiobooks. Now you will see the option to change speed, don’t use that unless you want to hear chipmunks. Use the &lt;code&gt;Change Tempo&lt;/code&gt; option and click on edit parameters in the same window.&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/3.BfZImV-1_1wHSRN.webp&quot; alt=&quot;&amp;#34;Change Tempo&amp;#34;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1008&quot; height=&quot;797&quot;&gt;&lt;/p&gt;
&lt;p&gt;Here you can increase the percentage to match with the speed you want, for &lt;code&gt;1.5x&lt;/code&gt; speed of the original audio, increase the percentage to &lt;code&gt;50&lt;/code&gt;, for &lt;code&gt;2.0x&lt;/code&gt; change percentage to &lt;code&gt;100&lt;/code&gt;. Then click on ok, you can see the step added.&lt;/p&gt;
&lt;p&gt;By doing this, it won’t get saved anywhere, so let’s add another step. Click on insert and find the &lt;code&gt;Export as MP3&lt;/code&gt; step. This will make sure the contents would be exported.&lt;/p&gt;
&lt;h3 id=&quot;step-4-lets-convert&quot;&gt;Step 4: Let’s convert&lt;/h3&gt;
&lt;p&gt;If all goes well you should see something like this:&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/4.CQzgFwrf_ZsgMMT.webp&quot; alt=&quot;&amp;#34;Macro Steps&amp;#34;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1052&quot; height=&quot;841&quot;&gt;&lt;/p&gt;
&lt;p&gt;Now click on &lt;code&gt;Apply Macro to: Files&lt;/code&gt; button below and select the files you want to convert.&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/5.DQfZ_pMy_Z1DPECJ.webp&quot; alt=&quot;&amp;#34;Selecting audiobooks&amp;#34;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;911&quot; height=&quot;560&quot;&gt;&lt;/p&gt;
&lt;p&gt;When you open the files the macro would start to run and after completion, you will see the converted files in the same origin folder under a new folder name called &lt;code&gt;macro-output&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img  src=&quot;/_astro/6.8lh4C1dB_2n5DXJ.webp&quot; alt=&quot;&amp;#34;Converted audiobooks&amp;#34;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1064&quot; height=&quot;620&quot;&gt;&lt;/p&gt;
&lt;p&gt;Make sure you save the macro for future use. That’s all, enjoy!&lt;/p&gt;</content:encoded><author>Praveen Juge (hi@praveenjuge.com)</author></item></channel></rss>