New: ParentPal Plus is live — unlimited plans for every age 0-17, and multi-child profiles.

PARENTPAL AI™: YOUR FAMILY'S DAILY AI COMPANION

(function(){ // Tries to open Chatbase if API exists; otherwise no harm. function tryOpenChatbase(){ try{ if (typeof window.chatbase === 'function'){ window.chatbase('openChat'); return true; } }catch(e){} return false; } // Click near the bubble as a fallback (some launchers respond to generic clicks) function clickBubbleArea(){ try{ var x = window.innerWidth - 28, y = window.innerHeight - 28; var el = document.elementFromPoint(x,y); if (el){ el.click(); return true; } }catch(e){} return false; } // Show pulsing tooltip by the bubble function showNudge(ms){ var n = document.getElementById('ppz-bubble-nudge'); if (!n) return; n.style.display = 'block'; var hide = function(){ n.style.display = 'none'; }; setTimeout(hide, ms || 6000); // If user clicks the nudge, attempt to open and hide it. n.onclick = function(){ tryOpenChatbase() || clickBubbleArea(); hide(); }; } // Bind button var btn = document.getElementById('ppz-open-chat'); if (!btn) return; btn.addEventListener('click', function(e){ e.preventDefault(); // 1) Try to open the bubble (works if API is supported) var opened = tryOpenChatbase(); if (!opened) clickBubbleArea(); // 2) Nudge/tooltip so users know where to tap showNudge(6000); // 3) Optional: also scroll to inline chat section if you have one var demo = document.getElementById('demo'); if (demo) demo.scrollIntoView({behavior:'smooth', block:'start'}); }); })();
Private & secure
30-day refund
Cancel anytime
Built by parents
How it works
1

Your situation

Tell me what’s happening and your child’s exact age (months or years). Every answer is tuned to their stage.

2

Get your plan

Clear guidance to use right away—what to say (one-liner and tone), what to do (steps or checklist), and an optional printable or message.

3

Use it tonight

Share with a co-parent, print and stick it on the fridge, or save it to your child’s profile to reuse.

Free: 3 asks per weekPlus: unlimited + clean printables$7.99 per monthor$69 per year30-day refundCancel anytime

Trusted by parents in 10+ countries

“Less chaos at bedtime. The plan gave me the exact words—my 3-yo settled in two nights.”

Sophia — mum of 34.8

“Finally, words that land. Morning routine is calm now—my 6-yo even reminds me of the steps.”

Daniel — dad of a 6-yo5.0

“Toy fights used to derail dinner. The sharing script + timer changed everything.”

Maya — mum of 2 & 84.9

*Self-reported by beta users.

What ParentPal Can Do

Age-smart answers—and the tools to use them tonight.

🔍

Answer Anything

Bedtime, sibling fights, screens, school stress—always tuned to your child’s exact age.

Examples
  • “My 3-yo keeps leaving bed.”
  • “How do I handle sibling snatching?”
🗓️

Routines & Plans

Morning/bedtime routines, homework plans, checklists—ready in seconds.

Examples
  • “Make a 10-min morning routine (age 6).”
  • “Homework plan for a 9-yo who stalls.”
✉️

Emails & Notes

Kind-and-firm messages to teachers, coaches, co-parents—translated if needed.

Examples
  • “Email teacher about late homework (age 10).”
  • “Message to coach about practice conflict.”
📊

Printables & Charts

Visual schedules, reward charts, agreements—clean and shareable.

Examples
  • “Create a reward chart (age 5).”
  • “Simple screen-time agreement (age 11).”
🧩

Summaries & Translations

Turn school letters into action steps, or translate for carers/family.

Examples
  • “Summarize this school note, action steps please.”
  • “Translate this for Grandma (Spanish).”
💡

Ideas & Study Help

Rainy-day ideas, screen-time swaps, study prompts—age-fit and practical.

Examples
  • “Non-screen ideas for a 9-yo.”
  • “Study prompts for a 13-yo.”
See plans
/* open Chatbase bubble + (optional) seed a prompt hint in clipboard */ (function(){ const openBtns = document.querySelectorAll('[data-openchat], .ppc2-try'); openBtns.forEach(b=>{ b.addEventListener('click', ()=>{ try{ window.chatbase && window.chatbase('open'); }catch(e){} const txt = b.getAttribute('data-prompt'); if(txt && navigator.clipboard){ navigator.clipboard.writeText(txt).catch(()=>{}); } }); }); })();

Ask about…

Bedtime Refusal
  1. Dim lights
  2. Two-song warning
  3. Story + tuck-in
  4. Brief check-ins
  5. Praise calm try
Open the chat
Checkout Tantrums
  1. Prime outside
  2. Helper job
  3. One snack rule
  4. Calm mantra
  5. Celebrate at car
Open the chat
Morning Routine
  1. Warm wake-up
  2. Visual steps
  3. Choice outfit
  4. Breakfast job
  5. Good-bye ritual
Open the chat
School Anxiety
  1. Name feeling
  2. Predict plan
  3. Tiny brave step
  4. Handoff cue
  5. Celebrate effort
Open the chat
Sibling Fights
  1. No-hurt rule
  2. Ask for turns
  3. Coach calm words
  4. Timer for turns
  5. Spotlight sharing
Open the chat
Screen-Time Limits
  1. Daily window
  2. Co-view
  3. Quality shows
  4. Move before/after
  5. No pre-bed screens
Open the chat
Picky Eating
  1. Safe food
  2. Tiny taste
  3. Family wording
  4. No second meal
  5. Celebrate brave bite
Open the chat
Social Skills
  1. Warm roleplay
  2. Join-in phrase
  3. Offer choice
  4. Specific praise
  5. Reset plan
Open the chat
/* Single-open behavior + Open Chatbase on click (scoped to #ask-cards) */ (function(){ const root = document.getElementById('ask-cards'); if(!root) return; // Only one
open at a time const cards = Array.from(root.querySelectorAll('details.ppfx-card')); cards.forEach(card=>{ card.addEventListener('toggle', function(){ if (!this.open) return; cards.forEach(other => { if (other !== this) other.removeAttribute('open'); }); }); }); // Open Chatbase bubble for any CTA with data-openchat root.addEventListener('click', function(e){ const btn = e.target.closest('[data-openchat]'); if(!btn) return; e.preventDefault(); try { if (window.chatbase) { window.chatbase('open'); return; } } catch(_){} // Fallback: click the launcher if API not exposed const launcher = document.querySelector('.chatbase-bubble, #chatbase-bubble, [data-chat-launcher]'); if (launcher && typeof launcher.click === 'function') launcher.click(); }, {passive:false}); })();
Age 4

Checkout tantrumwhat to say tonight

Preview · Watermark in Free
  1. 1 “We’ll look, not buy, today.”
  2. 2 “Two things to choose: cart helper or scanner beep.”
  3. 3 “If it’s hard, we’ll breathe and try again.”
  4. 4 “When we’re calm, we roll to fruits.”
  5. 5 “Thanks for trying—that’s brave.”
Printable checklist available · clean in Plus

Real answers adapt to your child’s exact age and situation.

Open the chat
(function(){ const root = document.getElementById('ppx-example'); if(!root) return; root.addEventListener('click', function(e){ const btn = e.target.closest('[data-openchat]'); if(!btn) return; e.preventDefault(); try { if (window.chatbase) { window.chatbase('open'); return; } } catch(_){} const launcher = document.querySelector('.chatbase-bubble, #chatbase-bubble, [data-chat-launcher]'); if (launcher && typeof launcher.click === 'function') launcher.click(); }, {passive:false}); })();

Choose your plan

Free

$0

Start now

  • Core answers (fair-use limit)
  • 1 child profile
  • Printables with watermark
  • Community support
START FREE
Most Popular

ParentPal Plus

$7.99/mo

Unlimited answers & plans (age-fit)

  • UNLIMITED answers & plans (age-fit)
  • Clean, shareable printables
  • Multiple child profiles + saved favorites
  • Email & notes to teachers/co-parents
  • 30-day refund. Cancel anytime.
UPGRADE TO PLUS – $7.99/MO Save with Yearly – $69

Private & judgment-free. Built by parents for parents.

Is my data private?
Yes. ParentPal is private & judgment-free. We don’t share personal info. For medical or safety concerns, please consult a qualified professional.
Why upgrade if there’s a free plan?
Free gives 3 full plans per conversation. Plus unlocks unlimited answers, clean shareable printables, multi-child profiles, and small priority tweaks—anytime.
Can I cancel and get a refund?
Cancel anytime. Plus includes a 30-day refund if it’s not a fit.
(function(){if(!window.chatbase||window.chatbase("getState")!=="initialized"){window.chatbase=(...arguments)=>{if(!window.chatbase.q){window.chatbase.q=[]}window.chatbase.q.push(arguments)};window.chatbase=new Proxy(window.chatbase,{get(target,prop){if(prop==="q"){return target.q}return(...args)=>target(prop,...args)}})}const onLoad=function(){const script=document.createElement("script");script.src="https://www.chatbase.co/embed.min.js";script.id="-1At6pzYIoDfEXN2OOcjs";script.domain="www.chatbase.co";document.body.appendChild(script)};if(document.readyState==="complete"){onLoad()}else{window.addEventListener("load",onLoad)}})();

Join the Insider List

Early access, parent-only perks, and new features first.

What Parents Get

Fast, age-fit help for everyday moments — with clear words you can use tonight.

😴

Sleep Made
Simpler

Bedtime scripts that actually work.

🌅

Calmer
Mornings

5-line plans you can read aloud.

🤝

Fewer Power
Struggles

Age-fit boundaries in a kind tone.

💬

Confident
Parenting

Clear words for tough moments.


For Every Age 0–17

0–3
  • Bedtime refusal
  • Separation tears
  • First boundaries
4–7
  • Morning routine
  • Sibling fights
  • Big feelings
8–12
  • Homework stall
  • Screen limits
  • Friendship bumps
13–17
  • Curfews
  • Social media
  • School stress

See a Script

Real, age-fit examples you can use tonight.

Age 3Bedtime Refusal
One-liner

“It’s time for sleep. I’ll tuck you in and stay for two songs, then lights off.”

5-Line Script

  1. “I see you want more play. It’s hard to stop when you’re having fun.”
  2. “Bedtime keeps your body strong. We do the same steps every night.”
  3. “Pick one: spaceship pajamas or dinos?”
  4. “Two songs, then lights off. I’ll check on you after.”
  5. “You chose dinos. Climb in—I’m right here.”
Tone: GentleBackup: “We can try again tomorrow.”
Age 7Sibling Fights
One-liner

“Pause. Hands to self. Tell me what you each wanted—one at a time.”

5-Line Script

  1. “I’m stopping this. Hands to self—now.”
  2. “You go first. What did you want?”
  3. “You next. What did you want?”
  4. “We have two options: timer to share or trade items.”
  5. “You chose timer. I’ll set five minutes and stay nearby.”
Tone: Calm + ClearSkill: Name Wants → Offer Choices
Age 15Curfew Pushback
One-liner

“I want you safe. Curfew is 10:30 tonight—text me at 10.”

5-Line Script

  1. “You want later. I get it—friends matter.”
  2. “Curfew tonight is 10:30. That’s our line.”
  3. “Plan: leave at 10:15, home by 10:30.”
  4. “Text me at 10 so I know you’re on time.”
  5. “If you’re late, tomorrow night ends earlier. Deal?”
Tone: Firm + WarmSkill: Boundaries + Next-step Plan

ParentPal AI isn’t a substitute for medical care. If safety is a concern, contact a professional or emergency services.


How It Works

Step 1

Ask Your Situation

We confirm your child’s exact age for a precise, age-fit answer.

Step 2

Get Your Script

Five clear lines you can read aloud (gentle or firm options).

Step 3

Use Tonight

Share or print so partners and carers are aligned.


The ParentPal Promise

🔒Private
🧠Evidence-Informed
🤝Judgment-Free

Age-fit, practical scripts you can use tonight.

Guidance only — not medical advice.


Parents Are Noticing

“Less chaos at bedtime.” — Sophia, Mum of 3

“Finally, words that land.” — Daniel, Dad of a 9-year-old

85%Report Calmer Evenings*
4.8/5Avg. Beta Rating
2k+Scripts Used

*Self-reported by beta users.


Our Approach

  • Science, Simplified: Evidence-based child development and behavior—made practical.
  • Age-First, Always: Guidance tailored to your child’s exact age.
  • Clear Plans, Not Lectures: 5-step, do-tonight plans with teachable choices.
  • Trusted Follow-Up: Links to respected sites and expert pages for deeper reading.

Is ParentPal really free?
Yes — chatting is free. The Free plan includes 3 full plans per conversation. Plus unlocks unlimited answers and clean printables.
Will you store my data?
ParentPal is private by default. We don’t sell personal data.
Do you replace a doctor or therapist?
No. ParentPal is guidance, not medical advice.
Can my partner use the same plan?
Yes — share or print clean PDFs for partners & caregivers.
What’s your refund policy?
30-day refund. Cancel anytime.

Try It Tonight

Save with Yearly — $69

30-day refund. Cancel anytime.

Upgrade
// Robust Chatbase opener (tries official API first, then clicks the bubble) function openParentPalChat(){ try{ if (window.chatbase && typeof window.chatbase === 'function') { window.chatbase('open'); return; } }catch(e){} const candidates = ['#chatbase-bubble','#cb-launcher','.cb-bubble','[class*="chatbase"] button']; for (const sel of candidates){ const el = document.querySelector(sel); if (el){ el.click(); return; } } window.scrollTo({ top: document.body.scrollHeight, behavior: 'smooth' }); } document.getElementById('pp-open-chat')?.addEventListener('click', openParentPalChat); // Auto-hide CTA when footer anchors are on screen (so links are tappable) (function(){ const bar = document.querySelector('.pp-sticky-cta'); if (!bar) return; // Watch the footer anchors we added for the modals const targets = ['#open-privacy', '#open-terms', '#close'] .map(s => document.querySelector(s)) .filter(Boolean); if (!targets.length) return; const io = new IntersectionObserver((entries)=>{ // If any footer anchor is visible near the bottom, hide the bar const show = !entries.some(e => e.isIntersecting); bar.classList.toggle('is-hidden', !show); }, { root: null, threshold: 0.01, // start hiding when the element is within ~120px of viewport bottom rootMargin: '0px 0px -120px 0px' }); targets.forEach(t => io.observe(t)); })();

[email protected]
© 2025 ParentPal AI™. All rights reserved.
Privacy Policy | Terms

(function () { const VERIFY = 'https://api.parentpalway.com/api/verify'; const BADGE_ID = 'pp-plus-badge'; // -------- 0) Tiny helpers function applyPlan(isPlus) { const root = document.documentElement; if (isPlus) { root.classList.add('is-plus'); try { localStorage.setItem('pp_plan','plus'); } catch(e){} } else { root.classList.remove('is-plus'); try { localStorage.setItem('pp_plan','free'); } catch(e){} } } // Early cache to avoid flash try { if (localStorage.getItem('pp_plan') === 'plus') { document.documentElement.classList.add('is-plus'); } } catch(e){} // -------- 0.5) Chatbase refresh when Plus is detected function refreshChatbaseForPlus() { // Wipe obvious convo/session keys (best-effort) try { Object.keys(localStorage).forEach(function(k){ if (/chatbase|cb_|conversation|chatbot/i.test(k)) localStorage.removeItem(k); }); } catch(e){} // Reload the iframe now, or wait until it exists (consent-gated) function reloadFrameOnce(ifr) { try { const u = new URL(ifr.src, location.href); u.searchParams.set('pp_plus','1'); // harmless hint u.searchParams.set('ts', Date.now()); // bust cache ifr.src = u.toString(); } catch(e){ ifr.src = ifr.src; } } var ifr = document.querySelector('iframe[src*="chatbase"]'); if (ifr) { reloadFrameOnce(ifr); return; } // If not present yet, observe for it briefly let seen = false; const obs = new MutationObserver(() => { if (seen) return; const f = document.querySelector('iframe[src*="chatbase"]'); if (f) { seen = true; reloadFrameOnce(f); obs.disconnect(); } }); obs.observe(document.documentElement, { childList: true, subtree: true }); setTimeout(() => obs.disconnect(), 8000); } // -------- 1) Create badge function addBadge() { if (document.getElementById(BADGE_ID)) return; const b = document.createElement('div'); b.id = BADGE_ID; b.innerHTML = ` ParentPal Plus `; Object.assign(b.style, { position: 'fixed', right: '16px', bottom: '120px', zIndex: 2147483647, display: 'inline-flex', alignItems: 'center', gap: '6px', padding: '8px 12px', borderRadius: '999px', background: 'linear-gradient(135deg,#FFF6D7,#FFE39E)', color: '#0f172a', font: '600 12px/1 system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif', border: '1px solid rgba(0,0,0,.06)', boxShadow: '0 8px 22px rgba(0,0,0,.18), inset 0 1px 0 rgba(255,255,255,.6)', transition: 'left .2s ease, right .2s ease, bottom .2s ease' }); document.body.appendChild(b); } // -------- 2) Chat widget avoidance (unchanged) function $(sel){ return document.querySelector(sel); } function rect(el){ return el.getBoundingClientRect(); } function overlaps(a,b){ const pad=12; return !(a.right < b.left-pad || a.left > b.right+pad || a.bottom < b.top-pad || a.top > b.bottom+pad); } function getChatRect(){ const chatbase = document.querySelector('iframe[src*="chatbase.co/chatbot-iframe"]') || document.querySelector('iframe[src*="chatbase"]'); if (chatbase) return rect(chatbase); const ALL = document.querySelectorAll('body *'); let best = null, bestScore = -Infinity; for (const el of ALL){ if (el.id === BADGE_ID) continue; const cs = getComputedStyle(el); if (cs.position !== 'fixed') continue; const r = rect(el); const nearRight = (window.innerWidth - r.right) <= 220; const nearBottom = (window.innerHeight - r.bottom) <= 220; const bigEnough = r.width > 40 && r.height > 40; if (nearRight && nearBottom && bigEnough){ const score = r.right + r.bottom; if (score > bestScore){ bestScore = score; best = r; } } } return best; } function placeBadge(){ const b = document.getElementById(BADGE_ID); if (!b) return; const isMobile = window.matchMedia('(max-width: 767px)').matches; b.style.bottom = isMobile ? '100px' : '120px'; b.style.right = '16px'; const cr = getChatRect(); if (!cr) return; const br = rect(b); const tooClose = (window.innerWidth - cr.left) < 140; if (overlaps(br, cr) || tooClose){ const desiredRight = Math.max(16, Math.round(window.innerWidth - cr.left + 16)); b.style.right = desiredRight + 'px'; } } function startRepositioning(){ placeBadge(); let n = 0; const iv = setInterval(() => { placeBadge(); if (++n > 40) clearInterval(iv); }, 250); window.addEventListener('resize', placeBadge, { passive: true }); new MutationObserver(placeBadge).observe(document.documentElement, { childList: true, subtree: true }); window.addEventListener('load', placeBadge); } // -------- 3) Verify -> toggle class + badge (+ refresh chat if Plus) function init(){ fetch(VERIFY, { credentials: 'include' }) .then(r => r.json()) .then(d => { const isPlus = !!(d && d.plus); applyPlan(isPlus); if (isPlus){ addBadge(); startRepositioning(); refreshChatbaseForPlus(); // <— force fresh chat session after upgrade } else { const b = document.getElementById(BADGE_ID); if (b) b.remove(); } }) .catch(() => { applyPlan(false); }); } // If consent UI applies later and user is already Plus, refresh Chatbase then window.addEventListener('pp-consent-applied', function(e){ if (!document.documentElement.classList.contains('is-plus')) return; var s = e && e.detail ? e.detail : null; if (!s || s.marketing) { // marketing allowed or unknown → safe to refresh refreshChatbaseForPlus(); } }); if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', () => setTimeout(init, 0), { once: true }); } else { setTimeout(init, 0); } })();
(function () { const BADGE_ID = 'pp-plus-badge'; const getBadge = () => document.getElementById(BADGE_ID); const rect = (el) => el.getBoundingClientRect(); const overlaps = (a, b) => !(a.right < b.left || a.left > b.right || a.bottom < b.top || a.top > b.bottom); // Prefer Chatbase iframe; if not found, fall back to "big fixed thing bottom-right" function getChatRect() { const chat = document.querySelector('iframe[src^="https://www.chatbase.co/chatbot-iframe/"]') || document.querySelector('iframe[src*="chatbase.co/chatbot-iframe"]') || document.querySelector('iframe[src*="chatbase"]'); if (chat) return rect(chat); // Fallback: biggest fixed element near bottom-right let bestRect = null, bestScore = -1; document.querySelectorAll('body *').forEach(el => { if (el.id === BADGE_ID) return; const cs = getComputedStyle(el); if (cs.position !== 'fixed') return; const r = rect(el); const nearRight = (innerWidth - r.right) <= 240; const nearBottom = (innerHeight - r.bottom) <= 240; const big = r.width > 40 && r.height > 40; if (nearRight && nearBottom && big) { const score = r.right + r.bottom; // closest to corner wins if (score > bestScore) { bestScore = score; bestRect = r; } } }); return bestRect; } function moveBadge() { const b = getBadge(); if (!b) return; // nothing to do if badge isn't on this session // default spot const mobile = matchMedia('(max-width: 767px)').matches; b.style.bottom = mobile ? '100px' : '120px'; b.style.right = '16px'; const cr = getChatRect(); if (!cr) return; // Detect “open” chat by size, or if we overlap → push left const looksOpen = cr.width >= 200 || cr.height >= 200; const br = rect(b); if (looksOpen || overlaps(br, cr)) { b.style.right = Math.max(16, Math.round(innerWidth - cr.left + 16)) + 'px'; } } // Nudge while things animate in let n = 0; const iv = setInterval(() => { moveBadge(); if (++n > 60) clearInterval(iv); }, 250); // Also react to resizes, DOM mutations, and page load addEventListener('resize', moveBadge, { passive: true }); new MutationObserver(moveBadge).observe(document.documentElement, { childList: true, subtree: true }); addEventListener('load', moveBadge); })();
/* Tiny forcer: keeps #pp-plus-badge out of the Chatbase panel */ (function () { const ID = 'pp-plus-badge'; // Find your Chatbase iframe (the big panel & the bubble are the same iframe) function chatRect() { const f = document.querySelector('iframe[src^="https://www.chatbase.co/chatbot-iframe/"]') || document.querySelector('iframe[src*="chatbase.co/chatbot-iframe"]') || document.querySelector('iframe[src*="chatbase"]'); return f ? f.getBoundingClientRect() : null; } function tick() { const b = document.getElementById(ID); if (!b) return; // badge not present (user not Plus yet) // add smooth movement once if (!b.dataset.hasTransition) { b.style.transition = 'right .2s ease, bottom .2s ease'; b.dataset.hasTransition = '1'; } // default spot const isMobile = matchMedia('(max-width: 767px)').matches; b.style.bottom = isMobile ? '100px' : '120px'; const cr = chatRect(); if (!cr) { b.style.right = '16px'; return; } // If panel looks open (wide/tall) push badge left to clear it (16px gap). const openish = cr.width >= 180 || cr.height >= 180; const desiredRight = openish ? Math.max(16, Math.round(innerWidth - cr.left + 16)) : 16; // Always enforce right so we "win" even if another script sets it back. b.style.right = desiredRight + 'px'; } // Run continuously so it also works during panel animations & iframes mounting let started = false; function start() { if (started) return; started = true; tick(); // immediate setInterval(tick, 200); // keep enforcing every 200ms addEventListener('resize', tick, { passive: true }); addEventListener('load', tick); new MutationObserver(tick).observe(document.documentElement, { childList: true, subtree: true }); } // Start when DOM is ready if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', start, { once: true }); } else { start(); } })();

You’re all set!
Thanks for upgrading to ParentPal Plus.
Your access is active. If anything looks off, contact [email protected]