Copy pass: join headline, who-can-join FAQ, Eagle card, Farmers Market naming; ntfy title to 'New 73 lead'

This commit is contained in:
claude
2026-08-24 18:44:35 -04:00
parent f80243381e
commit 2eec0a12ae
2 changed files with 9 additions and 9 deletions
+7 -7
View File
@@ -355,11 +355,11 @@ def cubs():
<div style="background:#fff;border:1px solid #EBE4D4;border-radius:18px;padding:34px 36px;display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:28px;align-items:center"> <div style="background:#fff;border:1px solid #EBE4D4;border-radius:18px;padding:34px 36px;display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:28px;align-items:center">
<div><div class="eyebrow dark" style="margin-bottom:8px">Keeping it affordable</div> <div><div class="eyebrow dark" style="margin-bottom:8px">Keeping it affordable</div>
<h2 class="arch" style="margin:0 0 10px;font-weight:800;font-size:1.5rem;color:#1E2F52">The famous chocolate booth.</h2> <h2 class="arch" style="margin:0 0 10px;font-weight:800;font-size:1.5rem;color:#1E2F52">The famous chocolate booth.</h2>
<p style="margin:0;color:#5A6272;font-size:15.5px">You will find us selling chocolate bars at the Green Lane Farmer's Market on Saturday mornings. Fundraisers like the booth keep dues low and help every scout get to camp. Cost should never keep a kid out of Scouting; if it is a stretch, talk to us.</p></div> <p style="margin:0;color:#5A6272;font-size:15.5px">You will find us selling chocolate bars at the Green Lane Farmers Market on Saturday mornings. Fundraisers like the booth keep dues low and help every scout get to camp. Cost should never keep a kid out of Scouting; if it is a stretch, talk to us.</p></div>
<div style="display:flex;flex-direction:column;gap:10px"> <div style="display:flex;flex-direction:column;gap:10px">
<div class="rrow"><span class="k" style="min-width:88px">Tuesdays</span><span class="v">Den and pack meetings, 6:00 PM at St. Luke's</span></div> <div class="rrow"><span class="k" style="min-width:88px">Tuesdays</span><span class="v">Den and pack meetings, 6:00 PM at St. Luke's</span></div>
<div class="rrow"><span class="k" style="min-width:88px">Monthly</span><span class="v">Weekend pack hike, usually 1:00 PM</span></div> <div class="rrow"><span class="k" style="min-width:88px">Monthly</span><span class="v">Weekend pack hike, usually 1:00 PM</span></div>
<div class="rrow"><span class="k" style="min-width:88px">Saturdays</span><span class="v">Chocolate booth at the Green Lane Farmer's Market, 7:00 AM</span></div> <div class="rrow"><span class="k" style="min-width:88px">Saturdays</span><span class="v">Chocolate booth at the Green Lane Farmers Market, 7:00 AM</span></div>
</div></div></div></section> </div></div></div></section>
<div class="band" style="background:linear-gradient(180deg,rgba(13,22,40,.5),rgba(13,22,40,.7)),url('/static/img/autumn-hike.jpg') center/cover no-repeat"> <div class="band" style="background:linear-gradient(180deg,rgba(13,22,40,.5),rgba(13,22,40,.7)),url('/static/img/autumn-hike.jpg') center/cover no-repeat">
<h2>Come try a Tuesday.</h2> <h2>Come try a Tuesday.</h2>
@@ -390,7 +390,7 @@ def troop():
<div class="rank r4"><div class="rl">STOP 4</div><div class="rn">First Class</div><div class="rd">The full outdoor toolkit, ready to lead a patrol.</div></div> <div class="rank r4"><div class="rl">STOP 4</div><div class="rn">First Class</div><div class="rd">The full outdoor toolkit, ready to lead a patrol.</div></div>
<div class="rank r5"><div class="rl">STOP 5</div><div class="rn">Star</div><div class="rd">Leadership roles and merit badges start stacking up.</div></div> <div class="rank r5"><div class="rl">STOP 5</div><div class="rn">Star</div><div class="rd">Leadership roles and merit badges start stacking up.</div></div>
<div class="rank r6"><div class="rl">STOP 6</div><div class="rn">Life</div><div class="rd">Leading service projects and mentoring younger scouts.</div></div> <div class="rank r6"><div class="rl">STOP 6</div><div class="rn">Life</div><div class="rd">Leading service projects and mentoring younger scouts.</div></div>
<div class="rank r7"><div class="rl">THE SUMMIT</div><div class="rn">Eagle</div><div class="rd">The one on the resume, earned with a project that outlasts you.</div></div> <div class="rank r7"><div class="rl">THE SUMMIT</div><div class="rn">Eagle</div><div class="rd">Scouting's highest rank, earned with a big service project of their own.</div></div>
</div></div></section> </div></div></section>
<section style="padding:56px 0"><div class="wrap"> <section style="padding:56px 0"><div class="wrap">
<div class="eyebrow dark">A year in the life</div><h2 class="sec" style="margin-bottom:30px">Weekends worth putting the phone down for.</h2> <div class="eyebrow dark">A year in the life</div><h2 class="sec" style="margin-bottom:30px">Weekends worth putting the phone down for.</h2>
@@ -457,7 +457,7 @@ def calendar(unit: str = "all"):
<div><div class="t">Pack Tuesdays · 6:00 PM</div><div class="d">Pack or den meetings at St. Luke's Lutheran Church (off on school holidays)</div></div> <div><div class="t">Pack Tuesdays · 6:00 PM</div><div class="d">Pack or den meetings at St. Luke's Lutheran Church (off on school holidays)</div></div>
<div><div class="t">Troop Tuesdays · 7:00 PM</div><div class="d">Troop 73 meets right after the pack, same building</div></div> <div><div class="t">Troop Tuesdays · 7:00 PM</div><div class="d">Troop 73 meets right after the pack, same building</div></div>
<div><div class="t">About monthly · weekends</div><div class="d">Pack hikes at rotating trailheads, usually 1:00 PM</div></div> <div><div class="t">About monthly · weekends</div><div class="d">Pack hikes at rotating trailheads, usually 1:00 PM</div></div>
<div><div class="t">Saturdays · 7:00 AM</div><div class="d">Chocolate booth at the Green Lane Farmer's Market</div></div> <div><div class="t">Saturdays · 7:00 AM</div><div class="d">Chocolate booth at the Green Lane Farmers Market</div></div>
</div></div></div> </div></div></div>
<section style="padding:52px 0 30px"> <section style="padding:52px 0 30px">
<div class="wrap" style="padding-bottom:24px;display:flex;gap:10px;flex-wrap:wrap;align-items:center"> <div class="wrap" style="padding-bottom:24px;display:flex;gap:10px;flex-wrap:wrap;align-items:center">
@@ -483,7 +483,7 @@ FAQ = [
("Which program fits my kid?", "K through 5th grade join Pack 73's dens. Ages 11 to 17 join Troop 73. Fifth graders get the best of both: Arrow of Light now, crossover to the troop in spring."), ("Which program fits my kid?", "K through 5th grade join Pack 73's dens. Ages 11 to 17 join Troop 73. Fifth graders get the best of both: Arrow of Light now, crossover to the troop in spring."),
("Can we join mid-year?", "Any Tuesday works. Badges and adventures meet kids where they are, so a January start is just as good as a September one."), ("Can we join mid-year?", "Any Tuesday works. Badges and adventures meet kids where they are, so a January start is just as good as a September one."),
("What about uniforms and gear?", "Start with sneakers and a water bottle. Uniform pieces come gradually, and we keep a stash of hand-me-downs. Nobody needs camping gear to start."), ("What about uniforms and gear?", "Start with sneakers and a water bottle. Uniform pieces come gradually, and we keep a stash of hand-me-downs. Nobody needs camping gear to start."),
("Who can join?", "Every kid. Pack 73 and Troop 73 are open to all children and teens, whatever their background or beliefs. No exceptions, no fine print. If your kid wants to camp, build, and belong, they are one of us."), ("Who can join?", "Every kid. Pack 73 and Troop 73 are open to all children and teens, whatever their background or beliefs. If your kid wants to camp, build, and belong, there's a spot for them."),
] ]
SOURCE_JS = """<script> SOURCE_JS = """<script>
@@ -496,7 +496,7 @@ def join_body(sent=False):
return f""" return f"""
<section style="padding:72px 0 30px"><div class="wrap" style="display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:52px;align-items:start"> <section style="padding:72px 0 30px"><div class="wrap" style="display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:52px;align-items:start">
<div><div class="eyebrow dark">Join Pack &amp; Troop 73</div> <div><div class="eyebrow dark">Join Pack &amp; Troop 73</div>
<h1 class="arch" style="margin:0 0 16px;font-weight:800;font-size:clamp(2.2rem,4.5vw,3.4rem);line-height:1.05;letter-spacing:-.015em;color:#1E2F52;max-width:14ch">Come see a meeting. That's the whole ask.</h1> <h1 class="arch" style="margin:0 0 16px;font-weight:800;font-size:clamp(2.2rem,4.5vw,3.4rem);line-height:1.05;letter-spacing:-.015em;color:#1E2F52;max-width:14ch">Come see a meeting. That's it.</h1>
<p style="margin:0 0 26px;color:#5A6272;font-size:1.08rem;max-width:520px">Tell us a little about your child and a leader will reach out with the right den or troop, what to expect, and directions. No commitment, and your first visit is always free.</p> <p style="margin:0 0 26px;color:#5A6272;font-size:1.08rem;max-width:520px">Tell us a little about your child and a leader will reach out with the right den or troop, what to expect, and directions. No commitment, and your first visit is always free.</p>
<div style="display:flex;flex-direction:column;gap:16px;margin-bottom:30px"> <div style="display:flex;flex-direction:column;gap:16px;margin-bottom:30px">
<div class="rrow"><span class="k arch" style="min-width:32px;font-size:20px">1</span><span class="v" style="font-size:15.5px"><strong>Send the form.</strong> It goes straight to our volunteer leaders' phones.</span></div> <div class="rrow"><span class="k arch" style="min-width:32px;font-size:20px">1</span><span class="v" style="font-size:15.5px"><strong>Send the form.</strong> It goes straight to our volunteer leaders' phones.</span></div>
@@ -587,7 +587,7 @@ def pipeline_notify(rec, sheet_error=None):
try: try:
body = json.dumps({ body = json.dumps({
"topic": NTFY_TOPIC, "topic": NTFY_TOPIC,
"title": "New Pack 73 lead - %s" % rec["parent_name"], "title": "New 73 lead - %s" % rec["parent_name"],
"message": "\n".join(lines), "message": "\n".join(lines),
"tags": ["tent", "inbox_tray"], "tags": ["tent", "inbox_tray"],
"priority": 5 if sheet_error else 4, "priority": 5 if sheet_error else 4,
+2 -2
View File
@@ -5,13 +5,13 @@
{"date": "2026-08-29", "time": "1:00 PM", "title": "Pack Hike", "location": "Plank Road City Park", "unit": "pack"}, {"date": "2026-08-29", "time": "1:00 PM", "title": "Pack Hike", "location": "Plank Road City Park", "unit": "pack"},
{"date": "2026-09-01", "time": "6:30 PM", "title": "Kickoff Party", "location": "Green Lane Park, Morrow Pavilion", "unit": "both"}, {"date": "2026-09-01", "time": "6:30 PM", "title": "Kickoff Party", "location": "Green Lane Park, Morrow Pavilion", "unit": "both"},
{"date": "2026-09-12", "time": "10:00 AM", "title": "Lower Frederick Community Day", "location": "PV Middle School West", "unit": "both"}, {"date": "2026-09-12", "time": "10:00 AM", "title": "Lower Frederick Community Day", "location": "PV Middle School West", "unit": "both"},
{"date": "2026-09-19", "time": "7:00 AM", "title": "Farmer's Market chocolate booth", "location": "Green Lane Park", "unit": "pack"}, {"date": "2026-09-19", "time": "7:00 AM", "title": "Farmers Market chocolate booth", "location": "Green Lane Park", "unit": "pack"},
{"date": "2026-09-20", "time": "1:00 PM", "title": "Pack Hike", "location": "Perkiomen Trail, Foy Park", "unit": "pack"}, {"date": "2026-09-20", "time": "1:00 PM", "title": "Pack Hike", "location": "Perkiomen Trail, Foy Park", "unit": "pack"},
{"date": "2026-09-22", "time": "6:00 PM", "title": "Boxcar Derby", "location": "St. Luke's", "unit": "pack", "badge": "FALL OPEN HOUSE"}, {"date": "2026-09-22", "time": "6:00 PM", "title": "Boxcar Derby", "location": "St. Luke's", "unit": "pack", "badge": "FALL OPEN HOUSE"},
{"date": "2026-09-26", "time": "10:30 AM", "title": "Upper Frederick Community Day", "location": "Municipal Building", "unit": "both"}, {"date": "2026-09-26", "time": "10:30 AM", "title": "Upper Frederick Community Day", "location": "Municipal Building", "unit": "both"},
{"date": "2026-10-02", "time": "6:00 PM", "title": "Parent & Scout Movie Night", "location": "St. Luke's", "unit": "pack"}, {"date": "2026-10-02", "time": "6:00 PM", "title": "Parent & Scout Movie Night", "location": "St. Luke's", "unit": "pack"},
{"date": "2026-10-10", "title": "Haunted Hayride (scouts performing)", "location": "Green Lane Park", "unit": "pack"}, {"date": "2026-10-10", "title": "Haunted Hayride (scouts performing)", "location": "Green Lane Park", "unit": "pack"},
{"date": "2026-10-17", "time": "7:00 AM", "title": "Farmer's Market chocolate booth", "location": "Green Lane Park", "unit": "pack"}, {"date": "2026-10-17", "time": "7:00 AM", "title": "Farmers Market chocolate booth", "location": "Green Lane Park", "unit": "pack"},
{"date": "2026-10-17", "end": "2026-10-18", "time": "from 4:00 PM", "title": "Fall Campout", "location": "Green Lane Park", "unit": "both", "badge": "OVERNIGHT"}, {"date": "2026-10-17", "end": "2026-10-18", "time": "from 4:00 PM", "title": "Fall Campout", "location": "Green Lane Park", "unit": "both", "badge": "OVERNIGHT"},
{"date": "2026-10-27", "time": "6:00 PM", "title": "Trunk or Treat pack meeting", "location": "St. Luke's", "unit": "pack"}, {"date": "2026-10-27", "time": "6:00 PM", "title": "Trunk or Treat pack meeting", "location": "St. Luke's", "unit": "pack"},
{"date": "2026-11-07", "time": "1:00 PM", "title": "Pack Hike", "location": "Schwenksville", "unit": "pack"}, {"date": "2026-11-07", "time": "1:00 PM", "title": "Pack Hike", "location": "Schwenksville", "unit": "pack"},