<?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: Soumyajit Mukherjee</title>
    <description>The latest articles on DEV Community by Soumyajit Mukherjee (@sam000).</description>
    <link>https://dev.to/sam000</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1902890%2F7519ab88-e767-49de-8e68-b2d1acf266e2.jpeg</url>
      <title>DEV Community: Soumyajit Mukherjee</title>
      <link>https://dev.to/sam000</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sam000"/>
    <language>en</language>
    <item>
      <title>10 Corporate Culture Myths Every Developer and Professional Should Question</title>
      <dc:creator>Soumyajit Mukherjee</dc:creator>
      <pubDate>Sun, 11 Oct 2026 07:36:53 +0000</pubDate>
      <link>https://dev.to/sam000/10-corporate-culture-myths-every-developer-and-professional-should-question-53f9</link>
      <guid>https://dev.to/sam000/10-corporate-culture-myths-every-developer-and-professional-should-question-53f9</guid>
      <description>&lt;p&gt;Corporate culture isn't just an HR topic. It influences how developers collaborate, how teams handle production incidents, how managers evaluate performance, and how people grow throughout their careers.&lt;/p&gt;

&lt;p&gt;Whether you're a fresher, a mid-level developer, a senior engineer, or a team lead, you've probably encountered some workplace assumptions that don't always hold up in reality.&lt;/p&gt;

&lt;p&gt;Let's discuss ten of them.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Hard Work Always Gets Recognized
&lt;/h2&gt;

&lt;p&gt;Writing more code, resolving more tickets, or staying late doesn't guarantee recognition.&lt;/p&gt;

&lt;p&gt;Your impact matters, but so do communication, visibility, team priorities, and the way your organization evaluates performance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Developer takeaway:&lt;/strong&gt; Document important contributions, explain the problems you solved, and communicate measurable outcomes without exaggerating your role.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. More Hours Mean More Productivity
&lt;/h2&gt;

&lt;p&gt;A developer working late isn't necessarily more productive than someone who finishes focused work during regular hours.&lt;/p&gt;

&lt;p&gt;Long hours can sometimes indicate unclear requirements, excessive meetings, technical debt, or unrealistic deadlines.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Developer takeaway:&lt;/strong&gt; Measure progress through quality, reliability, maintainability, and outcomes—not commits, online status, or hours logged.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Seniority Automatically Means Better Decisions
&lt;/h2&gt;

&lt;p&gt;A senior engineer has valuable experience, but experience doesn't make every architectural decision correct.&lt;/p&gt;

&lt;p&gt;Technology changes, requirements evolve, and yesterday's best solution may not fit today's constraints.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Developer takeaway:&lt;/strong&gt; Respect experience, ask for reasoning, evaluate trade-offs, and use evidence to guide technical decisions.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Company Loyalty Guarantees Career Security
&lt;/h2&gt;

&lt;p&gt;A developer can contribute for years and still face restructuring or project cancellations.&lt;/p&gt;

&lt;p&gt;That doesn't mean loyalty is pointless. It means your career shouldn't depend entirely on one employer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Developer takeaway:&lt;/strong&gt; Build transferable skills, maintain a portfolio where appropriate, understand modern tools, and cultivate professional relationships.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. A Company's Reputation Guarantees a Healthy Team
&lt;/h2&gt;

&lt;p&gt;A respected technology company can have excellent teams and challenging teams at the same time.&lt;/p&gt;

&lt;p&gt;Your direct manager, team processes, workload, psychological safety, and engineering practices shape your daily experience.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Developer takeaway:&lt;/strong&gt; When evaluating an opportunity, ask how code reviews work, how incidents are handled, and how priorities are decided.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Promotions Are Based Only on Technical Skill
&lt;/h2&gt;

&lt;p&gt;Technical excellence is important, but career progression may also involve communication, mentoring, collaboration, decision-making, and business impact.&lt;/p&gt;

&lt;p&gt;The expectations for a senior engineer can differ significantly from those for a junior developer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Developer takeaway:&lt;/strong&gt; Understand your organization's promotion criteria and develop the skills expected at the next level.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Asking Questions Makes You Look Like a Beginner
&lt;/h2&gt;

&lt;p&gt;Nobody can know every framework, codebase, design pattern, or business requirement.&lt;/p&gt;

&lt;p&gt;Avoiding questions can lead to incorrect implementations and unnecessary rework.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Developer takeaway:&lt;/strong&gt; Investigate first, explain what you've tried, share relevant context, and ask a precise question.&lt;/p&gt;

&lt;p&gt;Good questions are part of good engineering.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Healthy Teams Never Disagree
&lt;/h2&gt;

&lt;p&gt;Technical disagreements are inevitable.&lt;/p&gt;

&lt;p&gt;Should we introduce a new dependency? Is a microservices architecture justified? Should we refactor now or deliver the feature first?&lt;/p&gt;

&lt;p&gt;A team without disagreement isn't automatically a healthy team.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Developer takeaway:&lt;/strong&gt; Discuss evidence, constraints, risks, and trade-offs. Critique the solution rather than attacking the person proposing it.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. Being Busy Means Being a Valuable Engineer
&lt;/h2&gt;

&lt;p&gt;A full sprint board doesn't necessarily mean a team is delivering meaningful value.&lt;/p&gt;

&lt;p&gt;Developers can spend days switching tasks, attending meetings, and responding to urgent requests without making substantial progress.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Developer takeaway:&lt;/strong&gt; Prioritize completed outcomes, manageable work in progress, clear requirements, and sustainable delivery.&lt;/p&gt;

&lt;h2&gt;
  
  
  10. Career Success Requires Constant Overwork
&lt;/h2&gt;

&lt;p&gt;Sometimes a release or production incident requires extra effort. That is different from treating permanent overtime as normal.&lt;/p&gt;

&lt;p&gt;Long-term engineering quality depends on sustainable practices, learning, collaboration, and enough time to think clearly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Developer takeaway:&lt;/strong&gt; Improve estimation, communicate blockers early, automate repetitive work, and help your team identify recurring sources of overtime.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Should Engineering Teams Value Instead?
&lt;/h2&gt;

&lt;p&gt;Healthy engineering cultures make room for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clear expectations and constructive feedback.&lt;/li&gt;
&lt;li&gt;Technical discussions based on evidence rather than hierarchy.&lt;/li&gt;
&lt;li&gt;Blameless learning from incidents, alongside clear accountability.&lt;/li&gt;
&lt;li&gt;Recognition for mentoring, documentation, maintenance, and collaboration.&lt;/li&gt;
&lt;li&gt;Sustainable workloads and realistic delivery commitments.&lt;/li&gt;
&lt;li&gt;Continuous learning at every career stage.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These practices aren't exclusive to technology companies. They're useful wherever people collaborate to solve complex problems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Corporate culture isn't determined by the tools a company uses or the values displayed on its careers page.&lt;/p&gt;

&lt;p&gt;It's reflected in everyday decisions: how code reviews happen, how managers respond to mistakes, how teams resolve disagreements, and whether employees can raise concerns.&lt;/p&gt;

&lt;p&gt;You don't need to distrust every organization. You need to evaluate its behavior instead of relying exclusively on its promises.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Good engineering requires more than technical skills. It also requires a culture where people can learn, communicate, challenge assumptions, and do meaningful work sustainably.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Let's Discuss
&lt;/h2&gt;

&lt;p&gt;What's the biggest corporate culture myth you've encountered in your career?&lt;/p&gt;

&lt;p&gt;Have you experienced a workplace where being busy mattered more than delivering results—or where asking questions was discouraged?&lt;/p&gt;

&lt;p&gt;I'd love to hear perspectives from developers, managers, freshers, and professionals outside the tech industry.&lt;/p&gt;

</description>
      <category>career</category>
      <category>productivity</category>
      <category>leadership</category>
      <category>discuss</category>
    </item>
    <item>
      <title>10 Habits That Help a Junior Developer Become a Professional Engineer</title>
      <dc:creator>Soumyajit Mukherjee</dc:creator>
      <pubDate>Sun, 11 Oct 2026 06:40:27 +0000</pubDate>
      <link>https://dev.to/sam000/10-habits-that-help-a-junior-developer-become-a-professional-engineer-17bh</link>
      <guid>https://dev.to/sam000/10-habits-that-help-a-junior-developer-become-a-professional-engineer-17bh</guid>
      <description>&lt;p&gt;Being a junior developer doesn't mean you're a bad developer. It means you're still developing your technical judgment and professional habits.&lt;/p&gt;

&lt;p&gt;You might already know JavaScript, React, Node.js, Express, and MongoDB. You might have several projects on GitHub.&lt;/p&gt;

&lt;p&gt;But professional software development requires more than knowing how to build features.&lt;/p&gt;

&lt;p&gt;Here are 10 habits you can start practicing today.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Understand the requirement first
&lt;/h2&gt;

&lt;p&gt;Before coding, answer these questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What problem does this feature solve?&lt;/li&gt;
&lt;li&gt;What input does it accept?&lt;/li&gt;
&lt;li&gt;What output should it produce?&lt;/li&gt;
&lt;li&gt;What can go wrong?&lt;/li&gt;
&lt;li&gt;What does success look like?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This reduces rework and helps you build the right thing.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Debug with evidence
&lt;/h2&gt;

&lt;p&gt;When a bug appears, avoid changing multiple things at once.&lt;/p&gt;

&lt;p&gt;Use a repeatable process:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Reproduce the issue.&lt;/li&gt;
&lt;li&gt;Read the error message and logs.&lt;/li&gt;
&lt;li&gt;Identify where the behavior changes unexpectedly.&lt;/li&gt;
&lt;li&gt;Form a hypothesis.&lt;/li&gt;
&lt;li&gt;Test the hypothesis.&lt;/li&gt;
&lt;li&gt;Verify the fix and check for regressions.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This approach is more reliable than guessing.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Write readable code
&lt;/h2&gt;

&lt;p&gt;Consider this JavaScript example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;activeUsers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;users&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;isActive&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The intention is easy to understand.&lt;/p&gt;

&lt;p&gt;Good names, focused functions, consistent formatting, and limited duplication help your teammates understand your work.&lt;/p&gt;

&lt;p&gt;Don't optimize for the fewest characters. Optimize for clarity.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Learn the fundamentals behind your stack
&lt;/h2&gt;

&lt;p&gt;If you're a JavaScript developer, understand asynchronous operations, promises, closures, and error handling.&lt;/p&gt;

&lt;p&gt;If you're building APIs, understand HTTP methods, status codes, authentication, and validation.&lt;/p&gt;

&lt;p&gt;If you're working with databases, understand relationships, indexes, and query performance.&lt;/p&gt;

&lt;p&gt;You don't need to master every topic immediately. Learn the fundamentals that explain the behavior of the tools you're using.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Consider failure scenarios
&lt;/h2&gt;

&lt;p&gt;A successful request is only one possible outcome.&lt;/p&gt;

&lt;p&gt;For a typical API, think about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Invalid request data.&lt;/li&gt;
&lt;li&gt;Unauthorized access.&lt;/li&gt;
&lt;li&gt;Missing resources.&lt;/li&gt;
&lt;li&gt;Database failures.&lt;/li&gt;
&lt;li&gt;Rate limits.&lt;/li&gt;
&lt;li&gt;Network timeouts.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Your error handling should help the application fail safely and make problems easier to diagnose.&lt;/p&gt;

