Skip to content
OpenSmartRoute
Skillv1.0.0

juicebox-data-handling

Juicebox data privacy and GDPR. Trigger: "juicebox data privacy", "juicebox gdpr".

by jeremylongshore(0) 0 installs
Free
Sign in to install

Free account. Installing gives you the manifest plus copy-paste snippets.

See reviews

About

Imported from jeremylongshore/tons-of-skills-marketplace (plugins/saas-packs/juicebox-pack/skills/juicebox-data-handling/SKILL.md). Install upstream with npx skills add jeremylongshore/tons-of-skills-marketplace --skill juicebox-data-handling. Copyright stays with the author (MIT).

Juicebox Data Handling

Overview

Juicebox AI processes people datasets for talent intelligence and analysis workflows. Data types include people search results, enriched profile records (employment history, skills, social links), analysis exports, and outreach logs. Profile data often contains personal information governed by GDPR, CCPA, and recruitment privacy regulations. All enrichment results must be handled with consent tracking, purpose limitation, and right-to-deletion support. Contact data requires field-level encryption and strict access controls to prevent unauthorized disclosure.

Data Classification

Data Type Sensitivity Retention Encryption
Search results Low Session only (ephemeral) TLS in transit
Enriched profiles High (PII) Per data policy, max 1 year AES-256 at rest
Contact data (email/phone) High (PII) Until candidate objects or deletion Field-level encryption
Analysis exports Medium 90 days AES-256 at rest
Outreach logs Medium 6 months AES-256 at rest

Data Import

interface JuiceboxProfile {
  id: string; name: string; email?: string; phone?: string;
  company: string; title: string; skills: string[];
  source: string; enrichedAt: string;
}

async function importPeopleDataset(query: string, maxResults = 100): Promise<JuiceboxProfile[]> {
  const profiles: JuiceboxProfile[] = [];
  let offset = 0;
  do {
    const res = await fetch(`https://api.juicebox.ai/v1/search`, {
      method: 'POST',
      headers: { Authorization: `Bearer ${process.env.JUICEBOX_API_KEY}`, 'Content-Type': 'application/json' },
      body: JSON.stringify({ query, limit: 50, offset }),
    });
    const data = await res.json();
    if (!data.results?.length) break;
    for (const p of data.results) {
      if (!p.id || !p.name) throw new Error(`Invalid profile: missing required fields`);
      profiles.push(p);
    }
    offset += 50;
  } while (profiles.length < maxResults);
  return profiles;
}

Data Export

async function exportAnalysisResults(profiles: JuiceboxProfile[], format: 'csv' | 'json') {
  // Strip direct contact info from exports unless explicitly authorized
  const sanitized = profiles.map(({ email, phone, ...rest }) => ({
    ...rest,
    email: email ? '[CONSENT_REQUIRED]' : undefined,
    phone: phone ? '[CONSENT_REQUIRED]' : undefined,
  }));
  if (format === 'csv') {
    const header = Object.keys(sanitized[0]).join(',');
    const rows = sanitized.map(r => Object.values(r).join(','));
    return [header, ...rows].join('\n');
  }
  return JSON.stringify(sanitized, null, 2);
}

Data Validation

function validateProfile(p: JuiceboxProfile): string[] {
  const errors: string[] = [];
  if (!p.id) errors.push('Missing profile ID');
  if (!p.name || p.name.length > 200) errors.push('Invalid or missing name');
  if (p.email && !/^[\w.+-]+@[\w-]+\.[\w.]+$/.test(p.email)) errors.push('Invalid email format');
  if (p.phone && !/^\+?[\d\s()-]{7,20}$/.test(p.phone)) errors.push('Invalid phone format');
  if (!p.source) errors.push('Missing data source attribution');
  if (p.enrichedAt && isNaN(Date.parse(p.enrichedAt))) errors.push('Invalid enrichment timestamp');
  return errors;
}

Compliance

  • GDPR consent tracked per profile: lawful basis recorded (consent, legitimate interest)
  • Right-to-deletion: purge profile, enrichment data, and outreach logs within 30 days of request
  • GDPR data subject access: export all stored data for a candidate on request
  • CCPA opt-out: honor Do Not Sell signals for California residents
  • Purpose limitation: enrichment data used only for stated recruitment/analysis purpose
  • Contact data encrypted at field level with per-tenant keys
  • Audit log for all profile access, export, and deletion events
  • Data minimization: auto-purge enriched profiles older than retention window

Error Handling

