[object Object]

← back to Nodailyworries

nodailyworries.com: insurance-guide site (3 cornerstone guides, lead capture, AdSense loader + compliant privacy policy)

622db13f4cc112bb367919e3642779017bdc651b · 2026-08-05 11:23:52 -0700 · Steve Abrams

Files touched

Diff

commit 622db13f4cc112bb367919e3642779017bdc651b
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Wed Aug 5 11:23:52 2026 -0700

    nodailyworries.com: insurance-guide site (3 cornerstone guides, lead capture, AdSense loader + compliant privacy policy)
---
 .deploy.conf                      |   3 +
 .gitignore                        |   9 +
 build.mjs                         | 202 ++++++++++
 content/auto.html                 |  81 ++++
 content/home.html                 |  96 +++++
 content/life.html                 | 100 +++++
 package-lock.json                 | 828 ++++++++++++++++++++++++++++++++++++++
 package.json                      |  13 +
 public/ads.txt                    |   1 +
 public/guides/auto-insurance.html | 133 ++++++
 public/guides/home-insurance.html | 148 +++++++
 public/guides/life-insurance.html | 152 +++++++
 public/index.html                 | 117 ++++++
 public/privacy.html               |  69 ++++
 public/style.css                  |  78 ++++
 server.js                         |  41 ++
 16 files changed, 2071 insertions(+)

