PageSourceSearch

https://www.opentrain.ai/about/

html opentrain.ai collected 2026-10-01 00:22:47 UTC 132,865 bytes, 1,128 lines download raw bytes

1<!DOCTYPE html><html lang="en"> <head><!-- Global Metadata --><meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1"> <!-- Brand font preloads. Required pair for `font-display: optional` on the Geist
2     display/text face: without this the request cannot start until scalar.css is
3     fetched, parsed and the face matched, which is past optional's ~100ms block
4     period, so the face never paints. Mirrors the font preloads in layouts/Layout.astro. --> <link rel="preload" href="/fonts/gyByhwUxId8gMEwcGFU-3.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/fonts/or3nQ6H-1_WfwkMZI_qYFrcdmg-1.woff2" as="font" type="font/woff2" crossorigin> <meta name="ahrefs-site-verification" content="829fb945ed2a40d4dad32c8964743b72dc96b5f533a0a9f960d149fd06ad2b8a"> <meta name="robots" content="index,follow"> <meta name="keywords" content="AI training, data labeling, RLHF, LLM evaluation, AI trainers, data labelers, annotation, red teaming, domain experts, AI talent marketplace, human data, preference data, supervised fine-tuning, managed service, OpenTrain"> <meta name="author" content="OpenTrain AI"> <meta name="creator" content="OpenTrain AI"> <meta name="publisher" content="OpenTrain AI"> <!-- Theme Script --> 
4<script>
5(() => {
6  const storageKey = "starlight-theme";
7  const dayStartHour = 7;
8  const dayEndHour = 19;
9  const forcedTheme = null;
10  let savedTheme = null;
11
12  try {
13    savedTheme = localStorage.getItem(storageKey);
14  } catch {
15    savedTheme = null;
16  }
17
18  const hour = new Date().getHours();
19  const automaticTheme = hour >= dayStartHour && hour < dayEndHour ? 'light' : 'dark';
20  const initialTheme = forcedTheme === 'light' || forcedTheme === 'dark'
21    ? forcedTheme
22    : savedTheme === 'light' || savedTheme === 'dark'
23      ? savedTheme
24      : automaticTheme;
25
26  document.documentElement.classList.toggle('dark', initialTheme === 'dark');
27})();
28</script>
28 <!-- Favicon --> <link rel="icon" type="image/png" sizes="96x96" href="/images/favicon.png"><link rel="icon" type="image/png" sizes="96x96" href="/images/favicon.png"><link rel="icon" href="/images/favicon.png"> <link rel="apple-touch-icon" sizes="180x180" href="/images/favicon.png"> <link rel="shortcut icon" href="/images/favicon.png"> <link rel="sitemap" href="/sitemap-index.xml"> <meta name="generator" content="Astro v7.3.5"> <!-- Canonical URL --> <link rel="canonical" href="https://www.opentrain.ai/about/"> <!-- Primary Meta Tags --> <title>About OpenTrain AI</title> <meta name="title" content="About OpenTrain AI"> <meta name="description" content="Learn how OpenTrain AI is building the open platform for AI training, data labeling, and evaluation with vetted experts and transparent pricing."> <!-- Open Graph / Facebook --> <meta property="og:type" content="website"> <meta property="og:url" content="https://www.opentrain.ai/about/"> <meta property="og:site_name" content="OpenTrain AI"> <meta property="og:title" content="About OpenTrain AI"> <meta property="og:description" content="Learn how OpenTrain AI is building the open platform for AI training, data labeling, and evaluation with vetted experts and transparent pricing."> <meta property="og:image" content="https://www.opentrain.ai/images/og/opentrain-default-talent-layer.png"> <meta property="og:image:width" content="1200"> <meta property="og:image:height" content="630"> <meta property="og:image:alt" content="OpenTrain AI | Open talent network for AI training and data labeling"> <!-- Twitter --> <meta name="twitter:card" content="summary_large_image"> <meta name="twitter:url" content="https://www.opentrain.ai/about/"> <meta name="twitter:title" content="About OpenTrain AI"> <meta name="twitter:description" content="Learn how OpenTrain AI is building the open platform for AI training, data labeling, and evaluation with vetted experts and transparent pricing."> <meta name="twitter:image" content="https://www.opentrain.ai/images/og/opentrain-default-talent-layer.png"> <meta name="twitter:creator" content="@opentrainai"> 
28<script>
29  (() => {
30    if (window.__opentrainPostHogLoadStarted) return;
31    window.__opentrainPostHogLoadStarted = true;
32
33    const SOCIAL_HOSTS = new Set([
34      "x.com",
35      "twitter.com",
36      "www.linkedin.com",
37      "linkedin.com"
38    ]);
39
40    const CTA_TEXT = /\b(post a job|get a quote|create account|sign up|try opentrain|join now|join free|list free|list your company|hire freelancers|managed service|see pricing|view pricing|start hiring|become a freelancer)\b/i;
41    const APP_HOST = "app.opentrain.ai";
42
43    const cleanText = (value) => value.replace(/\s+/g, " ").trim().slice(0, 120);
44    const isOpenTrainHost = (host) => host === "opentrain.ai" || host.endsWith(".opentrain.ai");
45
46    const getUtmProperties = (url) => {
47      const params = url.searchParams;
48      return {
49        utm_source: params.get("utm_source") || undefined,
50        utm_medium: params.get("utm_medium") || undefined,
51        utm_campaign: params.get("utm_campaign") || undefined,
52        utm_content: params.get("utm_content") || undefined,
53        utm_term: params.get("utm_term") || undefined
54      };
55    };
56
57    const getRegion = (element) => {
58      const region = element.closest("header, footer, nav, main, section, article, aside");
59      if (!region) return "unknown";
60      return region.tagName.toLowerCase();
61    };
62
63    const getAppIntent = (url, text) => {
64      const key = url.searchParams.get("key");
65      const q = url.searchParams.get("q");
66      if (key === "signup" || /\b(sign up|create account|post a job)\b/i.test(text)) return "signup";
67      if (key === "login" || /\b(log in|login)\b/i.test(text)) return "login";
68      if (q === "hire" || /\b(hire|post a job)\b/i.test(text)) return "hire";
69      return "app_launch";
70    };
71
72    const capture = (eventName, properties) => {
73      if (!window.posthog || typeof window.posthog.capture !== "function") return;
74      window.posthog.capture(eventName, properties);
75    };
76
77    // Consent. The Probo banner writes `probo_consent` as URL-encoded JSON
78    // ({ action, data: { <category slug>: boolean } }) and fires probo-ready /
79    // probo-consent. Persistence is allowed only for the analytics category.
80    let consentMode = null; // "OPT_IN" | "OPT_OUT" | null (from probo-ready)
81    let gpcApplied = false;
82    let proboReady = false;
83    let proboWaiters = [];
84
85    const readProboAnalyticsConsent = () => {
86      try {
87        const pair = document.cookie.split("; ").find((c) => c.startsWith("probo_consent="));
88        if (!pair) return null;
89        const parsed = JSON.parse(decodeURIComponent(pair.slice("probo_consent=".length)));
90        if (!parsed || typeof parsed !== "object") return null;
91        const categories = parsed.data && typeof parsed.data === "object" ? parsed.data : parsed;
92        const analytics = Object.entries(categories).find(([slug]) => /analytic|statistic/i.test(slug));
93        if (analytics) return Boolean(analytics[1]);
94        if (parsed.action === "ACCEPT_ALL") return true;
95        if (parsed.action === "REJECT_ALL" || parsed.action === "GPC") return false;
96        // A decision exists but has no analytics category: treat as denied.
97        return false;
98      } catch {
99        return null;
100      }
101    };
102
103    // true = persist, false = memory only, null = the banner has not decided yet.
104    const persistenceAllowed = () => {
105      // GPC is an explicit browser signal and must override any older consent
106      // cookie that may have allowed analytics on an earlier visit.
107      if (gpcApplied || navigator.globalPrivacyControl === true) return false;
108      const fromCookie = readProboAnalyticsConsent();
109      if (fromCookie !== null) return fromCookie;
110      if (consentMode === "OPT_OUT") return true;
111      if (consentMode === "OPT_IN") return false;
112      return null;
113    };
114
115    // Shared consent signal for app.opentrain.ai. `probo_consent` is host-only,
116    // so the app cannot read it. The analytics decision is mirrored into a
117    // parent-domain cookie with the banner's lifetime: "allowed" only for an
118    // explicit analytics grant without GPC, "denied" for a rejection, a later
119    // withdrawal or GPC. The value is one of those two words, never an id.
120    const SHARED_CONSENT = "opentrain_analytics_consent";
121    const SHARED_CONSENT_ATTRIBUTES = "; Domain=.opentrain.ai; Path=/; Secure; SameSite=Lax";
122    let consentExpiryDays = null;
123
124    const sharedConsentValue = () => {
125      if (gpcApplied || navigator.globalPrivacyControl === true) return "denied";
126      const decided = readProboAnalyticsConsent();
127      if (decided === null) return null;
128      return decided ? "allowed" : "denied";
129    };
130
131    // force: a banner decision just rewrote probo_consent, so restart the
132    // lifetime too. Otherwise write only when the signal is missing or stale.
133    const mirrorConsent = (force) => {
134      if (!isOpenTrainHost(window.location.hostname || "")) return;
135      const value = sharedConsentValue();
136      const pair = document.cookie.split("; ").find((c) => c.startsWith(SHARED_CONSENT + "="));
137      const current = pair ? pair.slice(SHARED_CONSENT.length + 1) : null;
138      if (value === null) {
139        if (current !== null) document.cookie = SHARED_CONSENT + "=" + SHARED_CONSENT_ATTRIBUTES + "; Max-Age=0";
140        return;
141      }
142      if (!force && value === current) return;
143      const lifetime = consentExpiryDays ? "; Max-Age=" + Math.round(consentExpiryDays * 86400) : "";
144      document.cookie = SHARED_CONSENT + "=" + value + SHARED_CONSENT_ATTRIBUTES + lifetime;
145    };
146
147    const PERSISTENT = {
148      persistence: "localStorage+cookie",
149      cross_subdomain_cookie: true,
150      cookie_domain: ".opentrain.ai"
151    };
152    const MEMORY = { persistence: "memory" };
153    let persistent = false;
154
155    // Job-page labels (ids and channel labels only, never visitor data). They
156    // are cleared on every other page so persistence never carries a job's
157    // labels onto a later page.
158    const JOB_PROPERTY_KEYS = [
159      "page_type", "job_id", "partner", "ch", "sub",
160      "utm_source", "utm_medium", "utm_campaign", "utm_content", "utm_term"
161    ];
162    const TOUCH_KEYS = ["ch", "sub", "job_id", "utm_source", "utm_medium", "utm_campaign", "utm_content", "utm_term"];
163    const LABEL = /^[a-zA-Z0-9._-]{1,120}$/;
164
165    const readJobProperties = () => {
166      const ctx = window.__otJobAnalytics;
167      if (!ctx || typeof ctx !== "object" || typeof ctx.job_id !== "string" || !LABEL.test(ctx.job_id)) return null;
168      const props = { page_type: "job_detail", job_id: ctx.job_id };
169      ["partner", "ch", "sub"].forEach((key) => {
170        if (typeof ctx[key] === "string" && LABEL.test(ctx[key])) props[key] = ctx[key];
171      });
172      // UTM values must be plain labels too: free text or an address is dropped.
173      const utm = getUtmProperties(new URL(window.location.href));
174      Object.keys(utm).forEach((key) => {
175        if (typeof utm[key] === "string" && LABEL.test(utm[key])) props[key] = utm[key];
176      });
177      return props;
178    };
179
180    const registerJobProperties = (ph) => {
181      const props = readJobProperties();
182      JOB_PROPERTY_KEYS.forEach((key) => {
183        if (!props || !(key in props)) ph.unregister(key);
184      });
185      if (props) ph.register(props);
186    };
187
188    // First-touch ($set_once) and last-touch ($set) labels on the person. Only
189    // with persistence: in memory mode every page load is a new anonymous id,
190    // so a person profile per page view would be noise.
191    const setJobPersonProperties = (ph) => {
192      const props = readJobProperties();
193      if (!props || !persistent || typeof ph.setPersonProperties !== "function") return;
194      const now = new Date().toISOString();
195      const setOnce = { first_seen_at: now };
196      const set = { last_seen_at: now };
197      TOUCH_KEYS.forEach((key) => {
198        setOnce["first_" + key] = props[key] || null;
199        set["last_" + key] = props[key] || null;
200      });
201      ph.setPersonProperties(set, setOnce);
202    };
203
204    const applyConsent = () => {
205      if (!window.__opentrainPostHogInitialized || !window.posthog) return;
206      const allowed = persistenceAllowed() === true;
207      if (allowed === persistent) return;
208      persistent = allowed;
209      window.posthog.set_config(allowed ? PERSISTENT : MEMORY);
210      window.posthog.register({ analytics_consent: persistent ? "granted" : "memory" });
211      if (allowed) setJobPersonProperties(window.posthog);
212    };
213
214    document.addEventListener("probo-ready", (e) => {
215      const detail = e && e.detail;
216      const mode = detail && detail.config && detail.config.consent_mode;
217      consentMode = mode === "OPT_IN" || mode === "OPT_OUT" ? mode : null;
218      gpcApplied = Boolean(detail && detail.gpcApplied);
219      const days = detail && detail.config && detail.config.consent_expiry_days;
220      consentExpiryDays = typeof days === "number" && days > 0 ? days : null;
221      proboReady = true;
222      const waiters = proboWaiters;
223      proboWaiters = [];
224      waiters.forEach((run) => run());
225      applyConsent();
226      mirrorConsent(false);
227    });
228    document.addEventListener("probo-consent", () => {
229      // The SDK writes its cookie in the same handler; read it on the next tick.
230      window.setTimeout(() => {
231        applyConsent();
232        mirrorConsent(true);
233      }, 0);
234    });
235
236    // Init waits (briefly) for the banner so the persistence mode is right at
237    // init; if the banner has not answered by then, start in memory mode.
238    const whenConsentKnown = (run) => {
239      if (proboReady || persistenceAllowed() !== null) {
240        run();
241        return;
242      }
243      let done = false;
244      const once = () => {
245        if (done) return;
246        done = true;
247        run();
248      };
249      proboWaiters.push(once);
250      window.setTimeout(once, 3000);
251    };
252
253    // apply_click: one event per click on an Apply control, sent by beacon so
254    // it survives the navigation that follows. Clicks before PostHog has
255    // started are held for this page and sent once it loads.
256    const APPLY_METHODS = new Set([
257      "apply_button", "google", "apple", "email", "email_signin", "partner_handoff", "internal_handoff"
258    ]);
259    const pendingApplyClicks = [];
260    const flushPendingApplyClicks = (ph) => {
261      pendingApplyClicks.splice(0).forEach(({ properties, resolve }) => {
262        if (ph) sendApplyClick(properties, ph);
263        resolve();
264      });
265    };
266    const cleanDestination = (value) => {
267      if (typeof value !== "string") return undefined;
268      if (/^[a-z_]{1,40}$/.test(value)) return value;
269      try {
270        const url = new URL(value, window.location.href);
271        return url.origin + url.pathname;
272      } catch {
273        return undefined;
274      }
275    };
276    const sendApplyClick = (properties, ph) => {
277      const target = ph || window.posthog;
278      if (!target || typeof target.capture !== "function") return;
279      target.capture("apply_click", { ...(readJobProperties() || {}), ...properties }, { transport: "sendBeacon" });
280    };
281    window.__otAnalytics = {
282      applyClick: (method, destination) => {
283        if (!APPLY_METHODS.has(method)) return Promise.resolve();
284        const properties = { apply_method: method, destination: cleanDestination(destination) };
285        if (window.__opentrainPostHogInitialized) {
286          sendApplyClick(properties);
287          return Promise.resolve();
288        }
289        const result = new Promise((resolve) => {
290          if (pendingApplyClicks.length < 10) {
291            pendingApplyClicks.push({ properties, resolve });
292          } else {
293            resolve();
294          }
295          startPostHog();
296        });
297        // Do not hold an Apply navigation forever if the analytics config is
298        // unavailable. The queued click is still sent when the SDK loads.
299        return Promise.race([result, new Promise((resolve) => window.setTimeout(resolve, 1500))]);
300      }
301    };
302
303    const installClickTracking = () => {
304      document.addEventListener("click", (event) => {
305        const element = event.target instanceof Element
306          ? event.target.closest("a, button, [role='button']")
307          : null;
308        if (!element) return;
309
310        const href = element instanceof HTMLAnchorElement
311          ? element.href
312          : element.getAttribute("data-analytics-href");
313        const text = cleanText(element.getAttribute("aria-label") || element.textContent || "");
314        const currentUrl = new URL(window.location.href);
315        const linkUrl = href ? new URL(href, window.location.href) : null;
316        const baseProperties = {
317          page_url: currentUrl.href,
318          page_path: currentUrl.pathname,
319          link_url: linkUrl?.href,
320          link_host: linkUrl?.hostname,
321          link_path: linkUrl?.pathname,
322          link_text: text || undefined,
323          link_target: element.getAttribute("target") || undefined,
324          click_region: getRegion(element),
325          ...getUtmProperties(currentUrl)
326        };
327
328        const explicitCta = element.getAttribute("data-analytics-cta");
329        const isCta = explicitCta === "true" || CTA_TEXT.test(text) || (linkUrl ? CTA_TEXT.test(linkUrl.pathname) : false);
330        if (isCta) {
331          capture("marketing_cta_click", {
332            ...baseProperties,
333            cta_label: text || explicitCta || undefined
334          });
335        }
336
337        if (!linkUrl) return;
338
339        if (linkUrl.hostname === APP_HOST) {
340          capture("marketing_app_click", {
341            ...baseProperties,
342            app_intent: getAppIntent(linkUrl, text)
343          });
344        }
345
346        if (SOCIAL_HOSTS.has(linkUrl.hostname)) {
347          capture("marketing_social_click", {
348            ...baseProperties,
349            social_platform: linkUrl.hostname.includes("linkedin") ? "linkedin" : "x"
350          });
351        }
352
353        if (linkUrl.hostname !== window.location.hostname && !isOpenTrainHost(linkUrl.hostname)) {
354          capture("marketing_outbound_click", baseProperties);
355        }
356      }, { capture: true });
357    };
358
359    const installFormTracking = () => {
360      document.addEventListener("submit", (event) => {
361        const form = event.target instanceof HTMLFormElement ? event.target : null;
362        if (!form) return;
363
364        const currentUrl = new URL(window.location.href);
365        const formName =
366          form.getAttribute("data-analytics-form") ||
367          form.getAttribute("name") ||
368          form.id ||
369          "unnamed_form";
370        const formAction = form.getAttribute("action") || undefined;
371
372        capture("marketing_form_submit", {
373          form_name: formName,
374          form_action: formAction,
375          page_url: currentUrl.href,
376          page_path: currentUrl.pathname,
377          ...getUtmProperties(currentUrl)
378        });
379      }, { capture: true });
380    };
381
382    // Contact-form field names. A submit before the form hydrated used to put
383    // them in the page URL as a query string, so strip them from every
384    // URL-valued property before an event leaves the browser.
385    const PERSONAL_QUERY_KEYS = new Set(["name", "email", "phone", "company", "message"]);
386    const stripPersonalQuery = (value) => {
387      if (typeof value !== "string" || !value.includes("?") || !/^(https?:\/\/|\/)/i.test(value)) return value;
388      try {
389        const url = new URL(value, window.location.href);
390        const keys = Array.from(url.searchParams.keys()).filter((key) => PERSONAL_QUERY_KEYS.has(key.toLowerCase()));
391        if (!keys.length) return value;
392        keys.forEach((key) => url.searchParams.delete(key));
393        return /^https?:/i.test(value) ? url.href : url.pathname + url.search + url.hash;
394      } catch {
395        return value;
396      }
397    };
398    const stripPersonalQueries = (props) => {
399      if (!props || typeof props !== "object") return;
400      Object.keys(props).forEach((key) => {
401        props[key] = stripPersonalQuery(props[key]);
402      });
403    };
404    // Covers $current_url, $referrer, $pathname, $session_entry_*, page_url,
405    // link_url and the $set / $set_once person properties ($initial_*).
406    const sanitizeEvent = (event) => {
407      if (!event) return event;
408      [event.properties, event.$set, event.$set_once].forEach(stripPersonalQueries);
409      if (event.properties) [event.properties.$set, event.properties.$set_once].forEach(stripPersonalQueries);
410      return event;
411    };
412
413    const initPostHog = ({ projectKey, apiHost }) => {
414      if (!projectKey || !apiHost || !window.posthog || window.__opentrainPostHogInitialized) return;
415
416      // We never call identify() and never read form field values.
417      // Persistence is cookieless ("memory") unless the visitor's banner
418      // choice allows analytics storage; see persistenceAllowed() above.
419      // Note: this 
419<script> ships verbatim to the public HTML. Do not
420      // reference internal tracker ids or other private identifiers in
421      // inline-script comments — keep that context in PR descriptions
422      // or Astro frontmatter (which is stripped before render).
423      persistent = persistenceAllowed() === true;
424      window.posthog.init(projectKey, {
425        api_host: apiHost,
426        defaults: "2026-01-30",
427        capture_pageview: "history_change",
428        capture_performance: false,
429        autocapture: false,
430        ...(persistent ? PERSISTENT : MEMORY),
431        disable_session_recording: true,
432        disable_surveys: true,
433        disable_web_experiments: true,
434        disable_external_dependency_loading: true,
435        advanced_disable_decide: true,
436        advanced_disable_feature_flags: true,
437        before_send: sanitizeEvent,
438        // Runs before the SDK sends the initial $pageview, so job labels
439        // reach it as super properties.
440        loaded: (ph) => {
441          registerJobProperties(ph);
442          ph.register({ analytics_consent: persistent ? "granted" : "memory" });
443          setJobPersonProperties(ph);
444          flushPendingApplyClicks(ph);
445        }
446      });
447
448      installClickTracking();
449      installFormTracking();
450      window.__opentrainPostHogInitialized = true;
451      // The banner may have answered while the SDK was loading.
452      applyConsent();
453    };
454
455    const loadPostHog = (apiHost) => {
456      !function(t,e){var o,n,p,r;e.__SV||(window.posthog=e,e._i=[],e.init=function(i,s,a){function g(t,e){var o=e.split(".");2==o.length&&(t=t[o[0]],e=o[1]),t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}}(p=t.createElement("script")).type="text/javascript",p.crossOrigin="anonymous",p.async=!0,p.src=s.api_host.replace(".i.posthog.com","-assets.i.posthog.com")+"/static/array.js",(r=t.getElementsByTagName("script")[0]).parentNode.insertBefore(p,r);var u=e;for(void 0!==a?u=e[a]=[]:a="posthog",u.people=u.people||[],u.toString=function(t){var e="posthog";return"posthog"!==a&&(e+="."+a),t||(e+=" (stub)"),e},u.people.toString=function(){return u.toString(1)+".people (stub)"},o="init capture register register_once register_for_session unregister unregister_for_session getFeatureFlag getFeatureFlagPayload isFeatureEnabled reloadFeatureFlags updateEarlyAccessFeatureEnrollment getEarlyAccessFeatures on onFeatureFlags onSessionId getSurveys getActiveMatchingSurveys renderSurvey canRenderSurvey getNextSurveyStep identify setPersonProperties group resetGroups setPersonPropertiesForFlags resetPersonPropertiesForFlags setGroupPropertiesForFlags resetGroupPropertiesForFlags reset get_distinct_id getGroups get_session_id get_session_replay_url alias set_config startSessionRecording stopSessionRecording sessionRecordingStarted captureException loadToolbar get_property getSessionProperty createPersonProfile opt_in_capturing opt_out_capturing has_opted_in_capturing has_opted_out_capturing clear_opt_in_out_capturing debug".split(" "),n=0;n<o.length;n++)g(u,o[n]);e._i.push([i,s,a])},e.__SV=1)}(document,window.posthog||[]);
457    };
458
459    let posthogStarted = false;
460    let posthogStartPromise;
461    const startPostHog = () => {
462      if (posthogStartPromise) return posthogStartPromise;
463      posthogStarted = true;
464      posthogStartPromise = fetch("/api/posthog-config.json", { credentials: "same-origin" })
465        .then((response) => response.ok ? response.json() : null)
466        .then((config) => {
467          if (!config?.enabled || !config.projectKey || !config.apiHost) {
468            flushPendingApplyClicks();
469            return;
470          }
471          whenConsentKnown(() => {
472            loadPostHog(config.apiHost);
473            initPostHog(config);
474          });
475        })
476        .catch(() => flushPendingApplyClicks());
477      return posthogStartPromise;
478    };
479
480    // Defer the PostHog config fetch + array.js load until after the first
481    // render window (or the user starts interacting). requestIdleCallback can
482    // fire before mobile LCP on quiet pages, so add a short post-load delay
483    // before waiting for idle.
484    const scheduleIdle = () => {
485      window.setTimeout(() => {
486        if ("requestIdleCallback" in window) {
487          window.requestIdleCallback(startPostHog, { timeout: 2500 });
488        } else {
489          window.setTimeout(startPostHog, 1500);
490        }
491      }, 4500);
492    };
493
494    const interactionEvents = ["pointerdown", "keydown", "touchstart"];
495    const onInteraction = () => {
496      interactionEvents.forEach((evt) =>
497        window.removeEventListener(evt, onInteraction, { capture: true })
498      );
499      startPostHog();
500    };
501    interactionEvents.forEach((evt) =>
502      window.addEventListener(evt, onInteraction, { capture: true, passive: true, once: true })
503    );
504
505    if (document.readyState === "complete") {
506      scheduleIdle();
507    } else {
508      window.addEventListener("load", scheduleIdle, { once: true });
509    }
510  })();
511</script>
511 
511<script>
512  (() => {
513    if (window.__otAdsLoadStarted) return;
514    window.__otAdsLoadStarted = true;
515
516    const queue = [];
517    let config = null;
518    let loaded = false;
519    let allowed = null; // null = undecided, true/false = decided
520    let consentMode = null; // "OPT_IN" | "OPT_OUT" | null (from probo-ready)
521
522    const readProboConsent = () => {
523      try {
524        const pair = document.cookie.split("; ").find((c) => c.startsWith("probo_consent="));
525        if (!pair) return null;
526        const parsed = JSON.parse(decodeURIComponent(pair.slice("probo_consent=".length)));
527        if (!parsed || typeof parsed !== "object") return null;
528        // Probo stores the per-category decision under `data`
529        // ({ bid, v, vid, action, data: { necessary, analytics, advertising, ... } });
530        // older/flat shapes are read the same way.
531        const categories = parsed.data && typeof parsed.data === "object" ? parsed.data : parsed;
532        const ad = Object.entries(categories).find(([slug]) => /advert|marketing|ads/i.test(slug));
533        if (ad) return Boolean(ad[1]);
534        if (parsed.action === "ACCEPT_ALL") return true;
535        if (parsed.action === "REJECT_ALL") return false;
536        // A decision exists but has no advertising category: treat as denied.
537        return false;
538      } catch {
539        return null;
540      }
541    };
542
543    const decide = () => {
544      const fromCookie = readProboConsent();
545      if (fromCookie !== null) return fromCookie;
546      if (consentMode === "OPT_OUT") return true;
547      return null;
548    };
549
550    const loadScript = (src, onload) => {
551      const s = document.createElement("script");
552      s.async = true;
553      s.src = src;
554      if (onload) s.onload = onload;
555      document.head.appendChild(s);
556    };
557
558    const loadTags = () => {
559      if (loaded || !config || !config.enabled) return;
560      loaded = true;
561      if (config.linkedin) {
562        window._linkedin_partner_id = config.linkedin.partnerId;
563        window._linkedin_data_partner_ids = window._linkedin_data_partner_ids || [];
564        window._linkedin_data_partner_ids.push(config.linkedin.partnerId);
565        window.lintrk = window.lintrk || function () { (window.lintrk.q = window.lintrk.q || []).push(arguments); };
566        loadScript("https://snap.licdn.com/li.lms-analytics/insight.min.js");
567      }
568      if (config.reddit) {
569        window.rdt = window.rdt || function () { (window.rdt.callQueue = window.rdt.callQueue || []).push(arguments); };
570        window.rdt.sendEvent = window.rdt.sendEvent || window.rdt;
571        loadScript("https://www.redditstatic.com/ads/pixel.js");
572        window.rdt("init", config.reddit.pixelId);
573        window.rdt("track", "PageVisit");
574      }
575      if (config.google) {
576        window.dataLayer = window.dataLayer || [];
577        window.gtag = window.gtag || function () { window.dataLayer.push(arguments); };
578        loadScript("https://www.googletagmanager.com/gtag/js?id=" + encodeURIComponent(config.google.adsId));
579        window.gtag("js", new Date());
580        window.gtag("config", config.google.adsId, { allow_enhanced_conversions: false });
581      }
582      if (config.meta) {
583        if (!window.fbq) {
584          const n = (window.fbq = function () { n.callMethod ? n.callMethod.apply(n, arguments) : n.queue.push(arguments); });
585          n.push = n; n.loaded = true; n.version = "2.0"; n.queue = [];
586          loadScript("https://connect.facebook.net/en_US/fbevents.js");
587        }
588        // Automatic Advanced Matching off: job pages have the express-apply
589        // email field, and no email, name or phone may reach Meta.
590        window.fbq("set", "autoConfig", false, config.meta.pixelId);
591        window.fbq("init", config.meta.pixelId);
592        window.fbq("track", "PageView");
593      }
594    };
595
596    const send = (event, props) => {
597      if (!config) return;
598      const isSignup = event === "signup";
599      if (config.linkedin) {
600        const id = isSignup ? config.linkedin.conversions.signup : config.linkedin.conversions.referralClick;
601        if (id && window.lintrk) window.lintrk("track", { conversion_id: Number(id) || id });
602      }
603      if (config.reddit && window.rdt) {
604        window.rdt("track", isSignup ? "SignUp" : "Lead", { customEventName: isSignup ? undefined : "referral_click" });
605      }
606      if (config.google) {
607        const label = isSignup ? config.google.conversions.signup : config.google.conversions.referralClick;
608        const params = { send_to: config.google.adsId + "/" + label };
609        // The app's shared event id, so Google de-duplicates against the server upload.
610        if (props.eventId) params.transaction_id = props.eventId;
611        if (label && window.gtag) window.gtag("event", "conversion", params);
612      }
613      if (config.meta && window.fbq) {
614        const name = isSignup ? "CompleteRegistration" : "Lead";
615        // Same id as the Conversions API event, so Meta de-duplicates the pair.
616        if (props.eventId) window.fbq("track", name, { content_ids: [props.jobId] }, { eventID: props.eventId });
617        else window.fbq("track", name, { content_ids: [props.jobId] });
618      }
619    };
620
621    const flush = () => {
622      if (allowed !== true) return;
623      loadTags();
624      while (queue.length) {
625        const item = queue.shift();
626        send(item.event, item.props);
627      }
628    };
629
630    const reevaluate = () => {
631      const next = decide();
632      if (next === null) return;
633      allowed = next;
634      if (allowed) flush();
635      else queue.length = 0;
636    };
637
638    window.__otAds = {
639      track: (event, props) => {
640        if (allowed === false) return;
641        queue.push({ event, props: props || {} });
642        if (allowed === true) flush();
643      },
644    };
645
646    document.addEventListener("probo-ready", (e) => {
647      const mode = e && e.detail && e.detail.config && e.detail.config.consent_mode;
648      consentMode = mode === "OPT_IN" || mode === "OPT_OUT" ? mode : null;
649      reevaluate();
650    });
651    document.addEventListener("probo-consent", () => {
652      // The SDK writes its cookie in the same handler; read it on the next tick.
653      window.setTimeout(reevaluate, 0);
654    });
655
656    const start = () => {
657      fetch("/api/ad-tags-config.json", { credentials: "same-origin" })
658        .then((r) => (r.ok ? r.json() : null))
659        .then((c) => {
660          if (!c || !c.enabled) return;
661          config = c;
662          reevaluate();
663        })
664        .catch(() => {});
665    };
666    window.setTimeout(() => {
667      if ("requestIdleCallback" in window) window.requestIdleCallback(start, { timeout: 2500 });
668      else window.setTimeout(start, 1500);
669    }, 800);
670  })();
671</script>
671 <meta name="ot-attribution-endpoint" content="https://attribution.opentrain.ai/collect"> 
671<script>(function(){const endpoint = "https://attribution.opentrain.ai/collect";
672
673  (() => {
674    if (!endpoint) return;
675
676    // Cookie reader — attribution cookies are host-scoped and not HttpOnly.
677    const readCookie = (name) => {
678      const match = document.cookie.match(
679        new RegExp("(?:^|; )" + name.replace(/[.$?*|{}()[\]\\/+^]/g, "\\$&") + "=([^;]*)")
680      );
681      return match ? decodeURIComponent(match[1]) : null;
682    };
683
684    const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
685    const uuid = () => {
686      if (typeof crypto !== "undefined" && typeof crypto.randomUUID === "function") {
687        return crypto.randomUUID();
688      }
689      // Minimal v4 fallback — cryptographically weak, only used when
690      // crypto.randomUUID is unavailable (very old browsers).
691      return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => {
692        const r = (Math.random() * 16) | 0;
693        const v = c === "x" ? r : (r & 0x3) | 0x8;
694        return v.toString(16);
695      });
696    };
697
698    const utmFromUrl = (url) => {
699      const qs = new URL(url).searchParams;
700      const take = (k) => {
701        const v = qs.get(k);
702        return v && v.trim().length > 0 ? v.trim().toLowerCase() : null;
703      };
704      return {
705        utm_source: take("utm_source"),
706        utm_medium: take("utm_medium"),
707        utm_campaign: take("utm_campaign"),
708        utm_content: take("utm_content"),
709        utm_term: take("utm_term"),
710        ot_cid: take("ot_cid"),
711      };
712    };
713
714    const buildEnvelope = (name, overrides) => {
715      const anonymousId = readCookie("_ot_aid");
716      const sessionId = readCookie("_ot_sid");
717      if (!anonymousId || !UUID_RE.test(anonymousId)) return null;
718      if (!sessionId || !UUID_RE.test(sessionId)) return null;
719
720      const pageUrl = new URL(window.location.href);
721      const utm = utmFromUrl(pageUrl.href);
722
723      return Object.assign(
724        {
725          event: name,
726          event_id: uuid(),
727          ts: new Date().toISOString(),
728          path: pageUrl.pathname + pageUrl.search,
729          referrer: document.referrer || null,
730          anonymous_id: anonymousId,
731          session_id: sessionId,
732          attribution_sig: readCookie("_ot_attrib"),
733          utm_source: utm.utm_source,
734          utm_medium: utm.utm_medium,
735          utm_campaign: utm.utm_campaign,
736          utm_content: utm.utm_content,
737          utm_term: utm.utm_term,
738          ot_cid: utm.ot_cid,
739          internal: pageUrl.searchParams.get("ot_internal") === "1",
740          metadata: null,
741        },
742        overrides || {}
743      );
744    };
745
746    const send = (envelope) => {
747      if (!envelope) return;
748      try {
749        const json = JSON.stringify(envelope);
750        // sendBeacon keeps the request alive across page unloads but does
751        // not let us set a custom Content-Type header directly; the Blob
752        // MIME type doubles as the Content-Type the browser sends.
753        if (navigator.sendBeacon) {
754          const blob = new Blob([json], { type: "application/json" });
755          if (navigator.sendBeacon(endpoint, blob)) return;
756        }
757        fetch(endpoint, {
758          method: "POST",
759          headers: { "content-type": "application/json" },
760          body: json,
761          keepalive: true,
762          credentials: "omit",
763        }).catch(() => {
764          // Attribution must never surface errors to users.
765        });
766      } catch (err) {
767        // Swallow — attribution is best-effort.
768      }
769    };
770
771    let lastPageViewPath = null;
772    const firePageView = () => {
773      const path = window.location.pathname + window.location.search;
774      if (path === lastPageViewPath) return;
775      lastPageViewPath = path;
776      send(buildEnvelope("marketing_page_view"));
777    };
778
779    // CTA detection:
780    // 1. Explicit opt-in: any element carrying `[data-ot-cta]`, value is
781    //    the CTA name (e.g. `post_a_job`).
782    // 2. Convention: any link or button that routes to app.opentrain.ai —
783    //    those are the meaningful conversion CTAs on this site.
784    const ctaName = (el) => {
785      const explicit = el.closest("[data-ot-cta]");
786      if (explicit) {
787        const name = explicit.getAttribute("data-ot-cta");
788        if (name && name.length > 0 && name.length <= 64) return name;
789      }
790      const linkEl = el.closest("a[href]");
791      if (!linkEl) return null;
792      const href = linkEl.getAttribute("href") || "";
793      try {
794        const target = new URL(href, window.location.href);
795        if (target.hostname === "app.opentrain.ai") {
796          // Shorten target path to a dimension-friendly label.
797          const seg = target.pathname.replace(/^\/+|\/+$/g, "").split("/")[0] || "root";
798          return `app_${seg}`;
799        }
800      } catch {
801        /* ignore invalid hrefs */
802      }
803      return null;
804    };
805
806    const onDocClick = (event) => {
807      const t = event.target instanceof Element ? event.target : null;
808      if (!t) return;
809      const name = ctaName(t);
810      if (!name) return;
811      const linkEl = t.closest("a[href]");
812      let destination = null;
813      if (linkEl) {
814        try {
815          destination = new URL(linkEl.getAttribute("href"), window.location.href).href;
816        } catch {
817          destination = linkEl.getAttribute("href");
818        }
819      }
820      send(
821        buildEnvelope("marketing_cta_click", {
822          metadata: { cta: name, destination },
823        })
824      );
825    };
826
827    const install = () => {
828      document.addEventListener("click", onDocClick, { capture: true, passive: true });
829      firePageView();
830    };
831
832    if (document.readyState === "loading") {
833      document.addEventListener("DOMContentLoaded", install, { once: true });
834    } else {
835      install();
836    }
837
838    // Astro View Transitions — re-fire page_view on client-side nav.
839    document.addEventListener("astro:page-load", firePageView);
840  })();
841})();</script>
841<link rel="alternate" hreflang="en" href="https://www.opentrain.ai/about/"><link rel="alternate" hreflang="es" href="https://www.opentrain.ai/es/about/"><link rel="alternate" hreflang="fr" href="https://www.opentrain.ai/fr/about/"><link rel="alternate" hreflang="de" href="https://www.opentrain.ai/de/about/"><link rel="alternate" hreflang="ja" href="https://www.opentrain.ai/ja/about/"><link rel="alternate" hreflang="x-default" href="https://www.opentrain.ai/about/"><meta property="og:locale" content="en_US"><meta property="og:locale:alternate" content="es_ES"><meta property="og:locale:alternate" content="fr_FR"><meta property="og:locale:alternate" content="de_DE"><meta property="og:locale:alternate" content="ja_JP">
841<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":["Organization","OnlineBusiness"],"@id":"https://www.opentrain.ai/#organization","name":"OpenTrain AI","url":"https://www.opentrain.ai","logo":{"@type":"ImageObject","url":"https://www.opentrain.ai/images/opentrain-logo-google.png","contentUrl":"https://www.opentrain.ai/images/opentrain-logo-google.png","width":512,"height":512},"sameAs":["https://www.linkedin.com/company/opentrain/","https://x.com/OpenTrainAI"],"contactPoint":{"@type":"ContactPoint","contactType":"sales","email":"[email protected]"},"description":"Open talent network for AI training and data labeling with self-service hiring and managed service options.","areaServed":"Worldwide","knowsAbout":["AI Training","Data Labeling","RLHF","LLM Evaluation","Red Teaming","Computer Vision Annotation","Natural Language Processing"],"slogan":"Open talent network for AI training and data labeling"},{"@type":"WebSite","@id":"https://www.opentrain.ai/#website","url":"https://www.opentrain.ai","name":"OpenTrain AI","description":"Open talent network for AI training and data labeling. Hire AI Trainers and Data Labelers for any tool or workflow.","publisher":{"@id":"https://www.opentrain.ai/#organization"},"inLanguage":"en"},{"@type":"WebPage","@id":"https://www.opentrain.ai/about/","url":"https://www.opentrain.ai/about/","name":"About OpenTrain AI","description":"Learn how OpenTrain AI is building the open platform for AI training, data labeling, and evaluation with vetted experts and transparent pricing.","isPartOf":{"@id":"https://www.opentrain.ai/#website"},"inLanguage":"en"}]}</script>
841<link rel="dns-prefetch" href="https://widget.trustpilot.com"><link rel="preconnect" href="https://widget.trustpilot.com" crossorigin><link rel="stylesheet" href="/_astro/ScalarLayout.DaILym8L.css">
841<script type="module" src="/_astro/page.B9hPg2Bv.js"></script>
841</head> <body class="min-h-screen antialiased flex flex-col"> <a href="#main-content" class="sr-only focus:not-sr-only focus:absolute focus:left-4 focus:top-4 focus:z-[100000] focus:rounded-md focus:bg-white focus:px-3 focus:py-2 focus:text-sm focus:text-black focus:shadow-lg focus:outline-none focus:ring-2 focus:ring-black"> Skip to content </a> <style>astro-island,astro-slot,astro-static-slot{display:contents}</style>
841<script>(()=>{var e=async t=>{await(await t())()};(self.Astro||(self.Astro={})).load=e;window.dispatchEvent(new Event("astro:load"));})();</script>
841<script>(()=>{var g=Object.defineProperty;var w=(a,s,c)=>s in a?g(a,s,{enumerable:!0,configurable:!0,writable:!0,value:c}):a[s]=c;var l=(a,s,c)=>w(a,typeof s!="symbol"?s+"":s,c);var E=new Set(["__proto__","constructor","prototype"]);{let a={0:t=>y(t),1:t=>c(t),2:t=>new RegExp(t),3:t=>new Date(t),4:t=>new Map(c(t)),5:t=>new Set(c(t)),6:t=>BigInt(t),7:t=>new URL(t),8:t=>new Uint8Array(t),9:t=>new Uint16Array(t),10:t=>new Uint32Array(t),11:t=>Number.POSITIVE_INFINITY*t},s=t=>{let[p,e]=t;return p in a?a[p](e):void 0},c=t=>t.map(s),y=t=>typeof t!="object"||t===null?t:Object.fromEntries(Object.entries(t).map(([p,e])=>[p,s(e)]));class f extends HTMLElement{constructor(){super(...arguments);l(this,"Component");l(this,"hydrator");l(this,"hydrate",async()=>{var b;if(!this.hydrator||!this.isConnected)return;let e=(b=this.parentElement)==null?void 0:b.closest("astro-island[ssr]");if(e){e.addEventListener("astro:hydrate",this.hydrate,{once:!0});return}let r=this.querySelectorAll("astro-slot"),n={},d=this.querySelectorAll("template[data-astro-template]");for(let o of d){let i=o.closest(this.tagName);i!=null&&i.isSameNode(this)&&(n[o.getAttribute("data-astro-template")||"default"]=o.innerHTML,o.remove())}for(let o of r){let i=o.closest(this.tagName);i!=null&&i.isSameNode(this)&&(n[o.getAttribute("name")||"default"]=o.innerHTML)}let u;try{u=this.hasAttribute("props")?y(JSON.parse(this.getAttribute("props"))):{}}catch(o){let i=this.getAttribute("component-url")||"<unknown>",v=this.getAttribute("component-export");throw v&&(i+=` (export ${v})`),console.error(`[hydrate] Error parsing props for component ${i}`,this.getAttribute("props"),o),o}let h;await this.hydrator(this)(this.Component,u,n,{client:this.getAttribute("client")}),this.removeAttribute("ssr"),this.dispatchEvent(new CustomEvent("astro:hydrate"))});l(this,"unmount",()=>{this.isConnected||this.dispatchEvent(new CustomEvent("astro:unmount"))})}disconnectedCallback(){document.removeEventListener("astro:after-swap",this.unmount),document.addEventListener("astro:after-swap",this.unmount,{once:!0})}connectedCallback(){if(!this.hasAttribute("await-children")||document.readyState==="interactive"||document.readyState==="complete")this.childrenConnectedCallback();else{let e=()=>{document.removeEventListener("DOMContentLoaded",e),r.disconnect(),this.childrenConnectedCallback()},r=new MutationObserver(()=>{var n;((n=this.lastChild)==null?void 0:n.nodeType)===Node.COMMENT_NODE&&this.lastChild.nodeValue==="astro:end"&&(this.lastChild.remove(),e())});r.observe(this,{childList:!0}),document.addEventListener("DOMContentLoaded",e)}}async childrenConnectedCallback(){let e=this.getAttribute("before-hydration-url");e&&await import(e),this.start()}getRetryImportUrl(e){let r=new URL(e,document.baseURI);return r.searchParams.set("astro-retry",Date.now().toString()),r.toString()}async importWithRetry(e){try{return await import(e)}catch(r){return await new Promise(n=>setTimeout(n,1e3)),import(this.getRetryImportUrl(e))}}handleHydrationError(e){let r=this.getAttribute("component-url"),n=new CustomEvent("astro:hydration-error",{cancelable:!0,bubbles:!0,composed:!0,detail:{error:e,componentUrl:r}});this.dispatchEvent(n)&&console.error(`[astro-island] Error hydrating ${r}`,e)}async start(){let e=JSON.parse(this.getAttribute("opts")),r=this.getAttribute("client");if(Astro[r]===void 0){window.addEventListener(`astro:${r}`,()=>this.start(),{once:!0});return}try{await Astro[r](async()=>{let n=this.getAttribute("renderer-url");try{let[d,{default:u}]=await Promise.all([this.importWithRetry(this.getAttribute("component-url")),n?this.importWithRetry(n):Promise.resolve({default:()=>()=>{}})]),h=this.getAttribute("component-export")||"default";if(h.includes(".")){this.Component=d;for(let m of h.split(".")){if(E.has(m)||!this.Component||typeof this.Component!="object"&&typeof this.Component!="function"||!Object.hasOwn(this.Component,m))throw new Error(`Invalid component export path: ${h}`);this.Component=this.Component[m]}}else{if(E.has(h))throw new Error(`Invalid component export path: ${h}`);this.Component=d[h]}return this.hydrator=u,this.hydrate}catch(d){return this.handleHydrationError(d),()=>{}}},e,this)}catch(n){this.handleHydrationError(n)}}attributeChangedCallback(){this.hydrate()}}l(f,"observedAttributes",["props"]),customElements.get("astro-island")||customElements.define("astro-island",f)}})();</script>
841<astro-island uid="6HUGv" prefix="r8" component-url="/_astro/navbar.BWyoiFye.js" component-export="default" renderer-url="/_astro/client.BB2I2q6P.js" props="{&quot;currentPage&quot;:[0,&quot;/about/&quot;],&quot;initialDark&quot;:[0,false],&quot;llmSolutions&quot;:[1,[[0,{&quot;slug&quot;:[0,&quot;llm-evaluation&quot;],&quot;name&quot;:[0,&quot;LLM Evaluation&quot;],&quot;iconWhiteBg&quot;:[0,&quot;/images/cms/694266261a2ec983456dbb4b_LLM-Evaluation.svg&quot;]}],[0,{&quot;slug&quot;:[0,&quot;ai-red-teaming&quot;],&quot;name&quot;:[0,&quot;Red Teaming&quot;],&quot;iconWhiteBg&quot;:[0,&quot;/images/cms/6942672046da3c29baf24e7b_Red-Teaming.svg&quot;]}],[0,{&quot;slug&quot;:[0,&quot;hallucination-audits&quot;],&quot;name&quot;:[0,&quot;Hallucination Audits&quot;],&quot;iconWhiteBg&quot;:[0,&quot;/images/cms/6942665606905068b3f3557b_Hallucination-Audits-Icon.svg&quot;]}],[0,{&quot;slug&quot;:[0,&quot;rlhf-and-preference-data&quot;],&quot;name&quot;:[0,&quot;RLHF &amp; Preference Data&quot;],&quot;iconWhiteBg&quot;:[0,&quot;/images/cms/694266ea6c354509ac0e2b52_RLHF-and-Preference-Data.svg&quot;]}],[0,{&quot;slug&quot;:[0,&quot;supervised-fine-tuning&quot;],&quot;name&quot;:[0,&quot;Supervised Fine-Tuning&quot;],&quot;iconWhiteBg&quot;:[0,&quot;/images/cms/694267ab73e434a82f016d29_Supervised-Fine-Tuning-Icon.svg&quot;]}],[0,{&quot;slug&quot;:[0,&quot;code-generation-review&quot;],&quot;name&quot;:[0,&quot;Code Generation Review&quot;],&quot;iconWhiteBg&quot;:[0,&quot;/images/cms/6942647c7690419191196845_Code-Generation-Review.svg&quot;]}]]],&quot;labelingSolutions&quot;:[1,[[0,{&quot;slug&quot;:[0,&quot;document-annotation&quot;],&quot;name&quot;:[0,&quot;Document Annotation&quot;],&quot;iconWhiteBg&quot;:[0,&quot;/images/cms/694264ef8f3aa7bce8d17a9e_Document-and-OCR-Data-Labeling.svg&quot;]}],[0,{&quot;slug&quot;:[0,&quot;image-annotation&quot;],&quot;name&quot;:[0,&quot;Image Annotation&quot;],&quot;iconWhiteBg&quot;:[0,&quot;/images/cms/69426668b34ad18bad7feab7_Image-Annotation-Icon.svg&quot;]}],[0,{&quot;slug&quot;:[0,&quot;segmentation&quot;],&quot;name&quot;:[0,&quot;Segmentation&quot;],&quot;iconWhiteBg&quot;:[0,&quot;/images/cms/6942676d5f1427d975ffbe55_Segmentation.svg&quot;]}],[0,{&quot;slug&quot;:[0,&quot;video-annotation&quot;],&quot;name&quot;:[0,&quot;Video Annotation&quot;],&quot;iconWhiteBg&quot;:[0,&quot;/images/cms/694267dff5294d142e94f9f8_Video-Annotation.svg&quot;]}],[0,{&quot;slug&quot;:[0,&quot;text-annotation&quot;],&quot;name&quot;:[0,&quot;Text Annotation&quot;],&quot;iconWhiteBg&quot;:[0,&quot;/images/cms/694267be2cc99452edd83067_Text-Annotation-Icon.svg&quot;]}],[0,{&quot;slug&quot;:[0,&quot;speech-and-audio-labeling&quot;],&quot;name&quot;:[0,&quot;Speech and Audio Labeling&quot;],&quot;iconWhiteBg&quot;:[0,&quot;/images/cms/69426790d6dabf7228ee9480_Speech-and-Audio-Labeling.svg&quot;]}]]],&quot;careerPages&quot;:[1,[[0,{&quot;slug&quot;:[0,&quot;mathematics&quot;],&quot;domain&quot;:[0,&quot;Mathematics&quot;],&quot;label&quot;:[0]}],[0,{&quot;slug&quot;:[0,&quot;biology&quot;],&quot;domain&quot;:[0,&quot;Biology&quot;],&quot;label&quot;:[0]}],[0,{&quot;slug&quot;:[0,&quot;chemistry&quot;],&quot;domain&quot;:[0,&quot;Chemistry&quot;],&quot;label&quot;:[0]}],[0,{&quot;slug&quot;:[0,&quot;physics&quot;],&quot;domain&quot;:[0,&quot;Physics&quot;],&quot;label&quot;:[0]}],[0,{&quot;slug&quot;:[0,&quot;law&quot;],&quot;domain&quot;:[0,&quot;Law&quot;],&quot;label&quot;:[0]}],[0,{&quot;slug&quot;:[0,&quot;finance&quot;],&quot;domain&quot;:[0,&quot;Finance&quot;],&quot;label&quot;:[0]}]]],&quot;expertCount&quot;:[0,&quot;495,000+&quot;],&quot;locale&quot;:[0,&quot;en&quot;],&quot;chrome&quot;:[0,{&quot;nav&quot;:[0,{&quot;skipToContent&quot;:[0,&quot;Skip to content&quot;],&quot;ariaMain&quot;:[0,&quot;Main navigation&quot;],&quot;ariaMobile&quot;:[0,&quot;Mobile navigation&quot;],&quot;ariaOpenMenu&quot;:[0,&quot;Open menu&quot;],&quot;ariaCloseMenu&quot;:[0,&quot;Close menu&quot;],&quot;dropdowns&quot;:[0,{&quot;platform&quot;:[0,&quot;Platform&quot;],&quot;solutions&quot;:[0,&quot;Solutions&quot;],&quot;integrations&quot;:[0,&quot;Integrations&quot;],&quot;researcherTools&quot;:[0,&quot;Researcher Tools&quot;]}],&quot;links&quot;:[0,{&quot;pricing&quot;:[0,&quot;Pricing&quot;],&quot;findWork&quot;:[0,&quot;Find Work&quot;],&quot;managedService&quot;:[0,&quot;Managed Service&quot;],&quot;managedServiceBadge&quot;:[0,&quot;For Large Projects&quot;]}],&quot;cta&quot;:[0,{&quot;logIn&quot;:[0,&quot;Log In&quot;],&quot;createAccount&quot;:[0,&quot;Create Account&quot;]}],&quot;scalarDynamic&quot;:[0,{&quot;joinTrainersHeadline&quot;:[0,&quot;Join {count} AI Trainers&quot;],&quot;viewAllDomainsLabel&quot;:[0,&quot;View All {count}+ Domains&quot;]}],&quot;scalarLabelOverrides&quot;:[0,{&quot;For AI Companies&quot;:[0,&quot;For AI Companies&quot;],&quot;For Freelancers&quot;:[0,&quot;For Freelancers&quot;],&quot;For Data Labeling Companies&quot;:[0,&quot;For Data Labeling Companies&quot;],&quot;Resources&quot;:[0,&quot;Resources&quot;],&quot;About Us&quot;:[0,&quot;About Us&quot;],&quot;Contact&quot;:[0,&quot;Contact&quot;],&quot;AI and ML terminology&quot;:[0,&quot;AI and ML terminology&quot;],&quot;API and developer docs&quot;:[0,&quot;API and developer docs&quot;],&quot;Add vetted specialists to your team&quot;:[0,&quot;Add vetted specialists to your team&quot;],&quot;Become a Freelancer&quot;:[0,&quot;Become a Freelancer&quot;],&quot;Blog&quot;:[0,&quot;Blog&quot;],&quot;Bring Your Own Platform&quot;:[0,&quot;Bring Your Own Platform&quot;],&quot;Browse All Jobs&quot;:[0,&quot;Browse All Jobs&quot;],&quot;Browse Integrations&quot;:[0,&quot;Browse Integrations&quot;],&quot;Browse career paths by domain&quot;:[0,&quot;Browse career paths by domain&quot;],&quot;Custom Quote&quot;:[0,&quot;Custom Quote&quot;],&quot;Custom pricing for large projects&quot;:[0,&quot;Custom pricing for large projects&quot;],&quot;Every open AI training job, updated daily&quot;:[0,&quot;Every open AI training job, updated daily&quot;],&quot;Find Clients and Browse RFPs&quot;:[0,&quot;Find Clients and Browse RFPs&quot;],&quot;Find pre-vetted AI trainers&quot;:[0,&quot;Find pre-vetted AI trainers&quot;],&quot;For large or complex projects&quot;:[0,&quot;For large or complex projects&quot;],&quot;Free for freelancers. Always.&quot;:[0,&quot;Free for freelancers. Always.&quot;],&quot;From posting to delivery&quot;:[0,&quot;From posting to delivery&quot;],&quot;Get Started&quot;:[0,&quot;Get Started&quot;],&quot;Get discovered by AI companies looking for labeling vendors&quot;:[0,&quot;Get discovered by AI companies looking for labeling vendors&quot;],&quot;Get found by AI labs and startups&quot;:[0,&quot;Get found by AI labs and startups&quot;],&quot;Get in touch&quot;:[0,&quot;Get in touch&quot;],&quot;Glossary&quot;:[0,&quot;Glossary&quot;],&quot;Grow Your Business&quot;:[0,&quot;Grow Your Business&quot;],&quot;Healthcare &amp; Medicine&quot;:[0,&quot;Healthcare &amp; Medicine&quot;],&quot;Hire Freelancers&quot;:[0,&quot;Hire Freelancers&quot;],&quot;Join Now&quot;:[0,&quot;Join Now&quot;],&quot;Join the largest AI training network&quot;:[0,&quot;Join the largest AI training network&quot;],&quot;LLM &amp; Agent Solutions&quot;:[0,&quot;LLM &amp; Agent Solutions&quot;],&quot;LLM training and data labeling&quot;:[0,&quot;LLM training and data labeling&quot;],&quot;Label Studio, CVAT, and more&quot;:[0,&quot;Label Studio, CVAT, and more&quot;],&quot;Learn More&quot;:[0,&quot;Learn More&quot;],&quot;List Free&quot;:[0,&quot;List Free&quot;],&quot;Math &amp; Science&quot;:[0,&quot;Math &amp; Science&quot;],&quot;Multimodal&quot;:[0,&quot;Multimodal&quot;],&quot;News and insights&quot;:[0,&quot;News and insights&quot;],&quot;Our mission and team&quot;:[0,&quot;Our mission and team&quot;],&quot;Popular Domains&quot;:[0,&quot;Popular Domains&quot;],&quot;Post a job and hire directly&quot;:[0,&quot;Post a job and hire directly&quot;],&quot;Reasoning Verification&quot;:[0,&quot;Reasoning Verification&quot;],&quot;See the vendor listing process&quot;:[0,&quot;See the vendor listing process&quot;],&quot;Self-Service: Post a Job&quot;:[0,&quot;Self-Service: Post a Job&quot;],&quot;Services&quot;:[0,&quot;Services&quot;],&quot;
841Software Engineering&quot;:[0,&quot;Software Engineering&quot;],&quot;Solutions&quot;:[0,&quot;Solutions&quot;],&quot;Speech &amp; Audio&quot;:[0,&quot;Speech &amp; Audio&quot;],&quot;Text &amp; Programmatic&quot;:[0,&quot;Text &amp; Programmatic&quot;],&quot;Translation&quot;:[0,&quot;Translation&quot;],&quot;Transparent published rates&quot;:[0,&quot;Transparent published rates&quot;],&quot;View All&quot;:[0,&quot;View All&quot;],&quot;Vision&quot;:[0,&quot;Vision&quot;],&quot;We handle everything end-to-end&quot;:[0,&quot;We handle everything end-to-end&quot;],&quot;We recruit, train, and manage&quot;:[0,&quot;We recruit, train, and manage&quot;],&quot;We recruit, train, and manage your team&quot;:[0,&quot;We recruit, train, and manage your team&quot;],&quot;We&#39;re the talent layer, not the tool. Use any annotation platform.&quot;:[0,&quot;We&#39;re the talent layer, not the tool. Use any annotation platform.&quot;],&quot;Works with your tools&quot;:[0,&quot;Works with your tools&quot;],&quot;Writing &amp; Linguistics&quot;:[0,&quot;Writing &amp; Linguistics&quot;]}]}],&quot;themeLabels&quot;:[0,{&quot;lightMode&quot;:[0,&quot;Light mode&quot;],&quot;darkMode&quot;:[0,&quot;Dark mode&quot;]}],&quot;footerLabelOverrides&quot;:[0,{}]}],&quot;forceTheme&quot;:[0]}" ssr client="load" opts="{&quot;name&quot;:&quot;Navbar&quot;,&quot;value&quot;:true}" await-children><header class="fixed top-0 left-0 right-0 z-50 border-b backdrop-blur-lg transition-[background-color,border-color] duration-300 ease-in-out border-border bg-background/80"><div><div class="container relative z-10 max-w-[120rem] px-4"><div class="flex items-center border-x py-4 lg:border-none lg:py-6"><a href="/" aria-label="OpenTrain AI home" class="flex shrink-0 items-center ps-6 lg:ps-0 dark:[&amp;&gt;img]:invert"><img src="/images/OpenTrain-AI-Icon.svg" alt="OpenTrain AI" aria-hidden="true" width="28" height="28" class="hidden h-7 w-7 object-contain lg:block xl:hidden"/><img src="/images/OpenTrain-AI-Logo.svg" alt="OpenTrain AI" width="140" height="27" class="h-[27px] w-[140px] object-contain lg:hidden xl:block xl:h-[23px] xl:w-[120px] 2xl:h-[27px] 2xl:w-[140px]"/></a><span class="sr-only">For AI Companies</span><div class="me-6 ml-auto flex flex-1 items-center justify-end lg:me-0 lg:hidden"><div class="inline-flex items-center rounded-full bg-muted/30 p-px mr-2" data-theme-toggle="true"><button type="button" aria-label="Light mode" aria-pressed="true" class="inline-flex size-6 cursor-pointer items-center justify-center rounded-full transition-all duration-200 bg-background text-foreground shadow-sm"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-sun size-3.5" aria-hidden="true"><circle cx="12" cy="12" r="4"></circle><path d="M12 2v2"></path><path d="M12 20v2"></path><path d="m4.93 4.93 1.41 1.41"></path><path d="m17.66 17.66 1.41 1.41"></path><path d="M2 12h2"></path><path d="M20 12h2"></path><path d="m6.34 17.66-1.41 1.41"></path><path d="m19.07 4.93-1.41 1.41"></path></svg></button><button type="button" aria-label="Dark mode" aria-pressed="false" class="inline-flex size-6 cursor-pointer items-center justify-center rounded-full transition-all duration-200 text-muted-foreground/70 hover:text-muted-foreground"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-moon size-3.5" aria-hidden="true"><path d="M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z"></path></svg></button></div><button data-slot="button" class="items-center cursor-pointer justify-center gap-2 tracking-normal whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg:not([class*=&#x27;size-&#x27;])]:size-4 shrink-0 [&amp;_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive border bg-card hover:bg-accent hover:text-accent-foreground dark:bg-[#232222] dar
841k:border-input dark:hover:bg-[#232222] size-9 relative flex !bg-transparent" aria-expanded="false" data-mobile-nav-toggle="true"><span class="sr-only">Open menu</span><div class="absolute top-1/2 left-1/2 block w-[18px] -translate-x-1/2 -translate-y-1/2"><span aria-hidden="true" class="absolute block h-0.5 w-full rounded-full bg-current transition-transform duration-500 ease-in-out -translate-y-1.5"></span><span aria-hidden="true" class="absolute block h-0.5 w-full rounded-full bg-current transition-transform duration-500 ease-in-out"></span><span aria-hidden="true" class="absolute block h-0.5 w-full rounded-full bg-current transition-transform duration-500 ease-in-out translate-y-1.5"></span></div></button></div><div class="hidden min-w-0 flex-1 items-center justify-between lg:flex ms-3 xl:ms-4 2xl:ms-6"><nav aria-label="Main navigation"><ul class="flex list-none items-center gap-0 xl:gap-0.5"></ul></nav><div class="bordered-div-padding flex shrink-0 items-center justify-end gap-2 border lg:border-none lg:!p-0"><div class="items-center rounded-full bg-muted/30 p-px hidden lg:inline-flex" data-theme-toggle="true"><button type="button" aria-label="Light mode" aria-pressed="true" class="inline-flex size-6 cursor-pointer items-center justify-center rounded-full transition-all duration-200 bg-background text-foreground shadow-sm"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-sun size-3.5" aria-hidden="true"><circle cx="12" cy="12" r="4"></circle><path d="M12 2v2"></path><path d="M12 20v2"></path><path d="m4.93 4.93 1.41 1.41"></path><path d="m17.66 17.66 1.41 1.41"></path><path d="M2 12h2"></path><path d="M20 12h2"></path><path d="m6.34 17.66-1.41 1.41"></path><path d="m19.07 4.93-1.41 1.41"></path></svg></button><button type="button" aria-label="Dark mode" aria-pressed="false" class="inline-flex size-6 cursor-pointer items-center justify-center rounded-full transition-all duration-200 text-muted-foreground/70 hover:text-muted-foreground"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-moon size-3.5" aria-hidden="true"><path d="M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z"></path></svg></button></div><a href="https://app.opentrain.ai/?key=login"><button data-slot="button" class="inline-flex items-center cursor-pointer justify-center tracking-normal whitespace-nowrap text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg:not([class*=&#x27;size-&#x27;])]:size-4 shrink-0 [&amp;_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50 h-8 rounded-md gap-1.5 px-3 has-[&gt;svg]:px-2.5 lg:text-[13px] xl:text-sm">Log In</button></a><a href="https://app.opentrain.ai/?key=signup" class="ms-3 lg:ms-1 xl:ms-2"><button data-slot="button" class="inline-flex items-center cursor-pointer justify-center tracking-normal whitespace-nowrap text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg:not([class*=&#x27;size-&#x27;])]:size-4 shrink-0 [&amp;_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive bg-primary text-primary-foreground hover:bg-primary/90 h-8 rounded-md gap-1.5 px-3 has-[&gt;svg]:px-2.5 lg:text-[13px] xl:text-sm">Create Account</button></a></div></div></div></div></div></header><!--astro:end--></astro-island>  <main id="main-content" class="flex-1 pt-[69px]"> <div id="ot-locale-suggestion" role="status" aria-live="polite" class="relative z-10 hidden border-b border-neutral-300 bg-white px-3 py-2 data-[visible=true]:block"> <div class="mx-auto flex max-w-[1428px] items-center justify-center gap-3 text-sm text-neutral-950 max-sm:flex-col max-sm:items-stretch"> <p class="m-0 leading-snug">
842View this page in <span data-locale-native></span>?
843</p> <div class="flex shrink-0 items-center gap-2 max-sm:w-full max-sm:flex-col max-sm:items-stretch"> <a href="#" data-locale-action="view" class="inline-flex min-h-9 items-center justify-center rounded-md bg-black px-3 text-sm font-medium text-white hover:opacity-90 max-sm:w-full max-sm:flex-none">
844View <span class="ml-1" data-locale-english></span> </a> <button type="button" data-locale-action="dismiss" class="inline-flex min-h-9 items-center justify-center rounded-md border border-neutral-400 bg-white px-3 text-sm font-medium text-neutral-950 hover:bg-neutral-100 max-sm:w-full max-sm:flex-none">
845Keep English
846</button> </div> </div> </div> 
846<script>(function(){const configJson = "{\"enabled\":true,\"defaultLocale\":\"en\",\"choiceCookie\":\"ot_locale_choice\",\"dismissedCookie\":\"ot_locale_suggestion_dismissed\",\"choiceStorageKey\":\"ot_locale_choice\",\"dismissedStorageKey\":\"ot_locale_suggestion_dismissed\",\"cookieMaxAgeSeconds\":31536000,\"botUserAgentPatternSources\":[\"bot\",\"spider\",\"crawl(?!er-website)\",\"crawler\",\"slurp\",\"bingpreview\",\"fetch\",\"headless\",\"archive\\\\.org_bot\",\"facebookexternalhit\",\"lighthouse\",\"yandex\",\"baiduspider\",\"duckduckbot\",\"applebot\",\"semrushbot\",\"ahrefssiteaudit\",\"ahrefsbot\",\"mj12bot\",\"petalbot\",\"gptbot\",\"oai-searchbot\",\"claudebot\",\"anthropic-ai\",\"perplexitybot\",\"ccbot\",\"meta-externalagent\",\"amazonbot\"],\"locales\":[{\"code\":\"es\",\"englishName\":\"Spanish\",\"nativeName\":\"Español\",\"hreflang\":\"es\",\"register\":\"es-419\",\"urlPrefix\":\"/es\"},{\"code\":\"fr\",\"englishName\":\"French\",\"nativeName\":\"Français\",\"hreflang\":\"fr\",\"register\":\"fr-FR\",\"urlPrefix\":\"/fr\"},{\"code\":\"de\",\"englishName\":\"German\",\"nativeName\":\"Deutsch\",\"hreflang\":\"de\",\"register\":\"de-DE\",\"urlPrefix\":\"/de\"},{\"code\":\"ja\",\"englishName\":\"Japanese\",\"nativeName\":\"日本語\",\"hreflang\":\"ja\",\"register\":\"ja-JP\",\"urlPrefix\":\"/ja\"}],\"routesByLocale\":{\"es\":[\"/\",\"/about/\",\"/blog/\",\"/blog/dpo-vs-ppo-after-rlhf/\",\"/blog/ai-red-teaming-evaluation-data/\",\"/blog/grpo-for-reasoning-model-post-training/\",\"/blog/how-to-scope-an-rlhf-data-program/\",\"/blog/llm-judge-reliability/\",\"/blog/process-reward-models-vs-outcome-reward-models/\",\"/blog/rlaif-vs-rlhf-what-ai-feedback-can-and-cannot-replace/\",\"/blog/what-ai-training-work-actually-looks-like-for-freelancers/\",\"/blog/what-is-an-ai-trainer/\",\"/blog/ai-trainer-salary-and-hourly-pay/\",\"/blog/rlhf-explained-for-job-seekers/\",\"/blog/get-paid-to-train-ai/\",\"/blog/ai-training-jobs-with-no-experience/\",\"/blog/how-to-pass-an-ai-training-interview/\",\"/contact/\",\"/data-labeling-outsourcing-marketplace/\",\"/data-labeling-solutions/\",\"/get-a-quote/\",\"/hire-freelance-data-labelers/\",\"/how-it-works/\",\"/integrations/\",\"/list-your-data-labeling-company/\",\"/llm-agent-solutions/\",\"/managed-service/\",\"/pricing/\",\"/solutions/\",\"/integrations/argilla/\",\"/integrations/aws-sagemaker-groundtruth/\",\"/integrations/custom-tool/\",\"/integrations/cvat/\",\"/integrations/dataloop/\",\"/integrations/datasaur/\",\"/integrations/datature/\",\"/integrations/encord/\",\"/integrations/kili-technology/\",\"/integrations/label-studio/\",\"/integrations/prodigy/\",\"/integrations/roboflow/\",\"/integrations/scale-ai/\",\"/integrations/snorkel-ai/\",\"/integrations/superannotate/\",\"/integrations/supervisely/\",\"/solutions/agent-simulations/\",\"/solutions/ai-red-teaming/\",\"/solutions/code-generation-review/\",\"/solutions/computer-use-agent-training/\",\"/solutions/document-annotation/\",\"/solutions/function-calling/\",\"/solutions/hallucination-audits/\",\"/solutions/image-annotation/\",\"/solutions/llm-evaluation/\",\"/solutions/medical-imaging-annotation/\",\"/solutions/multilingual-ai-training/\",\"/solutions/point-cloud-annotation/\",\"/solutions/reasoning-problem-creation/\",\"/solutions/reasoning-step-verification/\",\"/solutions/rl-environment-design/\",\"/solutions/rlhf-and-preference-data/\",\"/solutions/satellite-imagery-annotation/\",\"/solutions/segmentation/\",\"/solutions/speech-and-audio-labeling/\",\"/solutions/supervised-fine-tuning/\",\"/solutions/text-annotation/\",\"/solutions/time-series-annotation/\",\"/solutions/video-annotation/\"],\"fr\":[\"/\",\"/about/\",\"/blog/\",\"/blog/dpo-vs-ppo-after-rlhf/\",\"/blog/ai-red-teaming-evaluation-data/\",\"/blog/grpo-for-reasoning-model-post-training/\",\"/blog/how-to-scope-an-rlhf-data-program/\",\"/blog/llm-judge-reliability/\",\"/blog/process-reward-models-vs-outcome-reward-models/\",\"/blog/rlaif-vs-rlhf-what-ai-feedback-can-and-cannot-replace/\",\"/blog/what-ai-training-work-actually-looks-like-for-freelancers/\",\"/blog/what-is-an-ai-trainer/\",\"/blog/ai-trainer-salary-and-hourly-p
846ay/\",\"/blog/rlhf-explained-for-job-seekers/\",\"/blog/get-paid-to-train-ai/\",\"/blog/ai-training-jobs-with-no-experience/\",\"/blog/how-to-pass-an-ai-training-interview/\",\"/contact/\",\"/data-labeling-outsourcing-marketplace/\",\"/data-labeling-solutions/\",\"/get-a-quote/\",\"/hire-freelance-data-labelers/\",\"/how-it-works/\",\"/integrations/\",\"/list-your-data-labeling-company/\",\"/llm-agent-solutions/\",\"/managed-service/\",\"/pricing/\",\"/solutions/\",\"/integrations/argilla/\",\"/integrations/aws-sagemaker-groundtruth/\",\"/integrations/custom-tool/\",\"/integrations/cvat/\",\"/integrations/dataloop/\",\"/integrations/datasaur/\",\"/integrations/datature/\",\"/integrations/encord/\",\"/integrations/kili-technology/\",\"/integrations/label-studio/\",\"/integrations/prodigy/\",\"/integrations/roboflow/\",\"/integrations/scale-ai/\",\"/integrations/snorkel-ai/\",\"/integrations/superannotate/\",\"/integrations/supervisely/\",\"/solutions/agent-simulations/\",\"/solutions/ai-red-teaming/\",\"/solutions/code-generation-review/\",\"/solutions/computer-use-agent-training/\",\"/solutions/document-annotation/\",\"/solutions/function-calling/\",\"/solutions/hallucination-audits/\",\"/solutions/image-annotation/\",\"/solutions/llm-evaluation/\",\"/solutions/medical-imaging-annotation/\",\"/solutions/multilingual-ai-training/\",\"/solutions/point-cloud-annotation/\",\"/solutions/reasoning-problem-creation/\",\"/solutions/reasoning-step-verification/\",\"/solutions/rl-environment-design/\",\"/solutions/rlhf-and-preference-data/\",\"/solutions/satellite-imagery-annotation/\",\"/solutions/segmentation/\",\"/solutions/speech-and-audio-labeling/\",\"/solutions/supervised-fine-tuning/\",\"/solutions/text-annotation/\",\"/solutions/time-series-annotation/\",\"/solutions/video-annotation/\"],\"de\":[\"/\",\"/about/\",\"/blog/\",\"/blog/dpo-vs-ppo-after-rlhf/\",\"/blog/ai-red-teaming-evaluation-data/\",\"/blog/grpo-for-reasoning-model-post-training/\",\"/blog/how-to-scope-an-rlhf-data-program/\",\"/blog/llm-judge-reliability/\",\"/blog/process-reward-models-vs-outcome-reward-models/\",\"/blog/rlaif-vs-rlhf-what-ai-feedback-can-and-cannot-replace/\",\"/blog/what-ai-training-work-actually-looks-like-for-freelancers/\",\"/blog/what-is-an-ai-trainer/\",\"/blog/ai-trainer-salary-and-hourly-pay/\",\"/blog/rlhf-explained-for-job-seekers/\",\"/blog/get-paid-to-train-ai/\",\"/blog/ai-training-jobs-with-no-experience/\",\"/blog/how-to-pass-an-ai-training-interview/\",\"/contact/\",\"/data-labeling-outsourcing-marketplace/\",\"/data-labeling-solutions/\",\"/get-a-quote/\",\"/hire-freelance-data-labelers/\",\"/how-it-works/\",\"/integrations/\",\"/list-your-data-labeling-company/\",\"/llm-agent-solutions/\",\"/managed-service/\",\"/pricing/\",\"/solutions/\",\"/integrations/argilla/\",\"/integrations/aws-sagemaker-groundtruth/\",\"/integrations/custom-tool/\",\"/integrations/cvat/\",\"/integrations/dataloop/\",\"/integrations/datasaur/\",\"/integrations/datature/\",\"/integrations/encord/\",\"/integrations/kili-technology/\",\"/integrations/label-studio/\",\"/integrations/prodigy/\",\"/integrations/roboflow/\",\"/integrations/scale-ai/\",\"/integrations/snorkel-ai/\",\"/integrations/superannotate/\",\"/integrations/supervisely/\",\"/solutions/agent-simulations/\",\"/solutions/ai-red-teaming/\",\"/solutions/code-generation-review/\",\"/solutions/computer-use-agent-training/\",\"/solutions/document-annotation/\",\"/solutions/function-calling/\",\"/solutions/hallucination-audits/\",\"/solutions/image-annotation/\",\"/solutions/llm-evaluation/\",\"/solutions/medical-imaging-annotation/\",\"/solutions/multilingual-ai-training/\",\"/solutions/point-cloud-annotation/\",\"/solutions/reasoning-problem-creation/\",\"/solutions/reasoning-step-verification/\",\"/solutions/rl-environment-design/\",\"/solutions/rlhf-and-preference-data/\",\"/solutions/satellite-imagery-annotation/\",\"/solutions/segmentation/\",\"/solutions/speech-and-audio-labeling/\",\"/solutions/supervised-fine-tuning/\",\"/solutions/text-annotation/\",\"/solutions/time-series-annotation/\",\"/solutions/video-annotation/\"],\"ja\":[\"/\",\"/about/\",\"/blog/\",\"/blog/dpo-vs-ppo-after-rlhf/\",\"/blog/ai-red-teaming-evaluation-data/\",\"/blog/grpo-for-reasoning-model-post-training/\",\"/blog/how-to-scope-an-rlhf-data-program/\",\"/blog/llm-judge-reliability/\",\"/blog/process-reward-models-vs-outcome-reward-models/\",\"/blog/rlaif-vs-rlhf-what-ai-feedback-can-and-cannot-replace/\",\"/blog/what-ai-training-work-actually-looks-like-for-freelancers/\",\"/blog/what-is-an-ai-trainer/\",\"/blog/ai-trainer-salary-and-hourly-p
846ay/\",\"/blog/rlhf-explained-for-job-seekers/\",\"/blog/get-paid-to-train-ai/\",\"/blog/ai-training-jobs-with-no-experience/\",\"/blog/how-to-pass-an-ai-training-interview/\",\"/contact/\",\"/data-labeling-outsourcing-marketplace/\",\"/data-labeling-solutions/\",\"/get-a-quote/\",\"/hire-freelance-data-labelers/\",\"/how-it-works/\",\"/integrations/\",\"/list-your-data-labeling-company/\",\"/llm-agent-solutions/\",\"/managed-service/\",\"/pricing/\",\"/solutions/\",\"/integrations/argilla/\",\"/integrations/aws-sagemaker-groundtruth/\",\"/integrations/custom-tool/\",\"/integrations/cvat/\",\"/integrations/dataloop/\",\"/integrations/datasaur/\",\"/integrations/datature/\",\"/integrations/encord/\",\"/integrations/kili-technology/\",\"/integrations/label-studio/\",\"/integrations/prodigy/\",\"/integrations/roboflow/\",\"/integrations/scale-ai/\",\"/integrations/snorkel-ai/\",\"/integrations/superannotate/\",\"/integrations/supervisely/\",\"/solutions/agent-simulations/\",\"/solutions/ai-red-teaming/\",\"/solutions/code-generation-review/\",\"/solutions/computer-use-agent-training/\",\"/solutions/document-annotation/\",\"/solutions/function-calling/\",\"/solutions/hallucination-audits/\",\"/solutions/image-annotation/\",\"/solutions/llm-evaluation/\",\"/solutions/medical-imaging-annotation/\",\"/solutions/multilingual-ai-training/\",\"/solutions/point-cloud-annotation/\",\"/solutions/reasoning-problem-creation/\",\"/solutions/reasoning-step-verification/\",\"/solutions/rl-environment-design/\",\"/solutions/rlhf-and-preference-data/\",\"/solutions/satellite-imagery-annotation/\",\"/solutions/segmentation/\",\"/solutions/speech-and-audio-labeling/\",\"/solutions/supervised-fine-tuning/\",\"/solutions/text-annotation/\",\"/solutions/time-series-annotation/\",\"/solutions/video-annotation/\",\"/jobs/\"]}}";
847
848  (() => {
849    const config = JSON.parse(configJson);
850    if (!config.enabled) return;
851
852    const root = document.getElementById("ot-locale-suggestion");
853    if (!root) return;
854
855    const botPatterns = config.botUserAgentPatternSources.map((source) => new RegExp(source, "i"));
856    const userAgent = navigator.userAgent || "";
857    if (!userAgent || botPatterns.some((pattern) => pattern.test(userAgent.toLowerCase()))) return;
858
859    const readCookie = (name) => {
860      const match = document.cookie.match(
861        new RegExp("(?:^|; )" + name.replace(/[.$?*|{}()[\]\\/+^]/g, "\\$&") + "=([^;]*)")
862      );
863      return match ? decodeURIComponent(match[1]) : null;
864    };
865
866    const writeCookie = (name, value) => {
867      const host = window.location.hostname;
868      const domain = host.endsWith("opentrain.ai") ? "; Domain=.opentrain.ai" : "";
869      const secure = window.location.protocol === "https:" ? "; Secure" : "";
870      document.cookie = `${name}=${encodeURIComponent(value)}; Max-Age=${config.cookieMaxAgeSeconds}; Path=/; SameSite=Lax${domain}${secure}`;
871    };
872
873    const normalizePath = (pathname) => {
874      if (!pathname.startsWith("/")) return normalizePath(`/${pathname}`);
875      if (pathname === "/") return "/";
876      return pathname.endsWith("/") ? pathname : `${pathname}/`;
877    };
878
879    const localeFromPath = (pathname) => {
880      const segment = pathname.replace(/^\/+/, "").split("/", 1)[0];
881      return config.locales.some((locale) => locale.code === segment)
882        ? segment
883        : config.defaultLocale;
884    };
885
886    const isDocumentRoute = (pathname) => {
887      if (/\.(?:avif|css|gif|ico|jpg|jpeg|js|json|map|mp4|png|svg|txt|webmanifest|webp|woff|woff2|xml)$/i.test(pathname)) return false;
888      return ![
889        "/_astro/",
890        "/_actions/",
891        "/api/",
892        "/cdn-cgi/",
893        "/docs",
894        "/docs-media/",
895        "/favicon",
896        "/images/",
897        "/fonts/",
898        "/logos/",
899        "/monitoring",
900        "/sitemap",
901        "/robots.txt",
902        "/apple-touch-icon",
903        "/manifest.webmanifest",
904      ].some((prefix) => prefix.endsWith("/")
905        ? pathname.startsWith(prefix)
906        : pathname === prefix || pathname.startsWith(`${prefix}/`));
907    };
908
909    const localeTags = (locale) => [locale.code, locale.hreflang, locale.register]
910      .filter(Boolean)
911      .map((tag) => tag.toLowerCase());
912
913    const matchLocale = () => {
914      const languages = Array.isArray(navigator.languages) && navigator.languages.length
915        ? [...navigator.languages]
916        : [navigator.language].filter(Boolean);
917      for (const language of languages) {
918        const normalized = language.toLowerCase();
919        const exact = config.locales.find((locale) => localeTags(locale).includes(normalized));
920        if (exact) return exact;
921      }
922      for (const language of languages) {
923        const base = language.toLowerCase().split("-", 1)[0];
924        const baseMatch = config.locales.find((locale) =>
925          localeTags(locale).some((tag) => tag.split("-", 1)[0] === base)
926        );
927        if (baseMatch) return baseMatch;
928      }
929      return null;
930    };
931
932    const localStorageGet = (key) => {
933      try { return window.localStorage.getItem(key); } catch { return null; }
934    };
935
936    const localStorageSet = (key, value) => {
937      try { window.localStorage.setItem(key, value); } catch {}
938    };
939
940    if (readCookie(config.choiceCookie) || readCookie(config.dismissedCookie) === "1") return;
941    if (localStorageGet(config.choiceStorageKey) || localStorageGet(config.dismissedStorageKey) === "1") return;
942    if (!isDocumentRoute(window.location.pathname)) return;
943    if (localeFromPath(window.location.pathname) !== config.defaultLocale) return;
944
945    const locale = matchLocale();
946    if (!locale) return;
947
948    const basePath = normalizePath(window.location.pathname);
949    if (!config.routesByLocale[locale.code]?.includes(basePath)) return;
950
951    const href = locale.code === config.defaultLocale
952      ? `${basePath}${window.location.search}${window.location.hash}`
953      : `/${locale.code}${basePath === "/" ? "/" : basePath}${window.location.search}${window.location.hash}`;
954
955    const view = root.querySelector('[data-locale-action="view"]');
956    const dismiss = root.querySelector('[data-locale-action="dismiss"]');
957    const nativeName = root.querySelector("[data-locale-native]");
958    const englishName = root.querySelector("[data-locale-english]");
959    if (!view || !dismiss || !nativeName || !englishName) return;
960
961    view.setAttribute("href", href);
962    nativeName.textContent = locale.nativeName;
963    englishName.textContent = locale.englishName;
964
965    view.addEventListener("click", () => {
966      writeCookie(config.choiceCookie, locale.code);
967      localStorageSet(config.choiceStorageKey, locale.code);
968    });
969
970    dismiss.addEventListener("click", () => {
971      writeCookie(config.dismissedCookie, "1");
972      localStorageSet(config.dismissedStorageKey, "1");
973      root.removeAttribute("data-visible");
974    });
975
976    const show = () => root.setAttribute("data-visible", "true");
977    if ("requestIdleCallback" in window) {
978      window.requestIdleCallback(show, { timeout: 1800 });
979    } else {
980      window.setTimeout(show, 800);
981    }
982  })();
983})();</script>
983  <div class="overflow-hidden"> <section class="container"><div class="bordered-div-padding relative flex flex-col items-center gap-8 border-x border-b text-center md:gap-10 lg:gap-16 lg:!py-25"><canvas class="pointer-events-none absolute inset-0 left-full -mt-0.25 hidden !h-[calc(100%+2px)] border-b md:block"></canvas><div class="max-w-4xl space-y-6 md:space-y-8 lg:space-y-12"><h1 class="font-weight-display text-2xl leading-snug tracking-tighter md:text-3xl lg:text-5xl">Building the open platform<!-- --> <span class="block">for AI training</span></h1><p class="text-muted-foreground mx-auto max-w-[700px] text-sm leading-relaxed md:text-lg lg:text-xl">OpenTrain is a transparent talent marketplace connecting AI companies with vetted trainers and data labelers - with published pricing, live-proctored vetting, and one platform across 20+ annotation tools.</p></div><div class="flex flex-wrap items-center justify-center gap-4 md:gap-6"><a href="https://app.opentrain.ai/register" data-slot="button" class="inline-flex items-center cursor-pointer justify-center tracking-normal whitespace-nowrap rounded-md font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg:not([class*=&#x27;size-&#x27;])]:size-4 shrink-0 [&amp;_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive bg-primary text-primary-foreground hover:bg-primary/90 h-10 md:h-12 px-6 md:px-7 py-2 gap-3.5 text-sm md:text-base font-weight-display">Join OpenTrain<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right size-4" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></a><a href="https://x.com/opentrainai" target="_blank" rel="noopener noreferrer" data-slot="button" class="inline-flex items-center cursor-pointer justify-center tracking-normal whitespace-nowrap rounded-md font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg:not([class*=&#x27;size-&#x27;])]:size-4 shrink-0 [&amp;_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive border bg-card hover:bg-accent hover:text-accent-foreground dark:bg-[#232222] dar
983k:border-input dark:hover:bg-[#232222] h-10 md:h-12 px-6 md:px-7 py-2 gap-3.5 text-sm md:text-base font-weight-display"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" class="size-4" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8L200.7 275.5 26.8 48H172.4L272.9 180.9 389.2 48zM364.4 421.8h39.1L151.1 88h-42L364.4 421.8z"></path></svg>Follow us on X</a></div></div></section> 
983<script>(()=>{var a=(s,i,o)=>{let r=async()=>{await(await s())()},t=typeof i.value=="object"?i.value:void 0,c={rootMargin:t==null?void 0:t.rootMargin},n=new IntersectionObserver(e=>{for(let l of e)if(l.isIntersecting){n.disconnect(),r();break}},c);for(let e of o.children)n.observe(e)};(self.Astro||(self.Astro={})).visible=a;window.dispatchEvent(new Event("astro:visible"));})();</script>
983<astro-island uid="1mpvfI" prefix="r4" component-url="/_astro/about-mission-team.DM9ljkEs.js" component-export="AboutMissionTeam" renderer-url="/_astro/client.BB2I2q6P.js" props="{&quot;locale&quot;:[0,&quot;en&quot;],&quot;localizedCopy&quot;:[0,{&quot;missionLabel&quot;:[0,&quot;Mission&quot;],&quot;missionLead&quot;:[0,&quot;The AI training industry runs on opacity - hidden pricing, black-box vetting, and fragmented tooling.&quot;],&quot;missionBody&quot;:[0,&quot;We started OpenTrain because we believed the people building the world&#39;s most important AI models deserved a marketplace that was transparent, fair, and actually worked for them.&quot;],&quot;platformPrefix&quot;:[0,&quot;We&#39;re building one platform where AI companies can&quot;],&quot;platformEmphasis&quot;:[0,&quot;find and hire vetted trainers at published prices&quot;],&quot;platformSuffix&quot;:[0,&quot;and where freelancers can manage their entire career across&quot;],&quot;platformLink&quot;:[0,&quot;20+ annotation platforms&quot;],&quot;platformTail&quot;:[0,&quot;from a single profile.&quot;],&quot;hiring&quot;:[0,&quot;We&#39;re hiring!&quot;],&quot;teamLabel&quot;:[0,&quot;Team&quot;],&quot;teamDescription&quot;:[0,&quot;A small team building the infrastructure for AI training talent.&quot;]}],&quot;teamMemberCopy&quot;:[0,{&quot;westonDotson&quot;:[0,{&quot;role&quot;:[0,&quot;Founder &amp; CEO&quot;],&quot;bio&quot;:[0,&quot;Started OpenTrain to bring transparency to the AI training industry. Previously built marketplaces and scaled distributed teams.&quot;]}],&quot;samSargado&quot;:[0,{&quot;role&quot;:[0,&quot;Human Data Lead&quot;],&quot;bio&quot;:[0,&quot;Leads human data operations at OpenTrain, ensuring quality and consistency across training data pipelines.&quot;]}],&quot;jonasLim&quot;:[0,{&quot;role&quot;:[0,&quot;Lead Developer&quot;],&quot;bio&quot;:[0,&quot;Leads development at OpenTrain, building the platform infrastructure and product experience.&quot;]}],&quot;shaznayLuna&quot;:[0,{&quot;role&quot;:[0,&quot;Lead Designer&quot;],&quot;bio&quot;:[0,&quot;Leads design at OpenTrain, shaping the visual identity and user experience across the platform.&quot;]}]}]}" ssr client="visible" opts="{&quot;name&quot;:&quot;AboutMissionTeam&quot;,&quot;value&quot;:{&quot;rootMargin&quot;:&quot;160px&quot;}}" await-children><section class="container"><div class="grid grid-cols-1 divide-y border border-t-0 md:grid-cols-2 md:divide-x md:divide-y-0"><div class="bordered-div-padding space-y-8"><div class="space-y-4 md:space-y-6"><h2 class="text-muted-foreground flex items-center gap-2 text-sm leading-snug font-medium md:text-base"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-heart size-5" aria-hidden="true"><path d="M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z"></path></svg>Mission</h2><p class="text-muted-foreground text-sm leading-relaxed md:text-base"><span class="text-foreground font-medium">The AI training industry runs on opacity - hidden pricing, black-box vetting, and fragmented tooling.</span> <!-- -->We started OpenTrain because we believed the people building the world&#x27;s most important AI models deserved a marketplace that was transparent, fair, and actually worked for them.</p><p class="text-muted-foreground text-sm leading-relaxed md:text-base">We&#x27;re building one platform where AI companies can<!-- --> <span class="text-foreground font-medium">find and hire vetted trainers at published prices</span> <!-- -->and where freelancers can manage their entire career across<!-- --> <a href="/" class="text-secondary font-medium hover:underline">20+ annotation platforms</a> <!-- -->from a single profile.</p></div></div><div class="bordered-div-padding relative space-y-8"><div class="bg-secondary text-secondary-foreground absolute top-0 right-0 px-3 py-2.5 text-sm leading-none font-medium">We&#x27;re hiring!</div><div class="space-y-4 md:space-y-6"><h2 class="text-muted-foreground flex items-center gap-2 text-sm leading-snug font-medium md:text-base"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-users size-5" aria-hidden="true"><path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"></path><path d="M16 3.128a4 4 0 0 1 0 7.744"></path><path d="M22 21v-2a4 4 0 0 0-3-3.87"></path><circle cx="9" cy="7" r="4"></circle></svg>Team</h2><p class="text-muted-foreground text-sm leading-relaxed md:text-base">
983A small team building the infrastructure for AI training talent.</p><div class="mt-6 grid grid-cols-2 gap-6 md:grid-cols-3"><div class="space-y-3"><div class="hidden md:block"><div class="flex cursor-pointer items-center gap-3" data-state="closed" data-slot="hover-card-trigger"><img src="/images/team-weston-dotson.jpeg" alt="Weston Dotson" width="32" height="32" loading="lazy" decoding="async" fetchPriority="low" class="rounded-full"/><div class="-space-y-0.5"><p class="text-sm font-medium md:text-base">Weston Dotson</p><p class="text-muted-foreground text-xs md:text-sm">Founder &amp; CEO</p><a href="mailto:[email protected]" class="text-muted-foreground text-xs hover:underline">[email protected]</a></div></div></div><div class="space-y-2 md:hidden"><div class="flex items-center gap-3"><img src="/images/team-weston-dotson.jpeg" alt="Weston Dotson" width="24" height="24" loading="lazy" decoding="async" fetchPriority="low" class="rounded-full"/><div class="-space-y-0.5"><p class="text-sm font-medium">Weston Dotson</p><p class="text-muted-foreground text-xs">Founder &amp; CEO</p><a href="mailto:[email protected]" class="text-muted-foreground text-xs hover:underline">[email protected]</a></div></div><div data-slot="card" class="bg-card text-card-foreground flex flex-col rounded-[6px] border py-4 gap-2"><div data-slot="card-content" class="px-4 text-muted-foreground text-sm leading-relaxed">Started OpenTrain to bring transparency to the AI training industry. Previously built marketplaces and scaled distributed teams.</div><div data-slot="card-footer" class="items-center px-4 [.border-t]:pt-4 flex justify-end gap-3"><a href="https://x.com/opentrainai" aria-label="Twitter" target="_blank" rel="noopener noreferrer"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" class="size-4" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8L200.7 275.5 26.8 48H172.4L272.9 180.9 389.2 48zM364.4 421.8h39.1L151.1 88h-42L364.4 421.8z"></path></svg></a><a href="https://www.linkedin.com/in/westondotson/" aria-label="LinkedIn" target="_blank" rel="noopener noreferrer"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 448 512" class="size-4" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z"></path></svg></a></div></div></div></div><div class="space-y-3"><div class="hidden md:block"><div class="flex cursor-pointer items-center gap-3" data-state="closed" data-slot="hover-card-trigger"><img src="/images/team-sam-sargado.png" alt="Sam Sargado" width="32" height="32" loading="lazy" decoding="async" fetchPriority="low" class="rounded-full"/><div class="-space-y-0.5"><p class="text-sm font-medium md:text-base">Sam Sargado</p><p class="text-muted-foreground text-xs md:text-sm">Human Data Lead</p></div></div></div><div class="space-y-2 md:hidden"><div class="flex items-center gap-3"><img src="/images/team-sam-sargado.png" alt="Sam Sargado" width="24" height="24" loading="lazy" decoding="async" fetchPriority="low" class="rounded-full"/><div class="-space-y-0.5"><p class="text-sm font-medium">Sam Sargado</p><p class="text-muted-foreground text-xs">Human Data Lead</p></div></div><div data-slot="card" class="bg-card text-card-foreground flex flex-col rounded-[6px] border py-4 gap-2"><div data-slot="card-content" class="px-4 text-muted-foreground text-sm leading-relaxed">Leads human data operations at OpenTrain, ensuring quality and consistency across training data pipelines.</div><div data-slot="card-footer" class="items-center px-4 [.border-t]:pt-4 flex justify-end gap-3"><a href="https://x.com/opentrainai" aria-label="Twitter" target="_blank" rel="noopener noreferrer"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" class="size-4" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8L200.7 275.5 26.8 48H172.4L272.9 180.9 389.2 48zM364.4 421.8h39.1L151.1 88h-42L364.4 421.8z"></path></svg></a></div></div></div></div><div class="space-y-3"><div class="hidden md:block"><div class="flex cursor-pointer items-center gap-3" data-state="closed" data-slot="hover-card-trigger"><img src="/images/team-jonas-lim.jpeg" alt="Jonas Lim" width="32" height="32" loading="lazy" decoding="async" fetchPriority="low" class="rounded-full"/><div class="-space-y-0.5"><p class="text-sm font-medium md:text-base">Jonas Lim</p><p class="text-muted-foreground text-xs md:text-sm">Lead Developer</p></div></div></div><div class="space-y-2 md:hidden"><div class="flex items-center gap-3"><img src="/images/team-jonas-lim.jpeg" alt="Jonas Lim" width="24" height="24" loading="lazy" decoding="async" fetchPriority="low" class="rounded-full"/><div class="-space-y-0.5"><p class="text-sm font-medium">Jonas Lim</p><p class="text-muted-foreground text-xs">Lead Developer</p></div></div><div data-slot="card" class="bg-card text-card-foreground flex flex-col rounded-[6px] border py-4 gap-2">
983<div data-slot="card-content" class="px-4 text-muted-foreground text-sm leading-relaxed">Leads development at OpenTrain, building the platform infrastructure and product experience.</div><div data-slot="card-footer" class="items-center px-4 [.border-t]:pt-4 flex justify-end gap-3"><a href="https://x.com/opentrainai" aria-label="Twitter" target="_blank" rel="noopener noreferrer"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" class="size-4" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8L200.7 275.5 26.8 48H172.4L272.9 180.9 389.2 48zM364.4 421.8h39.1L151.1 88h-42L364.4 421.8z"></path></svg></a></div></div></div></div><div class="space-y-3"><div class="hidden md:block"><div class="flex cursor-pointer items-center gap-3" data-state="closed" data-slot="hover-card-trigger"><img src="/images/team-shaznay-luna.jpeg" alt="Shaznay Luna" width="32" height="32" loading="lazy" decoding="async" fetchPriority="low" class="rounded-full"/><div class="-space-y-0.5"><p class="text-sm font-medium md:text-base">Shaznay Luna</p><p class="text-muted-foreground text-xs md:text-sm">Lead Designer</p></div></div></div><div class="space-y-2 md:hidden"><div class="flex items-center gap-3"><img src="/images/team-shaznay-luna.jpeg" alt="Shaznay Luna" width="24" height="24" loading="lazy" decoding="async" fetchPriority="low" class="rounded-full"/><div class="-space-y-0.5"><p class="text-sm font-medium">Shaznay Luna</p><p class="text-muted-foreground text-xs">Lead Designer</p></div></div><div data-slot="card" class="bg-card text-card-foreground flex flex-col rounded-[6px] border py-4 gap-2"><div data-slot="card-content" class="px-4 text-muted-foreground text-sm leading-relaxed">Leads design at OpenTrain, shaping the visual identity and user experience across the platform.</div><div data-slot="card-footer" class="items-center px-4 [.border-t]:pt-4 flex justify-end gap-3"><a href="https://x.com/opentrainai" aria-label="Twitter" target="_blank" rel="noopener noreferrer"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" class="size-4" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8L200.7 275.5 26.8 48H172.4L272.9 180.9 389.2 48zM364.4 421.8h39.1L151.1 88h-42L364.4 421.8z"></path></svg></a></div></div></div></div></div></div></div></div></section><!--astro:end--></astro-island> <astro-island uid="2purzr" prefix="r5" component-url="/_astro/about-investors-contributors.DWZAtGmE.js" component-export="AboutInvestorsContributors" renderer-url="/_astro/client.BB2I2q6P.js" props="{&quot;locale&quot;:[0,&quot;en&quot;],&quot;localizedCopy&quot;:[0,{&quot;label&quot;:[0,&quot;AI Trainer Earnings&quot;],&quot;description&quot;:[0,&quot;Examples of what AI trainers and data labelers on OpenTrain can earn across different domains and workflows.&quot;],&quot;specializations&quot;:[1,[[0,&quot;Mathematics &amp; Reasoning&quot;],[0,&quot;Code Generation &amp; Review&quot;],[0,&quot;Multilingual NLP&quot;],[0,&quot;RLHF &amp; Preference Tuning&quot;],[0,&quot;Medical &amp; Life Sciences&quot;],[0,&quot;Legal &amp; Policy Analysis&quot;],[0,&quot;Computer Vision &amp; Image Labeling&quot;],[0,&quot;Red Teaming &amp; Safety&quot;]]]}]}" ssr client="visible" opts="{&quot;name&quot;:&quot;AboutInvestorsContributors&quot;,&quot;value&quot;:{&quot;rootMargin&quot;:&quot;240px&quot;}}" await-children><section class="container"><div class="bordered-div-padding relative border border-t-0"><div class="absolute top-0 right-full -mt-0.25 hidden h-[calc(100%+2px)] w-[50vw] overflow-hidden border-y md:block"></div><div class="space-y-6 md:space-y-8 lg:space-y-10"><div class="space-y-4"><h2 class="text-muted-foreground flex items-center gap-2 text-sm leading-snug font-medium md:text-base"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-dollar-sign size-5" aria-hidden="true"><line x1="12" x2="12" y1="2" y2="22"></line><path d="M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"></path></svg>AI Trainer Earnings</h2><p class="max-w-3xl text-sm leading-relaxed text-muted-foreground md:text-base">Examples of what AI trainers and data labelers on OpenTrain can earn across different domains and workflows.</p></div><div class="relative max-h-[16rem] overflow-hidden mask-b-from-55% mask-b-to-100% md:max-h-[18rem] md:mask-b-from-60% md:mask-b-to-95%"><div class="grid grid-cols-1 gap-x-8 gap-y-6 sm:grid-cols-2 xl:grid-cols-3"><div class="flex items-start gap-3 transition-[opacity,filter] duration-300"><span data-slot="avatar" class="relative flex overflow-hidden rounded-full size-9 shrink-0 md:size-10"><span data-slot="avatar-fallback" class="bg-muted flex size-full items-center justify-center rounded-full">MG</span></span><div class="-space-y-0.5"><p class="text-sm font-medium md:text-base">Maria Gonzalez</p><p class="text-muted-foreground text-xs md:text-sm">Mathematics &amp; Reasoning</p><p class="text-secondary text-xs font-medium md:text-sm">$52,000+</p></div></div><div class="flex items-start gap-3 transition-[opacity,filter] duration-300"><span data-slot="avatar" class="relative flex overflow-hidden rounded-full size-9 shrink-0 md:size-10"><span data-slot="avatar-fallback" class="bg-muted flex size-full items-center justify-center rounded-full">WZ</span></span><div class="-space-y-0.5"><p class="text-sm font-medium md:text-base">Wei Zhang</p><p class="text-muted-foreground text-xs md:text-sm">Code Generation &amp; Review</p><p class="text-secondary text-xs font-medium md:text-sm">$48,000+</p></div></div><div class="flex items-start gap-3 transition-[opacity,filter] duration-300"><span data-slot="avatar" class="relative flex overflow-hidden rounded-full size-9 shrink-0 md:size-10"><span data-slot="avatar-fallback" class="bg-muted flex size-full items-center justify-center rounded-full">PP</span></span><div class="-space-y-0.5"><p class="text-sm font-medium md:text-base">Priya Patel</p><p class="text-muted-foreground text-xs md:text-sm">Multilingual NLP</p><p class="text-secondary text-xs font-medium md:text-sm">$18,000+</p></div></div><div class="flex items-start gap-3 transition-[opacity,filter] duration-300"><span data-slot="avatar" class="relative flex overflow-hidden rounded-full size-9 shrink-0 md:size-10"><span data-slot="avatar-fallback" class="bg-muted flex size-full items-center justify-center rounded-full">
983DA</span></span><div class="-space-y-0.5"><p class="text-sm font-medium md:text-base">Daniel Adeyemi</p><p class="text-muted-foreground text-xs md:text-sm">RLHF &amp; Preference Tuning</p><p class="text-secondary text-xs font-medium md:text-sm">$35,000+</p></div></div><div class="flex items-start gap-3 transition-[opacity,filter] duration-300 opacity-80 blur-[0.2px]"><span data-slot="avatar" class="relative flex overflow-hidden rounded-full size-9 shrink-0 md:size-10"><span data-slot="avatar-fallback" class="bg-muted flex size-full items-center justify-center rounded-full">AL</span></span><div class="-space-y-0.5"><p class="text-sm font-medium md:text-base">Anna Lindqvist</p><p class="text-muted-foreground text-xs md:text-sm">Medical &amp; Life Sciences</p><p class="text-secondary text-xs font-medium md:text-sm">$27,000+</p></div></div><div class="flex items-start gap-3 transition-[opacity,filter] duration-300 opacity-80 blur-[0.2px]"><span data-slot="avatar" class="relative flex overflow-hidden rounded-full size-9 shrink-0 md:size-10"><span data-slot="avatar-fallback" class="bg-muted flex size-full items-center justify-center rounded-full">CM</span></span><div class="-space-y-0.5"><p class="text-sm font-medium md:text-base">Carlos Mendoza</p><p class="text-muted-foreground text-xs md:text-sm">Legal &amp; Policy Analysis</p><p class="text-secondary text-xs font-medium md:text-sm">$14,000+</p></div></div><div class="flex items-start gap-3 transition-[opacity,filter] duration-300 opacity-50 blur-[0.8px]"><span data-slot="avatar" class="relative flex overflow-hidden rounded-full size-9 shrink-0 md:size-10"><span data-slot="avatar-fallback" class="bg-muted flex size-full items-center justify-center rounded-full">YS</span></span><div class="-space-y-0.5"><p class="text-sm font-medium md:text-base">Yuki Sato</p><p class="text-muted-foreground text-xs md:text-sm">Computer Vision &amp; Image Labeling</p><p class="text-secondary text-xs font-medium md:text-sm">$22,000+</p></div></div><div class="flex items-start gap-3 transition-[opacity,filter] duration-300 opacity-50 blur-[0.8px]"><span data-slot="avatar" class="relative flex overflow-hidden rounded-full size-9 shrink-0 md:size-10"><span data-slot="avatar-fallback" class="bg-muted flex size-full items-center justify-center rounded-full">RM</span></span><div class="-space-y-0.5"><p class="text-sm font-medium md:text-base">Ryan Mitchell</p><p class="text-muted-foreground text-xs md:text-sm">Red Teaming &amp; Safety</p><p class="text-secondary text-xs font-medium md:text-sm">$41,000+</p></div></div></div><div class="pointer-events-none absolute inset-x-0 bottom-0 h-28 bg-gradient-to-t from-background via-background/78 to-transparent backdrop-blur-[1.5px]"></div></div></div></div></section><!--astro:end--></astro-island> </div>  </main> <astro-island uid="Z5R2Gk" prefix="r9" component-url="/_astro/footer.BnvjuWbJ.js" component-export="default" renderer-url="/_astro/client.BB2I2q6P.js" props="{&quot;expertCount&quot;:[0,&quot;495,000+&quot;],&quot;locale&quot;:[0,&quot;en&quot;],&quot;hideTalentRail&quot;:[0,false],&quot;hidePricingSection&quot;:[0,false],&quot;hideTrustpilot&quot;:[0,false]}" ssr client="visible" opts="{&quot;name&quot;:&quot;Footer&quot;,&quot;value&quot;:{&quot;rootMargin&quot;:&quot;320px&quot;}}" await-children><footer data-navbar-theme="dark" class="overflow-hidden dark bg-background text-foreground"><div class="container"><div class="bordered-div-padding border-x"><h2 class="lg:text-4xxl font-weight-display mt-6 text-xl md:mt-14 md:text-3xl lg:mt-40">The #1 talent network for AI training.</h2></div><div class="grid divide-y border md:grid-cols-2 md:divide-x md:divide-y-0"><div class="bordered-div-padding relative flex flex-col gap-6 md:gap-10"><canvas class="pointer-events-none h-full w-full absolute top-0 left-full -mt-0.25 hidden !h-[calc(100%+2px)] md:block"></canvas><div><h3 class="font-weight-display text-lg md:text-2xl lg:text-3xl">Self-Service</h3><p class="font-weight-display mt-6 text-base md:text-xl">10% marketplace fee</p></div><ul class="space-y-6"><li class="flex items-start gap-2"><span class="flex-shrink-0"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-upload size-5" aria-hidden="true"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="17 8 12 3 7 8"></polyline><line x1="12" x2="12" y1="3" y2="15"></line></svg></span><span class="text-muted-foreground font-medium">Post a job, get a curated shortlist</span></li><li class="flex items-start gap-2"><span class="flex-shrink-0"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-search size-5" aria-hidden="true"><path d="m21 21-4.34-4.34"></path><circle cx="11" cy="11" r="8"></circle></svg></span><span class="text-muted-foreground font-medium">Browse and hire from 495,000+ experts</span></li><li class="flex items-start gap-2"><span class="flex-shrink-0"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-users size-5" aria-hidden="true"><path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"></path><path d="M16 3.128a4 4 0 0 1 0 7.744"></path><path d="M22 21v-2a4 4 0 0 0-3-3.87"></path><circle cx="9" cy="7" r="4"></circle></svg></span><span class="text-muted-foreground font-medium">Manage your team directly on-platform</span></li><li class="flex items-start gap-2"><span class="flex-shrink-0"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-credit-card size-5" aria-hidden="true"><rect width="20" height="14" x="2" y="5" rx="2"></rect>
983<line x1="2" x2="22" y1="10" y2="10"></line></svg></span><span class="text-muted-foreground font-medium">Pay talent through OpenTrain</span></li></ul><a href="https://app.opentrain.ai/?key=signup&amp;q=hire" target="_blank" rel="noopener noreferrer" data-slot="button" class="inline-flex items-center cursor-pointer justify-center tracking-normal whitespace-nowrap rounded-md font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg:not([class*=&#x27;size-&#x27;])]:size-4 shrink-0 [&amp;_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive h-10 md:h-12 px-6 md:px-7 py-2 gap-3.5 text-sm md:text-base font-weight-display mt-auto mb-0 w-fit bg-border hover:bg-border/80 text-foreground">Post a Job</a></div><div class="bordered-div-padding relative flex flex-col gap-6 md:gap-10"><div class="bg-secondary text-secondary-foreground absolute top-0 right-0 px-3 py-2.5 text-sm leading-none font-medium">Most popular</div><div><h3 class="font-weight-display text-lg md:text-2xl lg:text-3xl">Managed Service</h3><p class="font-weight-display mt-6 text-base md:text-xl">20% management fee</p></div><ul class="space-y-6"><li class="flex items-start gap-2"><span class="flex-shrink-0"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-headphones size-5" aria-hidden="true"><path d="M3 14h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-7a9 9 0 0 1 18 0v7a2 2 0 0 1-2 2h-1a2 2 0 0 1-2-2v-3a2 2 0 0 1 2-2h3"></path></svg></span><span class="text-muted-foreground font-medium">Dedicated program lead for your project</span></li><li class="flex items-start gap-2"><span class="flex-shrink-0"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-user-search size-5" aria-hidden="true"><circle cx="10" cy="7" r="4"></circle><path d="M10.3 15H7a4 4 0 0 0-4 4v2"></path><circle cx="17" cy="17" r="3"></circle><path d="m21 21-1.9-1.9"></path></svg></span><span class="text-muted-foreground font-medium">We source, vet, and onboard your team</span></li><li class="flex items-start gap-2"><span class="flex-shrink-0"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-shield-check size-5" aria-hidden="true"><path d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"></path><path d="m9 12 2 2 4-4"></path></svg></span><span class="text-muted-foreground font-medium">Live proctored testing and interviews</span></li><li class="flex items-start gap-2"><span class="flex-shrink-0"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-clipboard-check size-5" aria-hidden="true"><rect width="8" height="4" x="8" y="2" rx="1" ry="1"></rect><path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"></path><path d="m9 14 2 2 4-4"></path></svg></span><span class="text-muted-foreground font-medium">Ongoing QA and performance management</span></li><li class="flex items-start gap-2"><span class="flex-shrink-0"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-circle-check size-5" aria-hidden="true"><circle cx="12" cy="12" r="10"></circle><path d="m9 12 2 2 4-4"></path></svg></span><span class="text-muted-foreground font-medium">Works inside your existing tools</span></li></ul><a href="/get-a-quote/" data-slot="button" class="inline-flex items-center cursor-pointer justify-center tracking-normal whitespace-nowrap rounded-md font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg:not([class*=&#x27;
983size-&#x27;])]:size-4 shrink-0 [&amp;_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive bg-primary text-primary-foreground hover:bg-primary/90 h-10 md:h-12 px-6 md:px-7 py-2 gap-3.5 text-sm md:text-base font-weight-display mt-auto mb-0 w-fit">Get a Quote</a></div></div><div class="grid grid-cols-1 border md:grid-cols-3"><div class="bordered-div-padding flex items-center border-b md:border-r md:border-b-0"><p class="font-weight-display text-base leading-snug md:text-lg">Join the #1 platform for finding AI training and data labeling work.</p></div><a href="/become-freelancer/" class="bordered-div-padding group flex items-center gap-4 border-b transition-colors hover:bg-muted/50 md:border-r md:border-b-0"><div class="flex -space-x-2 shrink-0" aria-hidden="true"><span class="relative inline-flex size-8 shrink-0 overflow-hidden rounded-full ring-2 ring-background" aria-hidden="true"><span class="h-full w-full bg-cover bg-center" style="background-image:url(&quot;/images/avatars-128/avatar-44.webp&quot;)"></span></span><span class="relative inline-flex size-8 shrink-0 overflow-hidden rounded-full ring-2 ring-background" aria-hidden="true"><span class="h-full w-full bg-cover bg-center" style="background-image:url(&quot;/images/avatars-128/avatar-45.webp&quot;)"></span></span><span class="relative inline-flex size-8 shrink-0 overflow-hidden rounded-full ring-2 ring-background" aria-hidden="true"><span class="h-full w-full bg-cover bg-center" style="background-image:url(&quot;/images/avatars-128/avatar-46.webp&quot;)"></span></span><span class="relative inline-flex size-8 shrink-0 overflow-hidden rounded-full ring-2 ring-background" aria-hidden="true"><span class="h-full w-full bg-cover bg-center" style="background-image:url(&quot;/images/avatars-128/avatar-47.webp&quot;)"></span></span></div><div class="min-w-0"><p class="text-sm font-medium">Freelance AI Trainer?</p><p class="text-muted-foreground text-xs">Join<!-- --> <!-- -->495,000+<!-- --> <!-- -->freelancers<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right ml-1 inline size-3 transition-transform group-hover:translate-x-0.5" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></p></div></a><a href="/list-your-data-labeling-company/" class="bordered-div-padding group flex items-center gap-4 transition-colors hover:bg-muted/50"><div class="flex -space-x-2 shrink-0"><div class="flex size-8 items-center justify-center rounded-full ring-2 ring-background bg-blue-600"><svg viewBox="0 0 32 32" fill="none" class="size-5 text-white"><path d="M6 20c4-8 10-12 20-12" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"></path><path d="M6 16c4-6 10-9 16-8" stroke="currentColor" stroke-width="2" stroke-linecap="round" opacity="0.6"></path></svg></div><div class="flex size-8 items-center justify-center rounded-full ring-2 ring-background bg-violet-600"><svg viewBox="0 0 32 32" fill="none" class="size-5 text-white"><path d="M16 4L27 10V22L16 28L5 22V10L16 4Z" stroke="currentColor" stroke-width="2"></path><circle cx="16" cy="16" r="3" fill="currentColor"></circle></svg></div><div class="flex size-8 items-center justify-center rounded-full ring-2 ring-background bg-amber-600"><svg viewBox="0 0 32 32" fill="none" class="size-5 text-white"><circle cx="12" cy="16" r="7" stroke="currentColor" stroke-width="2"></circle><circle cx="20" cy="16" r="7" stroke="currentColor" stroke-width="2"></circle></svg></div><div class="flex size-8 items-center justify-center rounded-full ring-2 ring-background bg-teal-600"><svg viewBox="0 0 32 32" fill="none" class="size-5 text-white"><rect x="6" y="6" width="8" height="8" rx="2" fill="currentColor"></rect><rect x="18" y="6" width="8" height="8" rx="2" fill="currentColor" opacity="0.6"></rect><rect x="6" y="18" width="8" height="8" rx="2" fill="currentColor" opacity="0.35"></rect><rect x="18" y="18" width="8" height="8" rx="2" fill="currentColor" opacity="0.8"></rect></svg></div></div><div class="min-w-0"><p class="text-sm font-medium">Data Labeling Company?</p><p class="text-muted-foreground text-xs">Find clients and recruit talent<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right ml-1 inline size-3 transition-transform group-hover:translate-x-0.5" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></p></div></a></div><div class="relative h-16 border-b bg-background md:h-24"><div class="absolute inset-0 mix-blend-lighten opacity-75" aria-hidden="true" data-footer-shader-strip="true"><div class="absolute inset-0 bg-[radial-gradient(ellipse_65%_85%_at_52%_50%,rgba(255,255,255,0.18),rgba(255,255,255,0.06)_34%,transparent_68%),radial-gradient(circle_at_28%_48%,rgba(69,93,255,0.14),transparent_28%),linear-gradient(90deg,rgba(255,255,255,0.08),transparent_34%,rgba(255,255,255,0.06))]"></div><div class="absolute inset-0 opacity-35 [background-image:repeating-radial-gradient(ellipse_at_center,rgba(255,255,255,0.12)_0_1px,transparent_2px_78px)]"></div></div><div class="pointer-events-none absolute inset-0 z-10 border-x border-border"></div></div><div class="border-x border-b"><div class="bordered-div-padding"><nav class="flex flex-col gap-9 lg:flex-row"><div class="flex w-full flex-col gap-6 lg:w-1/4"><a href="/" class="flex items-center gap-2"><img src="/images/opentrain-icon-white.svg" alt="OpenTrain" loading="lazy" decoding="async" class="size-6"/><span class="text-base font-semibold">OpenTrain AI</span></a><div class="flex items-center gap-2">
983<a href="https://app.opentrain.ai/?key=login" target="_blank" rel="noopener noreferrer" data-slot="button" class="inline-flex items-center cursor-pointer justify-center tracking-normal whitespace-nowrap font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg:not([class*=&#x27;size-&#x27;])]:size-4 shrink-0 [&amp;_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50 h-8 rounded-md gap-1.5 px-3 has-[&gt;svg]:px-2.5 text-xs">Log In</a><a href="https://app.opentrain.ai/?key=signup" target="_blank" rel="noopener noreferrer" data-slot="button" class="inline-flex items-center cursor-pointer justify-center tracking-normal whitespace-nowrap font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg:not([class*=&#x27;size-&#x27;])]:size-4 shrink-0 [&amp;_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive bg-primary text-primary-foreground hover:bg-primary/90 h-8 rounded-md gap-1.5 px-3 has-[&gt;svg]:px-2.5 text-xs">Create Account</a></div></div><div class="grid w-full grid-cols-2 gap-6 md:grid-cols-3 lg:grid-cols-5"><ul class="flex flex-col items-start gap-2"><li><p class="text-sm font-semibold">Platform</p></li><li><a href="/how-it-works/" class="text-muted-foreground text-sm transition-colors hover:text-foreground">How It Works</a></li><li><a href="/pricing/" class="text-muted-foreground text-sm transition-colors hover:text-foreground">Pricing</a></li><li><a href="/solutions/" class="text-muted-foreground text-sm transition-colors hover:text-foreground">Solutions</a></li><li><a href="/integrations/" class="text-muted-foreground text-sm transition-colors hover:text-foreground">Integrations</a></li><li><a href="/managed-service/" class="text-muted-foreground text-sm transition-colors hover:text-foreground">Managed Service</a></li><li><a href="/hire-freelance-data-labelers/" class="text-muted-foreground text-sm transition-colors hover:text-foreground">Post a Job</a></li><li><a href="/get-a-quote/" class="text-muted-foreground text-sm transition-colors hover:text-foreground">Get a Quote</a></li></ul><ul class="flex flex-col items-start gap-2"><li><p class="text-sm font-semibold">LLM &amp; Agents</p></li><li><a href="/solutions/rlhf-and-preference-data/" class="text-muted-foreground text-sm transition-colors hover:text-foreground">RLHF &amp; Preference Data</a></li><li><a href="/solutions/ai-red-teaming/" class="text-muted-foreground text-sm transition-colors hover:text-foreground">Red Teaming</a></li><li><a href="/solutions/llm-evaluation/" class="text-muted-foreground text-sm transition-colors hover:text-foreground">LLM Evaluation</a></li><li><a href="/solutions/supervised-fine-tuning/" class="text-muted-foreground text-sm transition-colors hover:text-foreground">Supervised Fine-Tuning</a></li><li><a href="/solutions/hallucination-audits/" class="text-muted-foreground text-sm transition-colors hover:text-foreground">Hallucination Audits</a></li><li><a href="/llm-agent-solutions/" class="text-muted-foreground text-sm transition-colors hover:text-foreground">View All →</a></li></ul><ul class="flex flex-col items-start gap-2"><li><p class="text-sm font-semibold">Data Labeling</p></li><li><a href="/solutions/image-annotation/" class="text-muted-foreground text-sm transition-colors hover:text-foreground">Image Annotation</a></li><li><a href="/solutions/text-annotation/" class="text-muted-foreground text-sm transition-colors hover:text-foreground">Text Annotation</a></li><li><a href="/solutions/video-annotation/" class="text-muted-foreground text-sm transition-colors hover:text-foreground">Video Annotation</a></li><li><a href="/solutions/document-annotation/" class="text-muted-foreground text-sm transition-colors hover:text-foreground">Document Annotation</a></li><li><a href="/solutions/segmentation/" class="text-muted-foreground text-sm transition-colors hover:text-foreground">Segmentation</a></li><li><a href="/data-labeling-solutions/" class="text-muted-foreground text-sm transition-colors hover:text-foreground">View All →</a></li></ul><ul class="flex flex-col items-start gap-2"><li><p class="text-sm font-semibold">For AI Trainers</p></li><li><a href="/become-freelancer/" class="text-muted-foreground text-sm transition-colors hover:text-foreground">Become a Freelance AI Trainer</a></li><li><a href="/ai-training-careers/" class="text-muted-foreground text-sm transition-colors hover:text-foreground">AI Training Careers</a></li><li><a href="/list-your-data-labeling-company/" class="text-muted-foreground text-sm transition-colors hover:text-foreground">List Your Company</a></li></ul><ul class="flex flex-col items-start gap-2"><li><p class="text-sm font-semibold">Company</p></li><li><a href="/about/" class="text-muted-foreground text-sm transition-colors hover:text-foreground">About Us</a></li><li><a href="/contact/" class="text-muted-foreground text-sm transition-colors hover:text-foreground">Contact</a></li><li><a href="/docs/" class="text-muted-foreground text-sm transition-colors hover:text-foreground">Docs</a></li><li><a href="/papers/" class="text-muted-foreground text-sm transition-colors hover:text-foreground">Paper2Code Finder</a></li><li><a href="/tools/hf-eval-papers/" class="text-muted-foreground text-sm transition-colors hover:text-foreground">HF Eval Paper Explorer</a></li></ul></div></nav></div></div><div class="bordered-div-padding flex flex-col items-start gap-4 border-x border-b md:flex-row md:items-center md:justify-between"><div class="flex w-full flex-col items-start gap-4 sm:flex-row sm:items-center sm:gap-6 md:w-auto"><div class="box-content w-full max-w-[300px] text-left" style="min-height:24px"><div class="trustpilot-widget" data-trustpilot-loader="client" data-trustpilot-theme="dark" data-locale="en-US" data-template-id="5419b732fbfb950b10de65e5" data-businessunit-id="67db1b3ef68b69ff84c46376" data-style-height="24px" data-style-width="100%" data-theme="dark" data-token="83c1fde0-29c2-4546-9cea-4691c7a2ea91"><a href="https://www.trustpilot.com/review/opentrain.ai" target="_blank" rel="noopener noreferrer nofollow">Trustpilot</a></div></div><a href="https://x.com/OpenTrainAI" class="text-muted-foreground transition-colors hover:text-foreground" target="_blank" rel="noopener noreferrer" aria-label="Twitter"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 512 512" class="size-4" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8L200.7 275.5 26.8 48H172.4L272.9 180.9 389.2 48zM364.4 421.8h39.1L151.1 88h-42L364.4 421.8z"></path></svg></a><a href="https://www.linkedin.com/company/opentrain/" class="text-muted-foreground transition-colors hover:text-foreground" target="_blank" rel="noopener noreferrer" aria-label="LinkedIn"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 448 512" class="size-4" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z"></path></svg></a></div><div class="flex flex-wrap items-center gap-x-3 gap-y-2"><p class="text-muted-foreground text-sm">© <!-- -->2026<!-- --> OpenTrain AI</p>
983<span class="text-muted-foreground/40">·</span><a href="/privacy/" class="text-muted-foreground text-sm transition-colors hover:text-foreground">Privacy</a><span class="text-muted-foreground/40">·</span><probo-settings-link class="text-muted-foreground text-sm transition-colors hover:text-foreground">Cookies</probo-settings-link><span class="text-muted-foreground/40">·</span><a href="/terms-of-service/" class="text-muted-foreground text-sm transition-colors hover:text-foreground">Terms</a><span class="text-muted-foreground/40">·</span><a href="/security/" class="text-muted-foreground text-sm transition-colors hover:text-foreground">Security</a></div></div></div></footer><!--astro:end--></astro-island> 
983<script src="https://cdn.jsdelivr.net/npm/@probo/[email protected]/dist/cookie-banner.iife.js" data-banner-id="AXtEUajPAAEASwAAAZ9Pg0_pItsdtOXQ" data-base-url="https://probo-c4a9.onrender.com/api/cookie-banner/v1/" data-position="bottom-right"></script>
983 
983<script>
984  // Hide the SDK's hardcoded "Privacy by Probo" footer link. The SDK is MIT
985  // (attribution belongs in source/OSS notices, not the UI) and exposes no
986  // config flag for this, so we inject a style into its open shadow root once
987  // the custom element mounts.
988  (() => {
989    const hideBranding = () => {
990      const el = document.querySelector("probo-cookie-banner");
991      if (!el || !el.shadowRoot) return false;
992      if (!el.shadowRoot.querySelector("style[data-ot-hide-branding]")) {
993        const style = document.createElement("style");
994        style.setAttribute("data-ot-hide-branding", "");
995        style.textContent = "[data-branding] { display: none !important; }";
996        el.shadowRoot.appendChild(style);
997      }
998      return true;
999    };
1000    const start = () => {
1001      if (hideBranding()) return;
1002      let tries = 0;
1003      const timer = setInterval(() => {
1004        if (hideBranding() || ++tries > 100) clearInterval(timer);
1005      }, 100);
1006    };
1007    if (document.readyState === "loading") {
1008      document.addEventListener("DOMContentLoaded", start, { once: true });
1009    } else {
1010      start();
1011    }
1012  })();
1013</script>
1013  
1013<script>(function(){const trustpilotTokens = {"light":"28174596-7ea1-4f47-9370-403a79ba7198","dark":"83c1fde0-29c2-4546-9cea-4691c7a2ea91"};
1014const trustpilotScriptId = "trustpilot-widget-script";
1015const trustpilotScriptSrc = "https://widget.trustpilot.com/bootstrap/v5/tp.widget.bootstrap.min.js";
1016
1017      (() => {
1018        const scriptId = trustpilotScriptId;
1019        const scriptSrc = trustpilotScriptSrc;
1020        const reducedMotion = window.matchMedia?.('(prefers-reduced-motion: reduce)').matches ?? false;
1021        const thirdPartyDelayMs = reducedMotion ? 12000 : 4000;
1022        const runWhenIdle = (cb) => {
1023          if ('requestIdleCallback' in window) { window.requestIdleCallback(cb, { timeout: 3000 }); return; }
1024          window.setTimeout(cb, 800);
1025        };
1026        const runAfterThirdPartyDelay = (cb) => window.setTimeout(() => runWhenIdle(cb), thirdPartyDelayMs);
1027        const loadScript = () => {
1028          if (window.Trustpilot?.loadFromElement) return Promise.resolve();
1029          const existing = document.getElementById(scriptId);
1030          if (existing) {
1031            return new Promise((resolve) => {
1032              existing.addEventListener('load', resolve, { once: true });
1033              existing.addEventListener('error', resolve, { once: true });
1034              window.setTimeout(resolve, 2500);
1035            });
1036          }
1037          const s = document.createElement('script');
1038          s.id = scriptId; s.src = scriptSrc; s.async = true;
1039          const loaded = new Promise((resolve) => {
1040            s.addEventListener('load', resolve, { once: true });
1041            s.addEventListener('error', resolve, { once: true });
1042            window.setTimeout(resolve, 2500);
1043          });
1044          document.head.appendChild(s);
1045          return loaded;
1046        };
1047        // Trustpilot renders inside an iframe, so light/dark is a widget token +
1048        // `data-theme` pair that has to be correct *before* the widget loads.
1049        // Several heroes ship as static (non-hydrated) markup, so the theme is
1050        // resolved here rather than in React. Returns true when it changed.
1051        const syncWidgetTheme = (widget) => {
1052          const mode = widget.dataset.trustpilotTheme || 'auto';
1053          const theme = mode === 'light' || mode === 'dark'
1054            ? mode
1055            : (document.documentElement.classList.contains('dark') ? 'dark' : 'light');
1056          const token = trustpilotTokens[theme];
1057          if (widget.dataset.theme === theme && widget.dataset.token === token) return false;
1058          widget.dataset.theme = theme;
1059          widget.dataset.token = token;
1060          return true;
1061        };
1062        const allWidgets = () => [...document.querySelectorAll('.trustpilot-widget')];
1063        // `loadFromElement` reads `this`, so it has to stay attached to Trustpilot.
1064        const renderWidget = (widget) => {
1065          if (!window.Trustpilot?.loadFromElement) return false;
1066          try {
1067            window.Trustpilot.loadFromElement(widget, true);
1068            widget.dataset.trustpilotLoaded = 'true';
1069            return true;
1070          } catch {
1071            // Trustpilot can throw while its internal modules are still booting.
1072            // Retrying on the next idle/window load is enough, and prevents
1073            // third-party widget internals from failing site reliability tests.
1074            return false;
1075          }
1076        };
1077        const syncThemes = () => {
1078          allWidgets().forEach((widget) => {
1079            if (!syncWidgetTheme(widget)) return;
1080            // Rendered (or mid-render) widgets need an explicit redraw to pick up
1081            // the new token. Before the script loads there is nothing to redraw:
1082            // the pending load reads the fresh attributes on its own.
1083            if (window.Trustpilot?.loadFromElement) renderWidget(widget);
1084          });
1085        };
1086        const loadWidgets = (targetWidgets) => {
1087          if (!window.Trustpilot?.loadFromElement) return false;
1088          let loaded = false;
1089          targetWidgets.forEach((widget) => {
1090            if (widget.dataset.trustpilotLoaded === 'true') return;
1091            syncWidgetTheme(widget);
1092            if (renderWidget(widget)) loaded = true;
1093          });
1094          return loaded;
1095        };
1096        const init = () => {
1097          const widgets = allWidgets().filter((w) =>
1097 w.dataset.trustpilotLoaded !== 'true');
1098          if (!widgets.length) return;
1099          const ensureLoaded = (targetWidgets) => {
1100            if (!targetWidgets.length) return;
1101            void loadScript().then(() => loadWidgets(targetWidgets));
1102          };
1103          const observer = new IntersectionObserver((entries) => {
1104            const visibleWidgets = entries.filter((e) => e.isIntersecting).map((e) => e.target);
1105            if (visibleWidgets.length) {
1106              ensureLoaded(visibleWidgets);
1107              visibleWidgets.forEach((widget) => observer.unobserve(widget));
1108            }
1109          }, { rootMargin: '400px 0px' });
1110          widgets.forEach((w) => observer.observe(w));
1111          ensureLoaded(widgets.filter((w) => w.getBoundingClientRect().top < window.innerHeight + 200));
1112        };
1113        const schedule = () => runAfterThirdPartyDelay(init);
1114        if (document.readyState === 'complete') schedule();
1115        else window.addEventListener('load', schedule, { once: true });
1116        document.addEventListener('astro:page-load', schedule);
1117
1118        // Keep every widget (static, hydrated, or mounted later) on the token
1119        // that matches the active site theme, including after a theme toggle.
1120        syncThemes();
1121        new MutationObserver(syncThemes).observe(document.documentElement, {
1122          attributes: true,
1123          attributeFilter: ['class'],
1124        });
1125        document.addEventListener('astro:page-load', syncThemes);
1126      })();
1127    })();</script>
1127<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"6b4ec40a2018405c963e58576cb9c525","spa":2}' crossorigin="anonymous"></script>
1127
1128</body> </html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.