be braver Ltd

Get help now

Get help today from remote

Get Service

Fix, change or move things for you

Get Hosted

DSVGO/GDPR compliant, fast hosting

★★★★★
Rated Excellent on
Trustpilot

Get Hosted

Get Service

How may we serve you today? Let us know what you need, from changes to advice or moving things around - we are happy to help.

Get help now

How may we help you today? Please use this form to ask for assistance with any of our hosted services or if you require urgent suport with something else.

// Form submission handler document.querySelectorAll('form[data-formspree]').forEach(form => { form.addEventListener('submit', function(e) { e.preventDefault(); const formspreeUrl = this.querySelector('input[name="_formspree"]').value; const nextUrl = this.querySelector('input[name="_next"]').value; if (!this.checkValidity()) { this.reportValidity(); return; } const formData = new FormData(this); // Special handling for hosted form to list selected services for thank-you page if (this.id === 'hostedForm') { const selectedServices = Array.from(this.querySelectorAll('.checkbox-group input[type="checkbox"]:checked')) .map(cb => cb.value); // Collect selected plans (only if a service was checked) const selectedPlans =; this.querySelectorAll('.plan-options input[type="hidden"]').forEach(input => { if (input.value) { // Extracts the service name from the hidden plan value selectedPlans.push(input.value.split(':')[0].trim()); } }); // Combine and format for the thank-you page URL parameter const allServices = (selectedServices.length > 0 ? selectedServices.join(', ') : 'none') + (selectedPlans.length > 0 ? ' (Plans: ' + selectedPlans.join(', ') + ')' : ''); // Pass the services string as a URL parameter to be read by the submitted page const finalNextUrl = nextUrl + '?selected_services_for_thanks=' + encodeURIComponent(allServices); // Submit data to Formspree fetch(formspreeUrl, { method: 'POST', body: formData, headers: { 'Accept': 'application/json' } }) .then(response => { if (response.ok) { window.location.href = finalNextUrl; } else { return response.json().then(data => { if (data.errors) { alert(data.errors.map(error => error.message).join(", ")); } else { alert("Oops! There was a problem submitting your form."); } }); } }) .catch(error => { alert("Oops! There was a problem submitting your form. Please try again."); }); } else { // Submit data for other forms fetch(formspreeUrl, { method: 'POST', body: formData, headers: { 'Accept': 'application/json' } }) .then(response => { if (response.ok) { window.location.href = nextUrl; } else { // Error handling... } }) .catch(error => { alert("Oops! There was a problem submitting your form. Please try again."); }); } }); }); function showForm(formType) { closeForm(); document.getElementById(formType + 'Form').classList.add('active'); document.getElementById('ctaGrid').style.display = 'none'; const trustpilot = document.querySelector('.trustpilot-banner'); if (trustpilot) trustpilot.style.display = 'none'; } function closeForm() { document.querySelectorAll('.form-container').forEach(form => form.classList.remove('active')); document.getElementById('ctaGrid').style.display = 'grid'; const trustpilot = document.querySelector('.trustpilot-banner'); if (trustpilot) trustpilot.style.display = 'block'; } function updateHostedServices() { const checkboxes = document.querySelectorAll('#hostedForm input[name="services[]"]'); const planMap = {'Email': 'emailPlans', 'Web': 'webPlans', 'Nextcloud': 'nextcloudPlans', 'Mautic': 'mauticPlans'}; checkboxes.forEach(checkbox => { const planSection = document.getElementById(planMap[checkbox.value]); if (planSection) { planSection.style.display = checkbox.checked ? 'block' : 'none'; } }); } function selectPlan(element, fieldId, value) { const inputField = document.getElementById(fieldId); const parent = element.parentElement; parent.querySelectorAll('.option-btn').forEach(btn => btn.classList.remove('active')); // Select the clicked button and set the hidden input value if (element.classList.contains('active')) { element.classList.remove('active'); inputField.value = ''; } else { element.classList.add('active'); inputField.value = value; } } // Set active class for radio groups (Urgency and Domain Action) document.querySelectorAll('.radio-group input[type="radio"]').forEach(radio => { radio.addEventListener('change', function() { this.closest('.radio-group').querySelectorAll('.radio-label').forEach(label => { label.classList.remove('active'); }); if (this.checked) { this.closest('.radio-label').classList.add('active'); } }); });