1<!DOCTYPE html> 2<html lang="en"> 3<head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 7 <!-- Title: Use HTML_TITLE from generateMetaTags if set, else build dynamically --> 8 <title>About Us | ServiceSpace Pods</title> 9 10 <!-- Meta Tags: Use META from generateMetaTags if set, else use inline defaults --> 11 <meta name='title' content='About Us' /> 12<meta name='description' content='Learn about ServiceSpace Pods - intimate, peer-led learning circles that weave together contemplation, practice, and connection for transformative change.' /> 13<meta name='keywords' content='about servicespace pods, peer learning, community, transformation' /> 14<meta property='og:image' content='https://pod.servicespace.org/pics/logos/ssp_pod_og.png' /> 15<meta property='og:description' content='A unique -- hands, head and heart -- peer-learning environment for change-makers.' /> 16<meta property='og:title' content='About Us' /> 17<meta property='og:url' content='https://pod.servicespace.org' /> 18<meta property='og:type' content='website' /> 19<meta property='twitter:card' content='summary_large_image' /> 20<meta property='twitter:title' content='About Us' /> 21<meta property='twitter:description' content='ServiceSpace Pods offer a unique peer learning environment for everyday heroes and change-makers to create social change while leading with inner transformation.' /> 22<meta property='twitter:image' content='https://www.karunavirus.org/pics/lotos_775x440.jpg' /> 23 24 25 <!-- Base URL - Set per site --> 26 <base href="https://pod.servicespace.org/"> 27 <!-- jQuery --> 28
28<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
28 29 30 <!-- Favicons --> 31 <link rel="shortcut icon" href="https://www.servicespace.org/favicon.ico"> 32 <link rel="apple-touch-icon-precomposed" sizes="144x144" href="images/ico/apple-touch-icon-144-precomposed.png"> 33 34 <!-- Google Fonts --> 35 <link rel="preconnect" href="https://fonts.googleapis.com"> 36 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 37 <link href="https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,400;0,500;0,600;1,400&family=DM+Sans:opsz,[email protected],400;9..40,500;9..40,600&display=swap" rel="stylesheet"> 38 39 <!-- Bootstrap Icons --> 40 <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/font/bootstrap-icons.css"> 41 42 <!-- Swiper CSS (for carousels) --> 43 <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.css"> 44 45 <!-- ============================================ 46 GLOBAL STYLES - Header/Footer (all sites) 47 ============================================ --> 48 <link rel="stylesheet" href="https://pod.servicespace.org/assets/css/welcome/global_styles.css?v=2how"> 49 50 <!-- ============================================ 51 PAGE STYLES - Site-specific 52 ============================================ --> 53 <!-- Pod Platform Unified Styles --> 54 <link rel="stylesheet" href="https://pod.servicespace.org/assets/css/welcome/uni_variables.css?v=2how"> 55 <link rel="stylesheet" href="https://pod.servicespace.org/assets/css/welcome/uni_base.css?v=2how"> 56 <link rel="stylesheet" href="https://pod.servicespace.org/assets/css/welcome/uni_components.css?v=2how"> 57 <link rel="stylesheet" href="https://pod.servicespace.org/assets/css/welcome/pod_responsive.css?v=2how"> 58 <link rel="stylesheet" href="https://pod.servicespace.org/assets/css/welcome/pod_form.css?v=2how"> 59 60 61 62 </head> 63<body class=""> 64 65 <!-- ============================================ 66 GLOBAL HEADER 67 ============================================ --> 68 <header class="ss-header"> 69 <div class="ss-header-container"> 70 71 <!-- Logo Area --> 72 <div class="ss-logo-area"> 73 <a href="https://www.servicespace.org/" class="ss-logo"> 74 <img src="https://www.servicespace.org/images/index2026/logo_sm2.png" alt="ServiceSpace"> 75 </a> 76 <a href="https://pod.servicespace.org/welcome" class="ss-logo-suffix">Pods</a> 77 </div> 78 79 <!-- Desktop Navigation --> 80 <nav class="ss-nav"> 81 82 <!-- Ecosystem Dropdown --> 83 <div class="ss-nav-item"> 84 <button class="ss-nav-link"> 85 Ecosystem <i class="bi bi-chevron-down"></i> 86 </button> 87 <div class="ss-dropdown ss-dropdown-wide"> 88 <a href="https://www.servicespace.org/projects" class="ss-dropdown-item"> 89 <div class="ss-dropdown-icon" style="background: linear-gradient(135deg, var(--ss-teal) 0%, var(--ss-teal-deep) 100%);"> 90 <i class="bi bi-flower1"></i> 91 </div> 92 <div class="ss-dropdown-content"> 93 <div class="ss-dropdown-title">Explore All Projects</div> 94 <div class="ss-dropdown-desc">Our family of projects</div> 95 </div> 96 </a> 97 98 <div class="ss-dropdown-divider"></div> 99 100 <a href="https://www.dailygood.org" class="ss-dropdown-item" target="_blank"> 101 <div class="ss-dropdown-icon" style="background: linear-gradient(135deg, var(--ss-gold) 0%, #e8b84a 100%);"> 102 <i class="bi bi-sun"></i> 103 </div> 104 <div class="ss-dropdown-content"> 105 <div class="ss-dropdown-title">DailyGood</div> 106 <div class="ss-dropdown-desc">News that inspires</div> 107 </div> 108 </a> 109 110 <a href="https://www.karmakitchen.org" class="ss-dropdown-item" target="_blank"> 111 <div class="ss-dropdown-icon" style="background: linear-gradient(135deg, var(--ss-coral) 0%, #e07a65 100%);"> 112 <i class="bi bi-heart"></i> 113 </div> 114 <div class="ss-dropdown-content"> 115 <div class="ss-dropdown-title">Karma Kitchen</div> 116 <div class="ss-dropdown-desc">Pay-it-forward restaurants</div> 117 </div> 118 </a> 119 120 <a href="https://www.awakin.org" class="ss-dropdown-item" target="_blank"> 121 <div class="ss-dropdown-icon" style="background: linear-gradient(135deg, var(--ss-sage) 0%, #7fb578 100%);"> 122 <i class="bi bi-circle"></i> 123 </div> 124 <div class="ss-dropdown-content"> 125 <div class="ss-dropdown-title">Awakin Circles</div> 126 <div class="ss-dropdown-desc">Weekly meditation gatherings</div> 127 </div> 128 </a> 129 130 <div class="ss-dropdown-footer"> 131 <a href="https://www.servicespace.org/projects">View all 20+ initiatives â</a> 132 </div> 133 </div> 134 </div> 135 136 <!-- Pods Dropdown --> 137 <div class="ss-nav-item"> 138 <button class="ss-nav-link active"> 139 Pods <i class="bi bi-chevron-down"></i> 140 </button> 141 <div class="ss-dropdown"> 142 <a href="https://pod.servicespace.org/welcome" class="ss-dropdown-item"> 143 <div class="ss-dropdown-icon" style="background: linear-gradient(135deg, var(--ss-teal) 0%, var(--ss-teal-light) 100%);"> 144 <i class="bi bi-brightness-high"></i> 145 </div> 146 <div class="ss-dropdown-content"> 147 <div class="ss-dropdown-title">What Are Pods?</div> 148 <div class="ss-dropdown-desc">An introduction to learning pods</div> 149 </div> 150 </a> 151 152 <div class="ss-dropdown-divider"></div> 153 154 <a href="https://pod.servicespace.org/apply" class="ss-dropdown-item"> 155 <div class="ss-dropdown-icon" style="background: linear-gradient(135deg, var(--ss-gold) 0%, #e8b84a 100%);"> 156 <i class="bi bi-search"></i> 157 </div> 158 <div class="ss-dropdown-content"> 159 <div class="ss-dropdown-title">Join a Pod</div> 160 <div class="ss-dropdown-desc">Find your next journey</div> 161 </div> 162 </a> 163 164 <a href="https://pod.servicespace.org/about" class="ss-dropdown-item"> 165 <div class="ss-dropdown-icon" style="background: linear-gradient(135deg, var(--ss-sage) 0%, #7fb578 100%);"> 166 <i class="bi bi-book"></i> 167 </div> 168 <div class="ss-dropdown-content"> 169 <div class="ss-dropdown-title">Our Approach</div> 170 <div class="ss-dropdown-desc">How transformative learning works</div> 171 </div> 172 </a> 173 174 <a href="https://pod.servicespace.org/host" class="ss-dropdown-item"> 175 <div class="ss-dropdown-icon" style="background: linear-gradient(135deg, var(--ss-coral) 0%, #e07a65 100%);">
176 <i class="bi bi-person-plus"></i> 177 </div> 178 <div class="ss-dropdown-content"> 179 <div class="ss-dropdown-title">Host a Pod</div> 180 <div class="ss-dropdown-desc">Create space for others</div> 181 </div> 182 </a> 183 </div> 184 </div> 185 186 <!-- About Dropdown --> 187 <div class="ss-nav-item"> 188 <button class="ss-nav-link"> 189 About <i class="bi bi-chevron-down"></i> 190 </button> 191 <div class="ss-dropdown"> 192 <a href="https://www.servicespace.org/about" class="ss-dropdown-item"> 193 <div class="ss-dropdown-icon" style="background: linear-gradient(135deg, var(--ss-teal) 0%, var(--ss-teal-deep) 100%);"> 194 <i class="bi bi-book"></i> 195 </div> 196 <div class="ss-dropdown-content"> 197 <div class="ss-dropdown-title">About Us</div> 198 <div class="ss-dropdown-desc">Our values, story & people</div> 199 </div> 200 </a> 201 202 <a href="https://www.servicespace.org/vision" class="ss-dropdown-item"> 203 <div class="ss-dropdown-icon" style="background: linear-gradient(135deg, var(--ss-gold) 0%, #e8b84a 100%);"> 204 <i class="bi bi-eye"></i> 205 </div> 206 <div class="ss-dropdown-content"> 207 <div class="ss-dropdown-title">Our Vision</div> 208 <div class="ss-dropdown-desc">Change yourself, change the world</div> 209 </div> 210 </a> 211 212 <a href="https://www.servicespace.org/join" class="ss-dropdown-item"> 213 <div class="ss-dropdown-icon" style="background: linear-gradient(135deg, var(--ss-sage) 0%, #7fb578 100%);"> 214 <i class="bi bi-people"></i> 215 </div> 216 <div class="ss-dropdown-content"> 217 <div class="ss-dropdown-title">Get Involved</div> 218 <div class="ss-dropdown-desc">Join the movement</div> 219 </div> 220 </a> 221 222 <div class="ss-dropdown-divider"></div> 223 224 <a href="https://pod.servicespace.org/contact" class="ss-dropdown-item"> 225 <div class="ss-dropdown-icon" style="background: var(--ss-cream); color: var(--ss-teal);"> 226 <i class="bi bi-envelope"></i> 227 </div> 228 <div class="ss-dropdown-content"> 229 <div class="ss-dropdown-title">Contact Us</div> 230 <div class="ss-dropdown-desc">Reach our team</div> 231 </div> 232 </a> 233 </div> 234 </div> 235 236 </nav> 237 238 <!-- Auth Buttons --> 239 <div class="ss-auth"> 240 <!-- Logged Out State --> 241 <a href="https://pod.servicespace.org/login" class="ss-btn ss-btn-outline"> 242 Sign In 243 </a> 244 <a href="https://pod.servicespace.org/join" class="ss-btn ss-btn-primary"> 245 Join <i class="bi bi-arrow-right"></i> 246 </a> 247 </div> 248 249 <!-- Mobile Toggle --> 250 <button class="ss-mobile-toggle" aria-label="Toggle menu">
251 <span class="ss-hamburger"></span> 252 </button> 253 254 </div> 255 </header> 256 257 <!-- Mobile Menu --> 258 <div class="ss-mobile-menu"> 259 260 <div class="ss-mobile-nav-item"> 261 <button class="ss-mobile-nav-link"> 262 Ecosystem <i class="bi bi-chevron-down"></i> 263 </button> 264 <div class="ss-mobile-subnav"> 265 <a href="https://www.servicespace.org/projects">Explore All Projects</a> 266 <a href="https://www.dailygood.org">DailyGood</a> 267 <a href="https://www.karmakitchen.org">Karma Kitchen</a> 268 <a href="https://www.awakin.org">Awakin Circles</a> 269 <a href="https://www.kindspring.org">KindSpring</a> 270 </div> 271 </div> 272 273 <div class="ss-mobile-nav-item"> 274 <button class="ss-mobile-nav-link"> 275 Pods <i class="bi bi-chevron-down"></i> 276 </button> 277 <div class="ss-mobile-subnav"> 278 <a href="https://pod.servicespace.org/welcome">What Are Pods?</a> 279 <a href="https://pod.servicespace.org/apply">Join a Pod</a> 280 <a href="https://pod.servicespace.org/about">Our Approach</a> 281 <a href="https://pod.servicespace.org/host">Host a Pod</a> 282 </div> 283 </div> 284 285 <div class="ss-mobile-nav-item"> 286 <button class="ss-mobile-nav-link"> 287 About <i class="bi bi-chevron-down"></i> 288 </button> 289 <div class="ss-mobile-subnav"> 290 <a href="https://www.servicespace.org/about">Who We Are</a> 291 <a href="https://www.servicespace.org/vision">Our Vision</a> 292 <a href="https://www.servicespace.org/join">Get Involved</a> 293 <a href="https://pod.servicespace.org/contact">Contact Us</a> 294 </div> 295 </div> 296 297 <div class="ss-mobile-auth"> 298 <a href="https://pod.servicespace.org/login" class="ss-btn ss-btn-outline">Sign In</a> 299 <a href="https://pod.servicespace.org/join" class="ss-btn ss-btn-primary">Join Now</a> 300 </div> 301 302 </div> 303 304
304<script> 305 document.addEventListener('DOMContentLoaded', function() { 306 const header = document.querySelector('.ss-header'); 307 const mobileToggle = document.querySelector('.ss-mobile-toggle'); 308 const mobileMenu = document.querySelector('.ss-mobile-menu'); 309 310 // Header scroll effect 311 if (header) { 312 window.addEventListener('scroll', function() { 313 if (window.scrollY > 50) { 314 header.classList.add('scrolled'); 315 } else { 316 header.classList.remove('scrolled'); 317 } 318 }); 319 } 320 321 // Mobile toggle 322 if (mobileToggle && mobileMenu) { 323 mobileToggle.addEventListener('click', function() { 324 this.classList.toggle('active'); 325 mobileMenu.classList.toggle('open'); 326 document.body.style.overflow = mobileMenu.classList.contains('open') ? 'hidden' : ''; 327 }); 328 } 329 330 document.querySelectorAll('.ss-mobile-nav-item').forEach(item => { 331 item.querySelector('.ss-mobile-nav-link').addEventListener('click', function() { 332 document.querySelectorAll('.ss-mobile-nav-item').forEach(other => { 333 if (other !== item) other.classList.remove('open'); 334 }); 335 item.classList.toggle('open'); 336 }); 337 }); 338 339 document.querySelectorAll('.ss-mobile-subnav a').forEach(link => { 340 link.addEventListener('click', function() { 341 mobileToggle.classList.remove('active'); 342 mobileMenu.classList.remove('open'); 343 document.body.style.overflow = ''; 344 }); 345 }); 346 }); 347 </script>
347 348 349 <main> 350 351 352 <!-- Page-specific styles --> 353 <link rel="stylesheet" href="assets/css/welcome/about_uni.css?2how"> 354 355 <!-- ============================================ 356 HERO - Lead with the Question 357 ============================================ --> 358 <section class="about-hero"> 359 <div class="container"> 360 <p class="hero-welcome">Welcome to Pods</p> 361 <h1>How can we lead with love?</h1> 362 <p class="hero-subtext"> 363 How can our hearts lead our head and hands? This is the question that brings us togetherâteachers and students, speakers and listeners, renowned personalities and everyday heroes. Not to find the answer, but to live inside the inquiry. 364 </p> 365 </div> 366 </section> 367 368 <!-- ============================================ 369 THE INVITATION - Not a Course, a Container 370 ============================================ --> 371 <section class="invitation-section"> 372 <div class="container"> 373 <div class="invitation-content"> 374 <h2>This isn't a course.</h2> 375 <p class="invitation-lead">It's a container for something to emerge.</p> 376 377 <div class="invitation-text"> 378 <p>We truly don't know what we'll turn out to be. And we don't want to know. As coders would often quip, <em>that's not a bugâit's a feature.</em></p> 379 380 <p>If you're looking for "takeaways," Google is going to be far more efficient than a 21-day pod. Here, what we're actually doing is building <strong>context</strong>âthe quality of presence, the depth of trust, the authenticity of relationship. These create the conditions where transformation happens.</p> 381 382 <p>You'll be in a circle with others from around the world. A CEO and a parent sit as equals. A student and an elder share from the heart. Everyone brings wisdom. Everyone learns.</p> 383 </div> 384 385 <a href="#rhythm" class="scroll-hint"> 386 <span>The Rhythm</span> 387 <i class="bi bi-chevron-down"></i> 388 </a> 389 </div> 390 </div> 391 </section> 392 393 <!-- ============================================ 394 THE RHYTHM - Head, Hands, Heart Interwoven Daily 395 ============================================ --> 396 <section class="rhythm-section" id="rhythm"> 397 <div class="container"> 398 <header class="section-header"> 399 <h2>A Gentle Rhythm</h2> 400 <p>Each day, head, hands, and heart weave togetherânot as separate moments, but as a living practice.</p> 401 </header> 402 403 <div class="rhythm-flow"> 404 <div class="rhythm-moment"> 405 <div class="rhythm-when">Each Morning</div> 406 <div class="rhythm-card rhythm-card-gold"> 407 <img src="https://pod.servicespace.org/pics/2025site/head_icon.png" alt="" class="rhythm-icon"> 408 <span class="rhythm-label">HEAD</span> 409 <h3>A prompt arrives</h3> 410 <p>An invitation to pause and notice something you might otherwise miss.</p> 411 <div class="rhythm-example"> 412 <em>"What gift have you received that you've never acknowledged?"</em> 413 </div> 414 </div> 415 </div> 416 417 <div class="rhythm-connector"> 418 <svg viewBox="0 0 40 80" preserveAspectRatio="none"> 419 <path d="M20,0 Q30,40 20,80" stroke="currentColor" stroke-width="2" fill="none" stroke-dasharray="4,4"/> 420 </svg> 421 </div> 422 423 <div class="rhythm-moment"> 424 <div class="rhythm-when">Throughout the Day</div> 425 <div class="rhythm-card rhythm-card-sage"> 426 <img src="https://pod.servicespace.org/pics/2025site/hand_icon.png" alt="" class="rhythm-icon">
427 <span class="rhythm-label">HANDS</span> 428 <h3>A small experiment</h3> 429 <p>Not grand gesturesâjust presence. Wisdom without action remains philosophy.</p> 430 <div class="rhythm-example"> 431 <em>"Listen to someone today without planning your response."</em> 432 </div> 433 </div> 434 </div> 435 436 <div class="rhythm-connector"> 437 <svg viewBox="0 0 40 80" preserveAspectRatio="none"> 438 <path d="M20,0 Q10,40 20,80" stroke="currentColor" stroke-width="2" fill="none" stroke-dasharray="4,4"/> 439 </svg> 440 </div> 441 442 <div class="rhythm-moment"> 443 <div class="rhythm-when">Every Day + Weekly</div> 444 <div class="rhythm-card rhythm-card-coral"> 445 <img src="https://pod.servicespace.org/pics/2025site/heart_icon.png" alt="" class="rhythm-icon"> 446 <span class="rhythm-label">HEART</span> 447 <h3>We connect</h3> 448 <p>Daily, through reflections and interactions with your circle. Weekly, through a live gathering where presence deepens.</p> 449 <div class="rhythm-example"> 450 <em>"In being seen and heard, I discover who I truly am."</em> 451 </div> 452 </div> 453 </div> 454 </div> 455 456 <p class="rhythm-note">Heart isn't confined to a single momentâit's woven through the entire experience. Every prompt carries it, every reflection shares it, every interaction deepens it. <strong>When all three work together, something shifts.</strong></p> 457 </div> 458 </section> 459 460 <!-- ============================================ 461 THE FIELD - Many Hearts, One Container 462 ============================================ --> 463 <section class="field-section"> 464 <div class="container"> 465 <div class="field-intro"> 466 <h2>Held by Many Hearts</h2> 467 <p>Here's something you might not notice: a typical 21-day pod involves <strong>2,600+ volunteer hours</strong>. Not because we have to. Because that's the design.</p> 468 </div> 469 470 <div class="field-content"> 471 <div class="field-philosophy"> 472 <p>Most of that work isn't flashy. You won't even see it. It's subtleânot a thump, but a gentle nudge.</p> 473 474 <p>People notice the 100th snowflake that creates an avalanche. But our volunteers are doing the work of the un-noteworthy 35th or 81st snowflake, because they see the power of the ripple effect in a deeply connected web.</p> 475 476 <p>When dozens of people pour their time, attention, and care into creating something, their heart energy merges into hundreds of micro-interactionsâin turn building into a vortex that ripples into transformative emergence.</p> 477 478 <p class="field-highlight">This is what we call <em>multiple forms of wealth</em>: time capital, community capital, attention capital. The same carbon atoms arranged differently create graphite or diamond. The same content, held by many hearts instead of few, creates profoundly unique possibilities.</p> 479 480 <a href="https://nipun.servicespace.org/wealth" target="_blank" class="field-link"> 481 <i class="bi bi-play-circle"></i> Watch: Multiple Forms of Wealth 482 </a> 483 </div> 484 485 <div class="field-breakdown"> 486 <h4>Where the Energy Goes</h4> 487 <p class="energy-note">Example from a 21-Day Inner Friendliness Podâeach pod's distribution varies based on theme, participants, and volunteer capacity.</p> 488 <div class="energy-list"> 489 <div class="energy-row">
490 <span class="energy-hours">~500 hrs</span> 491 <span class="energy-what">Community weavingâreading every post, adding hearts and comments</span> 492 </div> 493 <div class="energy-row"> 494 <span class="energy-hours">~300 hrs</span> 495 <span class="energy-what">Weekly callsâplanning, guest speakers, follow-up</span> 496 </div> 497 <div class="energy-row"> 498 <span class="energy-hours">~250 hrs</span> 499 <span class="energy-what">Curriculumâ21 authors creating each prompt</span> 500 </div> 501 <div class="energy-row"> 502 <span class="energy-hours">~250 hrs</span> 503 <span class="energy-what">Graphicsâ300+ quote cards, collages, surprises</span> 504 </div> 505 <div class="energy-row energy-row-more"> 506 <span class="energy-hours">+1,300</span> 507 <span class="energy-what">Orientation, tech support, pod rooms, and more...</span> 508 </div> 509 </div> 510 </div> 511 </div> 512 </div> 513 </section> 514 515 <!-- ============================================ 516 THE APPROACH - Light Touch Principles 517 ============================================ --> 518 <section class="approach-section"> 519 <div class="container"> 520 <header class="section-header section-header-light"> 521 <h2>How We Hold Space</h2> 522 </header> 523 524 <div class="approach-items"> 525 <div class="approach-item"> 526 <div class="approach-icon"><i class="bi bi-infinity"></i></div> 527 <div class="approach-text"> 528 <h4>Many to Many</h4> 529 <p>No teachers, no studentsâonly peers. Everyone brings wisdom, everyone learns.</p> 530 </div> 531 <a href="https://nipun.servicespace.org/gandhi30" target="_blank" class="approach-link"><i class="bi bi-arrow-right"></i></a> 532 </div> 533 534 <div class="approach-item"> 535 <div class="approach-icon"><i class="bi bi-heart"></i></div> 536 <div class="approach-text"> 537 <h4>Context Over Content</h4> 538 <p>Relationships matter more than curriculum. The container creates the magic.</p> 539 </div> 540 <a href="https://www.laddership.org/?op=recap" target="_blank" class="approach-link"><i class="bi bi-arrow-right"></i></a> 541 </div> 542 543 <div class="approach-item"> 544 <div class="approach-icon"><i class="bi bi-flower2"></i></div> 545 <div class="approach-text"> 546 <h4>Trust Emergence</h4> 547 <p>We don't predetermine outcomes. What needs to unfold, unfolds.</p> 548 </div> 549 <a href="https://www.dailygood.org/story/1300/let-s-make-virtue-viral-nipun-mehta/" target="_blank" class="approach-link"><i class="bi bi-arrow-right"></i></a> 550 </div> 551 552 <div class="approach-item"> 553 <div class="approach-icon"><i class="bi bi-ladder"></i></div> 554 <div class="approach-text"> 555 <h4>Laddership</h4> 556 <p>Leading from belowâholding the ladder for others to climb.</p> 557 </div> 558 <a href="https://www.servicespace.org/blog/view.php?id=20049" target="_blank" class="approach-link"><i class="bi bi-arrow-right"></i></a> 559 </div> 560 </div> 561 </div> 562 </section> 563 564 <!-- ============================================ 565 THE STORY - Brief Origin 566 ============================================ --> 567 <section class="story-section"> 568 <div class="container"> 569 <div class="story-content"> 570 <div class="story-text"> 571 <h2>A 25-Year Experiment</h2> 572 <p>
572In 1999, a group of friends in Silicon Valley asked a simple question: <em>What would happen if we organized around generosity instead of scarcity?</em></p> 573 <p>That question became <a href="https://www.servicespace.org/?pg=about" target="_blank">ServiceSpace</a>âan ecosystem of projects touching millions, all volunteer-run, with no advertising or fundraising. <a href="https://www.dailygood.org" target="_blank">DailyGood</a>. <a href="https://www.karmakitchen.org" target="_blank">Karma Kitchen</a>. <a href="https://www.awakin.org" target="_blank">Awakin Circles</a>. And now, Pods.</p> 574 <p>Pods emerged in 2020 as a way to deepen this workâto create containers where inner transformation and outer service become inseparable. What started as a pandemic experiment has blossomed into a platform serving thousands across 80+ countries.</p> 575 </div> 576 <div class="story-image"> 577 <img src="pics/servicespace/story.jpg" alt="ServiceSpace community" onerror="this.src='https://awakin.ai/gather/austria_circle.jpg'"> 578 </div> 579 </div> 580 </div> 581 </section> 582 583 <!-- ============================================ 584 FEATURED TESTIMONIAL - Michael's Poem 585 ============================================ --> 586 <section class="featured-testimonial-section"> 587 <div class="container"> 588 <div class="featured-testimonial"> 589 <div class="featured-testimonial-video"> 590 <button class="video-play-btn" onclick="openPoemModal()" aria-label="Play video"> 591 <img src="https://i.vimeocdn.com/video/2036411505-d46ae4375f0ffc3bd03252101de5bea35de7004bdd1e0d570ed0b4900df3c598-d_640x360" alt="Michael's poem video thumbnail" class="video-thumbnail"> 592 <div class="play-overlay"> 593 <i class="bi bi-play-circle-fill"></i> 594 <span class="video-duration">2:57</span> 595 </div> 596 </button> 597 </div> 598 <div class="featured-testimonial-content"> 599 <span class="testimonial-badge">Podmate Reflection</span> 600 <h3>The Ingredients for Becoming Rich</h3> 601 <div class="poem-excerpt"> 602 <p><em>You start by mixing the life experiences of hundreds of participants.<br> 603 Make sure they're diverseâthat's what makes it beautiful and real.</em></p> 604 <p><em>Then you go deeper. To the essence.</em></p> 605 <p><em>How? You ask them questions. And you give them the space to show themselves. To be seenâtruly seenâby the others.</em></p> 606 </div> 607 <button class="btn btn-outline-teal btn-sm" onclick="openPoemModal()"> 608 <i class="bi bi-play-fill"></i> Watch Michael's Full Poem 609 </button> 610 <p class="testimonial-attribution"> 611 <strong>Michael</strong> · Podmate 612 </p> 613 </div> 614 </div> 615 </div> 616 </section> 617 618 <!-- ============================================ 619 RIPPLES - More Transformation Stories 620 ============================================ --> 621 <section class="ripples-section"> 622 <div class="container"> 623 <header class="section-header"> 624 <h2>What Emerges</h2> 625 <p>We never know what will happen. That's the point.</p> 626 </header> 627 628 <div class="ripples-grid"> 629 <div class="ripple-card"> 630 <p>"Through daily prompts, I discovered a calling to serve elders in my neighborhood. What started as visits became a community care network with twelve volunteers."</p> 631 <footer><strong>Priya</strong> · Teacher</footer> 632 </div> 633 634 <div class="ripple-card"> 635 <p>"I joined feeling isolated in my activism. The pod reminded me that sustainable change comes from inner resilience. Now I organize differentlyâstarting with connection, not strategy."</p> 636 <footer><strong>Marcus</strong> · Community Organizer</footer> 637 </div> 638 639 <div class="ripple-card"> 640 <p>"The pod helped me see that my small acts of kindness at work were actually leadership. I started a gratitude practice with my team that's now spreading to other departments."</p> 641 <footer><strong>Sarah</strong> · Project Manager</footer> 642 </div> 643 </div> 644 645 <div class="section-cta"> 646 <a href="my/projects" class="btn btn-secondary"> 647 See Podmate Projects (362) <i class="bi bi-arrow-right"></i> 648 </a> 649 </div> 650 </div> 651 </section> 652 653 <!-- ============================================ 654 FAQ SECTION 655 ============================================ --> 656 <section class="section-padding faq-section" id="faq"> 657 <div class="container"> 658 <div class="faq-container"> 659 <header class="section-header"> 660 <h2>Frequently Asked Questions</h2> 661 <p>Everything you need to know about joining a pod</p> 662 </header> 663 664 <div class="faq-list" id="faq-accordion"> 665 <details class="faq-item" open> 666 <summary>
667 <span class="faq-question">What's the daily rhythm?</span> 668 <span class="faq-icon"></span> 669 </summary> 670 <div class="faq-answer"> 671 <p>Morning brings a reflective promptâsomething to sit with over tea. Throughout the day, a small experiment invites you to practice what you're learning. Heart is woven through it allâin your daily reflections, in reading and responding to others, and in the weekly video call where your circle gathers to witness and be witnessed.</p> 672 <p>Most participants spend 1â2 hours daily on reading and reflection, plus a 90-minute video call each week. The rest unfolds naturally through your day.</p> 673 </div> 674 </details> 675 676 <details class="faq-item"> 677 <summary> 678 <span class="faq-question">Are pods really free?</span> 679 <span class="faq-icon"></span> 680 </summary> 681 <div class="faq-answer"> 682 <p>Yes! All pods operate in the spirit of service â no fees, just trust and generosity. Every pod is offered freely, accessible to anyone regardless of financial means.</p> 683 </div> 684 </details> 685 686 <details class="faq-item"> 687 <summary> 688 <span class="faq-question">Who facilitates?</span> 689 <span class="faq-icon"></span> 690 </summary> 691 <div class="faq-answer"> 692 <p>Volunteer hosts create the container; participants co-create the experience. There are no teachers and studentsâonly peers learning together.</p> 693 </div> 694 </details> 695 696 <details class="faq-item"> 697 <summary> 698 <span class="faq-question">How much time commitment?</span> 699 <span class="faq-icon"></span> 700 </summary> 701 <div class="faq-answer"> 702 <p>1â3 weeks depending on the pod. Daily: 1â2 hours of study and reflection. Weekly: 90-minute video call. Plus whatever time you choose for personal experiments.</p> 703 </div> 704 </details> 705 706 <details class="faq-item"> 707 <summary> 708 <span class="faq-question">Do I need any prerequisites or experience?</span> 709 <span class="faq-icon"></span> 710 </summary> 711 <div class="faq-answer"> 712 <p>No prerequisites needed! Pods welcome people from all backgrounds and experience levels. All you need is curiosity, openness, and a commitment to show up authentically for yourself and your fellow participants.</p> 713 </div> 714 </details> 715 716 <details class="faq-item"> 717 <summary> 718 <span class="faq-question">Can I volunteer to help run a pod?</span> 719 <span class="faq-icon"></span> 720 </summary> 721 <div class="faq-answer"> 722 <p>Absolutely! Every pod is held together by dedicated volunteers who facilitate circles, support participants, and nurture the circle of gifts.</p> 723 <p>We've found that volunteers are most effective when they've first participated in a pod or attended a ServiceSpace retreat. This foundation gives volunteers a feel for ServiceSpace values and appreciation for the pod experience.</p> 724 <a href="host" class="faq-link">Learn about hosting opportunities â</a> 725 </div> 726 </details> 727 </div> 728 </div> 729 </div> 730 </section> 731 732 <!-- ============================================ 733 CTA - Simple Invitation 734 ============================================ --> 735 <section class="cta-section"> 736 <div class="container"> 737 <div class="cta-content"> 738 <h2>Ready to step in?</h2> 739 <p>
739We don't know what will emerge. But we know we'll be held.</p> 740 741 <div class="cta-actions"> 742 <a href="apply" class="btn btn-primary btn-lg"> 743 <i class="bi bi-arrow-right-circle"></i> Join a Pod 744 </a> 745 </div> 746 747 <p class="cta-secondary"> 748 Want to hold space for others? <a href="host">Learn about hosting</a> 749 </p> 750 </div> 751 </div> 752 </section> 753 754 <!-- ============================================ 755 POEM VIDEO MODAL 756 ============================================ --> 757 <div id="poemModal" class="video-modal" onclick="closePoemModal(event)"> 758 <div class="modal-content" onclick="event.stopPropagation()"> 759 <button class="modal-close" onclick="closePoemModal()" aria-label="Close modal"> 760 <i class="bi bi-x-lg"></i> 761 </button> 762 <div class="modal-video-container"> 763 <iframe id="poemVideo" src="" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" allowfullscreen></iframe> 764 </div> 765 <div class="modal-poem-text"> 766 <h4>The Ingredients for Becoming Rich</h4> 767 <div class="poem-full-text"> 768 <p>You start by mixing the life experiences of hundreds of participants.<br> 769 Make sure they're diverseâthat's what makes it beautiful and real: men and women, young and old, from all over the world. Christians, Hindus, street workers, billionairesâit doesn't matter.</p> 770 771 <p>Then you go deeper.<br> 772 To the essence.</p> 773 774 <p>How?<br> 775 You ask them questions.<br> 776 And you give them the space to show themselves.<br> 777 To be seenâtruly seenâby the others.<br> 778 Not just the shiny surface, but what's inside. Deep inside.</p> 779 780 <p>And then youâyes, you behind that cameraâyou do the same.<br> 781 Every morning, for 21 days, questions will pop up on your screen.<br> 782 Answer them.<br> 783 Look deep into your life.<br> 784 Meet your past again.</p> 785 786 <p>Andâthis is the keyâ<strong>Share it.</strong></p> 787 788 <p>Read.<br> 789 Reflect.<br> 790 Write.<br> 791 Comment.<br> 792 And shareâwith all your vulnerability, with all the tears that might come and wash something clean inside you.</p> 793 794 <p>Share your dreams.<br> 795 Share your nightmares.</p> 796 797 <p>Don't try to impress anyone.<br> 798 Don't turn it into a show.<br> 799 Just be honest with yourself.<br> 800 And you'll be amazed how simple, and yet how powerful, that can be.</p> 801 802 <p>And as you begin to gather the fruitsâgifts that often come from someone unaware of how deeply their words can touch othersâyou will learn.<br> 803 You will be inspired.</p> 804 805 <p>You will become bolder.<br> 806 You will start to see life differently.<br> 807 You will collect pieces of a greater truthâa truth you may have sensed, but never fully seen.</p> 808 809 <p>By the end of these three weeks, you'll feel close to each otherâlike friends, companions, maybe even soulmates.</p> 810 811 <p>And you'll be rich.<br> 812 So rich that you won't be able to keep it just for yourself.</p> 813 814 <p>You'll want to share it.<br> 815 You will share it.</p> 816 817 <p>
817But that's another story.<br> 818 A new story.<br> 819 <strong>Your</strong> new story.<br> 820 And it's waiting out there⦠to be lived!</p> 821 </div> 822 <p class="poem-attribution">â Michael, Podmate</p> 823 </div> 824 </div> 825 </div> 826 827
827<script> 828 function openPoemModal() { 829 const modal = document.getElementById('poemModal'); 830 const iframe = document.getElementById('poemVideo'); 831 modal.classList.add('active'); 832 document.body.style.overflow = 'hidden'; 833 // Load video with autoplay 834 iframe.src = 'https://player.vimeo.com/video/1101035128?h=3f0b19297b&autoplay=1'; 835 } 836 837 function closePoemModal(event) { 838 if (event && event.target !== event.currentTarget) return; 839 const modal = document.getElementById('poemModal'); 840 const iframe = document.getElementById('poemVideo'); 841 modal.classList.remove('active'); 842 document.body.style.overflow = ''; 843 // Stop video 844 iframe.src = ''; 845 } 846 847 // Close on escape key 848 document.addEventListener('keydown', function(e) { 849 if (e.key === 'Escape') { 850 closePoemModal(); 851 } 852 }); 853 854 // FAQ Accordion - close others when one opens 855 document.addEventListener('DOMContentLoaded', function() { 856 const faqAccordion = document.getElementById('faq-accordion'); 857 if (faqAccordion) { 858 const faqItems = faqAccordion.querySelectorAll('.faq-item'); 859 860 faqItems.forEach(item => { 861 item.addEventListener('toggle', function() { 862 if (this.open) { 863 faqItems.forEach(otherItem => { 864 if (otherItem !== this && otherItem.open) { 865 otherItem.open = false; 866 } 867 }); 868 } 869 }); 870 }); 871 } 872 873 // Handle FAQ hash navigation 874 if (window.location.hash === '#faq') { 875 const faqSection = document.getElementById('faq'); 876 if (faqSection) { 877 setTimeout(() => { 878 faqSection.scrollIntoView({ behavior: 'smooth', block: 'start' }); 879 }, 100); 880 } 881 } 882 }); 883 </script>
883 884 885 </main> 886 887 <!-- ============================================ 888 GLOBAL FOOTER 889 ============================================ --> 890 <footer class="ss-footer"> 891 <div class="ss-footer-container"> 892 893 <div class="ss-footer-main"> 894 895 <!-- Brand Column --> 896 <div class="ss-footer-brand"> 897 <a href="https://www.servicespace.org" class="ss-footer-logo"> 898 <img src="https://www.servicespace.org/images/index2026/logo_sm_light.png" alt="ServiceSpace"> 899 </a> 900 <p class="ss-footer-tagline"> 901 Small acts that change the world.<br> 902 Volunteer-run since 1999. 903 </p> 904 <div class="ss-footer-social"> 905 <a href="https://www.facebook.com/servicespace" target="_blank" aria-label="Facebook"> 906 <i class="bi bi-facebook"></i> 907 </a> 908 <a href="https://twitter.com/servicespace" target="_blank" aria-label="Twitter"> 909 <i class="bi bi-twitter-x"></i> 910 </a> 911 <a href="https://www.instagram.com/servicespace" target="_blank" aria-label="Instagram"> 912 <i class="bi bi-instagram"></i> 913 </a> 914 <a href="https://www.youtube.com/charityfocus" target="_blank" aria-label="YouTube"> 915 <i class="bi bi-youtube"></i> 916 </a> 917 </div> 918 </div> 919 920 <!-- Projects Column (was Ecosystem) --> 921 <div class="ss-footer-column"> 922 <h4>Projects</h4> 923 <ul> 924 <li><a href="https://www.servicespace.org/projects">All Projects</a></li> 925 <li><a href="https://www.dailygood.org" target="_blank">DailyGood</a></li> 926 <li><a href="https://www.karmakitchen.org" target="_blank">Karma Kitchen</a></li> 927 <li><a href="https://www.awakin.org" target="_blank">Awakin Circles</a></li> 928 <li><a href="https://www.kindspring.org" target="_blank">KindSpring</a></li> 929 </ul> 930 </div> 931 932 <!-- Pods Column --> 933 <div class="ss-footer-column"> 934 <h4>Pods</h4> 935 <ul> 936 <li><a href="https://pod.servicespace.org/">What Are Pods?</a></li> 937 <li><a href="https://pod.servicespace.org/apply">Join a Pod</a></li> 938 <li><a href="https://pod.servicespace.org/about">Our Approach</a></li> 939 <li><a href="https://pod.servicespace.org/host">Host a Pod</a></li> 940 <li><a href="https://pod.servicespace.org/faq">FAQ</a></li> 941 </ul> 942 </div> 943 944 <!-- About Column --> 945 <div class="ss-footer-column"> 946 <h4>About</h4> 947 <ul> 948 <li><a href="https://www.servicespace.org/about">About Us</a></li> 949 <li><a href="https://www.servicespace.org/join">Get Involved</a></li> 950 <li><a href="https://www.servicespace.org/donate">Donate</a></li> 951 <li><a href="https://pod.servicespace.org/contact">Contact Us</a></li> 952 <li><a href="https://pod.servicespace.org/privacy">Privacy</a>, <a href="https://pod.servicespace.org/terms">Terms</a></li> 953 </ul> 954 </div> 955 956 </div> 957 958 <div class="ss-footer-bottom"> 959 <p class="ss-footer-copyright"> 960 <a href="https://creativecommons.org/licenses/by-nc-nd/4.0/" target="_blank" rel="license" class="cc-license">
961 <span class="cc-icons"> 962 <i class="bi bi-cc-circle"></i> 963 <i class="bi bi-person-circle"></i> 964 </span> 965 <span>CC BY-NC-ND 4.0</span> 966 </a> 967 </p> 968 <p class="ss-footer-gift"> 969 <i class="bi bi-gift"></i> 970 100% volunteer-run. No ads. No fundraising. Just love. 971 </p> 972 </div> 973 974 </div> 975 </footer> 976 977 <!-- Swiper JS (for carousels) --> 978
978<script src="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.js"></script>
978 979 980 <!-- ============================================ 981 SCRIPTS 982 ============================================ --> 983 984 985 986 <!-- Google Analytics --> 987
987<script>
vendor: 368 bytes, lines 987-992
987 988 (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ 989 (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), 990 m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) 991 })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); 992 ga('create', '
992UA-472633-14
vendor: 48 bytes, lines 992-994
992', 'auto'); 993 ga('send', 'pageview'); 994
994</script>
994 995 996 997
997<script> 998(function() { 999 'use strict'; 1000 console.log('SSO: Script starting'); 1001 1002 // Skip SSO on dev/coder environments â no production Pod to check against 1003 if (window.location.hostname.endsWith('.coder.dev.servicespace.org')) { 1004 console.log('SSO: Dev environment detected, skipping SSO check'); 1005 return; 1006 } 1007 1008 // 2026-09-10: Skip on Pod itself. Pod is the SSO primary -- there is no 1009 // other site whose cookie could log a Pod guest in. Running this here 1010 // (pod's welcome/tpl/footer_global.tpl includes it) sent cold-session 1011 // visitors through check.php with return=pod.servicespace.org, which 1012 // check.php rejected with a blank "Invalid return URL domain" page. 1013 if (window.location.hostname === 'pod.servicespace.org') { 1014 console.log('SSO: On Pod (primary), skipping SSO check'); 1015 return; 1016 } 1017 1018 // Cooldown periods (in milliseconds) 1019 var QUICK_COOLDOWN = 10000; // 10 seconds - between any checks (per-tab) 1020 var NOT_LOGGED_IN_TTL = 1800000; // 30 minutes - how long to remember "not logged in" 1021 var VISIBILITY_MIN_AGE = 300000; // 5 minutes - min age before tab-switch triggers recheck 1022 1023 // When user returns to this tab after being away a while, clear the 1024 // "not logged in" cache so we re-check SSO status. This handles the 1025 // case where user logs in on another tab/site then returns here. 1026 document.addEventListener('visibilitychange', function() { 1027 if (document.visibilityState === 'visible') { 1028 var checkedAt = parseInt(localStorage.getItem('sso_not_logged_in_at') || '0'); 1029 if (checkedAt && (Date.now() - checkedAt >= VISIBILITY_MIN_AGE)) { 1030 console.log('SSO: Tab visible after 5+ min, clearing cache for fresh check'); 1031 localStorage.removeItem('sso_not_logged_in_at'); 1032 sessionStorage.removeItem('sso_last_attempt'); 1033 } 1034 } 1035 }); 1036 1037 // Check if user just logged out - skip SSO check to prevent re-login loop 1038 if (document.cookie.indexOf('sso_logout=') !== -1) { 1039 console.log('SSO: Recent logout detected, skipping check'); 1040 // Clear the cookie now that we've respected it 1041 document.cookie = 'sso_logout=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;'; 1042 // Also cache that we're not logged in (prevents check on next tab) 1043 localStorage.setItem('sso_not_logged_in_at', Date.now().toString()); 1044 return; 1045 } 1046 1047 var urlParams = new URLSearchParams(window.location.search); 1048 var ssoToken = urlParams.get('sso_token'); 1049 1050 // Handle returning from redirect-based flow with sso_token 1051 if (ssoToken) { 1052 console.log('SSO: Has sso_token from redirect flow, completing login'); 1053 sessionStorage.setItem('sso_last_attempt', Date.now().toString()); 1054 // Clear the "not logged in" cache since we're about to log in 1055 localStorage.removeItem('sso_not_logged_in_at'); 1056 1057 // Clean the URL by removing sso_token parameter 1058 var cleanUrl = window.location.href.split('?')[0]; 1059 var params = new URLSearchParams(window.location.search); 1060 params.delete('sso_token'); 1061 params.delete('sso_checked'); 1062 var remainingParams = params.toString(); 1063 if (remainingParams) { 1064 cleanUrl += '?' + remainingParams; 1065 } 1066 1067 // Redirect to local login endpoint with the token 1068 window.location.href = '/sso/login.php?token=' + 1069 encodeURIComponent(ssoToken) + 1070 '&return=' + encodeURIComponent(cleanUrl); 1071 return; 1072 } 1073 1074 // If sso_checked flag is present, Pod confirmed we're not logged in there 1075 if (urlParams.get('sso_checked')) { 1076 console.log('SSO: sso_checked param present, user not logged in on Pod'); 1077 // Store in localStorage so ALL tabs know we're not logged in 1078 localStorage.setItem('sso_not_logged_in_at', Date.now().toString()); 1079 sessionStorage.setItem('sso_last_attempt', Date.now().toString()); 1080 // Clean sso_checked from URL so it doesn't appear in shared/copied links 1081 var params = new URLSearchParams(window.location.search); 1082 params.delete('sso_checked'); 1083 var clean = params.toString(); 1084 var cleanUrl = window.location.pathname + (clean ? '?' + clean : '') + window.location.hash; 1085 history.replaceState(null, '', cleanUrl); 1086 return; 1087 } 1088
1089 // Check localStorage cache: are we already confirmed "not logged in"? 1090 var notLoggedInAt = parseInt(localStorage.getItem('sso_not_logged_in_at') || '0'); 1091 if (notLoggedInAt && (Date.now() - notLoggedInAt < NOT_LOGGED_IN_TTL)) { 1092 console.log('SSO: Cached not-logged-in (' + Math.round((NOT_LOGGED_IN_TTL - (Date.now() - notLoggedInAt))/60000) + ' min remaining), skipping'); 1093 return; 1094 } 1095 1096 // Quick cooldown: Don't check too frequently within same tab (10 seconds) 1097 var lastAttempt = parseInt(sessionStorage.getItem('sso_last_attempt') || '0'); 1098 if (Date.now() - lastAttempt < QUICK_COOLDOWN) { 1099 console.log('SSO: Within quick cooldown, skipping check'); 1100 return; 1101 } 1102 1103 // Prevent concurrent checks 1104 if (window.ssoChecking) { 1105 console.log('SSO: Already checking, skipping'); 1106 return; 1107 } 1108 window.ssoChecking = true; 1109 1110 // Helper function to do redirect-based SSO check 1111 function doRedirectCheck() { 1112 console.log('SSO: Using redirect approach'); 1113 sessionStorage.setItem('sso_last_attempt', Date.now().toString()); 1114 var returnUrl = encodeURIComponent(window.location.href); 1115 window.location.href = 'https://pod.servicespace.org/sso/check.php?return=' + returnUrl; 1116 } 1117 1118 // Check if we already tried fetch and it failed (use redirect instead) 1119 var fetchFailed = sessionStorage.getItem('sso_fetch_failed'); 1120 if (fetchFailed) { 1121 console.log('SSO: Fetch previously failed, using redirect approach'); 1122 sessionStorage.removeItem('sso_fetch_failed'); 1123 doRedirectCheck(); 1124 return; 1125 } 1126 1127 console.log('SSO: Starting fetch to Pod status endpoint'); 1128 1129 // Try fetch approach first (works when third-party cookies allowed) 1130 fetch('https://pod.servicespace.org/sso/status.php', { 1131 method: 'GET', 1132 credentials: 'include', 1133 mode: 'cors', 1134 cache: 'no-store' 1135 }) 1136 .then(function(response) { 1137 console.log('SSO: Got response', response.status); 1138 if (!response.ok) throw new Error('Network error: ' + response.status); 1139 return response.json(); 1140 }) 1141 .then(function(data) { 1142 console.log('SSO: Parsed data', data); 1143 sessionStorage.setItem('sso_last_attempt', Date.now().toString()); 1144 1145 if (data.logged_in && data.token) { 1146 console.log('SSO: User logged in on Pod, redirecting to local login');
1147 // Clear cached "not logged in" since user IS logged in 1148 localStorage.removeItem('sso_not_logged_in_at'); 1149 window.location.href = '/sso/login.php?token=' + 1150 encodeURIComponent(data.token) + 1151 '&return=' + encodeURIComponent(window.location.href); 1152 } else if (!data.logged_in && data.cookie_present === false) { 1153 // Third-party cookies are blocked! 1154 // Pod didn't receive any cookies, so it can't know if user is logged in 1155 // Try redirect fallback which uses first-party Pod cookie 1156 console.log('SSO: Cookies blocked (third-party), trying redirect fallback'); 1157 doRedirectCheck(); 1158 } else { 1159 console.log('SSO: Not logged in on Pod (confirmed with cookies present)'); 1160 // User genuinely not logged in on Pod - cache in localStorage 1161 localStorage.setItem('sso_not_logged_in_at', Date.now().toString()); 1162 window.ssoChecking = false; 1163 } 1164 }) 1165 .catch(function(error) { 1166 console.log('SSO: Fetch failed:', error.message); 1167 // Mark that fetch failed so we use redirect 1168 sessionStorage.setItem('sso_fetch_failed', '1'); 1169 sessionStorage.setItem('sso_last_attempt', Date.now().toString()); 1170 doRedirectCheck(); 1171 }); 1172})(); 1173</script>
1173 1174 1175</body> 1176</html> 1177
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.