<?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: Astha Jhawar</title>
    <description>The latest articles on DEV Community by Astha Jhawar (@astha_jhawar_f1891a37e168).</description>
    <link>https://dev.to/astha_jhawar_f1891a37e168</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%2F3448207%2F0cbf1ede-a59b-4d87-ac84-dac0c83d8167.png</url>
      <title>DEV Community: Astha Jhawar</title>
      <link>https://dev.to/astha_jhawar_f1891a37e168</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/astha_jhawar_f1891a37e168"/>
    <language>en</language>
    <item>
      <title>We can automate the collection of user prompts and assistant responses to build a OrderBot.</title>
      <dc:creator>Astha Jhawar</dc:creator>
      <pubDate>Wed, 27 Aug 2025 15:30:20 +0000</pubDate>
      <link>https://dev.to/astha_jhawar_f1891a37e168/we-can-automate-the-collection-of-user-prompts-and-assistant-responses-to-build-a-orderbot-2nc7</link>
      <guid>https://dev.to/astha_jhawar_f1891a37e168/we-can-automate-the-collection-of-user-prompts-and-assistant-responses-to-build-a-orderbot-2nc7</guid>
      <description>&lt;p&gt;Ever asked ChatGPT something and got back complete nonsense? Yeah, me too. Here's how to actually talk to AI without losing your sanity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Local Setup (The Easy Part)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;!pip install openai
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")

def get_completion(prompt, model="gpt-3.5-turbo"):
    messages = [{"role": "user", "content": prompt}]
    return openai.ChatCompletion.create(model=model, messages=messages, temperature=0)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This &lt;code&gt;get_completion&lt;/code&gt; function is your best friend - it wraps your prompt in a message format and sends it to OpenAI. Think of it as your AI translator.&lt;br&gt;
For HTML outputs: &lt;code&gt;from IPython.display import display, HTML then display(HTML(response))&lt;/code&gt; boom, rendered HTML in Jupyter!&lt;/p&gt;
&lt;h2&gt;
  
  
  The Magic Chat Function Explained 🎭
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def get_completion_from_messages(messages, model="gpt-3.5-turbo", temperature=0):
    response = openai.ChatCompletion.create(
        model=model,
        messages=messages,
        temperature=temperature  # 0 = robot mode, 1 = creative chaos
    )
    return response.choices[0].message["content"]

# Shakespeare bot example
messages = [  
    {'role':'system', 'content':'You are an assistant that speaks like Shakespeare.'},    
    {'role':'user', 'content':'tell me a joke'}
]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Here's the breakdown:&lt;br&gt;
&lt;code&gt;messages:&lt;/code&gt; Array of conversation history with roles (system, user, assistant)&lt;br&gt;
&lt;code&gt;system:&lt;/code&gt; Sets the AI's personality (like "You're Shakespeare")&lt;br&gt;
&lt;code&gt;temperature:&lt;/code&gt; Controls randomness (0 = predictable, 1 = creative madness)&lt;br&gt;
&lt;code&gt;response.choices[0].message["content"]:&lt;/code&gt; Extracts just the text response&lt;/p&gt;
&lt;h2&gt;
  
  
  Smart Prompting Tricks 🧠
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Condition Checking:&lt;/strong&gt; Make AI verify stuff&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;prompt = "Check if this text contains harmful content: 'Hello world'"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Force Deep Thinking:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;prompt = "Solve 15 x 23 step-by-step before giving final answer"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Multi-tasking Master:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;prompt = "Do 3 things: 1) Translate to Spanish 2) Find sentiment 3) Extract emotions. Return JSON."
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Emotion Detective:&lt;/strong&gt; Ask for &lt;code&gt;{"emotions": ["happy", "excited"]}&lt;/code&gt;format&lt;br&gt;
&lt;strong&gt;Translation Pro:&lt;/strong&gt; Not just languages - tones too! "Convert slang to business English"&lt;/p&gt;

&lt;h2&gt;
  
  
  Watch Out for AI Brain Farts! 💨
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Hallucinations:&lt;/strong&gt; AI sometimes confidently makes stuff up. Always double-check important facts - it's like that friend who swears they know the shortcut but gets you lost.&lt;/p&gt;

&lt;h2&gt;
  
  
  OrderBot Magic 🍕
&lt;/h2&gt;

&lt;p&gt;The course shows building pizza ordering bots that remember context, handle complex conversations, and output structured JSON orders. Basically, your AI employee that never needs coffee breaks!&lt;br&gt;
Pro Tips: Use delimiters &lt;code&gt;("""text""")&lt;/code&gt;, ask for JSON structure, show examples, be specific about format, and iterate - your first prompt will probably suck.&lt;/p&gt;

</description>
      <category>promptengineering</category>
      <category>openai</category>
      <category>python</category>
      <category>chatgpt</category>
    </item>
    <item>
      <title>I Built a LinkedIn Job Scraper Because Manual Job Hunting is Pain</title>
      <dc:creator>Astha Jhawar</dc:creator>
      <pubDate>Fri, 22 Aug 2025 06:07:32 +0000</pubDate>
      <link>https://dev.to/astha_jhawar_f1891a37e168/i-built-a-linkedin-job-scraper-because-manual-job-hunting-is-pain-49j6</link>
      <guid>https://dev.to/astha_jhawar_f1891a37e168/i-built-a-linkedin-job-scraper-because-manual-job-hunting-is-pain-49j6</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/brightdata-n8n-2025-08-13"&gt;AI Agents Challenge powered by n8n and Bright Data&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;My friend Ayush was searching LinkedIn jobs like it's 1999 - 27 browser tabs open, copying links into a messy Word doc, complaining about "great pay" that turned out to be almost nothing. I'm sitting there thinking: we can send rockets to space but can't automate job searching?&lt;br&gt;
