Saturday, August 15, 2026

A Guide for TA Leaders: Employer Branding with Confidence: | Explained

 

Selecting the right employer branding partner is one of the most critical yet overlooked decisions a company can make. A great agency fit leads to better recruitment marketing, outreach and brand work that makes every part of the recruiting stack more effective for years to come. A bad agency fit leads to frustration, mediocre work, and a surprisingly high price tag.

And while you’d think it would be straightforward to pick a brand partner, the selection of an agency, consultant or company to build (or help you build) your employer brand is not an easy task. There are two core reasons.

First, it is very likely that you have never had to select an employer brand partner before.

Even seasoned TA, Marketing or HR leaders have been involved in only one or two selection cycles like this, so they, like you, don’t have a lot of experience to draw from. And when you don’t know what a good process looks or feels like, everything becomes more than just stressful. It becomes scary.

The stakes are real. A bad or poorly-aligned employer brand partner will cost you real money (and real political capital) yielding a fuzzy tagline that doesn’t achieve what you needed it to achieve. That’s the kind of “failed project” that can linger on your reputation at that company.

Second, almost nothing about employer branding is standardized.

If you asked ten employer brand practitioners, you’d find that they don’t agree on much. They have different approaches to solving different problems and different tool sets they prefer to use. Heck, you might even notice that they don’t all agree on what employer brand is and is for. It’s like two plumbers not agreeing on what a “pipe” was. And if these professionals can’t agree on much, how can you feel comfortable selecting the one that will help your company? 

I feel for you. I really do.

This guide is here to help you make sense of it all and feel like you made a smart decision. I want you to really understand your options, set proper expectations, and offer advice that will give you the confidence you need to make a great decision. Because a strong employer brand is a strategic asset that will ultimately help your company grow.

Problems that you might be having

Employer branding is something of a buzzword, which means that people who want to sound “in the know” like to throw it around a lot. They also treat it like magic pixie dust that can be spread over any recruiting problem to make it miraculously better.

Now, I’m a huge advocate for employer branding, but it isn’t magic, and it doesn’t solve all your problems. So let’s start by identifying problems you might be having that employer brand can help you solve.

Problem: You can’t attract the quality of talent that your hiring managers demand. The best candidates have choices in where they work, so they tend to select places where they understand the up-sides and down-sides of their choice. If you are having issues attracting quality talent, painting a more credible and attractive picture of the opportunity (i.e. employer branding) will certainly help.

Problem: Your company is becoming invisible to top talent as the job market gets more competitive, putting future growth at risk. If your company doesn’t make retail products, it can be difficult to attract talent to your open roles. If you are one of 1,000 companies offering sales associate, developer or operations roles, why would anyone click your job if they don’t recognize the company. A strong employer brand can build the positive associations to your company that will drive applications.

Problem: Recruiters are burning out and feel scattered. Recruiting is often a deeply individualized practice. And sometimes having each recruiter play “cowboys and cowgirls” out on their own with minimal oversight can lead to sloppy practices and recruiters working at cross-purposes. An employer brand creates focus so that your recruiters (and hiring managers) are all aligned on what makes your company unique and attractive.

Problem: You are dragging around a painful negative reputation. Glassdoor has built a business around making you feel every negative thought any of your people (or former people) have had about you. In a vacuum, those negative comments can be a real damper on your recruiting efforts. But with a strong employer brand providing the frame and context, those comments can be negated.

Problem: Your offer acceptance rate is dropping, forcing you to regularly “go back to square one.” There’s nothing more painful (or more expensive) than getting a candidate all the way to the offer stage only to drop out. That often happens because they don’t see the value of what your offering beyond the salary. A strong employer brand creates a consistent and credible case as to what the candidate can expect, leading to more “Yes!” 

Problem: Recruiting is taking longer and longer, leading to more and more dropouts. If it’s taking longer and longer to fill your requisitions, an employer brand attracts more candidates faster, and becomes the foundation for a strong pipeline strategy that means some interviewable candidates are already in your ATS before you even open the role. That makes a big impact on your time to fill rate.

Problem: It finally happened: You were told to “do more with less.” Talent acquisition leaders around the world are hearing this more and more. Leadership is pulling the plug on ballooning budgets that don’t seem to make a dent in your metrics. Rather than “running to stand still,” your leadership wants you to think about your challenges differently. And this is where employer brand shines. It makes every recruiter and every recruiting tactic demonstrably more effective, it aligns messaging to enable a centralized content strategy, it makes each message more credible, and it helps you focus on what matters most. 

As a strategic function, a strong employer brand can make a lot of impacts all around the company. But to talent acquisition, you can feel confident that an employer brand will be a great choice in developing your strategic solution. 

How to select an employer brand partner

As you’ll soon see, there are a lot of potential employer brand partners out there. And while they all “do employer branding,” they are very different from one another. 

To ensure you’re able to make the best choice for your company, to make sure you’re a great match, you’ll need to understand your needs and their capabilities and approaches.

Questions you need to answer of yourself before you get started

What 1-3 problems are you expecting an employer brand to solve for you? You’re not going through the process for fun. You are trying to solve a business problem. And while employer brand can impact a number of different issues your company might be facing, focus is important. As the saying goes, “The dog changing two rabbits catches none.” So focus on the core issue you want solved. You might also attempt to answer the related question, “When this is done, what does ‘success’ look like to you and the company?”

Who is “bought in” and who still needs to be sold on the idea? Employer brand isn’t equally understood or valued by talent acquisition, human resources, marketing, comms or leadership, so there’s a good chance that not everyone’s on board yet. This is especially true of the marketing/TA divide. For example, if you’re in TA, you need to have a conversation with marketing to ensure they understand the need and can offer the necessary support to the selected partner. 

Who is your competition? Hiring is a zero-sum game, as the person someone else hires can’t be hired by you, so you are always in a race against other companies. Focusing on 3-5 “typical” talent competitors will help you and your partner understand if you need to be better than three local companies or whatever’s left over of the FAANGs.

