feat: seed Ilia Dobkin AI search profile and keyword set
All checks were successful
CI / skip-ci-check (pull_request) Successful in 5s
CI / docker-ci (pull_request) Successful in 7s
CI / secret-scan (pull_request) Successful in 7s

Adds an AI Engineer profile/resume path and keyword terms for LLM/MCP/RAG role discovery alongside the existing SDET sets.
This commit is contained in:
ilia 2026-07-15 12:55:54 -04:00
parent d3d9130bbf
commit 667bc70b7d
2 changed files with 162 additions and 0 deletions

View File

@ -98,6 +98,44 @@ const ILIA_DOBKIN_US_KEYWORD_TERMS = [
"TN SDET",
];
/** AI engineering / AI enablement — agents, MCP, RAG, evals, local LLM serving. */
const ILIA_DOBKIN_AI_TARGET_ROLES = [
"AI Engineer",
"Senior AI Engineer",
"Staff AI Engineer",
"AI Automation Engineer",
"Applied AI Engineer",
"LLM Engineer",
"Generative AI Engineer",
"GenAI Engineer",
"AI Platform Engineer",
"AI Solutions Engineer",
"AI Enablement Lead",
"AI Enablement Engineer",
"AI Agent Engineer",
"ML Engineer",
"Machine Learning Engineer",
"Prompt Engineer",
"RAG Engineer",
];
const ILIA_DOBKIN_AI_KEYWORD_TERMS = [
...ILIA_DOBKIN_AI_TARGET_ROLES.map((role) => role.toLowerCase()),
"LLM agents",
"MCP engineer",
"LangGraph",
"RAG engineer",
"prompt engineering",
"Ollama",
"AI enablement",
"AI automation remote",
"contract AI engineer",
"GenAI remote",
"LLM evals",
"promptfoo",
"multi-agent",
];
const migrations = [
`CREATE TABLE IF NOT EXISTS jobs (
id TEXT PRIMARY KEY,
@ -1142,6 +1180,105 @@ const migrations = [
'685b0000-0000-4000-8000-000000009901',
'685b0000-0000-4000-8000-000000009902'
)`,
// AI engineering profile — agents, MCP, RAG, evals (paired with same login as Canada/US).
sqlInsertSearchProfileSeed({
id: "685b0000-0000-4000-8000-000000000004",
name: "Ilia Dobkin (AI)",
profile: {
targetRoles: ILIA_DOBKIN_AI_TARGET_ROLES,
experienceLevel: "Senior",
mustHaveSkills: [
"Python",
"LLM",
"RAG",
"MCP",
"Agents",
"FastAPI",
"Prompt engineering",
],
niceToHaveSkills: [
"LangGraph",
"Ollama",
"promptfoo",
"TypeScript",
"Playwright",
"Ansible",
"Docker",
],
dealBreakers: [],
preferredWorkArrangement: ["remote", "hybrid"],
preferredLocations: [
"Toronto",
"Ontario",
"GTA",
"Greater Toronto Area",
"Canada",
"Remote Canada",
"Remote",
],
minimumSalary: "",
industriesToTarget: [
"Software",
"AI / ML",
"Enterprise SaaS",
"FinTech",
"Developer tools",
],
industriesToAvoid: [],
aboutMe:
"Ilia Dobkin (AI) — AI Automation Engineer / LLM agents, MCP, RAG & evals; AI enablement lead experience. Switch to this profile for AI-role discovery (same login as Canada/US). Resume: ilia-dobkin-ai.json.",
basicAuthUser: "ilia,dobkin",
resumeLocalPath: "../data/resumes/ilia-dobkin-ai.json",
},
}),
`INSERT OR IGNORE INTO keyword_sets (id, owner_profile_id, name, terms, is_active, created_at, updated_at)
VALUES (
'ilia-dobkin-ai-keyword-set',
'685b0000-0000-4000-8000-000000000004',
'AI Engineer',
'${sqlJsonLiteral(ILIA_DOBKIN_AI_KEYWORD_TERMS)}',
1,
datetime('now'),
datetime('now')
)`,
`UPDATE search_profiles
SET data = json_set(
json_set(
json_set(data, '$.basicAuthUser', 'ilia,dobkin'),
'$.resumeLocalPath',
'../data/resumes/ilia-dobkin-ai.json'
),
'$.aboutMe',
'Ilia Dobkin (AI) — AI Automation Engineer / LLM agents, MCP, RAG & evals; AI enablement lead experience. Switch to this profile for AI-role discovery (same login as Canada/US). Resume: ilia-dobkin-ai.json.'
),
updated_at = datetime('now')
WHERE id = '685b0000-0000-4000-8000-000000000004'`,
`UPDATE search_profiles
SET data = json_set(data, '$.targetRoles', '${sqlJsonLiteral(ILIA_DOBKIN_AI_TARGET_ROLES)}'),
updated_at = datetime('now')
WHERE id = '685b0000-0000-4000-8000-000000000004'`,
`UPDATE keyword_sets
SET terms = '${sqlJsonLiteral(ILIA_DOBKIN_AI_KEYWORD_TERMS)}',
name = 'AI Engineer',
is_active = 1,
updated_at = datetime('now')
WHERE id = 'ilia-dobkin-ai-keyword-set'`,
// Also add AI Engineer as an inactive keyword set on the Canada SDET profile
// (same pattern as Caseware / Lead) so it can be flipped without switching profiles.
`INSERT OR IGNORE INTO keyword_sets (id, owner_profile_id, name, terms, is_active, created_at, updated_at)
VALUES (
'ilia-dobkin-ai',
'685b0000-0000-4000-8000-000000000001',
'AI Engineer',
'${sqlJsonLiteral(ILIA_DOBKIN_AI_KEYWORD_TERMS)}',
0,
datetime('now'),
datetime('now')
)`,
`UPDATE keyword_sets
SET terms = '${sqlJsonLiteral(ILIA_DOBKIN_AI_KEYWORD_TERMS)}',
updated_at = datetime('now')
WHERE id = 'ilia-dobkin-ai'`,
];
console.log("🔧 Running database migrations...");

View File

@ -0,0 +1,25 @@
#
# Jobber cron env — dobkin (AI Engineer)
# Copy to /root/.jobber-cron-dobkin-ai.env (chmod 600)
#
# Used by: scripts/jobber-pipeline-telegram.sh
# Activate profile "Ilia Dobkin (AI)" in the Jobs UI (or via API) before cron,
# or pass the owner profile in your pipeline wrapper if supported.
#
# JobOps base URL (where the app is reachable from the cron host)
JOBOPS_URL=http://127.0.0.1:3005
# Optional: limit number of jobs linked in Telegram message
JOB_TELEGRAM_MAX_JOBS=25
# Optional: comma-separated sources to run (leave empty to use server defaults)
# JOBBER_PIPELINE_SOURCES=adzuna,gradcracker,ukvisajobs
# App-level Basic Auth (enables per-user separation when set on the server)
BASIC_AUTH_USER=dobkin
BASIC_AUTH_PASSWORD=CHANGEME
# Telegram bot + chat destination
TELEGRAM_BOT_TOKEN=CHANGEME
TELEGRAM_CHAT_ID=CHANGEME