<?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: John Sambani</title>
    <description>The latest articles on DEV Community by John Sambani (@johsam_ef).</description>
    <link>https://dev.to/johsam_ef</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%2F3737667%2F99f0413f-d9cc-4676-bc6c-308b9e0b1d84.jpg</url>
      <title>DEV Community: John Sambani</title>
      <link>https://dev.to/johsam_ef</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/johsam_ef"/>
    <language>en</language>
    <item>
      <title>STREET FIX: Community Resource Sharing App for Informal Settlements</title>
      <dc:creator>John Sambani</dc:creator>
      <pubDate>Mon, 02 Mar 2026 04:35:41 +0000</pubDate>
      <link>https://dev.to/johsam_ef/street-fix-community-resource-sharing-app-for-informal-settlements-2fpe</link>
      <guid>https://dev.to/johsam_ef/street-fix-community-resource-sharing-app-for-informal-settlements-2fpe</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/weekend-2026-02-28"&gt;DEV Weekend Challenge: Community&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Community
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Street Fix&lt;/strong&gt; is built for residents of informal settlements in Blantyre, Malawi—communities like Mbayani, Chirimba, and Ndirande where over 40% of the city's population lives.&lt;/p&gt;

&lt;p&gt;These neighborhoods face daily challenges: broken communal water points, irregular waste collection, limited knowledge of working facilities, and lack of centralized communication between neighbors. Street Fix bridges this gap by empowering residents to report issues, share resources, and strengthen community bonds.&lt;/p&gt;

&lt;p&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%2Fy3w255ylzk1av0cm0c6p.jpg" 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%2Fy3w255ylzk1av0cm0c6p.jpg" alt="Limbe Market in Blantyre, Malawi" width="800" height="532"&gt;&lt;/a&gt;&lt;/p&gt;




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

&lt;p&gt;&lt;strong&gt;Street Fix&lt;/strong&gt; is a full-stack community resource sharing platform with:&lt;/p&gt;

&lt;h3&gt;
  
  
  🚨 Report Issues
&lt;/h3&gt;

&lt;p&gt;Document broken water points, sanitation problems, and waste issues with photos and GPS coordinates.&lt;/p&gt;

&lt;p&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%2F1gn0k49koka5w4wroade.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%2F1gn0k49koka5w4wroade.png" alt="Issue reporting form" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&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%2F315vmcd8ngaw961mdtw8.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%2F315vmcd8ngaw961mdtw8.png" alt="Sample Issues" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🗺️ Community Map
&lt;/h3&gt;

&lt;p&gt;Interactive map showing reported issues (color-coded by category/status),health clinics, and waste collection points.&lt;/p&gt;

&lt;p&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%2F1gcc7graph287ohlpbvt.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%2F1gcc7graph287ohlpbvt.png" alt="Interactive map" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  💬 Forum
&lt;/h3&gt;

&lt;p&gt;Community discussion board for sharing tips, asking questions, and organizing initiatives.&lt;/p&gt;

&lt;p&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%2Ffupphuwsfyl72xlt0e19.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%2Ffupphuwsfyl72xlt0e19.png" alt="Forum page" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🌟 Shoutouts
&lt;/h3&gt;

&lt;p&gt;Public recognition feature to thank helpful neighbors and celebrate community spirit.&lt;/p&gt;

&lt;p&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%2Fudkcu3inafks08n7oere.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%2Fudkcu3inafks08n7oere.png" alt="Shoutouts page" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🛠️ Admin Dashboard
&lt;/h3&gt;

&lt;p&gt;Monitor issues, update statuses, add community resources, and moderate content.&lt;/p&gt;

