<?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: Emmanuel Adu Saah (Kweku Annan)</title>
    <description>The latest articles on DEV Community by Emmanuel Adu Saah (Kweku Annan) (@kweku_annan).</description>
    <link>https://dev.to/kweku_annan</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%2F3051941%2F3fbc2786-4302-44f1-8558-cd6f2c26e1af.jpg</url>
      <title>DEV Community: Emmanuel Adu Saah (Kweku Annan)</title>
      <link>https://dev.to/kweku_annan</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kweku_annan"/>
    <language>en</language>
    <item>
      <title>Building JobInsightAI: An Intelligent Telex Agent for Career Growth — HNG Stage 3 Backend Task</title>
      <dc:creator>Emmanuel Adu Saah (Kweku Annan)</dc:creator>
      <pubDate>Mon, 03 Nov 2025 22:49:20 +0000</pubDate>
      <link>https://dev.to/kweku_annan/building-jobinsightai-an-intelligent-telex-agent-for-career-growth-hng-stage-3-backend-task-1pa6</link>
      <guid>https://dev.to/kweku_annan/building-jobinsightai-an-intelligent-telex-agent-for-career-growth-hng-stage-3-backend-task-1pa6</guid>
      <description>&lt;h2&gt;
  
  
  🚀 Introduction
&lt;/h2&gt;

&lt;p&gt;As part of the &lt;strong&gt;HNG Stage 3 Backend Task&lt;/strong&gt;, I was challenged to &lt;strong&gt;build an AI agent&lt;/strong&gt; and integrate it with &lt;strong&gt;Telex.im&lt;/strong&gt; using the &lt;strong&gt;A2A protocol&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
The goal was to design an intelligent system that solves a real problem, responds to user prompts, and demonstrates solid backend design and AI integration skills.&lt;/p&gt;

&lt;p&gt;For my project, I built &lt;strong&gt;JobInsightAI&lt;/strong&gt; — an AI agent that helps job seekers discover &lt;strong&gt;the right projects to add to their portfolio or CV&lt;/strong&gt; in order to stand out for specific job applications.&lt;/p&gt;


&lt;h2&gt;
  
  
  🎯 Problem Statement
&lt;/h2&gt;

&lt;p&gt;Many developers and professionals struggle to identify what kinds of personal or portfolio projects can make them more competitive for a given job title.&lt;br&gt;&lt;br&gt;
For example, someone applying for a “Data Analyst” role might not know whether to build a dashboard, a data pipeline, or an ML model to strengthen their CV.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;JobInsightAI&lt;/strong&gt; solves this by providing &lt;strong&gt;custom project recommendations&lt;/strong&gt; based on the user’s desired job title or job description.&lt;/p&gt;


&lt;h2&gt;
  
  
  🧩 How It Works
&lt;/h2&gt;

