Banner creatives must be images: server-side image check (extension or image/* HEAD), form hint, chatbot note

Campaign #134 (NAS ad 2806) had the member's join-page link in the image field and served a broken
banner 141 times on the network; #102 did the same with an imgbb page link. imageCheck() accepts
/uploads/ and instantadpay.com/banners files and image extensions outright, otherwise HEADs the URL
(one redirect) and requires image/*. Wired into member and house campaign creation for banners and
login-ad creatives. Form placeholder + hint point at Promo tools > Banners > Copy image URL.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
martbost
2026-09-16 13:56:30 -05:00
parent d6bc79c9d6
commit 5641582709
4 changed files with 31 additions and 2 deletions
+3 -2
View File
@@ -518,7 +518,8 @@
<p class="small muted" style="margin-top:-6px">Banner and text targets are shown full screen in the
ad viewer, so those URLs must allow framing — we check them the moment you submit. Login and
solo links open in a fresh tab, so any working page is fine.</p>
<p id="cImageRow"><input id="cImage" placeholder="Image URL (banner/login ads)" autocomplete="off" style="width:100%"></p>
<p id="cImageRow" style="margin-bottom:4px"><input id="cImage" placeholder="Direct image link, ends in .png or .jpg (banner/login ads)" autocomplete="off" style="width:100%"></p>
<p id="cImageHint" class="muted small" style="margin:0 0 10px">A link to a web page will not work here. Get one from Promo tools &gt; Banners &gt; Copy image URL, or upload your own.</p>
<p id="cSizeRow" hidden><select id="cSize" style="width:100%"></select></p>
<p id="cTitleRow" hidden><input id="cTitle" placeholder="Headline (max 60)" style="width:100%"></p>
<p id="cBodyRow" hidden><input id="cBody" placeholder="Ad text (max 140)" style="width:100%"></p>
@@ -1032,7 +1033,7 @@
<script src="/assets/common.js?v=20260916a"></script>
<script src="/assets/wallet.js?v=20260911a"></script>
<script src="/assets/promo.js?v=20260911a"></script>
<script src="/assets/my.js?v=20260916e"></script>
<script src="/assets/my.js?v=20260916f"></script>
<script src="/assets/chat.js?v=20260907l"></script>
</body>
</html>