What’s the project scope? Are you looking for some internal brand support? A complete brand deliverable? Activation support (job posting copy, career site redesign, ongoing social media content, recruiter and hiring manager training, etc)? No need to spend $100 if you have a $2 problem.

Why now? From my point of view, all companies need employer brand support. So why are you looking now? What’s the “inciting incident” or new expectation you are living with that makes this an urgent need? 

Questions to ask of your prospective partners

When you say “employer brand,” what do you mean? As I mentioned, even pros disagree on what they see as what an employer brand is and what its purpose is. Depending on who you talk to, it is a visual identity (logo, tagline, etc), the recruitment marketing strategy, something that fills the top of the funnel by making you “more attractive,” the human face of the corporate brand, or the strategic position of your entire people function.

This isn’t about getting into a philosophical approach to the work, but if you’re talking to a company that thinks in terms of “visual identity” and you want to define what makes you a different employer, you can waste a lot of time talking past each other without realizing it.  

What is your approach to building the brand? There is no one right way to build a brand. Some companies take a positioning approach. Some companies love internal and external data. Some are about building a brand that won’t change for a decade, while some build something that gets you to the “next stage.” Again, there is no right or wrong answer here, but the approach determines the deliverable and the outcome.

What is the downside to that approach? This question isn’t about trying to make your prospective partner squirm, but about truly understanding the implications of their approach. Every approach has a downside, whether it is about how long it takes to deliver, how much work it will take to localize and activate, 

How are you different from X,Y, Z? Most employer brand partners have some way of providing “full support” for the brand (copy writers, designers, website developers, social media specialists, etc), whether it is in-house or via a network of freelancers and contractors they use on demand. So when you are trying to understand each partner’s strengths and weaknesses, it is helpful to see how they see themselves relative to others beyond being “full service.” Again, there is no right or wrong answer. You’re trying to fit the company that best aligns to your needs and situation.

Buying an EVP isn’t easy, but with proper prep and a little perspective, it’s something you can do with confidence. And if you are looking for an apples-to-apples comparison of 25 employer brand partners (in their own words), check out EVPBuyersGuide.com.

Keep your focus on what you’re trying to accomplish short and long term, and you’ll find the partner who fits you best.

The post A Guide for TA Leaders: Employer Branding with Confidence: appeared first on RecruitingDaily.


Source: RecruitingDaily

Just In: NEXUS AI RBAC Deep Dive

RBAC deep dive: roles, scopes, and least privilege

Published: August 15, 2026

Category: Security · Platform

Reading time: 14 minutes

Author: NEXUS AI Team

A developer leaves the company on Friday. By Monday, their credentials still open three production deployments, two billing pages, and a secrets vault they haven't touched in four months.

That's not a people problem. That's an access model problem.

Role-Based Access Control (RBAC) is how NEXUS AI answers the question every engineering org eventually asks: who can do what, to which resources, and how do we prove it? This post goes deep the role hierarchy, how scopes layer on top of roles, how least privilege works in practice, and how to design an access model your team will actually maintain.

Why RBAC matters more as your team scales

When it's just you, every door being open is convenient. When you have a team of 12 across three environments, every door being open is a liability.

The breach surface for a SaaS product running on cloud infrastructure is rarely the infrastructure itself. It's the humans and automated systems that have standing access to it:

  • A contractor with admin access granted for a two week engagement and never revoked.
  • A CI/CD token with full secrets:write permission because it was "easier to set up that way."
  • A junior developer who can redeploy production because the staging role got copy-pasted.

NEXUS AI's RBAC system is designed to make the right permission easy to grant and hard to accidentally expand. Least privilege is the default, not a setting you have to configure.

The role hierarchy

NEXUS AI defines four built-in roles. They are ordered by permission level each role is a strict superset of the one below it.

Role Who it's for What it controls
Viewer Stakeholders, auditors, QA observers Read-only access to deployments, logs, and metadata
Developer Engineers doing day-to-day deployment work Deploy, redeploy, rollback; read secret names (not values)
Admin Team leads, platform engineers Full control of deployments, secrets, tokens, and members
Owner Founder, CTO, or designated security lead Everything Admin can do + delete the organization

One organization has exactly one Owner. Ownership can be transferred, but not duplicated. This prevents the "everyone is an Owner" pattern that makes incident response a guessing game.

Viewer

Viewers can observe nothing more.

✓ View deployment status (running, stopped, failed)
✓ Read build and runtime logs
✓ See deployment metadata (region, container count, uptime)
✓ View audit log summaries
✗ Trigger any action (deploy, redeploy, rollback, stop)
✗ See secret names or values
✗ Create or revoke Access Tokens
✗ Invite or remove team members

Use Viewer for: product managers monitoring deploy status, customer success checking uptime, external auditors reviewing activity logs, read-only access for contractors.

Developer

Developers can act on deployments. They cannot change platform configuration.

✓ Everything Viewer can do
✓ Deploy, redeploy, rollback, stop deployments
✓ View secret names (DATABASE_URL, STRIPE_KEY) never values
✓ Create Access Tokens scoped to deploy:read and deploy:write only
✗ Create, update, or delete secrets
✗ Create tokens with admin or secrets:write scope
✗ Invite or remove organization members
✗ View billing or usage data

A Developer can push code and redeploy. They cannot change the secrets their code reads. The separation is intentional: it means a Developer-level compromise cannot extract production credentials, only trigger a redeploy.

Admin

Admins own the platform configuration for an organization.

✓ Everything Developer can do
✓ Create, update, and delete secrets
✓ Create Access Tokens with any scope
✓ Invite members and assign roles (up to Admin)
✓ View and export audit logs
✓ Manage domains, billing, and usage
✗ Delete the organization
✗ Transfer ownership
✗ Grant Owner role to another member

Limit Admin to people who actually need to configure secrets or onboard team members. In a 10-person startup, that's usually two or three people. In a 100-person company, it's a dedicated platform team.

Owner

