PageSourceSearch

https://ckcollab.com/case-study/spek-diagnostics

html ckcollab.com collected 2026-10-04 12:37:13 UTC 41,151 bytes, 2 lines download raw bytes

1<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8" data-next-head=""/><meta name="description" content="Discover CKC&#x27;s innovative web and app development solutions, blending cutting-edge technology and personalized service to bring your ideas to life." data-next-head=""/><meta name="viewport" content="width=device-width, initial-scale=1" data-next-head=""/><meta property="og:title" content="CKCollab" data-next-head=""/><meta property="og:description" content="Discover CKC&#x27;s innovative web and app development solutions, blending cutting-edge technology and personalized service to bring your ideas to life." data-next-head=""/><meta property="og:image" content="https://ckcollab.com/assets/images/spaceships.png" data-next-head=""/><meta property="og:url" content="https://ckcollab.com" data-next-head=""/><meta property="og:type" content="website" data-next-head=""/><meta property="og:site_name" content="CKCollab" data-next-head=""/><meta name="twitter:card" content="summary_large_image" data-next-head=""/><meta name="twitter:title" content="CKCollab" data-next-head=""/><meta name="twitter:description" content="Discover CKC&#x27;s innovative web and app development solutions, blending cutting-edge technology and personalized service to bring your ideas to life." data-next-head=""/><meta name="twitter:image" content="https://ckcollab.com/assets/images/spaceships.png" data-next-head=""/><meta name="twitter:site" content="@Ckcollab" data-next-head=""/><meta name="twitter:creator" content="@Ckcollab" data-next-head=""/><link rel="canonical" href="https://ckcollab.com" data-next-head=""/><link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" data-next-head=""/><link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png" data-next-head=""/><link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png" data-next-head=""/><title data-next-head="">CKCollab - Spek Diagnostics</title>
1<script type="application/ld+json" data-next-head="">{"@context":"https://schema.org","@type":"TechArticle","headline":"Spek Diagnostics","description":"Spek Diagnostics is a Garden City, Idaho dermatopathology lab. We built a custom whole-slide viewer pathologists can actually diagnose from, and we are adding AI image analysis so the software can help interpret tissue, not only pan and zoom.","image":"https://ckcollab.com/_next/static/media/spek-diagnostics.1qjy1m7b-6de_.png","datePublished":"2024-02-01T00:00:00.000Z","author":{"@type":"Organization","name":"CKCollab","url":"https://ckcollab.com"},"publisher":{"@type":"Organization","name":"CKCollab","url":"https://ckcollab.com","logo":{"@type":"ImageObject","url":"https://ckcollab.com/assets/logos/logo.png"}},"mainEntityOfPage":{"@type":"WebPage","@id":"https://ckcollab.com/case-study/spek-diagnostics"}}</script>
1<link rel="preload" as="image" imageSrcSet="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fhoard-of-astros.0j6_hsxln_9nl.png&amp;w=640&amp;q=75 640w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fhoard-of-astros.0j6_hsxln_9nl.png&amp;w=750&amp;q=75 750w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fhoard-of-astros.0j6_hsxln_9nl.png&amp;w=828&amp;q=75 828w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fhoard-of-astros.0j6_hsxln_9nl.png&amp;w=1080&amp;q=75 1080w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fhoard-of-astros.0j6_hsxln_9nl.png&amp;w=1200&amp;q=75 1200w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fhoard-of-astros.0j6_hsxln_9nl.png&amp;w=1920&amp;q=75 1920w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fhoard-of-astros.0j6_hsxln_9nl.png&amp;w=2048&amp;q=75 2048w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fhoard-of-astros.0j6_hsxln_9nl.png&amp;w=3840&amp;q=75 3840w" imageSizes="100vw" data-next-head=""/><link rel="preload" as="image" imageSrcSet="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fspek-diagnostics.1qjy1m7b-6de_.png&amp;w=1200&amp;q=75 1x, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fspek-diagnostics.1qjy1m7b-6de_.png&amp;w=3840&amp;q=75 2x" data-next-head=""/><link rel="preload" href="/_next/static/media/0c89a48fa5027cee-s.p.2cyn07wtgehh0.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/_next/static/media/dc0d9adbac686440-s.p.3cik_s2si-ft-.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/_next/static/media/8d05cfa5faa8406c-s.p.1s123piy9_v1m.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/_next/static/chunks/07knkvlffn2l4.css" as="style"/><link rel="stylesheet" href="/_next/static/chunks/07knkvlffn2l4.css" data-n-g=""/><noscript data-n-css=""></noscript>
1<script src="/_next/static/chunks/1vb1s0-rytlxj.js" defer="" type="ae16f152e58f3ad0fab8cc55-text/javascript"></script>
1<script src="/_next/static/chunks/3fq2vx3waqh5f.js" defer="" type="ae16f152e58f3ad0fab8cc55-text/javascript"></script>
1<script src="/_next/static/chunks/43oje5n-612bo.js" defer="" type="ae16f152e58f3ad0fab8cc55-text/javascript"></script>
1<script src="/_next/static/chunks/09s6gpq-94xoj.js" defer="" type="ae16f152e58f3ad0fab8cc55-text/javascript"></script>
1<script src="/_next/static/chunks/turbopack-0jiqfe4s69593.js" defer="" type="ae16f152e58f3ad0fab8cc55-text/javascript"></script>
1<script src="/_next/static/chunks/2ilfaovp73evi.js" defer="" type="ae16f152e58f3ad0fab8cc55-text/javascript"></script>
1<script src="/_next/static/chunks/2z1lzjmiizex6.js" defer="" type="ae16f152e58f3ad0fab8cc55-text/javascript"></script>
1<script src="/_next/static/chunks/1dz0hw-erifd0.js" defer="" type="ae16f152e58f3ad0fab8cc55-text/javascript"></script>
1<script src="/_next/static/chunks/3ld5hsclhqqyr.js" defer="" type="ae16f152e58f3ad0fab8cc55-text/javascript"></script>
1<script src="/_next/static/chunks/turbopack-0pw5q_g5e3oh0.js" defer="" type="ae16f152e58f3ad0fab8cc55-text/javascript"></script>
1<script src="/_next/static/DUpj7qDrLbw6OKqAMWydN/_buildManifest.js" defer="" type="ae16f152e58f3ad0fab8cc55-text/javascript"></script>
1<script src="/_next/static/DUpj7qDrLbw6OKqAMWydN/_ssgManifest.js" defer="" type="ae16f152e58f3ad0fab8cc55-text/javascript"></script>
1<script src="/_next/static/DUpj7qDrLbw6OKqAMWydN/_clientMiddlewareManifest.js" defer="" type="ae16f152e58f3ad0fab8cc55-text/javascript"></script>
1</head><body><div id="__next"><div id="root" class="space_grotesk_a93ca96d-module__SKIqhW__variable space_mono_560ad5dc-module__DqC0Ta__variable"><header class="content-wrapper absolute inset-x-0 z-30 mt-4 py-4"><div class="relative flex items-center justify-between border-t pt-2 border-slate-800"><a class="inline-flex h-9 items-center px-2 font-title text-2xl font-extrabold brand-gradient-border" href="/"><span class="brand-gradient-text translate-y-[1px]">CKC</span></a><button type="button" aria-label="Open menu" aria-expanded="false" class="absolute right-0 top-1 z-30 flex h-11 w-11 items-center justify-center sm:hidden"><span class="flex h-[18px] w-[22px] flex-col justify-between"><span class="block h-[2px] w-full rounded-full bg-white shadow-[0_0_8px_rgba(255,255,255,0.85)] transition-transform duration-200"></span><span class="block h-[2px] w-full rounded-full bg-white shadow-[0_0_8px_rgba(255,255,255,0.85)] transition-opacity duration-200"></span><span class="block h-[2px] w-full rounded-full bg-white shadow-[0_0_8px_rgba(255,255,255,0.85)] transition-transform duration-200"></span></span></button><nav class="hidden sm:block"><ul class="flex flex-col gap-2 sm:flex-row"><li><a class="relative flex h-9 items-center rounded-lg font-medium transition sm:ml-3 hover:text-primary-400 focus-visible:text-primary-400 pl-7 sm:px-2" href="/#about"><button><div class="absolute -left-2 -top-2 hidden h-2 w-[1px] sm:block bg-slate-800"></div><div class="absolute left-0 top-0 block h-[1px] w-2 sm:hidden bg-slate-800"></div>about</button></a></li><li><a class="relative flex h-9 items-center rounded-lg font-medium transition sm:ml-3 hover:text-primary-400 focus-visible:text-primary-400 pl-7 sm:px-2" href="/#case-studies"><button><div class="absolute -left-2 -top-2 hidden h-2 w-[1px] sm:block bg-slate-800"></div><div class="absolute left-0 top-0 block h-[1px] w-2 sm:hidden bg-slate-800"></div>case studies</button></a></li><li><a class="relative flex h-9 items-center rounded-lg font-medium transition sm:ml-3 hover:text-primary-400 focus-visible:text-primary-400 pl-7 sm:px-2" href="/#services"><button><div class="absolute -left-2 -top-2 hidden h-2 w-[1px] sm:block bg-slate-800"></div><div class="absolute left-0 top-0 block h-[1px] w-2 sm:hidden bg-slate-800"></div>services</button></a></li><li><a class="relative flex h-9 items-center rounded-lg font-medium transition sm:ml-3 hover:text-primary-400 focus-visible:text-primary-400 pl-7 sm:px-2" href="/blog/all"><button><div class="absolute -left-2 -top-2 hidden h-2 w-[1px] sm:block bg-slate-800"></div><div class="absolute left-0 top-0 block h-[1px] w-2 sm:hidden bg-slate-800"></div>blog</button></a></li></ul></nav></div><div class="hidden left-[100vw] opacity-0 absolute left-0 top-[-16px] z-20 block h-[100vh] w-full rounded-lg  bg-darkBg px-1 py-3 transition-all duration-500 sm:hidden"><div class="mx-2 h-full border-l border-slate-800 pt-8"><a class="ml-5 inline-flex h-9 items-center px-2 font-title text-2xl font-extrabold brand-gradient-border" href="/"><span class="brand-gradient-text translate-y-[1px]">CKC</span></a><ul class="mt-10 flex w-10/12 flex-col gap-2 pt-5 text-xl sm:flex-row  "><li><a class="relative flex h-9 items-center rounded-lg font-medium transition sm:ml-3 hover:text-primary-400 focus-visible:text-primary-400 pl-7 sm:px-2" href="/#about"><button><div class="absolute -left-2 -top-2 hidden h-2 w-[1px] sm:block bg-slate-800"></div><div class="absolute left-0 top-0 block h-[1px] w-2 sm:hidden bg-slate-800"></div>about</button></a></li><li><a class="relative flex h-9 items-center rounded-lg font-medium transition sm:ml-3 hover:text-primary-400 focus-visible:text-primary-400 pl-7 sm:px-2" href="/#case-studies"><button><div class="absolute -left-2 -top-2 hidden h-2 w-[1px] sm:block bg-slate-800"></div><div class="absolute left-0 top-0 block h-[1px] w-2 sm:hidden bg-slate-800"></div>case studies</button></a></li><li><a class="relative flex h-9 items-center rounded-lg font-medium transition sm:ml-3 hover:text-primary-400 focus-visible:text-primary-400 pl-7 sm:px-2" href="/#services"><button>
1<div class="absolute -left-2 -top-2 hidden h-2 w-[1px] sm:block bg-slate-800"></div><div class="absolute left-0 top-0 block h-[1px] w-2 sm:hidden bg-slate-800"></div>services</button></a></li><li><a class="relative flex h-9 items-center rounded-lg font-medium transition sm:ml-3 hover:text-primary-400 focus-visible:text-primary-400 pl-7 sm:px-2" href="/blog"><button><div class="absolute -left-2 -top-2 hidden h-2 w-[1px] sm:block bg-slate-800"></div><div class="absolute left-0 top-0 block h-[1px] w-2 sm:hidden bg-slate-800"></div>blog</button></a></li></ul></div></div></header><main class="relative overflow-hidden"><div hidden="" style="position:fixed;top:1px;left:1px;width:1px;height:0;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border-width:0;display:none"></div><div class="pointer-events-none absolute inset-x-0 top-0 h-[2400px] max-h-[260vh] overflow-hidden" aria-hidden="true"><div class="absolute inset-x-0 top-0 h-[1100px]" style="opacity:1;transform:none"><div class="absolute bottom-0 h-36 w-full bg-gradient-to-t from-darkBg to-transparent z-10" style="height:9rem"></div><img alt="" decoding="async" data-nimg="fill" class="astro-animation object-cover object-top opacity-45 md:opacity-80" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" sizes="100vw" srcSet="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fhoard-of-astros.0j6_hsxln_9nl.png&amp;w=640&amp;q=75 640w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fhoard-of-astros.0j6_hsxln_9nl.png&amp;w=750&amp;q=75 750w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fhoard-of-astros.0j6_hsxln_9nl.png&amp;w=828&amp;q=75 828w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fhoard-of-astros.0j6_hsxln_9nl.png&amp;w=1080&amp;q=75 1080w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fhoard-of-astros.0j6_hsxln_9nl.png&amp;w=1200&amp;q=75 1200w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fhoard-of-astros.0j6_hsxln_9nl.png&amp;w=1920&amp;q=75 1920w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fhoard-of-astros.0j6_hsxln_9nl.png&amp;w=2048&amp;q=75 2048w, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fhoard-of-astros.0j6_hsxln_9nl.png&amp;w=3840&amp;q=75 3840w" src="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fhoard-of-astros.0j6_hsxln_9nl.png&amp;w=3840&amp;q=75"/></div></div><div class="content-wrapper relative z-10 flex min-w-0 flex-col items-center gap-8 overflow-x-hidden pb-12 pt-24 md:justify-between md:pb-16 md:pt-32 lg:flex-row"><div class="min-w-0 w-full flex-1"><div class="relative z-10 flex flex-col gap-4 md:gap-6"><h3 class="font-mono text-sm font-medium tracking-widest text-[#4588EC]"><span class="block" style="opacity:0;transform:translateX(-28px)">THE PROJECT</span></h3><h1 class="font-title text-5xl font-extrabold text-slate-200 lg:text-7xl"><span class="block" style="opacity:0;transform:translateX(-28px)">Spek Diagnostics</span></h1><div class="flex xl:hidden"><span class="block w-full" style="opacity:0;transform:translateX(-28px)"><div class="relative mx-auto w-full max-w-[240px] sm:max-w-xs md:max-w-md xl:max-w-none overflow-hidden rounded-2xl border border-white/10 p-8 md:p-12 bg-white"><img alt="Spek Diagnostics logo" width="1200" height="414" decoding="async" data-nimg="1" class="h-auto w-full object-contain" style="color:transparent" srcSet="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fspek-diagnostics.1qjy1m7b-6de_.png&amp;w=1200&amp;q=75 1x, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fspek-diagnostics.1qjy1m7b-6de_.png&amp;w=3840&amp;q=75 2x" src="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fspek-diagnostics.1qjy1m7b-6de_.png&amp;w=3840&amp;q=75"/></div></span></div><p class="text-slate-400 md:text-lg" style="opacity:0;transform:translateX(-28px)">Spek Diagnostics is a Garden City, Idaho dermatopathology lab. We built a custom whole-slide viewer pathologists can actually diagnose from, and we are adding AI image analysis so the software can help interpret tissue, not only pan and zoom.</p></div><div class="mt-8 flex flex-col justify-between gap-4 xl:items-top xl:flex-row"><div class="relative z-10" style="opacity:0;transform:translateX(-28px)"><a href="https://www.spekdiagnostics.com/" target="_blank" rel="noopener noreferrer"><button class="cta-animated flex min-w-[150px] justify-center">Visit Spek Diagnostics</button></a></div><div class="flex w-full flex-wrap justify-center gap-6 text-slate-200 md:justify-start md:gap-12"><div class="flex flex-col items-center gap-2" style="opacity:0;transform:translateY(24px)"><div class="flex h-12 w-12 items-center justify-center rounded-2xl bg-primary-600/[0.24] text-primary-600 transition"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36" fill="none" class="h-8 w-8"><path d="M9.95036 28.9786C9.38271 30.1585 9.02454 30.9449 5.86658 31.0596C5.95735 28.0122 6.5381 27.6853 7.70095 27.1059C8.18912 26.8625 8.79697 26.5599 9.45406 26.0546L8.35443 24.6506C7.8351 25.0493 7.35729 25.2593 6.89531 25.4892C4.95801 26.4551 4.04494 27.4066 4.04494 31.9428L4.06027 32.8659L4.9481 32.846C9.73588 32.846 10.6305 31.7645 11.5273 29.9016C11.7238 29.4934 11.8331 29.2175 12.1641 28.6674L10.8247 27.4508C10.4232 27.9986 10.
11726 28.5197 9.95039 28.9786H9.95036ZM23.9294 9.37361C21.932 9.37361 20.3067 10.9989 20.3067 12.9958C20.3067 14.9937 21.9324 16.6185 23.9294 16.6185C25.9263 16.6185 27.5516 14.9932 27.5516 12.9958C27.5516 10.9989 25.9259 9.37361 23.9294 9.37361ZM23.9294 14.8044C22.9323 14.8044 22.1207 13.9929 22.1207 12.9958C22.1207 11.9991 22.9323 11.1872 23.9294 11.1872C24.9265 11.1872 25.738 11.9991 25.738 12.9958C25.7376 13.9934 24.9265 14.8044 23.9294 14.8044ZM32.9279 4.87618C32.9004 4.42549 32.5432 4.06413 32.0926 4.03071C32.0926 4.03071 27.0379 3.66221 22.1751 5.47807C20.3986 6.14146 18.9363 7.19234 17.5716 8.7842C16.4336 10.1115 15.3028 12.5107 14.3048 14.5027C13.9191 15.2718 13.5506 16.0075 13.2381 16.5692H8.21371C8.08601 16.5693 7.95978 16.5964 7.84333 16.6487C7.72687 16.7011 7.62285 16.7776 7.53812 16.8732L4.22747 20.4615C4.12341 20.5788 4.05169 20.7212 4.01938 20.8747C3.98706 21.0281 3.99527 21.1873 4.04319 21.3367C4.14029 21.6411 4.39092 21.8714 4.70164 21.9418L10.0909 23.1742C10.4581 23.6276 11.07 24.3059 12.0491 25.3925L14.0907 27.6559L15.1899 32.305C15.2255 32.4558 15.2994 32.5948 15.4043 32.7088C15.5093 32.8228 15.6418 32.9078 15.7891 32.9557C15.8804 32.9846 15.9747 33 16.0686 33C16.2844 33.0001 16.493 32.9229 16.6566 32.7823L20.0029 29.4536C20.1019 29.3689 20.1813 29.2638 20.2358 29.1455C20.2903 29.0271 20.3186 28.8984 20.3186 28.7681V24.1077C20.7684 23.8282 21.5659 23.3978 22.3164 22.9778C24.3617 21.8348 27.4144 20.4119 28.6802 19.2865C30.4627 17.7023 31.1121 16.5408 31.7497 14.8239C33.2657 10.7401 32.9433 5.11374 32.9279 4.87621L32.9279 4.87618ZM30.0553 14.1947C29.4989 15.6926 28.9949 16.589 27.4799 17.9361C26.3604 18.9305 23.299 20.3584 21.4344 21.4012C20.0426 22.1793 19.2089 22.6336 18.8436 22.9325C18.7398 23.0172 18.6562 23.1239 18.5987 23.2449C18.5413 23.3659 18.5116 23.4981 18.5117 23.6321V28.3525L16.606 30.4466L15.7944 27.0145C15.7594 26.8667 15.6877 26.7302 15.5858 26.6176C13.9249 24.7769 11.4158 21.9942 11.2234 21.7733C11.0965 21.6193 10.9221 21.5116 10.7276 21.4671L6.59006 20.5206L8.61952 18.3755H13.7573C13.9116 18.3756 14.0634 18.336 14.1981 18.2607C14.3329 18.1853 14.446 18.0767 14.5268 17.9452C14.9242 17.298 15.3853 16.3777 15.9195 15.3119C16.824 13.5069 17.9494 11.1194 18.9429 9.95967C20.1166 8.58999 21.3088 7.72968 22.8067 7.16973C26.1399 5.92424 29.5797 5.79328 31.1522 5.80499C31.1815 7.47046 31.1188 11.332 30.0553 14.1947V14.1947Z" fill="currentColor"></path></svg></div><span class="text-center text-sm font-medium">Frontend</span></div><div class="flex flex-col items-center gap-2" style="opacity:0;transform:translateY(24px)"><div class="flex h-12 w-12 items-center justify-center rounded-2xl bg-primary-600/[0.24] text-primary-600 transition"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" fill="none" class="h-8 w-8"><path d="M7 19H25M7 19C5.93913 19 4.92172 18.5786 4.17157 17.8284C3.42143 17.0783 3 16.0609 3 15M7 19C5.93913 19 4.92172 19.4214 4.17157 20.1716C3.42143 20.9217 3 21.9391 3 23C3 24.0609 3.42143 25.0783 4.17157 25.8284C4.92172 26.5786 5.93913 27 7 27H25C26.0609 27 27.0783 26.5786 27.8284 25.8284C28.5786 25.0783 29 24.0609 29 23C29 21.9391 28.5786 20.9217 27.8284 20.1716C27.0783 19.4214 26.0609 19 25 19M25 19C26.0609 19 27.0783 18.5786 27.8284 17.8284C28.5786 17.0783 29 16.0609 29 15M3 15C3 13.9391 3.42143 12.9217 4.17157 12.1716C4.92172 11.4214 5.93913 11 7 11H25C26.0609 11 27.0783 11.4214 27.8284 12.1716C28.5786 12.9217 29 13.9391 29 15M3 15C3 13.7018 3.42107 12.4386 4.2 11.4L7.64933 6.8C8.0685 6.24112 8.61202 5.7875 9.23687 5.47508C9.86172 5.16265 10.5507 5 11.2493 5H20.7507C22.1667 5 23.5 5.66667 24.3507 6.8L27.8 11.4C28.5789 12.4386 29 13.7018 29 15M25 23H25.0107V23.0107H25V23ZM25 15H25.0107V15.0107H25V15ZM21 23H21.0107V23.0107H21V23ZM21 15H21.0107V15.0107H21V15Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path></svg></div><span class="text-center text-sm font-medium">Backend</span></div></div></div></div><div class="hidden w-full lg:flex-[.7] xl:flex" style="opacity:0;transform:translateX(36px) scale(0.96)"><div class="relative mx-auto w-full max-w-[240px] sm:max-w-xs md:max-w-md xl:max-w-none overflow-hidden rounded-2xl border border-white/10 p-8 md:p-12 bg-white"><img alt="Spek Diagnostics logo" width="1200" height="414" decoding="async" data-nimg="1" class="h-auto w-full object-contain" style="color:transparent" srcSet="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fspek-diagnostics.1qjy1m7b-6de_.png&amp;w=1200&amp;q=75 1x, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fspek-diagnostics.1qjy1m7b-6de_.png&amp;w=3840&amp;q=75 2x" src="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fspek-diagnostics.1qjy1m7b-6de_.png&amp;w=3840&amp;q=75"/></div></div></div><div class="relative z-10 mt-10 w-full md:mt-12"><div class="content-wrapper relative z-10"><div style="opacity:0;transform:translateY(24px)"><div><div role="tablist" aria-label="Content sections" class="flex gap-8 overflow-x-auto border-b border-white/10 [scrollbar-width:none] md:gap-12 [&amp;::-webkit-scrollbar]:hidden"><button id=":R2d2m:-tab-0" type="button" role="tab" aria-selected="true" aria-controls=":R2d2m:-panel" tabindex="0" class="group relative min-h-16 flex-none px-1 text-left outline-none md:min-h-[72px] md:px-2 focus-visible:text-white focus-visible:after:absolute focus-visible:after:inset-x-0 focus-visible:after:bottom-1 focus-visible:after:h-px focu
1s-visible:after:bg-primary-300/70 focus-visible:after:content-[&#x27;&#x27;]"><span class="absolute inset-x-0 bottom-[-1px] h-[2px] bg-[linear-gradient(90deg,#60a5fa,#818cf8)] shadow-[0_-3px_16px_rgba(96,165,250,0.5)]"></span><span class="relative z-10 flex items-center gap-3"><span class="font-mono text-[10px] tracking-[0.16em] transition-colors duration-300 text-primary-300">01</span><span class="whitespace-nowrap font-title text-base font-semibold transition-colors duration-300 md:text-lg text-white">Mission</span></span></button><button id=":R2d2m:-tab-1" type="button" role="tab" aria-selected="false" aria-controls=":R2d2m:-panel" tabindex="-1" class="group relative min-h-16 flex-none px-1 text-left outline-none md:min-h-[72px] md:px-2 focus-visible:text-white focus-visible:after:absolute focus-visible:after:inset-x-0 focus-visible:after:bottom-1 focus-visible:after:h-px focus-visible:after:bg-primary-300/70 focus-visible:after:content-[&#x27;&#x27;]"><span class="relative z-10 flex items-center gap-3"><span class="font-mono text-[10px] tracking-[0.16em] transition-colors duration-300 text-slate-600 group-hover:text-slate-400">02</span><span class="whitespace-nowrap font-title text-base font-semibold transition-colors duration-300 md:text-lg text-slate-400 group-hover:text-slate-100">Problem</span></span></button><button id=":R2d2m:-tab-2" type="button" role="tab" aria-selected="false" aria-controls=":R2d2m:-panel" tabindex="-1" class="group relative min-h-16 flex-none px-1 text-left outline-none md:min-h-[72px] md:px-2 focus-visible:text-white focus-visible:after:absolute focus-visible:after:inset-x-0 focus-visible:after:bottom-1 focus-visible:after:h-px focus-visible:after:bg-primary-300/70 focus-visible:after:content-[&#x27;&#x27;]"><span class="relative z-10 flex items-center gap-3"><span class="font-mono text-[10px] tracking-[0.16em] transition-colors duration-300 text-slate-600 group-hover:text-slate-400">03</span><span class="whitespace-nowrap font-title text-base font-semibold transition-colors duration-300 md:text-lg text-slate-400 group-hover:text-slate-100">Solution</span></span></button><button id=":R2d2m:-tab-3" type="button" role="tab" aria-selected="false" aria-controls=":R2d2m:-panel" tabindex="-1" class="group relative min-h-16 flex-none px-1 text-left outline-none md:min-h-[72px] md:px-2 focus-visible:text-white focus-visible:after:absolute focus-visible:after:inset-x-0 focus-visible:after:bottom-1 focus-visible:after:h-px focus-visible:after:bg-primary-300/70 focus-visible:after:content-[&#x27;&#x27;]"><span class="relative z-10 flex items-center gap-3"><span class="font-mono text-[10px] tracking-[0.16em] transition-colors duration-300 text-slate-600 group-hover:text-slate-400">04</span><span class="whitespace-nowrap font-title text-base font-semibold transition-colors duration-300 md:text-lg text-slate-400 group-hover:text-slate-100">Process</span></span></button></div><div id=":R2d2m:-panel" role="tabpanel" aria-labelledby=":R2d2m:-tab-0" class="relative mt-8 overflow-hidden py-4 pl-7 pr-1 md:pl-10 md:pr-10"><div aria-hidden="true" class="absolute bottom-0 left-0 top-0 w-px origin-top bg-[linear-gradient(to_bottom,rgba(96,165,250,0.9),rgba(129,140,248,0.3)_58%,rgba(255,255,255,0.04))]" style="opacity:0;transform:scaleY(0.3)"></div><div aria-hidden="true" class="absolute left-0 top-0 h-px w-12 origin-left bg-[linear-gradient(to_right,rgba(96,165,250,0.9),rgba(129,140,248,0.15),transparent)]" style="opacity:0;transform:scaleX(0.25)"></div><div class="relative z-10" style="opacity:1;filter:blur(0px);transform:none"><p class="max-w-5xl whitespace-pre-line text-base font-medium leading-8 text-slate-200 md:text-lg md:leading-9">Spek Diagnostics provides prompt, accurate pathology results to dermatologists and other specialists across the Treasure Valley and beyond. Their pathologists work from digital whole-slide images, not just a microscope. They needed a viewer that matched how they actually read slides, and they wanted AI on those images that could aid diagnosis without pretending to replace the pathologist.</p></div></div></div></div></div></div><div class="relative z-10 mt-16 w-full md:mt-24"><div class="z-10 relative"><div class="relative z-10 content-wrapper py-30"><div class="relative z-10" style="opacity:0;transform:translateY(24px)"><div class="w-full md:w-4/5"><div class="mb-10">
1<div class="font-title text-4xl md:text-5xl capitalize"><span class="font-semibold text-gradient bg-clip-text text-transparent bg-gradient-to-r from-[#4588EC] to-[#6F2CFE]">Tech</span></div></div><div>The hard problems are getting huge slides into the browser, keeping pan and zoom feeling instant, applying scanner color profiles, and running image analysis against those slides. Python and machine learning handle the analysis. A browser viewer keeps the slide responsive, and separate tooling reads files from the scanners. Docker keeps that pipeline portable.</div></div><div class="mt-10 w-full"><div role="tablist" aria-label="Content sections" class="flex gap-8 overflow-x-auto border-b border-white/10 [scrollbar-width:none] md:gap-12 [&amp;::-webkit-scrollbar]:hidden"><button id=":Raf2m:-tab-0" type="button" role="tab" aria-selected="true" aria-controls=":Raf2m:-panel" tabindex="0" class="group relative min-h-16 flex-none px-1 text-left outline-none md:min-h-[72px] md:px-2 focus-visible:text-white focus-visible:after:absolute focus-visible:after:inset-x-0 focus-visible:after:bottom-1 focus-visible:after:h-px focus-visible:after:bg-primary-300/70 focus-visible:after:content-[&#x27;&#x27;]"><span class="absolute inset-x-0 bottom-[-1px] h-[2px] bg-[linear-gradient(90deg,#60a5fa,#818cf8)] shadow-[0_-3px_16px_rgba(96,165,250,0.5)]"></span><span class="relative z-10 flex items-center gap-3"><span class="font-mono text-[10px] tracking-[0.16em] transition-colors duration-300 text-primary-300">01</span><span class="whitespace-nowrap font-title text-base font-semibold transition-colors duration-300 md:text-lg text-white">Python / ML</span></span></button><button id=":Raf2m:-tab-1" type="button" role="tab" aria-selected="false" aria-controls=":Raf2m:-panel" tabindex="-1" class="group relative min-h-16 flex-none px-1 text-left outline-none md:min-h-[72px] md:px-2 focus-visible:text-white focus-visible:after:absolute focus-visible:after:inset-x-0 focus-visible:after:bottom-1 focus-visible:after:h-px focus-visible:after:bg-primary-300/70 focus-visible:after:content-[&#x27;&#x27;]"><span class="relative z-10 flex items-center gap-3"><span class="font-mono text-[10px] tracking-[0.16em] transition-colors duration-300 text-slate-600 group-hover:text-slate-400">02</span><span class="whitespace-nowrap font-title text-base font-semibold transition-colors duration-300 md:text-lg text-slate-400 group-hover:text-slate-100">Slide viewer</span></span></button><button id=":Raf2m:-tab-2" type="button" role="tab" aria-selected="false" aria-controls=":Raf2m:-panel" tabindex="-1" class="group relative min-h-16 flex-none px-1 text-left outline-none md:min-h-[72px] md:px-2 focus-visible:text-white focus-visible:after:absolute focus-visible:after:inset-x-0 focus-visible:after:bottom-1 focus-visible:after:h-px focus-visible:after:bg-primary-300/70 focus-visible:after:content-[&#x27;&#x27;]"><span class="relative z-10 flex items-center gap-3"><span class="font-mono text-[10px] tracking-[0.16em] transition-colors duration-300 text-slate-600 group-hover:text-slate-400">03</span><span class="whitespace-nowrap font-title text-base font-semibold transition-colors duration-300 md:text-lg text-slate-400 group-hover:text-slate-100">Scanner files</span></span></button><button id=":Raf2m:-tab-3" type="button" role="tab" aria-selected="false" aria-controls=":Raf2m:-panel" tabindex="-1" class="group relative min-h-16 flex-none px-1 text-left outline-none md:min-h-[72px] md:px-2 focus-visible:text-white focus-visible:after:absolute focus-visible:after:inset-x-0 focus-visible:after:bottom-1 focus-visible:after:h-px focus-visible:after:bg-primary-300/70 focus-visible:after:content-[&#x27;&#x27;]"><span class="relative z-10 flex items-center gap-3"><span class="font-mono text-[10px] tracking-[0.16em] transition-colors duration-300 text-slate-600 group-hover:text-slate-400">04</span><span class="whitespace-nowrap font-title text-base font-semibold transition-colors duration-300 md:text-lg text-slate-400 group-hover:text-slate-100">Docker</span></span></button></div><div id=":Raf2m:-panel" role="tabpanel" aria-labelledby=":Raf2m:-tab-0" class="relative mt-8 overflow-hidden py-4 pl-7 pr-1 md:pl-10 md:pr-10"><div aria-hidden="true" class="absolute bottom-0 left-0 top-0 w-px origin-top bg-[linear-gradient(to_bottom,rgba(96,165,250,0.9),rgba(129,140,248,0.3)_58%,rgba(255,255,255,0.04))]" style="opacity:0;transform:scaleY(0.3)"></div><div aria-hidden="true" class="absolute left-0 top-0 h-px w-12 origin-left bg-[linear-gradient(to_right,rgba(96,165,250,0.9),rgba(129,140,248,0.15),transparent)]" style="opacity:0;
1transform:scaleX(0.25)"></div><div class="relative z-10" style="opacity:1;filter:blur(0px);transform:none"><div class="relative z-10 max-w-4xl text-base font-medium leading-8 text-slate-200 md:max-w-[78%] md:text-lg md:leading-9"><div>Python is how we do serious data and model work. The scientific stack, notebooks-to-services path, and the ecosystem around imaging and machine learning mean we can move from a research model to something a product can call without switching languages halfway.</div><div class="mt-6 border-l border-primary-300/35 pl-5 text-slate-300">Python is the language for the analysis side: preprocessing slides and running image models so the viewer can aid diagnosis instead of only displaying pixels.</div></div></div><div class="pointer-events-none absolute inset-0 z-0" aria-hidden="true" style="opacity:1;transform:none"><img alt="" loading="lazy" width="128" height="128" decoding="async" data-nimg="1" class="absolute top-0 z-0 h-full w-auto h-[220px] right-8 top-8 opacity-10 md:h-[320px]" style="color:transparent" src="/_next/static/media/python.3l3y0qrp56mnx.svg"/></div></div></div></div></div></div></div><section class="relative z-10 mb-0 mt-26 flex justify-center md:mb-20 md:mt-56" id="call-to-action"><div class="absolute translate-x-20 opacity-20" style="opacity:0;transform:translateY(40px)"><div class="absolute left-0 w-48 h-full bg-gradient-to-r from-darkBg to-transparent " style="width:12rem"></div><div class="absolute right-0 w-48 h-full bg-gradient-to-l from-darkBg to-transparent " style="width:12rem"></div><div class="absolute top-0 h-36 w-full bg-gradient-to-b from-darkBg to-transparent " style="height:9rem"></div><div class="absolute bottom-0 h-36 w-full bg-gradient-to-t from-darkBg to-transparent " style="height:9rem"></div><img alt="" loading="lazy" width="571" height="592" decoding="async" data-nimg="1" style="color:transparent" srcSet="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Frocket1.2jrcezw74wd4y.webp&amp;w=640&amp;q=75 1x, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Frocket1.2jrcezw74wd4y.webp&amp;w=1200&amp;q=75 2x" src="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Frocket1.2jrcezw74wd4y.webp&amp;w=1200&amp;q=75"/></div><div class="content-wrapper relative z-10 mx-0 flex flex-col items-center justify-center py-36" style="opacity:0;transform:translateY(28px)"><h2 class="text-center font-title text-4xl font-bold text-[#fff] md:text-5xl">EMBARK ON THIS EXTRAORDINARY<br/>JOURNEY WITH US</h2><div class="mt-12 flex flex-col items-center justify-center"><p class="text-center text-lg md:max-w-lg">Are you ready to see your vision come to life? We would love to hear from you!</p><button type="button" class="cta mt-10 font-title">Get Started !</button></div></div></section><footer><div class="content-wrapper  pt-8 pb-16 border-t border-slate-800 sm:border-none lg:pt-24"><div class="flex flex-col sm:flex-row flex-wrap gap-16  md:flex-row md:gap-8"><section class="flex-1"><div class="mb-4"><a class="inline-flex h-9 items-center px-2 font-title text-2xl font-extrabold brand-gradient-border" href="/"><span class="brand-gradient-text translate-y-[1px]">CKC</span></a></div><h2 class="mb-2 font-title text-lg font-semibold">CKCollab</h2><p class="text-sm text-slate-400 max-w-[300px] min-w-[200px]">From ideas on a napkin to products in your users hands, we iterate with you every step of the way to ensure your vision comes to life.</p></section><div class="flex flex-col gap-16 sm:flex-row md:gap-16"><div class="flex gap-8 md:gap-16"><div class="flex flex-1 flex-col items-center"><h2 class="pb-3 font-title text-lg font-semibold">Awards</h2><img alt="Top Developers 2021" loading="lazy" width="150" height="150" decoding="async" data-nimg="1" style="color:transparent" srcSet="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fclutch-trophy.235l3zjuz_t3d.png&amp;w=256&amp;q=75 1x, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fclutch-trophy.235l3zjuz_t3d.png&amp;w=384&amp;q=75 2x" src="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fclutch-trophy.235l3zjuz_t3d.png&amp;w=384&amp;q=75"/></div><section class="flex-1"><h2 class="pb-2 font-title text-lg font-semibold">Case Studies</h2><ul class="-mx-2 text-sm"><li><a class="flex whitespace-nowrap rounded-full px-2 py-1 text-slate-400 transition hover:text-slate-300" href="/case-study/spek-diagnostics">Spek Diagnostics</a></li><li><a class="flex whitespace-nowrap rounded-full px-2 py-1 text-slate-400 transition hover:text-slate-300" href="/case-study/build-cities">Build</a></li><li><a class="flex whitespace-nowrap rounded-full px-2 py-1 text-slate-400 transition hover:text-slate-300" href="/case-study/truffle-shuffle">Truffle Shuffle</a></li><li><a class="flex whitespace-nowrap rounded-full px-2 py-1 text-slate-400 transition hover:text-slate-300" href="/case-study/trailhead">Trailhead</a></li><li><a class="flex whitespace-nowrap rounded-full px-2 py-1 text-slate-400 transition hover:text-slate-300" href="/case-study/atchima">Atchima</a></li><li><a class="flex whitespace-nowrap rounded-full px-2 py-1 text-slate-400 transition hover:text-slate-300" href="/case-study/vr-skydiving">VR Skydiving</a></li><li><a class="flex whitespace-nowrap rounded-full px-2 py-1 text-slate-400 transition hover:text-slate-300" href="/case-study/codalab">CodaLab</a></li><li><a class="flex whitespace-nowrap rounded-full px-2 py-1 text-slate-400 transition hover:text-slate-300" href="/case-study/git-streak-tracker">Git Streak Tracker</a></li></ul></section></div><section class="flex-1"><h2 class="pb-3 font-title text-lg font-semibold">Contact Us</h2><address class="text-sm not-italic"><div class="flex flex-col gap-2 text-slate-400"><a class="flex items-center gap-2 rounded-full" href="tel:+1-208-918-3815"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="h-4 w-4"><path fill-rule="evenodd" d="M2 3.5A1.5 1.5 0 013.5 2h1.148a1.5 1.5 0 011.465 1.175l.716 3.223a1.5 1.5 0 01-1.052 1.767l-.933.267c-.41.117-.643.555-.48.95a11.542 11.542 0 006.254 6.254c.395.163.833-.07.95-.48l.267-.933a1.5 1.5 0 011.767-1.052l3.223.716A1.5 1.5 0 0118 15.352V16.5a1.5 1.5 0 01-1.5 1.5H15c-1.149 0-2.263-.15-3.326-.43A13.022 13.022 0 012.43 8.326 13.019 13.019 0 012 5V3.5z" clip-rule="evenodd"></path></svg>+1 208.918.3815</a><a class="flex items-center gap-2 rounded-full" href="/cdn-cgi/l/email-protection#9df5f8f1f1f2ddfef6fef2f1f1fcffb3fef2f0"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="h-4 w-4"><path d="M3 4a2 2 0 00-2 2v1.161l8.441 4.221a1.25 1.25 0 001.118 0L19 7.
1162V6a2 2 0 00-2-2H3z"></path><path d="M19 8.839l-7.77 3.885a2.75 2.75 0 01-2.46 0L1 8.839V14a2 2 0 002 2h14a2 2 0 002-2V8.839z"></path></svg><span class="__cf_email__" data-cfemail="a6cec3cacac9e6c5cdc5c9cacac7c488c5c9cb">[email&#160;protected]</span></a></div></address></section></div></div></div><div class="content-wrapper"><div class="flex justify-between border-t border-slate-800 py-8 text-sm text-slate-300"><p>© <!-- -->2026<!-- -->, CKCollab.</p><div class="flex gap-2"><a class="rounded-full hover:underline" href="/privacy-policy">Privacy</a></div></div></div></footer></main></div></div>
vendor: 108 bytes, line 1
1<script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>
1<script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"caseStudy":{"title":"Spek Diagnostics","slug":"spek-diagnostics","description":"Spek Diagnostics is a Garden City, Idaho dermatopathology lab. We built a custom whole-slide viewer pathologists can actually diagnose from, and we are adding AI image analysis so the software can help interpret tissue, not only pan and zoom.","project_link":"https://www.spekdiagnostics.com/","button_text":"Visit Spek Diagnostics","project_types":{"frontend":true,"backend":true},"mission":"Spek Diagnostics provides prompt, accurate pathology results to dermatologists and other specialists across the Treasure Valley and beyond. Their pathologists work from digital whole-slide images, not just a microscope. They needed a viewer that matched how they actually read slides, and they wanted AI on those images that could aid diagnosis without pretending to replace the pathologist.","project_management_text":"Work is tracked in GitHub with regular check-ins so the highest-priority diagnostic features ship first. Spek's CEO, Dr. G. Eli Morey, described the cadence as easy to communicate, with quick answers and tasks completed on time.","problem_text":"Digital pathology slides are enormous. A single scan can be gigabytes, and pathologists need to pan, zoom, and color-correct them the way they would at a microscope: instantly, and with color that matches tissue. Spek trialed commercial viewers and none of them hit the mark on image quality, load speed, color-profile handling, or a GUI that matched how they actually read slides. Display is only half the job. They also wanted software that can analyze the image itself and aid diagnosis, not just a prettier microscope.","solution_text":"We built a web-based whole-slide image viewer so pan and zoom stay smooth instead of loading the entire slide at once. We tuned rendering for a quick first paint, added color-adjustment controls so the on-screen image matches the scanner, and wired input-device settings so a pathologist can consume a slide in a consistent way. On top of that we are integrating AI image analysis, so the viewer can aid diagnosis on the same images the pathologist is already reading. The viewer is designed to exchange data with their digital cloud and LIS in real time.","technology_text":"The hard problems are getting huge slides into the browser, keeping pan and zoom feeling instant, applying scanner color profiles, and running image analysis against those slides. Python and machine learning handle the analysis. A browser viewer keeps the slide responsive, and separate tooling reads files from the scanners. Docker keeps that pipeline portable.","tech":[{"name":"python","description":"Python is the language for the analysis side: preprocessing slides and running image models so the viewer can aid diagnosis instead of only displaying pixels."},{"name":"slide-viewer"},{"name":"scanner-files"},{"name":"docker","description":"Docker packages the image processing and analysis jobs so they run the same way from a laptop to whatever host Spek runs in the lab."}]}},"__N_SSG":true},"page":"/case-study/[slug]","query":{"slug":"spek-diagnostics"},"buildId":"DUpj7qDrLbw6OKqAMWydN","isFallback":false,"gsp":true,"scriptLoader":[]}</script>
vendor: 142 bytes, line 1
1<script src="/cdn-cgi/scripts/7d0fa10a/cloudflare-static/rocket-loader.min.js" data-cf-settings="ae16f152e58f3ad0fab8cc55-|49" defer></script>
1<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":"c38b9c47fdfd4808a04919d376ad6f14","r":1,"spa":2}' crossorigin="anonymous"></script>
1
2</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.