From juicebox-pack
Applies production Juicebox SDK patterns: singleton client, batch profile search with dedup, error retry for rate limits. For scalable recruiting/SaaS apps.
npx claudepluginhub jeremylongshore/claude-code-plugins-plus-skills --plugin juicebox-packThis skill is limited to using the following tools:
```typescript
Provides Juicebox SDK examples for natural language people search, profile enrichment, and contact data in TypeScript and Python. Useful for recruiting app prototypes.
Evaluates job offers with AI A-F scoring, generates ATS-optimized CV PDFs, scans 45+ company portals, batch-processes listings, and tracks applications in a Go TUI dashboard via Claude Code slash commands.
Guides Next.js Cache Components and Partial Prerendering (PPR): 'use cache' directives, cacheLife(), cacheTag(), revalidateTag() for caching, invalidation, static/dynamic optimization. Auto-activates on cacheComponents: true.
Share bugs, ideas, or general feedback.
let instance: JuiceboxClient | null = null;
export function getClient(): JuiceboxClient {
if (!instance) instance = new JuiceboxClient({ apiKey: process.env.JUICEBOX_API_KEY });
return instance;
}
async function batchSearch(queries: string[]): Promise<Profile[]> {
const seen = new Set<string>();
const all: Profile[] = [];
for (const q of queries) {
const r = await client.search({ query: q, limit: 20 });
for (const p of r.profiles) {
if (!seen.has(p.linkedin_url)) { seen.add(p.linkedin_url); all.push(p); }
}
}
return all;
}
async function safeCall<T>(fn: () => Promise<T>): Promise<T | null> {
try { return await fn(); }
catch (e: any) {
if (e.status === 429) { await new Promise(r => setTimeout(r, 5000)); return fn(); }
return null;
}
}
Apply in juicebox-core-workflow-a.