<?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: Ayomide Onibokun</title>
    <description>The latest articles on DEV Community by Ayomide Onibokun (@ayomideonibokun).</description>
    <link>https://dev.to/ayomideonibokun</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%2F361781%2F336936aa-e4b6-4baa-8130-033dc5d657e1.jpg</url>
      <title>DEV Community: Ayomide Onibokun</title>
      <link>https://dev.to/ayomideonibokun</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ayomideonibokun"/>
    <language>en</language>
    <item>
      <title>The Art of Agentic Rules: How to Architect a Project-Aware AI</title>
      <dc:creator>Ayomide Onibokun</dc:creator>
      <pubDate>Tue, 23 Dec 2025 18:51:34 +0000</pubDate>
      <link>https://dev.to/ayomideonibokun/the-art-of-agentic-rules-how-to-architect-a-project-aware-ai-998</link>
      <guid>https://dev.to/ayomideonibokun/the-art-of-agentic-rules-how-to-architect-a-project-aware-ai-998</guid>
      <description>&lt;p&gt;In the era of "Agentic IDEs" like Cursor, Windsurf, and Antigravity, the role of the developer is shifting from writing code to architecting context. Most developers treat these tools like smarter autocomplete, dropping a prompt and hoping for the best. &lt;strong&gt;This approach fails because code generation is only as good as the constraints you place upon it.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This article shows you how to move from generic prompting to building a &lt;strong&gt;Project-Aware Agent&lt;/strong&gt; using structured rule files. We synthesize lessons from open-source projects like &lt;strong&gt;Coolify&lt;/strong&gt; and &lt;strong&gt;Supabase&lt;/strong&gt; to provide you with a universal framework for defining your own agentic constraints.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Core Philosophy: Don't Just Guide, Constrain
&lt;/h2&gt;

&lt;p&gt;The biggest mistake developers make with AI context is assuming "more is better." They dump their entire documentation into the chat.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This is wrong.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AI models suffer from "context pollution." If you feed an agent React documentation, generic TypeScript guides, and your entire legacy codebase, it gets confused. It might suggest a React 16 pattern for a React 18 project, or use a deprecated library function because it saw it in an old file.&lt;/p&gt;

&lt;p&gt;Effective agentic rules follow two key philosophies:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Context-Aware Loading (The "Sniper" Approach)
&lt;/h3&gt;

&lt;p&gt;Don't load every rule for every file. Use glob matching to target specific instructions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Good example:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Database rules&lt;/strong&gt; only load when touching &lt;code&gt;schema.prisma&lt;/code&gt; or &lt;code&gt;backend/db/*.ts&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Frontend component rules&lt;/strong&gt; only activate for &lt;code&gt;src/components/**/*.tsx&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Bad example:&lt;/strong&gt;&lt;br&gt;
Loading your entire "Best Practices" document into every chat session, regardless of whether you are writing SQL or CSS.&lt;/p&gt;
&lt;h3&gt;
  
  
  2. The "Negation" Strategy (Anti-Patterns)
&lt;/h3&gt;

&lt;p&gt;It is often more effective to tell an AI what &lt;em&gt;NOT&lt;/em&gt; to do than what to do. Explicitly banning patterns reduces the search space for the model, forcing it toward the correct solution.&lt;/p&gt;
&lt;h2&gt;
  
  
  Key Strategies From Coolify and Supabase
&lt;/h2&gt;

&lt;p&gt;Analyzing frameworks like Coolify and Supabase reveals a standardized approach to agentic configuration.&lt;/p&gt;
&lt;h3&gt;
  
  
  1. Centralized Documentation Architecture
&lt;/h3&gt;

