<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Kushagra</title>
    <description>The latest articles on Forem by Kushagra (@aerospace-prog).</description>
    <link>https://forem.com/aerospace-prog</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3445127%2F3f2b9955-1dbf-4329-9ad3-f960b6c34515.png</url>
      <title>Forem: Kushagra</title>
      <link>https://forem.com/aerospace-prog</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/aerospace-prog"/>
    <language>en</language>
    <item>
      <title>🕵️‍♂️ I Built a Privacy-First PDF Toolkit Because Most “Free” Tools Are Sketchy</title>
      <dc:creator>Kushagra</dc:creator>
      <pubDate>Thu, 12 Feb 2026 04:36:52 +0000</pubDate>
      <link>https://forem.com/aerospace-prog/i-built-a-privacy-first-pdf-toolkit-because-most-free-tools-are-sketchy-26ol</link>
      <guid>https://forem.com/aerospace-prog/i-built-a-privacy-first-pdf-toolkit-because-most-free-tools-are-sketchy-26ol</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Whenever you Google “merge pdf online free”, you’re basically playing Russian roulette with your data.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Most of the top tools upload your files to their servers.&lt;br&gt;
Contracts. Bank statements. ID scans. Confidential PDFs.&lt;/p&gt;

&lt;p&gt;Even if they say “we delete it after 1 hour” — that’s still 1 hour too long.&lt;/p&gt;

&lt;p&gt;So I decided to build something different.&lt;/p&gt;

&lt;p&gt;I built PixelDoc — a 100% client-side PDF toolkit that runs entirely in your browser.&lt;/p&gt;

&lt;p&gt;👉 Live: &lt;a href="https://pixeldoc.netlify.app" rel="noopener noreferrer"&gt;https://pixeldoc.netlify.app&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;🧠 The Moment That Triggered This&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I needed to merge large bank statements for a loan application.&lt;/p&gt;

&lt;p&gt;Problems I hit:&lt;br&gt;
    • Upload failed because of weak internet&lt;br&gt;
    • File size limit (50MB+) behind paywall&lt;br&gt;
    • “Upgrade to Pro” wall for basic features&lt;br&gt;
    • Privacy anxiety&lt;/p&gt;

&lt;p&gt;That’s when it hit me:&lt;/p&gt;

&lt;p&gt;Modern browsers are powerful enough to handle PDF processing locally.&lt;/p&gt;

&lt;p&gt;Why are we still uploading everything to random servers?&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;🔐 The Core Philosophy&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;PixelDoc follows one strict rule:&lt;/p&gt;

&lt;p&gt;If your browser can do it — the server shouldn’t.&lt;/p&gt;

&lt;p&gt;There is no backend processing.&lt;br&gt;
No document uploads.&lt;br&gt;
No temporary storage.&lt;br&gt;
No tracking scripts spying on files.&lt;/p&gt;

&lt;p&gt;Everything runs in your device memory.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;🛠 Tech Stack Breakdown&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This wasn’t just a weekend HTML project.&lt;br&gt;
I wanted performance + privacy + good UX.&lt;/p&gt;

&lt;p&gt;⚛️ Frontend&lt;br&gt;
    • React + Vite (fast build + lightning HMR)&lt;br&gt;
    • Tailwind CSS (clean utility design)&lt;br&gt;
    • Framer Motion (smooth transitions)&lt;/p&gt;

&lt;p&gt;📄 PDF Processing&lt;br&gt;
    • pdf-lib (pure JavaScript PDF manipulation)&lt;/p&gt;

&lt;p&gt;🧠 AI / ML (In Browser)&lt;br&gt;
    • &lt;a class="mentioned-user" href="https://dev.to/imgly"&gt;@imgly&lt;/a&gt;/background-removal (WebAssembly + ONNX)&lt;br&gt;
    • tesseract.js (OCR in Web Workers)&lt;/p&gt;

&lt;p&gt;🖼 Image Tools&lt;br&gt;
    • browser-image-compression&lt;br&gt;
    • Canvas API&lt;/p&gt;

&lt;p&gt;🚀 Hosting&lt;br&gt;
    • Netlify (static deployment)&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;🔎 How It Works (Under the Hood)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The interesting part?&lt;br&gt;
