<?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: Mihir Shaik</title>
    <description>The latest articles on DEV Community by Mihir Shaik (@mihirshaik270).</description>
    <link>https://dev.to/mihirshaik270</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4050218%2Fce22bdc4-61ae-42b2-b11c-80b45e781278.png</url>
      <title>DEV Community: Mihir Shaik</title>
      <link>https://dev.to/mihirshaik270</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mihirshaik270"/>
    <language>en</language>
    <item>
      <title>Building Fast with Claude Code Is Easy. Securing the App Is the Hard Part</title>
      <dc:creator>Mihir Shaik</dc:creator>
      <pubDate>Tue, 04 Aug 2026 22:23:42 +0000</pubDate>
      <link>https://dev.to/mihirshaik270/building-fast-with-claude-code-is-easy-securing-the-app-is-the-hard-part-52nk</link>
      <guid>https://dev.to/mihirshaik270/building-fast-with-claude-code-is-easy-securing-the-app-is-the-hard-part-52nk</guid>
      <description>&lt;h2&gt;
  
  
  Disclosure
&lt;/h2&gt;

&lt;p&gt;Full disclosure: I currently intern at Perfai Security, the authorization and access control testing platform mentioned later in this article. This isn't a sponsored post—I genuinely built FlashDraft as a personal project, and because I work at Perfai, I naturally used it as part of my release process. If you think either the app or Perfai could be improved, I'd genuinely appreciate your honest feedback.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;AI coding tools make it possible to generate dashboards, databases, authentication flows, and API routes faster than ever.&lt;/p&gt;

&lt;p&gt;But a working application is not automatically a secure application.&lt;/p&gt;

&lt;p&gt;This becomes especially important when an app has multiple users, private data, ownership rules, and different permission levels. A user may be signed in correctly but still gain access to another user's information or perform actions they should not be allowed to perform.&lt;/p&gt;

&lt;p&gt;I wanted to explore both sides of AI-assisted development: how quickly I could build a real multi-user application and how I could verify its authorization before calling it complete.&lt;/p&gt;

&lt;p&gt;Using Claude Code, I built FlashDraft, a one-week fantasy soccer platform with league commissioners, members, site administrators, private draft boards, trades, rosters, and league-specific controls.&lt;/p&gt;

&lt;p&gt;This article is less about the fantasy game itself and more about what I learned while building quickly with AI, defining permissions, and testing the deployed application for authorization problems.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Project
&lt;/h2&gt;

&lt;p&gt;FlashDraft is a short-format fantasy soccer application where users create leagues, draft players, manage rosters, and compete for one week.&lt;/p&gt;

&lt;p&gt;The application has three main roles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Site administrators manage the overall platform.&lt;/li&gt;
&lt;li&gt;League commissioners manage the leagues they create.&lt;/li&gt;
&lt;li&gt;League members manage their own teams, lineups, trades, and private draft information.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These roles created the main technical challenge.&lt;/p&gt;

&lt;p&gt;Authentication could confirm who a user was, but the application still needed to determine which leagues, teams, settings, and actions that user was authorized to access.&lt;/p&gt;

&lt;p&gt;For example, a member should be able to edit their own lineup but not another member's lineup. A commissioner should be able to manage their own league but not a league created by someone else. A private draft board should remain private even from other members in the same league.&lt;/p&gt;

&lt;p&gt;Those permission boundaries became one of the most important parts of the project.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dashboard:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We can see the player list as well, along with their prices:&lt;/p&gt;

&lt;h2&gt;
  
  
  Tech Stack
&lt;/h2&gt;

&lt;p&gt;FlashDraft was built using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Claude Code&lt;/li&gt;
&lt;li&gt;TypeScript&lt;/li&gt;
&lt;li&gt;Prisma ORM&lt;/li&gt;
&lt;li&gt;PostgreSQL&lt;/li&gt;
&lt;li&gt;Tailwind CSS&lt;/li&gt;
&lt;li&gt;Clerk Authentication&lt;/li&gt;
&lt;li&gt;Neon Database&lt;/li&gt;
&lt;li&gt;Vercel&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Claude Code generated much of the application's foundation, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Database models&lt;/li&gt;
&lt;li&gt;Dashboards&lt;/li&gt;
&lt;li&gt;API routes&lt;/li&gt;
&lt;li&gt;League workflows&lt;/li&gt;
&lt;li&gt;Authentication flows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Clerk handled authentication, while Prisma and Neon managed users, leagues, rosters, trades, draft selections, and league settings.&lt;/p&gt;