&lt;p&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%2Fi0cmhl3uebtwma4invwg.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%2Fi0cmhl3uebtwma4invwg.png" alt="Admin dashboard" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://street-fix-five.vercel.app/" rel="noopener noreferrer"&gt;Live Site: https://street-fix-five.vercel.app&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/Johsam-f/street-fix" rel="noopener noreferrer"&gt;github code: https://github.com/Johsam-f/street-fix&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Tech Stack
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Next.js 16&lt;/strong&gt; (App Router) + &lt;strong&gt;React 19&lt;/strong&gt; + &lt;strong&gt;TypeScript&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tailwind CSS&lt;/strong&gt; + &lt;strong&gt;shadcn/ui&lt;/strong&gt; for styling&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Supabase&lt;/strong&gt; for database, auth, and file storage with Row Level Security&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Leaflet.js&lt;/strong&gt; + &lt;strong&gt;OpenStreetMap&lt;/strong&gt; for interactive maps&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;react-hook-form&lt;/strong&gt; + &lt;strong&gt;Zod&lt;/strong&gt; for form validation&lt;/li&gt;
&lt;li&gt;Deployed on &lt;strong&gt;Vercel&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Key Decisions
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Server-first&lt;/strong&gt; with React Server Components for better performance&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Progressive enhancement&lt;/strong&gt; so forms work even on slow connections&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security by design&lt;/strong&gt; with RLS policies and server-side validation&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Building better communities, one fix at a time.&lt;/strong&gt; 🏘️✨&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>showdev</category>
    </item>
    <item>
      <title>scry: Security Scanner Built with GitHub Copilot CLI</title>
      <dc:creator>John Sambani</dc:creator>
      <pubDate>Sun, 15 Feb 2026 11:57:40 +0000</pubDate>
      <link>https://dev.to/johsam_ef/scry-security-scanner-built-with-github-copilot-cli-1dlp</link>
      <guid>https://dev.to/johsam_ef/scry-security-scanner-built-with-github-copilot-cli-1dlp</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/github-2026-01-21"&gt;GitHub Copilot CLI Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;scry&lt;/strong&gt; is a command-line security scanner that reveals hidden risks in JavaScript and Node.js codebases. It detects 8 critical vulnerability categories and provides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Clear explanations&lt;/strong&gt; of why each issue matters
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Actionable fixes&lt;/strong&gt; with secure code examples
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Educational context&lt;/strong&gt; for developers learning security best practices&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multiple output formats&lt;/strong&gt; (table, JSON, markdown, compact) for flexible CI/CD integration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The tool scans for hardcoded secrets, JWT token misuse, insecure cookies, dangerous eval() usage, CORS misconfiguration, exposed environment files, weak cryptography, and poor password handling. All common pitfalls that security tools often miss in real world codebases.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Tech Stack:&lt;/strong&gt; TypeScript, Node.js, Bun (runtime)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Architecture:&lt;/strong&gt; Rule based detection engine with modular security rules, configurable patterns, and file scanning with severity filtering.&lt;/p&gt;

&lt;p&gt;I created scry because most security scanners either overwhelm developers with noise or fail to educate them on &lt;em&gt;why&lt;/em&gt; something is risky. scry balances these by providing focused, high signal security findings with educational explanations that help developers understand vulnerabilities, not just fix them.&lt;/p&gt;

&lt;h2&gt;
  
  
  See It In Action
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Table Output (default):&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%2Ftb0x51vc1a5q9lu8fkhc.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%2Ftb0x51vc1a5q9lu8fkhc.png" alt="scry scan output showing table format with security findings" width="800" height="398"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;With Explanations (&lt;code&gt;--explain&lt;/code&gt;):&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%2F5x0m1gx05x8q80vt46aj.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%2F5x0m1gx05x8q80vt46aj.png" alt="scry --explain output showing detailed explanations for each finding" width="800" height="398"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;JSON Output (&lt;code&gt;--output json&lt;/code&gt;):&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%2F330ge2qsc49061634q2k.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%2F330ge2qsc49061634q2k.png" alt="scry --output json showing structured JSON format" width="800" height="383"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Compact Output (&lt;code&gt;--output compact&lt;/code&gt;):&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%2Facgnbxs4gz2v1wa0wvkm.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%2Facgnbxs4gz2v1wa0wvkm.png" alt="scry --output compact showing compact format" width="800" height="151"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Markdown Output (&lt;code&gt;--output markdown&lt;/code&gt;):&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%2F4l10q4pzw7ghaun1jcpm.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%2F4l10q4pzw7ghaun1jcpm.png" alt="scry --output markdown showing professional markdown report" width="800" height="272"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  How GitHub Copilot CLI Helped
&lt;/h2&gt;

&lt;p&gt;This is where GitHub Copilot CLI made a &lt;strong&gt;massive difference&lt;/strong&gt;. Rather than manually researching and implementing everything, Copilot helped me in three critical ways:&lt;/p&gt;
&lt;h3&gt;
  
  
  1. &lt;strong&gt;Structured Security Research (Password Handling Plan)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;I asked Copilot CLI: &lt;em&gt;"What are practices considered poor password handling?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Instead of getting a wall of text, Copilot organized vulnerabilities into actionable categories:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Storage Issues:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Plaintext password storage&lt;/li&gt;
&lt;li&gt;Weak hashing (MD5, SHA1)&lt;/li&gt;
&lt;li&gt;Missing/reused salts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Transmission Problems:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HTTP vs HTTPS exposure&lt;/li&gt;
&lt;li&gt;Passwords in logs or URLs&lt;/li&gt;
&lt;li&gt;Client side leaks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Implementation Flaws:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No rate limiting on login attempts&lt;/li&gt;
&lt;li&gt;Weak password requirements&lt;/li&gt;
&lt;li&gt;Custom crypto implementations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This structure directly informed my detection rules each category became a specific regex pattern in the &lt;code&gt;passwordSecurity&lt;/code&gt; rule. Instead of 3 hours of scattered research, I had a structured implementation roadmap in minutes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key insight:&lt;/strong&gt; Copilot's categorization was far better than raw OWASP lists because it mapped directly to &lt;em&gt;detectable patterns in code&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;see full research:&lt;/strong&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%2Faeps49pzvtxhse6miwrw.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%2Faeps49pzvtxhse6miwrw.png" alt="docs/copilot workings/password-handling-plan/" width="800" height="437"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  2. &lt;strong&gt;Comprehensive Code Auditing (Critical Bug Discovery)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Using Copilot CLI for holistic code analysis, I discovered &lt;strong&gt;critical issues that would take 10+ hours of manual review to find&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Regex State Management Bug:&lt;/strong&gt; Global regex patterns with the &lt;code&gt;/g&lt;/code&gt; flag reused across loop iterations, causing inconsistent results JavaScript specific behavior nearly invisible without cross file analysis&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Silent Error Swallowing:&lt;/strong&gt; File read failures caught in try catch but never logged, causing scan failures to go completely undetected&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Regex DoS Vulnerability:&lt;/strong&gt; Backtracking patterns susceptible to denial of service attacks on adversarial input&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;False Positive Floods:&lt;/strong&gt; 40 character hex patterns matching Git commit SHAs, flooding results with noise&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These issues are &lt;strong&gt;extremely difficult for humans to spot&lt;/strong&gt; because they require:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cross file context and async pattern recognition&lt;/li&gt;
&lt;li&gt;Regex/JavaScript runtime expertise&lt;/li&gt;
&lt;li&gt;Security mindset for adversarial input thinking&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After fixing these critical issues guided by Copilot's analysis:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[+] Eliminated 40% false positives in findings&lt;/li&gt;
&lt;li&gt;[+] Ensured scan reliability (no silent failures)&lt;/li&gt;
&lt;li&gt;[+] Prevented DoS vulnerabilities&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;See full analysis:&lt;/strong&gt; &lt;a href="https://github.com/Johsam-f/scry/blob/main/docs/copilot%20workings/code-analysis-for-improvements/notes.md" rel="noopener noreferrer"&gt;docs/copilot workings/code-analysis-for-improvements/notes.md&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  3. &lt;strong&gt;Implementation Planning with AI Insights&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;For complex features like password handling detection, I used Copilot to think through edge cases and implementation details before coding. This prevented costly refactors and ensured the detection rules covered real world vulnerable patterns, not just theoretical ones.&lt;/p&gt;
&lt;h2&gt;
  
  
  Installation &amp;amp; Usage
&lt;/h2&gt;

&lt;p&gt;Install from npm:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Global installation&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @johsam-f/scry

&lt;span class="c"&gt;# Or use with npx (no installation required)&lt;/span&gt;
npx @johsam-f/scry scan &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Basic commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Scan current directory&lt;/span&gt;
scry scan &lt;span class="nb"&gt;.&lt;/span&gt;

&lt;span class="c"&gt;# Scan specific path  &lt;/span&gt;
scry scan ./src

&lt;span class="c"&gt;# Show explanations and fixes&lt;/span&gt;
scry scan &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="nt"&gt;--explain&lt;/span&gt; &lt;span class="nt"&gt;--fix&lt;/span&gt;

&lt;span class="c"&gt;# Output as JSON for CI/CD&lt;/span&gt;
scry scan &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="nt"&gt;--output&lt;/span&gt; json

&lt;span class="c"&gt;# Strict mode (exit code 1 if issues found)&lt;/span&gt;
scry scan &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="nt"&gt;--strict&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For a complete command reference, see &lt;a href="https://github.com/Johsam-f/scry/blob/main/commands.md" rel="noopener noreferrer"&gt;commands.md&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What scry Detects (8 Security Rules)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Hardcoded Secrets&lt;/strong&gt; - API keys, tokens, AWS credentials&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JWT in Client Storage&lt;/strong&gt; - localStorage/sessionStorage token exposure&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Insecure Cookies&lt;/strong&gt; - Missing httpOnly, secure, sameSite flags&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;eval() Usage&lt;/strong&gt; - Dangerous dynamic code execution&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CORS Misconfiguration&lt;/strong&gt; - Overly permissive allow-origins&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;.env Exposure&lt;/strong&gt; - Credentials in version control&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Weak Cryptography&lt;/strong&gt; - MD5, SHA1, unsalted hashing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Password Security&lt;/strong&gt; - Plaintext storage, weak validation, insecure transmission&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Example Output
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Severity | Rule               | File          | Line | Message
---------|--------------------| --------------|------|---------------------
  HIGH   | hardcoded-secrets  | src/config.ts | 14   | Hardcoded API key
  HIGH   | jwt-storage        | src/auth.ts   | 28   | JWT in localStorage
 MEDIUM  | cors-config        | src/server.ts | 45   | Permissive CORS