&lt;p&gt;Instead of scattering instructions in prompts, maintain a single source of truth.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Coolify&lt;/strong&gt; uses a &lt;code&gt;.ai/&lt;/code&gt; directory with topic-specific markdown files (e.g., &lt;code&gt;testing.md&lt;/code&gt;, &lt;code&gt;laravel.md&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Supabase&lt;/strong&gt; uses &lt;code&gt;.mdc&lt;/code&gt; files with structured frontmatter metadata.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  2. Context-Aware Rule Application
&lt;/h3&gt;

&lt;p&gt;Supabase excels at this. They use frontmatter to define exactly when a rule applies:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Standards&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;for&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;writing&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;database&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;functions"&lt;/span&gt;
&lt;span class="na"&gt;globs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;supabase/migrations/*.sql"&lt;/span&gt;
&lt;span class="na"&gt;alwaysApply&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This ensures the agent only "thinks" about database security when it's actually writing SQL.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Explicit Anti-Pattern Prevention
&lt;/h3&gt;

&lt;p&gt;Supabase's rules often include sections that visually distinguish critical constraints:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;🚨 CRITICAL INSTRUCTIONS&lt;/strong&gt;&lt;br&gt;
❌ NEVER generate this code pattern...&lt;br&gt;
✅ CORRECT implementation...&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This visual distinction helps the model prioritize safety constraints over creative generation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Case Study: From Generic To Intelligent
&lt;/h2&gt;

&lt;p&gt;How does this evolution look in practice? Let's trace the journey of a hypothetical project, "Project X".&lt;/p&gt;

&lt;h3&gt;
  
  
  Phase 1: The Generic Agent (The "Junior")
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Setup&lt;/strong&gt;: No custom rules.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Behavior&lt;/strong&gt;: The agent writes standard, syntactically correct code.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Problem&lt;/strong&gt;: It uses &lt;code&gt;any&lt;/code&gt; types, imports generic libraries (like &lt;code&gt;lodash&lt;/code&gt;) that you don't use, and writes tests that don't match your mocking strategy. You have to rewrite 30% of its output.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Phase 2: The Rules-Based Agent (The "Mid-Level")
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Setup&lt;/strong&gt;: Added &lt;code&gt;.cursor/rules/typescript.md&lt;/code&gt; and &lt;code&gt;.cursor/rules/testing.md&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Behavior&lt;/strong&gt;: The agent now respects &lt;code&gt;strict: true&lt;/code&gt; in TypeScript and uses your preferred testing library.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Problem&lt;/strong&gt;: It still makes architectural mistakes. It might import a server-side module into a client component or create circular dependencies.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Phase 3: The Project-Aware Agent (The "Senior")
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Setup&lt;/strong&gt;: Added rules for &lt;strong&gt;Architecture&lt;/strong&gt;, &lt;strong&gt;Workflow&lt;/strong&gt;, and &lt;strong&gt;Tech Stack Constraints&lt;/strong&gt;.

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Tech Stack&lt;/strong&gt;: "NEVER use OpenAI SDK &amp;lt; 4.0.0".&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Architecture&lt;/strong&gt;: "Modules in &lt;code&gt;shared/&lt;/code&gt; can NEVER import from &lt;code&gt;features/&lt;/code&gt;".&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Workflow&lt;/strong&gt;: "When adding a new API provider, you MUST follow these 5 steps..."&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;  &lt;strong&gt;Behavior&lt;/strong&gt;: The agent now acts as a guardian of your codebase. It refuses to write code that violates architectural boundaries and self-corrects if it accidentally uses a forbidden pattern.&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Practical Checklist: Building Your Rules
&lt;/h2&gt;

&lt;p&gt;Ready to verify if your agentic setup is mature? Use this checklist to build your own "Team Brain."&lt;/p&gt;

&lt;h3&gt;
  
  
  1. The Directory Structure
&lt;/h3&gt;

&lt;p&gt;Create a dedicated folder (e.g., &lt;code&gt;.cursor/rules&lt;/code&gt; or &lt;code&gt;.agent/rules&lt;/code&gt;) to house your brain.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.agent/rules/
├── stack-versions.md       # "We use Next.js 14, Tailwind 3.4..."
├── architecture.md         # "Frontend cannot talk to DB directly..."
├── anti-patterns.md        # "Never use 'any', never use 'console.log'..."
└── workflows/
    └── add-feature.md      # "Step 1: Create type, Step 2: Create component..."
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. The Tech Stack Authority
&lt;/h3&gt;

&lt;p&gt;Create a file that lists your exact versions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters&lt;/strong&gt;: This prevents "hallucinated upgrades" where the AI uses features from a version you don't have.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Content Example&lt;/strong&gt;: "We use Node 18 (ESM). We use React Query v5 (not v4)."&lt;/p&gt;

&lt;h3&gt;
  
  
  3. The "Gotchas" File
&lt;/h3&gt;

&lt;p&gt;Every project has weird bugs or constraints. Document these as explicitly as possible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Format&lt;/strong&gt;: "⚠️ WARNING: When using &lt;code&gt;DatePicker&lt;/code&gt;, ALWAYS provide &lt;code&gt;timeZone&lt;/code&gt; prop."&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Workflow Automation
&lt;/h3&gt;

&lt;p&gt;Don't just define code styles; define &lt;em&gt;processes&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt;: "To add a new endpoint: 1. Define Zod schema. 2. Create handler. 3. Register in router. 4. Write integration test."&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion: Start With One Rule
&lt;/h2&gt;

&lt;p&gt;The difference between a frustrating AI experience and a productive one often comes down to clear documentation. By treating agentic rules as a versioned, structured, and maintained part of your codebase, you transform your IDE into a project-aware assistant that strictly follows your team's standards.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don't try to document everything at once.&lt;/strong&gt; Start small. Add &lt;strong&gt;one rule&lt;/strong&gt; today that stops the AI from making that one mistake it makes every single time, and you will see immediate improvements in your workflow.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>agents</category>
      <category>llm</category>
    </item>
    <item>
      <title>Automate Content Quality with VectorLint GitHub Action</title>
      <dc:creator>Ayomide Onibokun</dc:creator>
      <pubDate>Sat, 20 Dec 2025 09:02:46 +0000</pubDate>
      <link>https://dev.to/ayomideonibokun/automate-content-quality-with-vectorlint-github-action-5d4g</link>
      <guid>https://dev.to/ayomideonibokun/automate-content-quality-with-vectorlint-github-action-5d4g</guid>
      <description>&lt;p&gt;Content reviews can be time-consuming for technical writers, especially when working with new writers who are just adjusting to your style guide, resulting in repetitive comments that are often the same. These repetitive checks take time away from content strategy and information architecture.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.npmjs.com/package/vectorlint" rel="noopener noreferrer"&gt;VectorLint&lt;/a&gt;&lt;/strong&gt; aims to solve this by automating your content reviews using LLMs to evaluate and score your content. It uses &lt;a href="https://en.wikipedia.org/wiki/LLM-as-a-Judge" rel="noopener noreferrer"&gt;LLM-as-a-Judge&lt;/a&gt; to catch content quality issues that typically require human judgment.&lt;/p&gt;

&lt;p&gt;Instead of you acting as the style police, VectorLint runs AI-powered quality checks directly in your Pull Requests. It catches issues defined by your style rules before you even open the review. Writers get immediate feedback, and reviewers can do what they do best, which is providing actionable feedback and helping writers improve their content.&lt;/p&gt;

&lt;p&gt;This guide walks you through setting up VectorLint, configuring AI providers, and customizing rules for your content types.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick Integration
&lt;/h2&gt;

&lt;p&gt;Add VectorLint to your repository with this workflow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;VectorLint&lt;/span&gt;

&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;pull_request&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;paths&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;**/*.md'&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;**/*.mdx'&lt;/span&gt;

&lt;span class="na"&gt;permissions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;contents&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;read&lt;/span&gt;
  &lt;span class="na"&gt;pull-requests&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;write&lt;/span&gt;
  &lt;span class="na"&gt;checks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;write&lt;/span&gt;

&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;lint&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v4&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Run VectorLint&lt;/span&gt;
        &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;TRocket-Labs/vectorlint-action@v1&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;llm_provider&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;anthropic&lt;/span&gt;
          &lt;span class="na"&gt;anthropic_api_key&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ secrets.ANTHROPIC_API_KEY }}&lt;/span&gt;
          &lt;span class="na"&gt;reporter&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;github-pr-check&lt;/span&gt;
          &lt;span class="na"&gt;filter_mode&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;added&lt;/span&gt;
          &lt;span class="na"&gt;fail_on_error&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For more details on configuration check out the VectorLint Action Repo:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub&lt;/strong&gt;: &lt;a href="https://github.com/TRocket-Labs/vectorlint-action" rel="noopener noreferrer"&gt;TRocket-Labs/vectorlint-action&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Setup Guide