&lt;h2&gt;
  
  
  Testing the Authorization Model
&lt;/h2&gt;

&lt;p&gt;Building an application that works is only half the challenge.&lt;/p&gt;

&lt;p&gt;FlashDraft stores user accounts, league memberships, team ownership, private draft strategies, trades, lineups, and league settings. If authorization is implemented incorrectly, one user could potentially view or modify information belonging to someone else.&lt;/p&gt;

&lt;p&gt;I began by testing the application manually with multiple accounts, roles, and leagues.&lt;/p&gt;

&lt;p&gt;I checked whether:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A member could access another member's team&lt;/li&gt;
&lt;li&gt;A member could edit another user's lineup&lt;/li&gt;
&lt;li&gt;A commissioner could manage a league they did not create&lt;/li&gt;
&lt;li&gt;A non-member could access a private league&lt;/li&gt;
&lt;li&gt;One user could view another user's private draft board&lt;/li&gt;
&lt;li&gt;A user could manipulate IDs inside requests&lt;/li&gt;
&lt;li&gt;Sensitive API responses exposed unnecessary data&lt;/li&gt;
&lt;li&gt;Admin and commissioner permissions remained separate&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This type of testing is important because normal user flows only confirm that allowed actions work. Authorization testing also asks whether forbidden actions are properly blocked.&lt;/p&gt;

&lt;p&gt;After completing the manual checks, I submitted the deployed application to Perfai Security.&lt;/p&gt;

&lt;p&gt;Perfai tested the running application's authorization and access-control behavior. The goal was not simply to review whether the code looked correct. It was to validate whether users could access only the resources and actions they were permitted to use.&lt;/p&gt;

&lt;p&gt;This mattered because authorization bugs often appear across the boundaries between users, roles, resources, and API endpoints.&lt;/p&gt;

&lt;p&gt;No automated tool can guarantee that an application is completely secure. However, testing the deployed product can help identify access-control weaknesses that may be missed during rapid AI-assisted development.&lt;/p&gt;

&lt;p&gt;Because I currently intern at Perfai Security, I naturally used it as part of my release process. Readers can view the demo or create an account using the links near the end of this article.&lt;/p&gt;

&lt;p&gt;All I needed to do was submit my live link, and Perfai Security did the rest.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Built It with Claude Code
&lt;/h2&gt;

&lt;p&gt;FlashDraft began as a detailed product prompt inside Claude Code.&lt;/p&gt;

&lt;p&gt;I first defined the main roles, resources, and workflows. These included users, leagues, teams, rosters, drafts, trades, league settings, and private draft boards.&lt;/p&gt;

&lt;p&gt;Claude Code then helped generate much of the application foundation, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Database models&lt;/li&gt;
&lt;li&gt;Prisma relationships&lt;/li&gt;
&lt;li&gt;Authentication flows&lt;/li&gt;
&lt;li&gt;API routes&lt;/li&gt;
&lt;li&gt;Dashboards&lt;/li&gt;
&lt;li&gt;League workflows&lt;/li&gt;
&lt;li&gt;UI components&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This dramatically reduced the time required to create boilerplate and connect the major parts of the application.&lt;/p&gt;

&lt;p&gt;However, generating the structure was only the beginning.&lt;/p&gt;

&lt;p&gt;I still needed to decide who owned each resource, which roles could perform each action, and where authorization needed to be enforced on the server.&lt;/p&gt;

&lt;p&gt;AI was effective at producing code quickly, but it could not replace the product decisions behind the permission model.&lt;/p&gt;

&lt;p&gt;A useful way to think about the process was:&lt;/p&gt;

&lt;p&gt;The biggest lesson was that AI-generated code should be treated as a strong first draft, not automatically trusted as production-ready.&lt;/p&gt;

