<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Syed Nahida Anjum</title>
    <description>The latest articles on DEV Community by Syed Nahida Anjum (@nahida_anjum_2fe64e2ab9c1).</description>
    <link>https://dev.to/nahida_anjum_2fe64e2ab9c1</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%2F2119209%2Faec4ad11-36fb-4ff1-b23a-2198491b0bf7.jpg</url>
      <title>DEV Community: Syed Nahida Anjum</title>
      <link>https://dev.to/nahida_anjum_2fe64e2ab9c1</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nahida_anjum_2fe64e2ab9c1"/>
    <language>en</language>
    <item>
      <title>TrailerTime - Permissions Redefined</title>
      <dc:creator>Syed Nahida Anjum</dc:creator>
      <pubDate>Sun, 04 May 2025 13:17:49 +0000</pubDate>
      <link>https://dev.to/nahida_anjum_2fe64e2ab9c1/trailertime-permissions-redefined-cp8</link>
      <guid>https://dev.to/nahida_anjum_2fe64e2ab9c1/trailertime-permissions-redefined-cp8</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/permit_io"&gt;Permit.io Authorization Challenge&lt;/a&gt;: Permissions Redefined&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;🎬 &lt;strong&gt;TrailerTime&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Watch. Manage. Control Trailers Like a Pro.&lt;br&gt;&lt;br&gt;
A submission for the Permit.io Authorization Challenge: Permissions Redefined&lt;br&gt;&lt;br&gt;
&lt;em&gt;"What if Netflix had a little sibling who only cared about trailers, and also had an overprotective parent (aka Permit.io) deciding who gets to press which button?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Well, meet &lt;strong&gt;TrailerTime&lt;/strong&gt; — my entry to the Permissions Redefined Challenge by Permit.io.&lt;/p&gt;


&lt;h2&gt;
  
  
  🔗 Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;🍿 What is TrailerTime?
&lt;/li&gt;
&lt;li&gt;🔐 Why Authorization Matters
&lt;/li&gt;
&lt;li&gt;👥 Roles &amp;amp; Permissions
&lt;/li&gt;
&lt;li&gt;🎥 Demo &amp;amp; Screenshots
&lt;/li&gt;
&lt;li&gt;💻 Project Repo
&lt;/li&gt;
&lt;li&gt;🛠️ How I Built It
&lt;/li&gt;
&lt;li&gt;🤯 Challenges Faced
&lt;/li&gt;
&lt;li&gt;💡 Solutions &amp;amp; Learnings
&lt;/li&gt;
&lt;li&gt;🔌 Integrating Permit.io Like a Pro
&lt;/li&gt;
&lt;li&gt;📚 Code Snippets
&lt;/li&gt;
&lt;li&gt;💬 Final Thoughts
&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  🍿 What is TrailerTime?
&lt;/h2&gt;

&lt;p&gt;🎉 &lt;strong&gt;TrailerTime&lt;/strong&gt; is a web app that lets users view a curated list of movie trailers — think Netflix, but no sign-ups, no streaming, and no ex-boyfriends calling mid-show.&lt;/p&gt;

&lt;p&gt;It’s focused, clean, and smartly protected with role-based access control using Permit.io.&lt;/p&gt;

&lt;p&gt;But here’s the twist: Not all users get to wear the Editor’s cape or wield the mighty Delete button—not everyone gets the keys to the kingdom.&lt;br&gt;&lt;br&gt;
Using Permit.io, I baked in fine-grained role-based access control so that Admins, Editors, and Users each see a different experience. No more accidental trailer deletions by your curious cousin.&lt;/p&gt;


&lt;h2&gt;
  
  
  🔐 Why Authorization Matters
&lt;/h2&gt;

&lt;p&gt;Ever had a friend "borrow" your Netflix and mess up your watchlist?&lt;br&gt;&lt;br&gt;
Yeah, now imagine they could also delete movies. 🎬💥&lt;/p&gt;

&lt;p&gt;That's why authorization isn’t just a backend problem—it's a user experience decision.&lt;/p&gt;

&lt;p&gt;With Permit.io, I avoided spaghetti authorization code and instead used policy-as-code. Clean, scalable, and secure. Just how modern apps should be.&lt;/p&gt;


&lt;h2&gt;
  
  
  👥 Roles &amp;amp; Permissions
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Role&lt;/th&gt;
&lt;th&gt;Create&lt;/th&gt;
&lt;th&gt;Read&lt;/th&gt;
&lt;th&gt;Update&lt;/th&gt;
&lt;th&gt;Delete&lt;/th&gt;
&lt;th&gt;Vibes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Admin&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;The boss. Has all the buttons.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Editor&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;Trusted sidekick. No delete.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;User&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;Just here for food &amp;amp; trailers.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The frontend reacts to the user's role and dynamically shows/hides buttons like Create, Edit, and Delete.&lt;/p&gt;

&lt;p&gt;The backend uses Permit.io's middleware to authorize API requests, ensuring no one sneaks into the editing room uninvited.&lt;br&gt;&lt;br&gt;
The UI and API both respect this table like it’s the law. Because it kinda is.&lt;/p&gt;


&lt;h2&gt;
  
  
  🎥 Demo &amp;amp; Screenshots
&lt;/h2&gt;

&lt;p&gt;While it's not deployed (YET), here's what you can look forward to:&lt;/p&gt;

&lt;p&gt;🔗 &lt;strong&gt;Video Demo on Loom&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://www.loom.com/share/83c0f91d2ca94e52b908abfda24b555f?sid=8ca990d7-808e-4ce2-876f-3ace65dc1700" rel="noopener noreferrer"&gt;Application Demo Overview 🚀 - Watch Video&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;📸 &lt;strong&gt;Screenshots:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;🏠 &lt;strong&gt;Login Page with Trailers&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flga5ki00k4le0n8p7wm2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flga5ki00k4le0n8p7wm2.png" alt="Login page" width="800" height="434"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🛠️ &lt;strong&gt;Admin Dashboard&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Add, Edit, Delete all the things.&lt;br&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc7x1iwaarh6pvafvjz0a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc7x1iwaarh6pvafvjz0a.png" alt="Admin" width="800" height="330"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;✍️ &lt;strong&gt;Editor View&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
You can edit, but you can’t delete. Sorry, editors.&lt;br&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcwe51t0w7zzap4q9i5fp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcwe51t0w7zzap4q9i5fp.png" alt="Editor" width="800" height="338"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;👀 &lt;strong&gt;User View&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Pure read-only bliss.&lt;br&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fknze1cfexjb7gg7ikt7j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fknze1cfexjb7gg7ikt7j.png" alt="user" width="800" height="268"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Permit policy:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa4h9mlzksq56y4rpst4y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa4h9mlzksq56y4rpst4y.png" alt="permitpolicy" width="800" height="627"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Permit integration:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq1trlpzkjau4byz0n86h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq1trlpzkjau4byz0n86h.png" alt="permit dashboard" width="448" height="512"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  💻 Project Repo
&lt;/h2&gt;

&lt;p&gt;👉 &lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/NahidaAnjum/TrailerTime/tree/version1" rel="noopener noreferrer"&gt;TrailerTime Repo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Everything’s open-source, from the React frontend to the Express backend. Cleanly structured, well-documented, and ready for feedback!&lt;/p&gt;


&lt;h2&gt;
  
  
  🛠️ How I Built It
&lt;/h2&gt;
&lt;h3&gt;
  
  
  🧠 The Idea:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Netflix-style UI but permission-aware&lt;/li&gt;
&lt;li&gt;Auth with Permit.io – because DIY auth logic is a dark path&lt;/li&gt;
&lt;li&gt;Frontend: React&lt;/li&gt;
&lt;li&gt;Backend: Node.js + Express&lt;/li&gt;
&lt;li&gt;Database: Sqlite&lt;/li&gt;
&lt;li&gt;Authz: Permit.io&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🛠️ How I Used Permit.io
&lt;/h3&gt;

&lt;p&gt;🎯 Zero CLI, 100% middleware magic.&lt;/p&gt;

&lt;p&gt;Since I didn’t use the CLI, all permission checks were baked into the app using Permit.io's Node.js and React SDKs.&lt;/p&gt;
&lt;h3&gt;
  
  
  🔒 Backend Authorization
&lt;/h3&gt;

&lt;p&gt;I used Permit.io's middleware in Express to protect routes:&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="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Permit&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;permitio&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;permit&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Permit&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;pdp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://cloudpdp.api.permit.io&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;token&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;PERMIT_API_KEY&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;checkPermission&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;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;next&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;allowed&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;permit&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;check&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;user&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;trailer:create&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;allowed&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;403&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;error&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Unauthorized&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="nf"&gt;next&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;ul&gt;
&lt;li&gt;✅ Keeps backend logic clean&lt;/li&gt;
&lt;li&gt;✅ No more hardcoded roles&lt;/li&gt;
&lt;li&gt;✅ Centralized access control&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎨 Frontend Logic
&lt;/h3&gt;

