Appearance
Local Group module overview
Terms
- Local Group: a group of Members that live in the same city or close to each other. E.g. "IxDF Barcelona"
- Meetup: an event organized by a Local Group.
- Discussion: a discussion started in the context of a Local Group.
- Local Leader: an IxDF Member who has permission to manage one or many Local Group(s).
Overview
The purpose of the Local Group module is all about promoting member interaction, both online and offline. Although any member can be part of any group, the idea is that members living in the same city (or close) be part of the same group so that they can attend offline events, a.k.a. Meetups, promoted by the local group.
The application keeps track of which city each group belongs to so that members can search for groups close to them.
Discussions
Local Groups can have any number of Discussions. There are two types of Local Group Discussions:
- "topic discussions": these are explicitly created by some Local Group member to discuss some subject
- "meeting discussions": these are automatically created by the application whenever a Local Group meeting is created; such discussions are intended to talk about the meeting, like coordinating for the event
See the Discussion Module for details about Discussions.
Meetups
Local IxDF UX Meetups
A meeting can be anything from a cozy meeting in a café to a large-scale meeting with speakers. Meetups are the heart of the Local Group module, since they're the primary source of activity in a Local Group.
Meetups can be created by any member of the Local Group in the Local Group page. They're required to have:
- A title introducing the Meetup intention
- A size - online, cozy (2-20 people), large (20+ people), presentation (2-40+ people)
- Online Meetups are required to have meetup link (e.g. Zoom link)
- Cozy, Large, and Presentation Meetups are required to have a location
- A description explaining the Meetup details
- A date and a start and end time
When a Meetup is created a series of events are triggered:
- A new Discussion is created for the Meetup
- The creator of the Meetup is automatically subscribed to the Meetup and to the Meetup's Discussion
- Local Leaders, Country Managers and the group members are notified by email about the new Meetup
- Reset the stall Local Group level to 0 (stall Local Group levels will be explained further bellow)
Members can then confirm their attendance to the Meetup in the Meetup page, regardless if they belong to the Local Group or not, while Guests can subscribe to the event through their online calendar. Members attending the Meetup will be automatically subscribed to the Discussion on the Meetup page.
TIP
IxDF admins can also manage Meetups through the Nova Admin panel
Ranks
Each Local Group has a "rank", which tries to measure "how active" the group is. The rank is used to create a "group ladder" at a world, continent, and country level. The rank is calculated based on a number of individual "factors" and stored as part of the Local Group so that the ladder can be easily retrieved using a database query. Both the rank and the individual factors are pre-calculated and stored as a historical series so that their evolution over time can be retrieved.
The Local Group model stores the following rank-related columns:
rank- The overall calculated rank value and is calculated based on the following factors:- Amount of Meetups held
- Discussions threads
- Local Group Members
rank_members- The number of members in the local group (used for ranking in the Local Group page)rank_meetups- The number of meetups held by the local group (used for ranking)rank_discussions- The number of discussions created by the local group (used for ranking)rank_referrals- The number of referrals made by local group members including the soft-deleted ones (used for ranking)
Ranks are calculated through the LocalGroupRanks command, every day at 4AM UTC.
Members can be promoted or demoted from the local leader role by other local leaders or the country or continent manager.
Referral Competition Ranking
In addition to the regular ranking system, Local Groups can participate in time-limited referral competitions. These competitions create a special leaderboard based solely on the number of successful referrals generated by a Local Group's members during a specific period.
How It Works
During an active competition period:
- Only referrals that are awarded within the competition date range count toward the competition ranking
- All members of a Local Group (including soft-deleted members) contribute to their group's referral count
- Local Groups can view their competition standings at global, continental, and country levels
Configuration
The referral competition is configured in config/ixdf_local_group.php:
php
'referral_competition' => [
'active' => true,
'referral_award_start_date' => '2025-08-25',
'referral_award_end_date' => '2025-09-30',
],Technical Implementation
The competition ranking system uses:
App\Modules\LocalGroup\ValueObjects\ReferralCompetitionPeriodvalue object to encapsulate the competition configurationLocalGroupRankBy::Competitionenum value to distinguish competition rankings from regular rankings- Dynamic calculation of
competition_referrals_countfiltered by the competition date range
Viewing Competition Rankings
Competition rankings can be viewed through:
- The Local Group page's ranking section when switching to "Competition Rank" in the IxDF Local Groups Leaderboard sort by dropdown.
The competition ranking feature is designed to gamify and incentivize referral activity during key growth periods, creating friendly competition between Local Groups while maintaining the integrity of the regular ranking system.
URLs
The main entry point for the Local Group module, from the users' perspective, is the IxDF site Community section (/community). The main entry point for Local Groups admin (members support, country and continent managers, etc.) is the Local Group Control Panel (/local-group/continents).
Roles
Local Group members have different roles that provide different levels of access to the group's features. The roles are:
- Guest - a member that is not a member of the group
- Local Group Member - a member that is subscribed to the group
- Local Leader - a member that has the role to keep the group active, promoting meetings, discussions, motivating members and so on
- Country Manager - a member that has the role to monitor the "health" of the Local Groups on their countries and help them
- Continent manager - a member that has the role to monitor the "health" of the Local Groups on their continents and help them
Each group has one or more "Local Leaders", which is a member that has the responsibility to keep the group active, promoting meetings, discussions, motivating members and so on.
Each country and continent has a "manager", which has the responsibility to monitor the "health" of the Local Groups on their continents/countries and help them, by overseeing Local Leaders responsibilities and promoting/demoting Local Leaders.
In cases where the Local Groups lack a Local Leader, the Country or Continent Managers can take on the responsibilities of Local Leaders.
Permissions
Below is a table with the permissions for each role in the Local Group module:
| Actions | Guest | Local Group Member | Local Leader | Country Manager | Continent Manager | IxDF Admin |
|---|---|---|---|---|---|---|
| Create Discussion | 🔴 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 |
| View Discussion | 🔴 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 |
| Add Discussion message | 🔴 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 |
| Create Meetups | 🔴 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 |
| View/Attend Meetups | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 | 🟢 |
| Edit Meetups | 🔴 | Partially* | 🟢 | 🟢 | 🟢 | 🟢 |
| Delete Meetups | 🔴 | Partially* | 🟢 | 🟢 | 🟢 | 🟢 |
| Create Local Group | 🔴 | 🔴 | 🔴 | 🟢 | 🟢 | 🟢 |
| Edit Local Group | 🔴 | 🔴 | 🔴 | 🟢 | 🟢 | 🟢 |
| Close Local Group | 🔴 | 🔴 | 🟢 | 🟢 | 🟢 | 🟢 |
| Mass Email Members | 🔴 | 🔴 | 🟢 | 🟢 | 🟢 | 🟢 |
| Promote/Demote to Local Leader | 🔴 | 🔴 | 🔴 | 🟢 | 🟢 | 🟢 |
| Promote/Demote to Country Manager | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 | 🟢 |
| Promote/Demote to Continent Manager | 🔴 | 🔴 | 🔴 | 🔴 | 🔴 | 🟢 |
* Members can only edit/delete Meetups they created
TIP
IxDF admins can promote/demote Continent Managers through the Admin panel
Stalled Local Groups
A Local Group's health is proportional to the amount of Meetups it has. Because of this, the application has a mechanism to notify Local Leaders when a Local Group is stalled. There are several levels of a Local Group being stalled:
- Level 0: “Excellent”. The Local Group is less than 60 days old, has held a Meetup in the last 60 days, or has a future Meetup scheduled.
- Level 1: “Slow-down”. Shows signs of slow-down. The Local Group held a Meetup between 60 and 90 days ago and has no future Meetup scheduled.
- Level 2: “Needs urgent help”. Needs urgent help. The Local Group held a Meetup between 90 and 120 days ago and has no future Meetup scheduled.
- Level 3: “Collapsed!”. Needs emergency action! The Local Group has not held a Meetup in the last 120 days and has no future Meetup scheduled.
The Local Leaders are notified by email each time a Local Group reaches a new stall level. (See LocalGroupStalled command) This mechanism is based on the stall_emails_sent_level attribute of the LocalGroup model. After notifying the Local Leaders about a certain stall level, they won't be notified again until the stall level is changed.
Local Groups with no Local Leaders
In situations where the Local Group lacks a Local Leader, IxDF makes an effort to find one for the group. Once per quarter, all members of Local Groups without a leader and without a Meetup in the past 30 days are contacted via email. They are invited to become a Local Leader.
See the InviteMembersToBecomeLocalLeader scheduled console command for more details.
Invitation to join a Local Group
After 7 days after sign up, if a Member on a paid membership has not joined any Local Groups or has joined only one, the system will attempt to find a nearby Local Group and invite the Member to join it.
See the InviteMembersToJoinLocalGroup scheduled console command for more details.
Class Diagram
Class diagram for the module:
While Discussion, Continent and Country are not directly related to the Local Group module, they're included in the diagram since they are vital to understanding the permission hierarchy in the module.