&lt;h2&gt;
  
  
  Authentication Is Not Authorization
&lt;/h2&gt;

&lt;p&gt;One of the most important lessons from this project was the difference between authentication and authorization.&lt;/p&gt;

&lt;p&gt;Authentication answers: &lt;strong&gt;Who is the user?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Authorization answers: &lt;strong&gt;What is that user allowed to do?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Clerk handled authentication by identifying signed-in users.&lt;/p&gt;

&lt;p&gt;The application still needed server-side checks to confirm:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Whether the user belonged to the requested league&lt;/li&gt;
&lt;li&gt;Whether the user owned the requested team&lt;/li&gt;
&lt;li&gt;Whether the user was the commissioner of that league&lt;/li&gt;
&lt;li&gt;Whether the user could edit a roster or lineup&lt;/li&gt;
&lt;li&gt;Whether the user could view a private draft board&lt;/li&gt;
&lt;li&gt;Whether the user could approve a trade&lt;/li&gt;
&lt;li&gt;Whether the requested resource belonged to another user&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A route is not secure simply because it checks that someone is logged in.&lt;/p&gt;

&lt;p&gt;Every sensitive request must also verify that the authenticated user has permission to access the specific resource or action.&lt;/p&gt;

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

&lt;p&gt;By the end of the project, FlashDraft included public and private leagues, live drafts, salary-cap roster building, trades, commissioner controls, private draft boards, persistent data, and a public deployment.&lt;/p&gt;

&lt;p&gt;The more important result, however, was the development process.&lt;/p&gt;

&lt;p&gt;Claude Code made it possible to move from an idea to a functional application extremely quickly. But speed did not remove the need to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Define roles before generating routes&lt;/li&gt;
&lt;li&gt;Decide who owns each resource&lt;/li&gt;
&lt;li&gt;Enforce permissions on the server&lt;/li&gt;
&lt;li&gt;Test with multiple accounts&lt;/li&gt;
&lt;li&gt;Attempt actions users should not be allowed to perform&lt;/li&gt;
&lt;li&gt;Review API responses for private-data exposure&lt;/li&gt;
&lt;li&gt;Test the deployed application rather than only local code&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI made building faster.&lt;/p&gt;

&lt;p&gt;It did not make authorization automatic.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lessons for Vibe Coders
&lt;/h2&gt;

&lt;p&gt;The biggest lesson from FlashDraft is that a functioning interface can create a false sense of completion.&lt;/p&gt;

&lt;p&gt;An application may look polished, authenticate users correctly, and support all its intended workflows while still containing serious authorization problems.&lt;/p&gt;

&lt;p&gt;For anyone building with Claude Code or another AI coding tool, I would recommend:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Define every user role before generating the application.&lt;/li&gt;
&lt;li&gt;List the resources each role can view, create, edit, or delete.&lt;/li&gt;
&lt;li&gt;Never rely on hidden buttons as a security control.&lt;/li&gt;
&lt;li&gt;Validate ownership and permissions on the server.&lt;/li&gt;
&lt;li&gt;Test the application with multiple users and multiple organizations or groups.&lt;/li&gt;
&lt;li&gt;Try changing IDs, URLs, and request values.&lt;/li&gt;
&lt;li&gt;Check whether API responses expose private information.&lt;/li&gt;
&lt;li&gt;Treat generated code as a first draft.&lt;/li&gt;
&lt;li&gt;Test the deployed application before release.&lt;/li&gt;
&lt;li&gt;Make security checks part of the normal build process.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;AI-assisted development makes it easier to turn ideas into software.&lt;/p&gt;

&lt;p&gt;The next challenge is making sure the software behaves correctly when users attempt actions they were never supposed to perform.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try the Project and Security Tools
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Play FlashDraft
&lt;/h3&gt;

&lt;p&gt;Try the live application: &lt;a href="https://worldcupfantasy-seven.vercel.app/" rel="noopener noreferrer"&gt;https://worldcupfantasy-seven.vercel.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I would especially appreciate feedback on the gameplay, user experience, one-week league format, and any bugs you encounter.&lt;/p&gt;