There is no API.&lt;/p&gt;

&lt;p&gt;Everything is done using ArrayBuffers directly in memory.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;1️⃣ Merging PDFs Locally&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Instead of uploading files to a server, the browser reads them as ArrayBuffers and merges them in memory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;PDFDocument&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;pdf-lib&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;mergePDFs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;files&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;mergedPdf&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;PDFDocument&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;file&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;files&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;arrayBuffer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;file&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;arrayBuffer&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;pdf&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;PDFDocument&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arrayBuffer&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;copiedPages&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;mergedPdf&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;copyPages&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pdf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;pdf&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getPageIndices&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
    &lt;span class="nx"&gt;copiedPages&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;mergedPdf&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addPage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;savedBytes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;mergedPdf&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;save&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="c1"&gt;// Trigger download&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No network request.&lt;br&gt;
No server storage.&lt;br&gt;
Just browser memory.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;2️⃣ AI Background Removal (Fully Client-Side)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This was the hardest part.&lt;/p&gt;

&lt;p&gt;The ONNX model is downloaded once and cached.&lt;br&gt;
Inference runs via WebAssembly using the user’s CPU/GPU.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;imglyRemoveBackground&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@imgly/background-removal&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;removeBg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;imageSrc&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;blob&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;imglyRemoveBackground&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;imageSrc&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;URL&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createObjectURL&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;blob&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nf"&gt;setResult&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;AI Error:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This means:&lt;br&gt;
    • No cloud AI&lt;br&gt;
    • No image uploads&lt;br&gt;
    • No API keys&lt;br&gt;
    • No usage limits&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;✨ Current Features&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;PixelDoc is no longer “just merge”.&lt;/p&gt;

&lt;p&gt;📄 PDF Tools&lt;br&gt;
    • Merge&lt;br&gt;
    • Split&lt;br&gt;
    • Compress&lt;br&gt;
    • Protect / Unlock&lt;br&gt;
    • OCR&lt;br&gt;
    • PDF → Text&lt;/p&gt;

&lt;p&gt;🖼 Image Tools&lt;br&gt;
    • AI Background Removal&lt;br&gt;
    • HEIC → JPG (iPhone support)&lt;br&gt;
    • Compress&lt;br&gt;
    • Resize&lt;/p&gt;

&lt;p&gt;📑 Converters&lt;br&gt;
    • Word → PDF&lt;br&gt;
    • Excel → PDF&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;⚡ Performance Optimizations&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Because it’s client-side, initial load time is critical.&lt;/p&gt;

&lt;p&gt;So I implemented:&lt;/p&gt;

&lt;p&gt;🧩 Code Splitting&lt;/p&gt;

&lt;p&gt;Heavy libraries like tesseract.js and pdf-lib are lazy-loaded only when needed.&lt;/p&gt;

&lt;p&gt;🧠 Service Worker Caching&lt;/p&gt;

&lt;p&gt;Models and large WASM files are cached after first use.&lt;/p&gt;

&lt;p&gt;📈 SEO Strategy&lt;/p&gt;

&lt;p&gt;Even though it’s a React SPA, I added:&lt;br&gt;
    • Rich JSON-LD (FAQPage schema)&lt;br&gt;
    • Structured How-to guides&lt;br&gt;
    • Tool-specific landing content&lt;/p&gt;

&lt;p&gt;Trying to avoid the “SPA = SEO disaster” problem.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;💭 What I Learned&lt;/strong&gt;&lt;br&gt;
    1.  Browsers are insanely powerful now.&lt;br&gt;
    2.  Privacy-first tools are possible — we just don’t prioritize them.&lt;br&gt;
    3.  WebAssembly changes what’s possible in frontend engineering.&lt;br&gt;
    4.  Most SaaS tools add servers where they aren’t necessary.&lt;br&gt;
    5.  Performance thinking makes you a better engineer.&lt;/p&gt;




