Skip to content

Repository files navigation

MMM-ShulSchedule

MMM-ShulSchedule is a module for the MagicMirror² project. It displays the schedule for your local synagogue, including prayer times, events, and other important information.

It also allows for filtering the events collected, letting you only display what you care about.

Display modes

The module supports two display modes via the displayMode config option.

grouped (default)

A compact, day-sectioned view that collapses repeated services into one row per service per day, interleaves timed special events chronologically, lifts untimed specials to the top of each day, and rolls Omer days into the day header. Today's section gets an amber accent and the next upcoming minyan is highlighted in amber. Past times in today's row fade to ~30% opacity.

Grouped mode

rows (classic)

The original flat list, one row per event. Useful if you prefer the original layout or want to share the look with downstream forks.

Rows mode

Installation

  1. Navigate to your MagicMirror's modules folder:
    cd ~/MagicMirror/modules
  2. Clone the repository:
    git clone https://github.com/yourusername/MMM-ShulSchedule.git
  3. Navigate to the module's folder:
    cd MMM-ShulSchedule
  4. Install the dependencies:
    npm install

Configuration

To use this module, add it to the modules array in the config/config.js file of your MagicMirror² installation:

{
    module: 'MMM-ShulSchedule',
    header: 'Shul Schedule',
    position: 'bottom_left',
    config: {
        displayMode: 'grouped', // or 'rows' for the classic flat list
        frameWidth: 400,
        fetchInterval: 7200000, // 2 hours
        renderRefreshInterval: 300000, // 5 minutes
        calendars: [
            {
                symbol: 'calendar',
                url: 'https://www.someshul.org/ical2.php?12,daed,schedule,mitzvah,parsha,holiday'
            },
        ],
        excludedEvents: [
            'Daf Yomi',
            'Siddur',
            'Chavruta',
            'Ping Pong',
            'Ulpan',
            'Parshat HaShavua',
            'Parent Child Learning',
            'Tot',
            'Doctor',
        ],
        brightEvents: [
            'Shacharit',
            'Mincha',
            'Maariv',
            'Mincha/Maariv',
            'Musaf',
            'Selichot',
            'Kabbalat Shabbat',
        ],
        highlightedEvents: [
            'Candle Lighting',
            'Havdalah',
        ]
    }
}

Configuration Options

Option Description Type Default
displayMode 'grouped' for the compact day-sectioned view, 'rows' for the classic flat list. String 'grouped'
frameWidth Target width (px) of the grouped wrapper. Long rows stay inside this frame instead of expanding the module. Set to 0 to disable. Only applies in grouped mode. Number 400
maximumNumberOfDays How many days forward to display. Number 3
maxTitleLength Maximum title length before truncation in rows mode. Grouped mode uses CSS ellipsis for long labels. Number 25
fade Whether to fade out events as they get closer to the end time. Only applies in rows mode. Boolean false
fadePoint Point in the list (0–1) where the fade effect begins. Only applies in rows mode. Number 0.25
fetchInterval How often the schedule should be updated (in milliseconds). Number 14400000
renderRefreshInterval How often the DOM should re-render without fetching new calendar data, so time-sensitive styling such as past/next times stays current. Set to 0 to disable. Number 300000
animationSpeed DOM update animation speed (ms). Number 2000
calendars Array of calendar objects to fetch events from. Array []
excludedEvents Array of event filters to exclude certain events from being displayed. Each entry can be a plain string (substring match) or an object with filterBy and regex properties for advanced matching. Array []
excludedEvents (string entry) A substring to match against event titles. Events containing this string will be excluded. String
excludedEvents (object entry) .filterBy The string or pattern to match against event titles. String ''
excludedEvents (object entry) .regex Whether the filterBy string should be treated as a regular expression. Boolean false
brightEvents Array of event filters to render with MagicMirror's brighter text styling. Uses the same string/object matching shape as excludedEvents. Array Service names
highlightedEvents Array of event filters to render in purple. Uses the same string/object matching shape as excludedEvents. Array []
calendars.symbol The symbol to display next to events from this calendar. String 'calendar'
calendars.url The URL of the calendar to fetch events from. String ''

To retrieve the calendar URL, if your Shul uses ShulCloud:

  1. Log in to your ShulCloud account.
  2. Navigate to the calendar section.
  3. Look for an option to export or sync your calendar. This might be labeled as "Export," "ICS," "Subscribe," or something similar.
  4. Select the ICS format for export.
  5. Copy the URL.
  6. If you don't see an option to export directly, you might need to check ShulCloud's help documentation or contact their support for specific instructions.

Grouped mode behavior

When displayMode: 'grouped' is active, the module applies a few opinionated rules to compress the schedule:

  • Same-name service grouping. Multiple Shacharit/Mincha/Maariv times on the same day collapse into one row, with times joined by · and a shared am/pm suffix at the end of the row.
  • Bright events. Titles matching brightEvents render with MagicMirror's brighter text styling.
  • Day sections. Each day gets a small-caps header (Sunday · May 3) with a thin underline. Today's header is prefixed with Today · … and gets an amber left border.
  • Omer rolled into the header. The daily Omer count (e.g. 31st Day Omer) is appended to the day header rather than rendered as a separate row.
  • Untimed specials at the top. Date-only specials appear above the day's timed events, italicized and prefixed with .
  • Timed events interleaved chronologically. Shiurim and other timed events slot between service rows by start time without the untimed marker.
  • Highlighted events. Titles matching highlightedEvents render in purple.
  • Today-aware coloring. A single amber accent marks the next upcoming time. Past times in today's row fade to ~30% opacity. All other days render at full opacity.

Credits

This module is directly built upon the default Calendar module by Michael Teeuw (http://michaelteeuw.nl).

License

This project is licensed under the MIT License - see the LICENSE file for details.

About

MagicMirror² module that displays a Shul's Schedule from ShulCloud

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages