CINXE.COM
Groups.io: Powerful Email Groups & Collaboration Platform
<!DOCTYPE html> <html lang="en-US"> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="pinterest" content="nopin" /> <meta name="pinterest" content="nohover" /> <meta name="3778517eb4810dfb5d143ed8f1b359b3b5a82923" content="0f56257c3db4a222e91b11bc6871c4df2e263b28" /> <link rel="apple-touch-icon" sizes="57x57" href="/img/org.1/favicons/apple-icon-57x57.png"> <link rel="apple-touch-icon" sizes="60x60" href="/img/org.1/favicons/apple-icon-60x60.png"> <link rel="apple-touch-icon" sizes="72x72" href="/img/org.1/favicons/apple-icon-72x72.png"> <link rel="apple-touch-icon" sizes="76x76" href="/img/org.1/favicons/apple-icon-76x76.png"> <link rel="apple-touch-icon" sizes="114x114" href="/img/org.1/favicons/apple-icon-114x114.png"> <link rel="apple-touch-icon" sizes="120x120" href="/img/org.1/favicons/apple-icon-120x120.png"> <link rel="apple-touch-icon" sizes="144x144" href="/img/org.1/favicons/apple-icon-144x144.png"> <link rel="apple-touch-icon" sizes="152x152" href="/img/org.1/favicons/apple-icon-152x152.png"> <link rel="apple-touch-icon" sizes="180x180" href="/img/org.1/favicons/apple-icon-180x180.png"> <link rel="icon" type="image/png" sizes="192x192" href="/img/org.1/favicons/android-icon-192x192.png"> <link rel="icon" type="image/png" sizes="32x32" href="/img/org.1/favicons/favicon-32x32.png"> <link rel="icon" type="image/png" sizes="96x96" href="/img/org.1/favicons/favicon-96x96.png"> <link rel="icon" type="image/png" sizes="16x16" href="/img/org.1/favicons/favicon-16x16.png"> <link rel="manifest" href="/img/org.1/favicons/manifest.json"> <meta name="msapplication-TileColor" content="#ffffff"> <meta name="msapplication-TileImage" content="/ms-icon-144x144.png"> <script> /* stubs */ const hapticsImpactHeavy = async () => { }; const hapticsImpactMedium = async () => { }; const hapticsImpactLight = async () => { }; const hapticsVibrate = async () => { }; const hapticsSelectionStart = async () => { }; const hapticsSelectionChanged = async () => { }; const hapticsSelectionEnd = async () => { }; </script> <script> function setPullToRefresh() {} function gotoURL(inurl) { window.location.href = inurl; return; } function contentLoaded(isHTMX, f, caller = "") { console.log("contentLoaded: " + isHTMX + " " + caller); if (isHTMX == true) { document.body.addEventListener('htmx:afterSettle', f, {once: true}); } else { if (document.readyState !== 'loading') { console.log('document is already ready, just execute code here'); f(); } else { console.log('document was not ready, place code here'); document.addEventListener('DOMContentLoaded', f, {once: true}); } } } function HideAppSidebarOnKeyboard() { console.log("In HideAppSidebarOnKeyboard"); } // stub function logError(data, url, linenumber) { console.log(data) return; } var pushSubToken; var ignoreErrors = false; var lastError = ""; window.onerror = function(errorMessage, errorUrl, errorLine, errorColumn, errorObj) { let column; let stack; if (console && console.log) { console.log("msg:", errorMessage); console.log("url:", errorUrl); console.log("line:", errorLine); if (errorColumn !== undefined && errorObj != null) { console.log("column:", errorColumn); column = errorColumn; } if (errorObj !== undefined && errorObj != null) { console.log("stack:", errorObj.stack); stack = errorObj.stack; } console.log("client_id:", "web.web08.16217183.1732742439310027156"); console.log("last_error:", lastError); console.log("stack:", stack); } if (errorUrl == "" || errorUrl === null) { errorUrl = window.location.href; } if (errorMessage.includes("SecurityError:") == true) { ignoreErrors = true; } if (ignoreErrors == true) { console.log("cookies, disabled, ignoring"); lastError = errorMessage; return; } jQuery.ajax({ type: 'POST', url: '/jsclienterror', data: { msg: errorMessage, url: errorUrl, line: errorLine, column: column, stack: stack, last_error: lastError, client_id: "web.web08.16217183.1732742439310027156" }, success: function() { if (console && console.log) { console.log('JS error report successful.'); } lastError = errorMessage; }, error: function() { if (console && console.error) { console.error('JS error report submission failed!'); } lastError = errorMessage; } }); return true; } </script> <script src="/tinymce-5.10.9/tinymce.min.js"></script> <script src="/js/browser-image-compression-2.0.2.min.js"></script> <link href="/css/application-6630163a3be19b6cee26ce35342d0d92.css" rel="stylesheet" id="groupsio-css"> <script src="/js/application-9b2c27b802a13063cf8a712fe566f004.js" id="groupsio-js"></script> <script src="/js/run_prettify.js"></script> <title> Groups.io: Powerful Email Groups & Collaboration Platform </title> <style type="text/css"> table { border-collapse: collapse; border-style: hidden; } table td, table th { border: 1px solid #eee; } .table>tbody>tr>td { padding: 40px; } hr { margin-top: 40px; margin-bottom: 40px; } </style> <script> htmx.config.scrollBehavior = "instant"; htmx.config.historyCacheSize = 0; htmx.config.defaultSettleDelay = 0; console.log("FULL PAGE LOAD"); </script> </head> <body id="body" class="" hx-headers='{"Accept-Version": "ab77eb5706920326b8462b4e8eb5f3645a02f625"}' hx-ext="preload" hx-boost="false"> <div class="navbar navbar-head navbar-fixed-top" style="margin-bottom:0px;" role="navigation" id="headerbar"> <div class="container-fluid" style="padding-left:0px;"> <a href="https://groups.io" class="navbar-left" hx-boost="false" hx-disinherit="*"> <img src="https://groups.io/img/org.1/mainlogo.png?cachebust" height="50" alt="Groups.io"> </a> <ul class="nav navbar-nav hidden-xs"> <li> <a href="https://groups.io/search"> Find or Create a Group </a> </li> </ul> <ul class="nav navbar-nav pull-right visible-xs" style="margin-top:5px;margin-bottom:5px;"> <li> <a href="#" data-toggle="modal" data-target="#mobileAccount"> <i class="fa-fw fa fa-bars fa-lg"></i> </a> </li> </ul> <ul class="nav navbar-nav pull-right hidden-xs"> <li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <i class="fa-fw fa-regular fa-globe"></i> EN <b class="caret"></b> </a> <ul class="dropdown-menu"> <li> <a href="https://groups.io/unsetlang"> EN </a> </li> <li> <a href="https://groups.io/setlang/de"> DE </a> </li> <li> <a href="https://groups.io/setlang/es"> ES </a> </li> <li> <a href="https://groups.io/setlang/fr"> FR </a> </li> <li> <a href="https://groups.io/setlang/it"> IT </a> </li> <li> <a href="https://groups.io/setlang/pt"> PT </a> </li> <li> <a href="https://groups.io/setlang/uk"> UK </a> </li> </ul> </li> <li> <a href="https://groups.io/helpcenter" target="_blank"> Help </a> </li> <li> <a href="https://groups.io/login" hx-boost="false" hx-disinherit="*"> <i class="fa fa-sign-in-alt"></i> Log In </a> </li> <li> <a href="https://groups.io/register"> <i class="fa fa-user"></i> Sign Up </a> </li> </ul> </div> </div> <div class="modal fade" id="mobileAccount" role="dialog"> <div class="modal-dialog" style="margin-top:50px;"> <div class="modal-content"> <div class="modal-body"> <ul class="list-group noborderlist"> <li class="noborderitem list-group-item"> <a href="https://groups.io/login" hx-boost="false" hx-disinherit="*"> <i class="fa fa-sign-in-alt"></i> Log In </a> </li> <li class="noborderitem list-group-item"> <a href="https://groups.io/register"> <i class="fa fa-user"></i> Sign Up </a> </li> <li class="noborderitem list-group-item"> <a href="https://groups.io/helpcenter" target="_blank"> <i class="fa-fw fa fa-question-circle"></i> Help </a> </li> <li class="dropdown noborderitem list-group-item"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <i class="fa-fw fa-regular fa-globe"></i> EN <b class="caret"></b> </a> <ul class="dropdown-menu"> <li> <a href="https://groups.io/unsetlang"> EN </a> </li> <li> <a href="https://groups.io/setlang/de"> DE </a> </li> <li> <a href="https://groups.io/setlang/es"> ES </a> </li> <li> <a href="https://groups.io/setlang/fr"> FR </a> </li> <li> <a href="https://groups.io/setlang/it"> IT </a> </li> <li> <a href="https://groups.io/setlang/pt"> PT </a> </li> <li> <a href="https://groups.io/setlang/uk"> UK </a> </li> </ul> </li> </ul> </div> </div> </div> </div> <script> var groupnavigatorData = [ ]; </script> <!-- Modal Dialog for Autocomplete --> <div class="modal fade" id="groupnavigatorModal" tabindex="-1" role="dialog" aria-labelledby="modalLabel" aria-hidden="true"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-body"> <input type="text" class="form-control" id="groupnavigatorInput" placeholder="Go to group..." style="margin-bottom:10px"> <div id="groupnavigatorContainer" class="autocompleteResults" style="max-height:250px; overflow-y: auto;"></div> <div class="text-center" style="margin-top:10px; font-size:12px;"><i class="fa-sharp fa-arrow-up-arrow-down"></i> to navigate <i class="fa-sharp fa-arrow-turn-down-left"></i> to use <strong>esc</strong> to dismiss</div> </div> </div> </div> </div> <script> // Keep track of the currently selected index var selectedIndex = -1; // Function to highlight the matched substring function highlightSubstring(str, substring) { var index = str.toLowerCase().indexOf(substring.toLowerCase()); if (index !== -1) { var before = str.substring(0, index); var middle = str.substring(index, index + substring.length); var after = str.substring(index + substring.length); return before + '<span class="autocomplete-highlight">' + middle + '</span>' + after; } return str; } // Function to highlight the selected item and ensure it is visible in the scrollable list function highlightSelectedItem(modalName) { var listContainer = document.getElementById(modalName + 'Container'); var items = document.getElementsByClassName(modalName + '-list-item'); Array.from(items).forEach(function(item, idx) { item.className = idx === selectedIndex ? modalName + '-list-item autocomplete-list-item btn-primary no-hover' : modalName + '-list-item autocomplete-list-item no-hover'; // Apply btn-primary class to the selected item }); if (items.length > 0 && selectedIndex >= 0) { var selectedItem = items[selectedIndex]; var containerTop = listContainer.scrollTop; var containerBottom = containerTop + listContainer.clientHeight; var itemTop = selectedItem.offsetTop; var itemBottom = itemTop + selectedItem.offsetHeight; const fudge = 59; if (selectedIndex > 0 && itemTop > containerBottom) { // If there are items below the selected item and the selected item is not fully visible, scroll down listContainer.scrollTop = itemTop - listContainer.clientHeight + items[selectedIndex - 1].offsetHeight; } else if (selectedIndex < items.length - 1 && (itemTop - fudge) < containerTop) { // If there are items above the selected item and the selected item is not fully visible, scroll up listContainer.scrollTop = itemTop - fudge - items[selectedIndex + 1].offsetHeight; } } } // function to populate the list based on the input function populateList(modalName, data) { var input = document.getElementById(modalName+'Input').value; var listContainer = document.getElementById(modalName+'Container'); listContainer.innerHTML = ''; data.forEach(function(item) { if (item.name.toLowerCase().includes(input.toLowerCase())) { var div = document.createElement('div'); div.innerHTML = highlightSubstring(item.name, input); div.className = modalName+'-list-item autocomplete-list-item no-hover'; // Apply no-hover class div.addEventListener('click', function() { // Navigate to the specified URL when a list item is clicked window.location.href = item.url; }); div.addEventListener('mousemove', function() { // Remove no-hover class from all items when the mouse is moved over any item console.log("mouse move"); var items = document.getElementsByClassName(modalName+'-list-item'); Array.from(items).forEach(function(item) { item.classList.remove('no-hover'); }); }); listContainer.appendChild(div); } }); highlightSelectedItem(modalName); } function InitAutocomplete(modalName, data) { // Focus the input field when the modal is shown and populate the list $('#' + modalName + 'Modal').on('shown.bs.modal', function () { $('#' + modalName + 'Input').focus().val(''); populateList(modalName, data); selectedIndex = 0; highlightSelectedItem(modalName); }); // Event listener for input field typing document.getElementById(modalName + 'Input').addEventListener('input', function() { populateList(modalName, data); selectedIndex = 0; }); // Event listener for arrow keys and enter key document.getElementById(modalName + 'Input').addEventListener('keydown', function(event) { var items = document.getElementsByClassName(modalName + '-list-item'); if (event.key === 'ArrowDown') { event.preventDefault(); if (selectedIndex < items.length - 1) selectedIndex++; highlightSelectedItem(modalName); } else if (event.key === 'ArrowUp') { event.preventDefault(); if (selectedIndex > 0) selectedIndex--; highlightSelectedItem(modalName); } else if (event.key === 'Enter' && selectedIndex >= 0 && selectedIndex < items.length) { event.preventDefault(); items[selectedIndex].click(); } }); } function showAutocompleteModal(modalName) { $('#' + modalName + 'Modal').modal('show'); selectedIndex = -1; } </script> <div id="content" class="container-fluid"> <script> InitAutocomplete("groupnavigator", groupnavigatorData); document.body.addEventListener("showReloadPageDialog", function(evt) { console.log("Forced reload"); location.reload(); }); function ShowBackButton(label) { var logoElement = document.getElementById("logo"); if (logoElement) { html = ` <span style="color:#fff;margin-top:14px;margin-left:12px;float:left !important; height:36px;"> <a onclick="goBack()" style="color:#fff"> <i class="fa-fw fa-solid fa-chevron-left fa-lg"></i> </a></span>`; if (label != "") { html += `<div style="position:absolute;left:50%;transform:translateX(-50%);text-align:center;color:#ecf0f1;margin-top:5px;"><h4>` + label + `</h4></div>`; } logoElement.innerHTML = html; } } function HideBackButton() { var logoElement = document.getElementById("logo"); if (logoElement) { logoElement.innerHTML = ` <a href="https://groups.io" class="navbar-left"> <img src="https://groups.io/img/org.1/mainlogo.png?cachebust" height="50" alt="Groups.io"> </a>`; } } function goBack() { history.back(); } // submitEvent acts like .submit(), except it is compatible with the app, by using events instead. function submitEvent(ele) { console.log("in submitEvent"); if (ele.startsWith('#')) { ele = ele.slice(1); } document.getElementById(ele).submit(); return; /* const theEvent = new CustomEvent('submit', { bubbles: true, cancelable: true }); if (typeof ele === 'string' || ele instanceof String) { if (ele.startsWith("#") == true) { ele = ele.slice(1); } if (document.getElementById(ele).dispatchEvent(theEvent) == true) { // if not cancelled, do normal submit console.log("calling submit"); document.getElementById(ele).submit(); } return; } // assume ele is the element if (ele.dispatchEvent(theEvent) == true) { // if not cancelled, do normal submit console.log("calling submit"); ele.submit(); } */ } // gioDestroy is a convenience function for destroy callbacks function gioDestroy(eventCB) { let internalGioDestroy = function(evt) { // do not activate on infinite scroll events if (evt.detail.target !== undefined && evt.detail.target.id != "maincontent-refresh") { console.log("Ignoring infinite scroll event"); return; } console.log("Calling destroy callback"); eventCB(evt); } document.body.addEventListener("htmx:beforeSwap", internalGioDestroy, {once: true}); document.body.addEventListener("htmx:historyCacheMiss", internalGioDestroy, {once: true}); } var drawerCloseFunc = function(evt) { console.log("in drawerCloseFunc"); // Find all elements with the class 'drawer' var drawers = document.querySelectorAll('.drawer'); // Iterate over each element and call closeDrawer() on each drawers.forEach(function(obj) { drawerObj.closeDrawer(obj); }); $('.modal').modal('hide'); } document.body.addEventListener('htmx:beforeSwap', drawerCloseFunc); document.body.addEventListener('htmx:historyCacheMiss', drawerCloseFunc); var keydownFunc = function(event) { var tagName = event.target.tagName.toLowerCase(); if (tagName === 'input' || tagName === 'textarea' || event.target.isContentEditable) { if (event.key === 'Escape') { event.target.blur(); } return; } // check if the viewimages viewer is up let element = document.getElementById('overlay'); if (element && element.classList.contains('visible')) { return; } console.log("HERE: " + event.key + " " + event.ctrlKey + " " + event.shiftKey + " " + event.metaKey); if (event.ctrlKey && event.shiftKey && (event.key === '?' || event.key === '/')) { event.preventDefault(); // Prevent the default action // Show the modal dialog for keyboard shortcuts $('#shortcutModal').modal('show'); return; } $('#shortcutModal').modal('hide'); if (event.key.toLowerCase() === 'g') { // For Windows and Linux if (event.ctrlKey) { event.preventDefault(); showAutocompleteModal("groupnavigator"); return; } } // Check if the pressed key is '/' if ((event.key === 'f' || event.key === 'F') && event.shiftKey) { if (navigator.platform.toUpperCase().indexOf('MAC') >= 0) { if (event.metaKey) { event.preventDefault(); // Prevent the default action // Focus on the search box let box = document.getElementById('searchbox') if (box != null) { document.getElementById('searchbox').focus(); } } } else { // For Windows and Linux if (event.ctrlKey) { event.preventDefault(); // Prevent the default action // Focus on the search box let box = document.getElementById('searchbox') if (box != null) { document.getElementById('searchbox').focus(); } } } } } document.addEventListener('keydown', keydownFunc); var removeDrawerCloseFunc = function(evt) { document.body.removeEventListener('htmx:beforeSwap', drawerCloseFunc); document.body.removeEventListener('htmx:historyCacheMiss', drawerCloseFunc); document.removeEventListener('keydown', keydownFunc); } document.body.addEventListener("htmx:historyCacheMiss", removeDrawerCloseFunc, {once: true}); </script> <!-- Modal Dialog for Keyboard Shortcuts --> <div class="modal fade" id="shortcutModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <h4 class="modal-title" id="myModalLabel">Keyboard Shortcuts</h4> </div> <div class="modal-body"> <div class="row"> <div class="col-xs-3 text-right"><strong>ctrl</strong> + <strong>shift</strong> + <strong>?</strong> :</div> <div class="col-xs-9" style="margin-left: -23px;">Show all keyboard shortcuts</div> </div> <div class="row"> <div class="col-xs-3 text-right"><strong>ctrl</strong> + <strong>g</strong> :</div> <div class="col-xs-9" style="margin-left: -23px;">Navigate to a group</div> </div> <div class="row"> <div class="col-xs-3 text-right"><strong class="ctrlmeta">ctrl</strong> + <strong>shift</strong> + <strong>f</strong> :</div> <div class="col-xs-9" style="margin-left: -23px;">Find</div> </div> <div class="row"> <div class="col-xs-3 text-right"><strong class="ctrlmeta">ctrl</strong> + <strong>/</strong> :</div> <div class="col-xs-9" style="margin-left: -23px;">Quick actions</div> </div> </div> <div class="text-center" style="margin-top:10px; margin-bottom:10px; font-size:12px;"><strong>esc</strong> to dismiss</div> </div> </div> </div> <div class="row"> <div class="col-sm-offset-2 col-sm-8 col-xs-12"> <p></p> <br> <center> <h1 class="hidden-xs" style="font-size:42px"> <div id="typed-strings"> <p>The Best Group Service<br>for Cat Lovers</p> <p>The Best Group Service<br>for Amateur Radio</p> <p>The Best Group Service<br>for Creative Professionals</p> <p>The Best Group Service<br>for Alumni Groups</p> <p>The Best Group Service<br>for Advocacy Groups</p> <p>The Best Group Service<br>for Activism Groups</p> <p>The Best Group Service<br>for Non-Profits</p> <p>The Best Group Service<br>for Tech Support</p> <p>The Best Group Service<br>for PTAs</p> <p>The Best Group Service<br>for Neighborhoods</p> <p>The Best Group Service<br>for Dog Lovers</p> <p>The Best Group Service<br>for Parent Groups</p> <p>The Best Group Service<br>for Pet Lovers</p> <p>The Best Group Service<br>for Your Community</p> <p>The Best Group Service^100000</p> <p></p> </div> <div style="height:80px"> <span id="grouplist"></span> </div> </h1> <h1 class="hidden-sm hidden-md hidden-lg"> <p>The Best Email Group Service</p> </h1> <div class="fs-5" style="padding-top:20px; padding-bottom:20px;"> Boost your group communications with our inclusive platform. Your members get messages directly in their email, so they'll <strong>never miss a conversation</strong>. Enjoy <strong>photo sharing</strong>, <strong>file storage</strong>, <strong>calendar</strong>, <strong>wiki</strong>, <strong>chat</strong>, and <strong>database</strong> features. Mobile-friendly, privacy-respecting, and ad-free. </div> <a class="btn btn-success btn-lg" href="/static/pricing"> Start a Groups.io Group </a> </center> <p></p> <br> </div> </div> <div class="row"> <div class="col-sm-offset-2 col-sm-8 col-xs-12"> <table style="width:100%; table-layout: fixed;"> <tr> <td align="center"> <h4> <a href="/static/features"> Features </a> </h4> </td> <td align="center"> <h4> <a href="/static/pricing"> Pricing </a> </h4> </td> <td align="center"> <h4> <a href="/static/why"> Why Email Groups? </a> </h4> </td> </tr> </table> <center> <h2 style="padding-top:20px"> Why You'll Love Groups.io </h2> <h4 style="padding-bottom:20px"> <a href="/static/features">Powerful features</a> that make groups more useful. </h4> </center> <table class="table table-condensed hidden-xs"> <tr> <td width="50%"> <center> <i class="fa fa-cogs fa-4x"></i> </center> <center> <h4> Do More With Integrations </h4> </center> Easily integrate Zoom, Feeds, Slack, Github, Trello, Email and soon even more services into your premium group. </td> <td width="50%"> <center> <span class="fa-stack fa-2x"> <i class="fa fa-binoculars fa-stack-1x"></i> <i class="fa fa-ban fa-stack-2x" style="color:Tomato"></i> </span> </center> <center> <h4> No Ads, No Tracking </h4> </center> We don't run advertising and your data is never submitted to any ad tracking networks. </td> </tr> <tr> <td width="50%"> <center> <i class="fa fa-plus fa-4x"></i> </center> <center> <h4> Additional Features </h4> </center> Each premium group also has a calendar, chat, polls, a database section, a photos section, a files section, and a wiki, along with an unlimited number of subgroups on your own subdomain. </td> <td> <center> <i class="fa fa-comments fa-4x"></i> </center> <center> <h4> Only The Messages You Want </h4> </center> Mute topics and keywords, ensuring you only see the messages you're interested in. Take advantage of better email delivery options, including receiving the first message only in each thread or receiving replies only. </td> </tr> </table> <div class="hidden-sm hidden-md hidden-lg"> <center> <i class="fa fa-exchange-alt fa-4x"></i> </center> <center> <h4> Do More With Integrations </h4> </center> Easily integrate Feeds, Slack, Google Drive, Github, Trello, Email and soon even more services into your premium group. <center> <span class="fa-stack fa-2x"> <i class="fa fa-binoculars fa-stack-1x"></i> <i class="fa fa-ban fa-stack-2x" style="color:Tomato"></i> </span> </center> <center> <h4> No Ads, No Tracking </h4> </center> We are a fremium service. We don't run advertising and your data is never submitted to any ad tracking networks. <center> <i class="fa fa-plus fa-4x"></i> </center> <center> <h4> Additional Features </h4> </center> Each premium group also has a calendar, chat, polls, a database section, a photos section, a files section, and a wiki, along with an unlimited number of subgroups on your own subdomain. <center> <i class="fa fa-comments fa-4x"></i> </center> <center> <h4> Only The Messages You Want </h4> </center> Mute topics and keywords, ensuring you only see the messages you're interested in. Take advantage of better email delivery options, including receiving the first message only in each thread or receiving replies only. <p></p> <br> </div> <p></p> <center> <a class="btn btn-success btn-lg" href="/static/pricing"> Start a Groups.io Group </a> </center> <p></p> <br> <div class="panel panel-default"> <div class="panel-body"> <p></p> <br> <center> <h2> Drop Google and Facebook Groups and Use This Instead </h2> <p></p> <br> <p class="lead"> "Trying to find the best tool to get a bunch of people organized and sharing knowledge can be a pain. Google Groups can feel exceedingly complicated. Facebook cares little about your privacy." </p> <p></p> <a href="https://lifehacker.com/drop-google-and-facebook-groups-and-use-this-instead-1823994067" class="btn btn-info"> Read More At Lifehacker </a> </center> <p></p> <br> </div> </div> <div class="row"> <div class="col-sm-offset-1 col-sm-10 col-xs-12"> <p></p> <br> <center> <h2> Upgrade From Mailman or Lyris </h2> <h4> Powerful Features, Better Security </h4> <p></p> <br> <p class="lead"> Hosting your groups using Mailman or Lyris? We make it easy for you to move your group to Groups.io. Take advantage of our advanced features. Don't be stuck with an ancient listserv. </p> <p></p> </center> <p></p> <br> </div> </div> <div class="row"> <div class="col-sm-offset-1 col-sm-10 col-xs-12"> <p></p> <br> <center> <h4> We're passionate about groups, and we're here to make them even better. </h4> </center> <p></p> <br> </div> </div> <center style="padding-top:20px;padding-bottom:40px"> 漏 2024 Groups.io, Inc. All rights reserved. </center> </div> </div> <script> var typed = new Typed('#grouplist', { stringsElement: '#typed-strings', typeSpeed: 80, backSpeed: 60, backDelay: 1000, loop: true, smartBackspace: true, showCursor: false, }); </script> </div> <div id="scroll-top-outer"> <div id="scroll-top" class="scroll-top-wrapper hidden-xs"> <span class="scroll-top-inner"> <i class="fa fa-arrow-circle-up fa-fw fa-2x"></i> </span> </div> </div> <script> $(function() { $(document).on('scroll', function() { if ($(window).scrollTop() > 100) { $('.scroll-top-wrapper').addClass('show'); } else { $('.scroll-top-wrapper').removeClass('show'); } }); $('.scroll-top-wrapper').on('click', scrollToTop); }); function scrollToTop() { verticalOffset = typeof(verticalOffset) != 'undefined' ? verticalOffset : 0; element = $('body'); offset = element.offset(); offsetTop = offset.top; $('html, body').animate({ scrollTop: offsetTop }, 100, 'linear'); } if (navigator.platform.toUpperCase().indexOf('MAC') >= 0) { let elements = document.querySelectorAll('strong.ctrlmeta'); elements.forEach((element) => { // Check if the innerText is "ctrl" if (element.innerText === 'ctrl') { // Create a new "i" element let newElement = document.createElement('i'); newElement.classList.add('fa-solid', 'fa-command'); // Replace the old "strong" element with the new "i" element element.parentNode.replaceChild(newElement, element); } }); } </script> </body> </html>