Weekly Class Schedule

Ready to book? Click sign up on any class below to snag your spot. Find a full list of class dates and times under the class descriptions.

  • Baby Movers: Pre-Walking Currently Not Booking

    A cozy class for you and your baby. With an emphasis on tummy time, sensory play, gentle movement and bonding. This class provides a calm and welcoming space to slow down and be together.

    6-week session. Coffee included.
    Tuition: $99 per month
    45 minutes

  • Clover Climbers: Crawlers/Walkers

    A sweet sensory class for babes and their grown-ups to bond, explore, and play on our mats. With maracas, scarves, parachutes, and bubbles for open-ended exploration.

    6-week session. Coffee included.
    Tuition: $99 per month
    45 minutes

  • Juniper Jumpers: 18 mo - 3 yrs

    Big energy, little gymnasts! This playful class is designed for toddlers and their grown-ups to move and learn together. With guided instruction, kids will explore the beam, bars, floor, and trampoline.

    Meets weekly. Billed monthly.
    Tuition: $99 per month
    50 minutes

  • Sprout Gym: 3 - 4

    Watch your little one shine in this fully independent, instructor-led gymnastics class! Kids will jump, balance, and swing their way across the beam, trampoline, and bars, learning the basics of the sport while having a blast.

    Meets weekly. Billed monthly.
    Tuition: $99 per month
    50 minutes

  • Bloom Gym: 4.5 - 6 yrs

    Gymnasts will work on their cartwheels, handstands, and more refined skills with improved technique and precision. Through structured progressions on the beam, bars, floor, and trampoline, your child will shine as they level up their gymnastics.

    Meets weekly. Billed monthly.
    Tuition: $99 per month
    50 minutes

    Trumpet Trekkers (3 – 4.5 years)
  • Foundations: 6 - 7 yrs

    Perfect for beginners or those continuing in our program! Gymnasts will build strength, coordination, and confidence while learning core skills on beam, bars, floor, and trampoline. All in a fun, non-competitive setting.

    Meets weekly. Billed monthly.
    Tuition: $99 per month
    60 minutes

Class Schedule

Explore our full list of class offerings below for babies, toddlers, and young children! Updated in real-time.