diff --git a/.deploy.conf b/.deploy.conf
new file mode 100644
index 0000000..242233b
--- /dev/null
+++ b/.deploy.conf
@@ -0,0 +1,3 @@
+PROJECT_NAME=nodailyworries
+DEPLOY_PATH=/root/public-projects/nodailyworries
+HEALTH_URL=http://127.0.0.1:9931/healthz
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..0d25fc4
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,9 @@
+node_modules/
+.env*
+tmp/
+*.log
+.DS_Store
+dist/
+build/
+.next/
+data/leads.jsonl
diff --git a/build.mjs b/build.mjs
new file mode 100644
index 0000000..030c58b
--- /dev/null
+++ b/build.mjs
@@ -0,0 +1,202 @@
+// Build the No Daily Worries insurance-guide site from content fragments.
+// Static-first: wraps each content/*.html fragment in a shared template and
+// writes the pages into public/. Re-run after editing any fragment.
+import { readFileSync, writeFileSync, mkdirSync } from 'node:fs';
+
+const BRAND = 'No Daily Worries';
+const DOMAIN = 'nodailyworries.com';
+const ADSENSE_PUB = 'ca-pub-5278231299883833';
+
+// AdSense Auto-ads loader — present so AdSense can review + serve once approved.
+const ADSENSE = `<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=${ADSENSE_PUB}" crossorigin="anonymous"></script>`;
+
+const GUIDES = [
+  { slug: 'auto-insurance', file: 'auto', title: 'Auto Insurance: A Plain-English Buyer’s Guide',
+    blurb: 'Coverage types, how to pick limits, what drives your premium, and real ways to save.' },
+  { slug: 'home-insurance', file: 'home', title: 'Homeowners Insurance: What’s Covered, What Isn’t, and How Much You Need',
+    blurb: 'The six coverages, replacement cost vs. cash value, the gaps to fill, and how to size it right.' },
+  { slug: 'life-insurance', file: 'life', title: 'Life Insurance: How Much You Need and Which Type to Buy',
+    blurb: 'Term vs. whole, the DIME method, underwriting, and the mistakes that cost families most.' },
+];
+
+const nav = `
+  <header class="site-head">
+    <div class="wrap">
+      <a class="brand" href="/">No Daily <span>Worries</span></a>
+      <nav>
+        <a href="/guides/auto-insurance.html">Auto</a>
+        <a href="/guides/home-insurance.html">Home</a>
+        <a href="/guides/life-insurance.html">Life</a>
+        <a href="/#quote" class="cta">Get quote help</a>
+      </nav>
+    </div>
+  </header>`;
+
+const footer = `
+  <footer class="site-foot">
+    <div class="wrap">
+      <p>&copy; ${new Date().getFullYear()} ${BRAND} &middot; ${DOMAIN}</p>
+      <p class="fine">Educational information only — not personalized insurance, financial, or legal advice.
+        Coverage varies by insurer and state; consult a licensed agent.
+        <a href="/privacy.html">Privacy</a></p>
+    </div>
+  </footer>`;
+
+const page = ({ title, desc, canonical, body }) => `<!doctype html>
+<html lang="en">
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<title>${title} · ${BRAND}</title>
+<meta name="description" content="${desc}">
+<link rel="canonical" href="https://${DOMAIN}${canonical}">
+<meta property="og:title" content="${title}">
+<meta property="og:description" content="${desc}">
+<meta property="og:type" content="website">
+<meta property="og:site_name" content="${BRAND}">
+<link rel="stylesheet" href="/style.css">
+${ADSENSE}
+</head>
+<body>
+${nav}
+${body}
+${footer}
+</body>
+</html>`;
+
+const leadForm = `
+  <section id="quote" class="quote">
+    <div class="wrap">
+      <h2>Not sure where to start?</h2>
+      <p>Tell us what you’re shopping for and we’ll point you to the right guide and next step. No spam, no obligation.</p>
+      <form class="lead" onsubmit="return submitLead(event)">
+        <select name="line" required aria-label="Type of insurance">
+          <option value="">I need help with…</option>
+          <option>Auto insurance</option>
+          <option>Homeowners insurance</option>
+          <option>Life insurance</option>
+          <option>Not sure yet</option>
+        </select>
+        <input type="email" name="email" placeholder="Your email" required aria-label="Email">
+        <input type="text" name="zip" placeholder="ZIP" pattern="[0-9]{5}" aria-label="ZIP code" maxlength="5">
+        <button type="submit">Send</button>
+      </form>
+      <p class="lead-note" id="leadNote" hidden></p>
+    </div>
+  </section>
+  <script>
+  async function submitLead(e){
+    e.preventDefault();
+    const f=e.target, note=document.getElementById('leadNote');
+    const body=Object.fromEntries(new FormData(f).entries());
+    try{
+      const r=await fetch('/api/lead',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify(body)});
+      note.hidden=false;
+      note.textContent = r.ok ? 'Thanks — check your inbox for a starting point.' : 'Something went wrong. Please try again.';
+      if(r.ok) f.reset();
+    }catch(_){ note.hidden=false; note.textContent='Network error — please try again.'; }
+    return false;
+  }
+  </script>`;
+
+// ---- home page ----
+const homeBody = `
+  <section class="hero">
+    <div class="wrap">
+      <h1>Insurance, without the daily worries.</h1>
+      <p class="sub">Clear, honest guides that help you buy the right coverage — and stop overpaying for it.
+        No jargon, no sales pitch, just what actually matters.</p>
+      <a href="#guides" class="cta big">Start with a guide</a>
+    </div>
+  </section>
+  <section id="guides" class="guides">
+    <div class="wrap">
+      <h2>Buyer’s guides</h2>
+      <div class="cards">
+        ${GUIDES.map(g => `
+        <a class="card" href="/guides/${g.slug}.html">
+          <span class="kicker">${g.slug.split('-')[0].toUpperCase()}</span>
+          <h3>${g.title}</h3>
+          <p>${g.blurb}</p>
+          <span class="read">Read the guide →</span>
+        </a>`).join('')}
+      </div>
+    </div>
+  </section>
+  <section class="why">
+    <div class="wrap">
+      <h2>Why No Daily Worries</h2>
+      <p>Insurance is sold fast and bought confused. We slow it down: every guide is written in plain English,
+      explains the trade-offs instead of pushing a product, and focuses on the two things that decide whether a
+      policy protects you — <strong>the right coverage</strong> and <strong>the right price</strong>. Whether you’re
+      insuring a first car, a first home, or a growing family, start here and buy with confidence.</p>
+    </div>
+  </section>
+  ${leadForm}`;
+
+// ---- build ----
+mkdirSync('public/guides', { recursive: true });
+
+writeFileSync('public/index.html', page({
+  title: 'Insurance buyer’s guides that save you money',
+  desc: 'Plain-English guides to auto, home, and life insurance — pick the right coverage and stop overpaying.',
+  canonical: '/', body: homeBody,
+}));
+
+for (const g of GUIDES) {
+  const frag = readFileSync(`content/${g.file}.html`, 'utf8');
+  const body = `
+  <article class="post">
+    <div class="wrap">
+      <p class="crumb"><a href="/">Home</a> / ${g.slug.split('-')[0][0].toUpperCase()+g.slug.split('-')[0].slice(1)} insurance</p>
+      <h1>${g.title}</h1>
+      ${frag}
+      <div class="post-cta">
+        <h3>Ready to compare?</h3>
+        <p>Use our quick form and we’ll point you to the right next step for your situation.</p>
+        <a href="/#quote" class="cta">Get quote help →</a>
+      </div>
+    </div>
+  </article>`;
+  writeFileSync(`public/guides/${g.slug}.html`, page({
+    title: g.title, desc: g.blurb, canonical: `/guides/${g.slug}.html`, body,
+  }));
+}
+
+// ---- privacy (AdSense-compliant: discloses third-party ad cookies + opt-outs) ----
+const privacyBody = `
+  <article class="post">
+    <div class="wrap">
+      <h1>Privacy Policy</h1>
+      <p class="crumb">${BRAND} · ${DOMAIN} · Last updated ${new Date().toLocaleDateString('en-US',{year:'numeric',month:'long',day:'numeric'})}</p>
+      <p>This policy explains what ${BRAND} collects, how we use it, and your choices.</p>
+      <h2>Information we collect</h2>
+      <p>Standard server logs (IP address, browser type, referring pages, timestamps) and information stored in
+      cookies. If you submit our contact form, we collect the email, ZIP, and interest you provide so we can respond.
+      We do not sell your personal information.</p>
+      <h2>Cookies and advertising</h2>
+      <p>We use cookies to operate the site and to display advertising. <strong>Third-party vendors, including
+      Google, use cookies to serve ads</strong> based on your prior visits to this and other websites. Google’s use
+      of advertising cookies enables it and its partners to serve ads to you based on your visit to ${DOMAIN} and/or
+      other sites on the Internet. You may opt out of personalized advertising by visiting
+      <a href="https://www.google.com/settings/ads" target="_blank" rel="noopener noreferrer">Google Ads Settings</a>,
+      or opt out of third-party vendors’ use of cookies at
+      <a href="https://www.aboutads.info/choices/" target="_blank" rel="noopener noreferrer">aboutads.info</a>
+      (or <a href="https://www.youronlinechoices.eu/" target="_blank" rel="noopener noreferrer">youronlinechoices.eu</a>
+      in the EEA/UK). Where required by law, we request consent before setting non-essential advertising cookies.
+      See <a href="https://policies.google.com/technologies/partner-sites" target="_blank" rel="noopener noreferrer">Google’s Privacy &amp; Terms</a>.</p>
+      <h2>Analytics</h2>
+      <p>We may use analytics cookies to understand aggregate site usage.</p>
+      <h2>Your choices</h2>
+      <p>Most browsers let you block or delete cookies through their settings, and you can use the opt-out links
+      above to limit personalized advertising.</p>
+      <h2>Contact</h2>
+      <p>Questions or a data request? Email <a href="mailto:privacy@${DOMAIN}">privacy@${DOMAIN}</a>.</p>
+    </div>
+  </article>`;
+writeFileSync('public/privacy.html', page({
+  title: 'Privacy Policy', desc: `How ${BRAND} handles data, cookies, and advertising.`,
+  canonical: '/privacy.html', body: privacyBody,
+}));
+
+console.log('built: index + ' + GUIDES.length + ' guides + privacy');
diff --git a/content/auto.html b/content/auto.html
new file mode 100644
index 0000000..03d7f1b
--- /dev/null
+++ b/content/auto.html
@@ -0,0 +1,81 @@
+<p>Car insurance is one of those expenses almost every driver pays but few fully understand. You buy a policy, get a card for your glove box, and hope you never have to use it. But the difference between a good policy and a bad one only shows up on your worst day — after a crash, a theft, or a claim against you. This guide breaks down what auto insurance actually covers, how to pick the right amount, what drives your price up or down, and where to find real savings without leaving yourself exposed.</p>
+
+<h2>What Auto Insurance Actually Is (and Why It's Required)</h2>
+<p>Auto insurance is a contract: you pay a premium, and in exchange your insurer agrees to pay for certain losses caused by a car accident, theft, or damage — up to the limits you chose. It exists to protect two things: <strong>other people you might injure or whose property you might damage</strong>, and <strong>your own finances</strong> if your car is damaged or someone sues you.</p>
+<p>Nearly every U.S. state legally requires drivers to carry at least a minimum amount of <strong>liability</strong> coverage. (New Hampshire and Virginia are the notable exceptions, though drivers there must still prove they can pay for damage they cause.) The reason is simple: a serious crash can cost tens or hundreds of thousands of dollars in medical bills and vehicle repairs. Without insurance, an at-fault driver could be personally on the hook — and the injured party might never be made whole. Mandatory liability coverage spreads that risk.</p>
+<p>If you finance or lease your car, your lender will also require <em>full coverage</em> (collision and comprehensive) until the loan is paid off, because they technically own part of the vehicle and want it protected.</p>
+
+<h2>The Main Coverage Types, Explained</h2>
+<p>A typical policy is really a bundle of separate coverages. Here's what each one does:</p>
+
+<h3>Liability (Bodily Injury &amp; Property Damage)</h3>
+<p>This is the legally required core of almost every policy, and it pays for harm <em>you</em> cause to others:</p>
+<ul>
+  <li><strong>Bodily Injury (BI) liability</strong> covers other people's medical bills, lost wages, and pain-and-suffering claims when you're at fault.</li>
+  <li><strong>Property Damage (PD) liability</strong> covers repairs to the other person's car, plus things like fences, mailboxes, or storefronts you hit.</li>
+</ul>
+<p>Liability limits are often written as three numbers, like <strong>100/300/100</strong> — meaning $100,000 per person injured, $300,000 total per accident, and $100,000 for property damage. Liability does <em>not</em> pay for your own injuries or your own car.</p>
+
+<h3>Collision</h3>
+<p>Pays to repair or replace <em>your</em> car after a collision — whether you hit another vehicle, a guardrail, or a pole — regardless of fault. You pay your deductible first, and insurance covers the rest up to your car's value.</p>
+
+<h3>Comprehensive</h3>
+<p>Often called "other than collision," this covers your car for non-crash events: theft, vandalism, fire, hail, floods, falling branches, and hitting an animal like a deer. It also carries a deductible.</p>
+
+<h3>Uninsured / Underinsured Motorist (UM/UIM)</h3>
+<p>Roughly one in eight U.S. drivers is uninsured. If one of them hits you — or someone with too little coverage — UM/UIM steps in to pay your injuries and, in some states, your car damage. It's inexpensive relative to the protection it provides, and highly recommended.</p>
+
+<h3>Medical Payments (MedPay) / Personal Injury Protection (PIP)</h3>
+<p>These cover <em>your own</em> (and often your passengers') medical costs after an accident, no matter who's at fault. <strong>PIP</strong> is broader — it can also cover lost wages and some other expenses — and is required in "no-fault" states. <strong>MedPay</strong> is a smaller, medical-only version available in many other states.</p>
+
+<h2>How to Choose Your Coverage Limits</h2>
+<p>State minimums are usually far too low to protect you in a serious accident. A single ER visit and surgery can blow past a $25,000 minimum in a day, and once your limit is exhausted, <em>you</em> pay the rest out of pocket — potentially including a lawsuit against your savings, home, or future wages.</p>
+<p>A practical rule of thumb: your liability limits should be high enough to cover your <strong>net worth</strong> (assets you could lose in a lawsuit). Many advisors suggest 100/300/100 as a solid baseline for drivers with something to protect, stepping up to higher limits or adding an umbrella policy as your assets grow.</p>
+<p>For collision and comprehensive, weigh the coverage against your car's value. If your vehicle is worth only a couple thousand dollars, paying for full coverage may cost more over a few years than the car itself is worth — at that point, dropping to liability-only can make sense. For newer or financed cars, keep full coverage.</p>
+
+<h2>What Affects Your Premium</h2>
+<p>Two drivers on the same street can pay very different rates. Insurers price risk using factors like:</p>
+<ul>
+  <li><strong>Age and experience</strong> — teens and drivers under ~25 pay the most; rates generally drop with age and a clean record.</li>
+  <li><strong>Driving record</strong> — accidents, speeding tickets, and especially DUIs raise premiums, often for 3–5 years.</li>
+  <li><strong>Credit-based insurance score</strong> — in most states, insurers use a credit-derived score; better credit typically means lower rates. (California, Hawaii, Massachusetts, and Michigan restrict or ban this.)</li>
+  <li><strong>Your vehicle</strong> — expensive-to-repair, high-theft, or high-horsepower cars cost more to insure; safe, common models cost less.</li>
+  <li><strong>Location</strong> — dense cities with more theft and accidents cost more than rural areas; rates vary sharply by ZIP code and state.</li>
+  <li><strong>Annual mileage and use</strong> — the less you drive, the lower your risk; long commutes push rates up.</li>
+  <li><strong>Coverage choices</strong> — higher limits and lower deductibles raise your premium; the reverse lowers it.</li>
+</ul>
+
+<h2>Concrete Ways to Save Money</h2>
+<p>You can lower your bill without gutting your protection. The biggest levers:</p>
+<ul>
+  <li><strong>Bundle your policies.</strong> Combining auto with home or renters insurance at the same company commonly saves in the range of 10–25%.</li>
+  <li><strong>Raise your deductible.</strong> Moving from a $250 to a $1,000 deductible can meaningfully cut your collision/comprehensive cost — just keep that amount in savings so you can actually pay it if you file a claim.</li>
+  <li><strong>Ask for every discount.</strong> Common ones include safe-driver, good-student, low-mileage, defensive-driving-course, paperless/autopay, paid-in-full, anti-theft device, and safety-feature discounts. Usage-based (telematics) programs can reward safe driving with double-digit savings.</li>
+  <li><strong>Shop around every 6–12 months.</strong> This is the single most valuable habit. Insurers change their pricing models constantly, so the cheapest company for you this year may not be next year. Get at least three quotes on identical coverage and compare — loyalty rarely pays.</li>
+  <li><strong>Improve your credit.</strong> Where it's allowed, a better credit score can lower your rate over time.</li>
+</ul>
+
+<h2>Common Mistakes to Avoid</h2>
+<ul>
+  <li><strong>Buying only the state minimum.</strong> It's the cheapest sticker price and the riskiest real cost — one bad accident can leave you personally liable for the overage.</li>
+  <li><strong>Chasing the lowest premium instead of the best value.</strong> A rock-bottom price often means thin limits, sky-high deductibles, or a slow claims process. Read what you're actually buying.</li>
+  <li><strong>Skipping uninsured/underinsured motorist coverage.</strong> It's cheap protection against the millions of drivers with no or too little insurance.</li>
+  <li><strong>Never re-shopping or reviewing your policy.</strong> Loyalty can quietly cost you — rates drift, life changes (a move, a paid-off car, a new driver), and an old policy may no longer fit.</li>
+  <li><strong>Letting coverage lapse.</strong> Even a short gap between policies can flag you as higher-risk and raise your next premium — cancel the old policy only after the new one is active.</li>
+</ul>
+
+<div class="faq">
+  <h2>Frequently Asked Questions</h2>
+
+  <h3>How much car insurance do I really need?</h3>
+  <p>At minimum, enough liability to cover your assets — 100/300/100 is a common baseline for drivers with savings or a home to protect. Add uninsured/underinsured motorist coverage, and keep collision and comprehensive if your car is newer or financed. Match the deductible to what you could comfortably pay after a claim.</p>
+
+  <h3>Does my credit score really affect my rate?</h3>
+  <p>In most states, yes. Insurers use a credit-based insurance score as one factor in pricing, and a stronger score generally lowers your premium. A handful of states — including California, Hawaii, Massachusetts, and Michigan — limit or prohibit the practice.</p>
+
+  <h3>Should I file a claim for minor damage?</h3>
+  <p>Not always. If the repair cost is close to (or barely above) your deductible, paying out of pocket may be cheaper than filing — a claim can raise your premium at renewal and count against your record for years. Save claims for losses large enough to justify the long-term rate impact.</p>
+
+  <h3>How often should I shop for a new policy?</h3>
+  <p>Get fresh quotes every 6 to 12 months, and any time your life changes — you move, pay off a car, add a teen driver, or your record improves. Insurers reprice constantly, so comparing three quotes on identical coverage is the most reliable way to know you're not overpaying.</p>
+</div>
diff --git a/content/home.html b/content/home.html
new file mode 100644
index 0000000..f1a0726
--- /dev/null
+++ b/content/home.html
@@ -0,0 +1,96 @@
+<p>Your home is likely the biggest purchase you'll ever make, and homeowners insurance is what protects that investment when something goes wrong. But most policies are sold with a rushed phone quote and a "sounds good" — leaving people underinsured, confused about what's actually covered, and stunned when a claim gets denied. This guide walks through what a standard policy does and doesn't do, how to size your coverage correctly, and where the real money-saving levers are.</p>
+
+<h2>What homeowners insurance actually covers</h2>
+
+<p>A standard policy is really six separate coverages bundled into one contract. Understanding each part is the key to knowing whether you're protected — or exposed.</p>
+
+<ul>
+  <li><strong>Dwelling (Coverage A)</strong> — the structure of your house itself: walls, roof, floors, foundation, and built-in systems like plumbing, wiring, and HVAC. This is the core of your policy and the number everything else is calculated from.</li>
+  <li><strong>Other structures (Coverage B)</strong> — detached structures on your property: a garage, fence, shed, gazebo, or backyard studio. This is usually set automatically at around 10% of your dwelling amount.</li>
+  <li><strong>Personal property (Coverage C)</strong> — your belongings: furniture, electronics, clothing, kitchenware, tools. Typically set at 50%–70% of the dwelling coverage. Note that high-value items like jewelry, watches, firearms, and art have per-category sub-limits (often $1,000–$2,500) unless you schedule them separately.</li>
+  <li><strong>Loss of use (Coverage D)</strong> — additional living expenses if a covered loss makes your home uninhabitable: hotel bills, restaurant meals above your normal grocery budget, temporary rentals. Usually 20%–30% of the dwelling amount.</li>
+  <li><strong>Personal liability (Coverage E)</strong> — protects you if someone is injured on your property or you accidentally damage someone else's property, covering legal defense and settlements. Standard limits start around $100,000, but $300,000–$500,000 is a smarter baseline, and it's inexpensive to raise.</li>
+  <li><strong>Medical payments (Coverage F)</strong> — a small no-fault fund (commonly $1,000–$5,000) to pay a guest's minor medical bills regardless of who was at fault, which can head off a larger liability claim.</li>
+</ul>
+
+<h2>Policy forms: HO-3 vs. HO-5</h2>
+
+<p>Most single-family homes are insured under an <strong>HO-3</strong> policy. It covers your dwelling on an "open perils" basis — meaning everything is covered <em>except</em> a specific list of exclusions — while your personal belongings are covered on a "named perils" basis, meaning only losses from listed causes (fire, theft, windstorm, etc.) qualify.</p>
+
+<p>An <strong>HO-5</strong> policy upgrades your personal property to open-perils coverage too, and generally settles more claims at full replacement cost with fewer disputes. It costs a bit more but is worth pricing out if you have a newer or higher-value home. When comparing quotes, always confirm you're comparing the same form — an HO-3 and HO-5 quote are not apples to apples.</p>
+
+<h2>Replacement cost vs. actual cash value</h2>
+
+<p>This single distinction causes more claim disappointment than any other. <strong>Replacement cost value (RCV)</strong> pays what it costs to rebuild or repurchase an item new today, with no deduction for age. <strong>Actual cash value (ACV)</strong> pays replacement cost <em>minus depreciation</em> — so a ten-year-old roof or a five-year-old laptop is reimbursed for its worn-down value, which can be a fraction of what you'll spend to replace it.</p>
+
+<p>Make sure your <em>dwelling</em> is insured for replacement cost, and strongly consider paying a little extra to insure your <em>personal property</em> for replacement cost as well. Some insurers also offer "extended" or "guaranteed" replacement cost, which pays 20%–50% above your dwelling limit if rebuilding costs spike after a widespread disaster — valuable protection given today's construction-cost volatility.</p>
+
+<h2>What's typically excluded — and the riders that fill the gaps</h2>
+
+<p>A standard policy has real holes. The most common surprises:</p>
+
+<ul>
+  <li><strong>Flooding</strong> — damage from rising water, storm surge, or overflowing bodies of water is <em>never</em> covered by a standard policy. You need a separate flood policy through the NFIP or a private flood insurer. This is the single most under-purchased coverage in the country.</li>
+  <li><strong>Earthquakes and earth movement</strong> — excluded everywhere, and essential in seismically active regions. Covered via a separate earthquake policy or endorsement.</li>
+  <li><strong>Sewer and drain backup</strong> — when water backs up through drains or a sump pump fails, standard policies exclude it. A water-backup endorsement (often $40–$100/year) closes this gap and is one of the best-value add-ons available.</li>
+  <li><strong>Normal wear and tear, neglect, and maintenance issues</strong> — insurance covers sudden accidental events, not deterioration. A roof that fails from age, gradual leaks, mold from an unaddressed problem, or pest damage are your responsibility.</li>
+  <li><strong>Scheduled valuables</strong> — to fully protect engagement rings, fine jewelry, collectibles, or high-end equipment beyond the sub-limits, add a "scheduled personal property" endorsement (a floater) that insures each item for an appraised amount.</li>
+</ul>
+
+<h2>Setting the right dwelling coverage amount</h2>
+
+<p>The most common and costly mistake is confusing your home's <strong>market value</strong> with its <strong>rebuild cost</strong>. Your dwelling coverage should equal what it would cost to rebuild your home from the ground up with current labor and materials — <em>not</em> the price you paid or its Zillow estimate, both of which include land value that doesn't burn down.</p>
+
+<p>In many markets rebuild cost is lower than market value; in others (older homes, tight construction markets) it's higher. Ask your insurer to run a replacement-cost estimator, and revisit the number after any major renovation, an addition, or a jump in local building costs. Underinsuring the dwelling can also trigger a <strong>coinsurance penalty</strong>: most policies require you to insure to at least 80% of replacement cost, and falling below that can reduce what you're paid even on a partial claim.</p>
+
+<h2>What affects your premium</h2>
+
+<p>Insurers price your policy on the likelihood and potential size of a claim. The biggest factors:</p>
+
+<ul>
+  <li><strong>Location</strong> — local risk of wildfire, hurricane, hail, tornado, or crime, plus how close you are to a fire station and hydrant.</li>
+  <li><strong>The home itself</strong> — age, square footage, construction materials, and the condition of the roof (roof age is a major factor today).</li>
+  <li><strong>Your coverage choices</strong> — dwelling limit, liability limit, RCV vs. ACV, and endorsements.</li>
+  <li><strong>Your deductible</strong> — higher deductible, lower premium.</li>
+  <li><strong>Claims history</strong> — both yours and, in many states, your credit-based insurance score.</li>
+  <li><strong>Risk features</strong> — pools, trampolines, wood stoves, and certain dog breeds can raise liability costs.</li>
+</ul>
+
+<h2>Concrete ways to save</h2>
+
+<ul>
+  <li><strong>Bundle</strong> your home and auto policies with one insurer — this is usually the single largest discount, often 10%–25%.</li>
+  <li><strong>Raise your deductible</strong> from $500 to $1,000 or $2,500 if you have the savings to cover it; premium drops meaningfully and you stop filing small claims that raise your rates anyway.</li>
+  <li><strong>Add security and safety devices</strong> — monitored alarms, smoke and water-leak sensors, deadbolts, and a modern electrical panel can all earn discounts.</li>
+  <li><strong>Stay claims-free</strong> — many insurers reward multi-year claims-free records; think twice before filing a small claim that's barely above your deductible.</li>
+  <li><strong>Ask for every discount</strong> — new-roof, new-buyer, non-smoker, retiree, paperless, autopay, and loyalty discounts often aren't applied unless you ask.</li>
+  <li><strong>Re-shop every 1–2 years</strong> — loyalty rarely pays in insurance; comparing quotes on the same coverage keeps your carrier honest.</li>
+</ul>
+
+<h2>Common mistakes to avoid</h2>
+
+<ul>
+  <li><strong>Underinsuring the dwelling.</strong> Insuring to market value or your loan balance instead of true rebuild cost leaves you unable to fully rebuild — the mistake that hurts most after a total loss.</li>
+  <li><strong>Ignoring flood risk.</strong> Roughly a quarter of flood claims come from areas <em>not</em> considered high-risk. If you're near any water or in a heavy-rain region, price a flood policy even if your lender doesn't require it.</li>
+  <li><strong>Not documenting your belongings.</strong> Without a home inventory, proving what you owned after a fire or theft is nearly impossible. Walk through your home with your phone, record video of every room, open closets and drawers, and store the file in the cloud.</li>
+  <li><strong>Choosing ACV to save a few dollars.</strong> The lower premium feels good until a claim reimburses you for a depreciated value that can't replace anything.</li>
+  <li><strong>Setting liability too low.</strong> A single serious injury lawsuit can exceed a $100,000 limit; bumping to $300,000+ (or adding an umbrella policy) costs little and protects your assets.</li>
+</ul>
+
+<div class="faq">
+  <h2>Frequently asked questions</h2>
+
+  <h3>Is homeowners insurance required by law?</h3>
+  <p>No state legally requires it, but if you have a mortgage, your lender will require it as a condition of the loan. Even if you own your home outright, going without coverage means absorbing the full cost of a fire, storm, or lawsuit yourself — a risk few homeowners can afford.</p>
+
+  <h3>Does my policy cover home-based businesses or expensive jewelry?</h3>
+  <p>Generally not adequately. Business equipment and inventory usually need a separate business or endorsement, and high-value jewelry, art, and collectibles exceed standard sub-limits. Schedule those items individually for full protection.</p>
+
+  <h3>Will filing a claim raise my rates?</h3>
+  <p>It often can, especially for water or liability claims, and multiple claims in a few years may make you harder to insure. For losses barely above your deductible, it's frequently smarter to pay out of pocket and preserve your claims-free discount.</p>
+
+  <h3>How often should I review my policy?</h3>
+  <p>At least once a year, and after any major life or property change — a renovation, a new addition, a big purchase, a home office, or a jump in local rebuild costs. A quick annual review keeps your coverage aligned with your home's real value and catches gaps before you need to file.</p>
+</div>
+
+<p><em>This article is general educational information, not personalized insurance advice. Coverage terms, limits, and exclusions vary by insurer, policy form, and state — always read your specific policy and speak with a licensed agent about your situation.</em></p>
diff --git a/content/life.html b/content/life.html
new file mode 100644
index 0000000..c9c2a0a
--- /dev/null
+++ b/content/life.html
@@ -0,0 +1,100 @@
+<p>Life insurance is one of the few financial products you buy hoping you'll never use it. Because the payout can arrive at the worst possible moment for the people you love, getting the basics right matters more than shopping for the lowest price. This guide walks through who actually needs coverage, the two main types, how much to buy, what drives your premium, and the mistakes that quietly cost families the most.</p>
+
+<h2>Who actually needs life insurance (and who may not)</h2>
+<p>The core question is simple: <strong>if you died tomorrow, would anyone suffer financially?</strong> If the answer is yes, you likely need coverage. Life insurance replaces the income, unpaid labor, or debt-coverage that disappears when you do.</p>
+<p>You probably <strong>need</strong> it if you:</p>
+<ul>
+  <li>Have a spouse, partner, or children who depend on your income</li>
+  <li>Carry a mortgage or co-signed debt that would fall on someone else</li>
+  <li>Are a stay-at-home parent (the childcare and household work you provide has real replacement cost)</li>
+  <li>Own a business with partners or loans tied to your involvement</li>
+  <li>Support aging parents or a dependent with special needs</li>
+</ul>
+<p>You may <strong>not</strong> need much (or any) if you're single with no dependents and no shared debt, or you're financially independent and could self-fund any final expenses. Two gray areas: young single adults sometimes buy a small policy young to lock in low rates before health issues appear, and retirees with grown children and no debt often find their need has shrunk or disappeared.</p>
+
+<h2>Term vs. whole/permanent life</h2>
+<p>Almost every decision comes down to these two families of coverage.</p>
+
+<h3>Term life</h3>
+<p>Term life covers you for a set period — typically 10, 20, or 30 years. If you die during the term, your beneficiaries receive the death benefit. If the term ends and you're still living, coverage simply expires. There's no cash value and no investment component, which is exactly why it's inexpensive. A healthy person in their 30s might pay in the range of $20&ndash;$40 a month for several hundred thousand dollars of coverage, though your actual quote depends on your profile.</p>
+
+<h3>Whole / permanent life</h3>
+<p>Permanent life (whole life, universal life, and variants) is designed to last your entire life and includes a <strong>cash value</strong> account that grows over time and can be borrowed against. Because it never expires and builds value, it commonly costs <strong>5 to 15 times more</strong> than a comparable term policy for the same death benefit.</p>
+
+<ul>
+  <li><strong>Cost:</strong> Term is cheap; permanent is expensive.</li>
+  <li><strong>Duration:</strong> Term lasts a fixed number of years; permanent is lifelong.</li>
+  <li><strong>Cash value:</strong> Term has none; permanent accumulates value you can access.</li>
+</ul>
+<p>For most families, term life covers the years when the financial stakes are highest — while there's a mortgage to pay and kids to raise — at a fraction of the cost. Permanent life tends to make sense for lifelong dependents, estate-planning needs, or specific tax situations, ideally reviewed with a fee-only advisor rather than bought on a sales pitch.</p>
+
+<h2>How much coverage do you need?</h2>
+<p>Two common approaches help you land on a number.</p>
+
+<h3>Income replacement</h3>
+<p>A quick rule of thumb is <strong>10 to 15 times your annual income</strong>. Someone earning $70,000 might target $700,000 to roughly $1 million. It's fast, but it ignores your specific debts and goals.</p>
+
+<h3>The DIME method</h3>
+<p>DIME is more precise because it adds up what actually needs to be covered:</p>
+<ul>
+  <li><strong>D &mdash; Debt:</strong> Total non-mortgage debt (credit cards, car loans, student loans) plus estimated final expenses.</li>
+  <li><strong>I &mdash; Income:</strong> Your annual income multiplied by the number of years your family would need support (often until the youngest child is independent).</li>
+  <li><strong>M &mdash; Mortgage:</strong> The remaining balance so your family can stay in the home.</li>
+  <li><strong>E &mdash; Education:</strong> Projected college or future schooling costs for each child.</li>
+</ul>
+<p>Add those four together, then subtract savings and any existing coverage. The result is a realistic target rather than a generic multiple.</p>
+
+<h2>Choosing a term length</h2>
+<p>Match the term to how long your dependents will actually rely on you. A useful principle: pick a length that carries you to the point where your <strong>major obligations are paid off</strong>. If your mortgage has 25 years left and your kids are toddlers, a 30-year term keeps you covered until both the house is paid and the children are grown. If your primary concern is a 15-year mortgage and teenagers who'll soon be independent, a 20-year term may be plenty. Longer terms cost more per month, so buy the length you need — not the longest one available.</p>
+
+<h2>What affects your premium</h2>
+<p>Insurers price policies on the statistical likelihood of paying a claim. The biggest levers:</p>
+<ul>
+  <li><strong>Age:</strong> The single largest factor. Every year you wait, rates rise — which is why buying sooner is usually cheaper.</li>
+  <li><strong>Health:</strong> Blood pressure, cholesterol, weight, chronic conditions, and family medical history all factor in.</li>
+  <li><strong>Smoking / nicotine use:</strong> Smokers frequently pay two to three times what non-smokers pay for identical coverage.</li>
+  <li><strong>Coverage amount:</strong> A larger death benefit means a larger premium.</li>
+  <li><strong>Term length:</strong> Longer terms cost more because the insurer is on the hook for more years.</li>
+  <li><strong>Other factors:</strong> Risky occupations or hobbies (aviation, scuba, racing) and, in some cases, your driving record.</li>
+</ul>
+
+<h2>Underwriting: the medical exam and no-exam options</h2>
+<p>Underwriting is how the insurer assesses your risk before setting a final rate. Traditional <strong>fully underwritten</strong> policies include a short medical exam — usually a paramedical professional measures height, weight, and blood pressure and collects blood and urine samples, often at your home or office. This process can take several weeks but typically produces the <strong>lowest rates</strong> for healthy applicants.</p>
+<p><strong>No-exam (accelerated underwriting)</strong> policies skip the needle and rely on your application answers plus database checks (prescription history, motor vehicle records, and similar). They're faster — sometimes approved in days — and convenient, but they often cost more or cap the coverage amount, since the insurer is accepting more uncertainty. If you're healthy and want the best price, the exam usually pays off. If you value speed, have a needle aversion, or need modest coverage quickly, no-exam can be worth the premium.</p>
+<p>Answer every health question honestly. Material misrepresentations discovered later can give the insurer grounds to deny a claim.</p>
+
+<h2>Common riders worth knowing</h2>
+<p>Riders are optional add-ons that customize a policy. A few of the most useful:</p>
+<ul>
+  <li><strong>Accelerated death benefit:</strong> Lets you access part of your own death benefit while living if you're diagnosed with a qualifying terminal illness. Frequently included at no extra cost.</li>
+  <li><strong>Waiver of premium:</strong> Waives your premiums if you become totally disabled and can't work, keeping the policy in force.</li>
+  <li><strong>Child rider:</strong> Adds a small amount of coverage for your children under one policy, and often converts to their own coverage later regardless of their health.</li>
+</ul>
+<p>Riders add cost, so add the ones that address a real risk in your situation rather than loading up on every option offered.</p>
+
+<h2>Common mistakes to avoid</h2>
+<ul>
+  <li><strong>Buying too little.</strong> A policy equal to one year's salary feels responsible but rarely covers a mortgage, years of lost income, and college. Run the DIME numbers instead of guessing.</li>
+  <li><strong>Waiting too long.</strong> Rates climb every year, and a new diagnosis can make coverage far more expensive — or unavailable. The cheapest time to buy is almost always now.</li>
+  <li><strong>Naming the wrong beneficiary — or forgetting to update it.</strong> Naming a minor child directly can freeze the payout in legal proceedings; an ex-spouse left on an old policy will legally collect over your current family. Review beneficiaries after every marriage, divorce, or birth.</li>
+  <li><strong>Letting the policy lapse.</strong> A missed premium can cancel coverage right when you need it. Use autopay, and know that most policies have a grace period (commonly around 30 days) before they lapse.</li>
+  <li><strong>Treating life insurance mainly as an investment.</strong> For most people, buying affordable term and investing the difference builds more wealth than an expensive permanent policy purchased for its cash value alone.</li>
+</ul>
+
+<div class="faq">
+  <h2>Frequently asked questions</h2>
+
+  <h3>How long does it take to get a life insurance policy?</h3>
+  <p>No-exam policies can be approved in a few days, while fully underwritten policies with a medical exam typically take a few weeks. Timing depends on how quickly you complete the application, schedule the exam, and how much medical follow-up the insurer requests.</p>
+
+  <h3>Can I have more than one policy?</h3>
+  <p>Yes. Many people "layer" policies — for example, a 30-year term to cover a mortgage plus a shorter 15-year term for the child-raising years — so coverage steps down as obligations shrink. Insurers do consider your total coverage relative to your income and net worth.</p>
+
+  <h3>Is the death benefit taxable?</h3>
+  <p>In most cases, a life insurance death benefit paid to a named beneficiary is not subject to federal income tax. There are exceptions — such as very large estates or interest paid on delayed payouts — so consult a tax professional for your specific situation.</p>
+
+  <h3>What happens if I outlive my term policy?</h3>
+  <p>Coverage simply ends, and there's no payout or refund of premiums (unless you bought a return-of-premium version). Many term policies are convertible, letting you switch to permanent coverage without a new medical exam — a useful option if your health has changed.</p>
+</div>
+
+<p>Life insurance works best when it's matched to your real obligations: enough coverage, the right type, an appropriate term, and an up-to-date beneficiary. Get those four right and revisit them after every major life change, and the policy will do exactly what you bought it to do.</p>
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..61eb7c6
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,828 @@
+{
+  "name": "nodailyworries",
+  "version": "1.0.0",
+  "lockfileVersion": 3,
+  "requires": true,
+  "packages": {
+    "": {
+      "name": "nodailyworries",
+      "version": "1.0.0",
+      "dependencies": {
+        "express": "^4.22.2"
+      }
+    },
+    "node_modules/accepts": {
+      "version": "1.3.8",
+      "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
+      "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
+      "license": "MIT",
+      "dependencies": {
+        "mime-types": "~2.1.34",
+        "negotiator": "0.6.3"
+      },
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/array-flatten": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+      "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==",
+      "license": "MIT"
+    },
+    "node_modules/body-parser": {
+      "version": "1.20.6",
+      "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.6.tgz",
+      "integrity": "sha512-p5tAzS57i5MV9fZFDj9LeIiTZEufbSe2eDozP+ElheSUq1m74CRq1jI4mYNDdVs9vQztXFLuk/Gd6BWTdwRJ5g==",
+      "license": "MIT",
+      "dependencies": {
+        "bytes": "~3.1.2",
+        "content-type": "~1.0.5",
+        "debug": "2.6.9",
+        "depd": "2.0.0",
+        "destroy": "~1.2.0",
+        "http-errors": "~2.0.1",
+        "iconv-lite": "~0.4.24",
+        "on-finished": "~2.4.1",
+        "qs": "~6.15.1",
+        "raw-body": "~2.5.3",
+        "type-is": "~1.6.18",
+        "unpipe": "~1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.8",
+        "npm": "1.2.8000 || >= 1.4.16"
+      }
+    },
+    "node_modules/bytes": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
+      "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/call-bind-apply-helpers": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
+      "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
+      "license": "MIT",
+      "dependencies": {
+        "es-errors": "^1.3.0",
+        "function-bind": "^1.1.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/call-bound": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
+      "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
+      "license": "MIT",
+      "dependencies": {
+        "call-bind-apply-helpers": "^1.0.2",
+        "get-intrinsic": "^1.3.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/content-disposition": {
+      "version": "0.5.4",
+      "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
+      "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
+      "license": "MIT",
+      "dependencies": {
+        "safe-buffer": "5.2.1"
+      },
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/content-type": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
+      "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/cookie": {
+      "version": "0.7.2",
+      "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz",
+      "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/cookie-signature": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz",
+      "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==",
+      "license": "MIT"
+    },
+    "node_modules/debug": {
+      "version": "2.6.9",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+      "license": "MIT",
+      "dependencies": {
+        "ms": "2.0.0"
+      }
+    },
+    "node_modules/depd": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
+      "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/destroy": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
+      "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8",
+        "npm": "1.2.8000 || >= 1.4.16"
+      }
+    },
+    "node_modules/dunder-proto": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
+      "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
+      "license": "MIT",
+      "dependencies": {
+        "call-bind-apply-helpers": "^1.0.1",
+        "es-errors": "^1.3.0",
+        "gopd": "^1.2.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/ee-first": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+      "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
+      "license": "MIT"
+    },
+    "node_modules/encodeurl": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
+      "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/es-define-property": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
+      "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/es-errors": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+      "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/es-object-atoms": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz",
+      "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==",
+      "license": "MIT",
+      "dependencies": {
+        "es-errors": "^1.3.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/escape-html": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+      "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
+      "license": "MIT"
+    },
+    "node_modules/etag": {
+      "version": "1.8.1",
+      "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+      "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/express": {
+      "version": "4.22.2",
+      "resolved": "https://registry.npmjs.org/express/-/express-4.22.2.tgz",
+      "integrity": "sha512-IuL+Elrou2ZvCFHs18/CIzy2Nzvo25nZ1/D2eIZlz7c+QUayAcYoiM2BthCjs+EBHVpjYjcuLDAiCWgeIX3X1Q==",
+      "license": "MIT",
+      "dependencies": {
+        "accepts": "~1.3.8",
+        "array-flatten": "1.1.1",
+        "body-parser": "~1.20.5",
+        "content-disposition": "~0.5.4",
+        "content-type": "~1.0.4",
+        "cookie": "~0.7.1",
+        "cookie-signature": "~1.0.6",
+        "debug": "2.6.9",
+        "depd": "2.0.0",
+        "encodeurl": "~2.0.0",
+        "escape-html": "~1.0.3",
+        "etag": "~1.8.1",
+        "finalhandler": "~1.3.1",
+        "fresh": "~0.5.2",
+        "http-errors": "~2.0.0",
+        "merge-descriptors": "1.0.3",
+        "methods": "~1.1.2",
+        "on-finished": "~2.4.1",
+        "parseurl": "~1.3.3",
+        "path-to-regexp": "~0.1.12",
+        "proxy-addr": "~2.0.7",
+        "qs": "~6.15.1",
+        "range-parser": "~1.2.1",
+        "safe-buffer": "5.2.1",
+        "send": "~0.19.0",
+        "serve-static": "~1.16.2",
+        "setprototypeof": "1.2.0",
+        "statuses": "~2.0.1",
+        "type-is": "~1.6.18",
+        "utils-merge": "1.0.1",
+        "vary": "~1.1.2"
+      },
+      "engines": {
+        "node": ">= 0.10.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/express"
+      }
+    },
+    "node_modules/finalhandler": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz",
+      "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==",
+      "license": "MIT",
+      "dependencies": {
+        "debug": "2.6.9",
+        "encodeurl": "~2.0.0",
+        "escape-html": "~1.0.3",
+        "on-finished": "~2.4.1",
+        "parseurl": "~1.3.3",
+        "statuses": "~2.0.2",
+        "unpipe": "~1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/forwarded": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
+      "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/fresh": {
+      "version": "0.5.2",
+      "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+      "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/function-bind": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+      "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+      "license": "MIT",
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/get-intrinsic": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
+      "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
+      "license": "MIT",
+      "dependencies": {
+        "call-bind-apply-helpers": "^1.0.2",
+        "es-define-property": "^1.0.1",
+        "es-errors": "^1.3.0",
+        "es-object-atoms": "^1.1.1",
+        "function-bind": "^1.1.2",
+        "get-proto": "^1.0.1",
+        "gopd": "^1.2.0",
+        "has-symbols": "^1.1.0",
+        "hasown": "^2.0.2",
+        "math-intrinsics": "^1.1.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/get-proto": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
+      "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
+      "license": "MIT",
+      "dependencies": {
+        "dunder-proto": "^1.0.1",
+        "es-object-atoms": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/gopd": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
+      "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/has-symbols": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
+      "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/hasown": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz",
+      "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==",
+      "license": "MIT",
+      "dependencies": {
+        "function-bind": "^1.1.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/http-errors": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz",
+      "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==",
+      "license": "MIT",
+      "dependencies": {
+        "depd": "~2.0.0",
+        "inherits": "~2.0.4",
+        "setprototypeof": "~1.2.0",
+        "statuses": "~2.0.2",
+        "toidentifier": "~1.0.1"
+      },
+      "engines": {
+        "node": ">= 0.8"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/express"
+      }
+    },
+    "node_modules/iconv-lite": {
+      "version": "0.4.24",
+      "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+      "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+      "license": "MIT",
+      "dependencies": {
+        "safer-buffer": ">= 2.1.2 < 3"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/inherits": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+      "license": "ISC"
+    },
+    "node_modules/ipaddr.js": {
+      "version": "1.9.1",
+      "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
+      "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.10"
+      }
+    },
+    "node_modules/math-intrinsics": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
+      "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/media-typer": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+      "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/merge-descriptors": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz",
+      "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==",
+      "license": "MIT",
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/methods": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
+      "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/mime": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+      "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+      "license": "MIT",
+      "bin": {
+        "mime": "cli.js"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/mime-db": {
+      "version": "1.52.0",
+      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+      "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/mime-types": {
+      "version": "2.1.35",
+      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+      "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+      "license": "MIT",
+      "dependencies": {
+        "mime-db": "1.52.0"
+      },
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/ms": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+      "license": "MIT"
+    },
+    "node_modules/negotiator": {
+      "version": "0.6.3",
+      "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
+      "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/object-inspect": {
+      "version": "1.13.4",
+      "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
+      "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/on-finished": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
+      "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
+      "license": "MIT",
+      "dependencies": {
+        "ee-first": "1.1.1"
+      },
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/parseurl": {
+      "version": "1.3.3",
+      "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
+      "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/path-to-regexp": {
+      "version": "0.1.13",
+      "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.13.tgz",
+      "integrity": "sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA==",
+      "license": "MIT"
+    },
+    "node_modules/proxy-addr": {
+      "version": "2.0.7",
+      "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
+      "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
+      "license": "MIT",
+      "dependencies": {
+        "forwarded": "0.2.0",
+        "ipaddr.js": "1.9.1"
+      },
+      "engines": {
+        "node": ">= 0.10"
+      }
+    },
+    "node_modules/qs": {
+      "version": "6.15.3",
+      "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.3.tgz",
+      "integrity": "sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A==",
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "es-define-property": "^1.0.1",
+        "side-channel": "^1.1.1"
+      },
+      "engines": {
+        "node": ">=0.6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/range-parser": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
+      "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/raw-body": {
+      "version": "2.5.3",
+      "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz",
+      "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==",
+      "license": "MIT",
+      "dependencies": {
+        "bytes": "~3.1.2",
+        "http-errors": "~2.0.1",
+        "iconv-lite": "~0.4.24",
+        "unpipe": "~1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/safe-buffer": {
+      "version": "5.2.1",
+      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+      "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "license": "MIT"
+    },
+    "node_modules/safer-buffer": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+      "license": "MIT"
+    },
+    "node_modules/send": {
+      "version": "0.19.2",
+      "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz",
+      "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==",
+      "license": "MIT",
+      "dependencies": {
+        "debug": "2.6.9",
+        "depd": "2.0.0",
+        "destroy": "1.2.0",
+        "encodeurl": "~2.0.0",
+        "escape-html": "~1.0.3",
+        "etag": "~1.8.1",
+        "fresh": "~0.5.2",
+        "http-errors": "~2.0.1",
+        "mime": "1.6.0",
+        "ms": "2.1.3",
+        "on-finished": "~2.4.1",
+        "range-parser": "~1.2.1",
+        "statuses": "~2.0.2"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
+      }
+    },
+    "node_modules/send/node_modules/ms": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+      "license": "MIT"
+    },
+    "node_modules/serve-static": {
+      "version": "1.16.3",
+      "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz",
+      "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==",
+      "license": "MIT",
+      "dependencies": {
+        "encodeurl": "~2.0.0",
+        "escape-html": "~1.0.3",
+        "parseurl": "~1.3.3",
+        "send": "~0.19.1"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
+      }
+    },
+    "node_modules/setprototypeof": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
+      "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
+      "license": "ISC"
+    },
+    "node_modules/side-channel": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz",
+      "integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==",
+      "license": "MIT",
+      "dependencies": {
+        "es-errors": "^1.3.0",
+        "object-inspect": "^1.13.4",
+        "side-channel-list": "^1.0.1",
+        "side-channel-map": "^1.0.1",
+        "side-channel-weakmap": "^1.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/side-channel-list": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz",
+      "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==",
+      "license": "MIT",
+      "dependencies": {
+        "es-errors": "^1.3.0",
+        "object-inspect": "^1.13.4"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/side-channel-map": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
+      "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
+      "license": "MIT",
+      "dependencies": {
+        "call-bound": "^1.0.2",
+        "es-errors": "^1.3.0",
+        "get-intrinsic": "^1.2.5",
+        "object-inspect": "^1.13.3"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/side-channel-weakmap": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
+      "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
+      "license": "MIT",
+      "dependencies": {
+        "call-bound": "^1.0.2",
+        "es-errors": "^1.3.0",
+        "get-intrinsic": "^1.2.5",
+        "object-inspect": "^1.13.3",
+        "side-channel-map": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/statuses": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz",
+      "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/toidentifier": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
+      "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.6"
+      }
+    },
+    "node_modules/type-is": {
+      "version": "1.6.18",
+      "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
+      "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+      "license": "MIT",
+      "dependencies": {
+        "media-typer": "0.3.0",
+        "mime-types": "~2.1.24"
+      },
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/unpipe": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+      "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/utils-merge": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+      "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4.0"
+      }
+    },
+    "node_modules/vary": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+      "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8"
+      }
+    }
+  }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..0b5a727
--- /dev/null
+++ b/package.json
@@ -0,0 +1,13 @@
+{
+  "name": "nodailyworries",
+  "version": "1.0.0",
+  "private": true,
+  "description": "No Daily Worries — plain-English insurance buyer's guides",
+  "scripts": {
+    "build": "node build.mjs",
+    "start": "node server.js"
+  },
+  "dependencies": {
+    "express": "^4.22.2"
+  }
+}
diff --git a/public/ads.txt b/public/ads.txt
new file mode 100644
index 0000000..8f11fe6
--- /dev/null
+++ b/public/ads.txt
@@ -0,0 +1 @@
+google.com, pub-5278231299883833, DIRECT, f08c47fec0942fa0
diff --git a/public/guides/auto-insurance.html b/public/guides/auto-insurance.html
new file mode 100644
index 0000000..c3644de
--- /dev/null
+++ b/public/guides/auto-insurance.html
@@ -0,0 +1,133 @@
+<!doctype html>
+<html lang="en">
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<title>Auto Insurance: A Plain-English Buyer’s Guide · No Daily Worries</title>
+<meta name="description" content="Coverage types, how to pick limits, what drives your premium, and real ways to save.">
+<link rel="canonical" href="https://nodailyworries.com/guides/auto-insurance.html">
+<meta property="og:title" content="Auto Insurance: A Plain-English Buyer’s Guide">
+<meta property="og:description" content="Coverage types, how to pick limits, what drives your premium, and real ways to save.">
+<meta property="og:type" content="website">
+<meta property="og:site_name" content="No Daily Worries">
+<link rel="stylesheet" href="/style.css">
+<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-5278231299883833" crossorigin="anonymous"></script>
+</head>
+<body>
+
+  <header class="site-head">
+    <div class="wrap">
+      <a class="brand" href="/">No Daily <span>Worries</span></a>
+      <nav>
+        <a href="/guides/auto-insurance.html">Auto</a>
+        <a href="/guides/home-insurance.html">Home</a>
+        <a href="/guides/life-insurance.html">Life</a>
+        <a href="/#quote" class="cta">Get quote help</a>
+      </nav>
+    </div>
+  </header>
+
+  <article class="post">
+    <div class="wrap">
+      <p class="crumb"><a href="/">Home</a> / Auto insurance</p>
+      <h1>Auto Insurance: A Plain-English Buyer’s Guide</h1>
+      <p>Car insurance is one of those expenses almost every driver pays but few fully understand. You buy a policy, get a card for your glove box, and hope you never have to use it. But the difference between a good policy and a bad one only shows up on your worst day — after a crash, a theft, or a claim against you. This guide breaks down what auto insurance actually covers, how to pick the right amount, what drives your price up or down, and where to find real savings without leaving yourself exposed.</p>
+
+<h2>What Auto Insurance Actually Is (and Why It's Required)</h2>
+<p>Auto insurance is a contract: you pay a premium, and in exchange your insurer agrees to pay for certain losses caused by a car accident, theft, or damage — up to the limits you chose. It exists to protect two things: <strong>other people you might injure or whose property you might damage</strong>, and <strong>your own finances</strong> if your car is damaged or someone sues you.</p>
+<p>Nearly every U.S. state legally requires drivers to carry at least a minimum amount of <strong>liability</strong> coverage. (New Hampshire and Virginia are the notable exceptions, though drivers there must still prove they can pay for damage they cause.) The reason is simple: a serious crash can cost tens or hundreds of thousands of dollars in medical bills and vehicle repairs. Without insurance, an at-fault driver could be personally on the hook — and the injured party might never be made whole. Mandatory liability coverage spreads that risk.</p>
+<p>If you finance or lease your car, your lender will also require <em>full coverage</em> (collision and comprehensive) until the loan is paid off, because they technically own part of the vehicle and want it protected.</p>
+
+<h2>The Main Coverage Types, Explained</h2>
+<p>A typical policy is really a bundle of separate coverages. Here's what each one does:</p>
+
+<h3>Liability (Bodily Injury &amp; Property Damage)</h3>
+<p>This is the legally required core of almost every policy, and it pays for harm <em>you</em> cause to others:</p>
+<ul>
+  <li><strong>Bodily Injury (BI) liability</strong> covers other people's medical bills, lost wages, and pain-and-suffering claims when you're at fault.</li>
+  <li><strong>Property Damage (PD) liability</strong> covers repairs to the other person's car, plus things like fences, mailboxes, or storefronts you hit.</li>
+</ul>
+<p>Liability limits are often written as three numbers, like <strong>100/300/100</strong> — meaning $100,000 per person injured, $300,000 total per accident, and $100,000 for property damage. Liability does <em>not</em> pay for your own injuries or your own car.</p>
+
+<h3>Collision</h3>
+<p>Pays to repair or replace <em>your</em> car after a collision — whether you hit another vehicle, a guardrail, or a pole — regardless of fault. You pay your deductible first, and insurance covers the rest up to your car's value.</p>
+
+<h3>Comprehensive</h3>
+<p>Often called "other than collision," this covers your car for non-crash events: theft, vandalism, fire, hail, floods, falling branches, and hitting an animal like a deer. It also carries a deductible.</p>
+
+<h3>Uninsured / Underinsured Motorist (UM/UIM)</h3>
+<p>Roughly one in eight U.S. drivers is uninsured. If one of them hits you — or someone with too little coverage — UM/UIM steps in to pay your injuries and, in some states, your car damage. It's inexpensive relative to the protection it provides, and highly recommended.</p>
+
+<h3>Medical Payments (MedPay) / Personal Injury Protection (PIP)</h3>
+<p>These cover <em>your own</em> (and often your passengers') medical costs after an accident, no matter who's at fault. <strong>PIP</strong> is broader — it can also cover lost wages and some other expenses — and is required in "no-fault" states. <strong>MedPay</strong> is a smaller, medical-only version available in many other states.</p>
+
+<h2>How to Choose Your Coverage Limits</h2>
+<p>State minimums are usually far too low to protect you in a serious accident. A single ER visit and surgery can blow past a $25,000 minimum in a day, and once your limit is exhausted, <em>you</em> pay the rest out of pocket — potentially including a lawsuit against your savings, home, or future wages.</p>
+<p>A practical rule of thumb: your liability limits should be high enough to cover your <strong>net worth</strong> (assets you could lose in a lawsuit). Many advisors suggest 100/300/100 as a solid baseline for drivers with something to protect, stepping up to higher limits or adding an umbrella policy as your assets grow.</p>
+<p>For collision and comprehensive, weigh the coverage against your car's value. If your vehicle is worth only a couple thousand dollars, paying for full coverage may cost more over a few years than the car itself is worth — at that point, dropping to liability-only can make sense. For newer or financed cars, keep full coverage.</p>
+
+<h2>What Affects Your Premium</h2>
+<p>Two drivers on the same street can pay very different rates. Insurers price risk using factors like:</p>
+<ul>
+  <li><strong>Age and experience</strong> — teens and drivers under ~25 pay the most; rates generally drop with age and a clean record.</li>
+  <li><strong>Driving record</strong> — accidents, speeding tickets, and especially DUIs raise premiums, often for 3–5 years.</li>
+  <li><strong>Credit-based insurance score</strong> — in most states, insurers use a credit-derived score; better credit typically means lower rates. (California, Hawaii, Massachusetts, and Michigan restrict or ban this.)</li>
+  <li><strong>Your vehicle</strong> — expensive-to-repair, high-theft, or high-horsepower cars cost more to insure; safe, common models cost less.</li>
+  <li><strong>Location</strong> — dense cities with more theft and accidents cost more than rural areas; rates vary sharply by ZIP code and state.</li>
+  <li><strong>Annual mileage and use</strong> — the less you drive, the lower your risk; long commutes push rates up.</li>
+  <li><strong>Coverage choices</strong> — higher limits and lower deductibles raise your premium; the reverse lowers it.</li>
+</ul>
+
+<h2>Concrete Ways to Save Money</h2>
+<p>You can lower your bill without gutting your protection. The biggest levers:</p>
+<ul>
+  <li><strong>Bundle your policies.</strong> Combining auto with home or renters insurance at the same company commonly saves in the range of 10–25%.</li>
+  <li><strong>Raise your deductible.</strong> Moving from a $250 to a $1,000 deductible can meaningfully cut your collision/comprehensive cost — just keep that amount in savings so you can actually pay it if you file a claim.</li>
+  <li><strong>Ask for every discount.</strong> Common ones include safe-driver, good-student, low-mileage, defensive-driving-course, paperless/autopay, paid-in-full, anti-theft device, and safety-feature discounts. Usage-based (telematics) programs can reward safe driving with double-digit savings.</li>
+  <li><strong>Shop around every 6–12 months.</strong> This is the single most valuable habit. Insurers change their pricing models constantly, so the cheapest company for you this year may not be next year. Get at least three quotes on identical coverage and compare — loyalty rarely pays.</li>
+  <li><strong>Improve your credit.</strong> Where it's allowed, a better credit score can lower your rate over time.</li>
+</ul>
+
+<h2>Common Mistakes to Avoid</h2>
+<ul>
+  <li><strong>Buying only the state minimum.</strong> It's the cheapest sticker price and the riskiest real cost — one bad accident can leave you personally liable for the overage.</li>
+  <li><strong>Chasing the lowest premium instead of the best value.</strong> A rock-bottom price often means thin limits, sky-high deductibles, or a slow claims process. Read what you're actually buying.</li>
+  <li><strong>Skipping uninsured/underinsured motorist coverage.</strong> It's cheap protection against the millions of drivers with no or too little insurance.</li>
+  <li><strong>Never re-shopping or reviewing your policy.</strong> Loyalty can quietly cost you — rates drift, life changes (a move, a paid-off car, a new driver), and an old policy may no longer fit.</li>
+  <li><strong>Letting coverage lapse.</strong> Even a short gap between policies can flag you as higher-risk and raise your next premium — cancel the old policy only after the new one is active.</li>
+</ul>
+
+<div class="faq">
+  <h2>Frequently Asked Questions</h2>
+
+  <h3>How much car insurance do I really need?</h3>
+  <p>At minimum, enough liability to cover your assets — 100/300/100 is a common baseline for drivers with savings or a home to protect. Add uninsured/underinsured motorist coverage, and keep collision and comprehensive if your car is newer or financed. Match the deductible to what you could comfortably pay after a claim.</p>
+
+  <h3>Does my credit score really affect my rate?</h3>
+  <p>In most states, yes. Insurers use a credit-based insurance score as one factor in pricing, and a stronger score generally lowers your premium. A handful of states — including California, Hawaii, Massachusetts, and Michigan — limit or prohibit the practice.</p>
+
+  <h3>Should I file a claim for minor damage?</h3>
+  <p>Not always. If the repair cost is close to (or barely above) your deductible, paying out of pocket may be cheaper than filing — a claim can raise your premium at renewal and count against your record for years. Save claims for losses large enough to justify the long-term rate impact.</p>
+
+  <h3>How often should I shop for a new policy?</h3>
+  <p>Get fresh quotes every 6 to 12 months, and any time your life changes — you move, pay off a car, add a teen driver, or your record improves. Insurers reprice constantly, so comparing three quotes on identical coverage is the most reliable way to know you're not overpaying.</p>
+</div>
+
+      <div class="post-cta">
+        <h3>Ready to compare?</h3>
+        <p>Use our quick form and we’ll point you to the right next step for your situation.</p>
+        <a href="/#quote" class="cta">Get quote help →</a>
+      </div>
+    </div>
+  </article>
+
+  <footer class="site-foot">
+    <div class="wrap">
+      <p>&copy; 2026 No Daily Worries &middot; nodailyworries.com</p>
+      <p class="fine">Educational information only — not personalized insurance, financial, or legal advice.
+        Coverage varies by insurer and state; consult a licensed agent.
+        <a href="/privacy.html">Privacy</a></p>
+    </div>
+  </footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/public/guides/home-insurance.html b/public/guides/home-insurance.html
new file mode 100644
index 0000000..21c8a2e
--- /dev/null
+++ b/public/guides/home-insurance.html
@@ -0,0 +1,148 @@
+<!doctype html>
+<html lang="en">
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<title>Homeowners Insurance: What’s Covered, What Isn’t, and How Much You Need · No Daily Worries</title>
+<meta name="description" content="The six coverages, replacement cost vs. cash value, the gaps to fill, and how to size it right.">
+<link rel="canonical" href="https://nodailyworries.com/guides/home-insurance.html">
+<meta property="og:title" content="Homeowners Insurance: What’s Covered, What Isn’t, and How Much You Need">
+<meta property="og:description" content="The six coverages, replacement cost vs. cash value, the gaps to fill, and how to size it right.">
+<meta property="og:type" content="website">
+<meta property="og:site_name" content="No Daily Worries">
+<link rel="stylesheet" href="/style.css">
+<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-5278231299883833" crossorigin="anonymous"></script>
+</head>
+<body>
+
+  <header class="site-head">
+    <div class="wrap">
+      <a class="brand" href="/">No Daily <span>Worries</span></a>
+      <nav>
+        <a href="/guides/auto-insurance.html">Auto</a>
+        <a href="/guides/home-insurance.html">Home</a>
+        <a href="/guides/life-insurance.html">Life</a>
+        <a href="/#quote" class="cta">Get quote help</a>
+      </nav>
+    </div>
+  </header>
+
+  <article class="post">
+    <div class="wrap">
+      <p class="crumb"><a href="/">Home</a> / Home insurance</p>
+      <h1>Homeowners Insurance: What’s Covered, What Isn’t, and How Much You Need</h1>
+      <p>Your home is likely the biggest purchase you'll ever make, and homeowners insurance is what protects that investment when something goes wrong. But most policies are sold with a rushed phone quote and a "sounds good" — leaving people underinsured, confused about what's actually covered, and stunned when a claim gets denied. This guide walks through what a standard policy does and doesn't do, how to size your coverage correctly, and where the real money-saving levers are.</p>
+
+<h2>What homeowners insurance actually covers</h2>
+
+<p>A standard policy is really six separate coverages bundled into one contract. Understanding each part is the key to knowing whether you're protected — or exposed.</p>
+
+<ul>
+  <li><strong>Dwelling (Coverage A)</strong> — the structure of your house itself: walls, roof, floors, foundation, and built-in systems like plumbing, wiring, and HVAC. This is the core of your policy and the number everything else is calculated from.</li>
+  <li><strong>Other structures (Coverage B)</strong> — detached structures on your property: a garage, fence, shed, gazebo, or backyard studio. This is usually set automatically at around 10% of your dwelling amount.</li>
+  <li><strong>Personal property (Coverage C)</strong> — your belongings: furniture, electronics, clothing, kitchenware, tools. Typically set at 50%–70% of the dwelling coverage. Note that high-value items like jewelry, watches, firearms, and art have per-category sub-limits (often $1,000–$2,500) unless you schedule them separately.</li>
+  <li><strong>Loss of use (Coverage D)</strong> — additional living expenses if a covered loss makes your home uninhabitable: hotel bills, restaurant meals above your normal grocery budget, temporary rentals. Usually 20%–30% of the dwelling amount.</li>
+  <li><strong>Personal liability (Coverage E)</strong> — protects you if someone is injured on your property or you accidentally damage someone else's property, covering legal defense and settlements. Standard limits start around $100,000, but $300,000–$500,000 is a smarter baseline, and it's inexpensive to raise.</li>
+  <li><strong>Medical payments (Coverage F)</strong> — a small no-fault fund (commonly $1,000–$5,000) to pay a guest's minor medical bills regardless of who was at fault, which can head off a larger liability claim.</li>
+</ul>
+
+<h2>Policy forms: HO-3 vs. HO-5</h2>
+
+<p>Most single-family homes are insured under an <strong>HO-3</strong> policy. It covers your dwelling on an "open perils" basis — meaning everything is covered <em>except</em> a specific list of exclusions — while your personal belongings are covered on a "named perils" basis, meaning only losses from listed causes (fire, theft, windstorm, etc.) qualify.</p>
+
+<p>An <strong>HO-5</strong> policy upgrades your personal property to open-perils coverage too, and generally settles more claims at full replacement cost with fewer disputes. It costs a bit more but is worth pricing out if you have a newer or higher-value home. When comparing quotes, always confirm you're comparing the same form — an HO-3 and HO-5 quote are not apples to apples.</p>
+
+<h2>Replacement cost vs. actual cash value</h2>
+
+<p>This single distinction causes more claim disappointment than any other. <strong>Replacement cost value (RCV)</strong> pays what it costs to rebuild or repurchase an item new today, with no deduction for age. <strong>Actual cash value (ACV)</strong> pays replacement cost <em>minus depreciation</em> — so a ten-year-old roof or a five-year-old laptop is reimbursed for its worn-down value, which can be a fraction of what you'll spend to replace it.</p>
+
+<p>Make sure your <em>dwelling</em> is insured for replacement cost, and strongly consider paying a little extra to insure your <em>personal property</em> for replacement cost as well. Some insurers also offer "extended" or "guaranteed" replacement cost, which pays 20%–50% above your dwelling limit if rebuilding costs spike after a widespread disaster — valuable protection given today's construction-cost volatility.</p>
+
+<h2>What's typically excluded — and the riders that fill the gaps</h2>
+
+<p>A standard policy has real holes. The most common surprises:</p>
+
+<ul>
+  <li><strong>Flooding</strong> — damage from rising water, storm surge, or overflowing bodies of water is <em>never</em> covered by a standard policy. You need a separate flood policy through the NFIP or a private flood insurer. This is the single most under-purchased coverage in the country.</li>
+  <li><strong>Earthquakes and earth movement</strong> — excluded everywhere, and essential in seismically active regions. Covered via a separate earthquake policy or endorsement.</li>
+  <li><strong>Sewer and drain backup</strong> — when water backs up through drains or a sump pump fails, standard policies exclude it. A water-backup endorsement (often $40–$100/year) closes this gap and is one of the best-value add-ons available.</li>
+  <li><strong>Normal wear and tear, neglect, and maintenance issues</strong> — insurance covers sudden accidental events, not deterioration. A roof that fails from age, gradual leaks, mold from an unaddressed problem, or pest damage are your responsibility.</li>
+  <li><strong>Scheduled valuables</strong> — to fully protect engagement rings, fine jewelry, collectibles, or high-end equipment beyond the sub-limits, add a "scheduled personal property" endorsement (a floater) that insures each item for an appraised amount.</li>
+</ul>
+
+<h2>Setting the right dwelling coverage amount</h2>
+
+<p>The most common and costly mistake is confusing your home's <strong>market value</strong> with its <strong>rebuild cost</strong>. Your dwelling coverage should equal what it would cost to rebuild your home from the ground up with current labor and materials — <em>not</em> the price you paid or its Zillow estimate, both of which include land value that doesn't burn down.</p>
+
+<p>In many markets rebuild cost is lower than market value; in others (older homes, tight construction markets) it's higher. Ask your insurer to run a replacement-cost estimator, and revisit the number after any major renovation, an addition, or a jump in local building costs. Underinsuring the dwelling can also trigger a <strong>coinsurance penalty</strong>: most policies require you to insure to at least 80% of replacement cost, and falling below that can reduce what you're paid even on a partial claim.</p>
+
+<h2>What affects your premium</h2>
+
+<p>Insurers price your policy on the likelihood and potential size of a claim. The biggest factors:</p>
+
+<ul>
+  <li><strong>Location</strong> — local risk of wildfire, hurricane, hail, tornado, or crime, plus how close you are to a fire station and hydrant.</li>
+  <li><strong>The home itself</strong> — age, square footage, construction materials, and the condition of the roof (roof age is a major factor today).</li>
+  <li><strong>Your coverage choices</strong> — dwelling limit, liability limit, RCV vs. ACV, and endorsements.</li>
+  <li><strong>Your deductible</strong> — higher deductible, lower premium.</li>
+  <li><strong>Claims history</strong> — both yours and, in many states, your credit-based insurance score.</li>
+  <li><strong>Risk features</strong> — pools, trampolines, wood stoves, and certain dog breeds can raise liability costs.</li>
+</ul>
+
+<h2>Concrete ways to save</h2>
+
+<ul>
+  <li><strong>Bundle</strong> your home and auto policies with one insurer — this is usually the single largest discount, often 10%–25%.</li>
+  <li><strong>Raise your deductible</strong> from $500 to $1,000 or $2,500 if you have the savings to cover it; premium drops meaningfully and you stop filing small claims that raise your rates anyway.</li>
+  <li><strong>Add security and safety devices</strong> — monitored alarms, smoke and water-leak sensors, deadbolts, and a modern electrical panel can all earn discounts.</li>
+  <li><strong>Stay claims-free</strong> — many insurers reward multi-year claims-free records; think twice before filing a small claim that's barely above your deductible.</li>
+  <li><strong>Ask for every discount</strong> — new-roof, new-buyer, non-smoker, retiree, paperless, autopay, and loyalty discounts often aren't applied unless you ask.</li>
+  <li><strong>Re-shop every 1–2 years</strong> — loyalty rarely pays in insurance; comparing quotes on the same coverage keeps your carrier honest.</li>
+</ul>
+
+<h2>Common mistakes to avoid</h2>
+
+<ul>
+  <li><strong>Underinsuring the dwelling.</strong> Insuring to market value or your loan balance instead of true rebuild cost leaves you unable to fully rebuild — the mistake that hurts most after a total loss.</li>
+  <li><strong>Ignoring flood risk.</strong> Roughly a quarter of flood claims come from areas <em>not</em> considered high-risk. If you're near any water or in a heavy-rain region, price a flood policy even if your lender doesn't require it.</li>
+  <li><strong>Not documenting your belongings.</strong> Without a home inventory, proving what you owned after a fire or theft is nearly impossible. Walk through your home with your phone, record video of every room, open closets and drawers, and store the file in the cloud.</li>
+  <li><strong>Choosing ACV to save a few dollars.</strong> The lower premium feels good until a claim reimburses you for a depreciated value that can't replace anything.</li>
+  <li><strong>Setting liability too low.</strong> A single serious injury lawsuit can exceed a $100,000 limit; bumping to $300,000+ (or adding an umbrella policy) costs little and protects your assets.</li>
+</ul>
+
+<div class="faq">
+  <h2>Frequently asked questions</h2>
+
+  <h3>Is homeowners insurance required by law?</h3>
+  <p>No state legally requires it, but if you have a mortgage, your lender will require it as a condition of the loan. Even if you own your home outright, going without coverage means absorbing the full cost of a fire, storm, or lawsuit yourself — a risk few homeowners can afford.</p>
+
+  <h3>Does my policy cover home-based businesses or expensive jewelry?</h3>
+  <p>Generally not adequately. Business equipment and inventory usually need a separate business or endorsement, and high-value jewelry, art, and collectibles exceed standard sub-limits. Schedule those items individually for full protection.</p>
+
+  <h3>Will filing a claim raise my rates?</h3>
+  <p>It often can, especially for water or liability claims, and multiple claims in a few years may make you harder to insure. For losses barely above your deductible, it's frequently smarter to pay out of pocket and preserve your claims-free discount.</p>
+
+  <h3>How often should I review my policy?</h3>
+  <p>At least once a year, and after any major life or property change — a renovation, a new addition, a big purchase, a home office, or a jump in local rebuild costs. A quick annual review keeps your coverage aligned with your home's real value and catches gaps before you need to file.</p>
+</div>
+
+<p><em>This article is general educational information, not personalized insurance advice. Coverage terms, limits, and exclusions vary by insurer, policy form, and state — always read your specific policy and speak with a licensed agent about your situation.</em></p>
+
+      <div class="post-cta">
+        <h3>Ready to compare?</h3>
+        <p>Use our quick form and we’ll point you to the right next step for your situation.</p>
+        <a href="/#quote" class="cta">Get quote help →</a>
+      </div>
+    </div>
+  </article>
+
+  <footer class="site-foot">
+    <div class="wrap">
+      <p>&copy; 2026 No Daily Worries &middot; nodailyworries.com</p>
+      <p class="fine">Educational information only — not personalized insurance, financial, or legal advice.
+        Coverage varies by insurer and state; consult a licensed agent.
+        <a href="/privacy.html">Privacy</a></p>
+    </div>
+  </footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/public/guides/life-insurance.html b/public/guides/life-insurance.html
new file mode 100644
index 0000000..3032ae0
--- /dev/null
+++ b/public/guides/life-insurance.html
@@ -0,0 +1,152 @@
+<!doctype html>
+<html lang="en">
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<title>Life Insurance: How Much You Need and Which Type to Buy · No Daily Worries</title>
+<meta name="description" content="Term vs. whole, the DIME method, underwriting, and the mistakes that cost families most.">
+<link rel="canonical" href="https://nodailyworries.com/guides/life-insurance.html">
+<meta property="og:title" content="Life Insurance: How Much You Need and Which Type to Buy">
+<meta property="og:description" content="Term vs. whole, the DIME method, underwriting, and the mistakes that cost families most.">
+<meta property="og:type" content="website">
+<meta property="og:site_name" content="No Daily Worries">
+<link rel="stylesheet" href="/style.css">
+<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-5278231299883833" crossorigin="anonymous"></script>
+</head>
+<body>
+
+  <header class="site-head">
+    <div class="wrap">
+      <a class="brand" href="/">No Daily <span>Worries</span></a>
+      <nav>
+        <a href="/guides/auto-insurance.html">Auto</a>
+        <a href="/guides/home-insurance.html">Home</a>
+        <a href="/guides/life-insurance.html">Life</a>
+        <a href="/#quote" class="cta">Get quote help</a>
+      </nav>
+    </div>
+  </header>
+
+  <article class="post">
+    <div class="wrap">
+      <p class="crumb"><a href="/">Home</a> / Life insurance</p>
+      <h1>Life Insurance: How Much You Need and Which Type to Buy</h1>
+      <p>Life insurance is one of the few financial products you buy hoping you'll never use it. Because the payout can arrive at the worst possible moment for the people you love, getting the basics right matters more than shopping for the lowest price. This guide walks through who actually needs coverage, the two main types, how much to buy, what drives your premium, and the mistakes that quietly cost families the most.</p>
+
+<h2>Who actually needs life insurance (and who may not)</h2>
+<p>The core question is simple: <strong>if you died tomorrow, would anyone suffer financially?</strong> If the answer is yes, you likely need coverage. Life insurance replaces the income, unpaid labor, or debt-coverage that disappears when you do.</p>
+<p>You probably <strong>need</strong> it if you:</p>
+<ul>
+  <li>Have a spouse, partner, or children who depend on your income</li>
+  <li>Carry a mortgage or co-signed debt that would fall on someone else</li>
+  <li>Are a stay-at-home parent (the childcare and household work you provide has real replacement cost)</li>
+  <li>Own a business with partners or loans tied to your involvement</li>
+  <li>Support aging parents or a dependent with special needs</li>
+</ul>
+<p>You may <strong>not</strong> need much (or any) if you're single with no dependents and no shared debt, or you're financially independent and could self-fund any final expenses. Two gray areas: young single adults sometimes buy a small policy young to lock in low rates before health issues appear, and retirees with grown children and no debt often find their need has shrunk or disappeared.</p>
+
+<h2>Term vs. whole/permanent life</h2>
+<p>Almost every decision comes down to these two families of coverage.</p>
+
+<h3>Term life</h3>
+<p>Term life covers you for a set period — typically 10, 20, or 30 years. If you die during the term, your beneficiaries receive the death benefit. If the term ends and you're still living, coverage simply expires. There's no cash value and no investment component, which is exactly why it's inexpensive. A healthy person in their 30s might pay in the range of $20&ndash;$40 a month for several hundred thousand dollars of coverage, though your actual quote depends on your profile.</p>
+
+<h3>Whole / permanent life</h3>
+<p>Permanent life (whole life, universal life, and variants) is designed to last your entire life and includes a <strong>cash value</strong> account that grows over time and can be borrowed against. Because it never expires and builds value, it commonly costs <strong>5 to 15 times more</strong> than a comparable term policy for the same death benefit.</p>
+
+<ul>
+  <li><strong>Cost:</strong> Term is cheap; permanent is expensive.</li>
+  <li><strong>Duration:</strong> Term lasts a fixed number of years; permanent is lifelong.</li>
+  <li><strong>Cash value:</strong> Term has none; permanent accumulates value you can access.</li>
+</ul>
+<p>For most families, term life covers the years when the financial stakes are highest — while there's a mortgage to pay and kids to raise — at a fraction of the cost. Permanent life tends to make sense for lifelong dependents, estate-planning needs, or specific tax situations, ideally reviewed with a fee-only advisor rather than bought on a sales pitch.</p>
+
+<h2>How much coverage do you need?</h2>
+<p>Two common approaches help you land on a number.</p>
+
+<h3>Income replacement</h3>
+<p>A quick rule of thumb is <strong>10 to 15 times your annual income</strong>. Someone earning $70,000 might target $700,000 to roughly $1 million. It's fast, but it ignores your specific debts and goals.</p>
+
+<h3>The DIME method</h3>
+<p>DIME is more precise because it adds up what actually needs to be covered:</p>
+<ul>
+  <li><strong>D &mdash; Debt:</strong> Total non-mortgage debt (credit cards, car loans, student loans) plus estimated final expenses.</li>
+  <li><strong>I &mdash; Income:</strong> Your annual income multiplied by the number of years your family would need support (often until the youngest child is independent).</li>
+  <li><strong>M &mdash; Mortgage:</strong> The remaining balance so your family can stay in the home.</li>
+  <li><strong>E &mdash; Education:</strong> Projected college or future schooling costs for each child.</li>
+</ul>
+<p>Add those four together, then subtract savings and any existing coverage. The result is a realistic target rather than a generic multiple.</p>
+
+<h2>Choosing a term length</h2>
+<p>Match the term to how long your dependents will actually rely on you. A useful principle: pick a length that carries you to the point where your <strong>major obligations are paid off</strong>. If your mortgage has 25 years left and your kids are toddlers, a 30-year term keeps you covered until both the house is paid and the children are grown. If your primary concern is a 15-year mortgage and teenagers who'll soon be independent, a 20-year term may be plenty. Longer terms cost more per month, so buy the length you need — not the longest one available.</p>
+
+<h2>What affects your premium</h2>
+<p>Insurers price policies on the statistical likelihood of paying a claim. The biggest levers:</p>
+<ul>
+  <li><strong>Age:</strong> The single largest factor. Every year you wait, rates rise — which is why buying sooner is usually cheaper.</li>
+  <li><strong>Health:</strong> Blood pressure, cholesterol, weight, chronic conditions, and family medical history all factor in.</li>
+  <li><strong>Smoking / nicotine use:</strong> Smokers frequently pay two to three times what non-smokers pay for identical coverage.</li>
+  <li><strong>Coverage amount:</strong> A larger death benefit means a larger premium.</li>
+  <li><strong>Term length:</strong> Longer terms cost more because the insurer is on the hook for more years.</li>
+  <li><strong>Other factors:</strong> Risky occupations or hobbies (aviation, scuba, racing) and, in some cases, your driving record.</li>
+</ul>
+
+<h2>Underwriting: the medical exam and no-exam options</h2>
+<p>Underwriting is how the insurer assesses your risk before setting a final rate. Traditional <strong>fully underwritten</strong> policies include a short medical exam — usually a paramedical professional measures height, weight, and blood pressure and collects blood and urine samples, often at your home or office. This process can take several weeks but typically produces the <strong>lowest rates</strong> for healthy applicants.</p>
+<p><strong>No-exam (accelerated underwriting)</strong> policies skip the needle and rely on your application answers plus database checks (prescription history, motor vehicle records, and similar). They're faster — sometimes approved in days — and convenient, but they often cost more or cap the coverage amount, since the insurer is accepting more uncertainty. If you're healthy and want the best price, the exam usually pays off. If you value speed, have a needle aversion, or need modest coverage quickly, no-exam can be worth the premium.</p>
+<p>Answer every health question honestly. Material misrepresentations discovered later can give the insurer grounds to deny a claim.</p>
+
+<h2>Common riders worth knowing</h2>
+<p>Riders are optional add-ons that customize a policy. A few of the most useful:</p>
+<ul>
+  <li><strong>Accelerated death benefit:</strong> Lets you access part of your own death benefit while living if you're diagnosed with a qualifying terminal illness. Frequently included at no extra cost.</li>
+  <li><strong>Waiver of premium:</strong> Waives your premiums if you become totally disabled and can't work, keeping the policy in force.</li>
+  <li><strong>Child rider:</strong> Adds a small amount of coverage for your children under one policy, and often converts to their own coverage later regardless of their health.</li>
+</ul>
+<p>Riders add cost, so add the ones that address a real risk in your situation rather than loading up on every option offered.</p>
+
+<h2>Common mistakes to avoid</h2>
+<ul>
+  <li><strong>Buying too little.</strong> A policy equal to one year's salary feels responsible but rarely covers a mortgage, years of lost income, and college. Run the DIME numbers instead of guessing.</li>
+  <li><strong>Waiting too long.</strong> Rates climb every year, and a new diagnosis can make coverage far more expensive — or unavailable. The cheapest time to buy is almost always now.</li>
+  <li><strong>Naming the wrong beneficiary — or forgetting to update it.</strong> Naming a minor child directly can freeze the payout in legal proceedings; an ex-spouse left on an old policy will legally collect over your current family. Review beneficiaries after every marriage, divorce, or birth.</li>
+  <li><strong>Letting the policy lapse.</strong> A missed premium can cancel coverage right when you need it. Use autopay, and know that most policies have a grace period (commonly around 30 days) before they lapse.</li>
+  <li><strong>Treating life insurance mainly as an investment.</strong> For most people, buying affordable term and investing the difference builds more wealth than an expensive permanent policy purchased for its cash value alone.</li>
+</ul>
+
+<div class="faq">
+  <h2>Frequently asked questions</h2>
+
+  <h3>How long does it take to get a life insurance policy?</h3>
+  <p>No-exam policies can be approved in a few days, while fully underwritten policies with a medical exam typically take a few weeks. Timing depends on how quickly you complete the application, schedule the exam, and how much medical follow-up the insurer requests.</p>
+
+  <h3>Can I have more than one policy?</h3>
+  <p>Yes. Many people "layer" policies — for example, a 30-year term to cover a mortgage plus a shorter 15-year term for the child-raising years — so coverage steps down as obligations shrink. Insurers do consider your total coverage relative to your income and net worth.</p>
+
+  <h3>Is the death benefit taxable?</h3>
+  <p>In most cases, a life insurance death benefit paid to a named beneficiary is not subject to federal income tax. There are exceptions — such as very large estates or interest paid on delayed payouts — so consult a tax professional for your specific situation.</p>
+
+  <h3>What happens if I outlive my term policy?</h3>
+  <p>Coverage simply ends, and there's no payout or refund of premiums (unless you bought a return-of-premium version). Many term policies are convertible, letting you switch to permanent coverage without a new medical exam — a useful option if your health has changed.</p>
+</div>
+
+<p>Life insurance works best when it's matched to your real obligations: enough coverage, the right type, an appropriate term, and an up-to-date beneficiary. Get those four right and revisit them after every major life change, and the policy will do exactly what you bought it to do.</p>
+
+      <div class="post-cta">
+        <h3>Ready to compare?</h3>
+        <p>Use our quick form and we’ll point you to the right next step for your situation.</p>
+        <a href="/#quote" class="cta">Get quote help →</a>
+      </div>
+    </div>
+  </article>
+
+  <footer class="site-foot">
+    <div class="wrap">
+      <p>&copy; 2026 No Daily Worries &middot; nodailyworries.com</p>
+      <p class="fine">Educational information only — not personalized insurance, financial, or legal advice.
+        Coverage varies by insurer and state; consult a licensed agent.
+        <a href="/privacy.html">Privacy</a></p>
+    </div>
+  </footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/public/index.html b/public/index.html
new file mode 100644
index 0000000..d29ca77
--- /dev/null
+++ b/public/index.html
@@ -0,0 +1,117 @@
+<!doctype html>
+<html lang="en">
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<title>Insurance buyer’s guides that save you money · No Daily Worries</title>
+<meta name="description" content="Plain-English guides to auto, home, and life insurance — pick the right coverage and stop overpaying.">
+<link rel="canonical" href="https://nodailyworries.com/">
+<meta property="og:title" content="Insurance buyer’s guides that save you money">
+<meta property="og:description" content="Plain-English guides to auto, home, and life insurance — pick the right coverage and stop overpaying.">
+<meta property="og:type" content="website">
+<meta property="og:site_name" content="No Daily Worries">
+<link rel="stylesheet" href="/style.css">
+<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-5278231299883833" crossorigin="anonymous"></script>
+</head>
+<body>
+
+  <header class="site-head">
+    <div class="wrap">
+      <a class="brand" href="/">No Daily <span>Worries</span></a>
+      <nav>
+        <a href="/guides/auto-insurance.html">Auto</a>
+        <a href="/guides/home-insurance.html">Home</a>
+        <a href="/guides/life-insurance.html">Life</a>
+        <a href="/#quote" class="cta">Get quote help</a>
+      </nav>
+    </div>
+  </header>
+
+  <section class="hero">
+    <div class="wrap">
+      <h1>Insurance, without the daily worries.</h1>
+      <p class="sub">Clear, honest guides that help you buy the right coverage — and stop overpaying for it.
+        No jargon, no sales pitch, just what actually matters.</p>
+      <a href="#guides" class="cta big">Start with a guide</a>
+    </div>
+  </section>
+  <section id="guides" class="guides">
+    <div class="wrap">
+      <h2>Buyer’s guides</h2>
+      <div class="cards">
+        
+        <a class="card" href="/guides/auto-insurance.html">
+          <span class="kicker">AUTO</span>
+          <h3>Auto Insurance: A Plain-English Buyer’s Guide</h3>
+          <p>Coverage types, how to pick limits, what drives your premium, and real ways to save.</p>
+          <span class="read">Read the guide →</span>
+        </a>
+        <a class="card" href="/guides/home-insurance.html">
+          <span class="kicker">HOME</span>
+          <h3>Homeowners Insurance: What’s Covered, What Isn’t, and How Much You Need</h3>
+          <p>The six coverages, replacement cost vs. cash value, the gaps to fill, and how to size it right.</p>
+          <span class="read">Read the guide →</span>
+        </a>
+        <a class="card" href="/guides/life-insurance.html">
+          <span class="kicker">LIFE</span>
+          <h3>Life Insurance: How Much You Need and Which Type to Buy</h3>
+          <p>Term vs. whole, the DIME method, underwriting, and the mistakes that cost families most.</p>
+          <span class="read">Read the guide →</span>
+        </a>
+      </div>
+    </div>
+  </section>
+  <section class="why">
+    <div class="wrap">
+      <h2>Why No Daily Worries</h2>
+      <p>Insurance is sold fast and bought confused. We slow it down: every guide is written in plain English,
+      explains the trade-offs instead of pushing a product, and focuses on the two things that decide whether a
+      policy protects you — <strong>the right coverage</strong> and <strong>the right price</strong>. Whether you’re
+      insuring a first car, a first home, or a growing family, start here and buy with confidence.</p>
+    </div>
+  </section>
+  
+  <section id="quote" class="quote">
+    <div class="wrap">
+      <h2>Not sure where to start?</h2>
+      <p>Tell us what you’re shopping for and we’ll point you to the right guide and next step. No spam, no obligation.</p>
+      <form class="lead" onsubmit="return submitLead(event)">
+        <select name="line" required aria-label="Type of insurance">
+          <option value="">I need help with…</option>
+          <option>Auto insurance</option>
+          <option>Homeowners insurance</option>
+          <option>Life insurance</option>
+          <option>Not sure yet</option>
+        </select>
+        <input type="email" name="email" placeholder="Your email" required aria-label="Email">
+        <input type="text" name="zip" placeholder="ZIP" pattern="[0-9]{5}" aria-label="ZIP code" maxlength="5">
+        <button type="submit">Send</button>
+      </form>
+      <p class="lead-note" id="leadNote" hidden></p>
+    </div>
+  </section>
+  <script>
+  async function submitLead(e){
+    e.preventDefault();
+    const f=e.target, note=document.getElementById('leadNote');
+    const body=Object.fromEntries(new FormData(f).entries());
+    try{
+      const r=await fetch('/api/lead',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify(body)});
+      note.hidden=false;
+      note.textContent = r.ok ? 'Thanks — check your inbox for a starting point.' : 'Something went wrong. Please try again.';
+      if(r.ok) f.reset();
+    }catch(_){ note.hidden=false; note.textContent='Network error — please try again.'; }
+    return false;
+  }
+  </script>
+
+  <footer class="site-foot">
+    <div class="wrap">
+      <p>&copy; 2026 No Daily Worries &middot; nodailyworries.com</p>
+      <p class="fine">Educational information only — not personalized insurance, financial, or legal advice.
+        Coverage varies by insurer and state; consult a licensed agent.
+        <a href="/privacy.html">Privacy</a></p>
+    </div>
+  </footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/public/privacy.html b/public/privacy.html
new file mode 100644
index 0000000..d023242
--- /dev/null
+++ b/public/privacy.html
@@ -0,0 +1,69 @@
+<!doctype html>
+<html lang="en">
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width,initial-scale=1">
+<title>Privacy Policy · No Daily Worries</title>
+<meta name="description" content="How No Daily Worries handles data, cookies, and advertising.">
+<link rel="canonical" href="https://nodailyworries.com/privacy.html">
+<meta property="og:title" content="Privacy Policy">
+<meta property="og:description" content="How No Daily Worries handles data, cookies, and advertising.">
+<meta property="og:type" content="website">
+<meta property="og:site_name" content="No Daily Worries">
+<link rel="stylesheet" href="/style.css">
+<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-5278231299883833" crossorigin="anonymous"></script>
+</head>
+<body>
+
+  <header class="site-head">
+    <div class="wrap">
+      <a class="brand" href="/">No Daily <span>Worries</span></a>
+      <nav>
+        <a href="/guides/auto-insurance.html">Auto</a>
+        <a href="/guides/home-insurance.html">Home</a>
+        <a href="/guides/life-insurance.html">Life</a>
+        <a href="/#quote" class="cta">Get quote help</a>
+      </nav>
+    </div>
+  </header>
+
+  <article class="post">
+    <div class="wrap">
+      <h1>Privacy Policy</h1>
+      <p class="crumb">No Daily Worries · nodailyworries.com · Last updated August 5, 2026</p>
+      <p>This policy explains what No Daily Worries collects, how we use it, and your choices.</p>
+      <h2>Information we collect</h2>
+      <p>Standard server logs (IP address, browser type, referring pages, timestamps) and information stored in
+      cookies. If you submit our contact form, we collect the email, ZIP, and interest you provide so we can respond.
+      We do not sell your personal information.</p>
+      <h2>Cookies and advertising</h2>
+      <p>We use cookies to operate the site and to display advertising. <strong>Third-party vendors, including
+      Google, use cookies to serve ads</strong> based on your prior visits to this and other websites. Google’s use
+      of advertising cookies enables it and its partners to serve ads to you based on your visit to nodailyworries.com and/or
+      other sites on the Internet. You may opt out of personalized advertising by visiting
+      <a href="https://www.google.com/settings/ads" target="_blank" rel="noopener noreferrer">Google Ads Settings</a>,
+      or opt out of third-party vendors’ use of cookies at
+      <a href="https://www.aboutads.info/choices/" target="_blank" rel="noopener noreferrer">aboutads.info</a>
+      (or <a href="https://www.youronlinechoices.eu/" target="_blank" rel="noopener noreferrer">youronlinechoices.eu</a>
+      in the EEA/UK). Where required by law, we request consent before setting non-essential advertising cookies.
+      See <a href="https://policies.google.com/technologies/partner-sites" target="_blank" rel="noopener noreferrer">Google’s Privacy &amp; Terms</a>.</p>
+      <h2>Analytics</h2>
+      <p>We may use analytics cookies to understand aggregate site usage.</p>
+      <h2>Your choices</h2>
+      <p>Most browsers let you block or delete cookies through their settings, and you can use the opt-out links
+      above to limit personalized advertising.</p>
+      <h2>Contact</h2>
+      <p>Questions or a data request? Email <a href="mailto:privacy@nodailyworries.com">privacy@nodailyworries.com</a>.</p>
+    </div>
+  </article>
+
+  <footer class="site-foot">
+    <div class="wrap">
+      <p>&copy; 2026 No Daily Worries &middot; nodailyworries.com</p>
+      <p class="fine">Educational information only — not personalized insurance, financial, or legal advice.
+        Coverage varies by insurer and state; consult a licensed agent.
+        <a href="/privacy.html">Privacy</a></p>
+    </div>
+  </footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/public/style.css b/public/style.css
new file mode 100644
index 0000000..3b99d33
--- /dev/null
+++ b/public/style.css
@@ -0,0 +1,78 @@
+:root{
+  --ink:#14202b; --muted:#5a6b78; --line:#e5e9ec; --bg:#fbfcfd;
+  --brand:#0e7c66; --brand-ink:#0a5c4b; --accent:#f4b942; --max:960px;
+}
+*{box-sizing:border-box}
+html{-webkit-text-size-adjust:100%}
+body{margin:0;font:16px/1.65 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;color:var(--ink);background:var(--bg)}
+.wrap{max-width:var(--max);margin:0 auto;padding:0 20px}
+a{color:var(--brand-ink)}
+h1,h2,h3{line-height:1.25;color:var(--ink)}
+h1{font-size:2rem;margin:.2em 0 .5em}
+h2{font-size:1.4rem;margin:1.8em 0 .5em}
+h3{font-size:1.12rem;margin:1.4em 0 .4em}
+p{margin:.7em 0}
+ul{margin:.6em 0 .9em;padding-left:1.3em}
+li{margin:.35em 0}
+
+/* header */
+.site-head{background:#fff;border-bottom:1px solid var(--line);position:sticky;top:0;z-index:10}
+.site-head .wrap{display:flex;align-items:center;justify-content:space-between;height:62px;gap:16px}
+.brand{font-weight:800;font-size:1.15rem;text-decoration:none;color:var(--ink);letter-spacing:-.02em}
+.brand span{color:var(--brand)}
+.site-head nav{display:flex;align-items:center;gap:18px}
+.site-head nav a{color:var(--muted);text-decoration:none;font-weight:600;font-size:.95rem}
+.site-head nav a:hover{color:var(--ink)}
+.cta{background:var(--brand);color:#fff!important;padding:.5em .9em;border-radius:7px;text-decoration:none;font-weight:700}
+.cta:hover{background:var(--brand-ink)}
+.cta.big{display:inline-block;font-size:1.05rem;padding:.7em 1.3em;margin-top:.4em}
+
+/* hero */
+.hero{background:linear-gradient(160deg,#0e7c66,#0a5c4b);color:#fff;padding:64px 0 56px}
+.hero h1{color:#fff;font-size:2.6rem;letter-spacing:-.02em;max-width:16ch}
+.hero .sub{color:#d9efe9;font-size:1.15rem;max-width:60ch;margin:.6em 0 1em}
+
+/* guide cards */
+.guides{padding:52px 0}
+.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:20px;margin-top:18px}
+.card{display:block;background:#fff;border:1px solid var(--line);border-radius:12px;padding:22px;text-decoration:none;color:var(--ink);transition:.15s}
+.card:hover{border-color:var(--brand);box-shadow:0 6px 22px rgba(14,124,102,.10);transform:translateY(-2px)}
+.card .kicker{font-size:.72rem;font-weight:800;letter-spacing:.14em;color:var(--brand)}
+.card h3{margin:.35em 0 .3em;font-size:1.12rem}
+.card p{color:var(--muted);font-size:.95rem;margin:.3em 0 .8em}
+.card .read{font-weight:700;color:var(--brand-ink);font-size:.9rem}
+
+.why{padding:12px 0 40px}
+.why p{max-width:70ch;color:#33434f}
+
+/* article */
+.post{padding:34px 0 20px}
+.post .wrap{max-width:760px}
+.crumb{font-size:.85rem;color:var(--muted);margin:0 0 .4em}
+.crumb a{color:var(--muted)}
+.post h2{border-top:1px solid var(--line);padding-top:1.1em}
+.post .faq{background:#fff;border:1px solid var(--line);border-radius:12px;padding:6px 22px 18px;margin:26px 0}
+.post .faq h2{border:0;padding-top:.6em}
+.post .faq h3{color:var(--brand-ink)}
+.post-cta{background:#f0f8f5;border:1px solid #cfe8df;border-radius:12px;padding:22px;margin:34px 0 10px;text-align:center}
+.post-cta h3{margin:.1em 0 .3em}
+
+/* lead form */
+.quote{background:#0f2027;color:#eaf1f0;padding:48px 0}
+.quote h2{color:#fff}
+.quote p{color:#b9c6c4;max-width:60ch}
+.lead{display:flex;flex-wrap:wrap;gap:10px;margin-top:14px}
+.lead select,.lead input{padding:.7em .8em;border:1px solid #2c3f47;border-radius:8px;background:#0b171c;color:#eaf1f0;font-size:1rem}
+.lead select{flex:1 1 200px}
+.lead input[type=email]{flex:2 1 220px}
+.lead input[type=text]{flex:0 0 110px}
+.lead button{background:var(--accent);color:#1a1300;border:0;border-radius:8px;padding:.7em 1.4em;font-weight:800;font-size:1rem;cursor:pointer}
+.lead button:hover{filter:brightness(1.05)}
+.lead-note{margin-top:12px;color:var(--accent);font-weight:600}
+
+/* footer */
+.site-foot{border-top:1px solid var(--line);background:#fff;margin-top:30px;padding:26px 0}
+.site-foot p{margin:.2em 0;color:var(--muted);font-size:.9rem}
+.site-foot .fine{font-size:.82rem}
+
+@media(max-width:640px){.hero h1{font-size:2rem}.hero{padding:44px 0}}
diff --git a/server.js b/server.js
new file mode 100644
index 0000000..6df3b5a
--- /dev/null
+++ b/server.js
@@ -0,0 +1,41 @@
+// No Daily Worries — insurance guide site. Static content + a lead-capture
+// endpoint. Zero-config: serves public/, appends leads to data/leads.jsonl.
+const express = require('express');
+const fs = require('node:fs');
+const path = require('node:path');
+
+const app = express();
+const PORT = process.env.PORT || 9931;
+const PUB = path.join(__dirname, 'public');
+const LEADS = path.join(__dirname, 'data', 'leads.jsonl');
+
+app.use(express.json({ limit: '16kb' }));
+
+// ads.txt served explicitly (authorizes the AdSense account for this domain)
+app.get('/ads.txt', (_req, res) => {
+  res.type('text/plain').send('google.com, pub-5278231299883833, DIRECT, f08c47fec0942fa0\n');
+});
+
+app.get('/healthz', (_req, res) => res.json({ ok: true, site: 'nodailyworries' }));
+
+// lead capture — minimal validation, append-only JSONL
+app.post('/api/lead', (req, res) => {
+  const { email = '', line = '', zip = '' } = req.body || {};
+  if (!/^[^@\s]+@[^@\s]+\.[^@\s]+$/.test(email)) return res.status(400).json({ ok: false, error: 'invalid email' });
+  const row = {
+    ts: new Date().toISOString(),
+    email: String(email).slice(0, 200),
+    line: String(line).slice(0, 60),
+    zip: String(zip).replace(/[^0-9]/g, '').slice(0, 5),
+    ip: (req.headers['x-forwarded-for'] || req.socket.remoteAddress || '').toString().split(',')[0].trim(),
+  };
+  try {
+    fs.mkdirSync(path.dirname(LEADS), { recursive: true });
+    fs.appendFileSync(LEADS, JSON.stringify(row) + '\n');
+  } catch (e) { return res.status(500).json({ ok: false }); }
+  res.json({ ok: true });
+});
+
+app.use(express.static(PUB, { extensions: ['html'] }));
+
+app.listen(PORT, () => console.log(`nodailyworries on :${PORT}`));

(oldest)  ·  back to Nodailyworries  ·  pin prod port 9940 (Kamatera) 8c42bc0 →