&lt;p&gt;Never expose passwords, API keys, stack traces, or other sensitive information in public responses.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Use Git as a collaboration tool
&lt;/h2&gt;

&lt;p&gt;A professional Git workflow might look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git switch &lt;span class="nt"&gt;-c&lt;/span&gt; feature/user-profile
git add &lt;span class="nb"&gt;.&lt;/span&gt;
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"Add user profile endpoint"&lt;/span&gt;
git push &lt;span class="nt"&gt;-u&lt;/span&gt; origin feature/user-profile
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The commands are simple. The habits matter more.&lt;/p&gt;

&lt;p&gt;Keep commits meaningful, avoid committing secrets, review your changes before pushing, and use pull requests to explain what changed and why.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Test important behavior
&lt;/h2&gt;

&lt;p&gt;You don't have to begin with an enormous testing suite.&lt;/p&gt;

&lt;p&gt;Start with the most important behavior in your application.&lt;/p&gt;

&lt;p&gt;For a registration endpoint, test valid input, invalid input, duplicate email addresses, and unexpected server failures.&lt;/p&gt;

&lt;p&gt;Tests make assumptions explicit and help prevent existing features from breaking when you make changes.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Communicate blockers early
&lt;/h2&gt;

&lt;p&gt;When you get stuck, explain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What you expected to happen.&lt;/li&gt;
&lt;li&gt;What actually happened.&lt;/li&gt;
&lt;li&gt;What you have already tried.&lt;/li&gt;
&lt;li&gt;What evidence you found.&lt;/li&gt;
&lt;li&gt;What you need help understanding.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This helps others assist you without repeating the same investigation.&lt;/p&gt;

&lt;p&gt;Asking for help is not the problem. Asking without making any effort to understand the issue is a missed learning opportunity.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. Learn to explain trade-offs
&lt;/h2&gt;

&lt;p&gt;Suppose your application is getting slower.&lt;/p&gt;

&lt;p&gt;You could add caching, optimize database queries, paginate results, or redesign part of the system.&lt;/p&gt;

&lt;p&gt;Which option is appropriate?&lt;/p&gt;

&lt;p&gt;It depends on the bottleneck, workload, consistency requirements, and complexity you're willing to maintain.&lt;/p&gt;

&lt;p&gt;Professional engineers learn to justify decisions using requirements and evidence rather than choosing technologies because they are fashionable.&lt;/p&gt;

&lt;h2&gt;
  
  
  10. Treat feedback as part of development
&lt;/h2&gt;

&lt;p&gt;Code reviews reveal alternative approaches, potential bugs, security concerns, and opportunities to simplify.&lt;/p&gt;

&lt;p&gt;Don't treat every comment as criticism of your ability.&lt;/p&gt;

&lt;p&gt;Ask why a suggestion matters, evaluate it, and apply the lesson to future work.&lt;/p&gt;

&lt;p&gt;Over time, you will begin recognizing issues before someone else needs to point them out.&lt;/p&gt;

&lt;h2&gt;
  
  
  A 7-day challenge
&lt;/h2&gt;

&lt;p&gt;Try this mini-plan with an existing project.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Day&lt;/th&gt;
&lt;th&gt;Task&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Refactor one confusing function&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;Investigate and document one bug&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Add tests for an important workflow&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;Review API validation and error handling&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Improve Git commits and README documentation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;Explain one architectural trade-off&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;Review the changes and write down what you learned&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The purpose isn't to complete a checklist perfectly. It's to build a repeatable improvement habit.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final takeaway
&lt;/h2&gt;

&lt;p&gt;The transition from junior developer to professional engineer isn't about knowing every framework or memorizing every design pattern.&lt;/p&gt;

&lt;p&gt;It's about developing better judgment.&lt;/p&gt;

&lt;p&gt;Understand problems. Debug systematically. Write readable code. Test important behavior. Communicate clearly. Take ownership. Stay curious.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You don't have to be an expert today. You have to be willing to work like an engineer while you learn.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Discussion
&lt;/h3&gt;

&lt;p&gt;What's one engineering habit you wish you had developed earlier? Share it in the comments so other developers can learn from your experience.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>career</category>
      <category>programming</category>
    </item>
    <item>
      <title>Building a Production-Style AI Telegram Bot with Node.js, Gemini, Cron and Fallbacks</title>
      <dc:creator>Soumyajit Mukherjee</dc:creator>
      <pubDate>Wed, 30 Sep 2026 08:56:39 +0000</pubDate>
      <link>https://dev.to/sam000/building-a-production-style-ai-telegram-bot-with-nodejs-gemini-cron-and-fallbacks-np8</link>
      <guid>https://dev.to/sam000/building-a-production-style-ai-telegram-bot-with-nodejs-gemini-cron-and-fallbacks-np8</guid>
      <description>&lt;p&gt;I wanted to build a small AI project that was more than:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;prompt → LLM → response
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So I built an AI-powered Telegram motivation bot using Node.js, Google Gemini and the Telegram Bot API.&lt;/p&gt;

&lt;p&gt;The interesting part isn't the motivational content itself.&lt;/p&gt;

&lt;p&gt;The interesting part is everything around the AI model:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Scheduling&lt;/li&gt;
&lt;li&gt;Personalization&lt;/li&gt;
&lt;li&gt;Persistent user state&lt;/li&gt;
&lt;li&gt;Streaks&lt;/li&gt;
&lt;li&gt;Feedback&lt;/li&gt;
&lt;li&gt;Telemetry&lt;/li&gt;
&lt;li&gt;Retry logic&lt;/li&gt;
&lt;li&gt;Model fallback&lt;/li&gt;
&lt;li&gt;Caching&lt;/li&gt;
&lt;li&gt;Local fallback content&lt;/li&gt;
&lt;li&gt;Protected webhooks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This article breaks down the architecture.&lt;/p&gt;

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

&lt;p&gt;The core stack is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Node.js
Express.js
Telegram Bot API
Google Gemini
node-cron
dotenv
Jest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The project uses ES modules and keeps the application separated into components such as bot commands, actions, services, data management and configuration.&lt;/p&gt;

&lt;h2&gt;
  
  
  High-Level Architecture
&lt;/h2&gt;

&lt;p&gt;The system roughly looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                    ┌─────────────────┐
                    │ Telegram User   │
                    └────────┬────────┘
                             │
                             ▼
                    ┌─────────────────┐
                    │ Telegram Bot    │
                    │ Command Layer   │
                    └────────┬────────┘
                             │
                             ▼
                    ┌─────────────────┐
                    │ Motivation      │
                    │ Generation      │
                    │ Service         │
                    └────────┬────────┘
                             │
                    ┌────────┴────────┐
                    ▼                 ▼
              ┌──────────┐      ┌───────────┐
              │ Gemini   │      │ Fallback  │
              │ API      │      │ System    │
              └──────────┘      └───────────┘
                    │
                    ▼
              ┌────────────┐
              │ Telemetry  │
              └────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  1. Telegram Command Layer
&lt;/h2&gt;

&lt;p&gt;The bot exposes multiple commands.&lt;/p&gt;

&lt;p&gt;Some of the main ones are:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/motivate
/today
/history
/stats
/leaderboard
/settings
/subscribe
/unsubscribe
/schedule
/set_tone
/set_language
/suggest_quote_topic
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/motivate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;generates an on-demand motivational message.&lt;/p&gt;

&lt;p&gt;A user can also request a topic-specific message:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/suggest_quote_topic job interviews
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The command layer initializes the user, invokes the generation service and stores the resulting data.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. AI Generation Service
&lt;/h2&gt;

&lt;p&gt;The main generation logic lives in the motivation/brain service.&lt;/p&gt;

&lt;p&gt;The service uses the Google Generative AI SDK.&lt;/p&gt;

&lt;p&gt;One interesting design decision is the use of multiple persona archetypes.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;personas&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;stoic&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;warrior&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;philosopher&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;strategist&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;mentor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;elder&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;survivor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;observer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;wanderer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the user selects a mixed/random mode, the application can choose an archetype dynamically.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Multiple Generation Modalities
&lt;/h2&gt;

&lt;p&gt;The application also varies how the generated message should be expressed.&lt;/p&gt;

&lt;p&gt;The current modalities include:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;RAW_REALITY
DEEP_OBSERVATION
QUIET_COMPASSION
PRAGMATIC
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is useful because prompt variation doesn't necessarily require completely different application architectures.&lt;/p&gt;

&lt;p&gt;A small controlled set of generation dimensions can create considerably more variety.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Output Constraints
&lt;/h2&gt;

&lt;p&gt;The prompt also places constraints on the generated content.&lt;/p&gt;

&lt;p&gt;For example, the generation service asks the model for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A short response&lt;/li&gt;
&lt;li&gt;A complete standalone sentence&lt;/li&gt;
&lt;li&gt;No unnecessary formatting&lt;/li&gt;
&lt;li&gt;No generic AI clichés&lt;/li&gt;
&lt;li&gt;A grounded tone&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The application then trims and validates the model output before returning it.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Retry and Model Fallback
&lt;/h2&gt;

&lt;p&gt;This is one of the parts I found most useful from an engineering perspective.&lt;/p&gt;

&lt;p&gt;The application maintains a model priority chain.&lt;/p&gt;

&lt;p&gt;Conceptually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;MODEL_PRIORITY_CHAIN&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;primary-model&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;fallback-model&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The generation function loops through the configured models and retries failures.&lt;/p&gt;

&lt;p&gt;It also detects certain model availability/deprecation errors and can move to the next model.&lt;/p&gt;

&lt;p&gt;This is important because AI providers change models over time.&lt;/p&gt;

&lt;p&gt;Hard-coding one model and assuming it will always exist isn't a great long-term strategy.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Memory Cache
&lt;/h2&gt;

&lt;p&gt;The generation service also keeps a temporary in-memory cache.&lt;/p&gt;

&lt;p&gt;The cache is keyed around parameters such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;language
tone
schedule
A/B variant
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This means the application has another way to avoid unnecessary AI calls when an appropriate recent response already exists.&lt;/p&gt;

&lt;p&gt;The cache also becomes useful when dealing with API rate limits or temporary upstream failures.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Local Fallback
&lt;/h2&gt;

&lt;p&gt;What happens if the AI system fails completely?&lt;/p&gt;

&lt;p&gt;The application can retrieve fallback content from local data.&lt;/p&gt;

&lt;p&gt;The conceptual hierarchy is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Gemini
   ↓
Retry
   ↓
Model fallback
   ↓
Memory cache
   ↓
Local fallback
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is a useful pattern for any application that depends on an external API.&lt;/p&gt;

&lt;p&gt;A graceful degradation strategy is usually better than returning an error every time an external service has a problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Automated Scheduling
&lt;/h2&gt;

&lt;p&gt;The bot uses &lt;code&gt;node-cron&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The current schedules include:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;cron&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;schedule&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;0 8 * * *&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...)&lt;/span&gt;
&lt;span class="nx"&gt;cron&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;schedule&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;0 13 * * *&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...)&lt;/span&gt;
&lt;span class="nx"&gt;cron&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;schedule&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;0 18 * * *&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...)&lt;/span&gt;
&lt;span class="nx"&gt;cron&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;schedule&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;0 19 * * 0&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These correspond to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;08:00 → Morning
13:00 → Midday
18:00 → Evening
Sunday 19:00 → Weekly
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The schedules use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Asia/Kolkata
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;as the timezone.&lt;/p&gt;

