{"id":7315,"date":"2026-10-21T12:00:27","date_gmt":"2026-10-21T12:00:27","guid":{"rendered":"https:\/\/extreemtek.com\/?page_id=7315"},"modified":"2026-10-23T05:52:28","modified_gmt":"2026-10-23T05:52:28","slug":"ble-connected-device-app-development","status":"publish","type":"page","link":"https:\/\/extreemtek.com\/nl\/ble-connected-device-app-development\/","title":{"rendered":"BLE &#038; Connected Device App Development"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"7315\" class=\"elementor elementor-7315\">\n\t\t\t\t<div class=\"elementor-element elementor-element-93322ec e-con-full e-flex e-con e-parent\" data-id=\"93322ec\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d6d5872 elementor-widget__width-inherit elementor-widget elementor-widget-html\" data-id=\"d6d5872\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Inter+Tight:wght@400;500;600;700;800&display=swap');\n\n#sk-nav{\n  --sk-navy:#0a1a4d;\n  --sk-amber-lite:#F5B01A;\n  --sk-amber-deep:#D86605;\n  --sk-line:#e6e9f0;\n\n  position:relative;\n  z-index:900;\n  background:#fff;\n  border-bottom:1px solid var(--sk-line);\n  font-family:\"Inter Tight\",system-ui,-apple-system,\"Segoe UI\",sans-serif;\n  -webkit-font-smoothing:antialiased;\n}\n#sk-nav *,#sk-nav *::before,#sk-nav *::after{box-sizing:border-box}\n\n#sk-nav .sk-n-bar{\n  display:flex;\n  align-items:center;\n  gap:1rem;\n  max-width:1300px;\n  margin:0 auto;\n  padding:.85rem 1.25rem;\n}\n\n\/* logo *\/\n#sk-nav .sk-n-logo{flex:none;display:inline-flex;align-items:center;line-height:0}\n#sk-nav .sk-n-logo img{\n  display:block;\n  width:auto;\n  height:46px;\n  max-width:none;\n}\n\n\/* desktop links *\/\n#sk-nav .sk-n-links{\n  display:flex;\n  align-items:center;\n  gap:clamp(1.2rem,3vw,2.4rem);\n  margin:0 auto;\n  padding:0;\n  list-style:none;\n}\n#sk-nav .sk-n-links li{margin:0;padding:0;list-style:none}\n#sk-nav .sk-n-links li::marker,#sk-nav .sk-n-links li::before{content:none}\n#sk-nav .sk-n-links a{\n  font-size:1.02rem;\n  font-weight:600;\n  letter-spacing:-.01em;\n  color:var(--sk-navy);\n  text-decoration:none;\n  transition:color .16s ease;\n}\n#sk-nav .sk-n-links a:hover{color:#1a56e8}\n\n\/* cta *\/\n#sk-nav .sk-n-cta{\n  flex:none;\n  display:inline-flex;\n  align-items:center;\n  justify-content:center;\n  padding:.78rem 1.4rem;\n  border:0;\n  border-radius:8px;\n  background:linear-gradient(180deg,var(--sk-amber-lite) 0%,var(--sk-amber-deep) 100%);\n  color:#fff;\n  font-family:inherit;\n  font-size:.95rem;\n  font-weight:700;\n  letter-spacing:-.01em;\n  text-decoration:none;\n  white-space:nowrap;\n  box-shadow:0 6px 18px rgba(216,102,5,.3);\n  transition:transform .18s ease,box-shadow .18s ease;\n}\n#sk-nav .sk-n-cta:hover{\n  transform:translateY(-1px);color:#fff;text-decoration:none;\n  box-shadow:0 10px 24px rgba(216,102,5,.4);\n}\n#sk-nav .sk-n-cta:focus-visible{outline:3px solid var(--sk-navy);outline-offset:3px}\n\n\/* hamburger \u2014 hidden on desktop *\/\n#sk-nav .sk-n-toggle{\n  display:none;\n  flex:none;\n  width:44px;height:44px;\n  padding:0;\n  border:1px solid var(--sk-line);\n  border-radius:10px;\n  background:#fff;\n  color:var(--sk-navy);\n  cursor:pointer;\n  align-items:center;\n  justify-content:center;\n  line-height:0;\n}\n#sk-nav .sk-n-toggle:focus-visible{outline:3px solid var(--sk-navy);outline-offset:2px}\n#sk-nav .sk-n-toggle svg{display:block;flex:none}\n#sk-nav .sk-n-toggle .sk-n-close{display:none}\n#sk-nav .sk-n-toggle[aria-expanded=\"true\"] .sk-n-open{display:none}\n#sk-nav .sk-n-toggle[aria-expanded=\"true\"] .sk-n-close{display:block}\n\n\/* ---------- MOBILE ---------- *\/\n@media (max-width:1024px){\n  #sk-nav .sk-n-bar{gap:.7rem;padding:.7rem 1rem}\n  #sk-nav .sk-n-logo img{height:38px}\n  #sk-nav .sk-n-toggle{display:inline-flex}\n\n  #sk-nav .sk-n-cta{\n    margin-left:auto;\n    padding:.66rem 1rem;\n    font-size:.86rem;\n  }\n\n  \/* links become the drop panel *\/\n  #sk-nav .sk-n-links{\n    position:absolute;\n    left:0;right:0;\n    top:100%;\n    display:grid;\n    gap:0;\n    margin:0;\n    padding:0 1rem .6rem;\n    background:#fff;\n    border-bottom:1px solid var(--sk-line);\n    box-shadow:0 14px 30px rgba(10,26,77,.10);\n    opacity:0;\n    visibility:hidden;\n    transform:translateY(-10px);\n    transition:opacity .22s ease,transform .22s ease,visibility .22s ease;\n  }\n  #sk-nav .sk-n-links.is-open{\n    opacity:1;\n    visibility:visible;\n    transform:translateY(0);\n  }\n  #sk-nav .sk-n-links a{\n    display:block;\n    padding:.95rem .25rem;\n    font-size:1.05rem;\n    border-bottom:1px solid #f2f4f8;\n  }\n  #sk-nav .sk-n-links li:last-child a{border-bottom:0}\n}\n\n@media (max-width:420px){\n  #sk-nav .sk-n-logo img{height:32px}\n  #sk-nav .sk-n-cta{padding:.6rem .8rem;font-size:.8rem}\n  #sk-nav .sk-n-toggle{width:40px;height:40px}\n}\n\n@media (prefers-reduced-motion:reduce){\n  #sk-nav *{transition:none !important}\n}\n<\/style>\n\n<header id=\"sk-nav\">\n  <nav class=\"sk-n-bar\" aria-label=\"Main\">\n\n    <a class=\"sk-n-logo\" href=\"https:\/\/extreemtek.com\/\">\n      <img decoding=\"async\" src=\"https:\/\/extreemtek.com\/wp-content\/uploads\/2026\/09\/Frame.png\" alt=\"ExtreemTek \u2014 Engineering Ideas into Intelligent Reality\">\n    <\/a>\n\n    <ul class=\"sk-n-links\" id=\"skNavLinks\">\n      <li><a href=\"https:\/\/extreemtek.com\/\">Home<\/a><\/li>\n      <li><a href=\"https:\/\/extreemtek.com\/#services\">What We Do<\/a><\/li>\n      <li><a href=\"https:\/\/extreemtek.com\/#case-studies\">Case Studies<\/a><\/li>\n      <li><a href=\"https:\/\/extreemtek.com\/#how-we-work\">How We Work<\/a><\/li><li><a href=\"https:\/\/extreemtek.com\/contact-us\/\">Contact Us<\/a><\/li>\n    <\/ul>\n\n    <a class=\"sk-n-cta\" href=\"#iot-cta\">Discuss Your Product<\/a>\n\n    <button class=\"sk-n-toggle\" id=\"skNavToggle\" type=\"button\" aria-expanded=\"false\" aria-controls=\"skNavLinks\" aria-label=\"Open menu\">\n      <svg class=\"sk-n-open\" width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" aria-hidden=\"true\"><path d=\"M4 7h16M4 12h16M4 17h16\"><\/path><\/svg>\n      <svg class=\"sk-n-close\" width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" aria-hidden=\"true\"><path d=\"M6 6l12 12M18 6L6 18\"><\/path><\/svg>\n    <\/button>\n\n  <\/nav>\n<\/header>\n\n<script>\n(function(){\n  var btn   = document.getElementById('skNavToggle');\n  var links = document.getElementById('skNavLinks');\n  if(!btn || !links) return;\n\n  function setOpen(open){\n    links.classList.toggle('is-open', open);\n    btn.setAttribute('aria-expanded', open);\n    btn.setAttribute('aria-label', open ? 'Close menu' : 'Open menu');\n  }\n\n  btn.addEventListener('click', function(){\n    setOpen(btn.getAttribute('aria-expanded') !== 'true');\n  });\n\n  \/* close after tapping a link *\/\n  links.addEventListener('click', function(e){\n    if(e.target.closest('a')) setOpen(false);\n  });\n\n  \/* close on Escape, and on outside tap *\/\n  document.addEventListener('keydown', function(e){\n    if(e.key === 'Escape') setOpen(false);\n  });\n  document.addEventListener('click', function(e){\n    if(!e.target.closest('#sk-nav')) setOpen(false);\n  });\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-372c648 e-con-full e-flex e-con e-parent\" data-id=\"372c648\" data-element_type=\"container\" data-e-type=\"container\" id=\"main-content\">\n\t\t\t\t<div class=\"elementor-element elementor-element-fd1b787 elementor-widget__width-inherit elementor-widget elementor-widget-html\" data-id=\"fd1b787\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Poppins:wght@600;700;800&family=Inter+Tight:wght@400;500;600;700&display=swap');\n.xt{--navy:#0b1b3d;--deep:#0a1840;--blue:#1a8cff;--amber:#f9a21b;--amber2:#e8940c;--ink:#3a4763;--line:#e6e9f0;--soft:#f6f8fc;font-family:\"Inter Tight\",system-ui,-apple-system,\"Segoe UI\",sans-serif;color:var(--ink);font-size:17px;line-height:1.65;-webkit-font-smoothing:antialiased}\n.xt *{box-sizing:border-box}\n.xt .w{max-width:1160px;margin:0 auto;padding:0 20px}\n.xt .narrow{max-width:860px}\n.xt h1,.xt h2,.xt h3{font-family:Poppins,system-ui,sans-serif;color:var(--navy);line-height:1.18;margin:0 0 .55em}\n.xt p{margin:0 0 1em}\n.xt .hero{background:radial-gradient(1200px 500px at 80% -10%,#16357a 0%,rgba(22,53,122,0) 60%),linear-gradient(160deg,#081436 0%,#0b1b3d 70%);color:#c9d3e6;padding:90px 0 80px}\n.xt .hero h1{color:#fff;font-weight:800;font-size:clamp(34px,5vw,56px);letter-spacing:-.01em}\n.xt .hero h1 em{font-style:normal;color:var(--amber)}\n.xt .pill{display:inline-block;border:1px solid rgba(255,255,255,.2);border-radius:999px;padding:6px 14px;font-size:12px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:#fff;margin-bottom:22px}\n.xt .lead{font-size:19px;max-width:780px}\n.xt .answer{background:rgba(255,255,255,.06);border-left:4px solid var(--amber);padding:16px 20px;border-radius:8px;margin:26px 0 0;max-width:840px;color:#e6ecf7;font-size:17px}\n.xt .answer strong{color:#fff}\n.xt .btns{display:flex;gap:14px;flex-wrap:wrap;margin-top:30px}\n.xt .btn{display:inline-flex;align-items:center;gap:8px;padding:14px 22px;border-radius:6px;font-weight:600;text-decoration:none;font-size:16px}\n.xt .btn-a{background:var(--amber);color:#0b1b3d!important}\n.xt .btn-b{background:var(--blue);color:#fff!important}\n.xt .meta{font-size:14px;color:#8a97b0;margin-top:22px}\n.xt .hero .meta{color:#9fb0cf}\n.xt section.s{padding:76px 0}\n.xt section.alt{background:var(--soft)}\n.xt section.dark{background:#0b1b3d;color:#c9d3e6}\n.xt section.dark h2,.xt section.dark h3{color:#fff}\n.xt .eyebrow{color:var(--amber2);font-weight:700;font-size:13px;letter-spacing:.12em;text-transform:uppercase;margin-bottom:10px}\n.xt h2{font-size:clamp(28px,3.4vw,40px);font-weight:700}\n.xt h2 span{color:var(--blue)}\n.xt h3{font-size:20px;font-weight:700}\n.xt .grid{display:grid;gap:22px;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));margin-top:30px}\n.xt .card{background:#fff;border:1px solid var(--line);border-radius:14px;padding:26px}\n.xt section.dark .card{background:#11244f;border-color:#1d3468}\n.xt .card .tag{display:inline-block;font-size:12px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--blue);margin-bottom:8px}\n.xt .tbl{overflow-x:auto;margin-top:26px;border:1px solid var(--line);border-radius:12px}\n.xt table{width:100%;border-collapse:collapse;background:#fff;font-size:16px;min-width:560px}\n.xt th,.xt td{text-align:left;padding:14px 16px;border-bottom:1px solid var(--line);vertical-align:top}\n.xt table th{background:#0b1b3d!important;color:#fff!important;font-weight:600}.xt table td,.xt table th{border:0;border-bottom:1px solid var(--line)}.xt table tr:nth-child(even) td{background:#fafbfe}\n.xt tr:last-child td{border-bottom:0}\n.xt details{background:#fff;border:1px solid var(--line);border-radius:12px;padding:18px 22px;margin-bottom:12px}\n.xt summary{cursor:pointer;font-weight:600;color:var(--navy);font-size:18px;list-style-position:outside}\n.xt details p{margin:12px 0 0}\n.xt ul.check{list-style:none;padding:0;margin:0 0 1em}\n.xt ul.check li{padding-left:28px;position:relative;margin:9px 0}\n.xt ul.check li:before{content:\"\u2713\";position:absolute;left:0;color:var(--blue);font-weight:700}\n.xt ol.steps{counter-reset:s;list-style:none;padding:0;margin:26px 0 0;display:grid;gap:16px}\n.xt ol.steps li{counter-increment:s;background:#fff;border:1px solid var(--line);border-radius:12px;padding:20px 22px 20px 74px;position:relative}\n.xt ol.steps li:before{content:counter(s,decimal-leading-zero);position:absolute;left:20px;top:18px;font-family:Poppins,sans-serif;font-weight:800;font-size:22px;color:var(--amber2)}\n.xt a{color:var(--blue)}\n.xt .stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:18px;margin-top:34px}\n.xt .stat{border:1px solid rgba(255,255,255,.14);border-radius:12px;padding:18px}\n.xt .stat b{display:block;font-family:Poppins,sans-serif;font-size:28px;color:#fff}\n.xt .toc{background:var(--soft);border:1px solid var(--line);border-radius:12px;padding:18px 22px;margin:0 0 30px}\n.xt .toc ol{margin:8px 0 0;padding-left:20px}\n.xt article h2{margin-top:1.6em;font-size:clamp(24px,2.6vw,30px)}\n@media(max-width:640px){.xt section.s{padding:56px 0}.xt .hero{padding:64px 0 56px}}\n<\/style><div class=\"xt\">\n<section class=\"hero\"><div class=\"w\">\n<span class=\"pill\">Services \u00b7 BLE &amp; Connected Device Apps<\/span>\n<h1>BLE &amp; Connected Device App Development, <em>Firmware to App Store<\/em><\/h1>\n<p class=\"lead\">One Eindhoven team for the device firmware, the iOS and Android app, desktop clients and the cloud, so your hardware and software ship as one product.<\/p>\n<div class=\"answer\"><strong>ExtreemTek<\/strong> is a product engineering company at High Tech Campus Eindhoven that builds Bluetooth Low Energy (BLE) and Wi-Fi apps for connected devices. The same engineers own the firmware, the mobile and desktop apps and the cloud back end, so pairing, data sync and over-the-air updates work as one system.<\/div>\n<div class=\"btns\"><a class=\"btn btn-a\" href=\"https:\/\/calendly.com\/aqeel-extreemtek\/30min\" target=\"_blank\" rel=\"noopener\">Schedule a Discovery Call \u2192<\/a><a class=\"btn btn-b\" href=\"#iot-cta\">Send Project Details \u2192<\/a><\/div>\n<p class=\"meta\">Last updated 21 October 2026 \u00b7 By Aqeel Wahlah, Founder and CEO<\/p>\n<\/div><\/section>\n\n<section class=\"s\"><div class=\"w\">\n<div class=\"eyebrow\">What we build<\/div>\n<h2>Every layer of a <span>connected product<\/span><\/h2>\n<p class=\"lead\">Most connected-device projects stall at the boundary between hardware and app. We remove that boundary by building both.<\/p>\n<div class=\"grid\">\n<div class=\"card\"><span class=\"tag\">Mobile<\/span><h3>BLE companion apps<\/h3><p>Native iOS and Android apps with device scanning, secure pairing, reliable reconnection, background sync and clear device status for users.<\/p><\/div>\n<div class=\"card\"><span class=\"tag\">Embedded<\/span><h3>Firmware &amp; BLE protocol<\/h3><p>Device firmware, GATT service and characteristic design, low-power behaviour and over-the-air (OTA) firmware update flows.<\/p><\/div>\n<div class=\"card\"><span class=\"tag\">Connectivity<\/span><h3>Wi-Fi &amp; cloud link<\/h3><p>Wi-Fi provisioning, device-to-cloud communication, accounts, telemetry storage and remote management for a fleet of devices.<\/p><\/div>\n<div class=\"card\"><span class=\"tag\">Desktop<\/span><h3>Windows &amp; macOS clients<\/h3><p>Desktop apps that connect to the same device and cloud, for professional users, service engineers or production lines.<\/p><\/div>\n<div class=\"card\"><span class=\"tag\">Web<\/span><h3>Dashboards &amp; admin<\/h3><p>Web portals for customers, support teams and resellers to manage devices, users, content and firmware releases.<\/p><\/div>\n<div class=\"card\"><span class=\"tag\">Commerce<\/span><h3>Store &amp; reseller platforms<\/h3><p>Websites, online stores, CMS and partner distribution tools that sell and support the hardware after launch.<\/p><\/div>\n<\/div><\/div><\/section>\n\n<section class=\"s alt\"><div class=\"w\">\n<div class=\"eyebrow\">Why one team<\/div>\n<h2>Split vendors vs. <span>one engineering team<\/span><\/h2>\n<div class=\"tbl\"><table>\n<tr><th>Responsibility<\/th><th>Firmware vendor + app agency<\/th><th>ExtreemTek<\/th><\/tr>\n<tr><td>BLE protocol (GATT) design<\/td><td>Negotiated between two teams<\/td><td>Designed once, for firmware and app together<\/td><\/tr>\n<tr><td>Pairing and reconnection bugs<\/td><td>Each side blames the other<\/td><td>Reproduced and fixed on real hardware by one team<\/td><\/tr>\n<tr><td>Over-the-air firmware updates<\/td><td>Often added late<\/td><td>Planned in the first architecture sprint<\/td><\/tr>\n<tr><td>Cloud sync and user accounts<\/td><td>Third vendor or left to the client<\/td><td>Built and run by the same team<\/td><\/tr>\n<tr><td>App store and device release<\/td><td>Two release schedules<\/td><td>One release plan for device and app<\/td><\/tr>\n<\/table><\/div><\/div><\/section>\n\n<section class=\"s dark\" id=\"ryseup\"><div class=\"w\">\n<div class=\"eyebrow\">Proof<\/div>\n<h2>RyseUp: a \u20ac2 million connected wellness ecosystem<\/h2>\n<p class=\"lead\">ExtreemTek supported a European client's connected wellness product that brings smart hardware together with mobile, desktop, web, cloud and operational platforms.<\/p>\n<div class=\"grid\">\n<div class=\"card\"><h3>iOS &amp; Android apps<\/h3><p>Native mobile performance for end users.<\/p><\/div>\n<div class=\"card\"><h3>BLE &amp; Wi-Fi connectivity<\/h3><p>Smart-device communication between hardware and apps.<\/p><\/div>\n<div class=\"card\"><h3>Windows &amp; macOS apps<\/h3><p>Desktop client builds on the same platform.<\/p><\/div>\n<div class=\"card\"><h3>Cloud &amp; back end<\/h3><p>Scalable data structures and services.<\/p><\/div>\n<div class=\"card\"><h3>Website &amp; online store<\/h3><p>E-commerce transactional flow.<\/p><\/div>\n<div class=\"card\"><h3>CMS &amp; reseller platforms<\/h3><p>Partner distribution controls.<\/p><\/div>\n<\/div>\n<p style=\"margin-top:26px\"><a href=\"https:\/\/extreemtek.com\/case-studies\/\" style=\"color:#f9a21b\">See all ExtreemTek case studies \u2192<\/a><\/p>\n<\/div><\/section>\n\n<section class=\"s\"><div class=\"w\">\n<div class=\"eyebrow\">How we work<\/div>\n<h2>From prototype to <span>production devices<\/span><\/h2>\n<ol class=\"steps\">\n<li><h3>Discover and plan<\/h3>Agree scope, device constraints, BLE and cloud architecture and budget, and validate the riskiest technical assumptions before full development.<\/li>\n<li><h3>Prototype the link<\/h3>Get a working device-to-app connection early, so pairing, data rates and power use are tested on real hardware.<\/li>\n<li><h3>Build in short cycles<\/h3>Firmware, apps and cloud are built together, with shared code access, regular demos and feedback intervals.<\/li>\n<li><h3>Test on devices<\/h3>Device integration testing, user testing and release audits across phones, operating-system versions and firmware builds.<\/li>\n<li><h3>Launch and scale<\/h3>Secure release pipelines, OTA updates, security patches and new features after launch.<\/li>\n<\/ol><\/div><\/section>\n\n<section class=\"s alt\"><div class=\"w\">\n<div class=\"eyebrow\">Planning<\/div>\n<h2>What shapes the scope of a <span>BLE project<\/span><\/h2>\n<p>Every connected product is different, so we quote after a short discovery. These are the factors that move scope and timeline the most:<\/p>\n<ul class=\"check\">\n<li>Number of device types and firmware variants to support<\/li>\n<li>Complexity of the BLE profile: data rates, streaming vs. periodic data, encryption<\/li>\n<li>Platforms required: iOS, Android, desktop, web<\/li>\n<li>Offline use and how much data must sync to the cloud<\/li>\n<li>Over-the-air firmware updates and device fleet management<\/li>\n<li>Certification and compliance needs for your market<\/li>\n<li>Whether existing firmware or apps must be reused or replaced<\/li>\n<\/ul>\n<p>Related: <a href=\"https:\/\/extreemtek.com\/iot-and-connected-products\/\">IoT and connected products<\/a> \u00b7 <a href=\"https:\/\/extreemtek.com\/website-and-mobile-app-development\/\">web and mobile app development<\/a> \u00b7 <a href=\"https:\/\/extreemtek.com\/cloud-operations\/\">cloud back ends<\/a> \u00b7 <a href=\"https:\/\/extreemtek.com\/mvp-development\/\">MVP development<\/a><\/p>\n<\/div><\/section>\n\n<section class=\"s\" id=\"faq\"><div class=\"w narrow\">\n<div class=\"eyebrow\">FAQ<\/div>\n<h2>BLE &amp; Connected Device Apps <span>FAQ<\/span><\/h2>\n<details><summary>What is BLE app development?<\/summary><p>BLE app development is building the mobile, desktop or web software that talks to a device over Bluetooth Low Energy. It covers scanning and pairing, the GATT services and characteristics the device exposes, reliable reconnection, background data sync, and firmware updates over the air. ExtreemTek builds both sides of that link: the device firmware and the app.<\/p><\/details><details><summary>Can ExtreemTek build both the firmware and the app for my connected device?<\/summary><p>Yes. ExtreemTek is one team for firmware, embedded software, iOS and Android apps, Windows and macOS clients and the cloud back end. Because the same engineers own both sides of the Bluetooth link, protocol changes, pairing issues and update flows are solved once instead of being passed between vendors.<\/p><\/details><details><summary>Which platforms do you build connected device apps for?<\/summary><p>iOS, Android, Windows, macOS and web. For the RyseUp connected wellness ecosystem ExtreemTek delivered native iOS and Android apps, Windows and macOS desktop apps, BLE and Wi-Fi device connectivity, and the cloud services behind them.<\/p><\/details><details><summary>Can you take over an existing BLE app that has connection problems?<\/summary><p>Yes. We start with a technical review of the app, the firmware interface and the cloud services, reproduce the connection and sync issues on real hardware, and then propose a stabilisation plan before adding new features.<\/p><\/details><details><summary>Do you work with companies outside the Netherlands?<\/summary><p>Yes. ExtreemTek is based at High Tech Campus Eindhoven and works with clients across Europe and beyond. RyseUp, our largest connected-device project, was delivered for a European client.<\/p><\/details><details><summary>How do I start a BLE or connected device project with ExtreemTek?<\/summary><p>Book a 30-minute discovery call or send your project details. Founder and CEO Aqeel Wahlah joins the first conversation to understand the device, the users and the timeline, and we agree the next step, usually a scoped discovery and architecture sprint.<\/p><\/details>\n<\/div><\/section>\n<\/div>\n<script type=\"application\/ld+json\">{\"@context\":\"https:\/\/schema.org\",\"@type\":\"Service\",\"@id\":\"https:\/\/extreemtek.com\/ble-connected-device-app-development\/#service\",\"name\":\"BLE and Connected Device App Development\",\"serviceType\":\"Bluetooth Low Energy app and connected device software development\",\"provider\":{\"@id\":\"https:\/\/extreemtek.com\/#organization\"},\"areaServed\":[{\"@type\":\"Country\",\"name\":\"Netherlands\"},{\"@type\":\"Place\",\"name\":\"Europe\"}],\"description\":\"Firmware, iOS and Android apps, desktop clients and cloud back ends for Bluetooth Low Energy and Wi-Fi connected devices, built by one engineering team in Eindhoven.\",\"url\":\"https:\/\/extreemtek.com\/ble-connected-device-app-development\/\"}<\/script>\n<script type=\"application\/ld+json\">{\"@context\":\"https:\/\/schema.org\",\"@type\":\"FAQPage\",\"mainEntity\":[{\"@type\":\"Question\",\"name\":\"What is BLE app development?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"BLE app development is building the mobile, desktop or web software that talks to a device over Bluetooth Low Energy. It covers scanning and pairing, the GATT services and characteristics the device exposes, reliable reconnection, background data sync, and firmware updates over the air. ExtreemTek builds both sides of that link: the device firmware and the app.\"}},{\"@type\":\"Question\",\"name\":\"Can ExtreemTek build both the firmware and the app for my connected device?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Yes. ExtreemTek is one team for firmware, embedded software, iOS and Android apps, Windows and macOS clients and the cloud back end. Because the same engineers own both sides of the Bluetooth link, protocol changes, pairing issues and update flows are solved once instead of being passed between vendors.\"}},{\"@type\":\"Question\",\"name\":\"Which platforms do you build connected device apps for?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"iOS, Android, Windows, macOS and web. For the RyseUp connected wellness ecosystem ExtreemTek delivered native iOS and Android apps, Windows and macOS desktop apps, BLE and Wi-Fi device connectivity, and the cloud services behind them.\"}},{\"@type\":\"Question\",\"name\":\"Can you take over an existing BLE app that has connection problems?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Yes. We start with a technical review of the app, the firmware interface and the cloud services, reproduce the connection and sync issues on real hardware, and then propose a stabilisation plan before adding new features.\"}},{\"@type\":\"Question\",\"name\":\"Do you work with companies outside the Netherlands?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Yes. ExtreemTek is based at High Tech Campus Eindhoven and works with clients across Europe and beyond. RyseUp, our largest connected-device project, was delivered for a European client.\"}},{\"@type\":\"Question\",\"name\":\"How do I start a BLE or connected device project with ExtreemTek?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Book a 30-minute discovery call or send your project details. Founder and CEO Aqeel Wahlah joins the first conversation to understand the device, the users and the timeline, and we agree the next step, usually a scoped discovery and architecture sprint.\"}}]}<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-6177a84 e-con-full e-flex e-con e-parent\" data-id=\"6177a84\" data-element_type=\"container\" data-e-type=\"container\" id=\"main-content\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6f10606 elementor-widget__width-inherit elementor-widget elementor-widget-html\" data-id=\"6f10606\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>#xt-guides{background:#f6f8fc;padding:64px 20px;font-family:\"Inter Tight\",system-ui,-apple-system,\"Segoe UI\",sans-serif}#xt-guides .gw{max-width:1160px;margin:0 auto}#xt-guides .ge{color:#e8940c;font-weight:700;font-size:13px;letter-spacing:.12em;text-transform:uppercase;margin:0 0 10px}#xt-guides h2{font-family:Poppins,system-ui,sans-serif;color:#0b1b3d;font-size:clamp(26px,3vw,36px);font-weight:700;line-height:1.2;margin:0 0 26px}#xt-guides .gg{display:grid;gap:20px;grid-template-columns:repeat(auto-fit,minmax(260px,1fr))}#xt-guides a.gc{display:block;background:#fff;border:1px solid #e6e9f0;border-radius:14px;padding:24px;text-decoration:none;color:#3a4763;transition:box-shadow .2s,transform .2s}#xt-guides a.gc:hover{box-shadow:0 10px 26px rgba(11,27,61,.10);transform:translateY(-2px)}#xt-guides a.gc b{display:block;font-family:Poppins,system-ui,sans-serif;color:#0b1b3d;font-size:18px;line-height:1.3;margin-bottom:8px}#xt-guides a.gc span{display:block;font-size:15px;line-height:1.55}#xt-guides a.gc i{display:inline-block;margin-top:12px;font-style:normal;font-weight:600;color:#1a8cff;font-size:15px}<\/style><section id=\"xt-guides\"><div class=\"gw\"><p class=\"ge\">Practical guides<\/p><h2>Planning a connected device app<\/h2><div class=\"gg\"><a class=\"gc\" href=\"https:\/\/extreemtek.com\/hardware-firmware-app-cloud-one-team\/\"><b>Hardware, firmware, app and cloud from one team<\/b><span>How end-to-end product engineering works, step by step.<\/span><i>Read the guide \u2192<\/i><\/a><a class=\"gc\" href=\"https:\/\/extreemtek.com\/iot-development-partner-checklist\/\"><b>How to choose an IoT development partner<\/b><span>A 12-point checklist, including RED and Cyber Resilience Act questions.<\/span><i>Read the guide \u2192<\/i><\/a><a class=\"gc\" href=\"https:\/\/extreemtek.com\/iot-product-development-cost\/\"><b>IoT product development cost: 9 cost drivers<\/b><span>What moves the budget of a connected product, phase by phase.<\/span><i>Read the guide \u2192<\/i><\/a><\/div><\/div><\/section>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-75e2524 e-con-full e-flex e-con e-parent\" data-id=\"75e2524\" data-element_type=\"container\" data-e-type=\"container\" id=\"iot-cta\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a87586d elementor-widget__width-inherit elementor-widget elementor-widget-html\" data-id=\"a87586d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!-- ============================================================\r\n     \"START A CONVERSATION\" SECTION + PROJECT DETAILS MODAL\r\n     Paste the whole thing into one Elementor HTML widget.\r\n     Form submissions are emailed to you via Web3Forms.\r\n     ============================================================ -->\r\n\r\n<style>\r\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Inter+Tight:wght@400;500;600;700;800&display=swap');\r\n\r\n#sk-talk,#sk-modal{\r\n  --sk-navy:#0b1b3d;\r\n  --sk-blue:#1a8cff;\r\n  --sk-amber-lite:#F5B01A;\r\n  --sk-amber-deep:#D86605;\r\n  --sk-grey:#6b7280;\r\n  --sk-line:#e6e9f0;\r\n\r\n  --sk-avatar:url(\"https:\/\/extreemtek.com\/wp-content\/uploads\/2026\/09\/ChatGPT-Image-Sep-9-2026-11_35_51-AM.png\");\r\n  --sk-modal-bg:url(\"https:\/\/extreemtek.com\/wp-content\/uploads\/2026\/09\/modal-bg.jpg\");\r\n}\r\n\r\n#sk-talk{\r\n  position:relative;\r\n  background:#fff;\r\n  padding:clamp(3.5rem,8vw,5.5rem) 1.25rem;\r\n  font-family:\"Inter Tight\",system-ui,-apple-system,\"Segoe UI\",sans-serif;\r\n  color:var(--sk-navy);\r\n  text-align:center;\r\n  -webkit-font-smoothing:antialiased;\r\n\r\n  \/* --- OPTIONAL full-bleed, uncomment if the theme still boxes it in ---\r\n  width:100vw;\r\n  margin-left:calc(50% - 50vw);\r\n  *\/\r\n}\r\n#sk-talk *,#sk-talk *::before,#sk-talk *::after{box-sizing:border-box}\r\n#sk-talk .sk-t-inner{max-width:1120px;margin:0 auto}\r\n\r\n\/* header *\/\r\n#sk-talk .sk-t-eyebrow{\r\n  display:inline-block;\r\n  margin:0;\r\n  padding:.36rem .85rem;\r\n  border-radius:6px;\r\n  background:#dceafd;\r\n  color:var(--sk-blue);\r\n  font-size:.72rem;\r\n  font-weight:700;\r\n  letter-spacing:.06em;\r\n  text-transform:uppercase;\r\n  line-height:1.25;\r\n}\r\n#sk-talk h2{\r\n  margin:1rem 0 0;\r\n  padding:0;\r\n  font-family:inherit;\r\n  font-size:clamp(1.7rem,4.2vw,2.65rem);\r\n  font-weight:800;\r\n  line-height:1.16;\r\n  letter-spacing:-.03em;\r\n  color:var(--sk-navy);\r\n}\r\n#sk-talk h2 .sk-t-accent{color:var(--sk-blue)}\r\n#sk-talk .sk-t-sub{\r\n  max-width:58ch;\r\n  margin:.9rem auto 0;\r\n  font-size:clamp(1.2rem,2vw,1.12rem);\r\n  font-weight: 500;\r\n  line-height:1.6;\r\n  color:var(--sk-grey);\r\n}\r\n\r\n\/* panel *\/\r\n#sk-talk .sk-t-panel{\r\n  display:grid;\r\n  grid-template-columns:minmax(0,.85fr) minmax(0,1.15fr);\r\n  align-items:center;\r\n  gap:clamp(1.5rem,4vw,3rem);\r\n  margin-top:clamp(2rem,4.5vw,3rem);\r\n  padding:clamp(1.6rem,4vw,2.6rem);\r\n  border:1px solid var(--sk-line);\r\n  border-radius:12px;\r\n  background:#f7f9fc;\r\n  text-align:left;\r\n}\r\n\r\n\/* founder *\/\r\n#sk-talk .sk-t-person{text-align:center}\r\n#sk-talk .sk-t-avatar{\r\n  width:min(200px,60%);\r\n  margin:0 auto;\r\n  aspect-ratio:1\/1;\r\n  border:2px solid var(--sk-blue);\r\n  border-radius:50%;\r\n  background:var(--sk-avatar,none) center\/cover no-repeat,#e6eef8;\r\n}\r\n#sk-talk .sk-t-person b{\r\n  display:block;\r\n  margin-top:1.1rem;\r\n  font-size:1.22rem;\r\n  font-weight:700;\r\n  letter-spacing:-.02em;\r\n  color:#111827;\r\n}\r\n#sk-talk .sk-t-role{\r\n  display:block;\r\n  margin-top:.25rem;\r\n  font-size:.95rem;\r\n  font-weight:700;\r\n  color:var(--sk-amber-lite);\r\n}\r\n#sk-talk .sk-t-place{\r\n  display:block;\r\n  margin-top:.2rem;\r\n  font-size:.92rem;\r\n  color:var(--sk-grey);\r\n}\r\n\r\n\/* quote + actions *\/\r\n#sk-talk blockquote{\r\n  margin:0;\r\n  padding:.1rem 0 .1rem 1.1rem;\r\n  border:0;\r\n  border-left:3px solid var(--sk-blue);\r\n  quotes:none;\r\n  font-size:clamp(.98rem,2vw,1.06rem);\r\n  line-height:1.62;\r\n  color:#1c2b45;\r\n}\r\n#sk-talk .sk-t-label{\r\n  margin:1.7rem 0 .8rem;\r\n  font-size:.82rem;\r\n  font-weight:700;\r\n  letter-spacing:.02em;\r\n  text-transform:uppercase;\r\n  color:#111827;\r\n}\r\n#sk-talk .sk-t-actions{display:flex;flex-wrap:wrap;gap:.85rem}\r\n#sk-talk .sk-t-btn{\r\n  display:inline-flex;\r\n  align-items:center;\r\n  gap:.55rem;\r\n  padding:.9rem 1.5rem;\r\n  border:0;\r\n  border-radius:8px;\r\n  font-family:inherit;\r\n  font-size:.98rem;\r\n  font-weight:700;\r\n  letter-spacing:-.01em;\r\n  text-decoration:none;\r\n  cursor:pointer;\r\n  transition:transform .18s ease,box-shadow .18s ease;\r\n}\r\n#sk-talk .sk-t-btn:hover{transform:translateY(-1px);text-decoration:none}\r\n#sk-talk .sk-t-btn svg{transition:transform .18s ease}\r\n#sk-talk .sk-t-btn:hover svg{transform:translateX(3px)}\r\n#sk-talk .sk-t-btn--amber,#sk-talk .sk-t-btn--amber:visited{\r\n  background:linear-gradient(90deg,var(--sk-amber-lite) 0%,var(--sk-amber-deep) 100%);\r\n  color:#fff;\r\n  box-shadow:0 8px 22px rgba(216,102,5,.32);\r\n}\r\n#sk-talk .sk-t-btn--amber:hover{color:#fff;box-shadow:0 13px 30px rgba(216,102,5,.42)}\r\n#sk-talk .sk-t-btn--blue{\r\n  background:linear-gradient(90deg,#2b8fff 0%,#0a63d8 100%);\r\n  color:#fff;\r\n  box-shadow:0 8px 22px rgba(10,99,216,.3);\r\n}\r\n#sk-talk .sk-t-btn--blue:hover{color:#fff;box-shadow:0 13px 30px rgba(10,99,216,.4)}\r\n#sk-talk .sk-t-btn:focus-visible{outline:3px solid var(--sk-blue);outline-offset:3px}\r\n\r\n@media (max-width:820px){\r\n  #sk-talk .sk-t-panel{grid-template-columns:1fr}\r\n  #sk-talk .sk-t-avatar{width:min(160px,50%)}\r\n}\r\n@media (max-width:520px){\r\n  #sk-talk .sk-t-btn{width:100%;justify-content:center}\r\n}\r\n\r\n\/* ============ MODAL ============ *\/\r\n#sk-modal{\r\n  position:fixed;\r\n  inset:0;\r\n  z-index:99999;\r\n  display:none;\r\n  align-items:center;\r\n  justify-content:center;\r\n  padding:1.25rem;\r\n  font-family:\"Inter Tight\",system-ui,-apple-system,\"Segoe UI\",sans-serif;\r\n  text-align:left;\r\n  -webkit-font-smoothing:antialiased;\r\n}\r\n#sk-modal.is-open{display:flex}\r\n#sk-modal *,#sk-modal *::before,#sk-modal *::after{box-sizing:border-box}\r\n#sk-modal .sk-m-veil{\r\n  position:absolute;\r\n  inset:0;\r\n  background:rgba(4,10,22,.72);\r\n  -webkit-backdrop-filter:blur(3px);\r\n  backdrop-filter:blur(3px);\r\n}\r\n#sk-modal .sk-m-box{\r\n  position:relative;\r\n  isolation:isolate;\r\n  overflow:hidden auto;\r\n  width:min(550px,100%);\r\n  max-height:min(92vh,780px);\r\n  padding:clamp(1.4rem,4vw,2rem);\r\n  border:1px solid #2a7fd4;\r\n  border-radius:12px;\r\n  background:#111b2c;\r\n  color:#fff;\r\n  box-shadow:0 30px 70px rgba(0,0,0,.55);\r\n\r\n  \/* hide the scrollbar chrome \u2014 it still scrolls if it truly must *\/\r\n  scrollbar-width:none;\r\n  -ms-overflow-style:none;\r\n}\r\n#sk-modal .sk-m-box::-webkit-scrollbar{width:0;height:0;display:none}\r\n#sk-modal .sk-m-box::before{\r\n  content:\"\";\r\n  position:absolute;\r\n  inset:0;\r\n  z-index:-1;\r\n  background:var(--sk-modal-bg,none) center\/cover no-repeat;\r\n  opacity:.22;\r\n}\r\n#sk-modal .sk-m-close{\r\n  position:absolute;\r\n  top:.7rem;\r\n  right:.7rem;\r\n  display:flex;\r\n  align-items:center;\r\n  justify-content:center;\r\n  width:32px;\r\n  height:32px;\r\n  min-width:0;\r\n  min-height:0;\r\n  padding:0 !important;\r\n  margin:0;\r\n  border:0;\r\n  border-radius:50%;\r\n  line-height:0;\r\n  font-size:0;\r\n  background:rgba(255,255,255,.12);\r\n  color:#fff;\r\n  cursor:pointer;\r\n  -webkit-appearance:none;\r\n  appearance:none;\r\n  transition:background .18s ease;\r\n}\r\n#sk-modal .sk-m-close:hover{background:rgba(255,255,255,.24)}\r\n#sk-modal .sk-m-close:focus-visible{outline:3px solid var(--sk-amber-lite);outline-offset:2px}\r\n#sk-modal .sk-m-close svg{display:block}\r\n\r\n#sk-modal .sk-m-icon{\r\n  display:grid;\r\n  place-items:center;\r\n  width:58px;\r\n  height:58px;\r\n  border-radius:10px;\r\n  background:#2b3648;\r\n  color:var(--sk-amber-lite);\r\n}\r\n#sk-modal h2{\r\n  margin:1.3rem 0 0;\r\n  padding:0;\r\n  font-family:inherit;\r\n  font-size:clamp(1.6rem,5vw,2.1rem);\r\n  font-weight:800;\r\n  line-height:1.14;\r\n  letter-spacing:-.03em;\r\n  color:#fff;\r\n}\r\n#sk-modal h2 .sk-m-accent{color:var(--sk-amber-lite)}\r\n#sk-modal .sk-m-sub{\r\n  margin:.7rem 0 0;\r\n  font-size:.98rem;\r\n  line-height:1.5;\r\n  color:#c4d2e4;\r\n}\r\n\r\n#sk-modal .sk-m-field{position:relative;margin-top:.85rem}\r\n#sk-modal .sk-m-field:first-of-type{margin-top:1.5rem}\r\n#sk-modal .sk-m-field svg{\r\n  position:absolute;\r\n  top:50%;\r\n  left:1rem;\r\n  transform:translateY(-50%);\r\n  color:#6b7a90;\r\n  pointer-events:none;\r\n}\r\n#sk-modal .sk-m-field .sk-m-chev{left:auto;right:1rem}\r\n\/* textarea icon pins to the first line, not the middle *\/\r\n#sk-modal .sk-m-field--area svg{top:1.15rem;transform:none}\r\n#sk-modal input,#sk-modal select,#sk-modal textarea{\r\n  width:100%;\r\n  height:56px;\r\n  margin:0;\r\n  padding:0 1rem 0 3rem;\r\n  border:1px solid #dbe2ec;\r\n  border-radius:9px;\r\n  background:#fff;\r\n  font-family:inherit;\r\n  font-size:1rem;\r\n  color:#111827;\r\n  appearance:none;\r\n  -webkit-appearance:none;\r\n}\r\n#sk-modal textarea{\r\n  height:auto;\r\n  min-height:108px;\r\n  padding:1rem 1rem 1rem 3rem;\r\n  line-height:1.5;\r\n  resize:vertical;\r\n}\r\n#sk-modal select{padding-right:2.8rem;color:#111827}\r\n#sk-modal select:invalid{color:#8a94a4}\r\n#sk-modal input::placeholder,#sk-modal textarea::placeholder{color:#8a94a4}\r\n#sk-modal input:focus,#sk-modal select:focus,#sk-modal textarea:focus{\r\n  outline:0;\r\n  border-color:var(--sk-blue);\r\n  box-shadow:0 0 0 3px rgba(26,140,255,.25);\r\n}\r\n#sk-modal .sk-m-hint{\r\n  display:block;\r\n  margin:.4rem 0 0 .15rem;\r\n  font-size:.8rem;\r\n  color:#9fb1c8;\r\n}\r\n\/* hidden spam trap \u2014 people never see it, bots fill it in *\/\r\n#sk-modal .sk-m-trap{\r\n  position:absolute !important;\r\n  left:-9999px !important;\r\n  width:1px;\r\n  height:1px;\r\n  overflow:hidden;\r\n}\r\n\r\n#sk-modal .sk-m-submit{\r\n  display:flex;\r\n  align-items:center;\r\n  justify-content:center;\r\n  gap:.7rem;\r\n  width:100%;\r\n  margin-top:1.5rem;\r\n  padding:1.05rem 1.5rem;\r\n  border:0;\r\n  border-radius:9px;\r\n  background:linear-gradient(90deg,var(--sk-amber-lite) 0%,var(--sk-amber-deep) 100%);\r\n  color:#fff;\r\n  font-family:inherit;\r\n  font-size:1.22rem;\r\n  font-weight:700;\r\n  letter-spacing:-.02em;\r\n  cursor:pointer;\r\n  box-shadow:0 10px 26px rgba(216,102,5,.35);\r\n  transition:transform .18s ease,box-shadow .18s ease;\r\n}\r\n#sk-modal .sk-m-submit:hover{transform:translateY(-1px);box-shadow:0 15px 34px rgba(216,102,5,.45)}\r\n#sk-modal .sk-m-submit:focus-visible{outline:3px solid #fff;outline-offset:3px}\r\n#sk-modal .sk-m-submit[disabled]{opacity:.65;cursor:default;transform:none}\r\n#sk-modal .sk-m-submit svg{transition:transform .18s ease}\r\n#sk-modal .sk-m-submit:hover svg{transform:translateX(3px)}\r\n\r\n#sk-modal .sk-m-note{\r\n  display:flex;\r\n  align-items:center;\r\n  gap:.55rem;\r\n  margin:1.1rem 0 0;\r\n  font-size:.9rem;\r\n  color:#c4d2e4;\r\n}\r\n#sk-modal .sk-m-note svg{flex:none;color:#c4d2e4}\r\n#sk-modal .sk-m-status{\r\n  margin:1.1rem 0 0;\r\n  font-size:.95rem;\r\n  line-height:1.5;\r\n  color:#8ee7a8;\r\n}\r\n#sk-modal .sk-m-status:empty{display:none}\r\n#sk-modal .sk-m-status[data-state=\"error\"]{color:#ffb4b4}\r\n\r\n\/* once a status message shows, the note has done its job \u2014\r\n   swapping one for the other keeps the panel height constant *\/\r\n#sk-modal .sk-m-form--sent .sk-m-note{display:none}\r\n\r\n@media (prefers-reduced-motion:reduce){\r\n  #sk-talk *,#sk-modal *{transition:none !important;animation:none !important}\r\n}\r\n<\/style>\r\n\r\n<section id=\"sk-talk\">\r\n  <div class=\"sk-t-inner\">\r\n\r\n    <p class=\"sk-t-eyebrow\">Start a conversation<\/p>\r\n\r\n    <h2><span class=\"sk-t-accent\">Let's Discuss<\/span> What You Are Building<\/h2>\r\n\r\n    <p class=\"sk-t-sub\">\r\n      Tell us where you are in your product journey and what is preventing you from\r\n      moving forward. We will help you identify a practical next step.\r\n    <\/p>\r\n\r\n    <div class=\"sk-t-panel\">\r\n\r\n      <div class=\"sk-t-person\">\r\n        <div class=\"sk-t-avatar\" role=\"img\" aria-label=\"Aqeel Wahlah\"><\/div>\r\n        <b>Aqeel Wahlah<\/b>\r\n        <span class=\"sk-t-role\">Founder and CEO<\/span>\r\n        <span class=\"sk-t-place\">ExtreemTek, Eindhoven, Netherlands<\/span>\r\n      <\/div>\r\n\r\n      <div>\r\n        <blockquote>\r\n          I personally join the initial conversation to understand your product goals\r\n          and ensure we bring the right technical expertise to the discussion.\r\n        <\/blockquote>\r\n\r\n        <p class=\"sk-t-label\">Select how you want to reach out:<\/p>\r\n\r\n        <div class=\"sk-t-actions\">\r\n          <a class=\"sk-t-btn sk-t-btn--amber\" href=\"https:\/\/calendly.com\/aqeel-extreemtek\/30min\">\r\n            Schedule a Discovery Call\r\n            <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M5 12h14M13 6l6 6-6 6\"\/><\/svg>\r\n          <\/a>\r\n          <button class=\"sk-t-btn sk-t-btn--blue\" type=\"button\" data-sk-open-modal>\r\n            Send Project Details\r\n            <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M5 12h14M13 6l6 6-6 6\"\/><\/svg>\r\n          <\/button>\r\n        <\/div>\r\n      <\/div>\r\n\r\n    <\/div>\r\n  <\/div>\r\n<\/section>\r\n\r\n<!-- ===== modal ===== -->\r\n<div id=\"sk-modal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"sk-m-title\" hidden>\r\n  <div class=\"sk-m-veil\" data-sk-close><\/div>\r\n\r\n  <div class=\"sk-m-box\">\r\n    <button class=\"sk-m-close\" type=\"button\" data-sk-close aria-label=\"Close\">\r\n      <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" aria-hidden=\"true\"><path d=\"M6 6l12 12M18 6L6 18\"\/><\/svg>\r\n    <\/button>\r\n\r\n    <div class=\"sk-m-icon\" aria-hidden=\"true\">\r\n      <svg width=\"30\" height=\"30\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M21.5 2.5 2.5 9.8l7.2 2.9 2.6 8 9.2-18.2Z\"\/><path d=\"M9.7 12.7 21.5 2.5\"\/><\/svg>\r\n    <\/div>\r\n\r\n    <h2 id=\"sk-m-title\">Let's Explore <span class=\"sk-m-accent\">Your Product Idea!<\/span><\/h2>\r\n\r\n    <p class=\"sk-m-sub\">Tell us what you're building. Our engineering team will help you define the next step.<\/p>\r\n\r\n    <form id=\"sk-m-form\" novalidate>\r\n      <div class=\"sk-m-field\">\r\n        <svg width=\"19\" height=\"19\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"8\" r=\"3.5\"\/><path d=\"M4.5 20a7.5 7.5 0 0 1 15 0\"\/><\/svg>\r\n        <input id=\"sk-name\" name=\"name\" type=\"text\" placeholder=\"Your Name*\" aria-label=\"Your name\" required autocomplete=\"name\">\r\n      <\/div>\r\n\r\n      <div class=\"sk-m-field\">\r\n        <svg width=\"19\" height=\"19\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><rect x=\"2.5\" y=\"5\" width=\"19\" height=\"14\" rx=\"2.5\"\/><path d=\"M3 7l9 6 9-6\"\/><\/svg>\r\n        <input id=\"sk-email\" name=\"email\" type=\"email\" placeholder=\"Work Email*\" aria-label=\"Work email\" required autocomplete=\"email\">\r\n      <\/div>\r\n\r\n      <!-- phone: digits and phone punctuation only -->\r\n      <div class=\"sk-m-field\">\r\n        <svg width=\"19\" height=\"19\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M6.3 3.5h3.1l1.6 4-2 1.2a10.5 10.5 0 0 0 4.8 4.8l1.2-2 4 1.6v3.1a1.8 1.8 0 0 1-2 1.8A15.6 15.6 0 0 1 4.5 5.5a1.8 1.8 0 0 1 1.8-2Z\"\/><\/svg>\r\n        <input id=\"sk-phone\" name=\"phone\" type=\"tel\"\r\n               placeholder=\"Phone Number*\"\r\n               aria-label=\"Phone number\"\r\n               required\r\n               inputmode=\"tel\"\r\n               autocomplete=\"tel\"\r\n               maxlength=\"20\"\r\n               pattern=\"[0-9+()\\-\\s]{7,20}\"\r\n               title=\"Digits only \u2014 you may also use + ( ) - and spaces\">\r\n        <small class=\"sk-m-hint\">Digits only. You may use +, (), - and spaces.<\/small>\r\n      <\/div>\r\n\r\n      <div class=\"sk-m-field\">\r\n        <svg width=\"19\" height=\"19\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m12 2.8 8 4.3v9.8l-8 4.3-8-4.3V7.1Z\"\/><path d=\"m4 7.1 8 4.3 8-4.3M12 11.4V21\"\/><\/svg>\r\n        <svg class=\"sk-m-chev\" width=\"19\" height=\"19\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m6 9 6 6 6-6\"\/><\/svg>\r\n        <select id=\"sk-type\" name=\"project_type\" aria-label=\"What do you want to build?\" required>\r\n          <option value=\"\" selected disabled>What do you want to build?*<\/option>\r\n          <option>Mobile app (iOS \/ Android)<\/option>\r\n          <option>Web platform or SaaS<\/option>\r\n          <option>IoT or connected device<\/option>\r\n          <option>AI-powered feature<\/option>\r\n          <option>Back end, cloud or integrations<\/option>\r\n          <option>Not sure yet<\/option>\r\n        <\/select>\r\n      <\/div>\r\n\r\n      <!-- optional short summary -->\r\n      <div class=\"sk-m-field sk-m-field--area\">\r\n        <svg width=\"19\" height=\"19\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M4.5 5.5h15M4.5 10h15M4.5 14.5h10\"\/><\/svg>\r\n        <textarea id=\"sk-brief\" name=\"project_brief\"\r\n                  placeholder=\"Briefly, what are you building? (optional)\"\r\n                  aria-label=\"Short summary of your project or idea\"\r\n                  maxlength=\"600\" rows=\"3\"><\/textarea>\r\n        <small class=\"sk-m-hint\">A sentence or two is plenty \u2014 we'll ask the rest on the call.<\/small>\r\n      <\/div>\r\n\r\n      <!-- spam trap: leave empty -->\r\n      <div class=\"sk-m-trap\" aria-hidden=\"true\">\r\n        <input type=\"checkbox\" name=\"botcheck\" tabindex=\"-1\" autocomplete=\"off\">\r\n      <\/div>\r\n\r\n      <button class=\"sk-m-submit\" type=\"submit\">\r\n        Let's Discuss Your Idea\r\n        <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M5 12h14M13 6l6 6-6 6\"\/><\/svg>\r\n      <\/button>\r\n\r\n      <p class=\"sk-m-note\">\r\n        <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.9\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><rect x=\"4.5\" y=\"10.5\" width=\"15\" height=\"10\" rx=\"2\"\/><path d=\"M8 10.5V7.8a4 4 0 0 1 8 0v2.7\"\/><\/svg>\r\n        No obligation. We'll get back to you within 1-2 business days.\r\n      <\/p>\r\n\r\n      <p class=\"sk-m-status\" role=\"status\" aria-live=\"polite\"><\/p>\r\n    <\/form>\r\n  <\/div>\r\n<\/div>\r\n\r\n<script>\r\n\/* Popup form \u2014 sends submissions to your email via Web3Forms *\/\r\n(function(){\r\n  var FORM_ENDPOINT = \"https:\/\/api.web3forms.com\/submit\";\r\n  var ACCESS_KEY    = \"d16be941-4049-42a1-aac1-c0025927fe85\";\r\n\r\n  var modal  = document.getElementById('sk-modal');\r\n  var form   = document.getElementById('sk-m-form');\r\n  if(!modal || !form) return;\r\n\r\n  \/* move the popup to <body> so no Elementor wrapper can clip or offset it *\/\r\n  document.body.appendChild(modal);\r\n\r\n  var status = modal.querySelector('.sk-m-status');\r\n  var phone  = document.getElementById('sk-phone');\r\n  var opener = null;\r\n\r\n  \/* ---- phone field: allow only digits and phone punctuation ---- *\/\r\n  if(phone){\r\n    var ALLOWED = \/[^0-9+()\\-\\s]\/g;\r\n\r\n    \/* block disallowed characters as they are typed *\/\r\n    phone.addEventListener('keypress', function(e){\r\n      if(e.ctrlKey || e.metaKey || e.altKey) return;\r\n      if(e.key && e.key.length === 1 && ALLOWED.test(e.key)){\r\n        e.preventDefault();\r\n      }\r\n    });\r\n\r\n    \/* strip anything that slips through (paste, autofill, mobile keyboards) *\/\r\n    function clean(){\r\n      var start = phone.selectionStart;\r\n      var before = phone.value;\r\n      var after = before.replace(ALLOWED, '');\r\n      if(after !== before){\r\n        phone.value = after;\r\n        var drop = before.length - after.length;\r\n        try{ phone.setSelectionRange(Math.max(0, start - drop), Math.max(0, start - drop)); }catch(err){}\r\n      }\r\n    }\r\n    phone.addEventListener('input', clean);\r\n    phone.addEventListener('paste', function(){ setTimeout(clean, 0); });\r\n  }\r\n\r\n  function open(trigger){\r\n    opener = trigger || null;\r\n    modal.hidden = false;\r\n    modal.classList.add('is-open');\r\n    document.body.style.overflow = 'hidden';\r\n    var first = modal.querySelector('input:not([name=\"botcheck\"]),select,textarea');\r\n    if(first) first.focus();\r\n  }\r\n\r\n  function close(){\r\n    modal.classList.remove('is-open');\r\n    modal.hidden = true;\r\n    document.body.style.overflow = '';\r\n\r\n    \/* clear every field so reopening starts fresh *\/\r\n    form.reset();\r\n    if(phone) phone.setCustomValidity('');\r\n\r\n    say('', 'ok');\r\n    if(opener) opener.focus();\r\n  }\r\n\r\n  document.addEventListener('click', function(e){\r\n    var btn = e.target.closest('[data-sk-open-modal]');\r\n    if(btn){ e.preventDefault(); open(btn); }\r\n  });\r\n\r\n  modal.querySelectorAll('[data-sk-close]').forEach(function(el){\r\n    el.addEventListener('click', close);\r\n  });\r\n\r\n  document.addEventListener('keydown', function(e){\r\n    if(e.key === 'Escape' && modal.classList.contains('is-open')) close();\r\n  });\r\n\r\n  \/* keep tab focus inside the popup while it is open *\/\r\n  modal.addEventListener('keydown', function(e){\r\n    if(e.key !== 'Tab') return;\r\n    var f = modal.querySelectorAll('button,input:not([name=\"botcheck\"]),select,textarea,a[href]');\r\n    if(!f.length) return;\r\n    var first = f[0], last = f[f.length - 1];\r\n    if(e.shiftKey && document.activeElement === first){ e.preventDefault(); last.focus(); }\r\n    else if(!e.shiftKey && document.activeElement === last){ e.preventDefault(); first.focus(); }\r\n  });\r\n\r\n  function say(msg, state){\r\n    status.textContent = msg;\r\n    status.setAttribute('data-state', state || 'ok');\r\n    form.classList.toggle('sk-m-form--sent', !!msg);\r\n  }\r\n\r\n  form.addEventListener('submit', function(e){\r\n    e.preventDefault();\r\n    say('', 'ok');\r\n\r\n    \/* phone must hold at least 7 digits once punctuation is ignored *\/\r\n    if(phone){\r\n      var digits = phone.value.replace(\/\\D\/g, '');\r\n      if(digits.length < 7){\r\n        phone.setCustomValidity('Please enter a valid phone number (at least 7 digits).');\r\n      } else {\r\n        phone.setCustomValidity('');\r\n      }\r\n    }\r\n\r\n    if(!form.checkValidity()){\r\n      form.reportValidity();\r\n      return;\r\n    }\r\n\r\n    var btn = form.querySelector('.sk-m-submit');\r\n    var payload = new FormData(form);\r\n    payload.append('access_key', ACCESS_KEY);\r\n    payload.append('subject', 'New project inquiry from extreemtek.com (contact section)');\r\n    payload.append('from_name', 'ExtreemTek Website');\r\n\r\n    btn.disabled = true;\r\n    say('Sending\u2026', 'ok');\r\n\r\n    fetch(FORM_ENDPOINT, {\r\n      method:'POST',\r\n      headers:{ 'Accept':'application\/json' },\r\n      body:payload\r\n    })\r\n      .then(function(r){ return r.json(); })\r\n      .then(function(res){\r\n        if(!res.success) throw new Error(res.message || 'failed');\r\n        form.reset();\r\n        say('Thanks. We will get back to you within 1-2 business days.', 'ok');\r\n      })\r\n      .catch(function(){\r\n        say('Something went wrong. Please try again or email us directly.', 'error');\r\n      })\r\n      .finally(function(){ btn.disabled = false; });\r\n  });\r\n})();\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-4075677 e-con-full e-flex e-con e-parent\" data-id=\"4075677\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3a71d4b elementor-widget__width-inherit elementor-widget elementor-widget-html\" data-id=\"3a71d4b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Inter+Tight:wght@400;500;600;700;800&display=swap');\n\nhtml{scroll-behavior:smooth}\n\n#sk-foot{\n  --sk-amber:#F5B01A;\n  --sk-ink:#101c30;\n\n  position:relative;\n  font-family:\"Inter Tight\",system-ui,-apple-system,\"Segoe UI\",sans-serif;\n  -webkit-font-smoothing:antialiased;\n}\n#sk-foot *,#sk-foot *::before,#sk-foot *::after{box-sizing:border-box}\n#sk-foot .sk-f-inner{max-width:1120px;margin:0 auto;padding:0 1.5rem}\n\n\/* ---------- orange band ---------- *\/\n#sk-foot .sk-f-top{\n  position:relative;\n  padding:clamp(4.5rem,11vw,8rem) 0 clamp(2rem,5vw,3rem);\n  background:url(\"https:\/\/extreemtek.com\/wp-content\/uploads\/2026\/09\/waves-transparent-1920x464-1.png\") center top\/cover no-repeat;\n  color:#fff;\n}\n#sk-foot .sk-f-grid{\n  display:grid;\n  grid-template-columns:minmax(0,1.5fr) minmax(0,1fr);\n  gap:clamp(1.6rem,4vw,3rem);\n  padding-top:clamp(1rem,2vw,1.5rem);\n}\n#sk-foot .sk-f-logo{\n  display:block;\n  width:auto;\n  max-width:230px;\n  height:auto;\n}\n#sk-foot .sk-f-blurb{\n  margin:1.4rem 0 0;\n  max-width:42ch;\n  font-size:.95rem;\n  font-weight:500;\n  line-height:1.55;\n  color:#fff;\n}\n#sk-foot .sk-f-addr{\n  margin:1.2rem 0 0;\n  max-width:44ch;\n  font-size:.88rem;\n  font-style:normal;\n  line-height:1.5;\n  color:rgba(255,255,255,.92);\n}\n#sk-foot .sk-f-contact{\n  margin:0;\n  padding:0;\n  list-style:none;\n  align-self:center;\n}\n#sk-foot .sk-f-contact li{\n  display:flex;\n  align-items:center;\n  gap:.7rem;\n  margin:0 0 .95rem;\n  padding:0;\n  list-style:none;\n  font-size:.95rem;\n}\n#sk-foot .sk-f-contact li:last-child{margin-bottom:0}\n#sk-foot .sk-f-contact li::marker{content:none}\n#sk-foot .sk-f-contact svg{flex:none;color:rgba(255,255,255,.9)}\n#sk-foot .sk-f-contact a{\n  color:#fff;\n  text-decoration:none;\n  border-bottom:1px solid transparent;\n  transition:border-color .18s ease;\n}\n#sk-foot .sk-f-contact a:hover{color:#fff;border-bottom-color:rgba(255,255,255,.7)}\n#sk-foot .sk-f-contact a:focus-visible{outline:3px solid #fff;outline-offset:3px}\n\n\/* ---------- dark band ---------- *\/\n#sk-foot .sk-f-bottom{\n  background:var(--sk-ink);\n  color:#dbe3ee;\n  padding:clamp(2.4rem,5vw,3.4rem) 0 0;\n}\n#sk-foot .sk-f-nav{\n  display:grid;\n  grid-template-columns:repeat(3,minmax(0,1fr));\n  gap:1.5rem;\n  max-width:820px;\n  margin:0 auto;\n}\n#sk-foot .sk-f-nav h3{\n  margin:0 0 1.3rem;\n  padding:0;\n  font-family:inherit;\n  font-size:.82rem;\n  font-weight:700;\n  letter-spacing:.05em;\n  text-transform:uppercase;\n  color:var(--sk-amber);\n}\n#sk-foot .sk-f-nav ul{margin:0;padding:0;list-style:none}\n#sk-foot .sk-f-nav li{margin:0 0 .9rem;padding:0;list-style:none}\n#sk-foot .sk-f-nav li::marker{content:none}\n#sk-foot .sk-f-nav a{\n  color:#dbe3ee;\n  font-size:.95rem;\n  line-height:1.45;\n  text-decoration:none;\n  transition:color .18s ease;\n}\n#sk-foot .sk-f-nav a:hover{color:var(--sk-amber);text-decoration:none}\n#sk-foot .sk-f-nav a:focus-visible{outline:3px solid var(--sk-amber);outline-offset:3px;border-radius:3px}\n\n#sk-foot .sk-f-legal{\n  display:flex;\n  flex-wrap:wrap;\n  align-items:center;\n  justify-content:space-between;\n  gap:1rem;\n  margin-top:clamp(2rem,4vw,3rem);\n  padding:1.3rem 0;\n  border-top:1px solid rgba(255,255,255,.08);\n  font-size:.88rem;\n  color:#9aa8bd;\n}\n#sk-foot .sk-f-legal b{font-weight:600;color:var(--sk-amber)}\n#sk-foot .sk-f-legal ul{display:flex;gap:1.6rem;margin:0;padding:0;list-style:none}\n#sk-foot .sk-f-legal li{margin:0;padding:0;list-style:none}\n#sk-foot .sk-f-legal li::marker{content:none}\n#sk-foot .sk-f-legal a{color:#9aa8bd;text-decoration:none;transition:color .18s ease}\n#sk-foot .sk-f-legal a:hover{color:#fff;text-decoration:none}\n#sk-foot .sk-f-legal a:focus-visible{outline:3px solid var(--sk-amber);outline-offset:3px;border-radius:3px}\n\n\/* ---------- back to top ---------- *\/\n#sk-top-btn{\n  position:fixed;\n  right:24px;bottom:24px;\n  z-index:9999;\n\n  width:48px;height:48px;\n  display:flex;align-items:center;justify-content:center;\n  border:0;border-radius:12px;\n  background:#F5B01A;\n  color:#101c30;\n  cursor:pointer;\n\n  opacity:0;\n  visibility:hidden;\n  transform:translateY(12px);\n  transition:opacity .25s ease, transform .25s ease, visibility .25s, background-color .2s ease, color .2s ease;\n}\n#sk-top-btn.is-visible{\n  opacity:1;\n  visibility:visible;\n  transform:translateY(0);\n}\n#sk-top-btn svg{\n  width:20px;height:20px;\n  fill:none;stroke:currentColor;stroke-width:2.4;\n  stroke-linecap:round;stroke-linejoin:round;\n}\n@media (hover:hover){\n  #sk-top-btn:hover,\n  #sk-top-btn:focus,\n  #sk-top-btn:active{\n    background:#007CF9 !important;\n    color:#fff !important;\n  }\n}\n#sk-top-btn:focus-visible{outline:3px solid #007CF9;outline-offset:3px}\n\n@media (max-width:760px){\n  #sk-foot .sk-f-grid{grid-template-columns:1fr;gap:1.8rem}\n  #sk-foot .sk-f-nav{grid-template-columns:repeat(2,minmax(0,1fr));gap:1.8rem}\n  #sk-foot .sk-f-legal{justify-content:flex-start}\n}\n@media (max-width:600px){\n  #sk-top-btn{right:16px;bottom:16px;width:44px;height:44px;border-radius:11px}\n  #sk-top-btn svg{width:18px;height:18px}\n}\n@media (max-width:460px){\n  #sk-foot .sk-f-nav{grid-template-columns:1fr}\n}\n@media (prefers-reduced-motion:reduce){\n  html{scroll-behavior:auto}\n  #sk-foot *{transition:none !important;animation:none !important}\n  #sk-top-btn{transition:opacity .01s}\n}\n<\/style>\n\n<footer id=\"sk-foot\">\n\n  <div class=\"sk-f-top\">\n    <div class=\"sk-f-inner\">\n      <div class=\"sk-f-grid\">\n\n        <div>\n          <img class=\"sk-f-logo\" src=\"https:\/\/extreemtek.com\/wp-content\/uploads\/2026\/09\/Group-2.png\" alt=\"ExtreemTek \u2014 Engineering Ideas into Intelligent Reality\" loading=\"lazy\" decoding=\"async\">\n\n          <p class=\"sk-f-blurb\">\n            High-quality product engineering bringing AI, IoT, web,\n            mobile and cloud together for scalability.\n          <\/p>\n\n          <address class=\"sk-f-addr\">\n            AI Innovation Center,  High Tech Campus, 5656 AE,<br>\n            Eindhoven, the Netherlands.\n          <\/address>\n        <\/div>\n\n        <ul class=\"sk-f-contact\">\n          <li>\n            <svg width=\"17\" height=\"17\" viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M4.98 3.5a2.5 2.5 0 1 0 0 5 2.5 2.5 0 0 0 0-5ZM3 9.75h4v10.75H3ZM9.5 9.75h3.83v1.47h.05a4.2 4.2 0 0 1 3.78-2.08c4.04 0 4.79 2.66 4.79 6.12v4.24h-4v-3.76c0-.9-.02-2.05-1.25-2.05-1.25 0-1.44.98-1.44 1.99v3.82h-4Z\"><\/path><\/svg>\n            <a href=\"https:\/\/www.linkedin.com\/company\/extreemtek\" target=\"_blank\" rel=\"noopener\">@extreemtek<\/a>\n          <\/li>\n          <li>\n            <svg width=\"17\" height=\"17\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><rect x=\"7\" y=\"2.5\" width=\"10\" height=\"19\" rx=\"2.5\"><\/rect><path d=\"M11 18.5h2\"><\/path><\/svg>\n            <a href=\"tel:+31641166735\">+31641166735<\/a>\n          <\/li>\n          <li>\n            <svg width=\"17\" height=\"17\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><rect x=\"2.5\" y=\"5\" width=\"19\" height=\"14\" rx=\"2.5\"><\/rect><path d=\"M3 7l9 6 9-6\"><\/path><\/svg>\n            <a href=\"mailto:hello@extreemtek.nl\">hello@extreemtek.nl<\/a>\n          <\/li>\n        <\/ul>\n\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <div class=\"sk-f-bottom\">\n    <div class=\"sk-f-inner\">\n\n      <nav class=\"sk-f-nav\" aria-label=\"Footer\">\n        <div>\n          <h3>Case Studies<\/h3>\n          <ul>\n            <li><a href=\"https:\/\/extreemtek.com\/case-studies\/#clawleaf\">Clawleaf<\/a><\/li>\n            <li><a href=\"https:\/\/extreemtek.com\/fileshift_fast_file_transfer\/\">Fileshift<\/a><\/li>\n          <li><a href=\"https:\/\/extreemtek.com\/plantcare\/\">Plantcare<\/a><\/li>\n            <!--<li><a href=\"#path-modernize\">Deepfake<\/a><\/li> -->\n          <\/ul>\n        <\/div>\n\n        <div>\n          <h3 href=\"#services\">Services<\/h3>\n          <ul>\n            <li><a href=\"https:\/\/extreemtek.com\/ai-solution\/\">AI Solutions<\/a><\/li>\n            <li><a href=\"https:\/\/extreemtek.com\/iot-and-connected-products\/\">IoT Firmware<\/a><\/li>\n            <li><a href=\"https:\/\/extreemtek.com\/website-and-mobile-app-development\/\">Web &amp; App Development<\/a><\/li>\n            <li><a href=\"https:\/\/extreemtek.com\/cloud-operations\/\">Cloud Operations<\/a><\/li><li><a href=\"https:\/\/extreemtek.com\/ble-connected-device-app-development\/\">BLE &amp; Device Apps<\/a><\/li><li><a href=\"https:\/\/extreemtek.com\/mvp-development\/\">MVP Development<\/a><\/li>\n          <\/ul>\n        <\/div>\n\n        <div>\n          <h3>Company<\/h3>\n          <ul>\n            <li><a href=\"https:\/\/extreemtek.com\/\">Home<\/a><\/li><li><a href=\"https:\/\/extreemtek.com\/#case-studies\">Case Studies<\/a><\/li>\n            <li><a href=\"https:\/\/extreemtek.com\/#how-we-work\">How We Work<\/a><\/li>\n            <li><a href=\"https:\/\/extreemtek.com\/contact-us\/\">Contact Us<\/a><\/li>\n          <\/ul>\n        <\/div>\n      <\/nav>\n\n      <div class=\"sk-f-legal\">\n        <p style=\"margin:0\">\u00a9 2026 <b>ExtreemTek<\/b>. All rights reserved. Registered in Eindhoven, the Netherlands.<\/p>\n        <ul>\n          <li><a href=\"https:\/\/extreemtek.com\/privacy-policy\/\">Privacy Policy<\/a><\/li>\n          \n        <\/ul>\n      <\/div>\n\n    <\/div>\n  <\/div>\n\n<\/footer>\n\n<button id=\"sk-top-btn\" type=\"button\" aria-label=\"Back to top\">\n  <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M6 15l6-6 6 6\"><\/path><\/svg>\n<\/button>\n\n<script>\n(function () {\n  function init() {\n    var btn = document.getElementById('sk-top-btn');\n    if (!btn) return;\n\n    var SHOW_AFTER = 400;\n\n    function scrolled() {\n      return window.pageYOffset\n          || document.documentElement.scrollTop\n          || document.body.scrollTop\n          || 0;\n    }\n\n    function check() {\n      btn.classList.toggle('is-visible', scrolled() > SHOW_AFTER);\n    }\n\n    \/\/ scroll, resize, and the tail of any smooth-scroll from an anchor click\n    window.addEventListener('scroll', check, { passive: true });\n    window.addEventListener('resize', check, { passive: true });\n    window.addEventListener('hashchange', function () {\n      setTimeout(check, 100);\n      setTimeout(check, 700);\n    });\n    document.addEventListener('click', function (e) {\n      var a = e.target.closest && e.target.closest('a[href*=\"#\"]');\n      if (!a) return;\n      setTimeout(check, 100);\n      setTimeout(check, 700);\n    }, true);\n\n    \/\/ safety net for page builders that animate scroll without firing events\n    setInterval(check, 800);\n\n    check();\n\n    btn.addEventListener('click', function () {\n      var reduce = window.matchMedia('(prefers-reduced-motion:reduce)').matches;\n      if (window.scrollTo && !reduce) {\n        window.scrollTo({ top: 0, behavior: 'smooth' });\n      } else {\n        window.scrollTo(0, 0);\n      }\n    });\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', init);\n  } else {\n    init();\n  }\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Home What We Do Case Studies How We Work About Contact Us Discuss Your Product Services \u00b7 BLE &amp; Connected Device Apps BLE &amp; Connected Device App Development, Firmware to App Store One Eindhoven team for the device firmware, the iOS and Android app, desktop clients and the cloud, so your hardware and software ship [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"_yoast_wpseo_focuskw":"ble app development","_yoast_wpseo_title":"BLE & Connected Device App Development | ExtreemTek Eindhoven","_yoast_wpseo_metadesc":"ExtreemTek builds BLE and Wi-Fi connected device apps: firmware, iOS and Android apps, desktop clients and cloud, by one team in Eindhoven. Book a discovery call.","footnotes":""},"class_list":["post-7315","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>BLE &amp; Connected Device App Development | ExtreemTek Eindhoven<\/title>\n<meta name=\"description\" content=\"ExtreemTek builds BLE and Wi-Fi connected device apps: firmware, iOS and Android apps, desktop clients and cloud, by one team in Eindhoven. Book a discovery call.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/extreemtek.com\/nl\/ble-connected-device-app-development\/\" \/>\n<meta property=\"og:locale\" content=\"nl_NL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"BLE &amp; Connected Device App Development | ExtreemTek Eindhoven\" \/>\n<meta property=\"og:description\" content=\"ExtreemTek builds BLE and Wi-Fi connected device apps: firmware, iOS and Android apps, desktop clients and cloud, by one team in Eindhoven. Book a discovery call.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/extreemtek.com\/nl\/ble-connected-device-app-development\/\" \/>\n<meta property=\"og:site_name\" content=\"ExtreemTek\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/extreemtek\/\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-23T05:52:28+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/extreemtek.com\/wp-content\/uploads\/2026\/09\/Frame.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Geschatte leestijd\" \/>\n\t<meta name=\"twitter:data1\" content=\"6 minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/extreemtek.com\\\/ble-connected-device-app-development\\\/\",\"url\":\"https:\\\/\\\/extreemtek.com\\\/ble-connected-device-app-development\\\/\",\"name\":\"BLE & Connected Device App Development | ExtreemTek Eindhoven\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/extreemtek.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/extreemtek.com\\\/ble-connected-device-app-development\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/extreemtek.com\\\/ble-connected-device-app-development\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/extreemtek.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/Frame.png\",\"datePublished\":\"2026-10-21T12:00:27+00:00\",\"dateModified\":\"2026-10-23T05:52:28+00:00\",\"description\":\"ExtreemTek builds BLE and Wi-Fi connected device apps: firmware, iOS and Android apps, desktop clients and cloud, by one team in Eindhoven. Book a discovery call.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/extreemtek.com\\\/ble-connected-device-app-development\\\/#breadcrumb\"},\"inLanguage\":\"nl-NL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/extreemtek.com\\\/ble-connected-device-app-development\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"nl-NL\",\"@id\":\"https:\\\/\\\/extreemtek.com\\\/ble-connected-device-app-development\\\/#primaryimage\",\"url\":\"https:\\\/\\\/extreemtek.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/Frame.png\",\"contentUrl\":\"https:\\\/\\\/extreemtek.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/Frame.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/extreemtek.com\\\/ble-connected-device-app-development\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/extreemtek.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"BLE &#038; Connected Device App Development\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/extreemtek.com\\\/#website\",\"url\":\"https:\\\/\\\/extreemtek.com\\\/\",\"name\":\"ExtreemTek\",\"description\":\"Engineering Ideas into Intelligent Reality\",\"publisher\":{\"@id\":\"https:\\\/\\\/extreemtek.com\\\/#organization\"},\"alternateName\":\"Extreemtek\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/extreemtek.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"nl-NL\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/extreemtek.com\\\/#organization\",\"name\":\"ExtreemTek\",\"alternateName\":\"Extreemtek\",\"url\":\"https:\\\/\\\/extreemtek.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"nl-NL\",\"@id\":\"https:\\\/\\\/extreemtek.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/extreemtek.com\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/extreemtek-new-logol-horizontal-white.svg\",\"contentUrl\":\"https:\\\/\\\/extreemtek.com\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/extreemtek-new-logol-horizontal-white.svg\",\"width\":634,\"height\":106,\"caption\":\"ExtreemTek\"},\"image\":{\"@id\":\"https:\\\/\\\/extreemtek.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/extreemtek\\\/\",\"https:\\\/\\\/www.instagram.com\\\/extreemtek\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/extreemtek\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"BLE & Connected Device App Development | ExtreemTek Eindhoven","description":"ExtreemTek builds BLE and Wi-Fi connected device apps: firmware, iOS and Android apps, desktop clients and cloud, by one team in Eindhoven. Book a discovery call.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/extreemtek.com\/nl\/ble-connected-device-app-development\/","og_locale":"nl_NL","og_type":"article","og_title":"BLE & Connected Device App Development | ExtreemTek Eindhoven","og_description":"ExtreemTek builds BLE and Wi-Fi connected device apps: firmware, iOS and Android apps, desktop clients and cloud, by one team in Eindhoven. Book a discovery call.","og_url":"https:\/\/extreemtek.com\/nl\/ble-connected-device-app-development\/","og_site_name":"ExtreemTek","article_publisher":"https:\/\/www.facebook.com\/extreemtek\/","article_modified_time":"2026-10-23T05:52:28+00:00","og_image":[{"url":"https:\/\/extreemtek.com\/wp-content\/uploads\/2026\/09\/Frame.png","type":"","width":"","height":""}],"twitter_card":"summary_large_image","twitter_misc":{"Geschatte leestijd":"6 minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/extreemtek.com\/ble-connected-device-app-development\/","url":"https:\/\/extreemtek.com\/ble-connected-device-app-development\/","name":"BLE & Connected Device App Development | ExtreemTek Eindhoven","isPartOf":{"@id":"https:\/\/extreemtek.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/extreemtek.com\/ble-connected-device-app-development\/#primaryimage"},"image":{"@id":"https:\/\/extreemtek.com\/ble-connected-device-app-development\/#primaryimage"},"thumbnailUrl":"https:\/\/extreemtek.com\/wp-content\/uploads\/2026\/09\/Frame.png","datePublished":"2026-10-21T12:00:27+00:00","dateModified":"2026-10-23T05:52:28+00:00","description":"ExtreemTek builds BLE and Wi-Fi connected device apps: firmware, iOS and Android apps, desktop clients and cloud, by one team in Eindhoven. Book a discovery call.","breadcrumb":{"@id":"https:\/\/extreemtek.com\/ble-connected-device-app-development\/#breadcrumb"},"inLanguage":"nl-NL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/extreemtek.com\/ble-connected-device-app-development\/"]}]},{"@type":"ImageObject","inLanguage":"nl-NL","@id":"https:\/\/extreemtek.com\/ble-connected-device-app-development\/#primaryimage","url":"https:\/\/extreemtek.com\/wp-content\/uploads\/2026\/09\/Frame.png","contentUrl":"https:\/\/extreemtek.com\/wp-content\/uploads\/2026\/09\/Frame.png"},{"@type":"BreadcrumbList","@id":"https:\/\/extreemtek.com\/ble-connected-device-app-development\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/extreemtek.com\/"},{"@type":"ListItem","position":2,"name":"BLE &#038; Connected Device App Development"}]},{"@type":"WebSite","@id":"https:\/\/extreemtek.com\/#website","url":"https:\/\/extreemtek.com\/","name":"ExtreemTek","description":"Engineering Ideas into Intelligent Reality","publisher":{"@id":"https:\/\/extreemtek.com\/#organization"},"alternateName":"Extreemtek","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/extreemtek.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"nl-NL"},{"@type":"Organization","@id":"https:\/\/extreemtek.com\/#organization","name":"ExtreemTek","alternateName":"Extreemtek","url":"https:\/\/extreemtek.com\/","logo":{"@type":"ImageObject","inLanguage":"nl-NL","@id":"https:\/\/extreemtek.com\/#\/schema\/logo\/image\/","url":"https:\/\/extreemtek.com\/wp-content\/uploads\/2026\/07\/extreemtek-new-logol-horizontal-white.svg","contentUrl":"https:\/\/extreemtek.com\/wp-content\/uploads\/2026\/07\/extreemtek-new-logol-horizontal-white.svg","width":634,"height":106,"caption":"ExtreemTek"},"image":{"@id":"https:\/\/extreemtek.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/extreemtek\/","https:\/\/www.instagram.com\/extreemtek\/","https:\/\/www.linkedin.com\/company\/extreemtek"]}]}},"amp_enabled":false,"_links":{"self":[{"href":"https:\/\/extreemtek.com\/nl\/wp-json\/wp\/v2\/pages\/7315","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/extreemtek.com\/nl\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/extreemtek.com\/nl\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/extreemtek.com\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/extreemtek.com\/nl\/wp-json\/wp\/v2\/comments?post=7315"}],"version-history":[{"count":4,"href":"https:\/\/extreemtek.com\/nl\/wp-json\/wp\/v2\/pages\/7315\/revisions"}],"predecessor-version":[{"id":7356,"href":"https:\/\/extreemtek.com\/nl\/wp-json\/wp\/v2\/pages\/7315\/revisions\/7356"}],"wp:attachment":[{"href":"https:\/\/extreemtek.com\/nl\/wp-json\/wp\/v2\/media?parent=7315"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}