The Owner role is structurally different from Admin it's not just "more permissions," it's accountability. Only one member holds it, and it carries the ability to perform irreversible actions.

✓ Everything Admin can do
✓ Delete the organization and all its resources
✓ Transfer ownership to another Admin
✓ Access all historical audit logs (including deleted members)

The Owner should be the person who is accountable for the business not necessarily the most technical. At a startup, that's the founding engineer or CTO. At an enterprise, it's the platform owner or CISO-designated lead.

How scopes work

Roles define what a human can do. Scopes define what a token can do.

When a Developer (or Admin) creates an Access Token, they can grant that token any scope up to but not exceeding their own permissions. A Developer cannot create a token with secrets:write scope, because Developers cannot write secrets directly.

This is scope containment: tokens cannot be a privilege escalation vector.

The full scope table

Scope Read/Write What it permits
deploy:read Read View status, logs, metadata for deployments
deploy:write Write Create, redeploy, rollback, scale, stop deployments
secrets:read Read List secret names for a deployment (never values)
secrets:write Write Create, update, delete secrets
tokens:read Read List tokens and their metadata
tokens:write Write Create and revoke Access Tokens
members:read Read List organization members and their roles
members:write Write Invite, remove, and change roles of members
billing:read Read View usage statistics and invoices
billing:write Write Update billing plan and payment method
logs:read Read Read build logs, runtime logs, and audit logs
admin All Full access equivalent to Admin role

Scopes compose. A CI token for a deployment pipeline typically needs deploy:write and nothing else. A token for a read-only monitoring integration needs deploy:read and logs:read. An MCP integration for an AI agent doing deployment management might need deploy:read,deploy:write,logs:read.

Creating a precisely scoped token

# CI/CD: deploy-only, expires in 90 days
nexus token create \
  --name "github-actions-prod" \
  --scopes deploy:write \
  --expires 90d

# Monitoring integration: read-only, no expiry (rotate quarterly via calendar)
nexus token create \
  --name "datadog-integration" \
  --scopes deploy:read,logs:read

# AI agent with deployment management access
nexus token create \
  --name "claude-mcp-agent" \
  --scopes deploy:read,deploy:write,logs:read \
  --expires 30d

# Admin token for a one time onboarding script (delete immediately after use)
nexus token create \
  --name "onboarding-script-2026-04-21" \
  --scopes admin \
  --expires 1d

The last example a short-lived admin token for a specific script, destroyed after use is exactly how temporary elevated access should work. No standing privileged access. No "just in case" tokens that accumulate over months.

Least privilege in practice

Least privilege is not a policy you write. It's a discipline you build into your provisioning process. Here's what it looks like in a real NEXUS AI team across three common scenarios.

Scenario 1: Onboarding a new backend engineer

Wrong approach:

New hire → Admin role → "they'll need it eventually"

Right approach:

New hire → Developer role
Week 1: pair with an Admin for any secrets work
Month 3: reassess do they actually need Admin? (usually no)

The Developer role covers 95% of what an active engineer does: deploy, redeploy, check logs, rollback a bad release. Secret creation is rare and can go through an Admin without slowing anyone down.

Scenario 2: Setting up a GitHub Actions pipeline

Wrong approach:

nexus token create --name "github-actions" --scopes admin
# Stored in GitHub secrets as NEXUS_API_KEY

Right approach:

# One token per environment, deploy:write only
nexus token create --name "github-actions-staging" --scopes deploy:write --expires 90d
nexus token create --name "github-actions-prod" --scopes deploy:write --expires 90d

# Store each in the corresponding GitHub environment secret
# github.com/org/repo → Settings → Environments → staging → NEXUS_API_KEY
# github.com/org/repo → Settings → Environments → production → NEXUS_API_KEY

Environment scoped tokens mean a staging pipeline compromise cannot touch production. The deploy:write scope means the pipeline can redeploy but cannot read or modify secrets.

Scenario 3: Granting an external contractor temporary access

Wrong approach:

Contractor → Admin role → "we'll remove it when they're done"
(They're done. It's still there. Six months later: breach.)

Right approach:

# Invite as Viewer they can observe, not act
nexus member invite contractor@agency.com --role Viewer

# If they need to trigger deploys, create a scoped token with explicit expiry
nexus token create \
  --name "contractor-agency-q2-2026" \
  --scopes deploy:write \
  --expires 30d

# Deliver the token via a secure channel. Calendar reminder for 29 days out.
# At project end: revoke the token and remove the member
nexus token revoke tok_01HX9...
nexus member remove contractor@agency.com

The token expires automatically even if you forget. The member removal is still important it cleans up the audit trail and signals a clean handoff.

Resource-level access: deployments and projects

Roles apply at the organization level by default. But NEXUS AI also supports project-scoped membership isolating access to a subset of deployments within an organization.

# Add a Developer to a specific project only
nexus project member add \
  --project payments-service \
  --email engineer@company.com \
  --role Developer

# They can now deploy payments-service/* deployments
# They cannot see auth-service/*, user-service/*, or any other project

Project-scoped access is useful for:

  • Regulated workloads — your payments team accesses the payments project; your analytics team accesses the analytics project. No overlap.
  • Multi-tenant organizations agencies managing deployments for multiple clients. Each client's project is isolated.
  • Contractor access — limit a vendor to exactly the project they're working on.

Organization-level Admins retain visibility across all projects. Project-scoped Developers cannot see outside their project boundary.

RBAC and AI agents

NEXUS AI's 37 MCP tools for Claude and AI agents operate under the same RBAC model as human callers. A token issued to an AI agent carries exactly the same scope enforcement no exceptions.

This matters because AI agents tend to be given more access than they need "because it's easier." An agent with admin scope that goes wrong is a full organization compromise. An agent with deploy:read that goes wrong reveals status information and nothing else.

Designing safe agent access

Read-only diagnostic agent — Claude inspects logs, checks deployment health, surfaces anomalies:

nexus token create \
  --name "claude-diagnostic" \
  --scopes deploy:read,logs:read \
  --expires 7d