&lt;p&gt;When a user interacts with the agent on Telex.im, the following flow happens:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;User Input:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
The user sends a message like  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“I’m looking for a Software Engineering role.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Job Title Extraction:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
The agent extracts the job title from the input using simple text pattern matching.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Database Search:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
It checks an &lt;strong&gt;SQLite database&lt;/strong&gt; for a cached job description that matches the title.&lt;br&gt;&lt;br&gt;
(This database contains job titles and brief descriptions fetched from open APIs.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;AI Recommendation:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
If a match is found, the job title and description are sent to the &lt;strong&gt;LLM (AI model)&lt;/strong&gt; to generate project recommendations.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Fallback Handling:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If no matching job is found, the user is asked to paste a job description manually.
&lt;/li&gt;
&lt;li&gt;If the job title extraction fails, the agent suggests how to rephrase the query.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Response to User:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
The AI responds with a concise, structured list of projects — e.g.  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“1. Build a bug-tracking system – shows backend and database design skills.”&lt;br&gt;&lt;br&gt;
“2. Create an API for project management – demonstrates RESTful design principles.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ol&gt;


&lt;h2&gt;
  
  
  🧠 Architecture Overview
&lt;/h2&gt;

&lt;p&gt;The project follows a modular Flask architecture:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;jobinsightai/
│
├── app.py          # Flask entry point and A2A endpoint
├── logic.py        # Core decision logic
├── ai.py           # LLM integration (using OpenAI or Groq)
├── db.py           # SQLite helper for job search
└── jobs.db         # Cached job listings
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each layer is independent, making it easy to replace or upgrade components — for example, swapping the LLM provider (OpenAI → Groq or any free model) without touching the rest of the logic.&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚙️ Technical Implementation
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Flask Endpoint (A2A Integration)&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
The &lt;code&gt;/a2a/jobinsight&lt;/code&gt; endpoint receives messages from Telex.im in JSON format, processes them, and sends valid A2A responses back.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. SQLite Database&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Stores job titles and short descriptions, used to minimize LLM calls.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. AI Integration&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Uses an LLM (OpenAI API or Groq’s free endpoint) to generate personalized project ideas.&lt;br&gt;&lt;br&gt;
The logic ensures that the AI is only called when necessary — reducing token cost and latency.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Error Handling&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
The agent validates user input, detects missing titles, and provides graceful fallback messages.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔗 Sample A2A Workflow JSON
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"active"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"category"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"career"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Recommends projects to enhance CVs for specific job roles."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"JobInsightAI"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"nodes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"job_agent"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Job Insight AI Agent"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"position"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"a2a/python-a2a-node"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://your-public-endpoint.com/a2a/jobinsight"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This allows Telex.im to communicate with the agent in real time using REST.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧰 Tools &amp;amp; Technologies
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Python (Flask)&lt;/strong&gt; – lightweight backend framework
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SQLite&lt;/strong&gt; – local job listings database
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OpenAI / Groq API&lt;/strong&gt; – for LLM recommendations
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Telex.im A2A Protocol&lt;/strong&gt; – for agent communication
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JSON&lt;/strong&gt; – standard message format between agent and Telex
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HNG Internship (Stage 3)&lt;/strong&gt; – providing the challenge and platform for real-world backend practice
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  💡 Key Design Decisions
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Efficiency:&lt;/strong&gt; Only query the AI after confirming a job match.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reusability:&lt;/strong&gt; Each module (DB, logic, AI) is independent.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fallback Flow:&lt;/strong&gt; Ensures no user query leads to a dead end.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A2A Compliance:&lt;/strong&gt; All responses are wrapped in valid Telex message JSON.
&lt;/li&gt;
&lt;/ol&gt;




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

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;User:&lt;/strong&gt; I’m looking for a Frontend Developer role.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;JobInsightAI:&lt;/strong&gt;  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Build a responsive portfolio website – highlights HTML, CSS, and React skills.
&lt;/li&gt;
&lt;li&gt;Develop a task manager app – showcases state management and component design.
&lt;/li&gt;
&lt;li&gt;Clone a popular website (e.g., Twitter UI) – demonstrates UI/UX implementation.&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;




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

&lt;ul&gt;
&lt;li&gt;Integrating A2A protocol requires clear message validation.
&lt;/li&gt;
&lt;li&gt;Building internal logic before calling the AI saves cost and improves performance.
&lt;/li&gt;
&lt;li&gt;Flask’s simplicity makes it ideal for rapid AI service deployment.
&lt;/li&gt;
&lt;li&gt;Combining a local cache (SQLite) with AI output yields faster, smarter agents.
&lt;/li&gt;
&lt;li&gt;HNG’s real-world tasks provide an excellent way to apply backend and AI skills in practical settings.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🏁 Conclusion
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;JobInsightAI&lt;/strong&gt; demonstrates how AI can be used thoughtfully to guide career growth without overusing LLM resources.&lt;br&gt;&lt;br&gt;
It’s a small but powerful example of how structured backend logic and AI reasoning can work together within Telex.im’s A2A ecosystem.&lt;/p&gt;

&lt;p&gt;This project solidified my understanding of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI agent design
&lt;/li&gt;
&lt;li&gt;RESTful integrations
&lt;/li&gt;
&lt;li&gt;Efficient LLM usage in backend systems
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The next steps will involve improving job title extraction using NLP and expanding the job database for richer recommendations.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>showdev</category>
      <category>ai</category>
      <category>career</category>
    </item>
  </channel>
</rss>