&lt;h3&gt;
  
  
  Test Your Vibe-Coded App with Perfai Security
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://perfai.ai" rel="noopener noreferrer"&gt;https://perfai.ai&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Join the Discussion
&lt;/h3&gt;

&lt;p&gt;I would love to hear from other vibe coders and developers.&lt;/p&gt;

&lt;p&gt;Leave your feedback in the comments. I will read every response and reply thoughtfully to each one.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claude</category>
      <category>security</category>
      <category>cybersecurity</category>
    </item>
    <item>
      <title>I Built a Calendar App Kids Control — Even Parents Can't Access It</title>
      <dc:creator>Mihir Shaik</dc:creator>
      <pubDate>Tue, 28 Jul 2026 17:33:49 +0000</pubDate>
      <link>https://dev.to/mihirshaik270/i-built-a-calendar-app-kids-control-even-parents-cant-access-it-4aoc</link>
      <guid>https://dev.to/mihirshaik270/i-built-a-calendar-app-kids-control-even-parents-cant-access-it-4aoc</guid>
      <description>&lt;p&gt;Over one session, I built Kid Compass — a calendar and chore planner designed so kids plan their own day, and parents can only watch, suggest, and cheer, never edit. It's a small, human idea wrapped around one of the trickiest authorization shapes in this whole series: a privacy boundary that holds even against the account that's paying for the app, managing the family, and has every other administrative power available.&lt;/p&gt;

&lt;p&gt;Unlike the previous builds in this series, this one didn't start from a single spec-in-one-prompt. It started as a brainstorm — a long list of possible authorization-testing app ideas, narrowed down over a few rounds of conversation, before landing on a specific pedagogical goal: an app that promotes independence in kids, not surveillance of them. That shift in framing — from "parent controls the calendar" to "kid owns the calendar, parent is a guest" — is what produced the interesting access-control problem underneath it.&lt;/p&gt;

&lt;p&gt;About Kid Compass&lt;/p&gt;

&lt;p&gt;Kid Compass is a role-based family planner built around four types of users:&lt;/p&gt;

&lt;p&gt;• Family Admin — the parent who set up the household&lt;br&gt;
• Guardian — a co-parent with full standing access&lt;br&gt;
• Secondary Guardian — a babysitter, grandparent, or coach with narrowly scoped access&lt;br&gt;
• Child — the owner of their own day&lt;/p&gt;

&lt;p&gt;Family Admins and Guardians can:&lt;/p&gt;

&lt;p&gt;• See every child's schedule, chores, and tasks in the family&lt;br&gt;
• Leave a suggestion (a comment or nudge) on any block or task&lt;br&gt;
• Assign a chore to a specific child, or drop it into a shared pool for any kid to claim&lt;br&gt;
• Set a reward on a chore&lt;br&gt;
• Turn on "maturity mode" for a child, unlocking their ability to mark entries private&lt;/p&gt;

&lt;p&gt;Secondary Guardians can:&lt;/p&gt;

&lt;p&gt;• See only what an explicit, revocable grant allows — one child, optionally one kind of entry, optionally a bounded time window&lt;/p&gt;

&lt;p&gt;Children can:&lt;/p&gt;

&lt;p&gt;• Create, edit, and delete their own schedule blocks and tasks&lt;br&gt;
• Mark an entry private, if maturity mode is on for them&lt;br&gt;
• Claim an unclaimed chore from the family pool&lt;br&gt;
• Mark their own tasks complete — and only their own&lt;/p&gt;

&lt;p&gt;I wanted this one to have a different shape than "owner vs. everyone else" or "time-gated reveal," which I'd already built. Here the interesting boundary is: two people can hold the exact same role (two kids are both CHILD) and still need to be fully isolated from each other, and one field on a single database row can have two different owners depending on who's writing to it — the child owns the title, the parent owns the reward.&lt;/p&gt;

&lt;p&gt;My Tech Stack&lt;/p&gt;