The agent cannot deploy, rollback, or change anything. It observes and reports.

Deployment automation agent — Claude reacts to CI signals and triggers redeployments:

nexus token create \
  --name "claude-deploy-agent" \
  --scopes deploy:read,deploy:write,logs:read \
  --expires 30d

The agent can act on deployments. It cannot touch secrets, billing, or team membership.

Incident response agent — Claude triages a production incident, can rollback if needed:

# Short-lived, manually issued during an incident
nexus token create \
  --name "claude-incident-2026-04-21" \
  --scopes deploy:read,deploy:write,logs:read \
  --expires 4h

4-hour expiry. The token disappears when the incident window ends. No standing elevated access for AI agents.

The rule: grant an AI agent the minimum scope it needs to complete its defined task. Then set an expiry that matches the task duration — not "never" because that's convenient.

What RBAC cannot do

Knowing the limits of any security control is as important as knowing what it covers.

RBAC does not protect against a compromised Owner account. The Owner role has full access. If an Owner's credentials are compromised, the attacker has full access. Protect Owner accounts with hardware MFA, not just TOTP.

RBAC does not prevent a Developer from logging sensitive data. If your application logs process.env.DATABASE_URL at startup, that value appears in runtime logs — which Developers can read. Secret management starts with application code discipline.

RBAC does not enforce network-level isolation. A Developer with deploy:write can push a container that opens a reverse shell. Pair RBAC with container security policies and network egress controls for workloads that require it.

RBAC does not replace secrets rotation. Least privilege reduces blast radius when a secret is compromised. Rotation reduces the window of exposure. Both are required for a complete security posture.

The access model audit

Run this quarterly. It takes 20 minutes and it will find something to fix every time.

# List all organization members and their roles
nexus member list

# List all active tokens with creation date and last-used date
nexus token list --show-last-used

# Check for tokens with no expiry
nexus token list --no-expiry

# Check for tokens unused in 30+ days
nexus token list --unused-since 30d

For each token unused in 30+ days: revoke it. For each admin-scoped token that isn't for a one-time script: replace it with narrower scopes. For each member at a role higher than their current responsibilities: downgrade it.

The goal is to reach a state where every active token has a name that explains exactly what it does, an expiry that matches how long it needs to exist, and the minimum scope to do its job.

RBAC and compliance

If you're in a regulated industry healthcare, fintech, legal — RBAC is table stakes for compliance. NEXUS AI's RBAC system maps directly to common control requirements:

Compliance requirement NEXUS AI control
Least-privilege access Role hierarchy + token scopes
Separation of duties Developers cannot write secrets; Owners are unique
Access review nexus member list, nexus token list for quarterly audits
Privileged access management Admin and Owner roles with MFA enforcement
Access revocation on termination nexus member remove + nexus token revoke
Audit trail Append-only audit logs with actor, token ID, timestamp, and IP

Enterprise and Enterprise On-Prem plans include 90-day and indefinite audit log retention respectively. Logs are exportable to Datadog, Grafana, Splunk, or any SIEM via the audit log export API.

Checklist: production-grade RBAC setup

  • [ ] Assign roles at the minimum level needed start with Developer, escalate to Admin only when demonstrated necessary
  • [ ] No team member should have Owner role unless they're accountable for the organization
  • [ ] Every CI/CD pipeline uses a separate deploy:write token per environment
  • [ ] Every token has a name that identifies its purpose and a --expires flag
  • [ ] No admin-scoped tokens in standing use only for one-time scripts with 1-day expiry
  • [ ] AI agent tokens scoped to exactly what the agent does (not admin)
  • [ ] Quarterly access review: nexus token list --unused-since 30d and nexus member list
  • [ ] Project-scoped membership for workloads that should be isolated (payments, healthcare, multi-client)
  • [ ] Owner account protected with hardware MFA (YubiKey or equivalent)
  • [ ] Offboarding runbook: member remove + all associated tokens revoke, same day

Frequently asked questions

Can a Developer see their own Access Tokens after creation?

Token values are shown once at creation — never again. A Developer can list their tokens by name and ID (nexus token list --mine), but the token_value is never retrievable. If lost, rotate.

What happens to tokens when a member is removed?

Tokens are scoped to the organization, not to the member who created them. Removing a member does not automatically revoke their tokens. Run nexus token list --created-by email@company.com and revoke manually as part of offboarding. A future release will offer member-removal with automatic token revocation.

Can a Developer escalate their own role?

No. Role changes require Admin or Owner. A Developer cannot call any API endpoint that modifies their own or another member's role.

How does NEXUS AI handle role changes mid-session?

Role and scope changes take effect immediately. An active API session using a token that gets revoked will receive a 401 Unauthorized on the next call — there's no grace window for human sessions (only for the 5-minute deploy token rotation window).

Is there a way to grant time-limited elevated access without creating a token?

Not currently at the role level — role changes are persistent until manually reverted. Use a short-lived admin-scoped token for temporary elevated operations instead of upgrading a member's role. This keeps the audit trail cleaner and eliminates the "I forgot to downgrade them" failure mode.

We're on the Starter plan. Do we get RBAC?

Yes. All four roles and the full scope system ship on every plan, including Starter at $29/mo. Project-scoped membership and audit log export are Enterprise features.

What's next

Access control works best when it's boring when every token has a clear purpose, every role is appropriate, and your quarterly audit finds nothing to clean up. That state is achievable. It requires an initial setup investment of about two hours and 20 minutes of discipline every quarter.

Start with your CI/CD tokens. Replace any admin-scoped pipeline token with deploy:write. That one change eliminates your largest standing access risk.

For regulated workloads, compliance tooling, or teams larger than 20 engineers, the Enterprise plan adds SAML SSO, custom audit log retention, and dedicated security review. Reach out at nexusai.run.

Related reading:

  • Stop shipping secrets. Start using a vault.
  • MCP integration: 37 tools for Claude and AI agents
  • Audit logs and compliance: what gets recorded and why
  • How NEXUS AI deploys your app in under 5 minutes

