This skill should be used when the user asks to "tag jobs", "categorize jobs", "update job tags", "assign roles to jobs", "review job classifications", "fix job tagging", or wants to ensure all jobs have proper tags and role/department assignments. Iterates through ALL jobs systematically and suggests appropriate tags based on job title, company, and description.
Systematically review and tag all jobs in the database with appropriate tags and roles/departments.
Run this skill when you need to:
First, get the available tags and roles from the database:
bun -e "
import { db, jobTags, jobRoles } from './src/db';
import { asc } from 'drizzle-orm';
const [tags, roles] = await Promise.all([
db.select().from(jobTags).orderBy(asc(jobTags.label)),
db.select().from(jobRoles).orderBy(asc(jobRoles.label)),
]);
console.log('=== AVAILABLE TAGS ===');
tags.forEach(t => console.log(\` \${t.slug}: \${t.label} (\${t.color || 'no color'})\`));
console.log('\\n=== AVAILABLE ROLES ===');
roles.forEach(r => console.log(\` \${r.slug}: \${r.label}\`));
process.exit(0);
"
Get all jobs that need review:
bun -e "
import { db, jobs } from './src/db';
import { desc } from 'drizzle-orm';
const allJobs = await db.select({
id: jobs.id,
title: jobs.title,
company: jobs.company,
department: jobs.department,
tags: jobs.tags,
description: jobs.description,
}).from(jobs).orderBy(desc(jobs.createdAt));
console.log(\`Found \${allJobs.length} jobs to review\\n\`);
allJobs.forEach((job, i) => {
console.log(\`[\${i+1}] \${job.title} @ \${job.company}\`);
console.log(\` Department: \${job.department || '(none)'}\`);
console.log(\` Tags: \${job.tags?.join(', ') || '(none)'}\`);
console.log('');
});
process.exit(0);
"
For each job, analyze the title, company, and description to determine:
Department/Role (the department field): What function does this role serve?
Tags (the tags array): What characteristics describe this job?
ai, ml, zkp, cryptography, rust, frontend, backend, fullstack, mobiledefi, protocol, infra, gaming, trading, mev, securityentry-level, internship, leadership, managementsolana, monad-ecosystem, berachain-ecosystem, worldresearch, design, bd, marketing, sales, legal, accounting, talentUpdate a single job:
bun -e "
import { db, jobs } from './src/db';
import { eq } from 'drizzle-orm';
const [updated] = await db.update(jobs)
.set({
department: 'Engineering',
tags: ['ai', 'ml', 'research', 'fullstack'],
})
.where(eq(jobs.id, 'JOB_ID_HERE'))
.returning();
console.log('Updated:', updated.title);
process.exit(0);
"
Batch update multiple jobs:
bun -e "
import { db, jobs } from './src/db';
import { eq } from 'drizzle-orm';
const updates = [
{ id: 'job1', department: 'Engineering', tags: ['frontend', 'web3'] },
{ id: 'job2', department: 'Design', tags: ['design', 'product'] },
// Add more...
];
for (const { id, ...data } of updates) {
await db.update(jobs).set(data).where(eq(jobs.id, id));
console.log(\`Updated: \${id}\`);
}
console.log(\`\\nUpdated \${updates.length} jobs\`);
process.exit(0);
"
| Job Title Contains | Department | |-------------------|------------| | Engineer, Developer, SWE, SRE, DevOps | Engineering | | Designer, UX, UI | Design | | Product Manager, PM | Product | | Marketing, Growth, Content | Marketing | | Sales, Account Executive, SDR, BDR | Sales | | BD, Business Development, Partnerships | Business Development | | Research, Researcher, Scientist | Research | | HR, People, Recruiter, Talent | Human Resources | | Legal, Counsel, Compliance | Legal | | Finance, Accountant, Controller | Finance | | Operations, Ops, Office Manager | Operations | | Community, Mod, Ambassador | Community | | DevRel, Developer Advocate | Developer Relations | | Support, Success, Help Desk | Support | | CEO, CTO, CFO, COO, VP, Director, Head | Executive | | Data, Analytics, BI | Data | | Security, Infosec, Pentester | Security |
By Title Keywords:
ai, mlprotocol, defizkp, cryptographyrustfrontendbackendfullstackmobilesecuritytradingmevinfraresearchBy Company/Ecosystem:
monad-ecosystemberachain-ecosystemworldsolanaBy Seniority:
entry-levelinternshipleadership or managementSpecial Tags:
hot - Only for exceptional, high-priority roles (add manually)top - Only for featured positions (add manually)After tagging, verify changes:
bun -e "
import { db, jobs } from './src/db';
import { isNull, or, eq, sql } from 'drizzle-orm';
// Jobs without department
const noDept = await db.select({ count: sql\`count(*)\` })
.from(jobs)
.where(or(isNull(jobs.department), eq(jobs.department, '')));
// Jobs without tags
const noTags = await db.select({ count: sql\`count(*)\` })
.from(jobs)
.where(or(isNull(jobs.tags), eq(sql\`array_length(tags, 1)\`, sql\`0\`)));
console.log(\`Jobs without department: \${noDept[0].count}\`);
console.log(\`Jobs without tags: \${noTags[0].count}\`);
process.exit(0);
"
If a job needs a tag that doesn't exist:
bun -e "
import { db, jobTags } from './src/db';
const [tag] = await db.insert(jobTags).values({
slug: 'new-tag-slug',
label: 'New Tag Label',
color: 'blue', // blue, green, purple, red, amber, etc.
}).returning();
console.log('Created tag:', tag);
process.exit(0);
"
If a department doesn't exist as a role:
bun -e "
import { db, jobRoles } from './src/db';
const [role] = await db.insert(jobRoles).values({
slug: 'new-role-slug',
label: 'New Role Label',
}).returning();
console.log('Created role:', role);
process.exit(0);
"
references/tag-mapping.md - Detailed tag definitions and colorsreferences/role-mapping.md - Department/role definitionsCategory:business