Files
2026-02-01 00:47:50 +01:00

1023 lines
92 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html><html lang="en-US" class="js lenis"><head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=5"><title>How Cline Revolutionized My TDD Approach with AI</title>
<style>img:is([sizes="auto" i], [sizes^="auto," i]) { contain-intrinsic-size: 3000px 1500px }</style>
<meta name="dc.title" content="How Cline Revolutionized My TDD Approach with AI">
<meta name="dc.description" content="Explore how the Cline VSCode extension revolutionizes AI-driven Test Driven Development, pushing the limits of coding efficiency.">
<meta name="dc.relation" content="https://mintel.me/i-was-wrong-about-test-driven-development-with-ai-and-cline-just-slapped-me-with-the-truth/">
<meta name="dc.source" content="https://mintel.me/">
<meta name="dc.language" content="en_US">
<meta name="description" content="Explore how the Cline VSCode extension revolutionizes AI-driven Test Driven Development, pushing the limits of coding efficiency.">
<meta name="robots" content="index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1">
<link rel="canonical" href="https://mintel.me/i-was-wrong-about-test-driven-development-with-ai-and-cline-just-slapped-me-with-the-truth/">
<meta property="og:url" content="https://mintel.me/i-was-wrong-about-test-driven-development-with-ai-and-cline-just-slapped-me-with-the-truth/">
<meta property="og:site_name" content="Marc Mintel">
<meta property="og:locale" content="en_US">
<meta property="og:type" content="article">
<meta property="og:title" content="How Cline Revolutionized My TDD Approach with AI">
<meta property="og:description" content="Explore how the Cline VSCode extension revolutionizes AI-driven Test Driven Development, pushing the limits of coding efficiency.">
<meta property="og:image" content="../wp-content/uploads/2025/01/CleanShot-2025-01-08-at-14.29.07_2x.webp">
<meta property="og:image:secure_url" content="https://mintel.me/wp-content/uploads/2025/01/CleanShot-2025-01-08-at-14.29.07@2x.webp">
<meta property="og:image:width" content="1920">
<meta property="og:image:height" content="1294">
<meta property="fb:pages" content="">
<meta property="fb:admins" content="">
<meta property="fb:app_id" content="">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="How Cline Revolutionized My TDD Approach with AI">
<meta name="twitter:description" content="Explore how the Cline VSCode extension revolutionizes AI-driven Test Driven Development, pushing the limits of coding efficiency.">
<meta name="twitter:image" content="https://mintel.me/wp-content/uploads/2025/01/CleanShot-2025-01-08-at-14.29.07@2x-1024x690.webp">
<link rel="dns-prefetch" href="//fonts.googleapis.com">
<link rel="alternate" type="application/rss+xml" title="Marc Mintel » Feed" href="https://mintel.me/feed/">
<link rel="alternate" type="application/rss+xml" title="Marc Mintel » Comments Feed" href="https://mintel.me/comments/feed/">
<link rel="preload" href="https://mintel.me/wp-content/themes/salient/css/fonts/icomoon.woff?v=1.6" as="font" type="font/woff" crossorigin="anonymous"><link rel="stylesheet" id="device_wrapper-simplebar-css" href="../wp-content/plugins/device-wrapper/src/css/simplebar.css" type="text/css" media="all">
<link rel="stylesheet" id="device_wrapper-style-css-css" href="../wp-content/plugins/device-wrapper/dist/blocks.style.build.css" type="text/css" media="all">
<style id="wpseopress-local-business-style-inline-css" type="text/css">
span.wp-block-wpseopress-local-business-field{margin-right:8px}
</style>
<style id="filebird-block-filebird-gallery-style-inline-css" type="text/css">
ul.filebird-block-filebird-gallery{margin:auto!important;padding:0!important;width:100%}ul.filebird-block-filebird-gallery.layout-grid{display:grid;grid-gap:20px;align-items:stretch;grid-template-columns:repeat(var(--columns),1fr);justify-items:stretch}ul.filebird-block-filebird-gallery.layout-grid li img{border:1px solid #ccc;box-shadow:2px 2px 6px 0 rgba(0,0,0,.3);height:100%;max-width:100%;-o-object-fit:cover;object-fit:cover;width:100%}ul.filebird-block-filebird-gallery.layout-masonry{-moz-column-count:var(--columns);-moz-column-gap:var(--space);column-gap:var(--space);-moz-column-width:var(--min-width);columns:var(--min-width) var(--columns);display:block;overflow:auto}ul.filebird-block-filebird-gallery.layout-masonry li{margin-bottom:var(--space)}ul.filebird-block-filebird-gallery li{list-style:none}ul.filebird-block-filebird-gallery li figure{height:100%;margin:0;padding:0;position:relative;width:100%}ul.filebird-block-filebird-gallery li figure figcaption{background:linear-gradient(0deg,rgba(0,0,0,.7),rgba(0,0,0,.3) 70%,transparent);bottom:0;box-sizing:border-box;color:#fff;font-size:.8em;margin:0;max-height:100%;overflow:auto;padding:3em .77em .7em;position:absolute;text-align:center;width:100%;z-index:2}ul.filebird-block-filebird-gallery li figure figcaption a{color:inherit}
</style>
<style id="global-styles-inline-css" type="text/css">
:root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1);--wp--preset--shadow--crisp: 6px 6px 0px rgba(0, 0, 0, 1);}:root { --wp--style--global--content-size: 1300px;--wp--style--global--wide-size: 1300px; }:where(body) { margin: 0; }.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}.is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width: var(--wp--style--global--content-size);margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > .alignwide{max-width: var(--wp--style--global--wide-size);}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}body{padding-top: 0px;padding-right: 0px;padding-bottom: 0px;padding-left: 0px;}:root :where(.wp-element-button, .wp-block-button__link){background-color: #32373c;border-width: 0;color: #fff;font-family: inherit;font-size: inherit;line-height: inherit;padding: calc(0.667em + 2px) calc(1.333em + 2px);text-decoration: none;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}
:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}
:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}
:root :where(.wp-block-pullquote){font-size: 1.5em;line-height: 1.6;}
</style>
<link rel="stylesheet" id="salient-social-css" href="../wp-content/plugins/salient-social/css/style.css" type="text/css" media="all">
<style id="salient-social-inline-css" type="text/css">
.sharing-default-minimal .nectar-love.loved,
body .nectar-social[data-color-override="override"].fixed > a:before,
body .nectar-social[data-color-override="override"].fixed .nectar-social-inner a,
.sharing-default-minimal .nectar-social[data-color-override="override"] .nectar-social-inner a:hover,
.nectar-social.vertical[data-color-override="override"] .nectar-social-inner a:hover {
background-color: #111111;
}
.nectar-social.hover .nectar-love.loved,
.nectar-social.hover > .nectar-love-button a:hover,
.nectar-social[data-color-override="override"].hover > div a:hover,
#single-below-header .nectar-social[data-color-override="override"].hover > div a:hover,
.nectar-social[data-color-override="override"].hover .share-btn:hover,
.sharing-default-minimal .nectar-social[data-color-override="override"] .nectar-social-inner a {
border-color: #111111;
}
#single-below-header .nectar-social.hover .nectar-love.loved i,
#single-below-header .nectar-social.hover[data-color-override="override"] a:hover,
#single-below-header .nectar-social.hover[data-color-override="override"] a:hover i,
#single-below-header .nectar-social.hover .nectar-love-button a:hover i,
.nectar-love:hover i,
.hover .nectar-love:hover .total_loves,
.nectar-love.loved i,
.nectar-social.hover .nectar-love.loved .total_loves,
.nectar-social.hover .share-btn:hover,
.nectar-social[data-color-override="override"].hover .nectar-social-inner a:hover,
.nectar-social[data-color-override="override"].hover > div:hover span,
.sharing-default-minimal .nectar-social[data-color-override="override"] .nectar-social-inner a:not(:hover) i,
.sharing-default-minimal .nectar-social[data-color-override="override"] .nectar-social-inner a:not(:hover) {
color: #111111;
}
</style>
<link rel="stylesheet" id="vlp-public-css" href="../wp-content/plugins/visual-link-preview/dist/public.css" type="text/css" media="all">
<link rel="stylesheet" id="salient-grid-system-css" href="../wp-content/themes/salient/css/build/grid-system.css" type="text/css" media="all">
<link rel="stylesheet" id="main-styles-css" href="../wp-content/themes/salient/css/build/style.css" type="text/css" media="all">
<style id="main-styles-inline-css" type="text/css">
body[data-ajax-transitions="true"] #ajax-loading-screen[data-effect="standard"],body[data-ajax-transitions="true"] #ajax-loading-screen[data-effect="standard"] .loading-icon{transition:opacity 0.4s ease;}body[data-ajax-transitions="true"] #ajax-loading-screen[data-effect="standard"].loaded,body[data-ajax-transitions="true"] #ajax-loading-screen[data-effect="standard"].loaded .loading-icon{opacity:0;}@media only screen and (max-width:999px){#ajax-content-wrap .top-level .nectar-post-grid[data-animation*="fade"] .nectar-post-grid-item,#ajax-content-wrap .top-level .nectar-post-grid[data-animation="zoom-out-reveal"] .nectar-post-grid-item *:not(.content):not(.bg-overlay),#ajax-content-wrap .top-level .nectar-post-grid[data-animation="zoom-out-reveal"] .nectar-post-grid-item *:before{transform:none;opacity:1;clip-path:none;}#ajax-content-wrap .top-level .nectar-post-grid[data-animation="zoom-out-reveal"] .nectar-post-grid-item .nectar-el-parallax-scroll .nectar-post-grid-item-bg-wrap-inner{transform:scale(1.275);}}.wpb_row.vc_row.top-level .nectar-video-bg{opacity:1;height:100%;width:100%;object-fit:cover;object-position:center center;}body.using-mobile-browser .wpb_row.vc_row.top-level .nectar-video-wrap{left:0;}body.using-mobile-browser .wpb_row.vc_row.top-level.full-width-section .nectar-video-wrap:not(.column-video){left:50%;}body.using-mobile-browser #nectar_fullscreen_rows[data-mobile-disable="off"] .wpb_row.vc_row.top-level.full-width-section .nectar-video-wrap:not(.column-video){left:0;}.wpb_row.vc_row.top-level .nectar-video-wrap{opacity:1;width:100%;}body .wpb_row.parallax_section.top-level > .nectar-video-wrap video:not(.translate){opacity:1;}.top-level .portfolio-items[data-loading=lazy-load] .col .inner-wrap.animated .top-level-image{opacity:1;}.wpb_row.vc_row.top-level .column-image-bg-wrap[data-n-parallax-bg="true"] .column-image-bg,.wpb_row.vc_row.top-level + .wpb_row .column-image-bg-wrap[data-n-parallax-bg="true"] .column-image-bg,#portfolio-extra > .wpb_row.vc_row.parallax_section:first-child .row-bg{transform:none!important;height:100%!important;opacity:1;}#portfolio-extra > .wpb_row.vc_row.parallax_section .row-bg{background-attachment:scroll;}.scroll-down-wrap.hidden{transform:none;opacity:1;}#ajax-loading-screen[data-disable-mobile="0"]{display:none!important;}body[data-slide-out-widget-area-style="slide-out-from-right"].material .slide_out_area_close.hide_until_rendered{opacity:0;}
</style>
<link rel="stylesheet" id="nectar-header-layout-centered-menu-css" href="../wp-content/themes/salient/css/build/header/header-layout-centered-menu.css" type="text/css" media="all">
<link rel="stylesheet" id="nectar-header-perma-transparent-css" href="../wp-content/themes/salient/css/build/header/header-perma-transparent.css" type="text/css" media="all">
<link rel="stylesheet" id="nectar-single-styles-css" href="../wp-content/themes/salient/css/build/single.css" type="text/css" media="all">
<link rel="stylesheet" id="nectar-element-highlighted-text-css" href="../wp-content/themes/salient/css/build/elements/element-highlighted-text.css" type="text/css" media="all">
<link rel="stylesheet" id="nectar-element-post-grid-css" href="../wp-content/themes/salient/css/build/elements/element-post-grid.css" type="text/css" media="all">
<link rel="stylesheet" id="nectar-element-recent-posts-css" href="../wp-content/themes/salient/css/build/elements/element-recent-posts.css" type="text/css" media="all">
<link rel="stylesheet" id="nectar_default_font_open_sans-css" href="../_external/fonts.googleapis.com/css" type="text/css" media="all">
<link rel="stylesheet" id="responsive-css" href="../wp-content/themes/salient/css/build/responsive.css" type="text/css" media="all">
<link rel="stylesheet" id="skin-material-css" href="../wp-content/themes/salient/css/build/skin-material.css" type="text/css" media="all">
<link rel="stylesheet" id="salient-wp-menu-dynamic-css" href="../wp-content/uploads/salient/menu-dynamic.css" type="text/css" media="all">
<link rel="stylesheet" id="nectar-widget-posts-css" href="../wp-content/themes/salient/css/build/elements/widget-nectar-posts.css" type="text/css" media="all">
<link rel="stylesheet" id="js_composer_front-css" href="../wp-content/plugins/js_composer_salient/assets/css/js_composer.min.css" type="text/css" media="all">
<link rel="stylesheet" id="dynamic-css-css" href="../wp-content/themes/salient/css/salient-dynamic-styles.css" type="text/css" media="all">
<style id="dynamic-css-inline-css" type="text/css">
.single.single-post .container-wrap{padding-top:0;}.main-content .featured-media-under-header{padding:min(6vw,90px) 0;}.featured-media-under-header__featured-media:not([data-has-img="false"]){margin-top:min(6vw,90px);}.featured-media-under-header__featured-media:not([data-format="video"]):not([data-format="audio"]):not([data-has-img="false"]){overflow:hidden;position:relative;padding-bottom:50%;}.featured-media-under-header__meta-wrap{display:flex;flex-wrap:wrap;align-items:center;}.featured-media-under-header__meta-wrap .meta-author{display:inline-flex;align-items:center;}.featured-media-under-header__meta-wrap .meta-author img{margin-right:8px;width:28px;border-radius:100px;}.featured-media-under-header__featured-media .post-featured-img{display:block;line-height:0;top:auto;bottom:0;}.featured-media-under-header__featured-media[data-n-parallax-bg="true"] .post-featured-img{height:calc(100% + 75px);}.featured-media-under-header__featured-media .post-featured-img img{position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;object-position:top;}@media only screen and (max-width:690px){.featured-media-under-header__featured-media[data-n-parallax-bg="true"] .post-featured-img{height:calc(100% + 45px);}.featured-media-under-header__meta-wrap{font-size:14px;}}.featured-media-under-header__featured-media[data-align="center"] .post-featured-img img{object-position:center;}.featured-media-under-header__featured-media[data-align="bottom"] .post-featured-img img{object-position:bottom;}.featured-media-under-header h1{margin:max(min(0.35em,35px),20px) 0 max(min(0.25em,25px),15px) 0;}.featured-media-under-header__cat-wrap .meta-category a{line-height:1;padding:7px 15px;margin-right:15px;}.featured-media-under-header__cat-wrap .meta-category a:not(:hover){background-color:rgba(0,0,0,0.05);}.featured-media-under-header__cat-wrap .meta-category a:hover{color:#fff;}.featured-media-under-header__meta-wrap a,.featured-media-under-header__cat-wrap a{color:inherit;}.featured-media-under-header__meta-wrap > span:not(:first-child):not(.rich-snippet-hidden):before{content:"&middot;";padding:0 .5em;}.featured-media-under-header__excerpt{margin:0 0 20px 0;}@media only screen and (min-width:691px){[data-animate="fade_in"] .featured-media-under-header__cat-wrap,[data-animate="fade_in"].featured-media-under-header .entry-title,[data-animate="fade_in"] .featured-media-under-header__meta-wrap,[data-animate="fade_in"] .featured-media-under-header__featured-media,[data-animate="fade_in"] .featured-media-under-header__excerpt,[data-animate="fade_in"].featured-media-under-header + .row .content-inner{opacity:0;transform:translateY(50px);animation:nectar_featured_media_load 1s cubic-bezier(0.25,1,0.5,1) forwards;}[data-animate="fade_in"] .featured-media-under-header__cat-wrap{animation-delay:0.1s;}[data-animate="fade_in"].featured-media-under-header .entry-title{animation-delay:0.2s;}[data-animate="fade_in"] .featured-media-under-header__excerpt{animation-delay:0.3s;}[data-animate="fade_in"] .featured-media-under-header__meta-wrap{animation-delay:0.3s;}[data-animate="fade_in"] .featured-media-under-header__featured-media{animation-delay:0.4s;}[data-animate="fade_in"].featured-media-under-header + .row .content-inner{animation-delay:0.5s;}}@keyframes nectar_featured_media_load{0%{transform:translateY(50px);opacity:0;}100%{transform:translateY(0px);opacity:1;}}.featured-media-under-header__content{display:flex;flex-direction:column;align-items:center;text-align:center;max-width:1000px;margin:0 auto;}@media only screen and (min-width:691px){.featured-media-under-header__excerpt{max-width:75%;}}.featured-media-under-header__meta-wrap .meta-author img{margin-right:15px;width:50px;}@media only screen and (max-width:690px){width:40px;}.featured-media-under-header__meta-wrap .meta-author > span{text-align:left;line-height:1.5;}.featured-media-under-header__meta-wrap .meta-author > span span:not(.rich-snippet-hidden){display:block;}.featured-media-under-header__meta-wrap .meta-date,.featured-media-under-header__meta-wrap .meta-reading-time{font-size:.85em;}#header-space{background-color:#0a0a0a}@media only screen and (min-width:1000px){body #ajax-content-wrap.no-scroll{min-height:calc(100vh - 90px);height:calc(100vh - 90px)!important;}}@media only screen and (min-width:1000px){#page-header-wrap.fullscreen-header,#page-header-wrap.fullscreen-header #page-header-bg,html:not(.nectar-box-roll-loaded) .nectar-box-roll > #page-header-bg.fullscreen-header,.nectar_fullscreen_zoom_recent_projects,#nectar_fullscreen_rows:not(.afterLoaded) > div{height:calc(100vh - 89px);}.wpb_row.vc_row-o-full-height.top-level,.wpb_row.vc_row-o-full-height.top-level > .col.span_12{min-height:calc(100vh - 89px);}html:not(.nectar-box-roll-loaded) .nectar-box-roll > #page-header-bg.fullscreen-header{top:90px;}.nectar-slider-wrap[data-fullscreen="true"]:not(.loaded),.nectar-slider-wrap[data-fullscreen="true"]:not(.loaded) .swiper-container{height:calc(100vh - 88px)!important;}.admin-bar .nectar-slider-wrap[data-fullscreen="true"]:not(.loaded),.admin-bar .nectar-slider-wrap[data-fullscreen="true"]:not(.loaded) .swiper-container{height:calc(100vh - 88px - 32px)!important;}}.admin-bar[class*="page-template-template-no-header"] .wpb_row.vc_row-o-full-height.top-level,.admin-bar[class*="page-template-template-no-header"] .wpb_row.vc_row-o-full-height.top-level > .col.span_12{min-height:calc(100vh - 32px);}body[class*="page-template-template-no-header"] .wpb_row.vc_row-o-full-height.top-level,body[class*="page-template-template-no-header"] .wpb_row.vc_row-o-full-height.top-level > .col.span_12{min-height:100vh;}@media only screen and (max-width:999px){.using-mobile-browser #nectar_fullscreen_rows:not(.afterLoaded):not([data-mobile-disable="on"]) > div{height:calc(100vh - 116px);}.using-mobile-browser .wpb_row.vc_row-o-full-height.top-level,.using-mobile-browser .wpb_row.vc_row-o-full-height.top-level > .col.span_12,[data-permanent-transparent="1"].using-mobile-browser .wpb_row.vc_row-o-full-height.top-level,[data-permanent-transparent="1"].using-mobile-browser .wpb_row.vc_row-o-full-height.top-level > .col.span_12{min-height:calc(100vh - 116px);}html:not(.nectar-box-roll-loaded) .nectar-box-roll > #page-header-bg.fullscreen-header,.nectar_fullscreen_zoom_recent_projects,.nectar-slider-wrap[data-fullscreen="true"]:not(.loaded),.nectar-slider-wrap[data-fullscreen="true"]:not(.loaded) .swiper-container,#nectar_fullscreen_rows:not(.afterLoaded):not([data-mobile-disable="on"]) > div{height:calc(100vh - 63px);}.wpb_row.vc_row-o-full-height.top-level,.wpb_row.vc_row-o-full-height.top-level > .col.span_12{min-height:calc(100vh - 63px);}body[data-transparent-header="false"] #ajax-content-wrap.no-scroll{min-height:calc(100vh - 63px);height:calc(100vh - 63px);}}#ajax-content-wrap .vc_row.top_margin_5pct{margin-top:5%;}#ajax-content-wrap .vc_row.bottom_margin_5pct{margin-bottom:5%;}.screen-reader-text,.nectar-skip-to-content:not(:focus){border:0;clip:rect(1px,1px,1px,1px);clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute!important;width:1px;word-wrap:normal!important;}.row .col img:not([srcset]){width:auto;}.row .col img.img-with-animation.nectar-lazy:not([srcset]){width:100%;}
</style>
<link rel="stylesheet" id="salient-child-style-css" href="../wp-content/themes/salient-child/style.css" type="text/css" media="all">
<link rel="stylesheet" id="redux-google-fonts-salient_redux-css" href="../_external/fonts.googleapis.com/css" type="text/css" media="all">
<script type="text/javascript" id="asenha-public-js-extra">
/* <![CDATA[ */
var phpVars = {"externalPermalinksEnabled":"1"};
/* ]]> */
</script>
<script type="text/javascript" src="../wp-content/plugins/admin-site-enhancements-pro/assets/js/external-permalinks.js" id="asenha-public-js"></script>
<script type="text/javascript" id="breeze-prefetch-js-extra">
/* <![CDATA[ */
var breeze_prefetch = {"local_url":"https:\/\/mintel.me","ignore_remote_prefetch":"1","ignore_list":["wp-admin","wp-login.php"]};
/* ]]> */
</script>
<script type="text/javascript" src="../wp-content/plugins/breeze/assets/js/js-front-end/breeze-prefetch-links.min.js" id="breeze-prefetch-js"></script>
<script></script><link rel="https://api.w.org/" href="https://mintel.me/wp-json/"><link rel="alternate" title="JSON" type="application/json" href="https://mintel.me/wp-json/wp/v2/posts/846"><meta name="generator" content="WordPress 6.7.4">
<link rel="shortlink" href="https://mintel.me/?p=846">
<link rel="alternate" title="oEmbed (JSON)" type="application/json+oembed" href="https://mintel.me/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fmintel.me%2Fi-was-wrong-about-test-driven-development-with-ai-and-cline-just-slapped-me-with-the-truth%2F">
<link rel="alternate" title="oEmbed (XML)" type="text/xml+oembed" href="https://mintel.me/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fmintel.me%2Fi-was-wrong-about-test-driven-development-with-ai-and-cline-just-slapped-me-with-the-truth%2F&amp;format=xml">
<noscript>
<style>
/**
* Reinstate scrolling for non-JS clients
*/
.simplebar-content-wrapper {
scrollbar-width: auto;
-ms-overflow-style: auto;
}
.simplebar-content-wrapper::-webkit-scrollbar,
.simplebar-hide-scrollbar::-webkit-scrollbar {
display: initial;
width: initial;
height: initial;
}
</style>
</noscript>
<script type="javascript/text">
(function(){
window.device_wrapper.can_use_premium_code = ;
})();
</script>
<script type="text/javascript"> var root = document.getElementsByTagName( "html" )[0]; root.setAttribute( "class", "js" ); </script>
<style>
.client-logo {
width: auto !important;
height: 50px !important;
}
</style>
<meta name="generator" content="Powered by WPBakery Page Builder - drag and drop page builder for WordPress.">
<link rel="icon" href="../wp-content/uploads/2024/11/cropped-Favicon-2-100x100.png" sizes="32x32">
<link rel="icon" href="../wp-content/uploads/2024/11/cropped-Favicon-2-300x300.png" sizes="192x192">
<link rel="apple-touch-icon" href="../wp-content/uploads/2024/11/cropped-Favicon-2-300x300.png">
<meta name="msapplication-TileImage" content="https://mintel.me/wp-content/uploads/2024/11/cropped-Favicon-2-300x300.png">
<noscript><style> .wpb_animate_when_almost_visible { opacity: 1; }</style></noscript></head><body class="post-template-default single single-post postid-846 single-format-standard material wpb-js-composer js-comp-ver-7.8.1 vc_responsive" data-footer-reveal="false" data-footer-reveal-shadow="none" data-header-format="centered-menu" data-body-border="off" data-boxed-style="" data-header-breakpoint="1000" data-dropdown-style="minimal" data-cae="easeOutCubic" data-cad="1300" data-megamenu-width="contained" data-aie="none" data-ls="fancybox" data-apte="standard" data-hhun="1" data-fancy-form-rcs="default" data-form-style="default" data-form-submit="regular" data-is="minimal" data-button-style="rounded_shadow" data-user-account-button="false" data-flex-cols="true" data-col-gap="default" data-header-inherit-rc="false" data-header-search="false" data-animated-anchors="true" data-ajax-transitions="false" data-full-width-header="false" data-slide-out-widget-area="true" data-slide-out-widget-area-style="slide-out-from-right-hover" data-user-set-ocm="off" data-loading-animation="none" data-bg-header="false" data-responsive="1" data-ext-responsive="true" data-ext-padding="40" data-header-resize="0" data-header-color="custom" data-cart="false" data-remove-m-parallax="" data-remove-m-video-bgs="" data-m-animate="1" data-force-header-trans-color="light" data-smooth-scrolling="0" data-permanent-transparent="false" style="--scroll-bar-w: 0px">
<script type="text/javascript">
(function(window, document) {
if(navigator.userAgent.match(/(Android|iPod|iPhone|iPad|BlackBerry|IEMobile|Opera Mini)/)) {
document.body.className += " using-mobile-browser mobile ";
}
if(navigator.userAgent.match(/Mac/) && navigator.maxTouchPoints && navigator.maxTouchPoints > 2) {
document.body.className += " using-ios-device ";
}
if( !("ontouchstart" in window) ) {
var body = document.querySelector("body");
var winW = window.innerWidth;
var bodyW = body.clientWidth;
if (winW > bodyW + 4) {
body.setAttribute("style", "--scroll-bar-w: " + (winW - bodyW - 4) + "px");
} else {
body.setAttribute("style", "--scroll-bar-w: 0px");
}
}
})(window, document);
</script><a href="#ajax-content-wrap" class="nectar-skip-to-content">Skip to main content</a><div class="ocm-effect-wrap"><div class="ocm-effect-wrap-inner">
<div id="header-space" data-header-mobile-fixed="1" style="height: 64px;"></div>
<div id="header-outer" data-has-menu="true" data-has-buttons="no" data-header-button_style="hover_scale" data-using-pr-menu="true" data-mobile-fixed="1" data-ptnm="false" data-lhe="text_reveal" data-user-set-bg="#000000" data-format="centered-menu" data-permanent-transparent="false" data-megamenu-rt="0" data-remove-fixed="0" data-header-resize="0" data-cart="false" data-transparency-option="" data-box-shadow="large" data-shrink-num="6" data-using-secondary="0" data-using-logo="1" data-logo-height="50" data-m-logo-height="40" data-padding="20" data-full-width="false" data-condense="false">
<div id="search-outer" class="nectar">
<div id="search">
<div class="container">
<div id="search-box">
<div class="inner-wrap">
<div class="col span_12">
<form role="search" action="https://mintel.me/" method="GET">
<input type="text" name="s" id="s" value="" aria-label="Search" placeholder="Type what you're looking for">
<span>Hit enter to search or ESC to close</span>
<input type="hidden" name="post_type" value="post"> </form>
</div><!--/span_12-->
</div><!--/inner-wrap-->
</div><!--/search-box-->
<div id="close"><a href="#"><span class="screen-reader-text">Close Search</span>
<span class="close-wrap"> <span class="close-line close-line1"></span> <span class="close-line close-line2"></span> </span> </a></div>
</div><!--/container-->
</div><!--/search-->
</div><!--/search-outer-->
<header id="top">
<div class="container">
<div class="row">
<div class="col span_3">
<ul class="left-aligned-ocm" data-user-set="off"><li class="slide-out-widget-area-toggle" data-icon-animation="simple-transform" data-custom-color="false"><div> <a href="#slide-out-widget-area" aria-label="Navigation Menu" aria-expanded="false" role="button" class="closed"> <span class="screen-reader-text">Menu</span><span aria-hidden="true"> <i class="lines-button x2" data-variant="even_lines"> <i class="lines"></i> </i> </span> </a> </div></li></ul> <a id="logo" href="../index.html" data-supplied-ml-starting-dark="false" data-supplied-ml-starting="false" data-supplied-ml="false">
<img class="stnd skip-lazy dark-version ls-is-cached br-loaded" src="../wp-content/uploads/2024/11/Logo-2-white.png" width="5102" height="1169" alt="Marc Mintel"> </a>
</div><!--/span_3-->
<div class="col span_9 col_last">
<div class="nectar-mobile-only mobile-header"><div class="inner"></div></div>
<div class="slide-out-widget-area-toggle mobile-icon slide-out-from-right-hover" data-custom-color="false" data-icon-animation="simple-transform">
<div> <a href="#slide-out-widget-area" role="button" aria-label="Navigation Menu" aria-expanded="false" class="closed">
<span class="screen-reader-text">Menu</span><span aria-hidden="true"> <i class="lines-button x2" data-variant="even_lines"> <i class="lines"></i> </i> </span> </a></div>
</div>
<nav aria-label="Main Menu">
<ul class="sf-menu">
<li id="menu-item-428" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home nectar-regular-menu-item menu-item-428"><a href="../index.html"><span class="menu-title-text"><span class="nectar-text-reveal-button"><span class="nectar-text-reveal-button__text" data-text="Home">Home</span></span></span></a></li>
<li id="menu-item-809" class="menu-item menu-item-type-post_type menu-item-object-page nectar-regular-menu-item menu-item-809"><a href="../blog/index.html"><span class="menu-title-text"><span class="nectar-text-reveal-button"><span class="nectar-text-reveal-button__text" data-text="Blog">Blog</span></span></span></a></li>
<li id="menu-item-561" class="menu-item menu-item-type-post_type menu-item-object-page nectar-regular-menu-item menu-item-561"><a href="../work/index.html"><span class="menu-title-text"><span class="nectar-text-reveal-button"><span class="nectar-text-reveal-button__text" data-text="Work">Work</span></span></span></a></li>
<li id="menu-item-498" class="menu-item menu-item-type-post_type menu-item-object-page nectar-regular-menu-item menu-item-498"><a href="../services/index.html"><span class="menu-title-text"><span class="nectar-text-reveal-button"><span class="nectar-text-reveal-button__text" data-text="Services">Services</span></span></span></a></li>
<li id="menu-item-552" class="menu-item menu-item-type-post_type menu-item-object-page nectar-regular-menu-item menu-item-552"><a href="../bio/index.html"><span class="menu-title-text"><span class="nectar-text-reveal-button"><span class="nectar-text-reveal-button__text" data-text="Bio">Bio</span></span></span></a></li>
</ul>
<ul class="buttons sf-menu" data-user-set-ocm="off">
<li id="menu-item-427" class="menu-item menu-item-type-custom menu-item-object-custom nectar-regular-menu-item menu-item-btn-style-button_extra-color-1 menu-item-hover-text-reveal menu-item-427"><a href="mailto:marc@mintel.me"><span class="menu-title-text"><span class="nectar-text-reveal-button"><span class="nectar-text-reveal-button__text" data-text="Contact Me">Contact Me</span></span></span></a></li>
</ul>
</nav>
<div class="logo-spacing" data-using-image="true"><img class="hidden-logo br-lazy" src="../wp-content/uploads/2024/11/Logo-2-white.png" alt="Marc Mintel" width="5102" height="1169"></div>
</div><!--/span_9-->
</div><!--/row-->
</div><!--/container-->
</header>
</div>
<div id="ajax-content-wrap">
<div class="container-wrap no-sidebar" data-midnight="dark" data-remove-post-date="0" data-remove-post-author="0" data-remove-post-comment-number="0">
<div class="container main-content" style="--nectar-sticky-top-distance: 114px;">
<div class="row featured-media-under-header" data-animate="fade_in">
<div class="featured-media-under-header__content">
<div class="featured-media-under-header__cat-wrap">
<span class="meta-category nectar-inherit-label">
<a class="nectar-inherit-border-radius nectar-bg-hover-accent-color development" href="../development/index.html">Development</a></span> </div>
<h1 class="entry-title">I was wrong about test driven development with AI (and Cline just slapped me with the truth)</h1>
<div class="featured-media-under-header__meta-wrap nectar-link-underline-effect">
<span class="meta-author vcard author"><img class="avatar avatar-40 photo ls-is-cached br-loaded" src="https://secure.gravatar.com/avatar/9995bf9c77ffc601663c67e2aa30cfd0?s=40&amp;d=mm&amp;r=g" alt="Marc" data-brsrcset="https://secure.gravatar.com/avatar/9995bf9c77ffc601663c67e2aa30cfd0?s=80&amp;d=mm&amp;r=g 2x" height="40" width="40" decoding="async" srcset="https://secure.gravatar.com/avatar/9995bf9c77ffc601663c67e2aa30cfd0?s=80&amp;d=mm&amp;r=g 2x"><span><span class="fn nectar-inherit-label"><a href="../author/5fc2b097d603989b/index.html" title="Posts by Marc" rel="author">Marc</a></span> <span class="meta-date date updated">January 13, 2025</span></span></span> </div>
</div>
<div class="featured-media-under-header__featured-media" data-has-img="true" data-align="center" data-format="default">
<span class="post-featured-img page-header-bg-image"><img class="attachment-full size-full wp-post-image ls-is-cached br-loaded" src="../wp-content/uploads/2025/01/CleanShot-2025-01-08-at-14.29.07_2x.webp" width="1920" height="1294" alt="" decoding="async" data-brsrcset="https://mintel.me/wp-content/uploads/2025/01/CleanShot-2025-01-08-at-14.29.07@2x.webp 1920w, https://mintel.me/wp-content/uploads/2025/01/CleanShot-2025-01-08-at-14.29.07@2x-300x202.webp 300w, https://mintel.me/wp-content/uploads/2025/01/CleanShot-2025-01-08-at-14.29.07@2x-1024x690.webp 1024w, https://mintel.me/wp-content/uploads/2025/01/CleanShot-2025-01-08-at-14.29.07@2x-768x518.webp 768w, https://mintel.me/wp-content/uploads/2025/01/CleanShot-2025-01-08-at-14.29.07@2x-1536x1035.webp 1536w, https://mintel.me/wp-content/uploads/2025/01/CleanShot-2025-01-08-at-14.29.07@2x-600x403.webp 600w" data-brsizes="(max-width: 1920px) 100vw, 1920px" sizes="(max-width: 1920px) 100vw, 1920px" srcset="../wp-content/uploads/2025/01/CleanShot-2025-01-08-at-14.29.07_2x.webp 1920w, ../wp-content/uploads/2025/01/CleanShot-2025-01-08-at-14.29.07_2x-300x202.webp 300w, ../wp-content/uploads/2025/01/CleanShot-2025-01-08-at-14.29.07_2x-1024x690.webp 1024w, ../wp-content/uploads/2025/01/CleanShot-2025-01-08-at-14.29.07_2x-768x518.webp 768w, ../wp-content/uploads/2025/01/CleanShot-2025-01-08-at-14.29.07_2x-1536x1035.webp 1536w, ../wp-content/uploads/2025/01/CleanShot-2025-01-08-at-14.29.07_2x-600x403.webp 600w"></span> </div>
</div>
<div class="row">
<div class="post-area col span_12 col_last" role="main">
<article id="post-846" class="post-846 post type-post status-publish format-standard has-post-thumbnail category-development">
<div class="inner-wrap">
<div class="post-content" data-hide-featured-media="0">
<div class="content-inner">
<div id="fws_697d519032e2d" data-column-margin="default" data-midnight="dark" class="wpb_row vc_row-fluid vc_row top_margin_5pct bottom_margin_5pct" style="padding-top: 0px; padding-bottom: 0px; "><div class="row-bg-wrap" data-bg-animation="none" data-bg-animation-delay="" data-bg-overlay="false"><div class="inner-wrap row-bg-layer"><div class="row-bg viewport-desktop" style=""></div></div></div><div class="row_col_wrap_12 col span_12 dark left">
<div class="vc_col-sm-12 wpb_column column_container vc_column_container col no-extra-padding inherit_tablet inherit_phone " data-padding-pos="all" data-has-bg-color="false" data-bg-color="" data-bg-opacity="1" data-animation="" data-delay="0">
<div class="vc_column-inner">
<div class="wpb_wrapper">
<div class="wpb_text_column wpb_content_element ">
<div class="wpb_wrapper">
<p data-pm-slice="1 1 []">So, let me come clean. I wrote a blog post a while back where I basically said that Test Driven Development (TDD) with AI isnt that great. I was smug, I was sure of myself, and I was… very wrong. 🫠 But hey, growth is about admitting mistakes, right? And here I am, ready to eat my words (with some spicy Cheetos on the side) and tell you why I now think TDD is the <strong>only</strong> way to develop with AI.</p>
<p>And it all started with a new VSCode extension I stumbled upon called <strong>Cline</strong>.</p>
</div>
</div>
</div>
</div>
</div>
</div></div>
<div id="fws_697d519034384" data-column-margin="default" data-midnight="dark" class="wpb_row vc_row-fluid vc_row top_margin_5pct bottom_margin_5pct" style="padding-top: 0px; padding-bottom: 0px; "><div class="row-bg-wrap" data-bg-animation="none" data-bg-animation-delay="" data-bg-overlay="false"><div class="inner-wrap row-bg-layer"><div class="row-bg viewport-desktop" style=""></div></div></div><div class="row_col_wrap_12 col span_12 dark left">
<div class="vc_col-sm-12 wpb_column column_container vc_column_container col no-extra-padding inherit_tablet inherit_phone " data-padding-pos="all" data-has-bg-color="false" data-bg-color="" data-bg-opacity="1" data-animation="" data-delay="0">
<div class="vc_column-inner">
<div class="wpb_wrapper">
<div class="wpb_text_column wpb_content_element ">
<div class="wpb_wrapper">
<h2 data-pm-slice="1 1 []">Enter Cline: Your AI pair programmer (without the coffee addiction)</h2>
<p>If you havent heard about <strong>Cline</strong>, its an AI agent that integrates directly into VSCode. Think of it as your slightly overconfident but genuinely helpful coding buddy. Cline doesnt just spit out code suggestions; it actually understands your context, offers real-time feedback, and can run tests as you code.</p>
<p>Heres the kicker: Its like having a TDD coach sitting on your shoulder, whispering, “Are you sure that function works? Maybe write a test first, you chaotic human.”</p>
<p>And it turns out, thats exactly what I needed. 😅</p>
</div>
</div>
</div>
</div>
</div>
</div></div>
<div id="fws_697d5190354e7" data-column-margin="default" data-midnight="dark" class="wpb_row vc_row-fluid vc_row top_margin_5pct bottom_margin_5pct" style="padding-top: 0px; padding-bottom: 0px; "><div class="row-bg-wrap" data-bg-animation="none" data-bg-animation-delay="" data-bg-overlay="false"><div class="inner-wrap row-bg-layer"><div class="row-bg viewport-desktop" style=""></div></div></div><div class="row_col_wrap_12 col span_12 dark left">
<div class="vc_col-sm-12 wpb_column column_container vc_column_container col no-extra-padding inherit_tablet inherit_phone " data-padding-pos="all" data-has-bg-color="false" data-bg-color="" data-bg-opacity="1" data-animation="" data-delay="0">
<div class="vc_column-inner">
<div class="wpb_wrapper">
<div class="wpb_text_column wpb_content_element ">
<div class="wpb_wrapper">
<h2 data-pm-slice="1 1 []">Why my initial take on TDD with AI sucked</h2>
<p>In my previous post (which I wont link because no one needs to see that trainwreck), I basically argued that using AI for TDD was overkill. I mean, why write tests first when the AI can just generate code for you, right? Let the machine do the heavy lifting!</p>
<p>Yeah, no.</p>
<p>The problem with that approach? <strong>AI gets confused.</strong> It doesnt know what you <em>really</em> want unless you give it constant feedback. You have to describe every edge case, every possible input… and at that point, you might as well write the tests first.</p>
<p>Without tests, youre in this endless loop of:</p>
<ol start="1" data-spread="false">
<li>AI generates code.</li>
<li>You run the code.</li>
<li>It crashes.</li>
<li>You go back to step 1.</li>
</ol>
<p>Fun? Not really.</p>
</div>
</div>
</div>
</div>
</div>
</div></div>
<div id="fws_697d51903672f" data-column-margin="default" data-midnight="dark" class="wpb_row vc_row-fluid vc_row top_margin_5pct bottom_margin_5pct" style="padding-top: 0px; padding-bottom: 0px; "><div class="row-bg-wrap" data-bg-animation="none" data-bg-animation-delay="" data-bg-overlay="false"><div class="inner-wrap row-bg-layer"><div class="row-bg viewport-desktop" style=""></div></div></div><div class="row_col_wrap_12 col span_12 dark left">
<div class="vc_col-sm-12 wpb_column column_container vc_column_container col no-extra-padding inherit_tablet inherit_phone " data-padding-pos="all" data-has-bg-color="false" data-bg-color="" data-bg-opacity="1" data-animation="" data-delay="0">
<div class="vc_column-inner">
<div class="wpb_wrapper">
<div class="wpb_text_column wpb_content_element ">
<div class="wpb_wrapper">
<h2 data-pm-slice="1 1 []">How Cline changed the game</h2>
<p>The beauty of Cline is that it flips this process on its head. Instead of treating AI like some magical genie that grants your coding wishes, Cline encourages you to treat it like a responsible adult:</p>
<ol start="1" data-spread="false">
<li>Write a test.</li>
<li>Watch as Cline writes the code to pass that test.</li>
<li>Instantly see if it works.</li>
<li>Refactor, rinse, repeat.</li>
</ol>
<p>No more vague instructions. No more confused AI. Just pure, unadulterated feedback loops.</p>
<p>And because Cline runs the tests immediately, the AI gets instant feedback. It learns faster. It adjusts quicker. It stops making the same dumb mistakes over and over (unlike me in my pre-coffee coding sessions). ☕</p>
</div>
</div>
</div>
</div>
</div>
</div></div>
<div id="fws_697d51903794b" data-column-margin="default" data-midnight="dark" class="wpb_row vc_row-fluid vc_row top_margin_5pct bottom_margin_5pct" style="padding-top: 0px; padding-bottom: 0px; "><div class="row-bg-wrap" data-bg-animation="none" data-bg-animation-delay="" data-bg-overlay="false"><div class="inner-wrap row-bg-layer"><div class="row-bg viewport-desktop" style=""></div></div></div><div class="row_col_wrap_12 col span_12 dark left">
<div class="vc_col-sm-12 wpb_column column_container vc_column_container col no-extra-padding inherit_tablet inherit_phone " data-padding-pos="all" data-has-bg-color="false" data-bg-color="" data-bg-opacity="1" data-animation="" data-delay="0">
<div class="vc_column-inner">
<div class="wpb_wrapper">
<div class="wpb_text_column wpb_content_element ">
<div class="wpb_wrapper">
<h2 data-pm-slice="1 1 []">The emotional rollercoaster of coding with Cline</h2>
<p>Ill be honest: At first, I felt attacked.</p>
<p>Cline would pop up with suggestions like, “Your test failed. Want me to fix it?” and Id think, “No, Cline, I want to wallow in my failure, thanks.” But over time, I realized that this instant feedback is exactly what I needed to break out of my bad habits.</p>
<p>Writing tests first felt weird at first, but watching Cline pass those tests in real-time? That was <em>chefs kiss</em> satisfying. 😌</p>
</div>
</div>
</div>
</div>
</div>
</div></div>
<div id="fws_697d5190389e0" data-column-margin="default" data-midnight="dark" class="wpb_row vc_row-fluid vc_row top_margin_5pct bottom_margin_5pct" style="padding-top: 0px; padding-bottom: 0px; "><div class="row-bg-wrap" data-bg-animation="none" data-bg-animation-delay="" data-bg-overlay="false"><div class="inner-wrap row-bg-layer"><div class="row-bg viewport-desktop" style=""></div></div></div><div class="row_col_wrap_12 col span_12 dark left">
<div class="vc_col-sm-12 wpb_column column_container vc_column_container col no-extra-padding inherit_tablet inherit_phone " data-padding-pos="all" data-has-bg-color="false" data-bg-color="" data-bg-opacity="1" data-animation="" data-delay="0">
<div class="vc_column-inner">
<div class="wpb_wrapper">
<div class="wpb_text_column wpb_content_element ">
<div class="wpb_wrapper">
<h2 data-pm-slice="1 1 []">Why TDD and AI are a perfect match</h2>
<p>Heres the thing: AI doesnt understand human emotions (yet). It doesnt care if youre having a bad day or if your brain is running on 2% battery. It just wants instructions. Clear, precise instructions.</p>
<p>And whats the clearest way to give instructions? <strong>Tests.</strong></p>
<p>When you write a test, youre basically telling the AI: “Heres what I expect. Make it happen.” And because the AI gets that feedback instantly, its way less likely to go off on some weird tangent.</p>
</div>
</div>
</div>
</div>
</div>
</div></div>
<div id="fws_697d5190399af" data-column-margin="default" data-midnight="dark" class="wpb_row vc_row-fluid vc_row top_margin_5pct bottom_margin_5pct" style="padding-top: 0px; padding-bottom: 0px; "><div class="row-bg-wrap" data-bg-animation="none" data-bg-animation-delay="" data-bg-overlay="false"><div class="inner-wrap row-bg-layer"><div class="row-bg viewport-desktop" style=""></div></div></div><div class="row_col_wrap_12 col span_12 dark left">
<div class="vc_col-sm-12 wpb_column column_container vc_column_container col no-extra-padding inherit_tablet inherit_phone " data-padding-pos="all" data-has-bg-color="false" data-bg-color="" data-bg-opacity="1" data-animation="" data-delay="0">
<div class="vc_column-inner">
<div class="wpb_wrapper">
<div class="wpb_text_column wpb_content_element ">
<div class="wpb_wrapper">
<h2 data-pm-slice="1 3 []">How to get started with Cline</h2>
<p>If youre curious (and you should be), heres how to try Cline for yourself:</p>
<ol start="1" data-spread="false">
<li><strong>Download the extension:</strong> <a href="https://marketplace.visualstudio.com/items?itemName=cline-ai.agent">Cline on the VSCode Marketplace</a></li>
<li><strong>Set up your project:</strong> Make sure you have a test framework in place (Jest, Mocha, whatever floats your boat).</li>
<li><strong>Write your first test:</strong> Start simple. Maybe something like:
<pre><code>test('adds two numbers', () =&gt; {
expect(add(2, 3)).toBe(5);
});</code></pre>
</li>
<li><strong>Watch Cline work its magic:</strong> Sit back and let the AI fill in the gaps.</li>
</ol>
</div>
</div>
</div>
</div>
</div>
</div></div>
<div id="fws_697d51903ac35" data-column-margin="default" data-midnight="dark" class="wpb_row vc_row-fluid vc_row top_margin_5pct bottom_margin_5pct" style="padding-top: 0px; padding-bottom: 0px; "><div class="row-bg-wrap" data-bg-animation="none" data-bg-animation-delay="" data-bg-overlay="false"><div class="inner-wrap row-bg-layer"><div class="row-bg viewport-desktop" style=""></div></div></div><div class="row_col_wrap_12 col span_12 dark left">
<div class="vc_col-sm-12 wpb_column column_container vc_column_container col no-extra-padding inherit_tablet inherit_phone " data-padding-pos="all" data-has-bg-color="false" data-bg-color="" data-bg-opacity="1" data-animation="" data-delay="0">
<div class="vc_column-inner">
<div class="wpb_wrapper">
<div class="wpb_text_column wpb_content_element ">
<div class="wpb_wrapper">
<h2 data-pm-slice="1 1 []">Final thoughts (aka my apology to the TDD gods)</h2>
<p>To anyone I misled with my previous anti-TDD rant: Im sorry. I see the light now. 🙏</p>
<p>Test Driven Development with AI isnt just a nice-to-have. Its a game-changer. And tools like Cline make it easier than ever to adopt this approach.</p>
<p>So, go forth and embrace TDD. Let AI be your coding buddy, not your code generator. And if you ever feel like the AI is judging you… well, it probably is. 😈</p>
</div>
</div>
</div>
</div>
</div>
</div></div>
</div>
</div><!--/post-content-->
</div><!--/inner-wrap-->
</article>
</div><!--/post-area-->
</div><!--/row-->
<div class="row">
<div data-n-parallax-bg="true" data-parallax-speed="subtle" data-post-header-style="image_under" class="blog_next_prev_buttons vc_row-fluid standard_section" data-style="parallax_next_only" data-midnight="light"> <div class="parallax-layer-wrap"><div class="parallax-layer"><div class="post-bg-img" style="background-image: url(https://mintel.me/wp-content/uploads/2025/01/CleanShot-2025-01-06-at-23.19.50@2x.webp);"></div></div></div>
<div class="col span_12 dark left">
<div class="inner">
<span><i class="next-prev-title nectar-blog-single-section-title nectar-inherit-h4">Next Post</i></span><a href="../speed-ramp-pro-a-lifesaver-for-davinci-resolve-editors/index.html" rel="prev"><h3>Speed Ramp Pro: A lifesaver for DaVinci Resolve editors</h3></a> </div>
</div>
<span class="bg-overlay"></span>
<span class="full-link"><a href="../speed-ramp-pro-a-lifesaver-for-davinci-resolve-editors/index.html" rel="prev">Speed Ramp Pro: A lifesaver for DaVinci Resolve editors</a></span>
</div>
<div class="row vc_row-fluid full-width-section related-post-wrap" data-using-post-pagination="true" data-midnight="dark"> <div class="row-bg-wrap"><div class="row-bg"></div></div> <h3 class="related-title nectar-blog-single-section-title nectar-inherit-h4 ">You May Also Like</h3><div class="row span_12 blog-recent related-posts columns-3" data-style="material" data-color-scheme="light">
<div class="col span_4">
<div class="inner-wrap post-791 post type-post status-publish format-standard has-post-thumbnail category-development">
<a href="../i-created-a-whole-macos-app-with-flutter-just-using-ai-here-is-my-report/index.html" class="img-link"><span class="post-featured-img"><img class="nectar-lazy skip-lazy br-lazy" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCA2MDAgNDAzJz48L3N2Zz4=" data-breeze="https://mintel.me/wp-content/uploads/2025/01/CleanShot-2025-01-02-at-12.02.24@2x-600x403.webp" height="403" width="600" alt="" data-nectar-img-src="https://mintel.me/wp-content/uploads/2025/01/CleanShot-2025-01-02-at-12.02.24@2x-600x403.webp" http%3a%2f%2fwww.w3.org%2f2000%2fsvg'%20viewbox%3d'0%200%20600%20403'%2f%3e"=""></span></a>
<span class="meta-category"><a class="development" href="../development/index.html">Development</a></span>
<a class="entire-meta-link" href="../i-created-a-whole-macos-app-with-flutter-just-using-ai-here-is-my-report/index.html"><span class="screen-reader-text">I created a whole macOS app with Flutter just using AI, here is my report</span></a>
<div class="article-content-wrap">
<div class="post-header">
<span class="meta">
</span>
<h3 class="title">I created a whole macOS app with Flutter just using AI, here is my report</h3>
</div><!--/post-header-->
<div class="grav-wrap"><img class="avatar avatar-70 photo br-lazy" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCA3MCA3MCc+PC9zdmc+" data-breeze="https://secure.gravatar.com/avatar/9995bf9c77ffc601663c67e2aa30cfd0?s=70&amp;d=mm&amp;r=g" alt="Marc" data-brsrcset="https://secure.gravatar.com/avatar/9995bf9c77ffc601663c67e2aa30cfd0?s=140&amp;d=mm&amp;r=g 2x" height="70" width="70" decoding="async"><div class="text"> <a href="../author/5fc2b097d603989b/index.html">Marc</a><span>January 2, 2025</span></div></div> </div>
</div>
</div>
<div class="col span_4">
<div class="inner-wrap post-817 post type-post status-publish format-standard has-post-thumbnail category-development">
<a href="../my-learnings-moving-on-with-ai-driven-development/index.html" class="img-link"><span class="post-featured-img"><img class="nectar-lazy skip-lazy br-lazy" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCA2MDAgNDAzJz48L3N2Zz4=" data-breeze="https://mintel.me/wp-content/uploads/2025/01/CleanShot-2025-01-06-at-22.11.28@2x-600x403.webp" height="403" width="600" alt="" data-nectar-img-src="https://mintel.me/wp-content/uploads/2025/01/CleanShot-2025-01-06-at-22.11.28@2x-600x403.webp" http%3a%2f%2fwww.w3.org%2f2000%2fsvg'%20viewbox%3d'0%200%20600%20403'%2f%3e"=""></span></a>
<span class="meta-category"><a class="development" href="../development/index.html">Development</a></span>
<a class="entire-meta-link" href="../my-learnings-moving-on-with-ai-driven-development/index.html"><span class="screen-reader-text">My learnings moving on with AI-driven development</span></a>
<div class="article-content-wrap">
<div class="post-header">
<span class="meta">
</span>
<h3 class="title">My learnings moving on with AI-driven development</h3>
</div><!--/post-header-->
<div class="grav-wrap"><img class="avatar avatar-70 photo br-lazy" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCA3MCA3MCc+PC9zdmc+" data-breeze="https://secure.gravatar.com/avatar/9995bf9c77ffc601663c67e2aa30cfd0?s=70&amp;d=mm&amp;r=g" alt="Marc" data-brsrcset="https://secure.gravatar.com/avatar/9995bf9c77ffc601663c67e2aa30cfd0?s=140&amp;d=mm&amp;r=g 2x" height="70" width="70" decoding="async"><div class="text"> <a href="../author/5fc2b097d603989b/index.html">Marc</a><span>December 6, 2024</span></div></div> </div>
</div>
</div>
<div class="col span_4">
<div class="inner-wrap post-841 post type-post status-publish format-standard has-post-thumbnail category-video">
<a href="../speed-ramp-pro-a-lifesaver-for-davinci-resolve-editors/index.html" class="img-link"><span class="post-featured-img"><img class="nectar-lazy skip-lazy br-lazy" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCA2MDAgNDAzJz48L3N2Zz4=" data-breeze="https://mintel.me/wp-content/uploads/2025/01/CleanShot-2025-01-06-at-23.19.50@2x-600x403.webp" height="403" width="600" alt="" data-nectar-img-src="https://mintel.me/wp-content/uploads/2025/01/CleanShot-2025-01-06-at-23.19.50@2x-600x403.webp" http%3a%2f%2fwww.w3.org%2f2000%2fsvg'%20viewbox%3d'0%200%20600%20403'%2f%3e"=""></span></a>
<span class="meta-category"><a class="video" href="../video/index.html">Video</a></span>
<a class="entire-meta-link" href="../speed-ramp-pro-a-lifesaver-for-davinci-resolve-editors/index.html"><span class="screen-reader-text">Speed Ramp Pro: A lifesaver for DaVinci Resolve editors</span></a>
<div class="article-content-wrap">
<div class="post-header">
<span class="meta">
</span>
<h3 class="title">Speed Ramp Pro: A lifesaver for DaVinci Resolve editors</h3>
</div><!--/post-header-->
<div class="grav-wrap"><img class="avatar avatar-70 photo br-lazy" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCA3MCA3MCc+PC9zdmc+" data-breeze="https://secure.gravatar.com/avatar/9995bf9c77ffc601663c67e2aa30cfd0?s=70&amp;d=mm&amp;r=g" alt="Marc" data-brsrcset="https://secure.gravatar.com/avatar/9995bf9c77ffc601663c67e2aa30cfd0?s=140&amp;d=mm&amp;r=g 2x" height="70" width="70" decoding="async"><div class="text"> <a href="../author/5fc2b097d603989b/index.html">Marc</a><span>January 6, 2025</span></div></div> </div>
</div>
</div>
</div></div>
<div class="comments-section" data-author-bio="false">
</div>
</div><!--/row-->
</div><!--/container main-content-->
</div><!--/container-wrap-->
<div class="nectar-social fixed" data-position="" data-rm-love="0" data-color-override="override"><a href="#"><i class="icon-default-style steadysets-icon-share"></i></a><div class="nectar-social-inner"><a class="facebook-share nectar-sharing" href="#" title="Share this"> <i class="fa fa-facebook"></i> <span class="social-text">Share</span> </a><a class="twitter-share nectar-sharing" href="#" title="Share this"> <i class="fa icon-salient-x-twitter"></i> <span class="social-text">Share</span> </a><a class="linkedin-share nectar-sharing" href="#" title="Share this"> <i class="fa fa-linkedin"></i> <span class="social-text">Share</span> </a><a class="pinterest-share nectar-sharing" href="#" title="Pin this"> <i class="fa fa-pinterest"></i> <span class="social-text">Pin</span> </a></div></div><style>
.nectar-shape-divider-wrap {
position: absolute;
top: auto;
bottom: 0;
left: 0;
right: 0;
width: 100%;
height: 150px;
z-index: 3;
transform: translateZ(0);
}
.post-area.span_9 .nectar-shape-divider-wrap {
overflow: hidden;
}
.nectar-shape-divider-wrap[data-front="true"] {
z-index: 50;
}
.nectar-shape-divider-wrap[data-style="waves_opacity"] svg path:first-child {
opacity: 0.6;
}
.nectar-shape-divider-wrap[data-style="curve_opacity"] svg path:nth-child(1),
.nectar-shape-divider-wrap[data-style="waves_opacity_alt"] svg path:nth-child(1) {
opacity: 0.15;
}
.nectar-shape-divider-wrap[data-style="curve_opacity"] svg path:nth-child(2),
.nectar-shape-divider-wrap[data-style="waves_opacity_alt"] svg path:nth-child(2) {
opacity: 0.3;
}
.nectar-shape-divider {
width: 100%;
left: 0;
bottom: -1px;
height: 100%;
position: absolute;
}
.nectar-shape-divider-wrap.no-color .nectar-shape-divider {
fill: #fff;
}
@media only screen and (max-width: 999px) {
.nectar-shape-divider-wrap:not([data-using-percent-val="true"]) .nectar-shape-divider {
height: 75%;
}
.nectar-shape-divider-wrap[data-style="clouds"]:not([data-using-percent-val="true"]) .nectar-shape-divider {
height: 55%;
}
}
@media only screen and (max-width: 690px) {
.nectar-shape-divider-wrap:not([data-using-percent-val="true"]) .nectar-shape-divider {
height: 33%;
}
.nectar-shape-divider-wrap[data-style="clouds"]:not([data-using-percent-val="true"]) .nectar-shape-divider {
height: 33%;
}
}
#ajax-content-wrap .nectar-shape-divider-wrap[data-height="1"] .nectar-shape-divider,
#ajax-content-wrap .nectar-shape-divider-wrap[data-height="1px"] .nectar-shape-divider {
height: 1px;
}.nectar-shape-divider-wrap[data-position="top"] {
top: -1px;
bottom: auto;
}
.nectar-shape-divider-wrap[data-position="top"] {
transform: rotate(180deg)
}#ajax-content-wrap .vc_row.inner_row.right_padding_20pct .row_col_wrap_12_inner,
.nectar-global-section .vc_row.inner_row.right_padding_20pct .row_col_wrap_12_inner {
padding-right: 20%;
} .wpb_column.border_style_solid > .vc_column-inner,
.wpb_column.border_style_solid > .n-sticky > .vc_column-inner {
border-style: solid;
}@media only screen and (min-width: 1000px) {
.nectar-highlighted-text.font_size_3vw h1,
.nectar-highlighted-text.font_size_3vw h2,
.nectar-highlighted-text.font_size_3vw h3,
.nectar-highlighted-text.font_size_3vw h4,
.nectar-highlighted-text.font_size_3vw h5,
.nectar-highlighted-text.font_size_3vw h6,
.nectar-highlighted-text.font_size_3vw p {
font-size: 3vw;
line-height: 1.1em;
}}
.nectar-highlighted-text[data-style="regular_underline"].font_size_3vw em:before,
.nectar-highlighted-text[data-style="half_text"].font_size_3vw em:before {
bottom: 0.07em;
}@keyframes nectarStrokeAnimation {
0% {
stroke-dashoffset: 1;
opacity: 0;
}
1% {
opacity: 1;
}
100% {
stroke-dashoffset: 0;
}
}.nectar-highlighted-text .nectar-scribble {
position: absolute;
left: 0;
top: 0;
z-index: -1;
}
.nectar-highlighted-text .nectar-scribble path {
stroke-dasharray: 1;
stroke-dashoffset: 1;
opacity: 0;
}
.nectar-highlighted-text em.animated .nectar-scribble path {
stroke-linecap: round;
opacity: 1;
animation: nectarStrokeAnimation 1.3s cubic-bezier(0.65,0,0.35,1) forwards;
}
.nectar-highlighted-text[data-style="scribble"] em {
background-image: none!important;
}body .nectar-scribble.circle {
width: 130%;
height: 140%;
top: -20%;
left: -15%;
}@media only screen and (max-width: 999px) {
.nectar-cta.display_tablet_inherit {
display: inherit;
}
}@media only screen and (max-width: 999px) { .vc_row.bottom_padding_tablet_20pct {
padding-bottom: 20%!important;
} }@media only screen and (max-width: 999px) { .vc_row.top_padding_tablet_10pct {
padding-top: 10%!important;
} }@media only screen and (max-width: 999px) { .vc_row.bottom_padding_tablet_10pct {
padding-bottom: 10%!important;
} }@media only screen and (max-width: 999px) { .vc_row.top_padding_tablet_20pct {
padding-top: 20%!important;
} }@media only screen and (max-width: 690px) {
.nectar-cta.display_phone_inherit {
display: inherit;
}
}</style><div class="nectar-global-section nectar_hook_global_section_footer"><div class="container normal-container row">
<div id="fws_697d519042098" data-column-margin="default" data-midnight="light" data-top-percent="10%" data-bottom-percent="5%" class="wpb_row vc_row-fluid vc_row full-width-section top_padding_tablet_20pct bottom_padding_tablet_10pct" style="padding-top: calc(100vw * 0.10); padding-bottom: calc(100vw * 0.05); "><div class="row-bg-wrap" data-bg-animation="none" data-bg-animation-delay="" data-bg-overlay="false"><div class="inner-wrap row-bg-layer"><div class="row-bg viewport-desktop using-bg-color" style="background-color: #000000; "></div></div></div><div class="row_col_wrap_12 col span_12 light left">
<div class="vc_col-sm-12 wpb_column column_container vc_column_container col no-extra-padding inherit_tablet inherit_phone " data-padding-pos="all" data-has-bg-color="false" data-bg-color="" data-bg-opacity="1" data-animation="" data-delay="0">
<div class="vc_column-inner">
<div class="wpb_wrapper">
<div id="fws_697d5190492b4" data-midnight="" data-column-margin="default" class="wpb_row vc_row-fluid vc_row inner_row right_padding_20pct" style=""><div class="row-bg-wrap"> <div class="row-bg"></div> </div><div class="row_col_wrap_12_inner col span_12 left">
<div class="vc_col-sm-12 wpb_column column_container vc_column_container col child_column no-extra-padding inherit_tablet inherit_phone " data-padding-pos="all" data-has-bg-color="false" data-bg-color="" data-bg-opacity="1" data-animation="" data-delay="0">
<div class="vc_column-inner">
<div class="wpb_wrapper">
<div class="nectar-highlighted-text font_size_3vw " data-style="scribble" data-exp="default" data-using-custom-color="false" data-animation-delay="false" data-color="" data-color-gradient="" style=""><h2>Dont wait any longer, <em>transform<svg class="nectar-scribble circle" role="presentation" viewBox="0 0 800 350" preserveAspectRatio="none"><path style="animation-duration: 1.8s;" transform="matrix(0.9791300296783447,0,0,0.9791300296783447,400,179)" stroke-linejoin="miter" fill-opacity="0" pathLength="1" stroke-miterlimit="4" stroke="#2365ff" stroke-opacity="1" stroke-width="8" d=" M253,-161 C253,-161 -284.78900146484375,-201.4600067138672 -376,-21 C-469,163 67.62300109863281,174.2100067138672 256,121 C564,34 250.82899475097656,-141.6929931640625 19.10700035095215,-116.93599700927734"></path></svg></em> your product visuals now.</h2>
</div>
</div>
</div>
</div>
</div></div>
</div>
</div>
</div>
</div></div>
<div id="fws_697d51904b572" data-column-margin="default" data-midnight="light" data-top-percent="5%" data-bottom-percent="10%" class="wpb_row vc_row-fluid vc_row full-width-section top_padding_tablet_10pct bottom_padding_tablet_20pct" style="padding-top: calc(100vw * 0.05); padding-bottom: calc(100vw * 0.10); "><div class="row-bg-wrap" data-bg-animation="none" data-bg-animation-delay="" data-bg-overlay="false"><div class="inner-wrap row-bg-layer"><div class="row-bg viewport-desktop using-bg-color" style="background-color: #000000; "></div></div></div><div class="nectar-shape-divider-wrap " style=" height:1px;" data-height="1" data-front="" data-style="straight_section" data-position="top"><svg class="nectar-shape-divider" aria-hidden="true" fill="#5b5b5b" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 10" preserveAspectRatio="none"> <polygon points="104 10, 104 0, 0 0, 0 10"></polygon> </svg></div><div class="row_col_wrap_12 col span_12 light left">
<div class="vc_col-sm-12 wpb_column column_container vc_column_container col no-extra-padding inherit_tablet inherit_phone border_style_solid " data-padding-pos="all" data-has-bg-color="false" data-bg-color="" data-bg-opacity="1" data-animation="" data-delay="0">
<div class="vc_column-inner">
<div class="wpb_wrapper">
<div id="fws_697d51904c603" data-midnight="" data-column-margin="default" class="wpb_row vc_row-fluid vc_row inner_row vc_row-o-equal-height vc_row-flex vc_row-o-content-top" style=""><div class="row-bg-wrap"> <div class="row-bg"></div> </div><div class="row_col_wrap_12_inner col span_12 left">
<div class="vc_col-sm-6 vc_col-md-6 wpb_column column_container vc_column_container col child_column has-animation no-extra-padding inherit_tablet inherit_phone " data-t-w-inherits="small_desktop" data-padding-pos="all" data-has-bg-color="false" data-bg-color="" data-bg-opacity="1" data-animation="fade-in-from-bottom" data-delay="0">
<div class="vc_column-inner">
<div class="wpb_wrapper">
<div class="wpb_text_column wpb_content_element ">
<div class="wpb_wrapper">
<h5>Get in touch</h5>
</div>
</div>
<div class="nectar-cta alignment_tablet_default alignment_phone_default display_tablet_inherit display_phone_inherit " data-color="default" data-using-bg="false" data-display="block" data-style="underline" data-alignment="left" data-text-color="std"><h4> <span class="link_wrap"><a class="link_text" role="button" href="mailto:marc@mintel.me">marc@mintel.me</a></span></h4></div>
</div>
</div>
</div>
</div></div>
</div>
</div>
</div>
</div></div>
</div></div>
<div id="footer-outer" data-midnight="light" data-cols="4" data-custom-color="false" data-disable-copyright="true" data-matching-section-color="true" data-copyright-line="false" data-using-bg-img="false" data-bg-img-overlay="0.8" data-full-width="false" data-using-widget-area="false" data-link-hover="default">
</div><!--/footer-outer-->
<div id="slide-out-widget-area-bg" class="slide-out-from-right-hover dark">
</div>
<div id="slide-out-widget-area" class="slide-out-from-right-hover" data-dropdown-func="separate-dropdown-parent-link" data-back-txt="Back">
<div class="inner-wrap">
<div class="inner" data-prepend-menu-mobile="false">
<a class="slide_out_area_close" href="#"><span class="screen-reader-text">Close Menu</span>
<span class="close-wrap"> <span class="close-line close-line1"></span> <span class="close-line close-line2"></span> </span> </a>
<div class="off-canvas-menu-container" role="navigation">
<ul class="menu">
<li id="menu-item-483" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home menu-item-483"><a href="../index.html">Home</a></li>
<li id="menu-item-497" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-497"><a href="../services/index.html">Services</a></li>
</ul>
</div>
</div>
<div class="bottom-meta-wrap"><ul class="off-canvas-social-links"><li><a target="_blank" rel="noopener noreferrer" href="https://www.linkedin.com/in/marc-mintel-03b193134/"><span class="screen-reader-text">linkedin</span><i class="fa fa-linkedin"></i></a></li><li><a target="_blank" rel="noopener noreferrer" href="https://github.com/mmintel"><span class="screen-reader-text">github</span><i class="fa fa-github-alt"></i></a></li><li><a target="_blank" rel="noopener noreferrer" href="https://instagram.com/marcmintel"><span class="screen-reader-text">instagram</span><i class="fa fa-instagram"></i></a></li><li><a target="_blank" rel="noopener noreferrer" href="https://wa.me/491707777093?text=Hey%20there%2C%20got%20your%20number%20from%20your%20website.%20I%20just%20wanted%20to%20ask%20if..."><span class="screen-reader-text">whatsapp</span><i class="fa fa-whatsapp"></i></a></li><li><a target="_blank" rel="noopener noreferrer" href="mailto:marc@mintel.me"><span class="screen-reader-text">email</span><i class="fa fa-envelope"></i></a></li></ul></div><!--/bottom-meta-wrap--></div> <!--/inner-wrap-->
</div>
</div> <!--/ajax-content-wrap-->
</div></div><!--/ocm-effect-wrap--> <script>
(function () {
const isMatchingClass = (linkRule, href, classes) => {
return classes.includes(linkRule.value)
}
const isMatchingDomain = (linkRule, href, classes) => {
if(!URL.canParse(href)) {
return false
}
const url = new URL(href)
return linkRule.value === url.host
}
const isMatchingExtension = (linkRule, href, classes) => {
if(!URL.canParse(href)) {
return false
}
const url = new URL(href)
return url.pathname.endsWith('.' + linkRule.value)
}
const isMatchingSubdirectory = (linkRule, href, classes) => {
if(!URL.canParse(href)) {
return false
}
const url = new URL(href)
return url.pathname.startsWith('/' + linkRule.value + '/')
}
const isMatchingProtocol = (linkRule, href, classes) => {
if(!URL.canParse(href)) {
return false
}
const url = new URL(href)
return url.protocol === linkRule.value + ':'
}
const isMatch = (linkRule, href, classes) => {
switch (linkRule.type) {
case 'class':
return isMatchingClass(linkRule, href, classes)
case 'domain':
return isMatchingDomain(linkRule, href, classes)
case 'extension':
return isMatchingExtension(linkRule, href, classes)
case 'subdirectory':
return isMatchingSubdirectory(linkRule, href, classes)
case 'protocol':
return isMatchingProtocol(linkRule, href, classes)
default:
return false;
}
}
const track = (element) => {
const href = element.href ?? null
const classes = Array.from(element.classList)
const parentsToMatch = [
'li.menu-item', // Non-block menu item
'li.wp-block-navigation-item', // Block menu item
'div.wp-block-button', // Block button group
]
// When a WordPress menu or button allows a user customizable class, the class is
// placed on a parent element instead of the button/a. If the parent matches one
// of these elements, then it's classes should also be considered.
if(parentsToMatch.some((toMatch) => element.parentElement.matches(toMatch))) {
classes.push(...Array.from(element.parentElement.classList))
}
const linkRules = [{"type":"extension","value":"pdf"},{"type":"extension","value":"zip"},{"type":"protocol","value":"mailto"},{"type":"protocol","value":"tel"}]
if(linkRules.length === 0) {
return
}
const hasMatch = linkRules.some((linkRule) => {
return isMatch(linkRule, href, classes)
})
if(!hasMatch) {
return
} else {
}
const url = "https://mintel.me/wp-content/uploads/iawp-click-endpoint.php";
const body = {
href: href,
classes: classes.join(' '),
...{"payload":{"resource":"singular","singular_id":846,"page":1},"signature":"c36b548bda3fc73ee74dd17dd9c76aff"} };
if (navigator.sendBeacon) {
let blob = new Blob([JSON.stringify(body)], {
type: "application/json"
});
navigator.sendBeacon(url, blob);
} else {
const xhr = new XMLHttpRequest();
xhr.open("POST", url, true);
xhr.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
xhr.send(JSON.stringify(body))
}
}
document.addEventListener('mousedown', function (event) {
if (navigator.webdriver || /bot|crawler|spider|crawling|semrushbot|chrome-lighthouse/i.test(navigator.userAgent)) {
return;
}
const element = event.target.closest('a')
if(!element) {
return
}
const isPro = true
if(!isPro) {
return
}
// Don't track left clicks with this event. The click event is used for that.
if(event.button === 0) {
return
}
track(element)
})
document.addEventListener('click', function (event) {
if (navigator.webdriver || /bot|crawler|spider|crawling|semrushbot|chrome-lighthouse/i.test(navigator.userAgent)) {
return;
}
const element = event.target.closest('a, button')
if(!element) {
return
}
const isPro = true
if(!isPro) {
return
}
track(element)
})
document.addEventListener("DOMContentLoaded", function (e) {
if (document.hasOwnProperty("visibilityState") && document.visibilityState === "prerender") {
return;
}
if (navigator.webdriver || /bot|crawler|spider|crawling|semrushbot|chrome-lighthouse/i.test(navigator.userAgent)) {
return;
}
let referrer_url = null;
if (typeof document.referrer === 'string' && document.referrer.length > 0) {
referrer_url = document.referrer;
}
const params = location.search.slice(1).split('&').reduce((acc, s) => {
const [k, v] = s.split('=');
return Object.assign(acc, {[k]: v});
}, {});
const url = "https://mintel.me/wp-json/iawp/search";
const body = {
referrer_url,
utm_source: params.utm_source,
utm_medium: params.utm_medium,
utm_campaign: params.utm_campaign,
utm_term: params.utm_term,
utm_content: params.utm_content,
gclid: params.gclid,
...{"payload":{"resource":"singular","singular_id":846,"page":1},"signature":"c36b548bda3fc73ee74dd17dd9c76aff"} };
if (navigator.sendBeacon) {
let blob = new Blob([JSON.stringify(body)], {
type: "application/json"
});
navigator.sendBeacon(url, blob);
} else {
const xhr = new XMLHttpRequest();
xhr.open("POST", url, true);
xhr.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
xhr.send(JSON.stringify(body))
}
});
})();
</script>
<script type="text/html" id="wpb-modifications"> window.wpbCustomElement = 1; </script><link data-pagespeed-no-defer="" data-nowprocket="" data-wpacu-skip="" data-no-optimize="" data-noptimize="" rel="stylesheet" id="main-styles-non-critical-css" href="../wp-content/themes/salient/css/build/style-non-critical.css" type="text/css" media="all">
<link rel="stylesheet" id="font-awesome-css" href="../wp-content/themes/salient/css/font-awesome.min.css" type="text/css" media="all">
<link data-pagespeed-no-defer="" data-nowprocket="" data-wpacu-skip="" data-no-optimize="" data-noptimize="" rel="stylesheet" id="fancyBox-css" href="../wp-content/themes/salient/css/build/plugins/jquery.fancybox.css" type="text/css" media="all">
<link rel="stylesheet" id="nectar-smooth-scroll-css" href="../wp-content/themes/salient/css/build/plugins/lenis.css" type="text/css" media="all">
<link data-pagespeed-no-defer="" data-nowprocket="" data-wpacu-skip="" data-no-optimize="" data-noptimize="" rel="stylesheet" id="nectar-ocm-core-css" href="../wp-content/themes/salient/css/build/off-canvas/core.css" type="text/css" media="all">
<link data-pagespeed-no-defer="" data-nowprocket="" data-wpacu-skip="" data-no-optimize="" data-noptimize="" rel="stylesheet" id="nectar-ocm-slide-out-right-hover-css" href="../wp-content/themes/salient/css/build/off-canvas/slide-out-right-hover.css" type="text/css" media="all">
<script type="text/javascript" src="../wp-content/plugins/device-wrapper/src/js/simplebar.min.js" id="device_wrapper-simplebar-js"></script>
<script type="text/javascript" src="../wp-content/plugins/device-wrapper/src/js/dragscroll.js" id="device_wrapper-dragscroll-js"></script>
<script type="text/javascript" src="../wp-includes/js/jquery/jquery.min.js" id="jquery-core-js"></script>
<script type="text/javascript" src="../wp-includes/js/jquery/jquery-migrate.min.js" id="jquery-migrate-js"></script>
<script type="text/javascript" src="../wp-content/plugins/device-wrapper/dist/front.build.js" id="device_wrapper-front-js-js"></script>
<script type="text/javascript" id="salient-social-js-extra">
/* <![CDATA[ */
var nectarLove = {"ajaxurl":"https:\/\/mintel.me\/wp-admin\/admin-ajax.php","postID":"846","rooturl":"https:\/\/mintel.me","loveNonce":"a1146a4fb8"};
/* ]]> */
</script>
<script type="text/javascript" src="../wp-content/plugins/salient-social/js/salient-social.js" id="salient-social-js"></script>
<script data-pagespeed-no-defer="" data-nowprocket="" data-wpacu-skip="" data-no-optimize="" type="salientlazyscript" data-salient-lazy-type="text/javascript" src="../wp-content/themes/salient/js/build/third-party/jquery.easing.min.js" id="jquery-easing-js"></script>
<script data-pagespeed-no-defer="" data-nowprocket="" data-wpacu-skip="" data-no-optimize="" type="salientlazyscript" data-salient-lazy-type="text/javascript" src="../wp-content/themes/salient/js/build/third-party/jquery.mousewheel.min.js" id="jquery-mousewheel-js"></script>
<script type="text/javascript" src="../wp-content/themes/salient/js/build/priority.js" id="nectar_priority-js"></script>
<script type="text/javascript" src="../wp-content/themes/salient/js/build/third-party/transit.min.js" id="nectar-transit-js"></script>
<script data-pagespeed-no-defer="" data-nowprocket="" data-wpacu-skip="" data-no-optimize="" type="salientlazyscript" data-salient-lazy-type="text/javascript" src="../wp-content/themes/salient/js/build/third-party/waypoints.js" id="nectar-waypoints-js"></script>
<script type="text/javascript" src="../wp-content/plugins/salient-portfolio/js/third-party/imagesLoaded.min.js" id="imagesLoaded-js"></script>
<script data-pagespeed-no-defer="" data-nowprocket="" data-wpacu-skip="" data-no-optimize="" type="salientlazyscript" data-salient-lazy-type="text/javascript" src="../wp-content/themes/salient/js/build/third-party/hoverintent.min.js" id="hoverintent-js"></script>
<script type="text/javascript" src="../wp-content/themes/salient/js/build/third-party/jquery.fancybox.js" id="fancyBox-js"></script>
<script type="text/javascript" src="../wp-content/themes/salient/js/build/third-party/anime.min.js" id="anime-js"></script>
<script data-pagespeed-no-defer="" data-nowprocket="" data-wpacu-skip="" data-no-optimize="" type="salientlazyscript" data-salient-lazy-type="text/javascript" src="../wp-content/themes/salient/js/build/third-party/superfish.js" id="superfish-js"></script>
<script type="text/javascript" id="nectar-frontend-js-extra">
/* <![CDATA[ */
var nectarLove = {"ajaxurl":"https:\/\/mintel.me\/wp-admin\/admin-ajax.php","postID":"846","rooturl":"https:\/\/mintel.me","disqusComments":"false","loveNonce":"a1146a4fb8","mapApiKey":""};
var nectarOptions = {"delay_js":"1","smooth_scroll":"true","smooth_scroll_strength":"50","quick_search":"false","react_compat":"disabled","header_entrance":"false","body_border_func":"default","body_border_mobile":"0","dropdown_hover_intent":"default","simplify_ocm_mobile":"0","mobile_header_format":"centered-menu","ocm_btn_position":"left","left_header_dropdown_func":"default","ajax_add_to_cart":"0","ocm_remove_ext_menu_items":"remove_images","woo_product_filter_toggle":"0","woo_sidebar_toggles":"true","woo_sticky_sidebar":"0","woo_minimal_product_hover":"default","woo_minimal_product_effect":"default","woo_related_upsell_carousel":"false","woo_product_variable_select":"default","woo_using_cart_addons":"false","view_transitions_effect":"gradient-wipe"};
var nectar_front_i18n = {"menu":"Menu","next":"Next","previous":"Previous","close":"Close"};
/* ]]> */
</script>
<script data-pagespeed-no-defer="" data-nowprocket="" data-wpacu-skip="" data-no-optimize="" type="salientlazyscript" data-salient-lazy-type="text/javascript" src="../wp-content/themes/salient/js/build/init.js" id="nectar-frontend-js"></script>
<script type="text/javascript" src="../wp-content/themes/salient/js/build/nectar-smooth-scroll.js" id="nectar-smooth-scroll-js"></script>
<script data-pagespeed-no-defer="" data-nowprocket="" data-wpacu-skip="" data-no-optimize="" type="salientlazyscript" data-salient-lazy-type="text/javascript" src="../wp-content/plugins/salient-core/js/third-party/touchswipe.min.js" id="touchswipe-js"></script>
<script type="text/javascript" src="../wp-content/plugins/breeze/assets/js/js-front-end/breeze-lazy-load.min.js" id="breeze-lazy-js"></script>
<script type="text/javascript" id="breeze-lazy-js-after">
/* <![CDATA[ */
document.querySelectorAll('img[data-breeze]').forEach(img=>{if(img.getBoundingClientRect().top<=window.innerHeight){img.src=img.getAttribute('data-breeze');img.removeAttribute('data-breeze')}});
/* ]]> */
</script>
<script data-pagespeed-no-defer="" data-nowprocket="" data-wpacu-skip="" data-no-optimize="" type="salientlazyscript" data-salient-lazy-type="text/javascript" src="../wp-content/plugins/js_composer_salient/assets/js/dist/js_composer_front.min.js" id="wpb_composer_front_js-js"></script>
<script data-pagespeed-no-defer="" data-nowprocket="" data-wpacu-skip="" data-no-optimize="" type="text/javascript" src="../wp-content/themes/salient/js/build/nectar-delay-javascript.js" id="salient-delay-js-js"></script>
<script></script>
</body></html><!-- Cache served by breeze CACHE - Last modified: Sat, 31 Jan 2026 00:49:20 GMT -->