The Basic Meeting List Toolbox

BMLT, Virtual Meetings, and the Pandemic Part 2

by Alan B and Jonathan B

In March we published a post BMLT, Virtual Meetings, and the Pandemic. We’ve now been living with the pandemic for months — at least we have a program! We have also gained lots more experience with how to use BMLT to accommodate virtual and hybrid meetings. This post gives updated recommendations for how to enter data for them, and describes how they will then appear in a Crouton list. Finally, we discuss how we arrived at these recommendations. (Folks who just want to know how to handle these meetings in BMLT can safely skip this last section.)

These are certainly not the only way to store and present virtual and hybrid meetings with BMLT, but they have proven to be workable. We welcome discussion and suggestions for alternatives and improvements.

How to list a location-centric pure virtual meeting

  1. On the Location tab in the Meeting Editor:
    1. Leave the location and address blank. (The meeting has never had a physical location, so they’re not needed.)
    2. Enter the City/Town and State/Province. (This is important because the meeting is location-centric — it makes it searchable by the BMLT software.)
    3. Enter the join link in the “Virtual Meeting Link” field if the meeting is using video-capable virtual meetings software such as Zoom and BlueJeans. For Zoom, for example, this link will be a URL that looks like this:
    4. Enter the Meeting ID, password, or similar information, if present, in the “Virtual Meeting Additional Information” field. Use this format, for example, for a Zoom meeting:
      Zoom Meeting ID: 456 044 8613 Password: 1953
    5. Leave the “Phone Meeting Dial-in Number” blank for meetings for which you entered information for the previous two fields. Otherwise, for phone-based meeting software, enter the phone number to join, including the password if any. (More on this in the Rationale section.)
  2. On the Format tab, check “Virtual Meeting”.

This screenshot shows the meeting being entered on the Location tab for a virtual Zoom meeting:

Screenshot of meeting editor. These fields are filled in with sample data: City/Town, State/Province, Virtual Meeting Link, Virtual Meeting Additional Information

How to list a location-centric virtual meeting that is replacing an in-person meeting

  1. On the Location tab:
    1. Retain the location and address of the in-person meeting.
    2. Retain the City/Town and State/Province.
    3. Enter the “Virtual Meeting Link”, “Virtual Meeting Additional Information”, and “Phone Meeting Dial-in Number” fields as recommended for a pure virtual meeting.
  2. On the Format tab, check “VM (Virtual Meeting)” and “TC (Temporarily Closed Facility)”.

Alternatively, if the in-person meeting isn’t likely to resume anytime soon and the group doesn’t feel any particular attachment to their old meeting place, these meetings can be treated like a pure virtual meeting. In that case delete the location and address (but not the City/Town and State/Province).

How to list a hybrid meeting

  1. On the Location tab:
    1. Enter the location and address as for a regular in-person meeting.
    2. Enter the “Virtual Meeting Link”, “Virtual Meeting Additional Information”, and “Phone Meeting Dial-in Number” fields as recommended for a new virtual meeting.
  2. On the Format tab, check “HY (Hybrid Meeting)”.

How to handle a temporarily closed in-person meeting with no virtual replacement

  • If you expect that the meeting may reopen some day, unpublish it, so that it doesn’t appear in the normal meeting lists for now.
  • If the meeting is just gone, delete it.

How to handle a meeting place that reopens

  • If the group is dropping the virtual meeting:
    1. Delete the contents of the “Virtual Meeting Link”, “Virtual Meeting Additional Information”, and “Phone Meeting Dial-in Number” fields.
    2. Uncheck “VM” and “TC” in the formats.
  • If the group is converting the meeting to a hybrid meeting:
    1. Uncheck “VM” and “TC” in the formats, and check “HY”.
  • If the group is resuming the in-person meetings and continuing the virtual meeting as a separate meeting:
    1. Treat this as a group with two meetings (for example, a group that meets Mondays and Wednesdays — although in this case the two meetings are probably at the same time).
    2. Find the existing meeting and open the editor on it.
    3. In the Basic tab, pick “Save This Meeting As A Copy”.
    4. Make one copy the in-person meeting, and the other the virtual meeting.

Displaying virtual and hybrid meetings in Crouton

Pure virtual meetings, virtual meetings replacing in-person meetings, and hybrid meetings all display in a reasonable way using the default template in Crouton (although, of course, you can rearrange things if you want). The screenshot below shows a virtual meeting that replaces an in-person meeting:

Screenshot of Crouton display for a meeting called Bottomfeeders, including the location and address, zoom meeting ID and password, and Zoom URL