&lt;p&gt;The application also has an automated cleanup job.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. Per-User Scheduling
&lt;/h2&gt;

&lt;p&gt;The cron system doesn't simply broadcast every message to everyone.&lt;/p&gt;

&lt;p&gt;It checks each user's schedule configuration.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;schedule&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;scheduleType&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Only users who have enabled a particular dispatch period are targeted.&lt;/p&gt;

&lt;p&gt;That creates an important separation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Global Scheduler
       ↓
User Preferences
       ↓
Eligible Subscribers
       ↓
AI Generation
       ↓
Telegram Delivery
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  10. Streak Tracking
&lt;/h2&gt;

&lt;p&gt;After successful dispatch, the user's streak is updated.&lt;/p&gt;

&lt;p&gt;The project also has milestone badges.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;3 days   → Rising Star
7 days   → 7-Day Believer
14 days  → Unbreakable
30 days  → Iron Will
100 days → Century Member
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This turns a simple messaging bot into a stateful application.&lt;/p&gt;

&lt;h2&gt;
  
  
  11. Feedback Buttons
&lt;/h2&gt;

&lt;p&gt;Generated messages contain inline Telegram buttons:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;👍    👎
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The callback handler determines whether the user voted up or down.&lt;/p&gt;

&lt;p&gt;The application then records:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;chat ID
quote
vote
A/B variant
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The buttons are subsequently removed to prevent repeated submissions for the same message.&lt;/p&gt;

&lt;p&gt;This is a small feature, but it introduces an important concept:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI output can be treated as an experiment rather than an immutable result.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  12. A/B Variant
&lt;/h2&gt;

&lt;p&gt;The project also has an A/B mechanism.&lt;/p&gt;

&lt;p&gt;The user's chat ID is used to determine the variant.&lt;/p&gt;

&lt;p&gt;One variant receives an additional generation instruction.&lt;/p&gt;

&lt;p&gt;This creates a simple way to compare different prompting strategies.&lt;/p&gt;

&lt;p&gt;In a more advanced implementation, this could be replaced with a proper experiment assignment system.&lt;/p&gt;

&lt;h2&gt;
  
  
  13. Telemetry
&lt;/h2&gt;

&lt;p&gt;The application records telemetry around generated messages.&lt;/p&gt;

&lt;p&gt;Some tracked information includes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;event
chatId
schedulePeriod
quoteText
source
responseTimeMs
apiSuccess
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This makes it possible to answer questions such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How long is AI generation taking?&lt;/li&gt;
&lt;li&gt;How often is the API succeeding?&lt;/li&gt;
&lt;li&gt;How frequently is fallback content being used?&lt;/li&gt;
&lt;li&gt;Which scheduling period generated an event?&lt;/li&gt;
&lt;li&gt;Which model produced the response?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without telemetry, these questions are much harder to answer.&lt;/p&gt;

&lt;h2&gt;
  
  
  14. Express API
&lt;/h2&gt;

&lt;p&gt;The application also starts an Express server.&lt;/p&gt;

&lt;p&gt;One endpoint exposes recent generated quotes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GET /api/quotes/latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There is also a protected broadcast endpoint:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;POST /api/webhook/broadcast
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The broadcast endpoint checks an API key supplied through a request header.&lt;/p&gt;

&lt;p&gt;It can then initiate a broadcast to active users.&lt;/p&gt;

&lt;p&gt;This creates an integration point for external systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  15. Environment Variables
&lt;/h2&gt;

&lt;p&gt;Secrets are kept outside the source code.&lt;/p&gt;

&lt;p&gt;The application expects configuration such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PORT
TELEGRAM_BOT_API_TOKEN
GEMINI_API_KEY
TELEGRAM_CHAT_ID
WEBHOOK_SECRET
IS_TEST_MODE
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is particularly important for Telegram and AI projects because both bot tokens and API keys should never be committed to a public repository.&lt;/p&gt;

&lt;h2&gt;
  
  
  16. Local Test Mode
&lt;/h2&gt;

&lt;p&gt;The application also has a test mode.&lt;/p&gt;

&lt;p&gt;Instead of waiting for the scheduled cron execution, the system can execute the dispatch logic immediately.&lt;/p&gt;

&lt;p&gt;That makes local development much easier.&lt;/p&gt;

&lt;p&gt;A scheduled system without a test path can become frustrating to debug.&lt;/p&gt;

&lt;h2&gt;
  
  
  17. Why This Project Is More Than an AI Demo
&lt;/h2&gt;

&lt;p&gt;The project started with a very simple feature:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Generate a motivational message.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But the resulting architecture looks more like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;             ┌───────────────┐
             │ Telegram      │
             └───────┬───────┘
                     │
             ┌───────▼───────┐
             │ Commands      │
             └───────┬───────┘
                     │
          ┌──────────▼──────────┐
          │ User State          │
          │ Preferences         │
          │ Schedule            │
          │ Streak              │
          └──────────┬──────────┘
                     │
             ┌───────▼───────┐
             │ AI Engine     │
             └───────┬───────┘
                     │
       ┌─────────────┼─────────────┐
       ▼             ▼             ▼
    Gemini        Cache        Fallback
       │             │             │
       └─────────────┼─────────────┘
                     ▼
                Telemetry
                     │
                     ▼
              Feedback Loop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And that's what makes the project useful as a learning exercise.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lessons From Building It
&lt;/h2&gt;

&lt;p&gt;The biggest lesson was that:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Calling an LLM is the easy part.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The engineering challenges appear around it.&lt;/p&gt;

&lt;p&gt;You need to think about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reliability&lt;/li&gt;
&lt;li&gt;Rate limits&lt;/li&gt;
&lt;li&gt;Model retirement&lt;/li&gt;
&lt;li&gt;Caching&lt;/li&gt;
&lt;li&gt;User state&lt;/li&gt;
&lt;li&gt;Scheduling&lt;/li&gt;
&lt;li&gt;Feedback&lt;/li&gt;
&lt;li&gt;Observability&lt;/li&gt;
&lt;li&gt;Security&lt;/li&gt;
&lt;li&gt;Testing&lt;/li&gt;
&lt;li&gt;Graceful degradation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those problems are not unique to motivational bots.&lt;/p&gt;

&lt;p&gt;They appear in many AI applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  Possible Improvements
&lt;/h2&gt;

&lt;p&gt;If I continued developing this project, I'd consider adding:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Redis for distributed caching&lt;/li&gt;
&lt;li&gt;PostgreSQL or MongoDB for persistent production storage&lt;/li&gt;
&lt;li&gt;Docker&lt;/li&gt;
&lt;li&gt;More comprehensive automated tests&lt;/li&gt;
&lt;li&gt;Structured logging&lt;/li&gt;
&lt;li&gt;Metrics dashboards&lt;/li&gt;
&lt;li&gt;More sophisticated experimentation&lt;/li&gt;
&lt;li&gt;User-specific scheduling/timezones&lt;/li&gt;
&lt;li&gt;Better analytics&lt;/li&gt;
&lt;li&gt;Additional messaging integrations&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;This project started as a small Telegram automation idea.&lt;/p&gt;

&lt;p&gt;It ended up becoming an interesting exercise in combining:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Node.js + Telegram + Gemini + automation + state + telemetry + reliability.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you're learning AI application development, don't stop at:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generateContent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ask what happens before and after that line.&lt;/p&gt;

&lt;p&gt;That's where most of the interesting engineering begins.&lt;/p&gt;

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

&lt;p&gt;The complete project is available here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/starJeet000/Telegram-Daily-Motivation-Bot" rel="noopener noreferrer"&gt;https://github.com/starJeet000/Telegram-Daily-Motivation-Bot&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you build something similar, I'd be interested in seeing how you handle AI reliability, caching and feedback.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>node</category>
      <category>ai</category>
      <category>telegram</category>
    </item>
    <item>
      <title>WTF Is Jev? A Developer-Friendly Introduction to AI Decision Models</title>
      <dc:creator>Soumyajit Mukherjee</dc:creator>
      <pubDate>Tue, 29 Sep 2026 07:23:16 +0000</pubDate>
      <link>https://dev.to/sam000/wtf-is-jev-a-developer-friendly-introduction-to-ai-decision-models-1ndg</link>
      <guid>https://dev.to/sam000/wtf-is-jev-a-developer-friendly-introduction-to-ai-decision-models-1ndg</guid>
      <description>&lt;p&gt;If you've recently been following AI developer news, you may have noticed a new name appearing everywhere:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Jev.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No, it's not another chatbot.&lt;/p&gt;

&lt;p&gt;No, it's not primarily a coding assistant.&lt;/p&gt;

&lt;p&gt;And no, its main purpose isn't to generate paragraphs of text.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Jev is an AI decision model from TypeSafe AI designed to make structured decisions that software can consume directly.&lt;/strong&gt; TypeSafe introduced it as its first "System One Model" in September 2026.&lt;/p&gt;

&lt;p&gt;Let's break it down.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. What is Jev?
&lt;/h2&gt;

&lt;p&gt;The easiest way to understand Jev is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Context in → structured decision out&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A traditional LLM might receive:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"I was charged twice for my subscription. Please help."
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and generate:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"I'm sorry you're experiencing a duplicate charge..."
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Jev is more interested in answering:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Which department should handle this?

Billing
Technical
Account
Other
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The result can be structured so your application can immediately use it.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Billing: 91%
Technical: 6%
Account: 3%
Other: 0%
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your code then decides what to do.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Why is this different from an LLM?
&lt;/h2&gt;

&lt;p&gt;LLMs are extremely flexible.&lt;/p&gt;

&lt;p&gt;That's their strength.&lt;/p&gt;

&lt;p&gt;But flexibility isn't always what software needs.&lt;/p&gt;

&lt;p&gt;Suppose your backend needs to decide:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Should this request be reviewed?

YES / NO
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Generating a paragraph and then parsing that paragraph isn't necessarily ideal.&lt;/p&gt;

&lt;p&gt;With a structured decision model, the possible outputs are defined ahead of time.&lt;/p&gt;

&lt;p&gt;Conceptually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;jev&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ask&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;state&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;question&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Does this require human review?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;options&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;yes&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;no&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your application can then apply its own logic.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Jev's decision types
&lt;/h2&gt;

&lt;p&gt;Jev's API exposes structured question types including choice, score, and yes/no-style judgments.&lt;/p&gt;

&lt;h3&gt;
  
  
  Choice
&lt;/h3&gt;

&lt;p&gt;Choose from predefined options:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;billing
technical
account
sales
other
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Score
&lt;/h3&gt;

&lt;p&gt;Assign a value on a defined scale:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1 → Low
2 → Medium
3 → High
4 → Critical
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Yes/No-style judgment
&lt;/h3&gt;

&lt;p&gt;Ask whether a condition is true.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Does this request appear suspicious?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. Where can developers use Jev?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Support ticket routing
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Ticket
  ↓
Jev
  ↓
Billing / Technical / Sales
  ↓
Support queue
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instead of manually writing hundreds of classification rules.&lt;/p&gt;

&lt;h3&gt;
  
  
  Fraud workflows
&lt;/h3&gt;

&lt;p&gt;Potential classification:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Approve
Review
Hold
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The payment system still controls the actual transaction.&lt;/p&gt;

