<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" href="https://afterdarklabs.io/logo_assets/badge.svg?v=3">
<link rel="icon" type="image/svg+xml" href="https://afterdarklabs.io/logo_assets/badge.svg?v=3">
<link rel="icon" type="image/png" sizes="32x32" href="https://afterdarklabs.io/logo_assets/favicon-32.png?v=3">
<link rel="icon" type="image/png" sizes="16x16" href="https://afterdarklabs.io/logo_assets/favicon-16.png?v=3">
<link rel="apple-touch-icon" sizes="180x180" href="https://afterdarklabs.io/logo_assets/apple-touch-icon.png?v=3">
<title>Website Design & Development in South Florida | After Dark Labs</title>
<meta name="description" content="South Florida website design and development for custom websites, Shopify stores, mobile apps, SaaS platforms, APIs, AI integrations, and business tools.">
<meta name="robots" content="index,follow,max-image-preview:large">
<link rel="canonical" href="https://afterdarklabs.io/">
<meta property="og:title" content="Website Design & Development in South Florida | After Dark Labs">
<meta property="og:description" content="South Florida website design and development for custom websites, Shopify stores, mobile apps, SaaS platforms, APIs, AI integrations, and business tools.">
<meta property="og:image" content="https://afterdarklabs.io/twitter-card.png?v=4">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:image:alt" content="After Dark Labs. Custom websites and apps.">
<meta property="og:type" content="website">
<meta property="og:url" content="https://afterdarklabs.io/">
<meta property="og:site_name" content="After Dark Labs">
<meta property="og:locale" content="en_US">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Website Design & Development in South Florida | After Dark Labs">
<meta name="twitter:description" content="South Florida website design and development for custom websites, Shopify stores, mobile apps, SaaS platforms, APIs, AI integrations, and business tools.">
<meta name="twitter:image" content="https://afterdarklabs.io/twitter-card.png?v=4">
<meta name="twitter:image:alt" content="After Dark Labs. Custom websites and apps.">
<link rel="preload" href="https://afterdarklabs.io/fonts/ubuntu-700-latin.woff2" as="font" type="font/woff2" crossorigin>
<style>
@font-face{font-family:Ubuntu;font-style:normal;font-weight:700;font-display:swap;src:url(https://afterdarklabs.io/fonts/ubuntu-700-latin.woff2)format("woff2")}:root{--page-bg:#000;--site-nav-height:5.75rem}*,:before,:after{box-sizing:border-box}html{overscroll-behavior-x:none;scroll-behavior:smooth;-webkit-text-size-adjust:100%;max-width:100%;line-height:1.5;overflow-x:clip}@media (width>=1024px){:root{--site-nav-height:5.5rem}html{font-size:125%}}body{overscroll-behavior-x:none;background:var(--page-bg);color:#fff;max-width:100%;font-family:Ubuntu,system-ui,sans-serif;font-weight:700;line-height:inherit;margin:0;overflow-x:clip}h1,h2,p{margin:0}h1,h2{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:none}img,svg{vertical-align:middle;display:block}img{max-width:100%;height:auto}nav{z-index:50;background:#000;width:100%;position:fixed;top:0;backdrop-filter:none!important}.nav-shell{width:100%;max-width:80rem;margin-inline:auto;padding:1rem}.mobile-nav,.desktop-nav{justify-content:space-between;align-items:center}.mobile-nav{gap:.75rem;display:flex}.desktop-nav{display:none}.nav-brand{color:#fff;align-items:center;display:flex}.mobile-nav .nav-brand{text-align:left;border-radius:1rem;min-width:0;padding:.375rem .75rem .375rem .375rem;transition:background-color .15s cubic-bezier(.4,0,.2,1)}.mobile-nav .nav-brand:hover{background:#ffffff1a}.mobile-nav .nav-brand:focus{outline:none}.mobile-nav .nav-brand:focus-visible{outline-offset:2px;outline:2px solid #fff}.desktop-nav .nav-brand{gap:.75rem}@media (width>=640px){.nav-shell{padding-inline:1.5rem}}@media (width>=1024px){.nav-shell{padding-block:1.25rem}.mobile-nav{display:none}.desktop-nav{display:flex}}.hero-content{z-index:2;text-align:center;justify-items:center;gap:2.5rem;width:100%;max-width:none;margin-inline:auto;padding-block:0;padding-inline:0;display:grid;position:relative}#hero{box-sizing:border-box;background:var(--page-bg);height:100svh;min-height:100svh;padding-top:var(--site-nav-height);align-items:center;padding-bottom:0;display:flex;position:relative;overflow:hidden}.nav-brand{transform-origin:0}.nav-cta{letter-spacing:-.035em;border-radius:1rem;flex-shrink:0;justify-content:center;align-items:center;min-height:3.25rem;padding:.75rem 1.15rem;font-size:clamp(1.05rem,5vw,1.3rem);font-weight:700;line-height:1;transition:color .15s cubic-bezier(.4,0,.2,1),background-color .15s cubic-bezier(.4,0,.2,1);display:inline-flex;color:#fff!important;background-color:#000!important}.nav-cta:hover,.nav-cta:focus-visible{color:#000!important;background-color:#fff!important}.nav-brand-word{letter-spacing:-.055em;white-space:nowrap;gap:.22em;padding-right:.08em;font-size:clamp(1.25rem,5.8vw,1.7rem);font-weight:700;line-height:.9;display:flex}.nav-brand-letter{transform-origin:50%;display:inline-block}@media (width>=1024px){.nav-brand-word{font-size:clamp(1.5rem,2.2vw,2rem)}.nav-cta{min-height:2.75rem;padding:.72rem 1.35rem;font-size:clamp(1.2rem,2vw,1.6rem)}}.hero-vignette{pointer-events:none;z-index:1;background:#000;position:absolute;inset:0}@media (width<=767px){#hero{--mobile-nav-height:5.75rem;box-sizing:border-box;height:var(--mobile-hero-height,100svh);min-height:var(--mobile-hero-height,100svh);padding-top:var(--mobile-nav-height);align-items:stretch;padding-bottom:0}.hero-content{align-content:center;gap:0;padding-block:clamp(1.25rem,4svh,2rem)}.hero-content h1{font-size:clamp(2.75rem,min(17vw,9.5svh),4.5rem)}}.hero-content h1{width:max-content;font-size:31vw;font-size:min(31vw, calc((100svh - var(--site-nav-height)) * .4));letter-spacing:-.075em;flex-direction:column;align-items:center;padding-right:.1em;font-weight:700;line-height:.8;display:flex}.hero-letter{transform-origin:50%;display:inline-block}.hero-word{display:block}.hero-scroll-hint{bottom:max(1rem, env(safe-area-inset-bottom));z-index:3;color:#fff;letter-spacing:.08em;text-transform:uppercase;align-items:center;gap:.55rem;font-size:clamp(.7rem,1.1vw,.85rem);font-weight:700;line-height:1;text-decoration:none;transition:opacity .16s;display:inline-flex;position:absolute;left:50%;transform:translate(-50%)}.hero-scroll-hint:after{content:"";border-bottom:.12em solid;border-right:.12em solid;width:.58em;height:.58em;animation:1.65s cubic-bezier(.45,0,.2,1) infinite hero-scroll-nudge}.hero-scroll-hint:hover{opacity:.68}.hero-scroll-hint:focus-visible{outline-offset:.4rem;outline:2px solid #fff}@keyframes hero-scroll-nudge{0%,to{transform:translateY(-.12rem)rotate(45deg)}50%{transform:translateY(.2rem)rotate(45deg)}}.work-intro{background:var(--page-bg);height:100svh;position:relative}.work-intro:not(.work-intro--closing){height:auto}.work-intro-stage{top:var(--site-nav-height);z-index:3;box-sizing:border-box;height:calc(100svh - var(--site-nav-height));align-items:center;padding:clamp(.75rem,1.5vw,1.25rem) clamp(1.5rem,5vw,4rem);display:flex;position:sticky;overflow:hidden}.work-intro:not(.work-intro--closing) .work-intro-stage{align-items:flex-start;height:auto;padding-top:0;padding-bottom:25px;position:relative;top:auto}.work-heading{color:#fff;letter-spacing:-.065em;text-wrap:balance;flex-wrap:wrap;gap:0 .2em;width:100%;max-width:78rem;margin:0 auto;font-size:clamp(2.85rem,8vw,7rem);font-weight:700;line-height:.94;display:flex}#work-heading{scroll-margin-top:calc(var(--site-nav-height) + 1rem)}.work-heading-words{display:contents}.work-heading-word{display:inline-block}.work-heading-email{color:inherit;width:100%;font-weight:700;text-shadow:.018em 0 transparent,-.018em 0 transparent;text-decoration:none;transition:text-shadow .16s}.work-heading-email .bi-send{vertical-align:-.06em;width:.9em;height:.9em;display:inline-block}.work-heading-email:hover,.work-heading-email:focus-visible{text-shadow:.018em 0,-.018em 0}.work-heading-email:focus-visible{outline-offset:.075em;outline:.055em solid #fff}.work-intro--closing{height:auto;min-height:0}.work-intro--closing .work-intro-stage{align-items:flex-start;height:auto;padding-top:48px;padding-bottom:56px;position:relative;top:auto}.work-stage{box-sizing:border-box;padding:clamp(0rem,.5vw,.5rem) clamp(1rem,2vw,2rem)}#work{background:var(--page-bg);scroll-margin-top:6rem}.work-stage-content{width:100%;min-width:0;max-width:none;margin-inline:auto}#work-scroller{touch-action:pan-y pinch-zoom;grid-template-columns:minmax(0,1fr);gap:clamp(.3rem,.6vw,.65rem);padding:0;display:grid;overflow:visible}#work-scroller>article{isolation:isolate;aspect-ratio:16/9;background:var(--page-bg);border-radius:0;width:100%;min-width:0;position:relative;overflow:hidden}#work-scroller>article>.portfolio-media{border-radius:0;width:100%;height:100%;display:block}#work-scroller>article>.portfolio-media>img{aspect-ratio:auto;object-fit:cover;width:100%;height:100%;transition:transform .6s cubic-bezier(.16,1,.3,1)}#work-scroller>article>.portfolio-details{z-index:2;box-sizing:border-box;opacity:0;pointer-events:none;transform-origin:bottom;backdrop-filter:blur(.35rem);background:#000000f0;align-items:center;padding:clamp(1rem,2.5vw,2.75rem);transition:opacity .18s,transform .52s cubic-bezier(.16,1,.3,1);display:flex;position:absolute;inset:0;overflow:hidden;transform:translateY(7%)skewY(1.2deg)}#work-scroller>article:focus-within>.portfolio-details{opacity:1;pointer-events:auto;transform:none}#work-scroller>article:focus-within>.portfolio-media>img{transform:scale(1.025)}#work-scroller>article:focus-visible{outline-offset:-2px;outline:2px solid #fff}#work-scroller>article>.portfolio-details>p{color:#fff;width:100%;font-size:var(--portfolio-copy-size,clamp(1.2rem, 3vw, 3.5rem));letter-spacing:-.04em;text-wrap:balance;margin:0;font-weight:700;line-height:.98}#work-scroller>article:first-child{--portfolio-copy-size:clamp(12px, calc(8.165vw - 5.73px), 88px)}#work-scroller>article:nth-child(2){--portfolio-copy-size:clamp(12px, calc(7.715vw - 6.08px), 88px)}#work-scroller>article:nth-child(3){--portfolio-copy-size:clamp(12px, calc(6.816vw - 4.68px), 88px)}#work-scroller>article:nth-child(4){--portfolio-copy-size:clamp(12px, calc(7.715vw - 6.08px), 88px)}#work-scroller>article:nth-child(5){--portfolio-copy-size:clamp(12px, calc(8.015vw - 5.58px), 88px)}#work-scroller>article:nth-child(6){--portfolio-copy-size:clamp(12px, calc(6.779vw - 5.5px), 88px)}#work-scroller>article:nth-child(7){--portfolio-copy-size:clamp(12px, calc(6.816vw - 4.68px), 88px)}#work-scroller>article:nth-child(8){--portfolio-copy-size:clamp(12px, calc(6.779vw - 5.5px), 88px)}.portfolio-description{color:#fff;display:block}.portfolio-name{font-weight:700;text-shadow:.018em 0,-.018em 0}.portfolio-live-link{color:#fff;text-shadow:.018em 0 transparent,-.018em 0 transparent;white-space:nowrap;align-items:baseline;gap:.18em;font-weight:700;text-decoration:none;transition:text-shadow .16s;display:inline-flex}.portfolio-live-link svg{flex:none;width:.72em;height:.72em}.portfolio-live-link svg path{stroke:currentColor;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;paint-order:stroke fill;transition:stroke-width .16s}.portfolio-live-link:hover,.portfolio-live-link:focus-visible{text-shadow:.018em 0,-.018em 0;font-weight:700}.portfolio-live-link:hover svg path,.portfolio-live-link:focus-visible svg path{stroke-width:.45px}.portfolio-live-link:focus-visible{outline-offset:.08em;outline:.09em solid #fff}@media (width>=768px){#work-scroller{grid-template-columns:repeat(2,minmax(0,1fr))}#work-scroller>article:first-child{--portfolio-copy-size:clamp(12px, calc(3.576vw - .87px), 88px)}#work-scroller>article:nth-child(2){--portfolio-copy-size:clamp(12px, calc(3.238vw - .77px), 88px)}#work-scroller>article:nth-child(3){--portfolio-copy-size:clamp(12px, calc(2.995vw - .7px), 88px)}#work-scroller>article:nth-child(4){--portfolio-copy-size:clamp(12px, calc(3.229vw - .8px), 88px)}#work-scroller>article:nth-child(5){--portfolio-copy-size:clamp(12px, calc(3.507vw - .73px), 88px)}#work-scroller>article:nth-child(6){--portfolio-copy-size:clamp(12px, calc(2.769vw - .57px), 88px)}#work-scroller>article:nth-child(7){--portfolio-copy-size:clamp(12px, calc(3.003vw - .76px), 88px)}#work-scroller>article:nth-child(8){--portfolio-copy-size:clamp(12px, calc(2.856vw - .63px), 88px)}}@media (width>=768px) and (hover:hover){#work-scroller>article:hover>.portfolio-details{opacity:1;pointer-events:auto;transform:none}#work-scroller>article:hover>.portfolio-media>img{transform:scale(1.025)}}@media (hover:none),(pointer:coarse){#work-scroller>article{cursor:pointer}#work-scroller>article>.portfolio-details{backdrop-filter:none}}@supports (animation-timeline:scroll()){.hero-letter,.nav-brand-letter{animation-duration:auto;animation-timing-function:linear;animation-fill-mode:both;animation-timeline:scroll(root);animation-range-start:var(--hero-range-start);animation-range-end:var(--hero-range-end)}.hero-letter{will-change:opacity,transform;animation-name:hero-letter-out}.nav-brand-letter{will-change:opacity,transform;animation-name:nav-letter-in}.hero-letter:first-child,.nav-brand-letter:first-child{--hero-range-start:4.5svh;--hero-range-end:31svh}.hero-letter:nth-child(2),.nav-brand-letter:nth-child(2){--hero-range-start:25svh;--hero-range-end:51.5svh}.hero-letter:nth-child(3),.nav-brand-letter:nth-child(3){--hero-range-start:45.5svh;--hero-range-end:72svh}.nav-brand{animation-name:nav-brand-enable;animation-duration:auto;animation-timing-function:step-end;animation-fill-mode:both;animation-timeline:scroll(root);animation-range:4.5svh calc(4.5svh + 1px)}.hero-scroll-hint{animation-name:scroll-hint-out;animation-duration:auto;animation-timing-function:linear;animation-fill-mode:both;animation-timeline:scroll(root);animation-range:45.5svh 72svh}.work-intro:not(.work-intro--closing){view-timeline-name:--work-intro;view-timeline-axis:block}.work-intro:not(.work-intro--closing) .work-heading-word{animation-name:heading-word-in;animation-duration:auto;animation-timing-function:cubic-bezier(.16,1,.3,1);animation-fill-mode:both;animation-timeline:--work-intro;animation-range-start:var(--word-range-start);animation-range-end:var(--word-range-end);transform-origin:0 100%}.work-intro:not(.work-intro--closing) .work-heading-word:first-child{--word-range-start:cover 38%;--word-range-end:cover 44%}.work-intro:not(.work-intro--closing) .work-heading-word:nth-child(2){--word-range-start:cover 39.2%;--word-range-end:cover 45.2%}.work-intro:not(.work-intro--closing) .work-heading-word:nth-child(3){--word-range-start:cover 40.4%;--word-range-end:cover 46.4%}.work-intro:not(.work-intro--closing) .work-heading-word:nth-child(4){--word-range-start:cover 41.6%;--word-range-end:cover 47.6%}.work-intro:not(.work-intro--closing) .work-heading-word:nth-child(5){--word-range-start:cover 42.8%;--word-range-end:cover 48.8%}.work-intro:not(.work-intro--closing) .work-heading-word:nth-child(6){--word-range-start:cover 44%;--word-range-end:cover 50%}.work-intro:not(.work-intro--closing) .work-heading-word:nth-child(7){--word-range-start:cover 45.2%;--word-range-end:cover 51.2%}.work-intro:not(.work-intro--closing) .work-heading-word:nth-child(8){--word-range-start:cover 46.4%;--word-range-end:cover 52.4%}.work-intro:not(.work-intro--closing) .work-heading-word:nth-child(9){--word-range-start:cover 47.6%;--word-range-end:cover 53.6%}.work-intro:not(.work-intro--closing) .work-heading-word:nth-child(10){--word-range-start:cover 48.8%;--word-range-end:cover 54.8%}.work-intro:not(.work-intro--closing) .work-heading-word:nth-child(11){--word-range-start:cover 50%;--word-range-end:cover 56%}.work-intro:not(.work-intro--closing) .work-heading-word:nth-child(12){--word-range-start:cover 51.2%;--word-range-end:cover 57.2%}.work-intro:not(.work-intro--closing) .work-heading-word:nth-child(13){--word-range-start:cover 52.4%;--word-range-end:cover 58.4%}.work-intro:not(.work-intro--closing) .work-heading-word:nth-child(14){--word-range-start:cover 53.6%;--word-range-end:cover 59.6%}#work-scroller>article{--card-start-blur:7px;--card-mid-blur:3.5px;--card-end-blur:1.25px;animation-name:portfolio-card-in-left;animation-duration:auto;transform-origin:bottom;animation-timing-function:linear;animation-fill-mode:both;animation-timeline:view();animation-range:cover 4% cover 45%}#work-scroller>article:nth-child(2n){animation-name:portfolio-card-in-right}.work-intro--closing{view-timeline-name:--closing-intro;view-timeline-axis:block}.work-intro--closing .work-heading-email,.work-intro--closing .work-heading-email>.work-heading-word{animation-name:heading-word-in;animation-duration:auto;animation-timing-function:cubic-bezier(.16,1,.3,1);animation-fill-mode:both;animation-timeline:--closing-intro;animation-range-start:var(--closing-range-start);animation-range-end:var(--closing-range-end);transform-origin:0 100%}.work-intro--closing .work-heading-email{--closing-range-start:entry 4%;--closing-range-end:entry 20%}.work-intro--closing .work-heading-email>.work-heading-word:first-child{--closing-range-start:entry 18%;--closing-range-end:entry 34%}.work-intro--closing .work-heading-email>.work-heading-word:nth-child(2){--closing-range-start:entry 32%;--closing-range-end:entry 48%}.work-intro--closing .work-heading-email>.work-heading-word:nth-child(3){--closing-range-start:entry 46%;--closing-range-end:entry 62%}.work-intro--closing .work-heading-email>.work-heading-word:nth-child(4){--closing-range-start:entry 60%;--closing-range-end:entry 76%}.work-intro--closing .work-heading-email>.work-heading-word:nth-child(5){--closing-range-start:entry 74%;--closing-range-end:entry 90%}.work-intro--closing .work-heading-email>.work-heading-word:nth-child(6){--closing-range-start:entry 84%;--closing-range-end:entry 100%}@media (orientation:portrait){#work-scroller>article:last-child{animation-range-end:cover 30%}}@media (width>=768px) and (orientation:portrait){#work-scroller>article:nth-last-child(2){animation-range-end:cover 30%}}}@keyframes hero-letter-out{0%{opacity:1;transform:scale(1)}35%{opacity:.72;transform:scale(.984)}65%{opacity:.28;transform:scale(.961)}to{opacity:0;transform:scale(.945)}}@keyframes nav-letter-in{0%{opacity:0;transform:translate(-1.35rem)rotate(-12deg)skew(-18deg)scale(.38,1.28)}35%{opacity:.28;transform:translate(-.82rem,.08rem)rotate(-6deg)skew(-10deg)scale(.61,1.15)}65%{opacity:.72;transform:translate(-.18rem,-.04rem)rotate(1.5deg)skew(2deg)scale(.9,1.04)}82%{opacity:.92;transform:translate(.05rem,.02rem)rotate(-.8deg)skew(-1deg)scale(1.02,.99)}to{opacity:1;transform:none}}@keyframes nav-brand-enable{0%{opacity:0}to{opacity:1}}@keyframes scroll-hint-out{0%{opacity:1}to{opacity:0}}@keyframes heading-word-in{0%{opacity:0;transform:translateY(.42em)rotate(1.5deg)}to{opacity:1;transform:none}}@keyframes portfolio-card-in-left{0%{opacity:0;transform:translate(-6vw,96px)rotate(-5deg)skewY(0)scale(.93,1.065)}50%{opacity:.82;transform:translate(-2vw,42px)rotate(-1.5deg)skewY(-.8deg)scale(.975,1.025)}72%{opacity:1;transform:translate(.35vw,8px)rotate(.7deg)skewY(.25deg)scale(1.006,.996)}to{opacity:1;transform:none}}@keyframes portfolio-card-in-right{0%{opacity:0;transform:translate(6vw,96px)rotate(5deg)skewY(0)scale(.93,1.065)}50%{opacity:.82;transform:translate(2vw,42px)rotate(1.5deg)skewY(.8deg)scale(.975,1.025)}72%{opacity:1;transform:translate(-.35vw,8px)rotate(-.7deg)skewY(-.25deg)scale(1.006,.996)}to{opacity:1;transform:none}}@media (hover:none),(pointer:coarse){#work-scroller>article{--card-start-blur:0px;--card-mid-blur:0px;--card-end-blur:0px}}@supports not (animation-timeline:scroll()){#work-scroller>article>.portfolio-details>p,.work-intro--closing .work-heading{ text-wrap:wrap;}#hero{display:none}.work-intro:not(.work-intro--closing){padding-top:calc(var(--site-nav-height) + 1.5rem)}}@media (prefers-reduced-motion:reduce){#hero{display:none}.work-intro:not(.work-intro--closing){padding-top:calc(var(--site-nav-height) + 1.5rem)}.nav-brand,.nav-brand-letter,.hero-letter,.hero-scroll-hint,.work-heading-word,#work-scroller>article{opacity:1;filter:none;visibility:visible;transform:none;animation:none!important}.nav-brand,.hero-scroll-hint{pointer-events:auto}.hero-scroll-hint:after{animation:none}.work-intro{height:auto}.work-intro-stage{height:auto;position:relative;top:auto}#work-scroller>article>.portfolio-media>img,#work-scroller>article>.portfolio-details{transition:none}}@media (width>=768px){#work-scroller>article:focus-within:not(:hover)>.portfolio-details{opacity:0;pointer-events:none;transform:translateY(7%)skewY(1.2deg)}#work-scroller>article:focus-visible>.portfolio-details{opacity:1;pointer-events:auto;transform:none}#work-scroller>article:focus-visible>.portfolio-media>img{transform:scale(1.025)}}@media (width<768px){#work-scroller>article:focus-within>.portfolio-details{opacity:0;pointer-events:none;transform:translateY(7%)skewY(1.2deg)}#work-scroller>article.is-active>.portfolio-details{opacity:1;pointer-events:auto;transform:none}#work-scroller>article.is-active>.portfolio-media>img{transform:scale(1.025)}}
</style>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": ["Organization", "LocalBusiness", "ProfessionalService"],
"@id": "https://afterdarklabs.io/#organization",
"name": "After Dark Labs",
"url": "https://afterdarklabs.io/",
"logo": "https://afterdarklabs.io/logo_assets/icon-512.png",
"telephone": "+1-954-621-8027",
"email": "[email protected]",
"address": {
"@type": "PostalAddress",
"streetAddress": "2755 NE 30th Ave",
"addressLocality": "Lighthouse Point",
"addressRegion": "FL",
"postalCode": "33064",
"addressCountry": "US"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 26.264305,
"longitude": -80.083566
},
"founder": {
"@type": "Person",
"name": "Harrison Erd",
"url": "https://harrisonerd.com/"
},
"areaServed": [
{ "@type": "AdministrativeArea", "name": "Broward County" },
{ "@type": "AdministrativeArea", "name": "Miami-Dade County" },
{ "@type": "AdministrativeArea", "name": "Palm Beach County" },
{ "@type": "City", "name": "Lighthouse Point" },
{ "@type": "City", "name": "Pompano Beach" },
{ "@type": "City", "name": "Fort Lauderdale" },
{ "@type": "City", "name": "Miami" },
{ "@type": "City", "name": "Miami Beach" },
{ "@type": "City", "name": "West Palm Beach" },
{ "@type": "City", "name": "Boca Raton" },
{ "@type": "Country", "name": "United States" }
],
"description": "After Dark Labs provides South Florida website design and development for custom websites, Shopify stores, mobile apps, SaaS platforms, APIs, AI integrations, branding, hosting, and business tools."
},
{
"@type": "WebSite",
"@id": "https://afterdarklabs.io/#website",
"url": "https://afterdarklabs.io/",
"name": "After Dark Labs",
"alternateName": "After Dark Labs Florida",
"publisher": {
"@id": "https://afterdarklabs.io/#organization"
},
"description": "After Dark Labs provides website design and development for custom websites, Shopify stores, mobile apps, and business tools."
},
{
"@type": "Service",
"@id": "https://afterdarklabs.io/#digital-services",
"name": "Website, ecommerce, app, and business software development",
"description": "Custom websites, ecommerce stores, mobile apps, SaaS platforms, branding, hosting, APIs, AI chatbots, and intelligent automation.",
"provider": {
"@id": "https://afterdarklabs.io/#organization"
},
"areaServed": [
{ "@type": "AdministrativeArea", "name": "Broward County" },
{ "@type": "AdministrativeArea", "name": "Miami-Dade County" },
{ "@type": "AdministrativeArea", "name": "Palm Beach County" },
{ "@type": "City", "name": "Lighthouse Point" },
{ "@type": "City", "name": "Pompano Beach" },
{ "@type": "City", "name": "Fort Lauderdale" },
{ "@type": "City", "name": "Miami" },
{ "@type": "City", "name": "Miami Beach" },
{ "@type": "City", "name": "West Palm Beach" },
{ "@type": "City", "name": "Boca Raton" },
{ "@type": "Country", "name": "United States" }
],
"serviceType": [
"Custom website design and development",
"Shopify and ecommerce development",
"Mobile app development",
"Custom platforms, dashboards, and API integrations",
"Brand identity and digital marketing",
"Hosting and business technology",
"AI integrations, chatbots, and intelligent automation"
],
"url": "https://afterdarklabs.io/"
}
]
}
</script>
</head>
<body>
<nav>
<div class="nav-shell">
<div class="mobile-nav">
<a href="#hero" class="nav-brand" aria-label="After Dark Labs — go to top">
<span class="nav-brand-word" aria-hidden="true"><span class="nav-brand-letter">After</span><span class="nav-brand-letter">Dark</span><span class="nav-brand-letter">Labs</span></span>
</a>
<a href="mailto:[email protected]?subject=Website%20or%20app%20project%20inquiry&body=Hi%20After%20Dark%20Labs%2C%0A%0AI%E2%80%99m%20interested%20in%20discussing%20a%20website%20or%20app%20project.%20Here%E2%80%99s%20a%20quick%20overview%3A%0A%0AProject%20type%3A%0AGoals%3A%0ATimeline%3A%0ABudget%3A%0A%0AThanks%21" class="nav-cta">Let's Talk</a>
</div>
<div class="desktop-nav">
<a href="#hero" class="nav-brand" aria-label="After Dark Labs — go to top">
<div>
<span class="nav-brand-word" aria-hidden="true"><span class="nav-brand-letter">After</span><span class="nav-brand-letter">Dark</span><span class="nav-brand-letter">Labs</span></span>
</div>
</a>
<a href="mailto:[email protected]?subject=Website%20or%20app%20project%20inquiry&body=Hi%20After%20Dark%20Labs%2C%0A%0AI%E2%80%99m%20interested%20in%20discussing%20a%20website%20or%20app%20project.%20Here%E2%80%99s%20a%20quick%20overview%3A%0A%0AProject%20type%3A%0AGoals%3A%0ATimeline%3A%0ABudget%3A%0A%0AThanks%21" class="nav-cta">Let's Talk</a>
</div>
</div>
</nav>
<main>
<section id="hero">
<div class="hero-vignette"></div>
<div class="hero-content">
<div>
<h1 aria-label="After Dark Labs - Custom websites and apps"><span class="hero-word hero-letter" aria-hidden="true">After</span><span class="hero-word hero-letter" aria-hidden="true">Dark</span><span class="hero-word hero-letter" aria-hidden="true">Labs</span></h1>
</div>
</div>
<a class="hero-scroll-hint" href="#work-heading" aria-label="Scroll to featured work"></a>
</section>
<section class="work-intro" aria-labelledby="work-heading">
<div class="work-intro-stage">
<h2 id="work-heading" class="work-heading" aria-label="We build custom websites and apps. Take a look at some of our work.">
<span class="work-heading-words" aria-hidden="true">
<span class="work-heading-word">We</span>
<span class="work-heading-word">build</span>
<span class="work-heading-word">custom</span>
<span class="work-heading-word">websites</span>
<span class="work-heading-word">and</span>
<span class="work-heading-word">apps.</span>
<span class="work-heading-word">Take</span>
<span class="work-heading-word">a</span>
<span class="work-heading-word">look</span>
<span class="work-heading-word">at</span>
<span class="work-heading-word">some</span>
<span class="work-heading-word">of</span>
<span class="work-heading-word">our</span>
<span class="work-heading-word">work.</span>
</span>
</h2>
</div>
</section>
<section id="work" aria-label="Featured work">
<div class="work-stage">
<div class="work-stage-content">
<div id="work-scroller">
<article tabindex="0">
<div class="portfolio-media">
<img src="https://afterdarklabs.io/gardenfresh.webp?v=2" srcset="https://afterdarklabs.io/gardenfresh-600.webp?v=2 600w, https://afterdarklabs.io/gardenfresh-800.webp?v=2 800w, https://afterdarklabs.io/gardenfresh.webp?v=2 1200w" sizes="(min-width: 768px) 50vw, 100vw" width="1200" height="702" loading="lazy" decoding="async" alt="Garden Fresh Wholesale ecommerce web app project by After Dark Labs">
</div>
<div class="portfolio-details">
<p>
<span class="portfolio-description">We built <span class="portfolio-name">Garden Fresh Wholesale</span>'s business website and local SEO strategy that increased customer acquisition by 48% since launch. <a class="portfolio-live-link" aria-label="View project: Garden Fresh Wholesale (opens in a new tab)" href="https://gardenfreshwholesale.com" target="_blank" rel="noopener noreferrer">View project <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-box-arrow-up-right" viewBox="0 0 16 16" aria-hidden="true"><path fill-rule="evenodd" d="M8.636 3.5a.5.5 0 0 0-.5-.5H1.5A1.5 1.5 0 0 0 0 4.5v10A1.5 1.5 0 0 0 1.5 16h10a1.5 1.5 0 0 0 1.5-1.5V7.864a.5.5 0 0 0-1 0V14.5a.5.5 0 0 1-.5.5h-10a.5.5 0 0 1-.5-.5v-10a.5.5 0 0 1 .5-.5h6.636a.5.5 0 0 0 .5-.5"/><path fill-rule="evenodd" d="M16 .5a.5.5 0 0 0-.5-.5h-5a.5.5 0 0 0 0 1h3.793L6.146 9.146a.5.5 0 1 0 .708.708L15 1.707V5.5a.5.5 0 0 0 1 0z"/></svg></a></span>
</p>
</div>
</article>
<article tabindex="0">
<div class="portfolio-media">
<img src="https://afterdarklabs.io/miadruck.webp?v=3" srcset="https://afterdarklabs.io/miadruck-600.webp?v=3 600w, https://afterdarklabs.io/miadruck-800.webp?v=3 800w, https://afterdarklabs.io/miadruck.webp?v=3 1902w" sizes="(min-width: 768px) 50vw, 100vw" width="1902" height="1112" loading="lazy" decoding="async" alt="Mia Druck real estate website project by After Dark Labs">
</div>
<div class="portfolio-details">
<p>
<span class="portfolio-description"><span class="portfolio-name">Mia Druck</span> needed a real estate website with heavy local SEO and a custom API for the most up-to-date listings and sales. We delivered this custom site in under a week. <a class="portfolio-live-link" aria-label="View project: Mia Druck (opens in a new tab)" href="https://miadruck.com" target="_blank" rel="noopener noreferrer">View project <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-box-arrow-up-right" viewBox="0 0 16 16" aria-hidden="true"><path fill-rule="evenodd" d="M8.636 3.5a.5.5 0 0 0-.5-.5H1.5A1.5 1.5 0 0 0 0 4.5v10A1.5 1.5 0 0 0 1.5 16h10a1.5 1.5 0 0 0 1.5-1.5V7.864a.5.5 0 0 0-1 0V14.5a.5.5 0 0 1-.5.5h-10a.5.5 0 0 1-.5-.5v-10a.5.5 0 0 1 .5-.5h6.636a.5.5 0 0 0 .5-.5"/><path fill-rule="evenodd" d="M16 .5a.5.5 0 0 0-.5-.5h-5a.5.5 0 0 0 0 1h3.793L6.146 9.146a.5.5 0 1 0 .708.708L15 1.707V5.5a.5.5 0 0 0 1 0z"/></svg></a></span>
</p>
</div>
</article>
<article tabindex="0">
<div class="portfolio-media">
<img src="https://afterdarklabs.io/coralvibe.webp?v=1" srcset="https://afterdarklabs.io/coralvibe-600.webp?v=1 600w, https://afterdarklabs.io/coralvibe-800.webp?v=1 800w, https://afterdarklabs.io/coralvibe.webp?v=1 1200w" sizes="(min-width: 768px) 50vw, 100vw" width="1200" height="678" loading="lazy" decoding="async" alt="Shopify store for Coral Vibe Florida project by After Dark Labs">
</div>
<div class="portfolio-details">
<p>
<span class="portfolio-description"><span class="portfolio-name">Coral Vibe</span> hired us to design their Shopify store and provide support for ecommerce operations, product management, and social media marketing. Since launch, store visits resulting in sales have increased by 86%. <a class="portfolio-live-link" aria-label="View project: Coral Vibe (opens in a new tab)" href="https://coralvibefl.com" target="_blank" rel="noopener noreferrer">View project <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-box-arrow-up-right" viewBox="0 0 16 16" aria-hidden="true"><path fill-rule="evenodd" d="M8.636 3.5a.5.5 0 0 0-.5-.5H1.5A1.5 1.5 0 0 0 0 4.5v10A1.5 1.5 0 0 0 1.5 16h10a1.5 1.5 0 0 0 1.5-1.5V7.864a.5.5 0 0 0-1 0V14.5a.5.5 0 0 1-.5.5h-10a.5.5 0 0 1-.5-.5v-10a.5.5 0 0 1 .5-.5h6.636a.5.5 0 0 0 .5-.5"/><path fill-rule="evenodd" d="M16 .5a.5.5 0 0 0-.5-.5h-5a.5.5 0 0 0 0 1h3.793L6.146 9.146a.5.5 0 1 0 .708.708L15 1.707V5.5a.5.5 0 0 0 1 0z"/></svg></a></span>
</p>
</div>
</article>
<article tabindex="0">
<div class="portfolio-media">
<img src="https://afterdarklabs.io/frontlineboats.webp?v=1" srcset="https://afterdarklabs.io/frontlineboats-600.webp?v=1 600w, https://afterdarklabs.io/frontlineboats-800.webp?v=1 800w, https://afterdarklabs.io/frontlineboats.webp?v=1 1200w" sizes="(min-width: 768px) 50vw, 100vw" width="1200" height="700" loading="lazy" decoding="async" alt="Frontline Boat Services marine services website project by After Dark Labs">
</div>
<div class="portfolio-details">
<p>
<span class="portfolio-description">For <span class="portfolio-name">Frontline Boat Services</span>, we built a highly focused business website with local SEO, custom payment links for customers, and an owner-managed photo gallery. <a class="portfolio-live-link" aria-label="View project: Frontline Boat Services (opens in a new tab)" href="https://frontlineboats.com" target="_blank" rel="noopener noreferrer">View project <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-box-arrow-up-right" viewBox="0 0 16 16" aria-hidden="true"><path fill-rule="evenodd" d="M8.636 3.5a.5.5 0 0 0-.5-.5H1.5A1.5 1.5 0 0 0 0 4.5v10A1.5 1.5 0 0 0 1.5 16h10a1.5 1.5 0 0 0 1.5-1.5V7.864a.5.5 0 0 0-1 0V14.5a.5.5 0 0 1-.5.5h-10a.5.5 0 0 1-.5-.5v-10a.5.5 0 0 1 .5-.5h6.636a.5.5 0 0 0 .5-.5"/><path fill-rule="evenodd" d="M16 .5a.5.5 0 0 0-.5-.5h-5a.5.5 0 0 0 0 1h3.793L6.146 9.146a.5.5 0 1 0 .708.708L15 1.707V5.5a.5.5 0 0 0 1 0z"/></svg></a></span>
</p>
</div>
</article>
<article tabindex="0">
<div class="portfolio-media">
<img src="https://afterdarklabs.io/voldservices.webp" srcset="https://afterdarklabs.io/voldservices-600.webp 600w, https://afterdarklabs.io/voldservices-800.webp 800w, https://afterdarklabs.io/voldservices.webp 1200w" sizes="(min-width: 768px) 50vw, 100vw" width="1200" height="702" loading="lazy" decoding="async" alt="Vold Services exterior cleaning website with a scroll-animated hero, designed by After Dark Labs">
</div>
<div class="portfolio-details">
<p>
<span class="portfolio-description"><span class="portfolio-name">Vold Services</span> hired us to create their business website with a scroll-animated hero, local SEO/GEO and an owner-managed photo gallery. <a class="portfolio-live-link" aria-label="View project: Vold Services (opens in a new tab)" href="https://voldservices.com" target="_blank" rel="noopener noreferrer">View project <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-box-arrow-up-right" viewBox="0 0 16 16" aria-hidden="true"><path fill-rule="evenodd" d="M8.636 3.5a.5.5 0 0 0-.5-.5H1.5A1.5 1.5 0 0 0 0 4.5v10A1.5 1.5 0 0 0 1.5 16h10a1.5 1.5 0 0 0 1.5-1.5V7.864a.5.5 0 0 0-1 0V14.5a.5.5 0 0 1-.5.5h-10a.5.5 0 0 1-.5-.5v-10a.5.5 0 0 1 .5-.5h6.636a.5.5 0 0 0 .5-.5"/><path fill-rule="evenodd" d="M16 .5a.5.5 0 0 0-.5-.5h-5a.5.5 0 0 0 0 1h3.793L6.146 9.146a.5.5 0 1 0 .708.708L15 1.707V5.5a.5.5 0 0 0 1 0z"/></svg></a></span>
</p>
</div>
</article>
<article tabindex="0">
<div class="portfolio-media">
<img src="https://afterdarklabs.io/vegy.webp?v=1" srcset="https://afterdarklabs.io/vegy-600.webp?v=1 600w, https://afterdarklabs.io/vegy-800.webp?v=1 800w, https://afterdarklabs.io/vegy.webp?v=1 1200w" sizes="(min-width: 768px) 50vw, 100vw" width="1200" height="702" loading="lazy" decoding="async" alt="Vegy wholesale ordering platform project by After Dark Labs">
</div>
<div class="portfolio-details">
<p>
<span class="portfolio-description">We have partnered with <span class="portfolio-name">Vegy</span> since 2023 to create a white-label web app for wholesale ordering with AI and email integrations, real-time updates, and advanced analytics. The app processed over $2 million in orders in the first year. <a class="portfolio-live-link" aria-label="View project: Vegy (opens in a new tab)" href="https://vegy.app/" target="_blank" rel="noopener noreferrer">View project <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-box-arrow-up-right" viewBox="0 0 16 16" aria-hidden="true"><path fill-rule="evenodd" d="M8.636 3.5a.5.5 0 0 0-.5-.5H1.5A1.5 1.5 0 0 0 0 4.5v10A1.5 1.5 0 0 0 1.5 16h10a1.5 1.5 0 0 0 1.5-1.5V7.864a.5.5 0 0 0-1 0V14.5a.5.5 0 0 1-.5.5h-10a.5.5 0 0 1-.5-.5v-10a.5.5 0 0 1 .5-.5h6.636a.5.5 0 0 0 .5-.5"/><path fill-rule="evenodd" d="M16 .5a.5.5 0 0 0-.5-.5h-5a.5.5 0 0 0 0 1h3.793L6.146 9.146a.5.5 0 1 0 .708.708L15 1.707V5.5a.5.5 0 0 0 1 0z"/></svg></a></span>
</p>
</div>
</article>
<article tabindex="0">
<div class="portfolio-media">
<img src="https://afterdarklabs.io/prima.webp?v=1" srcset="https://afterdarklabs.io/prima-600.webp?v=1 600w, https://afterdarklabs.io/prima-800.webp?v=1 800w, https://afterdarklabs.io/prima.webp?v=1 1200w" sizes="(min-width: 768px) 50vw, 100vw" width="1200" height="702" loading="lazy" decoding="async" alt="Prima Produce business website project by After Dark Labs">
</div>
<div class="portfolio-details">
<p>
<span class="portfolio-description">Our partner <span class="portfolio-name">Prima Produce</span> hired us to build their business website with custom online ordering and cohesive branding. Working with their existing logo, we created a complete online experience for Prima's customers. <a class="portfolio-live-link" aria-label="View project: Prima Produce (opens in a new tab)" href="https://prima.vegy.app/" target="_blank" rel="noopener noreferrer">View project <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-box-arrow-up-right" viewBox="0 0 16 16" aria-hidden="true"><path fill-rule="evenodd" d="M8.636 3.5a.5.5 0 0 0-.5-.5H1.5A1.5 1.5 0 0 0 0 4.5v10A1.5 1.5 0 0 0 1.5 16h10a1.5 1.5 0 0 0 1.5-1.5V7.864a.5.5 0 0 0-1 0V14.5a.5.5 0 0 1-.5.5h-10a.5.5 0 0 1-.5-.5v-10a.5.5 0 0 1 .5-.5h6.636a.5.5 0 0 0 .5-.5"/><path fill-rule="evenodd" d="M16 .5a.5.5 0 0 0-.5-.5h-5a.5.5 0 0 0 0 1h3.793L6.146 9.146a.5.5 0 1 0 .708.708L15 1.707V5.5a.5.5 0 0 0 1 0z"/></svg></a></span>
</p>
</div>
</article>
<article tabindex="0">
<div class="portfolio-media">
<img src="https://afterdarklabs.io/invoiceotter.webp?v=1" srcset="https://afterdarklabs.io/invoiceotter-600.webp?v=1 600w, https://afterdarklabs.io/invoiceotter-800.webp?v=1 800w, https://afterdarklabs.io/invoiceotter.webp?v=1 1200w" sizes="(min-width: 768px) 50vw, 100vw" width="1200" height="673" loading="lazy" decoding="async" alt="Invoice Otter SaaS project by After Dark Labs">
</div>
<div class="portfolio-details">
<p>
<span class="portfolio-description">We built the mobile app, web interface, and the APIs for <span class="portfolio-name">Invoice Otter</span>'s contractor invoicing and estimating solutions with subscriptions, integrated payments, a custom AI chatbot, and per-user customization. <a class="portfolio-live-link" aria-label="View project: Invoice Otter (opens in a new tab)" href="https://invoiceotter.com" target="_blank" rel="noopener noreferrer">View project <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-box-arrow-up-right" viewBox="0 0 16 16" aria-hidden="true"><path fill-rule="evenodd" d="M8.636 3.5a.5.5 0 0 0-.5-.5H1.5A1.5 1.5 0 0 0 0 4.5v10A1.5 1.5 0 0 0 1.5 16h10a1.5 1.5 0 0 0 1.5-1.5V7.864a.5.5 0 0 0-1 0V14.5a.5.5 0 0 1-.5.5h-10a.5.5 0 0 1-.5-.5v-10a.5.5 0 0 1 .5-.5h6.636a.5.5 0 0 0 .5-.5"/><path fill-rule="evenodd" d="M16 .5a.5.5 0 0 0-.5-.5h-5a.5.5 0 0 0 0 1h3.793L6.146 9.146a.5.5 0 1 0 .708.708L15 1.707V5.5a.5.5 0 0 0 1 0z"/></svg></a></span>
</p>
</div>
</article>
</div>
</div>
</div>
<div class="work-intro work-intro--closing" aria-labelledby="closing-heading">
<div class="work-intro-stage">
<h2 id="closing-heading" class="work-heading">
<span class="work-heading-words">
<a class="work-heading-word work-heading-email" href="mailto:[email protected]?subject=Website%20or%20app%20project%20inquiry&body=Hi%20After%20Dark%20Labs%2C%0A%0AI%E2%80%99m%20interested%20in%20discussing%20a%20website%20or%20app%20project.%20Here%E2%80%99s%20a%20quick%20overview%3A%0A%0AProject%20type%3A%0AGoals%3A%0ATimeline%3A%0ABudget%3A%0A%0AThanks%21">
<span class="work-heading-word">Let’s</span>
<span class="work-heading-word">move</span>
<span class="work-heading-word">your</span>
<span class="work-heading-word">business</span>
<span class="work-heading-word">forward</span>
<span class="work-heading-word">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-send" viewBox="0 0 16 16">
<path d="M15.854.146a.5.5 0 0 1 .11.54l-5.819 14.547a.75.75 0 0 1-1.329.124l-3.178-4.995L.643 7.184a.75.75 0 0 1 .124-1.33L15.314.037a.5.5 0 0 1 .54.11ZM6.636 10.07l2.761 4.338L14.13 2.576zm6.787-8.201L1.591 6.602l4.339 2.76z"/>
</svg>
</span>
</a>
</span>
</h2>
</div>
</div>
</section>
</main>
<script>(()=>{const e=document.querySelector("#work-scroller"),t=window.matchMedia("(max-width: 767px)");if(!e)return;const c=[...e.querySelectorAll(":scope > article")],s=()=>c.forEach(e=>e.classList.remove("is-active"));e.addEventListener("click",c=>{if(!t.matches||c.target.closest(".portfolio-live-link"))return;const o=c.target.closest("article");if(!o||o.parentElement!==e)return;const i=o.classList.contains("is-active");s(),i||o.classList.add("is-active")}),document.addEventListener("click",e=>{t.matches&&!e.target.closest("#work-scroller > article")&&s()}),t.addEventListener?.("change",s)})();</script>
</body>
</html>