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" /> 6 <title>For Families | Carpool.School</title> 7 <meta name="description" content="Connect with families in your community. Find nearby parents, coordinate carpools, and stay in the loop. Free for families, forever." /> 8 9 <link rel="icon" type="image/png" href="/assets/images/favicon.png" /> 10 11 12 13
13<script type="application/ld+json"> 14 { 15 "@context": "https://schema.org", 16 "@type": "Organization", 17 "name": "Carpool.School", 18 "url": "https://carpool.school", 19 "logo": "https://carpool.school/assets/images/logo-mark.png", 20 "sameAs": [ 21 "https://www.linkedin.com/company/carpool-school/", 22 "https://www.facebook.com/profile.php?id=100089203043240", 23 "https://twitter.com/CarpoolSchool", 24 "https://www.instagram.com/carpool.school/" 25 ] 26 } 27 </script>
27 28 29 30 31 32 <meta property="og:type" content="website" /> 33 <meta property="og:title" content="For Families | Carpool.School" /> 34 <meta property="og:description" content="Connect with families in your community. Find nearby parents, coordinate carpools, and stay in the loop. Free for families, forever." /> 35 <meta property="og:image" content="https://carpool.school/assets/images/og-card.png" /> 36 <meta name="twitter:card" content="summary_large_image" /> 37 <meta name="twitter:title" content="For Families" /> 38 <meta name="twitter:description" content="Connect with families in your community. Find nearby parents, coordinate carpools, and stay in the loop. Free for families, forever." /> 39 <meta name="twitter:image" content="https://carpool.school/assets/images/og-card.png" /> 40 41 <link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&family=Fraunces:ital,opsz,wght@0,9..144,400..600;1,9..144,400..600&display=swap" rel="stylesheet" /> 42 <link rel="stylesheet" href="/assets/styles.6853c22e78.css" /> 43 44
45<script> 46 ;(function (w, d, s, l, i) { 47 w[l] = w[l] || [] 48 w[l].push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' }) 49 var f = d.getElementsByTagName(s)[0], j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : '' 50 j.async = true 51 j.src = 'https://www.googletagmanager.com/gtm.js?id=' + i + dl 52 f.parentNode.insertBefore(j, f) 53 })(window, document, 'script', 'dataLayer', 'GTM-56VQSNS') 54</script>
54 55 56</head> 57<body style="padding-top:68px">
vendor: 70 bytes, lines 57-58
57 58 <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
58GTM-56VQSNS
vendor: 91 bytes, lines 58-62
58" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> 59 60 61 62
63<nav class="cs-nav"> 64 <div class="nav-inner"> 65 <button id="menu-btn" class="nav-menu-btn" aria-label="Toggle menu"> 66 <svg id="menu-icon" width="22" height="22" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" d="M4 6h16M4 12h16M4 18h16"/></svg> 67 </button> 68 <a href="/" class="brand-mark"> 69 <img src="/assets/images/logo-mark.png" alt=""> 70 <span class="logo-text">Carpool.School</span> 71 </a> 72 73 74 <ul class="nav-links"> 75 <li><a href="/families/" aria-current="page">Families</a></li> 76 <li><a href="/schools/">Schools & Organizations</a></li> 77 <li><a href="/#pricing">Pricing</a></li> 78 <li><a href="/blog/">Blog</a></li> 79 </ul> 80 81 <div class="nav-right"> 82 83 <div class="nav-signed-out" data-nav-signed-out> 84 <a href="https://app.carpool.school/signin" class="nav-cta outline" data-app-href="/signin">Sign in</a> 85 <a href="https://app.carpool.school/signup" class="nav-cta" data-app-href="/signup" data-track data-event="signup_click" data-location="nav"> 86 Get started 87 <svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"><path d="M5 12h14M13 5l7 7-7 7"/></svg> 88 </a> 89 </div> 90 91 <div class="nav-identity-wrap hidden" data-nav-identity> 92 <button type="button" class="nav-identity" data-nav-identity-trigger aria-haspopup="menu" aria-expanded="false"> 93 <span class="nav-identity-avatar" data-nav-identity-initials></span> 94 <span class="nav-identity-name nav-identity-name-full" data-nav-identity-name-full></span> 95 <span class="nav-identity-name nav-identity-name-short" data-nav-identity-name-short></span> 96 <svg class="nav-identity-chevron" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m6 9 6 6 6-6"/></svg> 97 </button> 98 <div class="nav-identity-menu hidden" data-nav-identity-menu role="menu"> 99 <a role="menuitem" data-nav-identity-account> 100 <svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/></svg> 101 Account 102 </a> 103 <a role="menuitem" data-nav-identity-signout> 104 <svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4"/><polyline points="16 17 21 12 16 7"/><line x1="21" y1="12" x2="9" y2="12"/></svg> 105 Sign out 106 </a> 107 </div> 108 </div> 109 </div> 110 </div> 111</nav> 112 113<div id="mobile-menu" class="cs-nav-mobile hidden"> 114 <nav> 115 116 <a href="/families/">Families</a> 117 <a href="/schools/">Schools & Organizations</a> 118 <a href="/#pricing">Pricing</a> 119 <a href="/blog/">Blog</a> 120 121 <a href="https://app.carpool.school/signin" data-app-href="/signin">Sign in</a> 122 </nav> 123</div> 124 125 126 127<div class="cs-home"> 128 129 <!-- SUBPAGE HEADER --> 130 <section class="subhead"> 131 <div class="container"> 132 <span class="hero-eyebrow"> 133 Member-only family communities 134 </span> 135 <h1>Find the families<br><span class="serif">in your child's</span> <span class="hl">community.</span></h1> 136 <p class="sub-lead">Connect with families at your <b>school, daycare, team, or camp</b>. Coordinate carpools, pickups, and activities in one place.</p> 137 <div class="cta-row"> 138 <a href="https://apps.apple.com/app/id6443997462" class="btn-primary" data-track data-event="download_click" data-location="families_hero" data-platform="ios">Download for iOS 139 <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"><path d="M5 12h14M13 5l7 7-7 7"/></svg> 140 </a> 141 <a href="https://play.google.com/store/apps/details?id=school.carpool" class="btn-secondary" data-track data-event="download_click" data-location="families_hero" data-platform="android">Get on Android</a> 142 </div> 143 <div class="hero-fineprint"><span><b>Free</b> for families</span><span class="dot"></span><span>Private to your community</span></div> 144 </div> 145 </section> 146 147 <!-- TRUST BAND --> 148 <section class="trust"> 149 <div class="container"> 150 <div class="trust-inner">
151 <span class="trust-label">Communities on Carpool.School</span> 152 <div class="trust-scroll"> 153 <div class="trust-schools" data-communities-band></div> 154 </div> 155 <p class="trust-honesty">Parent-led communities are started by families. Organizations can claim their community and verify families against an official roster.</p> 156 </div> 157 </div> 158 </section> 159 160 <!-- WALKTHROUGH --> 161 <section class="s pillars" id="features"> 162 <div class="container"> 163 <div class="s-head"> 164 <span class="eyebrow center">How families use Carpool.School</span> 165 <h2>From your first ride to <span class="serif">year-long carpools</span>.</h2> 166 <p>Download the app, say hello to nearby families, meet up, then connect and carpool.</p> 167 </div> 168 169 <div class="walk-stack"> 170 171 <!-- 01 â Download the app --> 172 <div class="walk-row"> 173 <div class="walk-text"> 174 <div class="walk-step"> 175 <div class="ico"> 176 <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="5" y="2" width="14" height="20" rx="2"/><line x1="12" y1="18" x2="12.01" y2="18"/></svg> 177 </div> 178 </div> 179 <h3>Download the <span class="serif">app</span>.</h3> 180 <p>Sign in with your phone number. See nearby families on the same routes, and post a morning drop-off or afternoon pickup request.</p> 181 <p><b>The fastest way to find nearby families on the same routes.</b></p> 182 </div> 183 <div class="walk-phone"> 184 <div class="phone"> 185 <div class="screen"> 186 <img src="/assets/images/app/request.webp" alt="Post a new request and see nearby families" loading="lazy"> 187 </div> 188 </div> 189 </div> 190 </div> 191 192 <!-- 02 â Start a conversation --> 193 <div class="walk-row reverse"> 194 <div class="walk-text"> 195 <div class="walk-step"> 196 <div class="ico"> 197 <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/></svg> 198 </div> 199 </div> 200 <h3>Say <span class="serif">hello</span>.</h3> 201 <p>Browse families near you and message anyone whose location or schedule looks promising, or give a thumbs-up to a posted request. It's just a chat, not a commitment.</p> 202 <p><b>No public feed. No social media noise.</b></p> 203 </div> 204 <div class="walk-phone"> 205 <div class="phone"> 206 <div class="screen"> 207 <div class="mock"> 208 <div class="dot"></div> 209 <div class="mock-status"><span>9:41</span><span class="right">â¢â¢â¢</span></div> 210 <div class="mock-head"> 211 <span class="back">â¹</span> 212 <div class="ttl"><b>Soccer Moms</b><small>12 members</small></div> 213 <span class="more">â¯</span> 214 </div> 215 <div class="mock-chat"> 216 <div> 217 <div class="who">Jennifer L.</div> 218 <div class="msg"><div class="av" style="background:#d3b89a"></div><div class="bubble">Does anyone need a ride to practice today?</div></div> 219 <div class="time">8:31 AM</div> 220 </div> 221 <div> 222 <div class="msg me"><div class="bubble">Yes! I can help.</div></div> 223 <div class="time">8:32 AM â</div> 224 </div> 225 <div> 226 <div class="who">Sarah M.</div> 227 <div class="msg"><div class="av" style="background:#c9a584"></div><div class="bubble">I can also help on Tuesday.</div></div> 228 <div class="time">8:33 AM</div> 229 </div> 230 </div> 231 </div> 232 </div> 233 </div> 234 </div> 235 </div> 236 237 <!-- 03 â Connect with families --> 238 <div class="walk-row"> 239 <div class="walk-text"> 240 <div class="walk-step"> 241 <div class="ico"> 242 <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M19 8v6M22 11h-6"/></svg> 243 </div> 244 </div> 245 <h3>Connect with <span class="serif">families you trust</span>.</h3> 246 <p>Connecting is mutual - once they accept, you can assign each other as drivers. Meeting up first is a good way to know it's the right fit.</p> 247 <p><b>Only connected families can build a schedule together.</b></p> 248 </div> 249 <div class="walk-phone"> 250 <div class="phone"> 251 <div class="screen"> 252 <img src="/assets/images/app/connect.webp" alt="Send a connect request to another family" loading="lazy"> 253 </div> 254 </div> 255 </div> 256 </div> 257 258 <!-- 04 â Carpool --> 259 <div class="walk-row reverse"> 260 <div class="walk-text"> 261 <div class="walk-step"> 262 <div class="ico"> 263 <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="4" width="18" height="18" rx="2"/><line x1="16" y1="2" x2="16" y2="6"/><line x1="8" y1="2" x2="8" y2="6"/><line x1="3" y1="10" x2="21" y2="10"/></svg> 264 </div> 265 </div> 266 <h3><span class="serif">Carpool</span>.</h3> 267 <p>Share your driving schedules, take turns driving, and track pickups. No more "who's driving today?" texts.</p> 268 <p><b>Everything you need, in one place.</b></p> 269 </div> 270 <div class="walk-phone"> 271 <div class="phone"> 272 <div class="screen"> 273 <img src="/assets/images/app/schedule.webp" alt="Schedule and recurring plans" loading="lazy"> 274 </div> 275 </div> 276 </div> 277 </div> 278 279 </div> 280 </div> 281 </section> 282 283 <!-- HOW TO JOIN (4-step) --> 284 <section class="s" id="how"> 285 <div class="container"> 286 <div class="s-head">
287 <span class="eyebrow center">Getting started</span> 288 <h2>How to <span class="serif">join</span>.</h2> 289 <p>Communities are started by schools, organizations, PTAs, or parents. Joining your community is quick and free.</p> 290 </div> 291 <div class="how-grid how-grid--4"> 292 <div class="step"> 293 <div class="step-num">01</div> 294 <div class="step-ico"> 295 <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="5" width="18" height="14" rx="2"/><polyline points="3 7 12 13 21 7"/></svg> 296 </div> 297 <div class="step-body"> 298 <h3>Get an invite</h3> 299 <p>Receive an invite link from your community.</p> 300 </div> 301 </div> 302 <div class="step"> 303 <div class="step-num">02</div> 304 <div class="step-ico"> 305 <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><line x1="20" y1="8" x2="20" y2="14"/><line x1="23" y1="11" x2="17" y2="11"/></svg> 306 </div> 307 <div class="step-body"> 308 <h3>Create your account</h3> 309 <p>Verify your phone and build your family profile.</p> 310 </div> 311 </div> 312 <div class="step"> 313 <div class="step-num">03</div> 314 <div class="step-ico"> 315 <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 0 0-3-3.87"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/></svg> 316 </div> 317 <div class="step-body"> 318 <h3>Join your community</h3> 319 <p>See the families, groups, and requests connected to your school or activity.</p> 320 </div> 321 </div> 322 <div class="step"> 323 <div class="step-num">04</div> 324 <div class="step-ico step-ico-trio"> 325 <span class="mini"><svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/></svg></span> 326 <span class="mini"><svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="4" width="18" height="18" rx="2"/><line x1="16" y1="2" x2="16" y2="6"/><line x1="8" y1="2" x2="8" y2="6"/><line x1="3" y1="10" x2="21" y2="10"/></svg></span> 327 <span class="mini"><svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.1" stroke-linecap="round" stroke-linejoin="round"><path d="M20 10c0 6-8 12-8 12s-8-6-8-12a8 8 0 0 1 16 0z"/><circle cx="12" cy="10" r="3"/></svg></span> 328 </div> 329 <div class="step-body"> 330 <h3>Coordinate rides</h3> 331 <p>Message families, compare schedules, and build carpools that work for your family.</p> 332 </div> 333 </div> 334 </div> 335 </div> 336 </section> 337 338 <!-- PRIVACY & SAFETY --> 339 <section class="s trust-edit" id="trust"> 340 <div class="container"> 341 <div class="s-head"> 342 <span class="eyebrow center light">Privacy & safety</span> 343 <h2>Built around <span class="serif">your family</span>.</h2> 344 <p>You choose who sees your profile, who you connect with, and when. We never sell your information.</p> 345 </div> 346 <div class="trust-grid trust-grid--3col"> 347 348 <!-- Card 1: Private by default --> 349 <div class="trust-card"> 350 <div class="trust-head"> 351 <div class="ti"> 352 <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2 4 5v6c0 5 3.5 9 8 11 4.5-2 8-6 8-11V5l-8-3z"/>
352<rect x="9" y="11" width="6" height="5" rx="1"/><path d="M10.5 11V9.5a1.5 1.5 0 0 1 3 0V11"/></svg> 353 </div> 354 <h3>Private<br>by default</h3> 355 </div> 356 <div class="trust-illo" aria-hidden="true"> 357 <svg viewBox="0 0 320 170" preserveAspectRatio="xMidYMid meet"> 358 <defs> 359 <radialGradient id="glow1" cx="50%" cy="55%" r="40%"> 360 <stop offset="0%" stop-color="#ffc904" stop-opacity=".55"/> 361 <stop offset="60%" stop-color="#ffc904" stop-opacity=".08"/> 362 <stop offset="100%" stop-color="#ffc904" stop-opacity="0"/> 363 </radialGradient> 364 </defs> 365 <g stroke="rgba(255,255,255,.07)" stroke-width="1"> 366 <path d="M40 130 L160 60 L280 130"/> 367 <path d="M40 100 L160 30 L280 100"/> 368 <path d="M40 70 L160 0"/> 369 <path d="M280 70 L160 0"/> 370 <path d="M40 70 L40 130"/> 371 <path d="M280 70 L280 130"/> 372 <path d="M160 0 L160 60"/> 373 </g> 374 <ellipse cx="160" cy="100" rx="110" ry="40" fill="url(#glow1)"/> 375 <g fill="#1c2536" stroke="rgba(255,255,255,.12)" stroke-width="1" stroke-linejoin="round"> 376 <g transform="translate(50,90)"> 377 <path d="M0 14 L14 0 L28 14 L28 30 L0 30 Z"/> 378 <rect x="11" y="18" width="6" height="12" fill="#ffc904" fill-opacity=".55" stroke="none"/> 379 </g> 380 <g transform="translate(244,90)"> 381 <path d="M0 14 L14 0 L28 14 L28 30 L0 30 Z"/> 382 <rect x="11" y="18" width="6" height="12" fill="#ffc904" fill-opacity=".35" stroke="none"/> 383 </g> 384 <g transform="translate(95,55)"> 385 <path d="M0 12 L12 0 L24 12 L24 26 L0 26 Z"/> 386 <rect x="9" y="15" width="6" height="11" fill="#ffc904" fill-opacity=".25" stroke="none"/> 387 </g> 388 <g transform="translate(205,55)"> 389 <path d="M0 12 L12 0 L24 12 L24 26 L0 26 Z"/> 390 <rect x="9" y="15" width="6" height="11" fill="#ffc904" fill-opacity=".45" stroke="none"/> 391 </g> 392 </g> 393 <g transform="translate(160,72)"> 394 <path d="M0 -8 C-14 -8 -22 2 -22 14 C-22 26 -10 38 0 50 C10 38 22 26 22 14 C22 2 14 -8 0 -8 Z" fill="#0b1220" stroke="#ffc904" stroke-width="2"/> 395 <circle cx="0" cy="14" r="9" fill="#ffc904"/> 396 <circle cx="0" cy="14" r="15" fill="#ffc904" fill-opacity=".15"/> 397 </g> 398 </svg> 399 </div> 400 <hr> 401 <ul class="trust-list"> 402 <li> 403 <span class="chk"></span> 404 <div><b>Community-scoped</b><span>Only members of your community can see your profile.</span></div> 405 </li> 406 <li> 407 <span class="chk"></span> 408 <div><b>No exact address</b><span>Maps show a neighborhood pin. Your address is never shown.</span></div> 409 </li> 410 <li> 411 <span class="chk"></span> 412 <div><b>Never sold</b><span>Your data is never sold to advertisers, brokers, or third parties.</span></div> 413 </li> 414 </ul> 415 </div> 416 417 <!-- Card 2: Family controlled --> 418 <div class="trust-card"> 419 <div class="trust-head"> 420 <div class="ti"> 421 <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="9" cy="8" r="3"/><circle cx="17" cy="9" r="2.5"/><path d="M3 20c0-3 2.7-5 6-5s6 2 6 5"/><path d="M14 19c.4-2 2.1-3.2 4-3.2 2 0 3.5 1.2 3.9 3.2"/></svg> 422 </div> 423 <h3>Family<br>controlled</h3> 424 </div> 425 <div class="trust-illo" aria-hidden="true"> 426 <svg viewBox="0 0 320 170" preserveAspectRatio="xMidYMid meet"> 427 <defs> 428 <radialGradient id="glow2" cx="50%" cy="55%" r="45%"> 429 <stop offset="0%" stop-color="#ffc904" stop-opacity=".22"/>
429 430 <stop offset="100%" stop-color="#ffc904" stop-opacity="0"/> 431 </radialGradient> 432 </defs> 433 <ellipse cx="160" cy="110" rx="140" ry="50" fill="url(#glow2)"/> 434 <g transform="translate(80,38)"> 435 <circle cx="0" cy="0" r="20" fill="#2a3447" stroke="rgba(255,255,255,.12)"/> 436 <circle cx="0" cy="0" r="13" fill="#e8c9a8"/> 437 <path d="M-18 -8 Q-20 14 -6 18 L-2 -2 Z" fill="#2a3447"/> 438 <path d="M-22 30 Q-22 80 0 80 L0 50 Z" fill="#2a3447"/> 439 <path d="M-22 30 L0 30 L0 80 L-22 80 Z" fill="#2a3447"/> 440 <rect x="-22" y="28" width="44" height="58" rx="6" fill="#2a3447" stroke="rgba(255,255,255,.10)"/> 441 <rect x="6" y="48" width="14" height="22" rx="2.5" fill="#0b1220" stroke="#ffc904" stroke-width="1"/> 442 <rect x="8" y="51" width="10" height="14" fill="#ffc904" fill-opacity=".2"/> 443 </g> 444 <g transform="translate(240,38)"> 445 <circle cx="0" cy="0" r="20" fill="#2a3447" stroke="rgba(255,255,255,.12)"/> 446 <circle cx="0" cy="0" r="13" fill="#d9b48a"/> 447 <path d="M-13 -10 Q-12 -16 -4 -16 Q8 -16 13 -8 Q13 -2 8 -2 L-8 -2 Z" fill="#2a3447"/> 448 <rect x="-22" y="28" width="44" height="58" rx="6" fill="#2a3447" stroke="rgba(255,255,255,.12)"/> 449 <rect x="-20" y="48" width="14" height="22" rx="2.5" fill="#0b1220" stroke="#ffc904" stroke-width="1"/> 450 <rect x="-18" y="51" width="10" height="14" fill="#ffc904" fill-opacity=".2"/> 451 </g> 452 <g transform="translate(160,58)"> 453 <circle cx="0" cy="0" r="16" fill="#2a3447" stroke="rgba(255,255,255,.12)"/> 454 <circle cx="0" cy="0" r="10.5" fill="#f0d4b2"/> 455 <path d="M-12 -4 Q-10 -14 0 -14 Q10 -14 12 -4 L8 -2 L-8 -2 Z" fill="#2a3447"/> 456 <rect x="-18" y="22" width="36" height="50" rx="5" fill="#ffc904" fill-opacity=".85" stroke="rgba(255,255,255,.15)"/> 457 </g> 458 <g transform="translate(160,18)"> 459 <path d="M-22 -10 Q-22 -22 -10 -22 L10 -22 Q22 -22 22 -10 L22 4 Q22 14 12 14 L4 14 L0 20 L-4 14 L-10 14 Q-22 14 -22 4 Z" fill="#1c2536" stroke="rgba(255,255,255,.18)"/> 460 <circle cx="0" cy="-4" r="9" fill="#ffc904"/> 461 <polyline points="-4,-4 -1,-1 4,-7" fill="none" stroke="#0b1220" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 462 </g> 463 </svg> 464 </div> 465 <hr> 466 <ul class="trust-list"> 467 <li> 468 <span class="chk"></span> 469 <div><b>You choose who you contact</b><span>You decide which families you message, pause requests anytime, or delete your account from settings.</span></div> 470 </li> 471 <li> 472 <span class="chk"></span> 473 <div><b>You vet your partners</b><span>Meet new carpool partners in person, confirm insurance and driving history, just as you would with any informal carpool.</span></div> 474 </li> 475 <li> 476 <span class="chk"></span> 477 <div><b>Participation is always optional</b><span>You opt in and control your involvement every step of the way.</span></div> 478 </li> 479 </ul> 480 </div> 481 482 <!-- Card 3: School backed --> 483 <div class="trust-card"> 484 <div class="trust-head"> 485 <div class="ti"> 486 <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 21V11l9-6 9 6v10"/><path d="M9 21v-7h6v7"/><path d="M12 5V2"/><path d="M11 2h2"/></svg> 487 </div> 488 <h3>Organization<br>backed</h3> 489 </div> 490 <div class="trust-illo" aria-hidden="true"> 491 <svg viewBox="0 0 320 170" preserveAspectRatio="xMidYMid meet"> 492 <defs> 493 <radialGradient id="glow3" cx="50%" cy="65%" r="40%"> 494 <stop offset="0%" stop-color="#ffc904" stop-opacity=".30"/> 495 <stop offset="100%" stop-color="#ffc904" stop-opacity="0"/> 496 </radialGradient> 497 </defs> 498 <ellipse cx="160" cy="135" rx="130" ry="28" fill="url(#glow3)"/> 499 <g fill="#1a2230" stroke="rgba(255,255,255,.08)"> 500 <path d="M40 130 Q40 100 52 100 Q64 100 64 130 Z"/> 501 <path d="M268 130 Q268 102 280 102 Q292 102 292 130 Z"/> 502 </g> 503 <g stroke="rgba(255,255,255,.14)" stroke-linejoin="round"> 504 <rect x="80" y="70" width="160" height="60" fill="#2a3447"/> 505 <rect x="140" y="40" width="40" height="40" fill="#2a3447"/> 506 <path d="M138 40 L160 22 L182 40 Z" fill="#3a455c"/> 507 <circle cx="160" cy="55" r="7" fill="#0b1220" stroke="#ffc904" stroke-width="1.5"/> 508 <line x1="160" y1="55" x2="160" y2="51" stroke="#ffc904" stroke-width="1.5" stroke-linecap="round"/> 509 <line x1="160" y1="55" x2="163" y2="55" stroke="#ffc904" stroke-width="1.5" stroke-linecap="round"/> 510 <line x1="160" y1="22" x2="160" y2="10" stroke="rgba(255,255,255,.3)" stroke-width="1.2"/> 511 <path d="M160 11 L170 14 L160 17 Z" fill="#ffc904" stroke="none"/> 512 <g fill="#ffc904" fill-opacity=".55" stroke="none"> 513 <rect x="92" y="84" width="14" height="18" rx="1"/> 514 <rect x="110" y="84" width="14" height="18" rx="1" fill-opacity=".3"/> 515 <rect x="196" y="84" width="14" height="18" rx="1" fill-opacity=".3"/> 516 <rect x="214" y="84" width="14" height="18" rx="1"/> 517 </g> 518 <rect x="152" y="60" width="16" height="20" fill="#0b1220" stroke="rgba(255,255,255,.18)"/> 519 <line x1="40" y1="130" x2="292" y2="130" stroke="rgba(255,255,255,.10)"/> 520 </g> 521 <g transform="translate(200,108)"> 522 <path d="M0 -22 L20 -16 L20 0 C20 14 10 22 0 26 C-10 22 -20 14 -20 0 L-20 -16 Z" fill="#0b1220" stroke="#ffc904" stroke-width="2"/> 523 <path d="M0 -22 L20 -16 L20 0 C20 14 10 22 0 26 C-10 22 -20 14 -20 0 L-20 -16 Z" fill="#ffc904" fill-opacity=".10"/> 524 <polyline points="-8,2 -2,8 9,-6" fill="none" stroke="#ffc904" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"/> 525 </g> 526 </svg> 527 </div> 528 <hr> 529 <ul class="trust-list"> 530 <li>
531 <span class="chk"></span> 532 <div><b>Verified communities</b><span>Schools and organizations can make their community official.</span></div> 533 </li> 534 <li> 535 <span class="chk"></span> 536 <div><b>Roster verification</b><span>Families are verified against the organization's official roster.</span></div> 537 </li> 538 <li> 539 <span class="chk"></span> 540 <div><b>Real-time pickup coordination</b><span>If your school uses dismissal management, staff confirm identity before release and send live updates.</span></div> 541 </li> 542 </ul> 543 </div> 544 545 </div> 546 547 <!-- Privacy promise bar --> 548 <div class="trust-promise"> 549 <div class="lock"> 550 <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="4" y="11" width="16" height="10" rx="2"/><path d="M8 11V7a4 4 0 0 1 8 0v4"/><circle cx="12" cy="16" r="1.2" fill="currentColor"/></svg> 551 </div> 552 <div class="promise-text"> 553 <h4>Privacy is our promise.</h4> 554 <p>We're a connection platform, not a data broker. Your trust comes first.</p> 555 </div> 556 <a href="/blog/posts/how-privacy-works/" class="promise-link">Learn more about our privacy <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"/><polyline points="12 5 19 12 12 19"/></svg></a> 557 </div> 558 559 </div> 560 </section> 561 562 <!-- FAQ --> 563 <section class="s faq" id="faq"> 564 <div class="container"> 565 <div class="s-head"> 566 <span class="eyebrow center">Common questions</span> 567 <h2>Family <span class="serif">questions</span>.</h2> 568 <p>What families most often ask before joining Carpool.School.</p> 569 </div> 570 <div class="faq-wrap"> 571 <h4 class="faq-group">Getting started</h4> 572 <details class="faq-item"> 573 <summary>Do families pay to use Carpool.School?</summary> 574 <div class="faq-body">Carpool.School is always free for families. When a school or other organization claims and verifies its community, the organization pays the subscription. Parent-led communities remain free for everyone.</div> 575 </details> 576 <details class="faq-item"> 577 <summary>Can I use the app if my school hasn't launched it?</summary> 578 <div class="faq-body">A community must exist before you can join it. Your school, PTA, or another parent can start one. If yours isn't listed yet, ask an organizer - or start it yourself.</div> 579 </details> 580 <details class="faq-item"> 581 <summary>How do I sign up?</summary> 582 <div class="faq-body"> 583 <p style="margin-bottom:10px">You join Carpool.School through your community. There are two paths:</p> 584 <ul style="margin:0;padding-left:20px;display:flex;flex-direction:column;gap:6px"> 585 <li><b>From your school or org</b> - if your school has a Verified community, you'll receive a personal invite link by email once they upload their roster. Open it, verify your phone, and create your profile.</li> 586 <li><b>From another parent</b> - if a parent in your community has already started it, they can share an invite link with you. Some parent-led communities are open enrollment, meaning any family at the school can join without a link.</li> 587 </ul> 588 </div> 589 </details> 590 591 <h4 class="faq-group">Finding & organizing rides</h4> 592 <details class="faq-item"> 593 <summary>Who can join my community?</summary> 594 <div class="faq-body">Parent-led communities are intended for families connected to that school, daycare, team, camp, or activity. Members can see who has joined and who invited them. Verified communities add an official roster check - families must be on the organization's roster before joining, and the organization can remove anyone who does not belong.</div> 595 </details> 596 <details class="faq-item"> 597 <summary>What does Verified mean?</summary> 598 <div class="faq-body">Verified communities are claimed by the school, daycare, team, camp, or other organization. Families are verified against the organization's official roster before joining, and the organization can manage membership through its admin portal.</div> 599 </details> 600 <details class="faq-item"> 601 <summary>How do I find and connect with other families?</summary> 602 <div class="faq-body">After creating a carpool request, nearby families appear in map view and table view (browsable list). Send a direct message to any family, join activity-based groups, or create a private group for a dedicated carpool circle.</div> 603 </details> 604 <details class="faq-item"> 605 <summary>How do I set up a carpool request?</summary> 606 <div class="faq-body">Create a request by telling other families when and where you need help with transportation. Nearby families can discover your request, contact you directly, and decide whether a carpool makes sense. Requests can be updated or removed at any time.</div> 607 </details> 608 <details class="faq-item"> 609 <summary>Will a carpool automatically form once I set up a request?</summary> 610 <div class="faq-body">No. Setting up a request makes it possible for families to find you, but carpools only form when families choose to coordinate together. Many families use the app simply to discover nearby families before deciding whether to carpool.</div> 611 </details> 612 <details class="faq-item"> 613 <summary>Is participation mandatory?</summary> 614 <div class="faq-body">No. Carpool.School is always opt-in. Families who prefer not to participate simply don't create an account. Registered families can pause their carpool requests or delete their account anytime from app settings.</div> 615 </details> 616 <details class="faq-item"> 617 <summary>How does school pickup coordination work?</summary> 618 <div class="faq-body"> 619 <p style="margin-bottom:8px">If your school has enabled dismissal management, the app coordinates pickups with staff:</p> 620 <ul style="margin:0;padding-left:20px;
620display:flex;flex-direction:column;gap:6px"> 621 <li><b>Set pickup plans</b> - choose who is picking up your child and when.</li> 622 <li><b>Announce arrival</b> - share your location or tap to let the school know you've arrived.</li> 623 <li><b>Verification</b> - staff confirm your identity before releasing your child.</li> 624 <li><b>Last-minute changes</b> - update plans instantly; the school sees it immediately.</li> 625 </ul> 626 </div> 627 </details> 628 629 <h4 class="faq-group">Trust & safety</h4> 630 <details class="faq-item"> 631 <summary>Can other families see my exact address?</summary> 632 <div class="faq-body">No. Carpool.School never displays exact home addresses to other families. When you post a carpool request, a neighborhood pin appears on the map so nearby families can find you. Your address is never shown as text.</div> 633 </details> 634 <details class="faq-item"> 635 <summary>How does Carpool.School protect my family's privacy?</summary> 636 <div class="faq-body"> 637 <ul style="margin:0;padding-left:20px;display:flex;flex-direction:column;gap:6px"> 638 <li><b>Community-scoped visibility</b> - only members of your community can see your profile.</li> 639 <li><b>No exact addresses</b> - other families never see your exact home address.</li> 640 <li><b>Your data is never sold.</b> See our <a href="/legal/privacy/" style="color:var(--brand-deep);font-weight:600">Privacy Policy</a> for details.</li> 641 <li><b>You control connections</b> - you decide which families you message and coordinate with.</li> 642 </ul> 643 </div> 644 </details> 645 <details class="faq-item"> 646 <summary>Does Carpool.School do background checks on drivers?</summary> 647 <div class="faq-body">No. Carpool.School is a connection platform, not a vetting service. Parents are responsible for independently vetting anyone they choose to carpool with - just as you would with any informal carpool arrangement.</div> 648 </details> 649 <details class="faq-item"> 650 <summary>Who decides who I ride with?</summary> 651 <div class="faq-body">You do. The directory shows nearby families sorted by distance. You reach out to the ones that work for you. No auto-assignments, no system deciding who goes with whom. You can leave any pool anytime.</div> 652 </details> 653 <details class="faq-item"> 654 <summary>Who is liable for the actual carpool?</summary> 655 <div class="faq-body">Carpool.School helps families find each other and coordinate rides, but families decide who they ride with and are responsible for their own carpool arrangements. Carpool.School is not a transportation provider. See our <a href="/legal/terms/" style="color:var(--brand-deep);font-weight:600">Terms of Use</a> and <a href="/legal/eula/" style="color:var(--brand-deep);font-weight:600">EULA</a> for full details.</div> 656 </details> 657 <details class="faq-item"> 658 <summary>What are my responsibilities for carpool safety?</summary> 659 <div class="faq-body"> 660 <p style="margin-bottom:8px">You're responsible for the same care and judgment you'd use arranging a carpool with anyone else, on or off the app â Carpool.School doesn't screen or certify any user's safety. A few practices other families find useful, not a complete list:</p> 661 <ul style="margin:0;padding-left:20px;display:flex;flex-direction:column;gap:6px"> 662 <li>Meet new carpool partners in person, in a public place, before the first ride.</li> 663 <li>Verify their identity and confirm driving history, insurance, and vehicle condition.</li> 664 <li>Exchange emergency contact information before the first ride.</li> 665 <li>Carry a phone during rides in case you need to reach someone.</li> 666 <li>Only form carpools with families you feel completely comfortable with.</li> 667 <li>Trust your instincts - you are never obligated to participate.</li> 668 </ul> 669 </div> 670 </details> 671 672 <h4 class="faq-group">Communities & accounts</h4> 673 <details class="faq-item"> 674 <summary>
674What happens if my school later joins Carpool.School?</summary> 675 <div class="faq-body">Nothing is lost. If your school claims and verifies its community, existing families keep their accounts, connections, conversations, and carpool arrangements. The community simply gains additional features, including roster verification, organization oversight, and administrative tools.</div> 676 </details> 677 <details class="faq-item"> 678 <summary>Can I use Carpool.School for activities, camps, and teams - not just schools?</summary> 679 <div class="faq-body">Yes. A community can represent any group of families that regularly coordinate transportation together, including schools, daycares, camps, sports teams, clubs, classes, and other activities.</div> 680 </details> 681 <details class="faq-item"> 682 <summary>Can I use Carpool.School for children at different schools?</summary> 683 <div class="faq-body">Yes. If your children attend different schools that both use Carpool.School, add multiple schools to a single account and switch between networks from the same app.</div> 684 </details> 685 <details class="faq-item"> 686 <summary>Can I leave a community or delete my information?</summary> 687 <div class="faq-body">Yes. You can leave a community at any time. You may also request deletion of your account and personal information in accordance with our <a href="/legal/privacy/" style="color:var(--brand-deep);font-weight:600">Privacy Policy</a>. Once removed, your profile and information are no longer visible to other members of that community.</div> 688 </details> 689 <details class="faq-item"> 690 <summary>What devices does Carpool.School run on?</summary> 691 <div class="faq-body">Available as a native app on iOS and Android. You can also sign up on the web at <a href="https://app.carpool.school/signup" style="color:var(--brand-deep);font-weight:600">app.carpool.school</a>, but the full experience - push notifications, real-time location, and ride coordination - requires the mobile app.</div> 692 </details> 693 </div> 694 </div> 695 </section> 696 697 <!-- CTA --> 698 <section class="cta-band" id="cta"> 699 <div class="container"> 700 <span class="eyebrow center light">Get started</span> 701 <h2 style="margin-top:18px">Download the app. <span class="serif">Join your community.</span></h2> 702 <p>Free for families. Available on iOS and Android.</p> 703 <div class="cta-row"> 704 <a href="https://apps.apple.com/app/id6443997462" class="btn-primary" data-track data-event="download_click" data-location="families_final_band" data-platform="ios"> 705 <svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="M18.71 19.5c-.83 1.24-1.71 2.45-3.05 2.47-1.34.03-1.77-.79-3.29-.79-1.53 0-2 .77-3.27.82-1.31.05-2.3-1.32-3.14-2.53C4.25 17 2.94 12.45 4.7 9.39c.87-1.52 2.43-2.48 4.12-2.51 1.28-.02 2.5.87 3.29.87.78 0 2.26-1.07 3.81-.91.65.03 2.47.26 3.64 1.98-.09.06-2.17 1.28-2.15 3.81.03 3.02 2.65 4.03 2.68 4.04-.03.07-.42 1.44-1.38 2.83zM13 3.5c.73-.83 1.94-1.46 2.94-1.5.13 1.17-.34 2.35-1.04 3.19-.69.85-1.83 1.51-2.95 1.42-.15-1.15.41-2.35 1.05-3.11z"/></svg> 706 App Store 707 </a> 708 <a href="https://play.google.com/store/apps/details?id=school.carpool" class="btn-secondary" data-track data-event="download_click" data-location="families_final_band" data-platform="android"> 709 <svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="M3.609 1.814L13.792 12 3.61 22.186a.996.996 0 0 1-.61-.92V2.734a1 1 0 0 1 .609-.92zm10.89 10.893l2.302 2.302-10.937 6.333 8.635-8.635zm3.199-3.198l2.807 1.626a1 1 0 0 1 0 1.73l-2.808 1.626L15.206 12l2.492-2.491zM5.864 2.658L16.802 8.99l-2.303 2.303-8.635-8.635z"/></svg> 710 Google Play 711 </a> 712 </div> 713 </div> 714 </section> 715 716</div> 717 718 719 <footer class="cs-footer"> 720 <div class="container"> 721 <div class="foot-grid"> 722 <div> 723 <a href="/" class="foot-brand"> 724 <img src="/assets/images/logo-mark.png" alt=""> 725 <span>
725Carpool.School</span> 726 </a> 727 728 <p class="foot-tag">The carpool network for schools, camps, daycares, and youth programs.</p> 729 730 731 <div class="foot-stores"> 732 <a href="https://apps.apple.com/app/id6443997462" class="foot-store"> 733 <svg width="14" height="14" viewBox="0 0 24 24" fill="currentColor"><path d="M18.71 19.5c-.83 1.24-1.71 2.45-3.05 2.47-1.34.03-1.77-.79-3.29-.79-1.53 0-2 .77-3.27.82-1.31.05-2.3-1.32-3.14-2.53C4.25 17 2.94 12.45 4.7 9.39c.87-1.52 2.43-2.48 4.12-2.51 1.28-.02 2.5.87 3.29.87.78 0 2.26-1.07 3.8-.91.65.03 2.47.26 3.64 1.98-.09.06-2.17 1.28-2.15 3.81.03 3.02 2.65 4.03 2.68 4.04-.03.07-.42 1.44-1.38 2.83M13 3.5c.73-.83 1.94-1.46 2.94-1.5.13 1.17-.34 2.35-1.04 3.19-.69.85-1.83 1.51-2.95 1.42-.15-1.15.41-2.35 1.05-3.11z"/></svg> 734 Download on iOS 735 </a> 736 <a href="https://play.google.com/store/apps/details?id=school.carpool" class="foot-store"> 737 <svg width="14" height="14" viewBox="0 0 24 24" fill="currentColor"><path d="M3.609 1.814L13.792 12 3.61 22.186a.996.996 0 0 1-.61-.92V2.734a1 1 0 0 1 .609-.92zm10.89 10.893l2.302 2.302-10.937 6.333 8.635-8.635zm3.199-3.198l2.807 1.626a1 1 0 0 1 0 1.73l-2.808 1.626L15.206 12l2.492-2.491zM5.864 2.658L16.802 8.99l-2.303 2.303-8.635-8.635z"/></svg> 738 Get it on Android 739 </a> 740 </div> 741 742 </div> 743 744 <div class="foot-col"> 745 <h5>Product</h5> 746 <ul> 747 <li><a href="/#pricing">Pricing</a></li> 748 <li><a href="/families/">Families</a></li> 749 <li><a href="/schools/">Schools & Organizations</a></li> 750 </ul> 751 </div> 752 <div class="foot-col"> 753 <h5>Company</h5> 754 <ul> 755 <li><a href="/#about">About</a></li> 756 <li><a href="/blog/">Blog</a></li> 757 <li><a href="/#support">Contact</a></li> 758 </ul> 759 </div> 760 <div class="foot-col"> 761 <h5>Legal</h5> 762 <ul> 763 <li><a href="/legal/terms/">Terms and Conditions of Use</a></li> 764 <li><a href="/legal/privacy/">Privacy Policy</a></li> 765 <li><a href="/legal/eula/">End User License Agreement</a></li> 766 <li><a href="/legal/tos/">Terms of Service</a></li> 767 </ul> 768 </div> 769 770 </div> 771 <div class="foot-bottom"> 772 773 <span>© 2026 Carpool School Inc. · Built for families.</span> 774 775 <div class="socials"> 776 777 <a href="https://www.youtube.com/@Carpool.School" target="_blank" rel="noopener noreferrer" aria-label="YouTube"><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M19.615 3.184c-3.604-.246-11.631-.245-15.23 0-3.897.266-4.356 2.62-4.385 8.816.029 6.185.484 8.549 4.385 8.816 3.6.245 11.626.246 15.23 0 3.897-.266 4.356-2.62 4.385-8.816-.029-6.185-.484-8.549-4.385-8.816zm-10.615 12.816v-8l8 3.993-8 4.007z"/></svg></a> 778 <a href="https://www.linkedin.com/company/carpool-school/" target="_blank" rel="noopener noreferrer" aria-label="LinkedIn"><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M19 0h-14c-2.761 0-5 2.239-5 5v14c0 2.761 2.239 5 5 5h14c2.762 0 5-2.239 5-5v-14c0-2.761-2.238-5-5-5zm-11 19h-3v-11h3v11zm-1.5-12.268c-.966 0-1.75-.79-1.75-1.764s.784-1.764 1.75-1.764 1.75.79 1.75 1.764-.783 1.764-1.75 1.764zm13.5 12.268h-3v-5.604c0-3.368-4-3.113-4 0v5.604h-3v-11h3v1.765c1.396-2.586 7-2.777 7 2.476v6.759z"/></svg></a> 779 <a href="https://www.facebook.com/profile.php?id=100089203043240" target="_blank" rel="noopener noreferrer" aria-label="Facebook"><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M9 8h-3v4h3v12h5v-12h3.642l.358-4h-4v-1.667c0-.955.192-1.333 1.115-1.333h2.885v-5h-3.808c-3.596 0-5.192 1.583-5.192 4.615v3.385z"/></svg></a> 780 <a href="https://twitter.com/CarpoolSchool" target="_blank" rel="noopener noreferrer" aria-label="Twitter/X"><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M24 4.557c-.883.392-1.832.656-2.828.775 1.017-.609 1.798-1.574 2.165-2.724-.951.564-2.005.974-3.127 1.195-.897-.957-2.178-1.555-3.594-1.555-3.179 0-
7805.515 2.966-4.797 6.045-4.091-.205-7.719-2.165-10.148-5.144-1.29 2.213-.669 5.108 1.523 6.574-.806-.026-1.566-.247-2.229-.616-.054 2.281 1.581 4.415 3.949 4.89-.693.188-1.452.232-2.224.084.626 1.956 2.444 3.379 4.6 3.419-2.07 1.623-4.678 2.348-7.29 2.04 2.179 1.397 4.768 2.212 7.548 2.212 9.142 0 14.307-7.721 13.995-14.646.962-.695 1.797-1.562 2.457-2.549z"/></svg></a> 781 <a href="https://www.instagram.com/carpool.school/" target="_blank" rel="noopener noreferrer" aria-label="Instagram"><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2.163c3.204 0 3.584.012 4.85.07 3.252.148 4.771 1.691 4.919 4.919.058 1.265.069 1.645.069 4.849 0 3.205-.012 3.584-.069 4.849-.149 3.225-1.664 4.771-4.919 4.919-1.266.058-1.644.07-4.85.07-3.204 0-3.584-.012-4.849-.07-3.26-.149-4.771-1.699-4.919-4.92-.058-1.265-.07-1.644-.07-4.849 0-3.204.013-3.583.07-4.849.149-3.227 1.664-4.771 4.919-4.919 1.266-.057 1.645-.069 4.849-.069zm0-2.163c-3.259 0-3.667.014-4.947.072-4.358.2-6.78 2.618-6.98 6.98-.059 1.281-.073 1.689-.073 4.948 0 3.259.014 3.668.072 4.948.2 4.358 2.618 6.78 6.98 6.98 1.281.058 1.689.072 4.948.072 3.259 0 3.668-.014 4.948-.072 4.354-.2 6.782-2.618 6.979-6.98.059-1.28.073-1.689.073-4.948 0-3.259-.014-3.667-.072-4.947-.196-4.354-2.617-6.78-6.979-6.98-1.281-.059-1.69-.073-4.949-.073zm0 5.838c-3.403 0-6.162 2.759-6.162 6.162s2.759 6.163 6.162 6.163 6.162-2.759 6.162-6.163c0-3.403-2.759-6.162-6.162-6.162zm0 10.162c-2.209 0-4-1.79-4-4 0-2.209 1.791-4 4-4s4 1.791 4 4c0 2.21-1.791 4-4 4zm6.406-11.845c-.796 0-1.441.645-1.441 1.44s.645 1.44 1.441 1.44c.795 0 1.439-.645 1.439-1.44s-.644-1.44-1.439-1.44z"/></svg></a> 782 <a href="mailto:[email protected]" aria-label="Email"><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M0 3v18h24v-18h-24zm21.518 2l-9.518 7.713-9.518-7.713h19.036zm-19.518 14v-11.817l10 8.104 10-8.104v11.817h-20z"/></svg></a> 783 784 </div> 785 </div> 786 </div> 787</footer> 788 789
789<script> 790 // Runtime app base â the build already knows the right environment/brand 791 // (env.appUrl), so bake it in directly rather than re-deriving it from 792 // window.location at runtime. 793 const appBase = 'https://app.carpool.school' 794 795 document.querySelectorAll('[data-app-href]').forEach(el => { 796 el.href = appBase + el.dataset.appHref 797 }) 798 799 // Data layer + click tracking. Any element with data-track fires a dataLayer 800 // push on click using its data-event (default 'click') plus whatever other 801 // data-* attributes it carries, so tagging a new CTA never needs a new listener. 802 window.dataLayer = window.dataLayer || [] 803 document.addEventListener('click', (e) => { 804 const target = e.target.closest('[data-track]') 805 if (!target) return 806 window.dataLayer.push({ event: target.dataset.event || 'click', ...target.dataset }) 807 }) 808 809 // Mobile nav toggle 810 const menuBtn = document.getElementById('menu-btn') 811 const mobileMenu = document.getElementById('mobile-menu') 812 const menuIcon = document.getElementById('menu-icon') 813 814 function openMobileMenu() { 815 mobileMenu.classList.remove('hidden') 816 document.body.style.overflow = 'hidden' 817 menuIcon.innerHTML = '<path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/>' 818 } 819 820 function closeMobileMenu() { 821 mobileMenu.classList.add('hidden') 822 document.body.style.overflow = '' 823 menuIcon.innerHTML = '<path stroke-linecap="round" stroke-linejoin="round" d="M4 6h16M4 12h16M4 18h16"/>' 824 } 825 826 if (menuBtn && mobileMenu) { 827 menuBtn.addEventListener('click', (e) => { 828 e.stopPropagation() 829 mobileMenu.classList.contains('hidden') ? openMobileMenu() : closeMobileMenu() 830 }) 831 document.addEventListener('click', (e) => { 832 if (!mobileMenu.contains(e.target) && !menuBtn.contains(e.target)) closeMobileMenu() 833 }) 834 mobileMenu.querySelectorAll('a').forEach(l => l.addEventListener('click', () => closeMobileMenu())) 835 } 836 837 // Lite YouTube facade â loads iframe on click 838 document.querySelectorAll('.lite-yt').forEach(el => { 839 function activate() { 840 if (el.classList.contains('activated')) return 841 el.classList.add('activated') 842 const id = el.dataset.ytId 843 const iframe = document.createElement('iframe') 844 iframe.src = `https://www.youtube-nocookie.com/embed/${id}?autoplay=1&rel=0&cc_load_policy=1` 845 iframe.allow = 'autoplay; encrypted-media' 846 iframe.allowFullscreen = true 847 iframe.referrerPolicy = 'strict-origin-when-cross-origin' 848 el.appendChild(iframe) 849 } 850 el.addEventListener('click', activate) 851 el.addEventListener('keydown', e => { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); activate() } }) 852 }) 853 854 // Auth-aware nav â reads `cs_id` cookie (set by app.carpool.school on signin) 855 // and swaps the signed-out CTAs for an avatar + name link. Cookie is 856 // display-only; it carries no privilege. 857 ;(function applyNavIdentity() { 858 const match = document.cookie.match(/(?:^|;\s*)cs_id=([^;]+)/) 859 if (!match) return 860 let payload 861 try { 862 payload = JSON.parse(decodeURIComponent(match[1])) 863 } catch (e) { 864 return 865 } 866 if (!payload || !payload.n || !payload.i || !payload.ap || !payload.sp) return 867 if (payload.exp && Date.now() > payload.exp) { 868 document.cookie = 'cs_id=; Max-Age=0; Path=/; SameSite=Lax; Domain=.carpool.school' 869 return 870 } 871 const appUrl = 'https://app.carpool.school' 872 const signedOut = document.querySelector('[data-nav-signed-out]') 873 const identity = document.querySelector('[data-nav-identity]') 874 const initialsEl = document.querySelector('[data-nav-identity-initials]') 875 const nameFullEl = document.querySelector('[data-nav-identity-name-full]') 876 const nameShortEl = document.querySelector('[data-nav-identity-name-short]') 877 const trigger = document.querySelector('[data-nav-identity-trigger]') 878 const menu = document.querySelector('[data-nav-identity-menu]') 879 const accountLink = document.querySelector('[data-nav-identity-account]') 880 const signOutLink = document.querySelector('[data-nav-identity-signout]') 881 if (signedOut) signedOut.classList.add('hidden') 882 if (identity) identity.classList.remove('hidden') 883 if (initialsEl) initialsEl.textContent = payload.i 884 if (nameFullEl) nameFullEl.textContent = payload.n 885 if (nameShortEl) nameShortEl.textContent = payload.n.split(/\s+/)[0] 886 if (trigger) trigger.setAttribute('title', payload.n) 887 if (accountLink) accountLink.href = appUrl + payload.ap 888 if (signOutLink) signOutLink.href = appUrl + payload.sp 889 890 // Dropdown toggle + click-outside. Mirrors the app's <UserMenu> behavior 891 // (two clicks: open, then choose) so pill semantics match across origins. 892 if (trigger && menu) { 893 const setOpen = (open) => { 894 menu.classList.toggle('hidden', !open) 895 trigger.setAttribute('aria-expanded', open ? 'true' : 'false') 896 } 897 trigger.addEventListener('click', (e) => { 898 e.stopPropagation() 899 setOpen(menu.classList.contains('hidden')) 900 }) 901 document.addEventListener('click', (e) => { 902 if (!menu.classList.contains('hidden') && !trigger.contains(e.target) && !menu.contains(e.target)) { 903 setOpen(false) 904 } 905 }) 906 document.addEventListener('keydown', (e) => { if (e.key === 'Escape') setOpen(false) }) 907 } 908 })() 909 910 // Communities band + hero search. 911 // Band: renders build-time baked data (window.__CS_COMMUNITIES__) first for an 912 // instant, no-flash paint, then re-renders from the runtime fetch once it lands 913 // so communities deleted/purged since the last site build disappear without 914 // waiting for a redeploy. 915 // Search: always uses a fresh runtime fetch so results are never stale. 916 ;(function initCommunityData() { 917 const band = document.querySelector('[data-communities-band]') 918 const searchInput = document.querySelector('[data-search-input]') 919 const searchResults = document.querySelector('[data-search-results]')
920 const searchWrap = searchInput ? searchInput.closest('.hero-search-wrap') : null 921 const defaultPlaceholder = searchInput ? searchInput.placeholder : '' 922 if (!band && !searchInput) return 923 924 const COLORS = ['#7048e8','#0d6b3e','#d97557','#1b4ca8','#b07f00','#a13e3e','#1a7a6e','#6b4c0d'] 925 function colorFor(name) { 926 const hash = (name || '').split('').reduce((acc, c) => acc + c.charCodeAt(0), 0) 927 return COLORS[hash % COLORS.length] 928 } 929 930 // Community names, locations, and photo URLs are live user-supplied data 931 // (anyone can create a community) rendered via innerHTML on this public 932 // page â escape before interpolating into any HTML template string here. 933 const HTML_ESCAPES = { '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' } 934 function escapeHtml(str) { 935 return (str || '').replace(/[&<>"']/g, (c) => HTML_ESCAPES[c]) 936 } 937 938 function avatar(name, photoUrl, initClass) { 939 const initial = escapeHtml((name || '?').charAt(0).toUpperCase()) 940 const color = colorFor(name || '') 941 if (!photoUrl) return `<span class="${initClass}" style="background:${color}">${initial}</span>` 942 return `<img src="${escapeHtml(photoUrl)}" alt="" 943 onerror="this.style.display='none';this.nextElementSibling.style.display='flex'"><span class="${initClass}" style="display:none;background:${color}">${initial}</span>` 944 } 945 946 function truncateName(name) { 947 const words = name.split(' ') 948 return words.length > 3 ? words.slice(0, 3).join(' ') + 'â¦' : name 949 } 950 951 function schoolItem(c) { 952 const managed = c.managed === 'staff' ? 'verified' : 'parent-led' 953 const label = managed === 'verified' ? 'Verified' : 'Parent-led' 954 const chk = managed === 'verified' 955 ? `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"><polyline fill="none" points="20 6 9 17 4 12"/></svg>` 956 : '' 957 return `<span class="trust-school"> 958 ${avatar(c.communityName, c.photoUrl, 'trust-school-init')} 959 <span class="ts-name">${escapeHtml(truncateName(c.communityName))}</span> 960 ${managed === 'verified' ? `<span class="ts-badge verified">${chk}${label}</span>` : ''} 961 </span>` 962 } 963 964 function renderBand(list) { 965 if (!band || !list?.length) return 966 const shuffled = [...list].sort(() => Math.random() - 0.5) 967 band.innerHTML = [...shuffled, ...shuffled].map(schoolItem).join('') 968 const PIXELS_PER_SEC = 40 969 band.style.animationDuration = `${band.scrollWidth / 2 / PIXELS_PER_SEC}s` 970 } 971 972 function wireSearch(list) { 973 if (!searchInput || !searchResults || !list?.length) return 974 975 searchInput.addEventListener('input', () => { 976 const q = searchInput.value.trim().toLowerCase() 977 if (q.length < 1) { 978 searchResults.classList.add('hidden') 979 searchResults.innerHTML = '' 980 return 981 } 982 const matches = list.filter(c => 983 c.communityName.toLowerCase().includes(q) 984 ).slice(0, 8) 985 986 if (!matches.length) { 987 const startUrl = `${appBase}/signup` 988 searchResults.innerHTML = `<li class="sr-empty"> 989 <span class="sr-empty-icon"> 990 <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"/><circle cx="12" cy="10" r="3"/></svg> 991 </span> 992 <span class="sr-empty-body"> 993 <strong>Not on Carpool.School yet.</strong> 994 <span>Be the first to start this community.</span> 995 </span> 996 <a href="${startUrl}" class="sr-empty-cta">Start community</a> 997 </li>` 998 } else { 999 searchResults.innerHTML = matches.map(c => { 1000 const managed = c.managed === 'staff' ? 'verified' : 'parent-led' 1001 const label = managed === 'verified' ? 'â Verified' : 'Parent-led' 1002 const loc = [c.locality, c.adminArea].filter(Boolean).join(', ') 1003 const url = `${appBase}/signup?comId=${encodeURIComponent(c.communityId)}&cn=${encodeURIComponent(c.communityName)}` 1004 return `<li><a href="${url}" class="sr-item"> 1005 ${avatar(c.communityName, c.photoUrl, 'sr-init')}
1006 <span class="sr-body"> 1007 <span class="sr-name">${escapeHtml(c.communityName)}</span> 1008 ${loc ? `<span class="sr-loc">${escapeHtml(loc)}</span>` : ''} 1009 </span> 1010 <span class="sr-right"> 1011 ${managed === 'verified' ? `<span class="sr-badge verified">${label}</span>` : ''} 1012 <span class="sr-arrow">â</span> 1013 </span> 1014 </a></li>` 1015 }).join('') 1016 } 1017 searchResults.classList.remove('hidden') 1018 }) 1019 1020 document.addEventListener('click', e => { 1021 if (!searchInput.contains(e.target) && !searchResults.contains(e.target)) { 1022 searchResults.classList.add('hidden') 1023 } 1024 }) 1025 1026 searchInput.addEventListener('keydown', e => { 1027 if (e.key === 'Escape') { 1028 searchResults.classList.add('hidden') 1029 searchInput.value = '' 1030 } 1031 }) 1032 } 1033 1034 // ââ Band: build-time data (instant) ââââââââââââââââââââââââââââââââââââââ 1035 const baked = window.__CS_COMMUNITIES__ 1036 if (baked?.length) { 1037 renderBand(baked) 1038 } 1039 1040 // ââ Search: runtime fetch (always fresh) âââââââââââââââââââââââââââââââââ 1041 if (searchInput && searchWrap) { 1042 searchWrap.classList.add('is-loading') 1043 searchInput.disabled = true 1044 searchInput.placeholder = 'Finding communities near youâ¦' 1045 } 1046 1047 fetch(`${appBase}/api/communities/activated`) 1048 .then(r => r.ok ? r.json() : null) 1049 .then(data => { 1050 const list = data?.communities 1051 if (!list?.length) return 1052 1053 // Refresh the band with live data â supersedes the build-time snapshot 1054 // so purged communities drop out without a site rebuild. 1055 renderBand(list) 1056 1057 if (searchWrap) { 1058 searchWrap.classList.remove('is-loading') 1059 searchInput.disabled = false 1060 searchInput.placeholder = defaultPlaceholder 1061 // Brief glow to signal the input is now live 1062 searchWrap.classList.add('is-ready') 1063 setTimeout(() => searchWrap.classList.remove('is-ready'), 900) 1064 } 1065 1066 wireSearch(list) 1067 }) 1068 .catch(() => { 1069 if (searchWrap) { 1070 searchWrap.classList.remove('is-loading') 1071 searchInput.disabled = false 1072 searchInput.placeholder = defaultPlaceholder 1073 } 1074 }) 1075 })() 1076 1077 // Scroll reveal 1078 const revealEls = document.querySelectorAll('[data-reveal]') 1079 if (revealEls.length && 'IntersectionObserver' in window) { 1080 const obs = new IntersectionObserver((entries) => { 1081 entries.forEach((entry) => { 1082 if (entry.isIntersecting) { entry.target.classList.add('revealed'); obs.unobserve(entry.target) } 1083 }) 1084 }, { threshold: 0.08, rootMargin: '0px 0px -30px 0px' }) 1085 revealEls.forEach(el => obs.observe(el)) 1086 } else { 1087 revealEls.forEach(el => el.classList.add('revealed')) 1088 } 1089</script>
1089 1090 1091</body> 1092</html>
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.