&lt;h3&gt;
  
  
  AI model routing
&lt;/h3&gt;

&lt;p&gt;This is one of the more interesting use cases.&lt;/p&gt;

&lt;p&gt;Imagine having several AI models:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Fast model
Coding model
Reasoning model
Research model
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You don't necessarily want every request going to the most expensive model.&lt;/p&gt;

&lt;p&gt;A decision layer could help select the appropriate path.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Request
   ↓
Jev
   ↓
Which model?
   ↓
Specialized model
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Content moderation
&lt;/h3&gt;

&lt;p&gt;Classify content into categories such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Safe
Needs review
High risk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your application can then apply its moderation policy.&lt;/p&gt;

&lt;h3&gt;
  
  
  Security workflows
&lt;/h3&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Request
   ↓
Security signals
   ↓
Jev
   ↓
Normal / Suspicious / Critical
   ↓
Security rules
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The model should not replace deterministic security controls.&lt;/p&gt;

&lt;h3&gt;
  
  
  Incident management
&lt;/h3&gt;

&lt;p&gt;A monitoring system could classify incidents by severity:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Low
Medium
High
Critical
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then automatically route high-confidence cases to the appropriate workflow.&lt;/p&gt;

&lt;h3&gt;
  
  
  Email classification
&lt;/h3&gt;

&lt;p&gt;Incoming email:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Support
Billing
Sales
Spam
Urgent
Newsletter
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The decision can feed directly into your application.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Jev and AI agents
&lt;/h2&gt;

&lt;p&gt;AI agents need to make lots of small decisions.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;What should I do next?

→ Search the web
→ Read a file
→ Call an API
→ Ask the user
→ Stop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instead of asking a large language model to perform every tiny decision, a decision model could potentially handle parts of the routing layer.&lt;/p&gt;

&lt;p&gt;The architecture could look like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;             ┌── Search
Agent state ─┼── API
             ├── Browser
     ↓       ├── Human
    Jev      └── Stop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The agent's code still controls which actions are actually allowed.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Jev isn't a replacement for LLMs
&lt;/h2&gt;

&lt;p&gt;This distinction matters.&lt;/p&gt;

&lt;p&gt;You could use both.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User
 ↓
LLM
 ↓
Understand request
 ↓
Jev
 ↓
Classify / score / route
 ↓
Application code
 ↓
Action
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;An LLM could generate the response.&lt;/p&gt;

&lt;p&gt;Jev could make the structured decision.&lt;/p&gt;

&lt;p&gt;Traditional code could enforce the business rules.&lt;/p&gt;

&lt;p&gt;That's potentially a much more modular AI architecture.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. The confidence part matters
&lt;/h2&gt;

&lt;p&gt;Jev's outputs include probabilities/confidence information.&lt;/p&gt;

&lt;p&gt;That's useful because applications can define thresholds.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;confidence&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.95&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;automate&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;sendToHuman&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The exact threshold should be determined by testing on your own data.&lt;/p&gt;

&lt;p&gt;Don't blindly assume that &lt;code&gt;0.95&lt;/code&gt; means your application is 95% safe in every environment.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Type-safe doesn't mean truth-safe
&lt;/h2&gt;

&lt;p&gt;This is probably the most important caveat.&lt;/p&gt;

&lt;p&gt;Suppose the model is restricted to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;YES
NO
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It cannot return:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Maybe-ish-but-probably-yes?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's good for software integration.&lt;/p&gt;

&lt;p&gt;But the model can still select the wrong option.&lt;/p&gt;

&lt;p&gt;In other words:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Type safety ≠ correctness.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Your production architecture should still include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Evaluation&lt;/li&gt;
&lt;li&gt;Logging&lt;/li&gt;
&lt;li&gt;Monitoring&lt;/li&gt;
&lt;li&gt;Fallbacks&lt;/li&gt;
&lt;li&gt;Human review&lt;/li&gt;
&lt;li&gt;Deterministic rules&lt;/li&gt;
&lt;li&gt;Threshold tuning&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  9. A useful mental model
&lt;/h2&gt;

&lt;p&gt;Think of traditional code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;condition&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;doSomething&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now imagine that the condition is difficult to write with traditional rules.&lt;/p&gt;

&lt;p&gt;Jev can potentially become the fuzzy judgment inside the condition:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                  ┌── YES → action
Application → Jev ┤
                  └── NO → alternative
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That makes Jev feel less like a chatbot and more like an &lt;strong&gt;AI-powered decision function&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  10. Jev vs LLM
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;LLM&lt;/th&gt;
&lt;th&gt;Jev&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Generate text&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Chat&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Write code&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Classification&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scoring&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Routing&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Structured output&lt;/td&gt;
&lt;td&gt;Can be constrained&lt;/td&gt;
&lt;td&gt;Core design&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Confidence&lt;/td&gt;
&lt;td&gt;Model-dependent&lt;/td&gt;
&lt;td&gt;Core output&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Software decision layer&lt;/td&gt;
&lt;td&gt;Possible&lt;/td&gt;
&lt;td&gt;Primary purpose&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  11. When should you use Jev?
&lt;/h2&gt;

&lt;p&gt;A decision model makes the most sense when:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;You have:
✓ Lots of repeated decisions
✓ Clearly defined possible outcomes
✓ Some ambiguity that rules can't easily handle
✓ A need for structured outputs
✓ A workflow that can use confidence thresholds
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It makes less sense when you need:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;✗ Long-form writing
✗ Creative generation
✗ Code generation
✗ Image generation
✗ Open-ended conversation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Those are still jobs where generative models are more appropriate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final takeaway
&lt;/h2&gt;

&lt;p&gt;Jev isn't interesting because it's "another AI model."&lt;/p&gt;

&lt;p&gt;It's interesting because it represents a different way of integrating AI into software.&lt;/p&gt;

&lt;p&gt;Instead of:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User → AI → Text
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;think:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Software
   ↓
State + Question
   ↓
Jev
   ↓
Structured Decision
   ↓
Application Code
   ↓
Action
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The big idea is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Don't ask an AI to write something when all your software needs is a decision.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's the space Jev is trying to occupy.&lt;/p&gt;

&lt;p&gt;And as AI applications become more complex, specialized decision models could become an interesting part of the developer toolbox.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;What would you build with a decision model like Jev?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>jev</category>
      <category>programming</category>
    </item>
    <item>
      <title>System Design Jargons Explained for Fresher Developers</title>
      <dc:creator>Soumyajit Mukherjee</dc:creator>
      <pubDate>Fri, 25 Sep 2026 08:22:32 +0000</pubDate>
      <link>https://dev.to/sam000/system-design-jargons-explained-for-fresher-developers-2lpj</link>
      <guid>https://dev.to/sam000/system-design-jargons-explained-for-fresher-developers-2lpj</guid>
      <description>&lt;p&gt;If you're a fresher or beginner developer, system design can look much harder than it actually is.&lt;/p&gt;

&lt;p&gt;You may encounter terms like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Load Balancer&lt;/li&gt;
&lt;li&gt;API Gateway&lt;/li&gt;
&lt;li&gt;Cache&lt;/li&gt;
&lt;li&gt;CDN&lt;/li&gt;
&lt;li&gt;Message Queue&lt;/li&gt;
&lt;li&gt;Sharding&lt;/li&gt;
&lt;li&gt;Horizontal Scaling&lt;/li&gt;
&lt;li&gt;Vertical Scaling&lt;/li&gt;
&lt;li&gt;Rate Limiting&lt;/li&gt;
&lt;li&gt;Microservices&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let's translate them into simple language.&lt;/p&gt;

&lt;h2&gt;
  
  
  Load Balancer
&lt;/h2&gt;

&lt;p&gt;A load balancer distributes incoming requests across multiple servers.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Users
  |
  v
Load Balancer
 /    |    \
S1    S2    S3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Think:&lt;/strong&gt; traffic distributor.&lt;/p&gt;




&lt;h2&gt;
  
  
  Cache
&lt;/h2&gt;

&lt;p&gt;A cache stores frequently requested data temporarily so it can be retrieved faster.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Application
    |
  Cache
    |
 Database
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Think:&lt;/strong&gt; frequently used data kept nearby.&lt;/p&gt;




&lt;h2&gt;
  
  
  API Gateway
&lt;/h2&gt;

&lt;p&gt;An API Gateway acts as an entry point between clients and backend services.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Client
  |
API Gateway
 /   |   \
Auth Order Payment
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Think:&lt;/strong&gt; front door to backend services.&lt;/p&gt;




&lt;h2&gt;
  
  
  Message Queue
&lt;/h2&gt;

&lt;p&gt;A message queue allows tasks to wait until a worker can process them.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Application → Queue → Worker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For example, instead of making a user wait while a video is processed, the application can put the processing task into a queue.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Think:&lt;/strong&gt; waiting line for background tasks.&lt;/p&gt;




&lt;h2&gt;
  
  
  CDN
&lt;/h2&gt;

&lt;p&gt;A Content Delivery Network can serve cached content from locations closer to users.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Think:&lt;/strong&gt; content delivery closer to the user.&lt;/p&gt;




&lt;h2&gt;
  
  
  Horizontal Scaling
&lt;/h2&gt;

&lt;p&gt;Add more machines.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Server 1
Server 2
Server 3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Think:&lt;/strong&gt; scale out.&lt;/p&gt;




&lt;h2&gt;
  
  
  Vertical Scaling
&lt;/h2&gt;

&lt;p&gt;Make one machine more powerful.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;More CPU
More RAM
Better hardware
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Think:&lt;/strong&gt; scale up.&lt;/p&gt;




&lt;h2&gt;
  
  
  Database Sharding
&lt;/h2&gt;

&lt;p&gt;Split database data across multiple database instances.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Database
   |
-----------------
|       |       |
S1      S2      S3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Think:&lt;/strong&gt; divide a large dataset across machines.&lt;/p&gt;




&lt;h2&gt;
  
  
  Rate Limiting
&lt;/h2&gt;

&lt;p&gt;Restrict how many requests a client can make within a period.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;100 requests / minute
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Think:&lt;/strong&gt; traffic control.&lt;/p&gt;




&lt;h2&gt;
  
  
  Microservices
&lt;/h2&gt;

&lt;p&gt;Break an application into smaller services.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Auth
Orders
Payments
Notifications
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each service can potentially be developed, deployed, and scaled independently.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Think:&lt;/strong&gt; smaller independent backend services.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Most Important Beginner Tip
&lt;/h2&gt;

&lt;p&gt;Don't memorize definitions.&lt;/p&gt;

&lt;p&gt;Instead, ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What problem does this solve?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Too many requests?&lt;/strong&gt;&lt;br&gt;
→ Load balancing&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Repeated database queries?&lt;/strong&gt;&lt;br&gt;
→ Caching&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Long-running background task?&lt;/strong&gt;&lt;br&gt;
→ Message queue&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Too many API requests?&lt;/strong&gt;&lt;br&gt;
→ Rate limiting&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Huge database?&lt;/strong&gt;&lt;br&gt;
→ Consider sharding&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Need more capacity?&lt;/strong&gt;&lt;br&gt;
→ Horizontal/vertical scaling&lt;/p&gt;

&lt;p&gt;That's the foundation of system design.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thought
&lt;/h2&gt;

&lt;p&gt;System design isn't about knowing impressive terminology.&lt;/p&gt;

