(function () { var COOKIE = 'rsm_attr'; // first-party, this domain only var DAYS = 90; // matches the usual Google Ads attribution window var MAX = 300; // per-value cap; cookies ride on every request, keep it small try { var qs = new URLSearchParams(location.search); var clip = function (v) { return v == null ? '' : String(v).slice(0, MAX); }; // A "campaign touch" = any paid/tagged arrival. Plain organic navigation must not overwrite. var CLICK = ['gclid', 'gbraid', 'wbraid', 'fbclid', 'msclkid', 'ttclid']; var UTM = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content']; // Google Ads ValueTrack, delivered via a Final URL suffix on standard Search campaigns. // `keyword` + `matchtype` are the useful pair: which search actually produced a booking. var VT = ['keyword', 'matchtype', 'device', 'network', 'campaignid', 'adgroupid', 'placement']; var touch = {}; CLICK.concat(UTM, VT).forEach(function (k) { if (qs.get(k)) touch[k] = clip(qs.get(k)); }); // ValueTrack alone doesn't mark a campaign touch — a stray ?device= shouldn't overwrite a real // ad click's first-touch record. Only a click id or a utm_* counts. var isCampaignTouch = CLICK.concat(UTM).some(function (k) { return !!touch[k]; }); // Referrer is only meaningful when it's off-site. var ref = ''; try { if (document.referrer && new URL(document.referrer).hostname !== location.hostname) { ref = clip(document.referrer); } } catch (e) {} var existing = null; try { var m = document.cookie.match(new RegExp('(?:^|; )' + COOKIE + '=([^;]*)')); if (m) existing = JSON.parse(decodeURIComponent(m[1])); } catch (e) { existing = null; } // Nothing new to record and we already have a record ? leave it alone. if (!isCampaignTouch && !ref && existing) return; var now = new Date().toISOString(); var landing = clip(location.pathname + location.search); var data = existing || {}; if (!data.ft) { // FIRST touch — write once, never overwrite data.ft = { t: now, ref: ref, landing: landing }; CLICK.concat(UTM, VT).forEach(function (k) { if (touch[k]) data.ft[k] = touch[k]; }); } if (isCampaignTouch || !data.lt) { // LAST touch — refresh on each new campaign hit data.lt = { t: now, ref: ref, landing: landing }; CLICK.concat(UTM, VT).forEach(function (k) { if (touch[k]) data.lt[k] = touch[k]; }); } var val = encodeURIComponent(JSON.stringify(data)); if (val.length > 3500) return; // never risk blowing the 4KB cookie limit document.cookie = COOKIE + '=' + val + ';path=/;max-age=' + (DAYS * 86400) + ';SameSite=Lax' + (location.protocol === 'https:' ? ';Secure' : ''); } catch (e) { /* attribution is never worth breaking a page for */ } })();

Abdul

Hello, I'm Abdul. I’ve been a driving instructor since 2024 and truly enjoy helping others gain confidence behind the wheel. I bring a patient and understanding approach to every lesson, focusing on road safety and risk management so that you become a safe and cautious driver.

Before becoming an instructor, I served as a Captain on ocean-going ships, which allowed me to travel widely and meet people from diverse cultures. This experience enriched my understanding of human interactions and deepened my commitment to helping others. I’m passionate about sharing that knowledge and supporting you on your journey to independence on the road.

I look forward to working with you and helping you become a confident and safe driver.


Testimonial 5 Star Rating


Quotes

I had my test package with Abdul, must I say he’s very professional very knowledgeable. I wasted money with another driving instructor previously he wasn’t as resourced and as patient as Abdul. Better service, better value for money and I would highly recommend their services. Thank you so much. Abdul taught me a lot of stuff that my previous instructor didn’t prior to my exam. Thank you

Sue


Back to Top