&lt;/h2&gt;

&lt;p&gt;Want to see VectorLint in action before setting it up? Check out this working example:&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://github.com/ayo6706/vectorlint" rel="noopener noreferrer"&gt;ayo6706/vectorlint&lt;/a&gt;&lt;/strong&gt; - Fork it, open a PR with markdown changes, and watch VectorLint review your content.&lt;/p&gt;

&lt;h3&gt;
  
  
  Before You Start
&lt;/h3&gt;

&lt;p&gt;You'll need:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;An API key&lt;/strong&gt; from OpenAI, Anthropic, Google Gemini, or Azure OpenAI&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The API key stored in GitHub Secrets&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Go to Settings → Secrets and variables → Actions&lt;/li&gt;
&lt;li&gt;Click "New repository secret"&lt;/li&gt;
&lt;li&gt;Name it &lt;code&gt;ANTHROPIC_API_KEY&lt;/code&gt; (or match your provider)&lt;/li&gt;
&lt;li&gt;Save it&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Quick Start (5 Minutes)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Create your rules folder&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Create &lt;code&gt;.github/rules/MyRules/ai-pattern-evaluator.md&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;specVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;1.0.0&lt;/span&gt;
&lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;subjective&lt;/span&gt;

&lt;span class="na"&gt;severity&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;warning&lt;/span&gt;
&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;AI Pattern Detector&lt;/span&gt;
&lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;AIPatterns&lt;/span&gt;
&lt;span class="na"&gt;target&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;regex&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;[\s\S]+'&lt;/span&gt;
  &lt;span class="na"&gt;flags&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;mu'&lt;/span&gt;
  &lt;span class="na"&gt;group&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
  &lt;span class="na"&gt;required&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
  &lt;span class="na"&gt;suggestion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Content must not be empty for AI pattern detection.&lt;/span&gt;
&lt;span class="na"&gt;criteria&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Language Authenticity&lt;/span&gt;
    &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;LanguageAuthenticity&lt;/span&gt;
    &lt;span class="na"&gt;weight&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;20&lt;/span&gt;
    &lt;span class="na"&gt;severity&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;error&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Structural Naturalness&lt;/span&gt;
    &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;StructuralNaturalness&lt;/span&gt;
    &lt;span class="na"&gt;weight&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;20&lt;/span&gt;
    &lt;span class="na"&gt;severity&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;warning&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Transitional Flow&lt;/span&gt;
    &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;TransitionalFlow&lt;/span&gt;
    &lt;span class="na"&gt;weight&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;20&lt;/span&gt;
    &lt;span class="na"&gt;severity&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;warning&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Emphatic Contrast Patterns&lt;/span&gt;
    &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;EmphaticContrastPatterns&lt;/span&gt;
    &lt;span class="na"&gt;weight&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;20&lt;/span&gt;
    &lt;span class="na"&gt;severity&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;warning&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Opening Authenticity&lt;/span&gt;
    &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;OpeningAuthenticity&lt;/span&gt;
    &lt;span class="na"&gt;weight&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;20&lt;/span&gt;
    &lt;span class="na"&gt;severity&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;warning&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;

You are an expert content evaluator specializing in identifying AI-generated writing patterns. Your goal is to detect specific AI patterns in written content and provide targeted improvement suggestions to make the writing more natural and human-like.

&lt;span class="gu"&gt;## INSTRUCTION&lt;/span&gt;
Evaluate the provided content against 5 key criteria that identify common AI writing patterns. For each criterion, count the number of pattern violations, assign a score based on frequency, and provide specific examples with improvement suggestions. Calculate weighted scores and provide a final humanness score out of 100.

&lt;span class="gu"&gt;## EVALUATION STEPS&lt;/span&gt;
&lt;span class="p"&gt;1.&lt;/span&gt; Read the entire content carefully
&lt;span class="p"&gt;2.&lt;/span&gt; For each criterion, systematically scan for the specific patterns listed
&lt;span class="p"&gt;3.&lt;/span&gt; Count each occurrence of the patterns
&lt;span class="p"&gt;4.&lt;/span&gt; Note the exact phrases/structures that match the patterns
&lt;span class="p"&gt;5.&lt;/span&gt; Assign scores based on violation frequency
&lt;span class="p"&gt;6.&lt;/span&gt; Calculate weighted scores
&lt;span class="p"&gt;7.&lt;/span&gt; Provide specific examples and suggested rewrites for all violations found

&lt;span class="gu"&gt;## CONTEXT BANK&lt;/span&gt;

&lt;span class="gu"&gt;### What Counts as a Violation?&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**AI Buzzwords:**&lt;/span&gt; Any use of the 30 listed buzzwords (even if used appropriately)
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Overly Formal Phrases:**&lt;/span&gt; Unnecessarily sophisticated language that sounds unnatural in context
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Overused Action Verbs:**&lt;/span&gt; Repetitive use of the same "impressive" verbs (e.g., using "leverage" multiple times)
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Bullet Points with Bold Titles:**&lt;/span&gt; Formatting pattern of &lt;span class="gs"&gt;**Bold Title:**&lt;/span&gt; followed by explanation
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Consecutive Simple Sentences:**&lt;/span&gt; 3+ simple sentences in a row with same structure
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Rule of Three:**&lt;/span&gt; Grouping items in threes repeatedly (not occasional use, but overuse)
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Formulaic Transitions:**&lt;/span&gt; Starting sentences/paragraphs with formal transitions
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Excessive Em Dashes:**&lt;/span&gt; Using em dashes (—) more than sparingly for dramatic effect
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**From-To Structures:**&lt;/span&gt; Repetitive "from X to Y" constructions
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Emphatic Contrasts:**&lt;/span&gt; "Not just/only...but (also)" or "didn't...but" patterns
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Generic Openings:**&lt;/span&gt; Starting with broad, obvious statements about "today's world," "modern era," etc.