&lt;p&gt;It's about understanding:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Problem → Constraint → Solution → Trade-off&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Learn that pattern and the jargon becomes much easier.&lt;/p&gt;

</description>
      <category>systemdesign</category>
      <category>beginners</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>WebSockets: How Real-Time Applications Actually Work</title>
      <dc:creator>Soumyajit Mukherjee</dc:creator>
      <pubDate>Fri, 25 Sep 2026 07:15:16 +0000</pubDate>
      <link>https://dev.to/sam000/websockets-how-real-time-applications-actually-work-1ag1</link>
      <guid>https://dev.to/sam000/websockets-how-real-time-applications-actually-work-1ag1</guid>
      <description>&lt;p&gt;Traditional HTTP works extremely well for many applications.&lt;/p&gt;

&lt;p&gt;But what happens when the server needs to send information to the browser immediately?&lt;/p&gt;

&lt;p&gt;Consider:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chat applications&lt;/li&gt;
&lt;li&gt;Live dashboards&lt;/li&gt;
&lt;li&gt;Multiplayer games&lt;/li&gt;
&lt;li&gt;Trading interfaces&lt;/li&gt;
&lt;li&gt;Delivery tracking&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Polling is one solution.&lt;/p&gt;

&lt;p&gt;WebSockets provide another.&lt;/p&gt;

&lt;h3&gt;
  
  
  Traditional HTTP
&lt;/h3&gt;

&lt;p&gt;A client might repeatedly ask:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Any new messages?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Any new messages?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Again:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Any new messages?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This creates unnecessary requests.&lt;/p&gt;

&lt;h3&gt;
  
  
  WebSockets
&lt;/h3&gt;

&lt;p&gt;With WebSockets, the client establishes a persistent connection.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Browser ←────────→ Server
        persistent
        connection
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Either side can send messages.&lt;/p&gt;

&lt;h3&gt;
  
  
  Node.js Example
&lt;/h3&gt;

&lt;p&gt;Using a WebSocket library, a server can broadcast messages:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;socket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;message&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;broadcast&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The browser can listen:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;socket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onmessage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Why WebSockets Are Useful
&lt;/h3&gt;

&lt;p&gt;They provide low-latency bidirectional communication.&lt;/p&gt;

&lt;p&gt;For example, when someone sends a chat message:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User A
  ↓
Server
  ↓
User B
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;User B doesn't need to repeatedly ask whether a message arrived.&lt;/p&gt;

&lt;h3&gt;
  
  
  Things to Consider
&lt;/h3&gt;

&lt;p&gt;Persistent connections create additional operational concerns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Connection management&lt;/li&gt;
&lt;li&gt;Authentication&lt;/li&gt;
&lt;li&gt;Reconnection&lt;/li&gt;
&lt;li&gt;Scaling&lt;/li&gt;
&lt;li&gt;Load balancing&lt;/li&gt;
&lt;li&gt;Message ordering&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When running multiple servers, messages may need to be distributed between instances.&lt;/p&gt;

&lt;h3&gt;
  
  
  Final Thoughts
&lt;/h3&gt;

&lt;p&gt;WebSockets are powerful when your application genuinely needs real-time communication.&lt;/p&gt;

&lt;p&gt;For normal CRUD applications, standard HTTP APIs are often simpler and sufficient.&lt;/p&gt;

</description>
      <category>websockets</category>
      <category>javascript</category>
      <category>realtime</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Building a Serverless AI Tech-News Bot with Node.js, Gemini and GitHub Actions</title>
      <dc:creator>Soumyajit Mukherjee</dc:creator>
      <pubDate>Mon, 21 Sep 2026 18:20:18 +0000</pubDate>
      <link>https://dev.to/sam000/building-a-serverless-ai-tech-news-bot-with-nodejs-gemini-and-github-actions-17po</link>
      <guid>https://dev.to/sam000/building-a-serverless-ai-tech-news-bot-with-nodejs-gemini-and-github-actions-17po</guid>
      <description>&lt;p&gt;I wanted to build a project that combined several technologies into one practical automation pipeline:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Node.js&lt;/li&gt;
&lt;li&gt;Web scraping&lt;/li&gt;
&lt;li&gt;RSS&lt;/li&gt;
&lt;li&gt;Offline NLP&lt;/li&gt;
&lt;li&gt;Generative AI&lt;/li&gt;
&lt;li&gt;Telegram&lt;/li&gt;
&lt;li&gt;Discord&lt;/li&gt;
&lt;li&gt;GitHub Actions&lt;/li&gt;
&lt;li&gt;Vercel&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The result is the &lt;strong&gt;Chaos Routine Bot&lt;/strong&gt;, a serverless technology-news agent that runs every morning and generates an AI-assisted briefing.&lt;/p&gt;

&lt;p&gt;GitHub repository:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/starJeet000/Telegram-News-Scraper-Bot" rel="noopener noreferrer"&gt;https://github.com/starJeet000/Telegram-News-Scraper-Bot&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture
&lt;/h2&gt;

&lt;p&gt;The high-level pipeline is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;             News Sources
                  │
                  ▼
          Random Source Selection
                  │
                  ▼
           Tech Relevance Filter
                  │
                  ▼
             Fetch HTML
                  │
                  ▼
       Readability + JSDOM
                  │
                  ▼
            Clean Article
                  │
                  ▼
          Compromise NLP
                  │
                  ▼
            Core Facts
                  │
                  ▼
          Gemini 2.5 Flash
                  │
          ┌───────┴────────┐
          ▼                ▼
       Telegram          Discord
          │
          └───────┬────────┘
                  ▼
        JSON + RSS + Dashboard
                  │
                  ▼
                Vercel
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  1. Collecting News
&lt;/h2&gt;

&lt;p&gt;The scraper supports multiple technology sources.&lt;/p&gt;

&lt;p&gt;The current source pool includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hacker News&lt;/li&gt;
&lt;li&gt;Reddit&lt;/li&gt;
&lt;li&gt;Lobste.rs&lt;/li&gt;
&lt;li&gt;Dev.to&lt;/li&gt;
&lt;li&gt;InfoQ&lt;/li&gt;
&lt;li&gt;BleepingComputer&lt;/li&gt;
&lt;li&gt;Krebs on Security&lt;/li&gt;
&lt;li&gt;TechCrunch AI&lt;/li&gt;
&lt;li&gt;MIT Technology Review AI&lt;/li&gt;
&lt;li&gt;ServeTheHome&lt;/li&gt;
&lt;li&gt;Phoronix&lt;/li&gt;
&lt;li&gt;TechXplore&lt;/li&gt;
&lt;li&gt;ScienceDaily Nanotechnology&lt;/li&gt;
&lt;li&gt;Ars Technica&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The scraper randomly selects two sources for each execution.&lt;/p&gt;

&lt;p&gt;For Reddit, it also randomly selects one subreddit from communities such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;r/programming
r/netsec
r/artificial
r/webdev
r/sysadmin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2. Filtering Before Processing
&lt;/h2&gt;

&lt;p&gt;The project doesn't blindly process every title.&lt;/p&gt;

&lt;p&gt;The scraper has a negative keyword list and a technology whitelist.&lt;/p&gt;

&lt;p&gt;For example, terms related to unrelated categories can cause a title to be rejected, while terms such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;code
software
hardware
linux
api
security
cyber
gpu
cpu
cloud
llm
kernel
framework
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;help identify technology-related content.&lt;/p&gt;

&lt;p&gt;The filtering happens before the article reaches the extraction and AI stages.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Extracting Clean Article Content
&lt;/h2&gt;

&lt;p&gt;A raw webpage contains far more than the article.&lt;/p&gt;

&lt;p&gt;The project uses:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;JSDOM&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;jsdom&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Readability&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@mozilla/readability&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The HTML is loaded into JSDOM and then processed through Mozilla Readability.&lt;/p&gt;

&lt;p&gt;This produces a cleaner article representation.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Offline NLP
&lt;/h2&gt;

&lt;p&gt;After extracting the article text, the project uses &lt;strong&gt;Compromise&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The current implementation takes the first three sentences from the processed article:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;docNLP&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;nlp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;article&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sentences&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;docNLP&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sentences&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;out&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;array&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Those sentences become the factual input for the AI stage.&lt;/p&gt;

&lt;p&gt;This is an important architectural choice.&lt;/p&gt;

&lt;p&gt;Instead of sending the entire article to an LLM, the pipeline first creates a compact representation.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Gemini Synthesis
&lt;/h2&gt;

&lt;p&gt;Gemini 2.5 Flash is used to generate the final briefing.&lt;/p&gt;

&lt;p&gt;The project gives the model a specific persona: an exhausted senior software engineer drinking their fourth cup of coffee.&lt;/p&gt;

&lt;p&gt;The prompt asks Gemini to create a few short, sarcastic paragraphs around the collected technology stories.&lt;/p&gt;

&lt;p&gt;This produces a consistent editorial style without requiring the scraper itself to generate prose.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Graceful AI Fallback
&lt;/h2&gt;

&lt;p&gt;The application checks whether a Gemini API key exists.&lt;/p&gt;

&lt;p&gt;If it doesn't, it returns the offline summaries instead.&lt;/p&gt;

&lt;p&gt;The Gemini request is also wrapped in error handling.&lt;/p&gt;

&lt;p&gt;If the request fails, the application again falls back to the offline NLP output.&lt;/p&gt;

&lt;p&gt;So the architecture is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                 Gemini
                   │
            ┌──────┴──────┐
            │             │
        Success         Failure
            │             │
            ▼             ▼
       AI briefing    NLP facts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This prevents the AI service from becoming the only path to a usable result.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Telegram Delivery
&lt;/h2&gt;

&lt;p&gt;The Telegram module uses the Telegram Bot API.&lt;/p&gt;

&lt;p&gt;The generated message is sent using Markdown formatting.&lt;/p&gt;

&lt;p&gt;The project also disables webpage previews to avoid unnecessary visual clutter in the Telegram channel.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Discord Delivery
&lt;/h2&gt;

&lt;p&gt;The main pipeline also supports sending the same briefing to a Discord webhook.&lt;/p&gt;

&lt;p&gt;That makes the generated content available across multiple messaging platforms.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. Generating a Static API and RSS Feed
&lt;/h2&gt;

&lt;p&gt;The project doesn't stop after sending a Telegram message.&lt;/p&gt;

&lt;p&gt;It creates:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public/briefing.json
public/rss.xml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The JSON contains information such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;update timestamp&lt;/li&gt;
&lt;li&gt;generated briefing&lt;/li&gt;
&lt;li&gt;source&lt;/li&gt;
&lt;li&gt;title&lt;/li&gt;
&lt;li&gt;URL&lt;/li&gt;
&lt;li&gt;extracted facts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The RSS feed packages the generated briefing for RSS readers.&lt;/p&gt;

&lt;h2&gt;
  
  
  10. GitHub Actions Automation
&lt;/h2&gt;

&lt;p&gt;The GitHub Actions workflow runs at:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;02:30 UTC
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;which corresponds to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;08:00 IST
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The workflow uses Node.js 20 and executes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm ci
npm start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It then deploys the generated output using the Vercel CLI.&lt;/p&gt;

&lt;p&gt;This removes the need for a permanently running server.&lt;/p&gt;

&lt;h2&gt;
  
  
  11. Environment Variables
&lt;/h2&gt;

&lt;p&gt;The workflow keeps credentials in GitHub Actions secrets.&lt;/p&gt;