&lt;p&gt;Permit.io's SDK helped me render UI conditionally:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { useCheck } from '@permitio/react-access-control';

const { loading, result } = useCheck('trailer:create');

return !loading &amp;amp;&amp;amp; result ? &amp;lt;button&amp;gt;Add Trailer&amp;lt;/button&amp;gt; : null;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🤩 This way, Users only see buttons they’re allowed to click.&lt;/p&gt;

&lt;h3&gt;
  
  
  🤯 Challenges Faced
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Challenge&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Reaction&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Resolution&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Learning Permit.io for the first time&lt;/td&gt;
&lt;td&gt;🤯&lt;/td&gt;
&lt;td&gt;Read docs, broke stuff, fixed stuff&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Conditional rendering based on roles&lt;/td&gt;
&lt;td&gt;😵&lt;/td&gt;
&lt;td&gt;Used Permit.io’s SDK in React smartly&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Styling under a time crunch&lt;/td&gt;
&lt;td&gt;🫠&lt;/td&gt;
&lt;td&gt;Focused on function first, polish second&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  😅 Fun, Fails &amp;amp; Fixes
&lt;/h3&gt;

&lt;p&gt;🔍 &lt;strong&gt;"Why is the Delete button showing for Users?"&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Turns out, I forgot to wrap the permission check around a button. Frontend users are sneaky!&lt;/p&gt;

&lt;p&gt;⏳ Time pressure meant sacrificing a fancier UI for solid security.&lt;br&gt;&lt;br&gt;
Would I love a slicker design? Yes.&lt;br&gt;&lt;br&gt;
Would I prefer to sleep this week? Also yes.&lt;/p&gt;

&lt;p&gt;🤹 Learning Permit.io as a first-timer was fun—especially when docs saved me from inventing my own RBAC system.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Used React SDK to control UI elements.&lt;/li&gt;
&lt;li&gt;Want the "Delete" button? Better be an admin.&lt;/li&gt;
&lt;li&gt;Backend uses middleware checks to validate every action against Permit.io's policy.&lt;/li&gt;
&lt;li&gt;Policy-as-code helped me version-control my permissions.
Git diff &amp;gt; digging through auth logic spaghetti.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  💬 Final Thoughts
&lt;/h3&gt;

&lt;p&gt;Building TrailerTime was a blast 🎆—and a serious learning experience. Here's what I walked away with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Role-based access is more than a backend checkbox.&lt;/li&gt;
&lt;li&gt;✅ Permit.io lets you move fast without breaking permissions.&lt;/li&gt;
&lt;li&gt;✅ Policy-as-code is scalable, readable, and GitHub-approved.&lt;/li&gt;
&lt;li&gt;✅ UI/UX and security can be friends. Who knew?&lt;/li&gt;
&lt;li&gt;✅ Would I use it in a real production app? Absolutely.&lt;/li&gt;
&lt;li&gt;✅ Would I recommend it to teams struggling with access control? 100%.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🤝 Permit.io Team: Feedback Welcome!
&lt;/h3&gt;

&lt;p&gt;I’d love it if this submission helps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Educate newcomers on integrating Permit.io in full-stack apps&lt;/li&gt;
&lt;li&gt;Inspire additions to the Permit.io docs or examples&lt;/li&gt;
&lt;li&gt;Start a conversation around best practices in frontend-backend authz integration&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  📣 Shoutout
&lt;/h3&gt;

&lt;p&gt;I would like to thank my friend and saviour Aamir Kalimi, because sometimes you need someone else to look at your code to find out your silly, stupid mistakes 😂&lt;/p&gt;

&lt;p&gt;If you're ever hiring a trailer-loving, RBAC-obsessed developer — I'm available 😄&lt;br&gt;&lt;br&gt;
Also, feel free to feature this in your docs (just send me the swag 👕😉).&lt;br&gt;&lt;br&gt;
To the Permit.io team—thank you for simplifying something that’s usually a pain to get right. With tools like this, even solo devs like me can build secure, scalable apps in a hackathon timeline ✨&lt;/p&gt;

&lt;h3&gt;
  
  
  👋 Want to Connect?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;💼 &lt;a href="https://www.linkedin.com/in/nahidaanjum/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🐙 &lt;a href="https://github.com/NahidaAnjum" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you found this helpful or interesting, give it a ❤️ or drop a comment. I’d love feedback!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>devchallenge</category>
      <category>permitchallenge</category>
      <category>security</category>
    </item>
  </channel>
</rss>