The “Virtual Meeting Link” is displayed in the third column, as a clickable link. The “Virtual Meeting Additional Information” is displayed in the second column, under the (temporarily closed) facility name and address.

We also recommend including directions for joining meetings by landline, if this is possible, above the Crouton listing. As an example, this screenshot shows the directions as we’ve placed them for Seattle Area:

Screenshot of the heading information above a Crouton table, with the sentence 'Click the link to join an online meeting. For meetings using zoom, you can also join from any phone by calling 253-215-8782 or 669-900-6833, then entering the Meeting ID.'


In this last section, we discuss how we arrived at these recommendations and alternatives that we considered. (This section is definitely tl;dr for anyone but dedicated BMLT geeks.)

Fields for storing virtual meeting information

“Virtual Meeting Link” and “Phone Meeting Dial-in Number” were presented in the March blog post. “Virtual Meeting Additional Information” was then added subsequently — multiple root server admins found that there was a demand for this information, and had been storing it in miscellaneous other fields (“train lines”, etc). It seemed better to store it in a consistent fashion, in an appropriately named field. These fields have been added to the NAWS Export, as have the VM (Virtual Meeting), TC (Temporarily Closed), and HY (Hybrid) formats. This ensures that NAWS can have the most up-to-date information about these new location-centric virtual and hybrid meetings. (Don’t forget to send your exports to NAWS!)

Here is our rationale for these three fields and their uses. We’ll discuss it in terms of Zoom, since that seems to be the most widely used platform for virtual NA meetings; but similar considerations apply to other platforms as well. Having the virtual meeting link makes it easy for addicts to just click the link and have it start Zoom with the correct Meeting ID and password already filled in. However, we’ve seen that others want to start Zoom separately and manually enter the Meeting ID and password. Addicts calling in via a landline will need the Meeting ID as well (see below).