&lt;p&gt;The project expects values such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GEMINI_API_KEY
TELEGRAM_BOT_TOKEN
TELEGRAM_CHAT_ID
DISCORD_WEBHOOK_URL
VERCEL_TOKEN
VERCEL_ORG_ID
VERCEL_PROJECT_ID
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The important rule here is simple:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Never commit real API keys or bot tokens to Git.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  12. Why This Architecture?
&lt;/h2&gt;

&lt;p&gt;The project could have been much simpler:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;RSS → Gemini → Telegram
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But that would make every component dependent on the next one.&lt;/p&gt;

&lt;p&gt;Instead, the pipeline separates responsibilities:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Scraping
   ↓
Filtering
   ↓
Extraction
   ↓
NLP
   ↓
AI
   ↓
Fallback
   ↓
Distribution
   ↓
Deployment
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That makes it easier to debug and gives the system a useful fallback path.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lessons From the Project
&lt;/h2&gt;

&lt;p&gt;A few ideas I took away from building this:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. AI doesn't need to process raw data
&lt;/h3&gt;

&lt;p&gt;Preprocessing can significantly simplify what reaches the model.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. External APIs should not become single points of failure
&lt;/h3&gt;

&lt;p&gt;The offline NLP fallback keeps the application functional when Gemini isn't available.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Automation can replace an always-on server
&lt;/h3&gt;

&lt;p&gt;For workloads that run once or a few times per day, GitHub Actions can be a practical execution layer.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. One pipeline can have multiple outputs
&lt;/h3&gt;

&lt;p&gt;The same generated data can power:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Telegram&lt;/li&gt;
&lt;li&gt;Discord&lt;/li&gt;
&lt;li&gt;JSON&lt;/li&gt;
&lt;li&gt;RSS&lt;/li&gt;
&lt;li&gt;Web dashboard&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Final Architecture
&lt;/h2&gt;

&lt;p&gt;The complete system can be summarized as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GitHub Actions
      ↓
Node.js
      ↓
News Sources
      ↓
Filtering
      ↓
Readability
      ↓
Offline NLP
      ↓
Gemini
      ↓
Telegram + Discord
      ↓
JSON + RSS
      ↓
Vercel
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The complete source code is available here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/starJeet000/Telegram-News-Scraper-Bot" rel="noopener noreferrer"&gt;https://github.com/starJeet000/Telegram-News-Scraper-Bot&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you're experimenting with &lt;strong&gt;Node.js + AI + web scraping + automation&lt;/strong&gt;, this is a useful pattern to explore: use traditional software engineering to prepare and control the data, then use the LLM for the part it is actually good at—synthesis.&lt;/p&gt;

</description>
      <category>node</category>
      <category>ai</category>
      <category>webscraping</category>
      <category>automation</category>
    </item>
    <item>
      <title>Let’s Break Down a Full-Stack RAG Pipeline With React, Node.js &amp; MongoDB</title>
      <dc:creator>Soumyajit Mukherjee</dc:creator>
      <pubDate>Sat, 19 Sep 2026 15:49:48 +0000</pubDate>
      <link>https://dev.to/sam000/lets-break-down-a-full-stack-rag-pipeline-with-react-nodejs-mongodb-4mmp</link>
      <guid>https://dev.to/sam000/lets-break-down-a-full-stack-rag-pipeline-with-react-nodejs-mongodb-4mmp</guid>
      <description>&lt;p&gt;If you've built a normal full-stack application, you probably know this architecture:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;React → Express → MongoDB
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now let's add an AI-powered RAG pipeline.&lt;/p&gt;

&lt;p&gt;Our architecture becomes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;React
  ↓
Express API
  ↓
RAG Service
  ↓
Embedding Model
  ↓
MongoDB Vector Search
  ↓
Relevant Context
  ↓
LLM
  ↓
Response
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let's break it down.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Are We Building?
&lt;/h2&gt;

&lt;p&gt;Imagine a developer documentation assistant.&lt;/p&gt;

&lt;p&gt;Users upload technical documentation, and later ask:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;How do I refresh an expired JWT?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Our application searches the uploaded documentation and gives the relevant information to an LLM before generating the response.&lt;/p&gt;

&lt;p&gt;This is &lt;strong&gt;Retrieval-Augmented Generation (RAG)&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Document Ingestion
&lt;/h2&gt;

&lt;p&gt;First, documents need to enter our system.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PDF / Markdown / HTML
        ↓
Text Extraction
        ↓
Cleaning
        ↓
Chunking
        ↓
Embeddings
        ↓
MongoDB
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Why chunk the documents?&lt;/p&gt;

&lt;p&gt;Because retrieving a small relevant section is usually more useful than sending an entire document to the LLM.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;authentication.md

├── Chunk 1
├── Chunk 2
├── Chunk 3
└── Chunk 4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  2. Generate Embeddings
&lt;/h2&gt;

&lt;p&gt;Each chunk is converted into a vector.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;embedding&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;embeddingModel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;embed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;chunk&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Conceptually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"Refresh tokens are used..."
             ↓
[0.12, -0.43, 0.77, ...]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The vector represents the semantic meaning of the text.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Store the Data
&lt;/h2&gt;

&lt;p&gt;A MongoDB document might look like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;documentId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;auth-guide&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Refresh tokens are used...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;embedding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;0.12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;0.43&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.77&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="nx"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;page&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;source&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;auth-guide.pdf&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;MongoDB Atlas Vector Search can then be used to search these embeddings.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. User Sends a Question
&lt;/h2&gt;

&lt;p&gt;React sends:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;POST /api/chat
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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;"question"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"How do I refresh an expired JWT?"&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;Express receives the request.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/api/chat&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;question&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;answer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;ragService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ask&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;question&lt;/span&gt;&lt;span class="p"&gt;);&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;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;answer&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  5. Embed the Query
&lt;/h2&gt;

&lt;p&gt;The question is converted into an embedding.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User Question
     ↓
Embedding Model
     ↓
Query Vector
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now the query vector can be compared with the document vectors.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Retrieve Relevant Chunks
&lt;/h2&gt;

&lt;p&gt;Our vector search might return:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Refresh Token Documentation    0.94
JWT Authentication             0.89
Session Management             0.81
Database Configuration         0.31
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We take the most relevant chunks.&lt;/p&gt;

&lt;p&gt;This is the &lt;strong&gt;retrieval&lt;/strong&gt; stage.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. Build the Context
&lt;/h2&gt;

&lt;p&gt;Now we combine the retrieved chunks:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;results&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Our application now has:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Question
+
Relevant Documentation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  8. Build the Prompt
&lt;/h2&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;You are a developer documentation assistant.

Use the context below to answer the question.

Context:
[retrieved documents]

Question:
How do I refresh an expired JWT?

If the context doesn't contain the answer,
say that the information is unavailable.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  9. Call the LLM
&lt;/h2&gt;

&lt;p&gt;The backend sends the prompt to the LLM.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;answer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;llm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The model generates the response.&lt;/p&gt;

&lt;p&gt;Then:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;LLM
 ↓
Express
 ↓
React
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;React displays the answer.&lt;/p&gt;




&lt;h2&gt;
  
  
  Complete RAG Flow
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                 USER
                   ↓
              React UI
                   ↓
             Express API
                   ↓
             RAG Service
                   ↓
          Query Embedding
                   ↓
          Vector Retrieval
                   ↓
           Relevant Chunks
                   ↓
          Context Construction
                   ↓
          Prompt Construction
                   ↓
                  LLM
                   ↓
             Final Answer
                   ↓
                React
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  The Ingestion Side
&lt;/h2&gt;

&lt;p&gt;Don't forget that there are actually two important pipelines.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ingestion pipeline
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Document
 ↓
Extract
 ↓
Clean
 ↓
Chunk
 ↓
Embed
 ↓
Store
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Query pipeline
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Question
 ↓
Embed
 ↓
Search
 ↓
Retrieve
 ↓
Build Context
 ↓
LLM
 ↓
Answer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This distinction makes RAG much easier to understand.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Chunking Is Important
&lt;/h2&gt;

&lt;p&gt;Imagine a 200-page API reference.&lt;/p&gt;

&lt;p&gt;The user asks:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;How does refresh-token rotation work?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sending the entire document to the LLM is inefficient.&lt;/p&gt;

&lt;p&gt;Instead, retrieval might identify:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Chunk 47
Chunk 51
Chunk 52
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;as the relevant sections.&lt;/p&gt;

&lt;p&gt;That's what makes the "retrieval" part valuable.&lt;/p&gt;




&lt;h2&gt;
  
  
  Production Improvements
&lt;/h2&gt;

&lt;p&gt;A basic RAG demo isn't enough for a production application.&lt;/p&gt;

&lt;p&gt;We could add:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Authentication&lt;/li&gt;
&lt;li&gt;Rate limiting&lt;/li&gt;
&lt;li&gt;Caching&lt;/li&gt;
&lt;li&gt;Metadata filtering&lt;/li&gt;
&lt;li&gt;Hybrid search&lt;/li&gt;
&lt;li&gt;Reranking&lt;/li&gt;
&lt;li&gt;Query rewriting&lt;/li&gt;
&lt;li&gt;Citations&lt;/li&gt;
&lt;li&gt;Observability&lt;/li&gt;
&lt;li&gt;Token/cost tracking&lt;/li&gt;
&lt;li&gt;Prompt-injection defenses&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Query
 ↓
Validation
 ↓
Query Rewriting
 ↓
Hybrid Search
 ↓
Metadata Filtering
 ↓
Reranking
 ↓
Context
 ↓
LLM
 ↓
Citations
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Example MERN Structure
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;server/

├── controllers/
│
├── routes/
│
├── models/
│
├── middleware/
│
└── services/
    ├── embeddingService.js
    ├── retrievalService.js
    ├── ragService.js
    └── llmService.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Keeping these services separate makes the architecture easier to maintain.&lt;/p&gt;




&lt;h2&gt;
  
  
  RAG Isn't Just "An LLM + Vector DB"
&lt;/h2&gt;

&lt;p&gt;That's probably the most important lesson.&lt;/p&gt;

&lt;p&gt;A useful RAG system depends on:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Document quality
       +
Chunking
       +
Embeddings
       +
Retrieval
       +
Context selection
       +
Prompt design
       +
LLM
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If retrieval returns irrelevant information, even a powerful LLM can produce a poor response.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Architecture
&lt;/h2&gt;

&lt;p&gt;A simple version:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;React
 ↓
Node.js
 ↓
MongoDB Vector Search
 ↓
Relevant Context
 ↓
Gemini / OpenAI-style LLM
 ↓
React
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A more advanced version:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;React
 ↓
API Gateway
 ↓
Authentication
 ↓
Query Processing
 ↓
Hybrid Retrieval
 ↓
Reranking
 ↓
Context Compression
 ↓
LLM
 ↓
Citation Layer
 ↓
Response
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And that's where a simple AI demo starts becoming a real full-stack engineering project.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thought
&lt;/h2&gt;

&lt;p&gt;The LLM is only one part of a RAG application.&lt;/p&gt;