&lt;p&gt;Tell me where it fails.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://pixeldoc.netlify.app" rel="noopener noreferrer"&gt;https://pixeldoc.netlify.app&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you found this interesting, drop a ❤️&lt;br&gt;
I’m planning to write more deep-dive breakdowns on privacy-first engineering.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>webdev</category>
      <category>react</category>
      <category>javascript</category>
      <category>opensource</category>
    </item>
    <item>
      <title>The Ultimate Guide to Mastering GSAP Animations</title>
      <dc:creator>Kushagra</dc:creator>
      <pubDate>Sat, 06 Dec 2025 11:57:52 +0000</pubDate>
      <link>https://forem.com/aerospace-prog/the-ultimate-guide-to-mastering-gsap-animations-43kh</link>
      <guid>https://forem.com/aerospace-prog/the-ultimate-guide-to-mastering-gsap-animations-43kh</guid>
      <description>&lt;p&gt;&lt;strong&gt;Why GSAP? — Because Web Should Move&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Have you ever visited a site where as you scroll, elements fade in just at the right moment, backgrounds move with depth, buttons “pop” subtly when hovered, or images animate smoothly instead of just jumping into place? That’s the kind of fluid, immersive experience that feels “premium.”&lt;/p&gt;

&lt;p&gt;That magic often comes from GSAP — the GreenSock Animation Platform. It’s a JavaScript animation library trusted by thousands of developers and used on many production websites.&lt;/p&gt;

&lt;p&gt;What makes GSAP stand out:&lt;br&gt;
    - Performance &amp;amp; smoothness — even complex animations (SVG, DOM, canvas) stay smooth across browsers/devices.  ￼&lt;br&gt;
    - Flexibility &amp;amp; control — animate almost any property (position, scale, rotation, opacity, colors, SVG paths…) with precise timing, easing, and sequencing.  ￼&lt;br&gt;
    - Beyond basic animation — support for timelines, scroll-based animations, plugins for advanced effects.  ￼&lt;/p&gt;

&lt;p&gt;In short: if you want your UI to feel alive, GSAP is 💚 the go-to.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Getting Started with GSAP — The Essentials&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Include GSAP&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You have a few options: use a CDN or install via npm/yarn if you’re using a build system. For a quick start with plain HTML, you can simply do:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.4/gsap.min.js"&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script src="script.js"&amp;gt;&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Place the GSAP script before your own JS so your code can access it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Animate with Tweens — The Basics&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;At its core, GSAP’s simplest tool is a “tween”: move or animate a value from one state to another over time.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;gsap.to(".box", { duration: 2, x: 300, rotation: 360, scale: 1.2, opacity: 0.8 });
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will move .box 300px to the right, rotate it, scale it up, and change its opacity — all smoothly over 2 seconds.&lt;/p&gt;

&lt;p&gt;You also have:&lt;br&gt;
    gsap.from() — animate from a defined start state to the element’s original state.&lt;br&gt;
    gsap.fromTo() — define both start and end states explicitly.  ￼&lt;/p&gt;

&lt;p&gt;Tweens are great for simple effects: hover animations, entrance/fade-ins, moving elements, etc.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Sequencing with Timelines&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When more than one animation needs to happen in a choreographed order — you don’t want to chain delays manually — a timeline helps.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const tl = gsap.timeline();
tl.to(".box", { x: 100, duration: 1 })
  .to(".box", { y: 100, duration: 1 })
  .to(".box", { opacity: 0, duration: 0.5 });
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now .box will move right, then down, then fade out — in order.&lt;/p&gt;

&lt;p&gt;Timelines give you more power: you can overlap animations, nest timelines, control playback (pause, reverse, repeat), and synchronize animations with other events.  &lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Going Beyond — Scroll, Plugins &amp;amp; Real-World Animations&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;GSAP isn’t just for simple entrance/hover effects. It’s powerful enough to drive complex, immersive animation sequences — including scroll-driven effects, interactive components, canvas/SVG animations, and more.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scroll-Triggered Animations: Meet ScrollTrigger&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;With the official plugin ScrollTrigger, you can hook animations to scroll position: pin elements, animate on scroll, scrub timelines forward/backward, and more.&lt;/p&gt;

&lt;p&gt;Example (vanilla JS + GSAP):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;gsap.registerPlugin(ScrollTrigger);