&lt;p&gt;• Claude Code&lt;br&gt;
• TypeScript&lt;br&gt;
• Next.js (App Router)&lt;br&gt;
• React&lt;br&gt;
• Tailwind CSS&lt;br&gt;
• Radix-based shadcn/ui components&lt;br&gt;
• Clerk Authentication&lt;br&gt;
• PostgreSQL&lt;br&gt;
• Prisma ORM&lt;br&gt;
• Neon Database&lt;br&gt;
• Vercel&lt;br&gt;
• PerfAI Security (free access control testing)&lt;/p&gt;

&lt;p&gt;Same stack as the rest of the series, pinned to the same dependency versions as the earlier sibling apps for consistency.&lt;/p&gt;

&lt;p&gt;Development Process&lt;/p&gt;

&lt;p&gt;After settling on the concept, I used Claude Code to build the application in a single development session. The project included user authentication, role-based permissions, family management, dashboards for parents and children, scheduling features, chores, rewards, and a complete authorization system.&lt;/p&gt;

&lt;p&gt;As with every project in this series, the first version wasn't the final version. I refined several authorization edge cases, improved the user experience, fixed UI inconsistencies, and prepared the application for security testing before considering the project complete.&lt;/p&gt;

&lt;p&gt;The result was a fully functional application that demonstrates how modern AI development tools can dramatically accelerate building complex software while still requiring thoughtful review, iteration, and security validation.&lt;/p&gt;

&lt;p&gt;Try Kid Compass&lt;/p&gt;

&lt;p&gt;Kid Compass is live at kid-compass-teal.vercel.app. There's a live demo at /demo that drops you straight into a real family's week — activities, chores with rewards, a shared chore pool, and one entry that stays private even from the parents watching — no account needed to look around.&lt;/p&gt;

&lt;p&gt;Security Check with PerfAI&lt;/p&gt;

&lt;p&gt;Kid Compass manages sensitive family information, including children's schedules, private calendar entries, chores, rewards, and delegated guardian permissions. Applications like this require much more than simple authentication — they require carefully enforced authorization to ensure every user can only access the information they're supposed to see.&lt;/p&gt;

&lt;p&gt;To validate these authorization rules, I reviewed the application using PerfAI Security, focusing on the areas most likely to expose sensitive family data.&lt;/p&gt;

&lt;p&gt;The review evaluated questions such as:&lt;/p&gt;

&lt;p&gt;• Can one child access another child's private schedule?&lt;br&gt;
• Can a guardian modify information they're only supposed to view?&lt;br&gt;
• Can delegated guardians access data outside their assigned permissions?&lt;br&gt;
• Are private calendar entries properly protected?&lt;br&gt;
• Are ownership checks enforced across every API request?&lt;/p&gt;

&lt;p&gt;The review identified several authorization improvements involving delegated permissions, ownership validation, and response filtering. After implementing these recommendations, the application's authorization model became significantly stronger and better protected against common access-control vulnerabilities.&lt;/p&gt;

&lt;p&gt;All I needed to do was type in my app's URL.&lt;/p&gt;

&lt;p&gt;Final Takeaway&lt;/p&gt;

&lt;p&gt;Kid Compass explored a different kind of authorization problem than the other applications in this series.&lt;/p&gt;

&lt;p&gt;Instead of asking whether a user could access another person's resources based on role alone, the application required permissions to depend on family relationships, delegated access, ownership of individual pieces of data, and even ownership of specific fields within the same database record.&lt;/p&gt;

&lt;p&gt;Claude Code accelerated the development process and helped build a complex permission model in a single session, while PerfAI Security helped validate the authorization boundaries that protect children's privacy and family data.&lt;/p&gt;

&lt;p&gt;The combination of AI-assisted development and authorization testing produced a much stronger foundation before release and reinforced an important lesson from this series: the most difficult security problems usually aren't about authentication — they're about correctly enforcing who should be allowed to access what, under exactly which conditions.&lt;/p&gt;

&lt;p&gt;App URL: &lt;a href="https://kid-compass-teal.vercel.app" rel="noopener noreferrer"&gt;https://kid-compass-teal.vercel.app&lt;/a&gt;&lt;/p&gt;

</description>
      <category>claude</category>
      <category>cybersecurity</category>
      <category>vibecoding</category>
      <category>security</category>
    </item>
  </channel>
</rss>