&lt;p&gt;The real engineering work happens around it:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ingestion → retrieval → context → generation → security → observability → optimization.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's what makes RAG such an interesting architecture for full-stack developers.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>rag</category>
      <category>react</category>
      <category>node</category>
    </item>
    <item>
      <title>Monolith vs Microservices: Stop Choosing Microservices Too Early</title>
      <dc:creator>Soumyajit Mukherjee</dc:creator>
      <pubDate>Sat, 19 Sep 2026 14:27:34 +0000</pubDate>
      <link>https://dev.to/sam000/monolith-vs-microservices-stop-choosing-microservices-too-early-50h7</link>
      <guid>https://dev.to/sam000/monolith-vs-microservices-stop-choosing-microservices-too-early-50h7</guid>
      <description>&lt;p&gt;Microservices are popular.&lt;/p&gt;

&lt;p&gt;That doesn't mean every application needs them.&lt;/p&gt;

&lt;p&gt;A common mistake is starting a project with ten services because "real companies use microservices."&lt;/p&gt;

&lt;h3&gt;
  
  
  What Is a Monolith?
&lt;/h3&gt;

&lt;p&gt;A monolithic application keeps major functionality inside one deployable application.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Frontend
   ↓
Backend
   ├── Users
   ├── Products
   ├── Orders
   └── Payments
        ↓
    Database
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This can be perfectly reasonable.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Are Microservices?
&lt;/h3&gt;

&lt;p&gt;With microservices, functionality is split into independently deployable services:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User Service
Product Service
Order Service
Payment Service
Notification Service
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each service can potentially have its own deployment lifecycle and data storage.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Microservices Are Attractive
&lt;/h3&gt;

&lt;p&gt;They can provide:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Independent deployments&lt;/li&gt;
&lt;li&gt;Team ownership boundaries&lt;/li&gt;
&lt;li&gt;Independent scaling&lt;/li&gt;
&lt;li&gt;Technology flexibility&lt;/li&gt;
&lt;li&gt;Fault isolation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But these benefits come with complexity.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Hidden Cost
&lt;/h3&gt;

&lt;p&gt;You now have to manage:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Service discovery&lt;/li&gt;
&lt;li&gt;Network failures&lt;/li&gt;
&lt;li&gt;Authentication between services&lt;/li&gt;
&lt;li&gt;Distributed tracing&lt;/li&gt;
&lt;li&gt;Deployment pipelines&lt;/li&gt;
&lt;li&gt;Monitoring&lt;/li&gt;
&lt;li&gt;Data consistency&lt;/li&gt;
&lt;li&gt;Message queues&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A function call:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;createOrder&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;can become:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;HTTP request
→ network
→ authentication
→ service
→ database
→ response
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Start Simple
&lt;/h3&gt;

&lt;p&gt;A modular monolith can be an excellent middle ground.&lt;/p&gt;

&lt;p&gt;Organize your code into clear modules:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;users/
products/
orders/
payments/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the system eventually needs service separation, those boundaries can provide a foundation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Final Thoughts
&lt;/h3&gt;

&lt;p&gt;Microservices solve organizational and scaling problems.&lt;/p&gt;

&lt;p&gt;They also create operational problems.&lt;/p&gt;

&lt;p&gt;For many projects, a well-designed monolith is not a failure.&lt;/p&gt;

&lt;p&gt;It's the correct architecture.&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>backend</category>
      <category>systemdesign</category>
      <category>microservices</category>
    </item>
    <item>
      <title>What Actually Happens When You Type a URL?</title>
      <dc:creator>Soumyajit Mukherjee</dc:creator>
      <pubDate>Wed, 09 Sep 2026 17:22:29 +0000</pubDate>
      <link>https://dev.to/sam000/what-actually-happens-when-you-type-a-url-2po</link>
      <guid>https://dev.to/sam000/what-actually-happens-when-you-type-a-url-2po</guid>
      <description>&lt;p&gt;Typing a URL into a browser looks simple.&lt;/p&gt;

&lt;p&gt;Behind the scenes, however, several systems work together before the webpage appears.&lt;/p&gt;

&lt;p&gt;Consider:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 1: The Browser Parses the URL
&lt;/h3&gt;

&lt;p&gt;The browser identifies:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;&lt;span class="n"&gt;Protocol&lt;/span&gt;: &lt;span class="n"&gt;HTTPS&lt;/span&gt;
&lt;span class="n"&gt;Domain&lt;/span&gt;: &lt;span class="n"&gt;example&lt;/span&gt;.&lt;span class="n"&gt;com&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It knows that HTTPS should be used to communicate securely with the server.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: DNS Lookup
&lt;/h3&gt;

&lt;p&gt;Computers communicate using IP addresses.&lt;/p&gt;

&lt;p&gt;DNS translates:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;into an IP address such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;93.184.216.34
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The browser may use cached DNS information to avoid performing the lookup repeatedly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Establishing a Connection
&lt;/h3&gt;

&lt;p&gt;The browser connects to the server.&lt;/p&gt;

&lt;p&gt;With HTTPS, the connection also involves TLS negotiation.&lt;/p&gt;

&lt;p&gt;This establishes encryption between the browser and server.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: HTTP Request
&lt;/h3&gt;

&lt;p&gt;The browser sends something similar to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="nf"&gt;GET&lt;/span&gt; &lt;span class="nn"&gt;/&lt;/span&gt; &lt;span class="k"&gt;HTTP&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="m"&gt;1.1&lt;/span&gt;
&lt;span class="na"&gt;Host&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;example.com&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The server processes the request.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 5: Server Response
&lt;/h3&gt;

&lt;p&gt;The server might return:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="k"&gt;HTTP&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="m"&gt;1.1&lt;/span&gt; &lt;span class="m"&gt;200&lt;/span&gt; &lt;span class="ne"&gt;OK&lt;/span&gt;
&lt;span class="na"&gt;Content-Type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;text/html&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;followed by HTML.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 6: Browser Rendering
&lt;/h3&gt;

&lt;p&gt;The browser parses the HTML.&lt;/p&gt;

&lt;p&gt;It then discovers resources such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CSS
JavaScript
Images
Fonts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Additional requests may be sent to retrieve them.&lt;/p&gt;

&lt;p&gt;Eventually, the browser constructs the page you see.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Developers Should Understand This
&lt;/h3&gt;

&lt;p&gt;Understanding this sequence helps explain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;DNS failures&lt;/li&gt;
&lt;li&gt;SSL errors&lt;/li&gt;
&lt;li&gt;Slow websites&lt;/li&gt;
&lt;li&gt;HTTP status codes&lt;/li&gt;
&lt;li&gt;CDN behavior&lt;/li&gt;
&lt;li&gt;Browser caching&lt;/li&gt;
&lt;li&gt;Network debugging&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Final Thoughts
&lt;/h3&gt;

&lt;p&gt;A URL is just the starting point.&lt;/p&gt;

&lt;p&gt;The journey from a URL to a rendered webpage involves DNS, networking, TLS, HTTP, servers, browsers, and rendering engines.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>networking</category>
      <category>browser</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Mandatory Skills Every Tech Professional Should Have on Their Resume</title>
      <dc:creator>Soumyajit Mukherjee</dc:creator>
      <pubDate>Mon, 07 Sep 2026 07:50:32 +0000</pubDate>
      <link>https://dev.to/sam000/mandatory-skills-every-tech-professional-should-have-on-their-resume-4hna</link>
      <guid>https://dev.to/sam000/mandatory-skills-every-tech-professional-should-have-on-their-resume-4hna</guid>
      <description>&lt;p&gt;Also, You can check out my blogs here: &lt;a href="https://thelazydevhub.blogspot.com" rel="noopener noreferrer"&gt;Click Here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With my GitHub projects here: &lt;a href="https://github.com/starJeet000" rel="noopener noreferrer"&gt;starJeet000&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Having a long list of technologies on your resume doesn't necessarily make you a strong candidate.&lt;/p&gt;

&lt;p&gt;What matters is whether you can use those technologies to build, debug, deploy, and maintain real applications.&lt;/p&gt;

&lt;p&gt;Here are the major skill categories you should consider including.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Programming Languages
&lt;/h3&gt;

&lt;p&gt;You should have at least one language that you know well.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;JavaScript / TypeScript&lt;/li&gt;
&lt;li&gt;Python&lt;/li&gt;
&lt;li&gt;Java&lt;/li&gt;
&lt;li&gt;C++&lt;/li&gt;
&lt;li&gt;Go&lt;/li&gt;
&lt;li&gt;C#&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Don't list 10 languages if you can barely write a project in them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Depth is better than keyword stuffing.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Frameworks &amp;amp; Libraries
&lt;/h3&gt;

&lt;p&gt;Depending on your career path:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React&lt;/li&gt;
&lt;li&gt;Next.js&lt;/li&gt;
&lt;li&gt;Node.js&lt;/li&gt;
&lt;li&gt;Express&lt;/li&gt;
&lt;li&gt;Django&lt;/li&gt;
&lt;li&gt;Spring Boot&lt;/li&gt;
&lt;li&gt;.NET&lt;/li&gt;
&lt;li&gt;Angular&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Your resume becomes stronger when you connect these technologies to actual projects.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Databases
&lt;/h3&gt;

&lt;p&gt;Understand how applications store and retrieve data.&lt;/p&gt;

&lt;p&gt;Useful skills include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PostgreSQL&lt;/li&gt;
&lt;li&gt;MySQL&lt;/li&gt;
&lt;li&gt;MongoDB&lt;/li&gt;
&lt;li&gt;Redis&lt;/li&gt;
&lt;li&gt;Database design&lt;/li&gt;
&lt;li&gt;Indexing&lt;/li&gt;
&lt;li&gt;Basic query optimization&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Knowing a database isn't just knowing how to run &lt;code&gt;SELECT&lt;/code&gt; or insert a document.&lt;/p&gt;

&lt;p&gt;Understand why you chose a particular database.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. APIs &amp;amp; Backend Fundamentals
&lt;/h3&gt;

&lt;p&gt;Modern applications communicate through APIs.&lt;/p&gt;

&lt;p&gt;Useful skills include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;REST APIs&lt;/li&gt;
&lt;li&gt;Authentication&lt;/li&gt;
&lt;li&gt;Authorization&lt;/li&gt;
&lt;li&gt;HTTP/HTTPS&lt;/li&gt;
&lt;li&gt;JSON&lt;/li&gt;
&lt;li&gt;API integration&lt;/li&gt;
&lt;li&gt;Error handling&lt;/li&gt;
&lt;li&gt;Rate limiting&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. Git &amp;amp; GitHub
&lt;/h3&gt;

&lt;p&gt;Version control is practically mandatory for software development.&lt;/p&gt;

&lt;p&gt;Know how to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create branches&lt;/li&gt;
&lt;li&gt;Commit changes&lt;/li&gt;
&lt;li&gt;Merge branches&lt;/li&gt;
&lt;li&gt;Resolve conflicts&lt;/li&gt;
&lt;li&gt;Create pull requests&lt;/li&gt;
&lt;li&gt;Review code&lt;/li&gt;
&lt;li&gt;Manage repositories&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  6. Cloud &amp;amp; Deployment
&lt;/h3&gt;

&lt;p&gt;You don't necessarily need to be a cloud architect.&lt;/p&gt;

&lt;p&gt;But understanding basic deployment is extremely valuable.&lt;/p&gt;

&lt;p&gt;Learn the fundamentals of platforms such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS&lt;/li&gt;
&lt;li&gt;Azure&lt;/li&gt;
&lt;li&gt;Google Cloud&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Also understand environment variables, secrets, domains, HTTPS, and basic server deployment.&lt;/p&gt;