gsap.to(".hero-image", {
  scrollTrigger: {
    trigger: ".hero-image",
    start: "top center",
    end: "bottom top",
    scrub: 1,
    pin: true,
    markers: true
  },
  scale: 1.3,
  opacity: 0.8,
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As you scroll, .hero-image will scale and fade — and the element will stay pinned while the scroll animation plays out. Combine this with timelines and you can build complex scroll-based storytelling.&lt;/p&gt;

&lt;p&gt;👉 On top of ScrollTrigger, there are many other useful plugins (text animation, motion along paths, draggable UIs, etc.) — a big part of what makes GSAP so versatile.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SVG / Canvas / Performance-Friendly Animations&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;GSAP works nicely with SVGs, canvas, and other DOM elements — meaning you can animate vector graphics, draw animations, morph shapes, animate paths, etc. All of it remains performant.  &lt;/p&gt;

&lt;p&gt;This opens up a world of possibilities: animated illustrations, interactive charts, dynamic hero backgrounds — stuff that feels far more alive than static images or basic CSS transitions.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Real-World Example: Simple Fade-In + Scroll Parallax Landing Page&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here’s a lightweight example of how you might combine HTML + CSS + GSAP + ScrollTrigger to build a minimal “hero section + scroll fade-in” effect.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!-- index.html --&amp;gt;
&amp;lt;section class="hero"&amp;gt;
  &amp;lt;h1&amp;gt;Welcome to My Site&amp;lt;/h1&amp;gt;
  &amp;lt;p class="subtitle"&amp;gt;We build immersive web experiences.&amp;lt;/p&amp;gt;
&amp;lt;/section&amp;gt;

&amp;lt;section class="content"&amp;gt;
  &amp;lt;div class="card"&amp;gt;Feature 1&amp;lt;/div&amp;gt;
  &amp;lt;div class="card"&amp;gt;Feature 2&amp;lt;/div&amp;gt;
  &amp;lt;div class="card"&amp;gt;Feature 3&amp;lt;/div&amp;gt;
&amp;lt;/section&amp;gt;

&amp;lt;!-- ... --&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.hero { height: 100vh; display: flex; flex-direction: column; justify-content: center; align-items: center; }
.content { padding: 4rem; }
.card { opacity: 0; transform: translateY(50px); margin-bottom: 2rem; background: #fff; padding: 2rem; border-radius: 8px; }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// script.js
gsap.registerPlugin(ScrollTrigger);

gsap.to("section.hero h1", { duration: 1, y: -20, opacity: 1, ease: "power3.out" });
gsap.to("section.hero p.subtitle", { duration: 1, y: 0, opacity: 1, delay: 0.3, ease: "power3.out" });

gsap.utils.toArray(".card").forEach((card, i) =&amp;gt; {
  gsap.to(card, {
    scrollTrigger: {
      trigger: card,
      start: "top 80%",
      end: "top 50%",
      scrub: true,
    },
    y: 0,
    opacity: 1,
    duration: 0.8,
    ease: "power2.out",
    delay: i * 0.2
  });
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;What happens:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;On page load, hero &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt; and subtitle fade in beautifully.&lt;/li&gt;
&lt;li&gt;As you scroll into the content section, cards slide up and fade in one after another.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Simple — yet, it feels modern, interactive, and polished&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Where to Learn More&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you want to go deeper:&lt;br&gt;
    • Official GSAP Docs&lt;br&gt;
&lt;a href="https://gsap.com/docs/" rel="noopener noreferrer"&gt;https://gsap.com/docs/&lt;/a&gt;&lt;br&gt;
    • GSAP Demos (highly inspiring)&lt;br&gt;
&lt;a href="https://madewithgsap.com/" rel="noopener noreferrer"&gt;https://madewithgsap.com/&lt;/a&gt;&lt;br&gt;
    • Free Courses (GSAP basics → advanced)&lt;br&gt;
&lt;a href="https://www.classcentral.com/subject/gsap" rel="noopener noreferrer"&gt;https://www.classcentral.com/subject/gsap&lt;/a&gt;&lt;br&gt;
    • Creative coding articles &amp;amp; examples&lt;br&gt;
&lt;a href="https://blog.radialcode.com/" rel="noopener noreferrer"&gt;https://blog.radialcode.com/&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;🎉 Final Thoughts&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;GSAP is the easiest way to make your website feel:&lt;br&gt;
    • more modern&lt;br&gt;
    • more interactive&lt;br&gt;
    • more premium&lt;br&gt;
    • more polished&lt;/p&gt;

&lt;p&gt;Whether you’re building a portfolio, startup landing page, or a client website, GSAP will make your UI stand out immediately.&lt;/p&gt;

&lt;p&gt;If you’ve never used it — start today.&lt;br&gt;
Animate one element. Then a section.&lt;br&gt;
Then the scroll.&lt;/p&gt;

&lt;p&gt;Before you realize it, you’re building animations that look like they came out of a top creative agency.&lt;/p&gt;

&lt;p&gt;Happy animating! 💚⚡&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>gsap</category>
      <category>webdev</category>
      <category>frontend</category>
    </item>
    <item>
      <title>What I Learned Building 20+ Real Projects as a CS + AI/ML Student :- The Practical Roadmap I Wish I Had on Day 1</title>
      <dc:creator>Kushagra</dc:creator>
      <pubDate>Sat, 29 Nov 2025 13:34:39 +0000</pubDate>
      <link>https://forem.com/aerospace-prog/what-i-learned-building-20-real-projects-as-a-cs-aiml-student-the-practical-roadmap-i-wish-i-174m</link>
      <guid>https://forem.com/aerospace-prog/what-i-learned-building-20-real-projects-as-a-cs-aiml-student-the-practical-roadmap-i-wish-i-174m</guid>
      <description>&lt;p&gt;&lt;strong&gt;When I started Computer Science with a specialization in AI/ML, I made one decision early&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;I will not just “learn concepts.” I will build things.&lt;br&gt;
This one rule transformed everything.&lt;/p&gt;

&lt;p&gt;Over the last year, I built projects in:&lt;br&gt;
    -   AI &amp;amp; Machine Learning&lt;br&gt;
    -   Android (Kotlin + Jetpack)&lt;br&gt;
    -   Full-Stack MERN&lt;br&gt;
    -   React Native + Expo&lt;br&gt;
    -   Docker + Microservices&lt;br&gt;
    -   Open-source (GSoC, C4GT, NumFOCUS)&lt;/p&gt;

&lt;p&gt;Here’s a complete roadmap — the way I wish someone explained to me when I started.&lt;br&gt;
Learn → Build → Break → Fix → Contribute → Scale.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;1. Foundations That Actually Matter (Not the Useless Stuff We Memorize)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Forget memorizing definitions. Focus on:&lt;/p&gt;

&lt;p&gt;✔️ Data Structures &amp;amp; Algorithms (by building apps)&lt;/p&gt;

&lt;p&gt;Not just solving problems -&lt;br&gt;
Use them in real apps like:&lt;br&gt;
    -   A search engine using tries&lt;br&gt;
    -   A pathfinding visualizer&lt;br&gt;
    -   A recommendation system&lt;/p&gt;

&lt;p&gt;✔️ Object-Oriented Design (OOP) in Real Code&lt;/p&gt;

&lt;p&gt;I used OOP heavily in:&lt;br&gt;
    -   Android MVVM&lt;br&gt;
    -   Backend API design&lt;br&gt;
    -   Microservices&lt;br&gt;
    -   Design Patterns (Builder, Strategy, Singleton, etc.)&lt;/p&gt;

&lt;p&gt;When you apply OOP to real codebases, it finally makes sense.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;2. AI/ML That Companies Actually Use&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Most students stop at:&lt;br&gt;
    -   Linear regression&lt;br&gt;
    -   Classification&lt;br&gt;
    -   Titanic dataset&lt;/p&gt;

&lt;p&gt;But real ML looks like this:&lt;/p&gt;

&lt;p&gt;✔️ Building ML Systems End-to-End&lt;br&gt;
    -   Data cleaning&lt;br&gt;
    -   Feature engineering&lt;br&gt;
    -   Model training&lt;br&gt;
    -   Vectorization&lt;br&gt;
    -   Deploying models&lt;br&gt;
    -   Monitoring performance&lt;/p&gt;

&lt;p&gt;✔️ Cool AI Projects I Built:&lt;br&gt;
    -   A complete recommendation engine&lt;br&gt;
    -   A Spam Detector using NLP&lt;br&gt;
    -   A face recognition system&lt;br&gt;
    -   A real-time ML inference API using Python + FastAPI&lt;/p&gt;

&lt;p&gt;These get real attention on GitHub &amp;amp; resumes.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;3. Android Development (Kotlin) — Where I Grew the Most&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I built multiple apps using modern Android architecture:&lt;/p&gt;

&lt;p&gt;What I Learned:&lt;br&gt;
    -   MVVM architecture&lt;br&gt;
    -   RecyclerView with Pagination&lt;br&gt;
    -   Coroutines + Flow&lt;br&gt;
    -   Room &amp;amp; SQLite&lt;br&gt;
    -   Retrofit + API integration&lt;br&gt;
    -   Dagger &amp;amp; Dependency Injection&lt;br&gt;
    -   Background Services&lt;br&gt;
    -   Clean Architecture&lt;br&gt;
    -   Jetpack Compose basics&lt;/p&gt;

&lt;p&gt;My favorite Android app:&lt;/p&gt;

&lt;p&gt;MilkBuddy — A full app with:&lt;br&gt;
    -   Firebase Realtime Database&lt;br&gt;
    -   Foreground Service&lt;br&gt;
    -   TabLayout&lt;br&gt;
    -   Provider&lt;br&gt;
    -   Offline storage&lt;/p&gt;

&lt;p&gt;This is the kind of app that gets recruiters interested.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;4. Full-Stack Web Dev (MERN) — Where You Gain “System Thinking”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In my HealthSetu project, I learned:&lt;br&gt;
    -   JWT Authentication&lt;br&gt;
    -   Role-Based Access Control (RBAC)&lt;br&gt;
    -   Server-Side Pagination&lt;br&gt;
    -   Google Calendar API&lt;br&gt;
    -   Infinite Scroll&lt;br&gt;
    -   Admin dashboards&lt;br&gt;
    -   React + Vite performance optimizations&lt;/p&gt;

&lt;p&gt;Full-stack development teaches you how systems talk to each other — which is core to being a good engineer.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;5. Docker + Microservices — My Turning Point&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Once I containerized apps using Docker, everything clicked.&lt;/p&gt;

&lt;p&gt;✔️ What I practiced:&lt;br&gt;
    -   Dockerfile creation&lt;br&gt;
    -   NGINX reverse proxy&lt;br&gt;
    -   Microservice design&lt;br&gt;
    -   REST APIs with Go&lt;br&gt;
    -   Backend-to-backend communication&lt;/p&gt;

&lt;p&gt;Now I can deploy:&lt;br&gt;
    -   ML APIs&lt;br&gt;
    -   Node services&lt;br&gt;
    -   Microservice clusters&lt;br&gt;
    -   Android backend servers&lt;/p&gt;

&lt;p&gt;This is the exact skill companies want.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;6. Open-Source &amp;amp; GSoC — The Career Multiplier&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I began contributing to:&lt;br&gt;
    -   NumFOCUS projects&lt;br&gt;
    -   Community Health Toolkit&lt;br&gt;
    -   Signal Android client&lt;br&gt;
    -   C4GT projects&lt;br&gt;
    -   Tekdi SaaS platform&lt;/p&gt;

&lt;p&gt;What open source taught me:&lt;br&gt;
    -   Reading large codebases&lt;br&gt;
    -   Creating real pull requests&lt;br&gt;
    -   Debugging like a professional&lt;br&gt;
    -   Documentation writing&lt;br&gt;
    -   Team collaboration&lt;br&gt;
    -   Code reviews&lt;/p&gt;

&lt;p&gt;This is the shortcut to becoming a strong engineer early.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;7. A Roadmap YOU Can Follow (From Zero → Job Ready)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1 — Learn the Essentials&lt;/strong&gt;&lt;br&gt;
    -   DSA basics&lt;br&gt;
    -   Git + GitHub&lt;br&gt;
    -   Python&lt;br&gt;
    -   JavaScript&lt;br&gt;
    -   SQL&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2 — Build Practical Projects&lt;/strong&gt;&lt;br&gt;
    -   3 Android apps&lt;br&gt;
    -   3 AI/ML models&lt;br&gt;
    -   2 full-stack apps&lt;br&gt;
    -   1 microservice backend&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3 — Contribute to Open Source&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Start with issues labelled:&lt;/p&gt;

&lt;p&gt;good first issue • help wanted • documentation&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4 — Prepare for Internships&lt;/strong&gt;&lt;br&gt;
    -   Build a clean GitHub&lt;br&gt;
    -   Write Dev.to blogs&lt;br&gt;
    -   Publish open-source work&lt;br&gt;
    -   Share project architecture diagrams&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5 — Create a Personal Brand&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
        -   DEV.to writing&lt;br&gt;
    -   LinkedIn weekly posts&lt;br&gt;
    -   GitHub active contributions&lt;br&gt;
    -   Portfolio website&lt;/p&gt;

&lt;p&gt;This roadmap puts you ahead of 95% of students.&lt;/p&gt;




&lt;p&gt;Closing Thoughts&lt;/p&gt;

&lt;p&gt;You don’t need to be perfect.&lt;br&gt;
You just need to build consistently.&lt;/p&gt;

&lt;p&gt;Whether it’s:&lt;br&gt;
    -   Android&lt;br&gt;
    -   AI/ML&lt;br&gt;
    -   MERN&lt;br&gt;
    -   React Native&lt;br&gt;
    -   Microservices&lt;br&gt;
    -   Open Source&lt;/p&gt;

&lt;p&gt;Pick something → Build → Share → Learn → Repeat.&lt;/p&gt;

&lt;p&gt;This is how you grow.🫶&lt;/p&gt;




&lt;p&gt;If your team works on AI, Android, backend, or open-source — I’m open to internships and collaboration!&lt;/p&gt;

&lt;p&gt;Let’s connect:&lt;br&gt;
    -   GitHub: &lt;a href="https://github.com/Aerospace-prog" rel="noopener noreferrer"&gt;https://github.com/Aerospace-prog&lt;/a&gt;&lt;br&gt;
    -   LinkedIn: &lt;a href="http://www.linkedin.com/in/kushagra-pandey22" rel="noopener noreferrer"&gt;www.linkedin.com/in/kushagra-pandey22&lt;/a&gt;&lt;/p&gt;

</description>
      <category>computerscience</category>
      <category>ai</category>
      <category>android</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Spotlight: A Modern Social Media App Built with React Native + Expo</title>
      <dc:creator>Kushagra</dc:creator>
      <pubDate>Thu, 30 Oct 2025 08:01:15 +0000</pubDate>
      <link>https://forem.com/aerospace-prog/spotlight-a-modern-social-media-app-built-with-react-native-expo-24m3</link>
      <guid>https://forem.com/aerospace-prog/spotlight-a-modern-social-media-app-built-with-react-native-expo-24m3</guid>
      <description>&lt;p&gt;I’ve always been fascinated by how social apps bring people together. So I decided to build one myself — introducing Spotlight 🌟, a mobile-first social media app where you can share moments, connect with friends, and discover new people.&lt;br&gt;
✨ Features include:&lt;br&gt;
•     Real-time feed&lt;br&gt;
•     Profiles &amp;amp; following&lt;br&gt;
•     Notifications&lt;br&gt;
•     Search&lt;br&gt;
•     Smooth, modern UI&lt;br&gt;
📱 Try it instantly: &lt;a href="https://github.com/Aerospace-prog/SpotLight-App/releases/download/v1.0.0/SpotLight.Social.Media.App.apk" rel="noopener noreferrer"&gt;APK Download&lt;/a&gt;&lt;br&gt;
💻 Full code: &lt;a href="https://github.com/Aerospace-prog/" rel="noopener noreferrer"&gt;GitHub Repo&lt;/a&gt;&lt;br&gt;
If you’d like to support my open-source journey and help me keep building apps like this, you can buy me a coffee ☕: &lt;a href="https://buymeacoffee.com/aerospace.prog" rel="noopener noreferrer"&gt;BUY ME COFFEE&lt;/a&gt;&lt;/p&gt;

</description>
      <category>reactnative</category>
      <category>opensource</category>
      <category>mobile</category>
      <category>buildinpublic</category>
    </item>
  </channel>
</rss>
