{"id":23,"date":"2026-06-30T04:55:10","date_gmt":"2026-06-30T04:55:10","guid":{"rendered":"https:\/\/podwires.com\/trailermixtape\/register\/"},"modified":"2026-06-30T04:55:10","modified_gmt":"2026-06-30T04:55:10","slug":"register","status":"publish","type":"page","link":"https:\/\/podwires.com\/trailermixtape\/register\/","title":{"rendered":"Create Account"},"content":{"rendered":"    <div class=\"tm-member-box\">\n        <h2>Create your contributor account<\/h2>\n        <p>Submit and manage your trailers and episodes. Verifying your email and adding a photo helps us keep the feed trustworthy.<\/p>\n        <form id=\"tm-register-form\" class=\"tm-form\" novalidate>\n            <div class=\"tm-form-row\">\n                <label for=\"tm_reg_name\">Your Name <span aria-hidden=\"true\">*<\/span><\/label>\n                <input type=\"text\" id=\"tm_reg_name\" name=\"name\" required maxlength=\"120\" placeholder=\"Jane Doe\">\n            <\/div>\n            <div class=\"tm-form-row\">\n                <label for=\"tm_reg_email\">Email <span aria-hidden=\"true\">*<\/span><\/label>\n                <input type=\"email\" id=\"tm_reg_email\" name=\"email\" required placeholder=\"you@example.com\">\n                <small>We'll send a verification link before you can submit.<\/small>\n            <\/div>\n            <div class=\"tm-form-row\">\n                <label for=\"tm_reg_pass\">Password <span aria-hidden=\"true\">*<\/span><\/label>\n                <input type=\"password\" id=\"tm_reg_pass\" name=\"password\" required minlength=\"8\" placeholder=\"At least 8 characters\">\n            <\/div>\n            <div class=\"tm-form-row\">\n                <label for=\"tm_reg_photo\">Profile Photo <span aria-hidden=\"true\">*<\/span><\/label>\n                <input type=\"file\" id=\"tm_reg_photo\" name=\"photo\" accept=\"image\/png,image\/jpeg,image\/webp,.png,.jpg,.jpeg,.webp\" class=\"tm-file-input\" required>\n                <small>A real photo or logo shown next to your reviews and submissions.<\/small>\n            <\/div>\n            <div class=\"tm-form-row\">\n                <label for=\"tm_reg_social\">Social Link <span class=\"tm-optional\">(optional)<\/span><\/label>\n                <input type=\"url\" id=\"tm_reg_social\" name=\"social\" placeholder=\"https:\/\/twitter.com\/yourhandle\">\n                <small>Optional, but recommended \u2014 a public profile (X, Instagram, LinkedIn, your show site) helps listeners and our editors confirm you really represent the show. It builds credibility and speeds up approval.<\/small>\n            <\/div>\n            <div class=\"tm-guard-field\" aria-hidden=\"true\"><label for=\"tm_website\">Website<\/label><input type=\"text\" id=\"tm_website\" name=\"tm_website\" tabindex=\"-1\" autocomplete=\"off\"><\/div><div class=\"cf-turnstile\" data-sitekey=\"0x4AAAAAAEG1WoE_LFwv1faL\" data-theme=\"auto\"><\/div>            <div class=\"tm-form-row\">\n                <button type=\"submit\" class=\"tm-btn tm-btn-primary\">Create account<\/button>\n            <\/div>\n            <div id=\"tm-register-status\" aria-live=\"polite\"><\/div>\n        <\/form>\n        <p class=\"tm-member-alt\">Already have an account? <a href=\"https:\/\/podwires.com\/trailermixtape\/login\/\">Sign in<\/a><\/p>\n    <\/div>\n    <script>\n    (function(){\n        const form = document.getElementById('tm-register-form');\n        const status = document.getElementById('tm-register-status');\n        async function tmFreshNonce(){\n            try {\n                const r = await fetch('https:\/\/podwires.com\/trailermixtape\/wp-json\/tm\/v1\/nonce', { credentials:'same-origin', cache:'no-store' });\n                if (r.ok) { const j = await r.json(); if (j && j.nonce) return j.nonce; }\n            } catch(e){}\n            return '5fda2d6583';\n        }\n            \/\/ Stamp when the form was actually opened. Fetched now rather than\n        \/\/ printed into the page, because this page is served from cache \u2014 a\n        \/\/ baked-in stamp would claim every visitor arrived days ago.\n        let tmFormToken = '';\n        (async () => {\n            try {\n                const r = await fetch('https:\/\/podwires.com\/trailermixtape\/wp-json\/tm\/v1\/nonce', { credentials:'same-origin', cache:'no-store' });\n                if (r.ok) { const j = await r.json(); tmFormToken = j.form_token || ''; }\n            } catch(e){}\n        })();\n        \/\/ Turnstile hands out a SINGLE-USE token. Any failed submit spends it,\n        \/\/ so it must be reset before the next try or every retry is rejected \u2014\n        \/\/ which looks to the visitor like the form is simply broken.\n        const tsBox = form.querySelector('.cf-turnstile');\n        const tsToken = () => (form.querySelector('[name=\"cf-turnstile-response\"]') || {}).value || '';\n        const tsReset = () => { if (tsBox && window.turnstile) { try { window.turnstile.reset(tsBox); } catch(e){} } };\n        const failed = msg => {\n            status.innerHTML = '<div class=\"tm-notice tm-notice-error\">'+msg+'<\/div>';\n            const b = form.querySelector('button[type=\"submit\"]');\n            b.disabled = false; b.textContent = 'Create account';\n            tsReset();\n        };\n        form.addEventListener('submit', async e => {\n            e.preventDefault();\n            const btn = form.querySelector('button[type=\"submit\"]');\n            \/\/ Don't burn an attempt while the challenge is still running.\n            if (tsBox && !tsToken()) {\n                failed('Just finishing the security check \u2014 give it a second and press Create account again.');\n                return;\n            }\n            btn.disabled = true; btn.textContent = 'Creating\u2026'; status.textContent = '';\n            try {\n                const body = new FormData(form);\n                body.append('tm_form_token', tmFormToken);\n                const res = await fetch('https:\/\/podwires.com\/trailermixtape\/wp-json\/tm\/v1\/register', {\n                    method:'POST', headers:{'X-WP-Nonce': await tmFreshNonce()}, body\n                });\n                const j = await res.json();\n                if (res.ok) { form.reset(); tsReset(); status.innerHTML = '<div class=\"tm-notice tm-notice-success\">\u2713 Account created! Check <strong>'+(j.email||'your email')+'<\/strong> for a verification link to activate your account.<\/div>'; }\n                else { failed(j.message||'Could not create account.'); }\n            } catch(err){ failed('Network error. Please try again.'); }\n        });\n    })();\n    <\/script>\n    \n","protected":false},"excerpt":{"rendered":"","protected":false},"author":0,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"page-trailermixtape.php","meta":{"_monsterinsights_skip_tracking":false,"footnotes":""},"class_list":["post-23","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/podwires.com\/trailermixtape\/wp-json\/wp\/v2\/pages\/23","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/podwires.com\/trailermixtape\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/podwires.com\/trailermixtape\/wp-json\/wp\/v2\/types\/page"}],"replies":[{"embeddable":true,"href":"https:\/\/podwires.com\/trailermixtape\/wp-json\/wp\/v2\/comments?post=23"}],"version-history":[{"count":0,"href":"https:\/\/podwires.com\/trailermixtape\/wp-json\/wp\/v2\/pages\/23\/revisions"}],"wp:attachment":[{"href":"https:\/\/podwires.com\/trailermixtape\/wp-json\/wp\/v2\/media?parent=23"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}