&lt;h3&gt;
  
  
  7. Docker &amp;amp; DevOps
&lt;/h3&gt;

&lt;p&gt;Basic DevOps knowledge can make you stand out.&lt;/p&gt;

&lt;p&gt;Consider learning:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Docker&lt;/li&gt;
&lt;li&gt;Docker Compose&lt;/li&gt;
&lt;li&gt;CI/CD&lt;/li&gt;
&lt;li&gt;GitHub Actions&lt;/li&gt;
&lt;li&gt;Linux fundamentals&lt;/li&gt;
&lt;li&gt;Application monitoring&lt;/li&gt;
&lt;li&gt;Deployment pipelines&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  8. Testing &amp;amp; Debugging
&lt;/h3&gt;

&lt;p&gt;Writing code is only part of software development.&lt;/p&gt;

&lt;p&gt;You should also know how to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Debug applications&lt;/li&gt;
&lt;li&gt;Read stack traces&lt;/li&gt;
&lt;li&gt;Write basic tests&lt;/li&gt;
&lt;li&gt;Handle errors&lt;/li&gt;
&lt;li&gt;Test APIs&lt;/li&gt;
&lt;li&gt;Identify performance problems&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  9. Security Fundamentals
&lt;/h3&gt;

&lt;p&gt;Security shouldn't be an afterthought.&lt;/p&gt;

&lt;p&gt;Understand fundamentals such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Authentication&lt;/li&gt;
&lt;li&gt;Authorization&lt;/li&gt;
&lt;li&gt;Password hashing&lt;/li&gt;
&lt;li&gt;JWT/session security&lt;/li&gt;
&lt;li&gt;HTTPS&lt;/li&gt;
&lt;li&gt;Input validation&lt;/li&gt;
&lt;li&gt;OWASP Top 10&lt;/li&gt;
&lt;li&gt;Secure API design&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  10. AI &amp;amp; Modern Development Tools
&lt;/h3&gt;

&lt;p&gt;AI-assisted development is becoming increasingly common.&lt;/p&gt;

&lt;p&gt;Depending on your role, useful skills include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;LLM APIs&lt;/li&gt;
&lt;li&gt;AI-assisted coding&lt;/li&gt;
&lt;li&gt;Prompt engineering&lt;/li&gt;
&lt;li&gt;AI automation&lt;/li&gt;
&lt;li&gt;RAG fundamentals&lt;/li&gt;
&lt;li&gt;Working with AI APIs&lt;/li&gt;
&lt;li&gt;Evaluating AI-generated output&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You don't need to claim that you're an AI engineer just because you use an AI coding assistant.&lt;/p&gt;

&lt;p&gt;Be specific about what you actually built.&lt;/p&gt;

&lt;h3&gt;
  
  
  11. Data Structures &amp;amp; Problem Solving
&lt;/h3&gt;

&lt;p&gt;For many software engineering roles, fundamental problem-solving skills remain important.&lt;/p&gt;

&lt;p&gt;Know the basics of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Arrays&lt;/li&gt;
&lt;li&gt;Strings&lt;/li&gt;
&lt;li&gt;Hash maps&lt;/li&gt;
&lt;li&gt;Stacks&lt;/li&gt;
&lt;li&gt;Queues&lt;/li&gt;
&lt;li&gt;Trees&lt;/li&gt;
&lt;li&gt;Graphs&lt;/li&gt;
&lt;li&gt;Sorting&lt;/li&gt;
&lt;li&gt;Searching&lt;/li&gt;
&lt;li&gt;Time and space complexity&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  12. Software Engineering Practices
&lt;/h3&gt;

&lt;p&gt;Don't forget the skills that aren't tied to a specific programming language.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SDLC&lt;/li&gt;
&lt;li&gt;Agile/Scrum&lt;/li&gt;
&lt;li&gt;Code reviews&lt;/li&gt;
&lt;li&gt;Documentation&lt;/li&gt;
&lt;li&gt;Clean code&lt;/li&gt;
&lt;li&gt;Design patterns&lt;/li&gt;
&lt;li&gt;Basic system design&lt;/li&gt;
&lt;li&gt;Team collaboration&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Most Important Rule
&lt;/h3&gt;

&lt;p&gt;Don't turn your resume into a technology dictionary.&lt;/p&gt;

&lt;p&gt;Instead of:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;React, Node.js, MongoDB, Docker, AWS, Git, REST API&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Show what you actually did:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Built and deployed a full-stack application using React and Node.js, designed MongoDB data models, implemented authenticated REST APIs, containerized the application with Docker, and automated deployment using CI/CD.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's much more convincing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Final takeaway
&lt;/h3&gt;

&lt;p&gt;Your resume should answer three questions:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What can you build?&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;What problems can you solve?&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Can you actually use the technologies you listed?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A skill becomes much more valuable when you can demonstrate it through a real project.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>careeradvice</category>
      <category>resumetips</category>
    </item>
    <item>
      <title>🧠 Building a Mental Health Prediction System with Machine Learning, SHAP &amp; Flask</title>
      <dc:creator>Soumyajit Mukherjee</dc:creator>
      <pubDate>Wed, 26 Aug 2026 09:17:56 +0000</pubDate>
      <link>https://dev.to/sam000/building-a-mental-health-prediction-system-with-machine-learning-shap-flask-56po</link>
      <guid>https://dev.to/sam000/building-a-mental-health-prediction-system-with-machine-learning-shap-flask-56po</guid>
      <description>&lt;p&gt;I built an end-to-end &lt;strong&gt;Mental Health Prediction &amp;amp; Assessment System&lt;/strong&gt; that combines machine learning, standardized screening, Explainable AI and a web application.&lt;/p&gt;

&lt;p&gt;The objective was to explore what a more complete ML application looks like beyond simply training a model in a Jupyter Notebook.&lt;/p&gt;

&lt;h3&gt;
  
  
  🚀 What does the application do?
&lt;/h3&gt;

&lt;p&gt;The system combines two major components:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1.&lt;/strong&gt; Machine-learning-based risk prediction&lt;br&gt;
&lt;strong&gt;2.&lt;/strong&gt; PHQ-9-based clinical symptom screening&lt;/p&gt;

&lt;p&gt;The results are presented through a web interface with additional explainability and support features.&lt;/p&gt;
&lt;h3&gt;
  
  
  🤖 Machine Learning Pipeline
&lt;/h3&gt;

&lt;p&gt;I evaluated multiple classification algorithms:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AdaBoost&lt;/li&gt;
&lt;li&gt;Random Forest&lt;/li&gt;
&lt;li&gt;XGBoost&lt;/li&gt;
&lt;li&gt;Logistic Regression&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After tuning and evaluation, the &lt;strong&gt;AdaBoost classifier achieved approximately 86.9% accuracy&lt;/strong&gt; and was selected as the final model.&lt;/p&gt;

&lt;p&gt;Model evaluation included:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Confusion matrices&lt;/li&gt;
&lt;li&gt;ROC-AUC curves&lt;/li&gt;
&lt;li&gt;Precision-Recall metrics&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🩺 PHQ-9 Integration
&lt;/h3&gt;

&lt;p&gt;One of the more interesting parts of the project is the integration of the &lt;strong&gt;Patient Health Questionnaire (PHQ-9)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The questionnaire contains nine questions and generates a score from &lt;strong&gt;0&lt;/strong&gt; to &lt;strong&gt;27&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The project uses this standardized screening layer alongside the machine-learning prediction rather than presenting the ML model as a medical diagnosis.&lt;/p&gt;
&lt;h3&gt;
  
  
  🔍 Explainable AI with SHAP
&lt;/h3&gt;

&lt;p&gt;A prediction is much more useful when users can understand why a model reached it.&lt;/p&gt;

&lt;p&gt;That's why I integrated &lt;strong&gt;SHAP (SHapley Additive exPlanations)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The application generates visual explanations showing how individual features contributed to a particular prediction.&lt;/p&gt;

&lt;p&gt;This turns:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"The model predicted this."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;into:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"These features contributed to the model's prediction."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's an important distinction when building responsible ML applications.&lt;/p&gt;
&lt;h3&gt;
  
  
  🏗️ Architecture
&lt;/h3&gt;

&lt;p&gt;The application uses:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User
  ↓
Web Interface
  ↓
Flask Application
  ↓
Data Processing
  ↓
ML Model
  ↓
Risk Prediction
  ↓
SHAP Explanation
  ↓
Result Dashboard
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The project also contains serialized ML artifacts such as the trained model, preprocessing transformer and label encoder.&lt;/p&gt;

&lt;h3&gt;
  
  
  🛠️ Technology Stack
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Machine Learning&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Python 3.12&lt;/li&gt;
&lt;li&gt;Scikit-learn&lt;/li&gt;
&lt;li&gt;XGBoost&lt;/li&gt;
&lt;li&gt;Pandas&lt;/li&gt;
&lt;li&gt;NumPy&lt;/li&gt;
&lt;li&gt;SHAP&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Backend&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Flask&lt;/li&gt;
&lt;li&gt;Gunicorn&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Frontend&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HTML5&lt;/li&gt;
&lt;li&gt;CSS3&lt;/li&gt;
&lt;li&gt;Bootstrap 5&lt;/li&gt;
&lt;li&gt;Jinja2&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;DevOps&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Docker&lt;/li&gt;
&lt;li&gt;Render&lt;/li&gt;
&lt;li&gt;GitHub Actions&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🚀 Beyond Machine Learning
&lt;/h3&gt;

&lt;p&gt;I also implemented additional application functionality:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Interactive mental-health assessment&lt;/li&gt;
&lt;li&gt;SHAP visualization&lt;/li&gt;
&lt;li&gt;Counselling booking interface&lt;/li&gt;
&lt;li&gt;Crisis assistance information&lt;/li&gt;
&lt;li&gt;Docker-based deployment&lt;/li&gt;
&lt;li&gt;Automated uptime monitoring&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal was to turn the ML experiment into an actual &lt;strong&gt;end-to-end web application&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  📚 What I Learned
&lt;/h3&gt;

&lt;p&gt;This project reinforced several important lessons:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Accuracy isn't everything&lt;/strong&gt;&lt;br&gt;
A model can have good accuracy and still be unsuitable for real-world use without considering context, limitations and safety.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Explainability matters&lt;/strong&gt;&lt;br&gt;
SHAP helped make the model's predictions easier to inspect.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Deployment changes everything&lt;/strong&gt;&lt;br&gt;
Moving from a notebook to Flask + Docker + Gunicorn introduced an entirely different set of engineering challenges.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Sensitive domains require extra caution&lt;/strong&gt;&lt;br&gt;
Mental-health applications should never present an ML prediction as a definitive medical diagnosis.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔗 Source Code
&lt;/h3&gt;

&lt;p&gt;The complete project is available on GitHub:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/starJeet000/Mental-Health-Prediction-Using-Machine-Learning" rel="noopener noreferrer"&gt;Click Here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The repository also includes the Flask application, trained model artifacts, notebook, dataset, Docker configuration and requirements.&lt;/p&gt;

&lt;p&gt;If you're learning &lt;strong&gt;Machine Learning, Flask, Explainable AI or ML deployment&lt;/strong&gt;, I'd love to hear your feedback.&lt;/p&gt;

</description>
      <category>python</category>
      <category>machinelearning</category>
      <category>ai</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