&lt;span class="gu"&gt;### Counting Guidelines&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Count each distinct occurrence
&lt;span class="p"&gt;-&lt;/span&gt; If the same buzzword appears 3 times, that's 3 violations
&lt;span class="p"&gt;-&lt;/span&gt; Multiple patterns in one sentence count separately
&lt;span class="p"&gt;-&lt;/span&gt; Only count clear, unambiguous pattern matches

&lt;span class="gu"&gt;## RUBRIC&lt;/span&gt;

&lt;span class="gh"&gt;# 1. Language Authenticity &amp;lt;weight=20&amp;gt;&lt;/span&gt;
Detects unnatural word choices that signal AI generation: buzzwords, overly formal phrases, and overused action verbs.

&lt;span class="gs"&gt;**Patterns to identify:**&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**AI Buzzwords (30 total):**&lt;/span&gt; elevate, delve, explore (overused), leverage, enhance, utilize, foster, propel, optimize, catalyze, disrupt, synergize, ensure, illuminate, cultivate, prowess, harness, turbocharge, spearheaded, energize, navigate, deploy, elucidate, galvanize, reimagine, streamline, unlock, seamless, "in the world of", "game-changer"
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Overly Formal Phrases:**&lt;/span&gt; "delve into," "navigate the landscape," "meticulously," "realm," etc.
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Overused Action Verbs:**&lt;/span&gt; Repetitive use of impressive verbs like "foster/fostering," "leverage/leveraging"

&lt;span class="gu"&gt;### Excellent &amp;lt;score=4&amp;gt;&lt;/span&gt;
0 violations detected. Language is natural and conversational.

&lt;span class="gu"&gt;### Good &amp;lt;score=3&amp;gt;&lt;/span&gt;
1-2 violations detected. Occasional AI-like language but mostly natural.

&lt;span class="gu"&gt;### Fair &amp;lt;score=2&amp;gt;&lt;/span&gt;
3-4 violations detected. Noticeable AI patterns affecting authenticity.

&lt;span class="gu"&gt;### Poor &amp;lt;score=1&amp;gt;&lt;/span&gt;
5+ violations detected. Heavy use of AI buzzwords and unnatural phrasing.
&lt;span class="p"&gt;
---
&lt;/span&gt;
&lt;span class="gh"&gt;# 2. Structural Naturalness &amp;lt;weight=20&amp;gt;&lt;/span&gt;
Detects robotic organization patterns: excessive formatting, repetitive sentence structures, and rule of three overuse.

&lt;span class="gs"&gt;**Patterns to identify:**&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Overly Structured Format:**&lt;/span&gt; Bullet points with bold titles (e.g., &lt;span class="gs"&gt;**Innovation**&lt;/span&gt;: text...), numbered body paragraphs inappropriately
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Repetitive Sentence Structures:**&lt;/span&gt; 3+ consecutive simple sentences, repetitive participial phrases (X, doing Y, doing Z)
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Rule of Three Overuse:**&lt;/span&gt; Constantly grouping things in threes (triple adjectives, triple phrases)

&lt;span class="gu"&gt;### Excellent &amp;lt;score=4&amp;gt;&lt;/span&gt;
0 violations detected. Structure varies naturally throughout.

&lt;span class="gu"&gt;### Good &amp;lt;score=3&amp;gt;&lt;/span&gt;
1-2 violations detected. Occasional structural patterns but mostly varied.

&lt;span class="gu"&gt;### Fair &amp;lt;score=2&amp;gt;&lt;/span&gt;
3-4 violations detected. Noticeable repetitive structure affecting flow.

&lt;span class="gu"&gt;### Poor &amp;lt;score=1&amp;gt;&lt;/span&gt;
5+ violations detected. Heavy formulaic structure throughout.
&lt;span class="p"&gt;
---
&lt;/span&gt;
&lt;span class="gh"&gt;# 3. Transitional Flow &amp;lt;weight=20&amp;gt;&lt;/span&gt;
Detects mechanical connection patterns: formulaic transitions, excessive em dashes, and from-to structures.

&lt;span class="gs"&gt;**Patterns to identify:**&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Formulaic Transitions:**&lt;/span&gt; "Moreover," "Furthermore," "It is important to note," "Additionally" starting sentences/paragraphs
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Excessive Em Dash Usage:**&lt;/span&gt; Overusing em dashes (—) for pauses or explanations
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**From-To Structures:**&lt;/span&gt; Repetitive "from X to Y" constructions

&lt;span class="gu"&gt;### Excellent &amp;lt;score=4&amp;gt;&lt;/span&gt;
0 violations detected. Transitions flow naturally and vary.

&lt;span class="gu"&gt;### Good &amp;lt;score=3&amp;gt;&lt;/span&gt;
1-2 violations detected. Occasional formulaic transitions but mostly natural.

&lt;span class="gu"&gt;### Fair &amp;lt;score=2&amp;gt;&lt;/span&gt;
3-4 violations detected. Noticeable mechanical transition patterns.

&lt;span class="gu"&gt;### Poor &amp;lt;score=1&amp;gt;&lt;/span&gt;
5+ violations detected. Heavy reliance on formulaic connectors.
&lt;span class="p"&gt;
---
&lt;/span&gt;
&lt;span class="gh"&gt;# 4. Emphatic Contrast Patterns &amp;lt;weight=20&amp;gt;&lt;/span&gt;
Detects overuse of emphatic negation structures that signal AI generation.

&lt;span class="gs"&gt;**Patterns to identify:**&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Emphatic Negations:**&lt;/span&gt; "Not only...but also," "It is not just about X, it's about Y," "didn't...but" structures

&lt;span class="gu"&gt;### Excellent &amp;lt;score=4&amp;gt;&lt;/span&gt;
0 violations detected. Contrasts expressed naturally.

&lt;span class="gu"&gt;### Good &amp;lt;score=3&amp;gt;&lt;/span&gt;
1-2 violations detected. Occasional emphatic contrast but acceptable.