✓ Summary: 3 issues found in 847 files (2.3s)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Vulnerable Code Example
&lt;/h2&gt;

&lt;p&gt;Here's code that scry detects:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Password Security Issue&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;users&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;admin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;password123&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;// [x] scry flags: plaintext password storage&lt;/span&gt;
  &lt;span class="na"&gt;user&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;letmein&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;       &lt;span class="c1"&gt;// [x] weak password&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="c1"&gt;// Hardcoded Secrets&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;apiKey&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ghp_abcd1234efgh5678ijkl9012mnop3456qrst&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;// [x] GitHub token exposed&lt;/span&gt;

&lt;span class="c1"&gt;// JWT Misuse&lt;/span&gt;
&lt;span class="nx"&gt;localStorage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;token&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;jwtToken&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  &lt;span class="c1"&gt;// [x] JWT in client-side storage&lt;/span&gt;

&lt;span class="c1"&gt;// Insecure Cookies&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;setHeader&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Set-Cookie&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;`session=&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  &lt;span class="c1"&gt;// [x] Missing httpOnly flag&lt;/span&gt;

&lt;span class="c1"&gt;// CORS Problem  &lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;cors&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;origin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;*&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;}));&lt;/span&gt;  &lt;span class="c1"&gt;// [x] Allows all origins&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;scry catches all of these and provides fix suggestions with secure alternatives.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Learnings
&lt;/h2&gt;

&lt;h3&gt;
  
  
  When Building Security Tools, AI Helps Most With:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Comprehensive Analysis&lt;/strong&gt; - AI can audit entire codebases for subtle cross-file bugs that humans miss in isolated code review&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security Research&lt;/strong&gt; - Structuring vulnerability categories helps map abstract security concepts to detectable patterns&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Edge Case Discovery&lt;/strong&gt; - AI patterns can surface non-obvious issues (regex state mutations, silent errors) that only emerge through holistic analysis&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Implementation Planning&lt;/strong&gt; - Thinking through complex features before coding prevents costly refactors&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Important Development Principle:
&lt;/h3&gt;

&lt;p&gt;During this project, I learned that &lt;strong&gt;avoiding parallel implementations is critical when using AI assistance&lt;/strong&gt;. Implementing multiple features simultaneously with AI help leads to confusion and makes it harder to track changes and identify issues. By focusing on one implementation at a time and thoroughly testing each change, I maintained code quality and clarity.&lt;/p&gt;

&lt;h3&gt;
  
  
  Beyond the Tool:
&lt;/h3&gt;

&lt;p&gt;Building scry taught me that security tools work best when they educate, not just alert. Developers shouldn't just &lt;em&gt;fix&lt;/em&gt; vulnerabilities they should &lt;em&gt;understand&lt;/em&gt; why they matter. That's where good tooling and clear explanations create lasting impact.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Full Story
&lt;/h2&gt;

&lt;p&gt;The detailed documentation of how I used GitHub Copilot CLI including screenshots, prompts, analysis results, and implementation decisions is available in the repository:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/Johsam-f/scry/tree/main/docs/copilot%20workings" rel="noopener noreferrer"&gt;docs/copilot workings/&lt;/a&gt;&lt;/strong&gt; contains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Password handling strategy (&lt;a href="https://github.com/Johsam-f/scry/tree/main/docs/copilot%20workings/password-handling-plan" rel="noopener noreferrer"&gt;password-handling-plan/&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Critical bug audits (&lt;a href="https://github.com/Johsam-f/scry/tree/main/docs/copilot%20workings/code-analysis-for-improvements" rel="noopener noreferrer"&gt;code-analysis-for-improvements/&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Implementation planning notes with AI insights&lt;/li&gt;
&lt;li&gt;And much more!&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try It Out
&lt;/h2&gt;

&lt;p&gt;scry is open source and ready to scan your codebase:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx @johsam-f/scry scan &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or install locally/globally from npm:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @johsam-f/scry
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; @johsam-f/scry
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or without installation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx @johsam-f/scry scan &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Contributions welcome! &lt;a href="https://github.com/Johsam-f/scry" rel="noopener noreferrer"&gt;GitHub Repo&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Please feel free to ask, suggest improvements, give me some developer love, some advice, or whatever you feel like sharing with me, or just say hi!&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/github-2026-01-21"&gt;GitHub Copilot CLI Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>githubchallenge</category>
      <category>cli</category>
      <category>githubcopilot</category>
    </item>
  </channel>
</rss>