<div style="background-color: #DFF4F0; padding: 2.5rem; border-radius: 1rem; max-width: 1200px; margin: 0 auto; font-family: 'Helvetica Neue', sans-serif; font-size: 1.125rem; line-height: 1.8;">

  <h2 style="color: #176B87; font-size: 2.5rem; margin-bottom: 1rem;">Summer Classes</h2>
  <p style="color: #333; max-width: 1000px;">
    Explore our summer class offerings by age and class type below.
  </p>

  <style>
    .arbor-class-sections {
      display: grid;
      gap: 2rem;
      margin-top: 2rem;
    }

    .arbor-class-box {
      background: #ffffff;
      border: 1px solid #cceae4;
      border-radius: 18px;
      padding: 2rem;
      box-shadow: 0 4px 12px rgba(0,0,0,0.05);
    }

    .arbor-class-box h3 {
      margin: 0 0 0.4rem 0;
      font-size: 2rem;
      color: #176B87;
    }

    .arbor-class-box .arbor-age-tag {
      display: inline-block;
      margin-bottom: 1rem;
      padding: 0.35rem 0.9rem;
      border-radius: 999px;
      background: #CFEF73;
      color: #176B87;
      font-weight: 700;
      font-size: 1rem;
    }

    .arbor-class-box .arbor-desc {
      margin-bottom: 1.5rem;
      color: #333;
      max-width: 900px;
    }

    .arbor-class-box table {
      width: 100% !important;
      table-layout: fixed !important;
      border-collapse: collapse;
    }

    .arbor-class-box th,
    .arbor-class-box td {
      text-align: left !important;
      padding: 0.85rem 0.65rem !important;
      vertical-align: middle;
    }

    .arbor-class-box thead th {
      font-weight: 700;
      color: #000;
      border-bottom: 2px solid #d9ece7;
    }

    .arbor-class-box tbody tr:nth-child(even) {
      background: #f4fbf8;
    }

    .arbor-class-box a {
      color: #176B87 !important;
      text-decoration: underline;
      font-weight: 600;
    }

    #jr-hidden-source {
      display: none;
    }

    @media screen and (max-width: 768px) {
      .arbor-class-box {
        padding: 1.25rem;
      }

      .arbor-class-box table,
      .arbor-class-box tbody,
      .arbor-class-box tr,
      .arbor-class-box td {
        display: block !important;
        width: 100% !important;
      }

      .arbor-class-box thead {
        display: none !important;
      }

      .arbor-class-box tr {
        background: #ffffff !important;
        margin-bottom: 1rem !important;
        padding: 1rem !important;
        border: 1px solid #cceae4 !important;
        border-radius: 12px !important;
        box-shadow: 0 4px 10px rgba(0,0,0,0.04) !important;
      }

      .arbor-class-box td {
        padding: 0.2rem 0 !important;
        border: none !important;
      }

      .arbor-class-box td:before {
        display: none !important;
      }
    }
  </style>

  <!-- Hidden source table from Jackrabbit -->
  <div id="jr-hidden-source">
    <script
      type="text/javascript"
      src="https://app.jackrabbitclass.com/jr3.0/Openings/OpeningsJS?OrgID=556834&hidecols=Description,Gender,S,Session,Class%20Ends,Openings,Class%20Starts">
    </script>
  </div>

  <!-- Where your pretty grouped boxes will appear -->
  <div id="arbor-class-sections" class="arbor-class-sections"></div>

  <script>
    const classGroups = [
      {
        title: "Clover Climbers",
        age: "ages 8 months - 2 years",
        description: "A parent-and-child class for babies and young toddlers to explore movement, balance, climbing, and early gymnastics in a playful setting.",
        matches: ["Clover Climbers"]
      },
      {
        title: "Juniper Jumpers",
        age: "ages 1.5 - 3.5",
        description: "A playful toddler class full of movement, obstacle courses, bars, beams, and jumping, with a caregiver nearby for support.",
        matches: ["Juniper Jumpers"]
      },
      {
        title: "Sprout Gym",
        age: "ages 3 - 5",
        description: "An instructor-led preschool gymnastics class focused on confidence, coordination, skill-building, and fun.",
        matches: ["Sprout Gym"]
      }
      // Add more boxes later like Bloom Gym, Beginner Foundations, etc.
    ];

    function getCellText(row, index) {
      const cells = row.querySelectorAll("td");
      return cells[index] ? cells[index].innerText.trim() : "";
    }

    function cloneTableHeader(sourceTable) {
      const thead = sourceTable.querySelector("thead");
      return thead ? thead.cloneNode(true) : document.createElement("thead");
    }

    function buildGroupedTables() {
      const sourceTable = document.querySelector("#jr-hidden-source table");
      const target = document.getElementById("arbor-class-sections");

      if (!sourceTable || !target) return false;

      const rows = Array.from(sourceTable.querySelectorAll("tbody tr"));
      if (!rows.length) return false;

      target.innerHTML = "";

      classGroups.forEach(group => {
        const matchedRows = rows.filter(row => {
          const className = getCellText(row, 1).toLowerCase(); // Class column
          return group.matches.some(name => className.includes(name.toLowerCase()));
        });

        if (!matchedRows.length) return;

        const box = document.createElement("section");
        box.className = "arbor-class-box";

        const title = document.createElement("h3");
        title.textContent = group.title;

        const ageTag = document.createElement("div");
        ageTag.className = "arbor-age-tag";
        ageTag.textContent = group.age;

        const desc = document.createElement("p");
        desc.className = "arbor-desc";
        desc.textContent = group.description;

        const table = document.createElement("table");
        table.appendChild(cloneTableHeader(sourceTable));

        const tbody = document.createElement("tbody");
        matchedRows.forEach(row => {
          tbody.appendChild(row.cloneNode(true));
        });
        table.appendChild(tbody);

        box.appendChild(title);
        box.appendChild(ageTag);
        box.appendChild(desc);
        box.appendChild(table);

        target.appendChild(box);
      });

      return true;
    }

    function waitForJackrabbit() {
      let tries = 0;
      const maxTries = 40;

      const interval = setInterval(() => {
        tries++;
        const done = buildGroupedTables();
        if (done || tries >= maxTries) {
          clearInterval(interval);
        }
      }, 500);
    }

    waitForJackrabbit();
  </script>
</div>

You’ve got questions, we’ve got answers

Have more questions? We’d love to hear from you. Send your questions here or give us a call!