&lt;span class="gu"&gt;### Fair &amp;lt;score=2&amp;gt;&lt;/span&gt;
3-4 violations detected. Noticeable pattern of emphatic negations.

&lt;span class="gu"&gt;### Poor &amp;lt;score=1&amp;gt;&lt;/span&gt;
5+ violations detected. Heavy reliance on "not just...but" formulas.
&lt;span class="p"&gt;
---
&lt;/span&gt;
&lt;span class="gh"&gt;# 5. Opening Authenticity &amp;lt;weight=20&amp;gt;&lt;/span&gt;
Detects generic, overly broad opening statements typical of AI writing.

&lt;span class="gs"&gt;**Patterns to identify:**&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Generic Openings:**&lt;/span&gt; "In today's rapidly evolving world," "In the modern era," "In the digital age," "In today's landscape," etc.

&lt;span class="gu"&gt;### Excellent &amp;lt;score=4&amp;gt;&lt;/span&gt;
0 violations detected. Opening is specific and engaging.

&lt;span class="gu"&gt;### Good &amp;lt;score=3&amp;gt;&lt;/span&gt;
1-2 violations detected. Minor generic elements in opening.

&lt;span class="gu"&gt;### Fair &amp;lt;score=2&amp;gt;&lt;/span&gt;
3-4 violations detected. Multiple generic statements in opening.

&lt;span class="gu"&gt;### Poor &amp;lt;score=1&amp;gt;&lt;/span&gt;
5+ violations detected. Opening heavily relies on generic statements.
&lt;span class="p"&gt;
---
&lt;/span&gt;
&lt;span class="gu"&gt;## OUTPUT FORMAT&lt;/span&gt;

Provide your evaluation in the following structure:

&lt;span class="gu"&gt;### CRITERION 1: LANGUAGE AUTHENTICITY&lt;/span&gt;
&lt;span class="gs"&gt;**Raw Score:**&lt;/span&gt; [1-4]  
&lt;span class="gs"&gt;**Weighted Score:**&lt;/span&gt; [Raw Score ÷ 4 × 20 = X/20]  
&lt;span class="gs"&gt;**Violations Found:**&lt;/span&gt; [number]

&lt;span class="gs"&gt;**Examples:**&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; "[exact phrase from content]" → Suggested revision: "[improved version]"
&lt;span class="p"&gt;-&lt;/span&gt; "[exact phrase from content]" → Suggested revision: "[improved version]"

[Continue for all violations]
&lt;span class="p"&gt;
---
&lt;/span&gt;
&lt;span class="gu"&gt;### CRITERION 2: STRUCTURAL NATURALNESS&lt;/span&gt;
&lt;span class="gs"&gt;**Raw Score:**&lt;/span&gt; [1-4]  
&lt;span class="gs"&gt;**Weighted Score:**&lt;/span&gt; [Raw Score ÷ 4 × 20 = X/20]  
&lt;span class="gs"&gt;**Violations Found:**&lt;/span&gt; [number]

&lt;span class="gs"&gt;**Examples:**&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; "[exact phrase/structure from content]" → Suggested revision: "[improved version]"

[Continue for all violations]
&lt;span class="p"&gt;
---
&lt;/span&gt;
&lt;span class="gu"&gt;### CRITERION 3: TRANSITIONAL FLOW&lt;/span&gt;
&lt;span class="gs"&gt;**Raw Score:**&lt;/span&gt; [1-4]  
&lt;span class="gs"&gt;**Weighted Score:**&lt;/span&gt; [Raw Score ÷ 4 × 20 = X/20]  
&lt;span class="gs"&gt;**Violations Found:**&lt;/span&gt; [number]

&lt;span class="gs"&gt;**Examples:**&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; "[exact phrase from content]" → Suggested revision: "[improved version]"

[Continue for all violations]
&lt;span class="p"&gt;
---
&lt;/span&gt;
&lt;span class="gu"&gt;### CRITERION 4: EMPHATIC CONTRAST PATTERNS&lt;/span&gt;
&lt;span class="gs"&gt;**Raw Score:**&lt;/span&gt; [1-4]  
&lt;span class="gs"&gt;**Weighted Score:**&lt;/span&gt; [Raw Score ÷ 4 × 20 = X/20]  
&lt;span class="gs"&gt;**Violations Found:**&lt;/span&gt; [number]

&lt;span class="gs"&gt;**Examples:**&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; "[exact phrase from content]" → Suggested revision: "[improved version]"

[Continue for all violations]
&lt;span class="p"&gt;
---
&lt;/span&gt;
&lt;span class="gu"&gt;### CRITERION 5: OPENING AUTHENTICITY&lt;/span&gt;
&lt;span class="gs"&gt;**Raw Score:**&lt;/span&gt; [1-4]  
&lt;span class="gs"&gt;**Weighted Score:**&lt;/span&gt; [Raw Score ÷ 4 × 20 = X/20]  
&lt;span class="gs"&gt;**Violations Found:**&lt;/span&gt; [number]

&lt;span class="gs"&gt;**Examples:**&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; "[exact phrase from content]" → Suggested revision: "[improved version]"

[Continue for all violations]
&lt;span class="p"&gt;
---
&lt;/span&gt;
&lt;span class="gu"&gt;## FINAL SCORE CALCULATION&lt;/span&gt;

&lt;span class="gs"&gt;**Total Weighted Score:**&lt;/span&gt; [Sum of all weighted scores] / 100

&lt;span class="gs"&gt;**Calculation:**&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Language Authenticity: [X/20]
&lt;span class="p"&gt;-&lt;/span&gt; Structural Naturalness: [X/20]
&lt;span class="p"&gt;-&lt;/span&gt; Transitional Flow: [X/20]
&lt;span class="p"&gt;-&lt;/span&gt; Emphatic Contrast Patterns: [X/20]
&lt;span class="p"&gt;-&lt;/span&gt; Opening Authenticity: [X/20]
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**TOTAL: [X/100]**&lt;/span&gt;
&lt;span class="p"&gt;
---
&lt;/span&gt;
&lt;span class="gu"&gt;## OVERALL ASSESSMENT&lt;/span&gt;

