<?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: Aamna Majid</title>
    <description>The latest articles on Forem by Aamna Majid (@aamna_majid).</description>
    <link>https://forem.com/aamna_majid</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%2F3399067%2F8d647a15-2c4c-446b-93f0-305b261156cb.png</url>
      <title>Forem: Aamna Majid</title>
      <link>https://forem.com/aamna_majid</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/aamna_majid"/>
    <language>en</language>
    <item>
      <title>📱 Optimizing React Apps for Mobile Performance: A Practical Guide</title>
      <dc:creator>Aamna Majid</dc:creator>
      <pubDate>Wed, 06 Aug 2025 06:57:40 +0000</pubDate>
      <link>https://forem.com/aamna_majid/optimizing-react-apps-for-mobile-performance-a-practical-guide-1dco</link>
      <guid>https://forem.com/aamna_majid/optimizing-react-apps-for-mobile-performance-a-practical-guide-1dco</guid>
      <description>&lt;p&gt;Mobile users expect fast, smooth experiences — but React apps can sometimes struggle on slower devices and networks. In this article, I’ll share practical tips and techniques to optimize your React app for &lt;strong&gt;better mobile performance&lt;/strong&gt; without sacrificing functionality.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Why Mobile Performance Matters
&lt;/h2&gt;

&lt;p&gt;Mobile devices generally have less powerful CPUs, limited memory, and slower network connections compared to desktops. According to Google, &lt;strong&gt;53% of mobile site visits are abandoned if a page takes longer than 3 seconds to load&lt;/strong&gt;. Poor mobile performance means frustrated users, lower engagement, and ultimately lost revenue.&lt;/p&gt;

&lt;p&gt;React apps, with their heavy JavaScript bundles and dynamic rendering, can sometimes exacerbate these issues. Optimizing React apps for mobile is critical to reach and retain your audience effectively.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Measure First: Use Performance Analysis Tools
&lt;/h2&gt;

&lt;p&gt;Before optimizing, it’s essential to understand where your app spends most time and resources. Use these tools to profile your React app’s performance:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Google Lighthouse&lt;/strong&gt;: Built into Chrome DevTools, Lighthouse provides audits on performance, accessibility, SEO, and best practices. It also simulates slow network and CPU conditions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;React DevTools Profiler&lt;/strong&gt;: Allows you to record interactions and identify components causing slow renders or unnecessary re-renders.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;WebPageTest.org&lt;/strong&gt;: Test your site’s performance on real devices and under various network throttling settings.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Optimization is an iterative process: Measure → Identify bottlenecks → Apply fixes → Measure again.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  3. Code Splitting and Lazy Loading
&lt;/h2&gt;

&lt;p&gt;Shipping all JavaScript in one bundle makes your app slow to load, especially on mobile networks. Code splitting breaks your app into smaller chunks loaded on demand.&lt;/p&gt;

&lt;h3&gt;
  
  
  How to implement:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Use &lt;strong&gt;dynamic &lt;code&gt;import()&lt;/code&gt;&lt;/strong&gt; syntax to split code.&lt;/li&gt;
&lt;li&gt;Wrap lazy-loaded components in React’s &lt;code&gt;React.lazy&lt;/code&gt; and &lt;code&gt;Suspense&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;For routing, frameworks like Next.js automatically split code by pages.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example of lazy loading a dashboard component:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Suspense&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="s2"&gt;react&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;Dashboard&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;lazy&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;import&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./Dashboard&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;App&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Suspense&lt;/span&gt; &lt;span class="na"&gt;fallback&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Loading dashboard...&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Dashboard&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Suspense&lt;/span&gt;&lt;span class="p"&gt;&amp;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;h2&gt;
  
  
  4. Optimize Images and Media
&lt;/h2&gt;

&lt;p&gt;Images are often the largest assets on a page. Optimizing them is key to improving mobile performance.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use &lt;strong&gt;responsive images&lt;/strong&gt; with the &lt;code&gt;srcset&lt;/code&gt; and &lt;code&gt;sizes&lt;/code&gt; attributes to serve appropriately sized images for different screen sizes.&lt;/li&gt;
&lt;li&gt;Convert images to modern formats like &lt;strong&gt;WebP&lt;/strong&gt; or &lt;strong&gt;AVIF&lt;/strong&gt;, which offer better compression than JPEG or PNG.&lt;/li&gt;
&lt;li&gt;Implement &lt;strong&gt;lazy loading&lt;/strong&gt; of images to defer loading until they enter the viewport. This can be done with the native &lt;code&gt;loading="lazy"&lt;/code&gt; attribute or via the Intersection Observer API.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;img&lt;/span&gt;
  &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"small.jpg"&lt;/span&gt;
  &lt;span class="na"&gt;srcSet&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"small.jpg 480w, medium.jpg 768w, large.jpg 1200w"&lt;/span&gt;
  &lt;span class="na"&gt;sizes&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"(max-width: 600px) 480px, 768px"&lt;/span&gt;
  &lt;span class="na"&gt;alt&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Product screenshot"&lt;/span&gt;
  &lt;span class="na"&gt;loading&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"lazy"&lt;/span&gt;
&lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  5. Minimize JavaScript and Bundle Size
&lt;/h2&gt;

&lt;p&gt;Large JS bundles = longer downloads and slower runtime.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tips:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Tree shaking: Use Webpack/Vite to remove unused code&lt;/li&gt;
&lt;li&gt;Replace heavy libraries (e.g., moment.js ➝ date-fns)&lt;/li&gt;
&lt;li&gt;Analyze bundles with Webpack Bundle Analyzer&lt;/li&gt;
&lt;li&gt;Use code splitting for libraries and pages&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  6. Avoid Expensive Re-renders
&lt;/h2&gt;

&lt;p&gt;Unnecessary renders kill performance, especially on mobile.&lt;/p&gt;

&lt;h3&gt;
  
  
  Best Practices:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Use React.memo to avoid unnecessary component re-renders&lt;/li&gt;
&lt;li&gt;Use useCallback and useMemo to memoize functions and values&lt;/li&gt;
&lt;li&gt;Always use stable and unique key props in lists&lt;/li&gt;
&lt;li&gt;Avoid inline object/function definitions inside JSX&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ListItem&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;memo&lt;/span&gt;&lt;span class="p"&gt;(({&lt;/span&gt; &lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;onClick&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="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Rendering:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;;&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  7. Efficient State Management
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Inefficient state can trigger expensive rerenders.&lt;/li&gt;
&lt;li&gt;Keep state local with useState unless it must be shared&lt;/li&gt;
&lt;li&gt;Don’t overuse global state (use Redux/Zustand only if needed)&lt;/li&gt;
&lt;li&gt;Prefer lightweight state managers for simple apps&lt;/li&gt;
&lt;li&gt;Batch state updates to minimize re-renders&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  8. Optimize CSS and Styling
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;CSS can block page rendering.&lt;/li&gt;
&lt;li&gt;Inline critical CSS for first paint&lt;/li&gt;
&lt;li&gt;Use CSS Modules or Tailwind CSS for scoped, minimal styles&lt;/li&gt;
&lt;li&gt;Avoid large UI frameworks if you're not using most of their styles&lt;/li&gt;
&lt;li&gt;Use tools like PurgeCSS to remove unused styles&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  9. Use Service Workers and Caching
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Make repeat visits faster and more reliable.&lt;/li&gt;
&lt;li&gt;Cache static assets (JS, CSS, images)&lt;/li&gt;
&lt;li&gt;Cache API responses where appropriate&lt;/li&gt;
&lt;li&gt;Use Workbox for simplified service worker setup&lt;/li&gt;
&lt;li&gt;Be careful with stale data — implement cache invalidation&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  10. Test on Real Devices and Networks
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Don’t rely only on emulators.&lt;/li&gt;
&lt;li&gt;Test on real phones with different screen sizes and performance levels&lt;/li&gt;
&lt;li&gt;Simulate slow 3G/4G networks using DevTools throttling&lt;/li&gt;
&lt;li&gt;Watch for layout shifts, long input delays, memory issues&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;✅ Final Thoughts&lt;br&gt;
Optimizing React apps for mobile isn't just about trimming code — it's about being thoughtful with every decision that affects performance, from routing to rendering to styling.&lt;/p&gt;

&lt;p&gt;By following these practices, you'll build faster, more accessible, and user-friendly mobile experiences.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>react</category>
      <category>mobile</category>
      <category>performance</category>
    </item>
    <item>
      <title>Why We Migrated from PHP to Next.js: Lessons from a Real-World Fintech App</title>
      <dc:creator>Aamna Majid</dc:creator>
      <pubDate>Wed, 30 Jul 2025 07:10:55 +0000</pubDate>
      <link>https://forem.com/aamna_majid/why-we-migrated-from-php-to-nextjs-lessons-from-a-real-world-fintech-app-2dmc</link>
      <guid>https://forem.com/aamna_majid/why-we-migrated-from-php-to-nextjs-lessons-from-a-real-world-fintech-app-2dmc</guid>
      <description>&lt;p&gt;When I joined the engineering team at my current company, I was brought in to help modernize a large financial web application. The system had been originally built using PHP, and while it functioned well enough for a time, it had become increasingly difficult to maintain and scale—especially on the frontend.&lt;/p&gt;

&lt;p&gt;The team had already made the decision to transition to a modern stack: &lt;strong&gt;React, Next.js, TypeScript, and Tailwind CSS&lt;/strong&gt;. My role was to help implement that new frontend, contribute to component design, and support a smooth migration path. In this article, I’ll share why this move made sense, how we approached the migration, and what lessons we learned along the way.&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚠️ Why We Moved Away from PHP
&lt;/h2&gt;

&lt;p&gt;The original system followed a monolithic PHP architecture. The frontend and backend were tightly coupled, making even simple UI changes cumbersome and risky. Any small update—say, a button or form layout—often required backend adjustments, increasing the chance of regression bugs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Challenges included:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Poor component reusability
&lt;/li&gt;
&lt;li&gt;Inline, inconsistent styling
&lt;/li&gt;
&lt;li&gt;Slow performance on data-heavy pages
&lt;/li&gt;
&lt;li&gt;Difficult developer onboarding
&lt;/li&gt;
&lt;li&gt;Lack of mobile responsiveness and SEO control&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ⚙️ Why We Chose Next.js and TypeScript
&lt;/h2&gt;

&lt;p&gt;We selected &lt;a href="https://nextjs.org/" rel="noopener noreferrer"&gt;Next.js&lt;/a&gt; because it offered the best mix of server-side rendering, performance, and developer experience. It gave us the flexibility to build dynamic pages while still maintaining good SEO—essential for dashboards and user-facing views.&lt;/p&gt;

&lt;p&gt;We used:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Next.js&lt;/strong&gt; for routing and SSR
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TypeScript&lt;/strong&gt; for safer, more maintainable code
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tailwind CSS&lt;/strong&gt; for consistent, scalable UI
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This modern stack allowed us to build faster and more reliably while reducing bugs and developer ramp-up time.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Related links: &lt;a href="https://www.typescriptlang.org/" rel="noopener noreferrer"&gt;TypeScript&lt;/a&gt;, &lt;a href="https://tailwindcss.com/" rel="noopener noreferrer"&gt;Tailwind CSS&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🔁 Our Migration Strategy
&lt;/h2&gt;

&lt;p&gt;Since the PHP system was still active, we chose &lt;strong&gt;incremental migration&lt;/strong&gt;. We:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Identified high-priority views (like dashboards)&lt;/li&gt;
&lt;li&gt;Rebuilt them in Next.js&lt;/li&gt;
&lt;li&gt;Connected to the existing backend via REST APIs&lt;/li&gt;
&lt;li&gt;Handled authentication/session logic carefully&lt;/li&gt;
&lt;li&gt;Gradually routed users to the new frontend via feature toggles&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This avoided a risky "big bang" rewrite and allowed us to learn and iterate safely.&lt;/p&gt;




&lt;h2&gt;
  
  
  💡 Lessons Learned
&lt;/h2&gt;

&lt;p&gt;Throughout the migration, a few lessons stood out:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🔍 Don’t migrate everything at once—focus on high-impact features first.&lt;/li&gt;
&lt;li&gt;🧱 Build shared components early to avoid duplication.&lt;/li&gt;
&lt;li&gt;🧪 Test with real users—especially in fintech where UI expectations are high.&lt;/li&gt;
&lt;li&gt;🛠 Maintain tight team feedback loops and documentation.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ✅ Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Modernizing a legacy app isn’t easy, but the long-term benefits are worth it. Migrating from PHP to Next.js improved performance, UX, and developer speed across the board.&lt;/p&gt;

&lt;p&gt;If you’re working on a similar migration, start small, be strategic, and use tools that align with your team’s strengths.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Thanks for reading!&lt;/strong&gt; If you’ve gone through a frontend migration—or are planning one—I’d love to hear what worked for you in the comments 👇&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;About the author&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Aamna Majid&lt;/strong&gt; is a senior frontend engineer with 4+ years of experience building modern web applications using React, Next.js, TypeScript, and Tailwind CSS. She’s passionate about clean UI architecture, performance optimization, and helping teams modernize legacy systems.&lt;br&gt;&lt;br&gt;
📬 Connect with her on &lt;a href="https://www.linkedin.com/in/aamna-majid/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;  &lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>react</category>
      <category>webdev</category>
      <category>typescript</category>
    </item>
  </channel>
</rss>
