Form Communities

SA Clubhouse

Connection Center

Peer Academy

Apoyo En Pares

Clubhouse TX

Divine Women

Houston PS

Flourish

Where Data Meets Clarity

Streamline and Simplify Your Data Management with Flourish

Flourish streamlines program management by helping you track activities, manage member profiles, and generate reports, making it easy to support your community’s growth and success.

Trusted by Clubhouse Everywhere ​

Why Choose Us

Built for Nonprofits, Driven by Efficiency

Flourish is an intuitive data management system tailored for non-profits, designed to streamline operations and boost efficiency.

Tailored for Non-Profits

Flourish is built with the unique needs of nonprofits in mind, ensuring that your data management processes align with your mission.

Automated Reporting

Save time and reduce errors with automated reporting tools that ensure your reports are accurate, consistent, and ready on time.

Cloud-Based Convenience

Access your data from anywhere, anytime with Flourish’s cloud-based platform, eliminating the need for specialized hardware or extensive IT support.

Affordability

Flourish offers a cost-effective solution without breaking your budget.

Testimonial

What the community is saying about Flourish

FAQ

Frequently Ask Questions

Not to access the system, no.  As long as you have computers that can access the internet, you have everything you need to use Flourish.

There are no additional costs per user or record. Unlimited user accounts and records are included with our pricing.

You need computers that can access the internet.  Flourish is hosted in the cloud, just like Google, Gmail, or many other services.  You don’t need anything else (special computers, servers, etc) at your Clubhouse to access the system.

Check out our help center or call us!  That’s why ask for a monthly contribution–so we can have the resources available to help Clubhouses.  We know that you probably don’t have “tech people” at your Clubhouse.  We have a team available to help.  There’s no extra cost for coaching.  We’re here to help you be successful.

document.addEventListener('DOMContentLoaded', function () { var overlay = document.createElement('div'); overlay.id = 'gf-popup-overlay'; overlay.style.cssText = 'display:none;position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.6);z-index:99999;justify-content:center;align-items:center;'; var box = document.createElement('div'); box.style.cssText = 'background:#fff;border-radius:8px;max-width:460px;width:90%;overflow:hidden;box-shadow:0 10px 40px rgba(0,0,0,0.3);font-family:Arial,sans-serif;'; var header = document.createElement('div'); header.style.cssText = 'background:#1a4a3a;color:#fff;padding:20px 24px;font-size:18px;font-weight:bold;'; header.textContent = '⚠️ Please Complete Required Fields'; var body = document.createElement('div'); body.style.cssText = 'padding:24px;color:#333;'; var intro = document.createElement('p'); intro.style.cssText = 'margin:0 0 16px;font-size:15px;line-height:1.6;'; intro.textContent = 'Your request has not been submitted yet. Please fill out the following required fields:'; var missingBox = document.createElement('div'); missingBox.style.cssText = 'background:#fff8e1;border-left:4px solid #4db89e;padding:12px 16px;border-radius:0 4px 4px 0;'; var list = document.createElement('ul'); list.style.cssText = 'margin:0;padding-left:18px;font-size:14px;line-height:1.7;'; missingBox.appendChild(list); body.appendChild(intro); body.appendChild(missingBox); var footer = document.createElement('div'); footer.style.cssText = 'padding:0 24px 24px;'; var closeBtn = document.createElement('button'); closeBtn.type = 'button'; closeBtn.textContent = 'Go Back and Complete Form'; closeBtn.style.cssText = 'background:#4db89e;color:#fff;border:none;padding:12px 24px;font-size:15px;border-radius:4px;cursor:pointer;width:100%;font-weight:bold;'; footer.appendChild(closeBtn); box.appendChild(header); box.appendChild(body); box.appendChild(footer); overlay.appendChild(box); document.body.appendChild(overlay); function closePopup() { overlay.style.display = 'none'; } closeBtn.addEventListener('click', closePopup); overlay.addEventListener('click', function (e) { if (e.target === overlay) closePopup(); }); function getMissing(form) { var missing = []; form.querySelectorAll('.gfield_contains_required').forEach(function (field) { if (field.offsetParent === null) return; // skip fields hidden by conditional logic var labelEl = field.querySelector('.gfield_label, legend'); var label = 'Required field'; if (labelEl) { var clone = labelEl.cloneNode(true); clone.querySelectorAll('.gfield_required').forEach(function (r) { r.remove(); }); label = clone.textContent.replace('*', '').trim(); } var empty = false; var radios = field.querySelectorAll('input[type=radio]'); var checks = field.querySelectorAll('input[type=checkbox]'); var inputs = field.querySelectorAll('input:not([type=hidden]):not([type=radio]):not([type=checkbox]):not([type=file]), textarea, select'); inputs.forEach(function (inp) { if (inp.offsetParent !== null && (!inp.value || !inp.value.trim())) empty = true; }); if (radios.length && !field.querySelector('input[type=radio]:checked')) empty = true; if (checks.length && !field.querySelector('input[type=checkbox]:checked')) empty = true; if (empty) missing.push(label); }); return missing; } function check(e, form) { if (!form || !form.closest('.gform_wrapper')) return; var missing = getMissing(form); if (missing.length) { e.preventDefault(); e.stopPropagation(); e.stopImmediatePropagation(); list.innerHTML = ''; missing.forEach(function (m) { var li = document.createElement('li'); li.textContent = m; list.appendChild(li); }); overlay.style.display = 'flex'; } } // Capture phase (the "true") runs BEFORE Gravity Forms' own button handler document.addEventListener('click', function (e) { var btn = e.target.closest('.gform_wrapper input[type=submit], .gform_wrapper button[type=submit], .gform_wrapper .gform_button'); if (btn) check(e, btn.closest('form')); }, true); // Also catch pressing Enter inside a field document.addEventListener('submit', function (e) { check(e, e.target); }, true); });