&lt;span class="gs"&gt;**Humanness Level:**&lt;/span&gt; [Excellent (90-100) / Good (75-89) / Fair (60-74) / Needs Improvement (&amp;lt;60)]

&lt;span class="gs"&gt;**Summary:**&lt;/span&gt; [2-3 sentence overview of the content's AI pattern profile]

&lt;span class="gs"&gt;**Priority Improvements:**&lt;/span&gt; [List the top 2-3 most critical patterns to address first]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 2: Create your config&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Create &lt;code&gt;vectorlint.ini&lt;/code&gt; in your repo root:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ini"&gt;&lt;code&gt;&lt;span class="py"&gt;RulesPath&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;.github/rules&lt;/span&gt;
&lt;span class="py"&gt;Concurrency&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;4&lt;/span&gt;
&lt;span class="py"&gt;DefaultSeverity&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;warning&lt;/span&gt;

&lt;span class="nn"&gt;[**/*.md]&lt;/span&gt;
&lt;span class="py"&gt;RunRules&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;MyRules&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 3: Add the GitHub Action&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Create &lt;code&gt;.github/workflows/vectorlint.yml&lt;/code&gt; with the YAML above.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4: Test it&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Commit everything and open a PR with markdown changes. VectorLint will review your content within 30-60 seconds.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; You can change triggers to &lt;code&gt;push&lt;/code&gt; or other events as needed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Configuration Options
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Choose Your AI Provider
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Anthropic (Claude)&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;llm_provider&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;anthropic&lt;/span&gt;
&lt;span class="na"&gt;anthropic_api_key&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ secrets.ANTHROPIC_API_KEY }}&lt;/span&gt;
&lt;span class="na"&gt;anthropic_model&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;claude-sonnet-4-20250514&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;OpenAI&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;llm_provider&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;openai&lt;/span&gt;
&lt;span class="na"&gt;openai_api_key&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ secrets.OPENAI_API_KEY }}&lt;/span&gt;
&lt;span class="na"&gt;openai_model&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;gpt-4o&lt;/span&gt;
&lt;span class="na"&gt;openai_temperature&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;0.2'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Google Gemini&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;llm_provider&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;gemini&lt;/span&gt;
&lt;span class="na"&gt;gemini_api_key&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ secrets.GEMINI_API_KEY }}&lt;/span&gt;
&lt;span class="na"&gt;gemini_model&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;gemini-2.5-pro&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Azure OpenAI&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;llm_provider&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;azure-openai&lt;/span&gt;
&lt;span class="na"&gt;azure_openai_api_key&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ secrets.AZURE_OPENAI_API_KEY }}&lt;/span&gt;
&lt;span class="na"&gt;azure_openai_endpoint&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ secrets.AZURE_OPENAI_ENDPOINT }}&lt;/span&gt;
&lt;span class="na"&gt;azure_openai_deployment_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;my-deployment&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Reporter Types
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;What It Does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;github-pr-check&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Annotations in "Files Changed" tab (recommended)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;github-pr-review&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Comments on specific lines like a human reviewer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;github-check&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Pass/fail status only&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Filter Modes
&lt;/h3&gt;

&lt;p&gt;Choose your filter mode based on review scope requirements. &lt;code&gt;added&lt;/code&gt; mode works for most teams because it focuses review effort on new content while avoiding noise from unchanged sections.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mode&lt;/th&gt;
&lt;th&gt;What Gets Checked&lt;/th&gt;
&lt;th&gt;Best For&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;added&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Only new/changed lines&lt;/td&gt;
&lt;td&gt;Most projects&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;diff_context&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Changed lines plus surrounding context&lt;/td&gt;
&lt;td&gt;When changes affect flow&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;file&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Entire changed files&lt;/td&gt;
&lt;td&gt;New content that needs full review&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;nofilter&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;All files in PR&lt;/td&gt;
&lt;td&gt;Major content overhauls&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Enforcement Options
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Advisory Mode&lt;/strong&gt; (&lt;code&gt;fail_on_error: false&lt;/code&gt;) - Shows suggestions, doesn't block merging&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;fail_on_error&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Strict Mode&lt;/strong&gt; (&lt;code&gt;fail_on_error: true&lt;/code&gt;) - Blocks merges until issues fixed&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;fail_on_error&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;span class="na"&gt;filter_mode&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;file&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Start in advisory mode for your first month so writers learn the standards without friction. This approach reduces resistance to automated review while building trust in the system. Switch to strict mode once your team consistently addresses feedback and understands your quality standards.&lt;/p&gt;

&lt;h3&gt;
  
  
  Different Standards by Content Type
&lt;/h3&gt;

&lt;p&gt;Blog posts can be casual. API docs must be precise. Use file patterns to apply different rule packs:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;vectorlint.ini&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ini"&gt;&lt;code&gt;&lt;span class="py"&gt;RulesPath&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;.github/rules&lt;/span&gt;
&lt;span class="py"&gt;Concurrency&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;4&lt;/span&gt;
&lt;span class="py"&gt;DefaultSeverity&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;warning&lt;/span&gt;

&lt;span class="nn"&gt;[blog/**/*.md]&lt;/span&gt;
&lt;span class="py"&gt;RunRules&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;BlogRules&lt;/span&gt;

&lt;span class="nn"&gt;[docs/api/**/*.md]&lt;/span&gt;
&lt;span class="py"&gt;RunRules&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;APIDocRules&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each rule pack (e.g., &lt;code&gt;BlogRules&lt;/code&gt;, &lt;code&gt;APIDocRules&lt;/code&gt;) is a folder of Markdown rule files in your &lt;code&gt;RulesPath&lt;/code&gt;. Same workflow, context-aware enforcement.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sample setup:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Check out a working example at &lt;a href="https://github.com/ayo6706/vectorlint" rel="noopener noreferrer"&gt;ayo6706/vectorlint&lt;/a&gt; - it shows the complete configuration including &lt;code&gt;vectorlint.ini&lt;/code&gt; and custom rules.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Creating custom rules:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Rules are Markdown files with YAML frontmatter. &lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://github.com/TRocket-Labs/vectorlint/blob/main/CREATING_RULES.md" rel="noopener noreferrer"&gt;Learn how to create custom rules →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Check out VectorLint Action at &lt;a href="https://github.com/marketplace/actions/vectorlint" rel="noopener noreferrer"&gt;GitHub Marketplace&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Next Steps
&lt;/h2&gt;

&lt;p&gt;Once you've configured VectorLint for your workflow, implement it gradually to build team confidence in the system.&lt;/p&gt;

&lt;p&gt;Start with advisory mode and one simple rule. Once your team sees consistent feedback, expand your rule set.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Week 1:&lt;/strong&gt; Run in advisory mode with a single style rule&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Week 2:&lt;/strong&gt; Add 2-3 more rules based on your most common feedback&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Week 3-4:&lt;/strong&gt; Monitor adoption and address any confusion about rule violations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Week 4-5:&lt;/strong&gt; Enable strict mode to block merges on violations&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;em&gt;Ready to try it? Fork the &lt;a href="https://github.com/ayo6706/vectorlint" rel="noopener noreferrer"&gt;sample repo&lt;/a&gt; to see it in action, check out &lt;a href="https://www.npmjs.com/package/vectorlint" rel="noopener noreferrer"&gt;VectorLint on npm&lt;/a&gt;, or give it a star &lt;a href="https://github.com/TRocket-Labs/vectorlint" rel="noopener noreferrer"&gt;VectorLint&lt;/a&gt;,  &lt;a href="https://github.com/TRocket-Labs/vectorlint-action" rel="noopener noreferrer"&gt;VectorLint Github action&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devrel</category>
      <category>githubactions</category>
      <category>technicalwriting</category>
      <category>documentation</category>
    </item>
    <item>
      <title>Node.js Essentials: Everything You Need to Know as a Software Developer</title>
      <dc:creator>Ayomide Onibokun</dc:creator>
      <pubDate>Fri, 01 Dec 2023 22:10:12 +0000</pubDate>
      <link>https://dev.to/ayomideonibokun/nodejs-essentials-everything-you-need-to-know-as-a-software-developer-4732</link>
      <guid>https://dev.to/ayomideonibokun/nodejs-essentials-everything-you-need-to-know-as-a-software-developer-4732</guid>
      <description>&lt;p&gt;What is Node.js, then?&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%2Fnnxjg49jle6c4qagbmb1.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%2Fnnxjg49jle6c4qagbmb1.png" alt="nodejs" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Introduction:&lt;/strong&gt;&lt;br&gt;
Node.js is an open-source, cross-platform JavaScript runtime environment that operates outside the confines of a web browser. Powering this runtime is the V8 JavaScript engine, initially developed by Google in C++. Unlike the conventional use of JavaScript solely in browsers, V8 enables the execution of JavaScript code both within and beyond browser environments, making server-side scripting feasible.&lt;br&gt;
The V8 engine translates JavaScript code directly into machine code, facilitating comprehension by computers. This compiled code is optimised for efficient execution, contributing to Node.js's impressive performance.&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%2Fyiqyov1chawy8vpkodim.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%2Fyiqyov1chawy8vpkodim.png" alt="source: https://medium.com/dailyjs/understanding-v8s-bytecode-317d46c94775" width="800" height="502"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Model of Execution:&lt;/strong&gt;&lt;br&gt;
Node.js distinguishes itself from traditional multi-threaded approaches by employing a single-threaded execution model. JavaScript is by nature a single-threaded programme that can only use one CPU at a time; however, Node.js uses an event-driven architecture to support concurrent operations.&lt;br&gt;
It's important to note that, despite being single-threaded, Node.js employs an event loop to handle asynchronous tasks, allowing it to efficiently manage multiple operations without blocking the execution of other tasks. This event-driven approach contributes to the scalability and responsiveness of Node.js applications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Performance Considerations:&lt;/strong&gt;&lt;br&gt;
Node.js applications run in a single process, avoiding the creation of a new thread for each request. Although this single-threaded model is consistent with the nature of JavaScript, it can be viewed as a limitation when compared to languages such as Java, C++, or Golang, which support true multi-threading. In those languages, a single process can efficiently use all available CPUs on a machine, and threads are more lightweight, resulting in faster startup times and lower memory consumption.&lt;br&gt;
To overcome this limitation, Node.js developers often resort to running multiple Node.js processes, each on a different port. Load balancers like NGINX or process managers like PM2 are employed to distribute incoming requests across these processes, ensuring efficient resource utilisation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Concurrency in Node.js:&lt;/strong&gt;&lt;br&gt;
While Node.js operates within a single thread, it allows for concurrent operations through its event-driven architecture. This enables developers to handle multiple tasks simultaneously without creating additional threads. It's crucial to understand that this concurrency doesn't involve true multi-threading but rather a non-blocking approach, where events trigger asynchronous operations.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Simulating multithreading in Node.js:&lt;/strong&gt;&lt;br&gt;
Node.js provides a workaround for its single-threaded limitation by introducing the concept of forking. The fork method spawns child processes, essentially creating new instances of the V8 engine to run multiple worker processes. This enables Node.js to distribute operations across the various cores of the host machine.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;In this example, multiple instances of worker.js are forked as child processes by main.js. Every worker process has the ability to run concurrently and independently. Message passing is used to communicate between the main process and the worker processes.&lt;br&gt;
To run this example, run main.js with Node. The fork method in main.js creates separate instances of worker.js, allowing for parallel task execution across multiple CPU cores. This simulates a multithreading environment within the single-threaded Node.js runtime.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Asynchronous I/O in Node.js:&lt;/strong&gt;&lt;br&gt;
Node.js leverages asynchronous I/O primitives in its standard library, ensuring that JavaScript code remains non-blocking. This approach is crucial for handling I/O operations such as network requests, database access, or file system interactions. Rather than blocking the main thread while waiting for responses, Node.js resumes operations when the required data is available.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;In the above example, the synchronous method readFileSync blocks the thread until the file is read, while the asynchronous method readFile allows other operations to proceed without waiting for the file read to complete.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Synchronous vs. Asynchronous Applications:&lt;/strong&gt;&lt;br&gt;
Synchronous applications can cause a poor user experience by blocking the user interface until a request is completed. In contrast, asynchronous applications allow users to continue interacting with the application while requests are being processed. The benefits of asynchronous applications include an improved user experience, the ability to handle multiple requests simultaneously, and more efficient resource utilisation.&lt;br&gt;
Consider the scenario of uploading a video to YouTube. A synchronous application would lock the screen until the upload finishes, hindering user activity. An asynchronous application, on the other hand, allows users to continue using the application during the upload, providing a smoother experience.&lt;br&gt;
While asynchronous applications are generally preferred for web development, synchronous applications may be necessary in specific cases, such as ensuring a request is completed before proceeding.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The JavaScript Event Loop:&lt;/strong&gt;&lt;br&gt;
The event loop is a fundamental part of JavaScript that facilitates the handling of asynchronous code. In a single-threaded language like JavaScript, where only one line of code can be executed at a time, the event loop is crucial for managing asynchronous tasks.&lt;br&gt;
The event loop acts as a queue for asynchronous callbacks. When a callback is ready to be executed, it is added to the event loop queue, which then processes callbacks one by one. This single-threaded model, combined with asynchronous I/O, enables Node.js to handle multiple concurrent requests without blocking the main thread.&lt;br&gt;
Understanding the event loop is essential for developers working with Node.js, as it enables the effective handling of asynchronous code and ensures optimal performance in handling multiple requests simultaneously. Careful usage of the event loop is necessary to avoid potential performance issues.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion:&lt;/strong&gt;&lt;br&gt;
In conclusion, Node.js stands out in the realm of server-side technologies due to its unique event-driven, non-blocking I/O model, which provides significant advantages in the development of scalable and efficient network applications. Because of its ability to use JavaScript on both the client and server sides, it is a popular choice for many modern web applications. While it excels at I/O-bound tasks and real-time applications, it is important to consider other technologies such as Python, Ruby, or PHP for CPU-intensive operations or when a different ecosystem might be more beneficial.&lt;br&gt;
The vibrant and supportive Node.js community not only encourages continuous improvement and innovation but also provides a vast pool of resources and modules, empowering developers of all levels. Node.js remains a relevant and powerful tool in the ever-changing tech landscape thanks to regular updates and a focus on current web development trends.&lt;br&gt;
As web technologies continue to evolve, Node.js will undoubtedly play an important role in shaping the future of server-side programming. Whether you are an experienced developer or just getting started, Node.js offers a dynamic and exciting journey into the possibilities of modern web development. Embrace the challenge and explore how Node.js can transform your next project.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>My journey to becoming a developer</title>
      <dc:creator>Ayomide Onibokun</dc:creator>
      <pubDate>Mon, 06 Apr 2020 13:04:48 +0000</pubDate>
      <link>https://dev.to/ayomideonibokun/my-journey-to-becoming-a-developer-21f1</link>
      <guid>https://dev.to/ayomideonibokun/my-journey-to-becoming-a-developer-21f1</guid>
      <description>&lt;p&gt;First, let me introduce myself. My name is Ayomide Onibokun, and I’m a fullstack web developer, a software engineer  with 5 years experience and a student of Oduduwa University Ipetumodu studying B.Eng Computer Engineering. In that time, I’ve worked as a trainer at xhub and also started a WordPress community in college and also a mentor at Repotecc.&lt;/p&gt;

&lt;p&gt;I have always had this deep interest in tech from a young age, but faced the major limitation any individual hoping to set out in any career path faces, "Ideas and information on how to begin". I stumbled on a post from Fossbytes (Fossbytes is a tech blog), this post was an invitation to learning computer science online, one I had cravee for. I made use of the period before i gained admission into tertiary instituion to Learn this online course. This marked the beginning of my Journey as a developer.&lt;br&gt;
Fueled by my Long desire to Journey into tech, I immediately made use of the links included in the post from fossybytes, which were links to site with contents to help meonmy new jorney as a developer. They included sites like Code.org  (a site that teaches beginners programming in logic sequence, i was able to create a game), Khan academy  (where I learnt  about python), finally I then proceeded to YouTube in search about python and was captivated by a video "zero to hero with python". It spured my interest in python because  it educated me about  what python can do and current companies that uses it and that was my sight of motivation. Having gotten the required information, it was time to set goals. I decided to set a goal of learning how to build a website  so I went on to search  some YouTube video about html and css and one series I enjoyed was with a YouTuber named Bucky Robert. I was then admitted into college at Oduduwa University Ipetumodu having practiced enough.&lt;br&gt;
My First real Challenge came  when i was tasked with the responsibility of building a website For my Fellowship.This was when I was introduced to bootstrap ( Thanks to Ajayi Kayode who put me through), which is necessary due to its lightweight and easy customization. I also had to learn php for the back-end and wordpress theme development as it enables easy site management.&lt;br&gt;
During my holiday, I advanced in my journey by Learning Java and andriod studio. I also lerned pygame with python and built some 2d games and then progressed to tkinter, pyqt, and kivy for building software i built a media player, browser and a texting app. Returning back to school we were taught Visual Basic 6.0, and It got much more interesting as I was now empowered to build desktop app easier and my first project was a hotel management system. I then proceeded to build software for a supermarket, pharmaceutical, a school receipt  check clearance etc. lnspired by movies Like "Knight Rider, Iron man", I developed interest in Artificial Intelligence, and So I went in search of Knowledge. I thus learnt Machine learning With python which seams to be interesting. &lt;br&gt;
I Have acquired skills in web and software development, machine learning, animation with after effects and started exploring  and all were self taught and still wish to learn more  but I what I want to advice the young generation is that you can be anything you want to be “If you can imagine it, you can achieve it. If you can dream it, you can become it.” By William Arthur Ward and always surround yourself with people having the same ambition with you, be resourcesful and determined. Attend seminars and try to utilize your social media as a source of learning new things and trends in tech by following people related to your ambition Thanks.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