Issue Cause Fix
API 401 unauthorized Expired or revoked API key Rotate key in secret manager, update env
Duplicate profiles in import Same person from multiple sources Deduplicate by email hash before storage
GDPR deletion incomplete Outreach logs not purged alongside profile Cascade delete across all related tables
Export contains raw PII Consent flag not checked before export Add consent gate in exportAnalysisResults
Enrichment timeout Upstream data provider slow Implement 10s timeout with retry, fallback to cached

Prerequisites

  • A documented source authority and lawful-use basis, data owner, classification/retention policy, suppression list, approved destination, and synthetic fixture.

Instructions

  1. Inventory fields, source terms, and intended destination before ingestion; quarantine unknown authority, classification, or suppression state.
  2. Run schema, minimization, and suppression validation on bounded synthetic batches, logging only opaque IDs and aggregate counts.
  3. Compare intended source/destination scope with policy before any enrichment or export, defaulting uncertainty to deny.
  4. Submit idempotent staged work only to approved destinations, retain a redacted manifest, and verify deletion at the stated retention boundary.
  5. Stop and escalate rather than weakening suppression, authority, or data-minimization rules.

Output

Return a handling receipt with source authority, classification, destination, policy revision, input/accepted/quarantined counts, suppression result, retention/deletion state, and rollback reference. Exclude identities, contact fields, and enrichment values.

Examples

source=synthetic-prospects; authority=approved; class=internal-test; accepted=96; quarantined=4; suppression=pass; contacts_exported=0; retention=24h; cleanup=verified is a compliant processing result.

Resources

Next Steps

See juicebox-security-basics.

Use it

Copy one of these into your project. Installing also returns the manifest and these snippets.

yaml
targets:
  - https://api.opensmartroute.ai/api/v1/registry/jeremylongshore-tons-of-skills-marketplace-juicebox-data-5d0e3c/manifest   # or paste the manifest below

Manifest

An Open Capability Manifest: the router reads it to know what this does, what it costs and when to pick it.

jeremylongshore-tons-of-skills-marketplace-juicebox-data-5d0e3c.ocm.jsonjson
{
  "ocm": "1",
  "id": "jeremylongshore-tons-of-skills-marketplace-juicebox-data-5d0e3c",
  "kind": "skill",
  "name": "juicebox-data-handling",
  "description": "Juicebox data privacy and GDPR. Trigger: \"juicebox data privacy\", \"juicebox gdpr\".",
  "publisher": "jeremylongshore",
  "version": "1.0.0",
  "capabilities": {
    "domains": [
      "legal"
    ],
    "tags": [
      "skill-md",
      "saas",
      "recruiting",
      "juicebox",
      "skills-sh"
    ],
    "languages": [
      "en"
    ]
  },
  "quality_prior": 0.6,
  "examples": [
    "Juicebox data privacy and GDPR. Trigger: \"juicebox data privacy\", \"juicebox gdpr\"."
  ],
  "primary": false,
  "metadata": {
    "source": {
      "provider": "skills.sh",
      "repository": "https://github.com/jeremylongshore/tons-of-skills-marketplace",
      "path": "plugins/saas-packs/juicebox-pack/skills/juicebox-data-handling/SKILL.md",
      "ref": "HEAD",
      "url": "https://github.com/jeremylongshore/tons-of-skills-marketplace/blob/HEAD/plugins/saas-packs/juicebox-pack/skills/juicebox-data-handling/SKILL.md",
      "key": "jeremylongshore/tons-of-skills-marketplace/plugins/saas-packs/juicebox-pack/skills/juicebox-data-handling/SKILL.md"
    },
    "compatibility": "Designed for Claude Code",
    "allowed_tools": [
      "Read,",
      "Write,",
      "Edit,",
      "Grep"
    ],
    "license": "MIT"
  },
  "instructions": "# Juicebox Data Handling\n\n## Overview\n\nJuicebox AI processes people datasets for talent intelligence and analysis workflows. Data types include people search results, enriched profile records (employment history, skills, social links), analysis exports, and outreach logs. Profile data often contains personal information governed by GDPR, CCPA, and recruitment privacy regulations. All enrichment results must be handled with consent tracking, purpose limitation, and right-to-deletion support. Contact data requires field-level encryption and strict access controls to prevent unauthorized disclosu",
  "cost": {
    "context_tokens": 1522
  }
}

Fetch it by URL: GET /api/v1/registry/jeremylongshore-tons-of-skills-marketplace-juicebox-data-5d0e3c/manifest?version=1.0.0

Reviews

Star ratings from people who tried it. One review per account; edit yours any time.

No reviews yet. Install it, try it, and be the first to rate it.