I Built an AI That Roasts Your Developer Profile
How I used Kestra + Groq to orchestrate a career intelligence pipeline that doesn't sugarcoat anything
Introduction
I recently completed the Kestra workflow orchestration course, and like every developer after finishing a course, I thought: "Cool, now what do I actually build with this?"
The answer came from a very relatable place — I was staring at my GitHub profile, wondering if it looked good to recruiters. Instead of asking a friend (who would lie to me), I decided to build an AI that would be brutally honest. No feelings. No encouragement. Just facts.
So I built the Developer Profile Intelligence Agent — a Kestra-orchestrated pipeline that fetches your GitHub data, runs it through Groq's LLM, and emails you a career report that reads like your most honest mentor had too much coffee.
Spoiler: I scored 42/100 on my own profile. We'll get to that.
What I Learned from the Kestra Course
Before building anything, the course taught me concepts I didn't fully appreciate until I tried to use them:
Workflow orchestration is not the same as scripting. A bash script runs top to bottom and hopes for the best. Kestra gives you parallel execution, retry logic, typed inputs, secret management, and trigger systems — all declaratively in YAML.
Namespaces and flows are Kestra's way of organizing work. Think of namespaces like folders and flows like the actual pipelines inside them.
Triggers are how you start flows automatically — on a schedule, via webhook, or on file detection. This became the trickiest part of my project (more on that later).
Secrets in Kestra are stored encrypted and referenced as {{ secret('MY_SECRET') }} in your YAML — no .env files leaking into git.
Task runners control where your code executes. I learned the hard way that Python scripts need taskRunner: type: io.kestra.plugin.core.runner.Process or they'll fail silently.
The Architecture
The Implementation (Where Things Got Interesting)
Building the happy path took about two hours. Getting the webhook to actually pass user inputs to the flow? That took considerably longer and deserves its own section because I want to save you the pain.
The webhook authentication saga
When you first open Kestra's UI, it prompts you to set up Basic Auth credentials. I set mine and completely forgot about it. Then when my Node.js dashboard tried to trigger flows via the API, every request came back 401 Unauthorized.
The KESTRA_SECURITY_BASIC_AUTH_ENABLED=false environment variable? Doesn't work. Kestra ignores it. The fix is passing credentials in the URL using %40 to URL-encode the @ in the email address:
http://user%40email.com:password@localhost:8080/api/v1/main/...
The trigger inputs saga
Kestra 1.3.16 does not support the inputs: mapping inside a webhook trigger definition, even though some documentation suggests it does. Adding it causes the webhook to silently fail to register — you get a 404 Not Found on every webhook call even though the flow is imported correctly.
The fix: remove the inputs: block from the trigger entirely and use default input values. The webhook fires the flow, the flow uses its defaults, and you extend it from there.
The Docker restart saga
GitHub Codespaces kills long-running processes periodically. Kestra receives a SIGTERM and shuts down gracefully — but your flow disappears from memory. The fix is --restart=always in your Docker run command, combined with a startup script that re-imports the flow via API every time Kestra restarts.
The Roast (I Mean, The Results)
Here's what the AI said about my own profile:
Score: 42/100
"Your profile lacks a personal touch and is not well-maintained. It screams amateur rather than experienced developer."
Specific callouts:
7 out of 17 repositories have no description
GitHub bio doesn't match LinkedIn claims
Zero followers — "invisible to the community"
Generic project names that raise questions
You know what? Fair. All of it was fair. That's the point — a roasting tool that actually makes you better.
The email arrived beautifully formatted with a purple gradient header, structured sections for each category, and enough specific feedback to fill an entire weekend of profile cleanup.
What I'd Build Next
A few things I'd add with more time:
Real LinkedIn scraping instead of manual summary input — the architecture diagram already shows this as a planned parallel task
Slack/Telegram delivery in addition to email
Score tracking over time — run it monthly and see if you're improving
Comparative analysis — how does your profile stack up against top developers in your target role
Key Takeaways
If you're learning Kestra, here's what I'd tell you before you start building:
Always test your webhook registration separately from your flow logic. A 404 on a webhook almost always means the trigger didn't register, not that the URL is wrong.
Secrets work beautifully once set up. The {{ secret('NAME') }} syntax in YAML is clean and the Base64 encoding via environment variables on Docker is reliable.
Parallel tasks are genuinely useful. Fetching GitHub profile and repos simultaneously cut execution time nearly in half.
The Kestra UI is your best debugging tool. The Gantt view, execution logs, and per-task outputs make it easy to see exactly where something went wrong.
Links
GitHub repo: https://github.com/Atharva-026/dev-profile-intelligence
Try it yourself: clone the repo, add your secrets, run
bashstart.sh