For phone-based platforms, the Phone Meeting Dial-in Number is of course a key piece of information. For Zoom, it would be possible to paste the “one tap mobile” number that Zoom provides in the Phone Meeting Dial-in Number, and some regions do this. In this post, however, we suggest leaving that field blank, on grounds that non-techie types would have no idea what a “one tap mobile” number is, and would look at the long string of digits (for example +12532158782,,173351323#) as just weird techno-babble … sure doesn’t look like a phone number. If it is possible for addicts to connect to the meeting just using a landline, without a smartphone, we want them to know this.

An argument on the other side, for including the one tap mobile number, is that it can in fact be useful for techie types to use when they are in locations without sufficient bandwidth. (Normally, however, they would connect using the virtual meeting link.) However, we would give priority to the non-techie types who would find the one tap mobile number confusing. (After all, techie types can just enter all the digits if necessary.)

Making meetings accessible to as many addicts as possible

We want to make meetings accessible to as many addicts as possible, and that means, among other things, supporting addicts calling into meetings from a landline. Hence the recommendation to include information on how to call in to meetings from a landline, if possible.

For Zoom, this implies providing the local access number, and an alternate in case the first number is busy. These folks will also need the Meeting ID, which they can find in the “Virtual Meeting Additional Information” field. This could be listed in the “Phone Meeting Dial-in Number” field (just by itself, not the one tap mobile number), but since it’s the same for every Zoom meeting in the area, we suggest listing it separately, before the meeting table. We also wanted to provide an alternate number, and Crouton expects “Phone Meeting Dial-in Number” to hold a single phone number.

When to use the “Temporarily Closed” format

The recommendations above call for using the “Temporarily Closed” format for virtual meetings that are replacing an in-person meeting. It seems fine to do this even if the in-person meeting remains closed for months due to the pandemic, if the group feels an attachment to its old meeting place and wants to keep that link to its history visible.

Displaying meeting information in Crouton

For displaying this information in Crouton, generally everything in the 3rd column is a clickable link, and so the “Virtual Meeting Link” and “Phone Meeting Dial-in Number” fit there. However, “Virtual Meeting Additional Information” is not clickable, so we put it in the 2nd column in the default template. As a consequence, though, it’s a little distant from the “Virtual Meeting Link”, so for Zoom we suggest using a format that includes the word “Zoom” so that people know what it’s about.

The other BMLT satellites have not necessarily kept up with the changes to the root server made to accommodate virtual and hybrid meetings, so we recommend using Crouton for WordPress sites showing meetings that include virtual or hybrid ones, or croutonjs for any website.

Virtual meeting information via yap

Yap (the helpline support system) now includes support for virtual meetings, and the “Virtual Meeting Additional Information” field may be added soon as an option (issue #465). This is another reason to format the information as suggested above. Reading a URL over the phone, particularly if it encodes a password, is not very useful, but having yap read something like “Zoom Meeting ID: 456 044 8613 Password: 1953” does seem quite usable. Since this may be read by itself, without reading the URL, including the word “Zoom” at the beginning is important, since otherwise people may not know what it’s about.

Advanced croutonjs example

Someone in Connecticut made a crouton display meetings specifically that are meeting in person separately from those that are meeting virtually.  The example shows the capability of croutonjs.  The WordPress plugin crouton actually does nothing more than render the croutonjs javascript object when a page loads where the shortcode has been embedded.

Check out the example on Codepen here:

Putting BMLT data on a Wix Site.

Putting BMLT data on a Wix site is fairly simple. Sign into your Wix account and go into the editor view.

Follow this article for adding HTML content to your Wix site:

Copy and paste into the HTML content area the following sample HTML:

Publish and view. You now have BMLT data on your Wix site. You will likely want to customize further because this is sample page. You can view a full list of parameters to do this here:

BMLT, Virtual Meetings, and the Pandemic

The lives and routines of people, organizations, and systems have been disrupted by the COVID-19 pandemic. Narcotics Anonymous and other twelve-step fellowships are no exception. We have seen the closure of most face-to-face meetings in the United States and other affected countries. Thousands of virtual meetings have popped up, seemingly overnight, to provide addicts seeking recovery with a place to connect, share, and carry the message. The sudden influx of virtual meetings in Narcotics Anonymous has created a need for increased support in the BMLT.


Broadly, we have identified two different categories of virtual meetings: those that are location-agnostic, and those that are location-centric. We believe each of these has slightly different BMLT needs.

Location-Agnostic Virtual Meetings

Location-agnostic virtual meetings are not new – such meetings have existed for many years. These meetings expect and welcome attendance from addicts all over the world. When searching for a location-agnostic virtual meeting, one is not concerned with the geographic location of the meeting. The search criteria is usually some combination of the meeting time, preferred language, and meeting format.

As the first face-to-face meetings closed in response to the COVID-19 pandemic, these long-standing virtual meetings were on the front lines. They saw a dramatic and immediate increase in attendance. We personally witnessed more than 400 addicts join a virtual meeting that typically had 10-20 attendees. To satisfy the increased demand, more location-agnostic virtual meetings popped up overnight.

Over the following weeks, hundreds (perhaps thousands?) of location-centric virtual meetings began to get their legs.

Location-Centric Virtual Meetings

Location-centric virtual meetings are a relatively new occurrence. While there are a few long-standing location-centric virtual meetings, they have become widespread as a result of the COVID-19 pandemic.

Many of the new location-centric virtual meetings were started by face-to-face home groups who wished to continue meeting in the absence of a physical meeting place. Attendees of location-centric meetings often consist of home group members and others local to its physical meeting place.

Many of these groups have a long tradition of serving a specific geographic region, and may wish to continue focusing on carrying the message to that region. That is not to say they are unwelcoming to remote attendees who happen to find the meeting, but that they wish to preserve the culture and familiarity of their meeting. We’ve seen other groups make a conscious decision to invite addicts around the world to their virtual meeting.

It is likely that many of these new virtual meetings will close when physical meeting places become available again. It is also conceivable that some will choose to keep their virtual option, forming hybrid virtual/face-to-face groups. Others may remain virtual indefinitely.

BMLT, Listing Virtual Meetings

While the BMLT has become the standard for storing, finding, and displaying face-to-face meeting data, the community has quickly discovered gaps in functionality to effectively manage both location-agnostic and location-centric virtual meetings. We have observed members filling these gaps by sharing meeting information through Facebook groups, flyers, and spreadsheets. These work well in the short-term, but quickly become a source of out-dated information.

We are beginning to address these problems by adding increased support for virtual meetings in new releases of the Root Server (2.15.1) and Crouton (3.9.0). We believe this is the first of many iterations of the BMLT for supporting virtual meetings.

Storing Virtual Meeting Data (Root Server)

Location-agnostic and location-centric virtual meetings have unique storage requirements, and therefore have unique recommendations.


Location-agnostic and location-centric data should live in separate Root Servers. The reason is purely technical – meeting searches for each are conducted using different criteria. When searching for a virtual meeting, a user may search for all English-speaking meetings, regardless of location, to find one at a convenient time. When searching for meetings near “Atlanta, GA”, it doesn’t make sense to interleave location-agnostic virtual meetings from Europe in the results.


The root server maintained by is widely recognized as the source of truth for location-agnostic virtual meetings. If you have a location-agnostic virtual meeting, you should get listed by Similarly, if you have a location-centric virtual meeting that wishes to invite attendees from all over the world, you should also get listed by


Because is already serving as the source of truth for location-agnostic virtual meetings, the changes in Root Server 2.15.1 and Crouton 3.9.0 are designed primarily to serve the needs of location-centric virtual meetings, allowing users to search for virtual meetings near them.

New Fields – Virtual Meeting Link, Phone Meeting Dial-in Number

We have added two new fields to the Meeting Editor: “Virtual Meeting Link” and “Phone Meeting Dial-in Number”. The “Virtual Meeting Link” field is designed to hold the join link for video-capable virtual meetings software such as Zoom and BlueJeans. The “Phone Meeting Dial-in Number” field is designed to hold a phone number that can be used to join the meeting. These fields have been added to the NAWS Export, ensuring NAWS has the most up-to-date information about these new location-centric virtual meetings.

New Formats – VM (Virtual Meeting), TC (Temporarily Closed)

We have also added two additional formats: VM (Virtual Meeting) and TC (Temporarily Closed). The VM format is used to denote that a meeting offers a virtual option. The TC format is used to denote that this meeting’s physical meeting place is temporarily closed.


For meetings that were previously face-to-face but are now providing a virtual option, it is our recommendation that BMLT administrators fill in the new “Virtual Meeting Link” and “Phone Meeting Dial-in Number” fields, and then assign the VM and TC formats. When the face-to-face meeting reopens, the TC format should be removed. If the meeting decides to remove its virtual option upon reopening, the VM format should also be removed.

For meetings that are temporarily closed and do not have a virtual option, it is fine to either unpublish the meeting or assign the TC format. Unpublishing will remove the meeting from meeting lists entirely, while the TC format keeps the meeting in the list, but clearly marks it as being Temporarily Closed.

For meetings that have never had a physical meeting place, but are still location-centric, assign the VM format. Additionally, it is important to provide some geographic information for such meetings in the Root Server. For example, if the virtual meeting primarily provides services to members in Seattle, just enter “Seattle, WA” for the city and state, leaving all of its other location fields empty.

Displaying Virtual Meeting Data (Crouton)

Crouton 3.9.0’s introduces a new default Meeting Data Template and Metadata Template, making use of the new Root Server fields and the VM (Virtual Meeting) and TC (Temporarily Closed) formats.


To use Crouton to display location-agnostic meetings from on your website, please see this blog post:


Crouton’s default Meeting Data Template and Metadata Template now supports displaying location-centric virtual meeting information out of the box.

When a meeting is assigned the TC format, Crouton will clearly mark the meeting with the text “Facility is temporarily closed”. When a meeting is assigned the VM format, Crouton will clearly mark the meeting with the text “Meets Virtually”, and display the Virtual Meeting Link and/or Phone Meeting Dial-in Number. A meeting may have both the TC and VM format assigned, indicating both that the facility is closed but that a virtual option is available.

Meeting with the TC format, but no VM format

Meeting with both the TC and VM format

Existing Crouton installations may need to reset templates

If you have an existing Crouton installation that has customized the Meeting Data template or Metadata Template, you may need to reset to the default templates to take advantage of the new functionality. This can be done by clicking the “RESET TO DEFAULT” buttons in the Crouton plugin settings in the WordPress admin.


We recommend upgrading to Crouton 3.9.0, and resetting to the default templates to display location-centric meeting information on your websites. Note that this functionality depends on your root server administrator having upgraded to Root Server 2.15.1, and on meetings having leveraged the new Root Server fields and formats.

Excluding a custom format from a Yap query.

It’s possible to exclude a result from Yap results by using a custom format. For example say you made a Temporary Closure format that had an ID of 2069. You could set in your config.php a custom query, which would exclude those in the response.

static $custom_query="&sort_results_by_distance=1&long_val={LONGITUDE}&lat_val={LATITUDE}&geo_width={SETTING_MEETING_SEARCH_RADIUS}&weekdays={DAY}&formats=-2069";

Displaying both virtual meetings and face-to-face meetings on the same page in Crouton.

This approach allows you to use Crouton to show both virtual and face-to-face meetings on the same page using Crouton.

It requires using the “Bus Lines” and “Train Lines” fields (which are rarely used extra fields, but any could be used theoretically). This uses the Meeting Data Template and Metadata Template features in the Crouton configuration in administration portal as seen below.

Meeting Data Template

<div class="meeting-name">{{this.meeting_name}}</div>
{{#if this.train_lines}}
<div class="location-text">{{this.train_lines}}</div>
<div class="location-text">{{this.location_text}}</div>
<div class="meeting-address">{{this.formatted_address}}</div>
<div class="location-information">{{this.formatted_location_info}}</div>

Metadata Template

{{#if this.bus_lines}}
<div>{{formatLink this.bus_lines}}</div>
{{else}}<a id="map-button" class="btn btn-primary btn-xs" href=";query={{this.latitude}},{{this.longitude}}&amp;q={{this.latitude}},{{this.longitude}}" target="_blank" rel="noopener noreferrer"> {{this.map_word}}</a>
<div class="geo hide">{{this.latitude}},{{this.longitude}}</div>

The end result is the below with both face-to-face and a temporarily closed meeting that is now meeting virtually (in this case by phone).

Here is what it looks like in the root server.

Displaying meetings on your site using Crouton.

Use this shortcode with crouton to display virtual meetings from the root server.

[bmlt_tabs root_server="" service_body_parent="4" include_city_button="0" has_zip_codes="0" has_cities="0" has_locations="0" has_languages="1" has_areas="0" base_tz="UTC" filter_tabs="1" auto_tz_adjust="1" default_filter_dropdown="languages=english-speaking" metadata_template="&amp;lt;div class='bmlt-comments'&amp;gt;{{formatLink this.formatted_comments}}&amp;lt;/div&amp;gt;&amp;lt;img style='display: inline-block; text-align: center;' src=';amp;cht=qr&amp;amp;chl={{ this.formatted_comments }}&amp;amp;choe=UTF-8' /&amp;gt;"]

Merging a Regional Yap Server into a Zonal Yap Server

Since Yap 3.0.0 (released in March 2019), it’s been possible to use a single Yap server with multiple Twilio accounts.  What this means is that a service body can handle the overhead of server management while another service body retains the management of phone numbers and billing.

Yap 3 also introduced the concept of configuration precedence (  This creates the ability to manifest all kinds of powerful capability without requiring access to the config.php on the server (critical for this situation where server management is handled by someone else).  It also has the ability to set a value at regional level while the hierarchy of the BMLT automatically cascades down to the member areas.

Recently I had to migrate my regional yap server to the zonal server.  Below is the process I followed, feel free to send an email to if you’d like more details.

Consider whether you may want to take a backup and overwrite your existing Yap database, or make a copy with a new install and config to do side by side testing.  You may also want to consider setting in the database config ahead of time or afterward.  You may also want to transfer any other settings in your top level config.php to the Config settings in the admin portal.  Keep in mind that service bodies will use the hierarchy, so if you set this as a regional level all the service bodies connected will inherit them.

1) Delete any configuration from the target yap server, use the server body IDs that would be the IDs that would be the query below:

DELETE FROM config where service_body_id in (x [,x]);

2) Begin an export from your source yap server, select only data and exclude the flags table.  See the screenshot below.  (Use a self-contained file)

Pasted Graphic.png

3) After the file has been exported run the below on your system.  In the below example, “export.sql” is the file exported from Step 2 above.

cat export.sql | sed -e “s/([0-9]*,/(NULL,/g” > export-mod.sql

4) Import export-mod.sql into the target yap server.  “export-mod.sql” is the output from the command run locally in Step 3 above.

5) Your phone numbers must have explicit service body overrides in order to pull configuration values from the database (you can use either override_service_body_id or override_service_body_config_id).  One changes your service body for call routing and the other selects configuration, respectively.

Customize the CSS of Crouton

Here is a sample of the CSS that was used to customize the Volunteer Region crouton.  Utilizing the recent feature released with crouton 2.1.0, you can fully customize the colors.  I thought this might be useful to assist in making it easy to reuse.  (Note: this may become incompatible very quickly) 

You can also submit your theme design to crouton to be included:

Read more

Study on Statewide Meeting Schedules

Service bodies tend to not necessarily follow boundaries that make sense to someone who does not understand it’s organizational makeup.  By using the Tomato server, it’s entirely possible to create a schedule that follows geopolitical boundaries without much effort.  For this study, I decided to use the 50 states of the United States.  This study could have easily been other such designations, perhaps provinces in Canada.  I’m also going to make use of the recent feature released in bread 1.6.x (see the blog post on “Reusable Templates w/Bread 1.6.x“)

Read more