(function () {
// 1) Basic bot filter (extend if you like)
function isBot() {
return /(bot|crawl|spider|google|bing|slurp|yandex|facebook|linkedin|pinterest|preview|whatsapp|discord|telegram|headless|puppeteer)/i
.test(navigator.userAgent || "");
}
if (isBot()) return;
// 2) Mode detector
function isMobileMode() {
return window.matchMedia("(max-width: 767px)").matches ||
/Mobi|Android|iPhone|iPad|iPod/i.test(navigator.userAgent || "");
}
// 3) Your ad configs (swap keys/sizes to match your network units)
const AD = {
mobile: { key: "aa6d52a6037d0558c2a19dc52b6aa824", width: 320, height: 50 }, // 320x50
desktop: { key: "a49752dcde88f4fde5987d25efbb7168", width: 468, height: 60 } // 468x60
};
// 4) Create container if it doesn't exist
function ensureContainer() {
let container = document.getElementById("ad-container");
if (!container) {
container = document.createElement("div");
container.id = "ad-container";
container.style.display = "none";
document.body.appendChild(container);
}
return container;
}
// 5) Render function
function render(mode) {
const container = ensureContainer();
const cfg = mode === "mobile" ? AD.mobile : AD.desktop;
// Set global atOptions for ad network
window.atOptions = {
key: cfg.key,
format: "iframe",
height: cfg.height,
width: cfg.width,
params: {}
};
// Clear previous ad/script then inject
container.innerHTML = "";
container.style.display = "block";
const s = document.createElement("script");
s.src = `//selfportraitproved.com/${cfg.key}/invoke.js`;
s.async = true;
container.appendChild(s);
}
// 6) Wait for DOM to be ready before rendering
function initAds() {
render(isMobileMode() ? "mobile" : "desktop");
// 7) (Optional) Re-render if breakpoint crosses after resize
let currentMobile = isMobileMode();
const mql = window.matchMedia("(max-width: 767px)");
if (mql.addEventListener) {
mql.addEventListener("change", (e) => {
const nowMobile = e.matches;
if (nowMobile !== currentMobile) {
currentMobile = nowMobile;
render(currentMobile ? "mobile" : "desktop");
}
});
} else if (mql.addListener) { // older browsers
mql.addListener((e) => {
const nowMobile = e.matches;
if (nowMobile !== currentMobile) {
currentMobile = nowMobile;
render(currentMobile ? "mobile" : "desktop");
}
});
}
}
// 8) Execute when DOM is ready
if (document.readyState === "loading") {
document.addEventListener("DOMContentLoaded", initAds);
} else {
initAds();
}
})();
It’s not that often that you fall in love with an artist the very first time you hear their music. For me, it happened only a couple of times in the past few years, one of them being the first time I heard James Bay’s ‘Hold back the River’ on the radio last December.
The first gig of the 24 year old British singer-songwriter in Amsterdam in May of this year sold out in only nine minutes, but fans who missed out on that intimate show didn’t have to wait long – last Friday, James returned to the Netherlands to perform at the Heineken Music Hall.
Before James took the stage, the fans were warmed up by support act Samm Henshaw, who really set the mood and made some female concert attendees very happy by covering One Direction’s ‘Best Song Ever’ and the Backstreet Boys’ ‘I Want it That Way’.
The fact that James has only released one album meant that he was going to have to play every single track on there if he were to play a full length show. And while for most artists, that would’ve been a problem – most albums include one or more tracks that just aren’t supposed to be played in a live setting – James Bay gets away with it easily.
👉 For more insights, check out this resource.
Chaos and the Calm is one of those albums that you need to hear in its entirety. Each track tells a different part of the story and if you leave one of the tracks out, it’s like you’re reading a book with one chapter missing.
James also treated the crowd to a cover of Alicia Keys’ ‘If I ain’t got you’, pimped with an extremely impressive ten minute instrumental interlude filled with heartfelt guitar solos. Because if James’ lyrics aren’t enough to impress you, his guitar playing definitely is.
👉 Discover more in this in-depth guide.
The Chaos and the Calm Tour will hit the U.S. next month before turning to Australia and New Zealand early next year. Tickets can be bought here.