Least privilege is not paranoia. It's the discipline that makes incidents containable.


Source: DEV Community

Updated: From Zero to Voice Agent: My 10-Day Journey Building an AI Voice Agent

Building AgentX: An AI Voice Assistant for Indian Farmers Powered by Murf Falcon 2

10 Days of AI Voice Agents Challenge — Day 10 Submission | #VoiceForBharat

Introduction

For millions of farmers across India, timely access to agricultural information—such as crop disease identification, weather updates, and mandi (market) prices—can make the difference between a successful harvest and a heavy financial loss. However, existing digital tools present significant barriers: complex mobile interfaces, text-heavy portals, and a lack of support for regional Indian languages or casual code-mixed conversations (Hinglish/Hindi).

To bridge this digital divide, I built AgentX—a voice-first, multilingual AI assistant tailored specifically for Indian agriculture. AgentX allows farmers to simply speak into their phones in Hindi, Hinglish, or Devanagari script and receive real-time, knowledge-backed voice advice.

High-Level System Architecture

AgentX operates as a real-time, bi-directional voice pipeline built on the LiveKit Agent Framework.

  [ Farmer's Voice Input ]
             │
             ▼
┌──────────────────────────┐
│  LiveKit WebRTC Audio    │  (Low-Latency Real-Time Transport)
└────────────┬─────────────┘
             │
             ▼
┌──────────────────────────┐
│  Speech-to-Text (STT)    │  (Multilingual & Hinglish Recognition)
└────────────┬─────────────┘
             │
             ▼
┌──────────────────────────┐
│   Agent Engine + RAG     │ ◄───► [ Weather & Mandi APIs ]
│  (LLM + Vector Database) │ ◄───► [ Agronomy RAG Knowledge Base ]
└────────────┬─────────────┘
             │
             ▼
┌──────────────────────────┐
│   Murf Falcon 2 TTS      │  (Natural Indian Accent Voice Synthesis)
└────────────┬─────────────┘
             │
             ▼
  [ Expressive Voice Response ]

Key Components:

  1. Real-time Transport: LiveKit WebRTC for ultra-low latency audio streaming.
  2. STT: Deepgram / Whisper tuned for Hindi, Devanagari, and Hinglish phonetics.
  3. LLM Engine: Generative AI backed by RAG (Retrieval-Augmented Generation) to prevent hallucinations and provide accurate agricultural advisories.
  4. TTS Engine: Murf Falcon 2, delivering natural, warm, and human-like Indian accent speech synthesis.

Key Features of AgentX

1. Natural Voice AI (Powered by Murf Falcon 2)

AgentX converses naturally without mechanical or robotic delays. By integrating Murf Falcon 2, the agent produces ultra-realistic Indian accent voice responses that sound trustworthy and easy to understand over mobile speakers.

2. Crop Intelligence & Disease Diagnosis

Farmers can describe symptoms (e.g., "Meri gehun ki fasal ke patte peele ho rahe hain" / "Wheat leaves turning yellow"). AgentX cross-references agronomy guides to suggest exact diagnosis and organic or chemical treatment dosages.

3. Weather Intelligence

AgentX checks hyper-local weather forecasts using live APIs before advising on irrigation, pesticide spraying, or harvesting schedules. For example, if rain is predicted in 24 hours, it warns the farmer not to apply pesticides.

4. Market Intelligence (Mandi Prices)

Farmers can query live commodity rates across regional Mandis (e.g., "Aaj Indore mandi me Gehun ka bhav kya hai?"). AgentX retrieves real-time pricing data to help farmers decide when and where to sell for maximum profit.

5. Multilingual & Code-Mixed Support (Hindi / Hinglish / Devanagari)

AgentX naturally understands code-mixed speech (mixing Hindi and English terms like "pest control", "urea", "irrigation", "weather warning") and responds accurately in Hinglish or fluent Hindi.

6. AI + RAG (Knowledge-Backed Answers)

Agricultural guidance requires high precision. AgentX uses RAG over verified government agricultural bulletins and agronomic research papers to ground all responses in facts, ensuring zero dangerous hallucinations.

The Hardest Challenges & Solutions

Building a real-time voice agent for rural Indian contexts came with technical hurdles. Here is how I solved them:

Challenge 1: Code-Mixed Pronunciation in Text-to-Speech

Problem: Traditional TTS models struggle with Hinglish inputs. When reading mixed text like "Gehun crop me yellow rust hai", standard models either butcher the English terms or mispronounce Hindi words written in Devanagari/Roman script.

Solution: By leveraging Murf Falcon 2, which is natively optimized for Indian speech patterns and multilingual nuances, combined with custom phonetic text normalization before sending prompts to the TTS engine, AgentX delivers smooth, natural Hinglish output.

Challenge 2: Reducing Latency with Parallel RAG & Tool Calling

Problem: Querying weather APIs, searching Mandi price databases, and performing vector RAG lookup sequentially caused an audible 3-4 second pause before the agent spoke.

Solution: Implemented asynchronous parallel execution in Python (asyncio.gather) to fetch live API data and vector embeddings concurrently. We also enabled audio streaming so Murf Falcon 2 begins sending audio frames back to the client while the remainder of the response is still generating.

Step-by-Step Guide: How to Build & Run AgentX

Want to run AgentX locally or build your own voice agent? Follow these steps:

Prerequisites

Step 1: Clone the Repository

git clone https://github.com/singhsudhanshu22168-web/Voice-Agent-Day9.git
cd Voice-Agent-Day9

Step 2: Set Up Virtual Environment & Install Dependencies

python -m venv venv
# On Windows:
venv\Scripts\activate
# On Linux/Mac:
source venv/bin/activate

pip install -r requirements.txt

Step 3: Configure Environment Variables

Create a .env file in the root directory (never commit this file to Git!):

LIVEKIT_URL=wss://your-livekit-project.livekit.cloud
LIVEKIT_API_KEY=your_livekit_api_key
LIVEKIT_API_SECRET=your_livekit_api_secret

MURF_API_KEY=your_murf_falcon_api_key
OPENAI_API_KEY=your_openai_api_key

Step 4: Run the Agent Worker

python agent.py dev

Step 5: Connect and Test

Open the LiveKit Agents Playground or your custom frontend client, connect to the room, and start speaking to AgentX in Hindi or Hinglish:

Farmer: "Namaste AgentX, aaj meri fasal ke liye mausam kaisa rahega?"

AgentX: "Namaste! Aaj aapke ilake me halki baarish hone ki sambhavna hai, isliye aaj keeTnaashak ka chhidkaav na karein."

Conclusion & Acknowledgments

Over the 10 Days of AI Voice Agents challenge, building AgentX demonstrated the immense power of voice-first AI for Bharat. Voice bridges literacy and digital access gaps, making advanced crop, weather, and market intelligence accessible to every farmer.

Huge thanks to Murf AI for hosting the #VoiceForBharat Challenge 2026 and providing access to the incredible Murf Falcon 2 text-to-speech model!

If you found this guide helpful, check out the code on GitHub and leave a on the repository!


Source: DEV Community

The Mindset Shift: Data Cleaning in Data Science vs. Data Engineering

I could have written about another tool I’ve picked up on my data engineering journey, but I found something a bit more fundamental.

Recently, while exploring PySpark and building out a modular ETL pipeline, I caught myself looking at the data and asking:

"Why am I cleaning this? How is this different from the normal cleaning I do in data science?🤔"

I'd already spent plenty of time cleaning datasets for analysis and machine learning. But as I started building production-oriented pipelines, I realized something:

The transformations themselves might look similar, but the problems we're solving are often very different.

That was the mindset shift.

1. The Core Objective: Analysis vs. Reliability

In data science, cleaning is usually driven by the needs of the analysis or model.

You might investigate outliers, handle missing values, remove duplicates, transform distributions, or engineer new features. The right approach depends heavily on the question you're trying to answer and the assumptions your model makes.

The goal isn't simply to make the data “clean.” It's to make the data useful and appropriate for the analysis.

Data engineering has a different set of constraints.

When you're building a pipeline that runs automatically and feeds downstream systems, you also have to think about things like schema consistency, data contracts, failure handling, scalability and reproducibility.

A pipeline can't rely on someone opening a notebook tomorrow morning and noticing that yesterday's data suddenly looks strange.

So the goal becomes reliable data processing.
It's less about choosing the universally “correct” way to clean a value and more about making sure the rules are explicit, repeatable, observable, and appropriate for the systems consuming the data.

2. Handling Nulls: Context Matters

Missing data is a problem in both disciplines. What you do about it depends on why the data is missing and what happens downstream.

In data science, you might impute a missing age using the median. If you're training a model, preserving the observation may be more useful than dropping the row.

In a data pipeline, the answer depends on the role of that field.

Suppose customer_id is missing. If it's required to identify a customer, that record might need to be rejected or quarantined.

But what about a missing email address?

If email is optional, there's probably no reason to reject the record. Let it through as NULL.

Not every imperfect value is bad data.

The important thing is understanding which fields are required, which are optional, and what the downstream system expects.

3. From Manual Inspection to Automated Data Quality

This is probably where the difference becomes most obvious.

When exploring a dataset in a notebook, you might notice something strange:

“Why are there negative values in this column?”
You investigate, figure out what happened, update your transformation, and run the notebook again.That's perfectly reasonable during exploration.But imagine the same problem occurring in a pipeline that runs every night.You won't necessarily be there to notice it.

This is where data quality checks become part of the pipeline itself.
For example, you might define rules such as:

  • customer_id must not be null
  • transaction timestamps must be valid
  • revenue should not be negative
  • incoming data must conform to the expected schema
  • duplicate transaction IDs should not exist And importantly, not every violation needs the same response.

A missing primary key might be a critical error that causes a record to be quarantined while a missing email might simply be allowed and monitored.

An unexpected but recoverable schema change might trigger an alert rather than immediately bringing the entire pipeline down.

The important shift is that the expectations are encoded into the system rather than living only in the engineer's head or notebook.

4. Cleaning vs. Protecting the Data Pipeline

This is probably the biggest distinction I took away.

In data science, cleaning is often part of preparing a dataset for a particular analysis.
In data engineering, transformations are also part of creating a reliable data product.

That means asking questions beyond:
“Is this data clean?”

You start asking:

“What assumptions am I making?”
“What happens if those assumptions are violated?”
“Should this record be transformed, rejected, quarantined, or allowed through?”
“Will this still work when the dataset is 100 times larger?”
“What happens when the upstream schema changes?”
“Can someone else understand and reproduce what this pipeline is doing?”

That's the mindset shift.

The code might still contain familiar operations like filtering nulls, casting types, removing duplicates and transforming columns.

But the context has changed. You're no longer just cleaning a dataset. You're building a system that has to keep processing data reliably, even when the data isn't perfect.

And Then There's the Tooling Question...

This shift in mindset naturally led me to another question:

“If I already know how to clean and transform data with Pandas, why can't I just use Pandas for my data engineering pipelines?”🤷‍♀️


Source: DEV Community

How to Generate OG Images at Scale: A Developer's Guide

How to Generate OG Images at Scale: A Developer's Guide

The link preview is the first thing people see before they click. On X, LinkedIn, Slack, and iMessage, your URL renders as a 1200×630 card — and if that card is a generic gray box with your domain name, you've already lost the click to the person who posted a screenshot instead.

Dynamic Open Graph images fix this. Instead of one static PNG per page, you render a unique card per URL — title, author, reading time, a chart, whatever your page actually contains. The result is a measurable lift in click-through rate and share velocity. But how you generate those images matters more than whether you do it at all. Get the architecture wrong and you'll ship broken cards, burn server resources, or lock yourself into a tool that can't scale.

Here's the landscape, the trade-offs, and a pipeline that holds up under real traffic.

The Landscape: Client-Side vs. Server-Side Rendering

Client-side generation is the trap. Tools like myogimage.com let you design a template in the browser and export a static PNG. That's fine for a one-off — but it collapses the moment you need dynamic content. You can't render a card for a blog post that doesn't exist yet, and you can't automate a pipeline around a GUI. Worse, some of these "free" tools advertise an API that doesn't actually exist. If your OG strategy depends on a service that can't be called programmatically, you don't have a strategy — you have a screenshot.

The other client-side trap is generating images in the browser at request time. Social scrapers (Twitterbot, Slackbot, LinkedInBot) don't execute JavaScript. If your OG image is rendered client-side, the scraper sees nothing. This is the single most common reason "my OG image works in the preview but not when I share it."

Server-side rendering is the only approach that works reliably. The scraper makes a GET request, your server returns a complete PNG. No JavaScript required. Within server-side, you have two real options:

  1. DIY with satori + a deployment platform (the Vercel approach). satori converts JSX to SVG, then you rasterize to PNG with resvg or sharp. It's fast, it's free, and it's fully under your control. The cost is yours too: you maintain the rendering service, handle font loading, manage concurrency, and debug edge cases yourself. It's a solid choice if you have the time and the traffic justifies the infrastructure.

  2. A dedicated OG image API (like FastOG). You send a GET request with your template and parameters, the service renders the image server-side, caches it at the edge, and returns a URL. No infrastructure to maintain, no fonts to bundle, no scraper compatibility to test. You pay per image, and caching means repeat renders cost nothing.

The right choice depends on your constraints. If you're an indie hacker shipping a blog this weekend, the DIY stack is a fun afternoon project. If you're building a SaaS where every page needs a unique card and your time is better spent on the product, a managed API wins.

Anatomy of a High-Performance OG Image Pipeline

A production-grade pipeline has five stages. Here's what each one needs to do.

1. URL Design

Your OG image endpoint should be a simple GET request with query parameters — no auth headers, no POST bodies. Social scrapers only send GET requests. FastOG's pattern looks like this:

https://api.fastog.com/api/v1/og?template=blog&title=Hello%20World&author=Jane

Keep the parameter surface small. Every parameter is a template variable you need to document, validate, and test. Start with 3–5 per template.

2. Template Registry

A template is a design with named slots: title, author, date, reading_time, accent_color. Your registry maps a template ID to its layout and default styles. FastOG ships 41 templates covering OG cards (1200×630) and X headers (1500×500) — but you don't need 41. You need a handful that match your brand and a registry that makes adding new ones trivial.

3. Rendering

The renderer takes the template, injects the parameters, and produces a PNG. This is where satori-style approaches and managed APIs diverge. The key performance metric is time-to-first-byte: social scrapers are impatient. If your render takes longer than ~2 seconds, platforms will fall back to a generic card. FastOG renders via Svelte → headless Chrome, which handles complex layouts and custom fonts gracefully, and serves the result from edge cache.

4. Caching

This is the difference between "paying per image" and "paying per unique image." If your pipeline caches at the CDN edge, the first render of a URL is the only render that costs anything. Every subsequent scrape — and there will be many, every time someone shares the link — hits the cache. FastOG's model is 1 credit = 1 image, with 0 cost on cache hits. If you're DIY, make sure your cache layer is in front of your renderer, not behind it.

5. Security

If your OG endpoint accepts query parameters, it's a public URL. Anyone can hit it. That's fine for public content, but it means you need HMAC signing for anything you don't want rendered arbitrarily. The pattern:

// Node.js example: sign an OG image URL
const crypto = require('crypto');

function signOgUrl(baseUrl, params, secret) {
  const query = new URLSearchParams(params).toString();
  const signature = crypto
    .createHmac('sha256', secret)
    .update(query)
    .digest('hex');
  return `${baseUrl}?${query}&sig=${signature}`;
}

// Usage
const url = signOgUrl(
  'https://api.fastog.com/api/v1/og',
  { template: 'blog', title: 'Hello World' },
  process.env.OG_SECRET
);

The server recomputes the HMAC and rejects requests with an invalid or missing signature. This prevents abuse of your render quota and stops people from generating arbitrary images on your dime.

Putting It Together

Here's a minimal implementation for a blog, using a managed API:

// lib/og.js
const OG_BASE = 'https://api.fastog.com/api/v1/og';
const OG_SECRET = process.env.OG_SECRET;

export function getOgImageUrl({ title, excerpt, slug }) {
  const params = {
    template: 'blog',
    title,
    excerpt,
    slug,
  };
  const query = new URLSearchParams(params).toString();
  const sig = crypto.createHmac('sha256', OG_SECRET).update(query).digest('hex');
  return `${OG_BASE}?${query}&sig=${sig}`;
}

Then in your page template, add the meta tags:

<meta property="og:title" content={title} />
<meta property="og:image" content={getOgImageUrl({ title, excerpt, slug })} />

That's it. The scraper fetches the image URL, your API renders and caches it, and every share of that page shows a custom card.

The Bottom Line

Client-side OG tools are fine for a static site with five pages. The moment you need dynamic cards — per-post, per-user, per-product — you need a server-side pipeline. Whether you build it with satori or buy it from a managed API depends on your time budget and traffic. But the architecture is non-negotiable: GET-based URL, template registry, fast renderer, edge cache, and HMAC signing.

Start with one template and one page type. Measure your click-through rate before and after. When you see the lift, expand to the rest of your site. The first card is the hardest — everything after that is just filling in the template.


Source: DEV Community

My JetBrains Rider Setup for Surviving Live-Coding Demos

Hey lovely readers,

If you've read any of my Public Speaking at Tech Events 101 blog posts, you already know I take demo prep very seriously. What I haven't written about yet is my IDE setup. I spend most of my working hours in JetBrains Rider, and I also spend most of my stage time there. Over the years I built a setup that helps me get through a live demo without fighting my own tools on top of fighting my nerves.

This post is that setup, written down. That way it can help you too if you ever want to challenge the demo gods.

A quick note before we start: I'm writing this as a Rider user, since that's where I live most days. But almost everything here works the same way in WebStorm, IntelliJ IDEA, PyCharm, and the other JetBrains IDEs, since it's mostly the same underlying platform.

Presentation Mode and light theme

The first thing I do before any talk is turn on Presentation Mode. You'll find it under View > Appearance > Enter Presentation Mode. It makes the editor fill the whole screen and it makes the font bigger automatically. That way you don't have to change font sizes by hand right before you walk on stage.

You can also set a fixed zoom level ahead of time. Then it's already right the moment you turn Presentation Mode on, instead of adjusting it in front of a room full of people. Go to File > Settings (or Preferences on macOS), then Appearance & Behavior > Appearance and look for the Presentation Mode settings there.

The second thing I do is switch to light theme. I know, most of us live in dark mode (me included). But dark themes often look washed out under conference lighting and projectors. Light backgrounds are simply easier to read from the back of the room. Your eyes might need a minute to adjust, but your audience will thank you.

Markdown-powered slides with MARP

This one changed how I build talks completely. Instead of switching between PowerPoint and Rider during a demo, I now write my slides in Markdown. I preview them right inside the IDE, using MARP (Markdown Presentation Ecosystem).

Here is the short version of the setup. Add a package.json file next to your presentation file:

{
  "scripts": {
    "marp": "marp index.md -w --html --allow-local-files"
  },
  "devDependencies": {
    "@marp-team/marp-cli": "^4.5.0"
  }
}

Then create an index.md file in the same folder. Write your slides in Markdown, and separate each slide with ---. Run npm install, and Rider will show a small run button next to your script. Run it, and the -w flag keeps watching your Markdown file. It rebuilds the HTML every time you save.

To show the presentation, right click the new HTML file and choose Open In > Browser > Built-in Preview. Now your slides live in a tab right next to your code. You can switch between them using Rider's normal tab shortcuts, instead of switching to a completely different app.

A few things that are worth knowing. Press P while previewing to open a window with your speaker notes, which you can keep on a second screen. If you use the --html flag like in the script above, you can also add things like Mermaid diagrams straight into your slides. Unfortunately I don't get lots of opportunities to add Mermaid Diagrams to demos but I do love them :)

I like this setup because my whole talk, slides and demo code both, lives in one place. That's one less app to manage, and one less thing that can go wrong.

Quick side note if you do JavaScript or Vue talks: I use Slidev for those instead. It's also Markdown powered, but it's built with the JS ecosystem in mind, so it fits that kind of talk a bit better. Same idea, just a different tool depending on the stack I'm presenting.

Switching files and projects quickly

During a demo, the last thing you want is to search through 5 different projects, trying to remember where you put a file. Search Everywhere (press Shift twice) is your best friend here. Type a few letters of a file, class, or action name, and you jump straight to it. No scrolling needed.

Recent Files (View > Recent Files, or Ctrl/Cmd+E) and Recent Locations (View > Recent Locations, or Ctrl/Cmd+Shift+E) are both super useful in addition to Shift + Shift. Recent Files just shows you the files you had open recently. Recent Locations goes a step further and shows you actual code snippets from the places you edited, which is handy if you remember what the code looked like but not which file it was in.

All three of these search options help you move fast between the two or three files a demo actually uses. And if something goes wrong and you need to switch from a working project to a backup project, being able to jump between run configurations or entire projects fast matters just as much as knowing your code.

dotnet run and .http files

Since .NET 10 we can now use single C# files without setting up a full project first. This is great for quick demos. I often skip run configurations completely and just use dotnet run from the terminal. It's fast, it's predictable, and there is less to explain if something looks unfamiliar to the audience.

For live API demos, .http files are one of my favorite Rider features. Instead of switching to an API client and breaking the flow of your talk, you write the request right there in your project:

GET https://localhost:5001/api/dadjoke
Accept: application/json

Click the small run icon next to it, and the response shows up right there. No separate tool, no window switching, no explaining why you suddenly switched apps.

Live templates

The live templates might be the best thing ever for demos. They are one of the best tools for reducing what can go wrong on stage. A live template is a code snippet you can insert with a short name and a press of Tab.

You'll find them under File > Settings (or Preferences on macOS), then Editor > Live Templates. From there you can create a new template group, or add templates to an existing one, each with its own abbreviation, description, and body.

I use these a lot, but especially for two of my talks: Minimal APIs and modern C# features. Both involve a lot of boilerplate. If I had to type every endpoint or every record from scratch during a session, I would be typing the whole time instead of talking to the room.

This is where a naming format helps. Instead of picking random short abbreviations, I group mine by talk topic with a short prefix. api-get, api-post, and api-delete are all Minimal API templates. csx-record and csx-pattern are all modern C# templates. That way I'm not stuck remembering fifteen unrelated abbreviations, I just remember the prefix for the talk I'm giving, and Rider's autocomplete shows me the rest as I type.

Less typing under pressure means fewer mistakes. That's really the whole point.

Shortcuts worth knowing by heart

I'm not going to give you a giant list of every Rider shortcut that exists. That's not useful in the middle of a talk. These are the ones I actually know by heart, the ones that help when your brain isn't at its sharpest:

  • Shift Shift for Search Everywhere
  • Ctrl/Cmd + Shift + F10 (or the run icon) to run the current file or test
  • Shift + F9 to debug
  • Ctrl/Cmd + Alt + L to reformat code, handy if a live edit gets messy

That's the list. You don't need fifty shortcuts. You mostly need these four to get you out of trouble.

That's a wrap!

None of this actually removes the nerves before a talk. I still feel them every single time, and that's completely normal. What this setup does is remove the things you can actually control. That way your nervous energy can go into the talk itself, instead of into fighting your IDE.

I hope this helps you for your upcoming presentation or talk. If you have questions about anything above, feel free to leave a comment or reach out to me on my socials.

See ya!


Source: DEV Community