So I built the LinkedIn Job Finder Automation. You fill out a simple form with what job you want (city, job title, country, job type), and it finds LinkedIn jobs for you and puts them in Google Sheets. No more looking through hundreds of job posts that say "entry-level" but want 10 years of experience.&lt;br&gt;
The whole thing takes 3-5 minutes vs hours of manual scrolling through LinkedIn's endless pages.&lt;/p&gt;
&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;



&lt;p&gt;Here's the complete workflow from form submission to organized Google Sheet:&lt;br&gt;
&lt;iframe class="tweet-embed" id="tweet-1958761087148409054-330" src="https://platform.twitter.com/embed/Tweet.html?id=1958761087148409054"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1958761087148409054-330');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1958761087148409054&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;h3&gt;
  
  
  n8n Workflow
&lt;/h3&gt;

&lt;p&gt;Complete workflow JSON: LinkedIn Job Finder Workflow&lt;br&gt;
The workflow has 9 nodes handling everything from user input to final data storage.&lt;br&gt;
&lt;a href="https://gist.github.com/Asthajhawar/00d0da39d4dc4eda32653511c6deba2e" rel="noopener noreferrer"&gt;GitHub Gist Link&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;The Magic Behind It:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Form Trigger Node&lt;/strong&gt; - Simple form that doesn't ask for your life story. Just city, job title, country, job type.&lt;br&gt;
&lt;strong&gt;Snapshot ID Generator&lt;/strong&gt; - Sends your search to Bright Data's LinkedIn API. They give back a snapshot ID (like a receipt for your data order).&lt;br&gt;
&lt;strong&gt;Status Polling Loop&lt;/strong&gt; - Checks every minute if scraping is done. Had to add delays because I was hitting their API too hard initially. Oops.&lt;br&gt;
&lt;strong&gt;Data Extraction&lt;/strong&gt; - Once ready, grabs all job details - titles, companies, locations, descriptions, apply links.&lt;br&gt;
&lt;strong&gt;Smart Filtering&lt;/strong&gt; - LinkedIn's raw data is messy. This cleans it up so you only see jobs that won't destroy your soul.&lt;br&gt;
&lt;strong&gt;Google Sheets Integration&lt;/strong&gt; - Everything gets organized in a spreadsheet, formatted better than most resumes.&lt;/p&gt;

&lt;p&gt;No AI model needed this is pure workflow automation. Stateless design keeps it simple. Tools used: n8n, Bright Data, Google Sheets.&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%2Fzar3agms1pug3v4xn7zx.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%2Fzar3agms1pug3v4xn7zx.png" alt="Flow"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Bright Data Verified Node
&lt;/h3&gt;

&lt;p&gt;This literally saved my project. Instead of fighting LinkedIn's aggressive bot detection, Bright Data handles all the scraping nightmares.&lt;br&gt;
What made it awesome:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No more blocking&lt;/strong&gt; - LinkedIn can't stop properly configured requests&lt;br&gt;
&lt;strong&gt;Real-time data&lt;/strong&gt; - Fresh job postings as they appear&lt;br&gt;
&lt;strong&gt;Clean JSON output&lt;/strong&gt; - No messy HTML parsing needed&lt;br&gt;
&lt;strong&gt;Built-in rate limiting&lt;/strong&gt; - No more API abuse accidents&lt;/p&gt;

&lt;p&gt;The verified node handled authentication, request formatting, and errors automatically. I just focused on workflow logic instead of battling LinkedIn's security.&lt;/p&gt;

&lt;h2&gt;
  
  
  Journey
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Phase 1:&lt;/strong&gt; "This should be easy"&lt;br&gt;
Initial plan: Hit LinkedIn API, dump to spreadsheet. Should take 2 hours, right?&lt;br&gt;
Reality check: LinkedIn has no public jobs API. Web scraping is harder than it looks. I know nothing about rate limiting.&lt;br&gt;
&lt;strong&gt;Phase 2:&lt;/strong&gt; "Bright Data saves the day"&lt;br&gt;
After getting blocked faster than spam email, I discovered Bright Data's verified node. Game changer. Suddenly I went from fighting anti-bot measures to building actual features.&lt;br&gt;
&lt;strong&gt;Phase 3:&lt;/strong&gt; "It actually works!"&lt;br&gt;
Testing with Sarah was nerve-wracking. First run: 47 relevant jobs in 4 minutes. She went from evening LinkedIn marathons to daily job digests.&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%2Fyuz298rbycr6uf47lnc9.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%2Fyuz298rbycr6uf47lnc9.png" alt="n8n with Bright Data"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The real win: Ayush found his new job through this automation - a 6 AM Tuesday posting he would've missed with manual searching.&lt;br&gt;
Lessons learned:&lt;/p&gt;

&lt;p&gt;Use proper tools instead of reinventing wheels&lt;br&gt;
Polling needs balance - too fast gets you blocked, too slow annoys users&lt;br&gt;
Simple solutions often work best&lt;br&gt;
Error handling saves your sanity&lt;/p&gt;

&lt;p&gt;Now my robot finds opportunities while I pretend to be productive in meetings. Sometimes the obvious problems need obvious solutions that nobody bothers building.&lt;/p&gt;

&lt;p&gt;Built for people tired of manual processes and friends who refuse to automate their lives.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>n8nbrightdatachallenge</category>
      <category>ai</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
