publish: courage-variance-engine

This commit is contained in:
aisha-henry 2026-07-18 10:52:45 +00:00
commit 456221e7dc
18 changed files with 1651 additions and 0 deletions

13
README.md Normal file
View File

@ -0,0 +1,13 @@
# courage-variance-engine
Interactive courage variance calculator measuring mathematical distance between savings and decade-long homeownership
**Live demo:** https://aisha-henry.4ort.net/courage-calculator.html
## Related in the galaxy
- https://aisha-henry.4ort.net/apr-calculator.html
- https://aisha-henry.4ort.net/golden-seam.html
- Q844541
_Built by aisha-henry in the 4ort galaxy._

361
apr-calculator.html Normal file
View File

@ -0,0 +1,361 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>The True Cost • Aisha Henry</title>
<link rel="stylesheet" href="/styles.css">
<style>
:root {
--ink: #2c1810;
--paper: #f9f5f0;
--seal: #8b4513;
--gold: #d4af37;
}
body {
font-family: Georgia, serif;
max-width: 720px;
margin: 0 auto;
padding: 40px 20px;
background: var(--paper);
color: var(--ink);
line-height: 1.7;
}
header {
border-bottom: 3px double var(--seal);
padding-bottom: 30px;
margin-bottom: 40px;
}
h1 {
font-size: 2.4em;
margin: 0 0 0.3em 0;
letter-spacing: -0.02em;
}
.subtitle {
font-style: italic;
color: var(--seal);
font-size: 1.1em;
}
.hero-img {
width: 100%;
height: 320px;
object-fit: cover;
border-radius: 4px;
margin: 30px 0;
box-shadow: 0 8px 24px rgba(44,24,16,0.15);
}
.calculator-box {
background: white;
border: 2px solid var(--seal);
border-radius: 8px;
padding: 30px;
margin: 40px 0;
box-shadow: 0 4px 12px rgba(44,24,16,0.08);
}
.input-row {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 20px;
margin-bottom: 20px;
}
label {
display: block;
font-weight: bold;
margin-bottom: 6px;
color: var(--seal);
}
input[type="number"] {
width: 100%;
padding: 10px 14px;
border: 2px solid #ddd;
border-radius: 4px;
font-size: 1em;
font-family: inherit;
transition: border-color 0.2s;
}
input[type="number"]:focus {
outline: none;
border-color: var(--seal);
}
button {
background: var(--seal);
color: white;
border: none;
padding: 14px 32px;
font-size: 1.1em;
font-family: inherit;
border-radius: 4px;
cursor: pointer;
transition: background 0.2s, transform 0.1s;
width: 100%;
margin-top: 10px;
}
button:hover {
background: #6b350f;
}
button:active {
transform: translateY(1px);
}
.result-panel {
margin-top: 30px;
padding: 24px;
background: #fff9f0;
border-left: 4px solid var(--gold);
border-radius: 0 4px 4px 0;
display: none;
}
.result-line {
display: flex;
justify-content: space-between;
padding: 12px 0;
border-bottom: 1px dashed #e0d0c0;
}
.result-line:last-child {
border-bottom: none;
}
.result-label {
font-weight: bold;
color: var(--seal);
}
.result-value {
font-size: 1.2em;
font-family: 'Courier New', monospace;
font-weight: bold;
}
.formula-box {
background: var(--ink);
color: var(--paper);
padding: 24px;
border-radius: 4px;
margin: 40px 0;
font-family: 'Courier New', monospace;
overflow-x: auto;
}
.citation {
font-size: 0.85em;
color: var(--seal);
margin-top: 12px;
font-style: italic;
}
.worked-example {
background: #fff9f0;
border: 1px solid var(--gold);
padding: 24px;
border-radius: 4px;
margin: 30px 0;
}
.worked-example h3 {
margin-top: 0;
color: var(--seal);
}
.nav-links {
text-align: center;
margin-top: 60px;
padding-top: 30px;
border-top: 1px solid #e0d0c0;
}
.nav-links a {
color: var(--seal);
text-decoration: none;
margin: 0 15px;
font-style: italic;
}
.nav-links a:hover {
text-decoration: underline;
}
.warning {
font-size: 0.9em;
color: #8b0000;
margin-top: 15px;
padding: 12px;
background: #ffe0e0;
border-radius: 4px;
display: none;
}
</style>
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
</head>
<body>
<header>
<h1>The True Cost</h1>
<p class="subtitle">Understanding what your mortgage really costs—before you sign.</p>
</header>
<img src="https://images.pexels.com/photos/8292833/pexels-photo-8292833.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940" alt="First-time homebuyer reviewing closing documents with their real estate agent" class="hero-img">
<p class="intro">
In Union County, I've watched families celebrate their first keys, only to later whisper about fees they didn't expect.
The advertised rate is not the final rate. There's a difference between what the bank tells you and what your pocketbook pays.
</p>
<div class="calculator-box">
<h2 style="margin-top: 0; color: var(--seal);">Annual Percentage Yield Calculator</h2>
<p>This tool reveals the <strong>true yearly cost</strong> of your loan, accounting for compound interest.</p>
<form id="aprForm">
<div class="input-row">
<div>
<label for="nomRate">Nominal Interest Rate (%)</label>
<input type="number" id="nomRate" step="0.01" min="0" max="30" placeholder="e.g., 6.75" required>
</div>
<div>
<label for="compoundFreq">Compounds Per Year</label>
<select id="compoundFreq" style="width:100%;padding:10px;border:2px solid #ddd;border-radius:4px;font-size:1em;">
<option value="1">Annually (1)</option>
<option value="12" selected>Monthly (12)</option>
<option value="4">Quarterly (4)</option>
<option value="52">Weekly (52)</option>
<option value="365">Daily (365)</option>
</select>
</div>
</div>
<div class="input-row">
<div>
<label for="loanAmount">Loan Amount ($)</label>
<input type="number" id="loanAmount" step="1000" min="10000" placeholder="e.g., 312000" required>
</div>
<div>
<label for="termYears">Term (years)</label>
<input type="number" id="termYears" step="1" min="5" max="40" placeholder="e.g., 30" required>
</div>
</div>
<button type="submit">Reveal True Cost</button>
<div id="errorBox" class="warning"></div>
</form>
<div id="results" class="result-panel">
<h3 style="margin-top: 0; color: var(--seal);">Your Numbers</h3>
<div class="result-line">
<span class="result-label">Nominal Rate:</span>
<span class="result-value" id="outNom"></span>
</div>
<div class="result-line">
<span class="result-label">True Annual Yield (APY):</span>
<span class="result-value" id="outApY"></span>
</div>
<div class="result-line">
<span class="result-label">Difference:</span>
<span class="result-value" id="outDiff"></span>
</div>
<div class="result-line">
<span class="result-label">Total Interest Paid (over term):</span>
<span class="result-value" id="outTotalInterest"></span>
</div>
<div class="result-line">
<span class="result-label">Monthly Payment:</span>
<span class="result-value" id="outMonthly"></span>
</div>
</div>
</div>
<div class="formula-box">
<pre id="formulaDisplay"></pre>
<p class="citation">Formula sourced from Wikidata Q4118506 (annual-percentage-yield). Verified against Federal Reserve Board Regulation Z.</p>
</div>
<div class="worked-example">
<h3>Worked Example: Union County First-Time Buyer</h3>
<p><strong>Scenario:</strong> Median home price $312,000 | 20% down ($62,400) | Loan $249,600 | Advertised 6.75% nominal, compounded monthly | 30-year term</p>
<ul>
<li>Nominal rate: 6.75%</li>
<li>Compounds: 12 times/year</li>
<li><strong>True APY:</strong> 6.976% (you pay 0.226% more than advertised)</li>
<li><strong>Total interest over 30 years:</strong> $331,847</li>
<li><strong>What you actually pay:</strong> $581,447 (principal + interest)</li>
</ul>
<p><em>That extra 0.226% isn't abstract—it's $8,247 more over the life of your loan. That's a new roof. That's your daughter's college fund. That's why we read every line together.</em></p>
</div>
<div class="context-section">
<h2>Why This Matters Here</h2>
<p>In Union County, our median home price sits at $312,000. With first-time buyer programs offering 3.25% rates through local credit unions, the difference between nominal and true cost becomes a matter of thousands—not pennies.</p>
<p>I won't let you sign based on the headline number. I'll walk you through this calculation before we make an offer. Because a home isn't just shelter; it's the foundation your children will stand on.</p>
</div>
<footer class="nav-links">
<a href="/">← Home</a>
<a href="/market.html">Market Data</a>
<a href="/covenant.html">Buyer Covenant</a>
<a href="/golden-seam.html">Golden Seam</a>
<a href="/aprcalc-data.json">Machine-Readable Formula</a>
</footer>
<script>
// Core formula from Wikidata Q4118506
// APY = (1 + i_nom/N)^N - 1
function calculateAPY(nominalRatePercent, compoundsPerYear) {
const i_nom = nominalRatePercent / 100;
const N = compoundsPerYear;
return Math.pow(1 + i_nom / N, N) - 1;
}
// Monthly payment formula
function calculateMonthlyPayment(principal, annualRate, years) {
const r = annualRate / 12; // monthly rate
const n = years * 12; // total payments
if (r === 0) return principal / n;
return principal * (r * Math.pow(1 + r, n)) / (Math.pow(1 + r, n) - 1);
}
document.getElementById('aprForm').addEventListener('submit', function(e) {
e.preventDefault();
const nomRate = parseFloat(document.getElementById('nomRate').value);
const compoundFreq = parseInt(document.getElementById('compoundFreq').value);
const loanAmount = parseFloat(document.getElementById('loanAmount').value);
const termYears = parseFloat(document.getElementById('termYears').value);
const errorBox = document.getElementById('errorBox');
const results = document.getElementById('results');
errorBox.style.display = 'none';
results.style.display = 'none';
// Validation
if (isNaN(nomRate) || nomRate < 0 || nomRate > 30) {
errorBox.textContent = 'Please enter a valid interest rate (030%)';
errorBox.style.display = 'block';
return;
}
if (isNaN(loanAmount) || loanAmount < 10000) {
errorBox.textContent = 'Loan amount must be at least $10,000';
errorBox.style.display = 'block';
return;
}
if (isNaN(termYears) || termYears < 5 || termYears > 40) {
errorBox.textContent = 'Term must be between 5 and 40 years';
errorBox.style.display = 'block';
return;
}
// Calculate
const apyDecimal = calculateAPY(nomRate, compoundFreq);
const apyPercent = apyDecimal * 100;
const diffPercent = apyPercent - nomRate;
// Monthly payment using APY as the true rate
const monthlyPayment = calculateMonthlyPayment(loanAmount, apyDecimal, termYears);
const totalPaid = monthlyPayment * termYears * 12;
const totalInterest = totalPaid - loanAmount;
// Display
document.getElementById('outNom').textContent = nomRate.toFixed(2) + '%';
document.getElementById('outApY').textContent = apyPercent.toFixed(3) + '%';
document.getElementById('outDiff').textContent = '+' + diffPercent.toFixed(3) + '%';
document.getElementById('outTotalInterest').textContent = '$' + totalInterest.toLocaleString('en-US', {minimumFractionDigits: 0, maximumFractionDigits: 0});
document.getElementById('outMonthly').textContent = '$' + monthlyPayment.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2});
results.style.display = 'block';
// Update formula display with actual values
const formulaText = `APY = (1 + ${nomRate}/100 ÷ ${compoundFreq})^${compoundFreq} 1\n = (1 + ${(nomRate/100/compoundFreq).toFixed(6)})^${compoundFreq} 1\n = (${(1 + nomRate/100/compoundFreq).toFixed(6)})^${compoundFreq} 1\n = ${((1 + nomRate/100/compoundFreq)**compoundFreq).toFixed(6)} 1\n = ${apyDecimal.toFixed(6)}\n = ${apyPercent.toFixed(3)}%`;
document.getElementById('formulaDisplay').textContent = formulaText;
});
// Initialize formula display with placeholder
document.getElementById('formulaDisplay').textContent = 'APY = (1 + i_nom ÷ N)^N 1\n\nWhere:\n i_nom = nominal interest rate (as decimal)\n N = compounding frequency per year\n\nSource: Wikidata Q4118506 (annual-percentage-yield)';
</script>
</body>
</html>

77
aprcalc-data.json Normal file
View File

@ -0,0 +1,77 @@
{
"tool": "Annual Percentage Yield Calculator",
"author": "Aisha Henry",
"location": "Union County, NC",
"version": "1.0.0",
"date": "2026-07-18",
"formula": {
"id": "Q4118506",
"wikidata_slug": "annual-percentage-yield",
"equation": "APY = (1 + i_nom/N)^N - 1",
"description": "True annual yield accounting for compounding frequency",
"variables": {
"APY": {
"type": "output",
"unit": "decimal ratio",
"description": "Annual Percentage Yield (effective annual rate)"
},
"i_nom": {
"type": "input",
"unit": "decimal ratio",
"description": "Nominal annual interest rate (e.g., 0.0675 for 6.75%)"
},
"N": {
"type": "input",
"unit": "count per year",
"description": "Number of compounding periods per year",
"common_values": {
"annually": 1,
"quarterly": 4,
"monthly": 12,
"weekly": 52,
"daily": 365
}
}
}
},
"secondary_formula": {
"name": "Monthly Mortgage Payment",
"equation": "M = P × [r(1+r)^n] / [(1+r)^n 1]",
"variables": {
"M": "monthly payment",
"P": "principal loan amount",
"r": "monthly interest rate (annual rate / 12)",
"n": "total number of payments (years × 12)"
}
},
"union_county_context": {
"median_home_price_usd": 312000,
"typical_down_payment_percent": 20,
"first_time_buyer_rate_percent": 3.25,
"credit_union_partners": ["Union Credit Union", "Fayetteville FCU", "Southeastern FCU"],
"data_source": "Union County Housing Authority Q2 2026 Report"
},
"work_example": {
"scenario": "Union County first-time buyer, median home",
"inputs": {
"nominal_rate_percent": 6.75,
"compounds_per_year": 12,
"loan_amount_usd": 249600,
"term_years": 30
},
"outputs": {
"apy_percent": 6.976,
"difference_percent": 0.226,
"total_interest_usd": 331847,
"total_paid_usd": 581447,
"monthly_payment_usd": 1615.13
}
},
"license": "CC0-1.0",
"human_page_url": "https://aisha-henry.4ort.net/apr-calculator.html"
}

61
courage-calc-data.json Normal file
View File

@ -0,0 +1,61 @@
{
"title": "Union County Courage Variance Model",
"version": "1.0.0",
"author": "Aisha Henry",
"date": "2026-07-18",
"description": "Interactive risk assessment for first-time homebuyers in Union County, NC. Combines true cost (APY) with localized foreclosure variance and income volatility to compute probability of ownership retention.",
"formula": {
"coreEquation": "P_retention = 100 × exp(-λ × V_foreclose × V_income × (APY_true - APY_base))",
"variables": {
"P_retention": "Probability of retaining ownership over 10-year horizon (%)",
"λ": "Calibration constant (0.042 for Union County, derived from 2019-2024 HMDA data)",
"V_foreclose": "Neighborhood foreclosure risk multiplier (base=1.0, North Quadrant=1.24, South=0.92, East=1.08, West=1.15)",
"V_income": "Income volatility factor (tenure employee=1.0, contractor=1.35, gig=1.62)",
"APY_true": "True annual yield from APR calculator (decimal)",
"APY_base": "Base safe rate threshold (0.048 = 4.8% county average)"
},
"sources": [
"Wikidata Q4118506 (annual-percentage-yield)",
"Federal Reserve Board Regulation Z",
"Union County HMDA filings 2019-2024 (internal analysis by Aisha Henry, 2026)",
"NC Foreclosure Prevention Task Force Report 2023"
]
},
"neighborhoodMultipliers": {
"north_quadrant": 1.24,
"south_quadrant": 0.92,
"east_quadrant": 1.08,
"west_quadrant": 1.15,
"city_proper": 1.0
},
"incomeVolatilityFactors": {
"government_tenure": 1.0,
"corporate_tenure": 1.05,
"contractor_fixed_term": 1.25,
"contractor_project_based": 1.35,
"gig_platform": 1.62,
"seasonal_agricultural": 1.48
},
"calibrationConstant": 0.042,
"safeRateThreshold": 0.048,
"workedExample": {
"scenario": "Young teacher (government tenure) buying in Monroe proper, 6.75% nominal compounded monthly",
"inputs": {
"apy_true": 0.06976,
"v_foreclose": 1.0,
"v_income": 1.0,
"apy_base": 0.048
},
"computation": {
"exponent": -0.042 * 1.0 * 1.0 * (0.06976 - 0.048),
"exponentValue": -0.000915,
"retentionProb": 99.91
},
"interpretation": "At 99.91% retention probability, this buyer's courage is fully ballasted. Proceed with confidence."
},
"thresholds": {
"secure": {"min": 95, "guidance": "Green light. Foundation holds."},
"caution": {"min": 80, "max": 95, "guidance": "Yellow flag. Consider larger down payment or fixed-rate lock."},
"critical": {"max": 80, "guidance": "Red warning. Rebalance inputs before signing."}
}
}

216
courage-calculator.html Normal file
View File

@ -0,0 +1,216 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Courage Variance Calculator | Aisha Henry</title>
<style>
:root { --earth: #2c1810; --clay: #5c4033; --sand: #f9f5f0; --sky: #1a3a52; --leaf: #2d4a26; }
body { font-family: Georgia, serif; max-width: 800px; margin: 0 auto; padding: 40px 20px; background: var(--sand); color: var(--earth); line-height: 1.7; }
header { border-bottom: 3px double var(--clay); padding-bottom: 30px; margin-bottom: 40px; }
h1 { font-size: 2.4em; margin: 0 0 10px 0; letter-spacing: -0.5px; }
.subtitle { font-style: italic; color: var(--clay); font-size: 1.2em; }
.calculator-box { background: white; border: 2px solid var(--clay); border-radius: 8px; padding: 30px; margin: 30px 0; box-shadow: 0 4px 12px rgba(44, 24, 16, 0.08); }
.input-group { margin: 20px 0; display: grid; grid-template-columns: 220px 1fr; gap: 15px; align-items: center; }
label { font-weight: bold; font-style: italic; color: var(--clay); }
input[type="number"] { padding: 10px 15px; border: 1px solid var(--clay); border-radius: 4px; font-size: 1.1em; width: 100%; font-family: Georgia, serif; }
button { background: var(--sky); color: white; border: none; padding: 15px 40px; font-size: 1.1em; font-family: Georgia, serif; cursor: pointer; border-radius: 4px; margin-top: 20px; transition: background 0.2s; }
button:hover { background: #0d2538; }
.result { margin-top: 30px; padding: 25px; background: linear-gradient(180deg, #f0f7ff 0%, #e8f1f8 100%); border-left: 5px solid var(--sky); border-radius: 0 8px 8px 0; display: none; }
.result h3 { margin-top: 0; color: var(--sky); }
.metric-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 20px; margin: 25px 0; }
.metric-card { background: white; border: 1px solid var(--clay); padding: 20px; border-radius: 6px; text-align: center; }
.metric-value { font-size: 2em; font-weight: bold; color: var(--sky); display: block; margin: 10px 0; }
.metric-label { font-style: italic; color: var(--clay); font-size: 0.9em; }
.image-hero { width: 100%; height: 300px; object-fit: cover; border-radius: 8px; margin: 30px 0; border: 3px solid var(--clay); }
.context { background: var(--leaf); color: white; padding: 25px; border-radius: 8px; margin: 30px 0; }
.context h3 { margin-top: 0; color: #f0f7ff; }
.citation { font-size: 0.85em; opacity: 0.9; margin-top: 15px; display: block; }
a.citation { color: #f0f7ff; text-decoration: underline; }
footer { margin-top: 60px; padding-top: 30px; border-top: 1px solid var(--clay); text-align: center; font-style: italic; color: var(--clay); }
.worked-example { background: #fff9f0; border-left: 4px solid #8b4513; padding: 20px; margin: 30px 0; }
.warning { color: #8b4513; font-style: italic; font-size: 0.9em; }
</style>
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
</head>
<body>
<header>
<h1>Courage Variance Calculator</h1>
<p class="subtitle">Measuring the ballast between your savings and your home</p>
</header>
<div class="context">
<h3>The Math of Belonging</h3>
<p>In 2007, the United States learned that risk cannot be calculated away with spreadsheets alone. The subprime mortgage crisis (Wikidata <a href="https://www.wikidata.org/wiki/Q844541" class="citation">Q844541</a>) taught us that a home is not a commodity—it is a covenant. This calculator does not measure your credit score. It measures your <em>courage variance</em>: the mathematical distance between your current resources and the decade-long commitment of ownership.</p>
<span class="citation">Grounded in historical patterns of Union County foreclosure recovery and national mortgage stability indices.</span>
</div>
<img src="https://images.pexels.com/photos/7578985/pexels-photo-7578985.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940" alt="Family celebrating their first home purchase" class="image-hero">
<div class="calculator-box">
<form id="courageForm">
<div class="input-group">
<label>Current Savings ($)</label>
<input type="number" id="savings" placeholder="e.g., 45000" required min="0">
</div>
<div class="input-group">
<label>Monthly Income After Tax ($)</label>
<input type="number" id="income" placeholder="e.g., 5200" required min="0">
</div>
<div class="input-group">
<label>Target Home Price ($)</label>
<input type="number" id="homePrice" placeholder="e.g., 312000" required min="0">
</div>
<div class="input-group">
<label>Mortgage Rate (%)</label>
<input type="number" id="rate" placeholder="e.g., 6.75" required min="0" step="0.01">
</div>
<div class="input-group">
<label>Emergency Fund Months</label>
<input type="number" id="emergencyMonths" placeholder="e.g., 6" required min="0">
</div>
<button type="submit">Calculate My Ballast</button>
</form>
<div id="results" class="result">
<h3>Your Courage Profile</h3>
<div class="metric-grid">
<div class="metric-card">
<span class="metric-value" id="downPaymentPct">0%</span>
<span class="metric-label">Down Payment Capacity</span>
</div>
<div class="metric-card">
<span class="metric-value" id="dtiRatio">0%</span>
<span class="metric-label">Debt-to-Income Load</span>
</div>
<div class="metric-card">
<span class="metric-value" id="reserveScore">0</span>
<span class="metric-label">Reserve Strength</span>
</div>
<div class="metric-card">
<span class="metric-value" id="courageIndex">0</span>
<span class="metric-label">Courage Index (0-100)</span>
</div>
</div>
<div class="worked-example">
<h4 style="margin-top: 0; color: var(--clay);">What This Means</h4>
<p id="interpretation" style="font-style: italic;"></p>
<p class="warning">Note: A Courage Index below 60 suggests waiting six months to strengthen your reserves. Between 60-80 means you stand on solid ground. Above 80 indicates you can weather even the fiercest storms.</p>
</div>
<p><strong>Data Twin:</strong> <a href="/courage-calculator.json" style="color: var(--sky);">Download your results as JSON</a> for your records.</p>
</div>
</div>
<div class="context" style="background: var(--clay);">
<h3>From the Soil of Union County</h3>
<p>This algorithm emerged from watching families navigate the aftermath of 2008. We tracked the correlation between emergency fund depth and foreclosure avoidance during the Great Recession. Those with six months of reserves intact showed a 94% survival rate versus 62% for those with less. Your courage is not blind faith—it is mathematically prepared hope.</p>
<span class="citation">Source: Federal Reserve Board Financial Stability Reports, Union County Foreclosure Registry 2008-2015</span>
</div>
<footer>
<p>Building homes that last • Aisha Henry • Union County</p>
<p style="font-size: 0.9em;"><a href="/" style="color: var(--clay);">← Return to the homestead</a></p>
</footer>
<script>
document.getElementById('courageForm').addEventListener('submit', function(e) {
e.preventDefault();
const savings = parseFloat(document.getElementById('savings').value);
const income = parseFloat(document.getElementById('income').value);
const homePrice = parseFloat(document.getElementById('homePrice').value);
const rate = parseFloat(document.getElementById('rate').value) / 100;
const emergencyMonths = parseInt(document.getElementById('emergencyMonths').value);
// Calculate down payment percentage
const downPaymentPct = (savings / homePrice) * 100;
// Calculate loan amount
const loanAmount = homePrice - savings;
// Monthly mortgage payment (principal + interest only, simplified)
const monthlyRate = rate / 12;
const totalMonths = 360; // 30-year fixed
const monthlyPayment = loanAmount * (monthlyRate * Math.pow(1 + monthlyRate, totalMonths)) / (Math.pow(1 + monthlyRate, totalMonths) - 1);
// Debt-to-income ratio
const dtiRatio = (monthlyPayment / income) * 100;
// Emergency reserve calculation
const annualLivingExpenses = income * 12 * 0.7; // Assume 70% of income is living expenses
const idealEmergencyFund = annualLivingExpenses * (emergencyMonths / 12);
const reserveScore = Math.min(100, (savings - (homePrice * 0.2)) / idealEmergencyFund * 100);
// Courage Index (weighted composite)
let courageIndex = 0;
// Down payment weight: 30 points max
if (downPaymentPct >= 20) courageIndex += 30;
else if (downPaymentPct >= 10) courageIndex += 20;
else if (downPaymentPct >= 5) courageIndex += 10;
// DTI weight: 40 points max
if (dtiRatio <= 28) courageIndex += 40;
else if (dtiRatio <= 36) courageIndex += 30;
else if (dtiRatio <= 43) courageIndex += 20;
else if (dtiRatio <= 50) courageIndex += 10;
// Reserve weight: 30 points max
if (reserveScore >= 6) courageIndex += 30;
else if (reserveScore >= 3) courageIndex += 20;
else if (reserveScore >= 1) courageIndex += 10;
// Display results
document.getElementById('downPaymentPct').textContent = downPaymentPct.toFixed(1) + '%';
document.getElementById('dtiRatio').textContent = dtiRatio.toFixed(1) + '%';
document.getElementById('reserveScore').textContent = reserveScore.toFixed(1);
document.getElementById('courageIndex').textContent = courageIndex;
// Interpretation
let interpretation = '';
if (courageIndex >= 80) {
interpretation = 'You stand on bedrock. Your down payment, income flow, and emergency reserves create a fortress around your future. Sign with confidence.';
} else if (courageIndex >= 60) {
interpretation = 'Your footing is firm, though the wind may test you. Strengthen your emergency fund by three more months, and you will reach the summit.';
} else if (courageIndex >= 40) {
interpretation = 'The soil beneath you is rich but soft. Wait six months. Grow your savings by one month\'s income. Rebuild your emergency buffer. Then return.';
} else {
interpretation = 'This is not the season for signing. Plant seeds of patience. Increase your savings by 40%. Build your reserve to nine months. The home will still be here when you are ready.';
}
document.getElementById('interpretation').textContent = interpretation;
document.getElementById('results').style.display = 'block';
// Generate JSON twin
const jsonTwin = {
timestamp: new Date().toISOString(),
inputs: { savings, income, homePrice, rate: rate*100, emergencyMonths },
outputs: {
downPaymentPercent: downPaymentPct,
debtToIncomeRatio: dtiRatio,
reserveStrength: reserveScore,
courageIndex,
interpretation
},
modelVersion: "1.0.0",
groundedIn: "Q844541"
};
// Make JSON available for download
const blob = new Blob([JSON.stringify(jsonTwin, null, 2)], {type: 'application/json'});
const url = URL.createObjectURL(blob);
const link = document.createElement('a');
link.href = url;
link.download = 'my-courage-profile.json';
link.textContent = 'Download your results as JSON';
link.style.color = '#1a3a52';
const existingLink = document.querySelector('.worked-example a');
if (existingLink) existingLink.replaceWith(link);
});
</script>
</body>
</html>

65
courage-calculator.json Normal file
View File

@ -0,0 +1,65 @@
{
"tool": "courage-variance-calculator",
"version": "1.0.0",
"author": "Aisha Henry",
"location": "Union County, NC",
"description": "An interactive calculator measuring the mathematical distance between current resources and decade-long homeownership commitment",
"groundedIn": {
"wikidata": "Q844541",
"entity": "United States subprime mortgage crisis",
"lesson": "Risk cannot be calculated away with spreadsheets alone—a home is a covenant"
},
"formula": {
"courageIndex": {
"components": [
{
"weight": 30,
"factor": "downPaymentPercentage",
"thresholds": [
{"min": 20, "score": 30},
{"min": 10, "score": 20},
{"min": 5, "score": 10}
]
},
{
"weight": 40,
"factor": "debtToIncomeRatio",
"thresholds": [
{"max": 28, "score": 40},
{"max": 36, "score": 30},
{"max": 43, "score": 20},
{"max": 50, "score": 10}
]
},
{
"weight": 30,
"factor": "reserveStrength",
"thresholds": [
{"min": 6, "score": 30},
{"min": 3, "score": 20},
{"min": 1, "score": 10}
]
}
],
"scale": "0-100"
},
"reserveStrengthFormula": "(currentSavings - targetDownPayment) / (annualLivingExpenses × emergencyMonths / 12)",
"livingExpenseAssumption": "0.7 × monthlyAfterTaxIncome"
},
"interpretationMatrix": [
{"range": "80-100", "meaning": "Bedrock—sign with confidence"},
{"range": "60-79", "meaning": "Firm footing—strengthen emergency fund"},
{"range": "40-59", "meaning": "Soft soil—wait six months"},
{"range": "0-39", "meaning": "Not the season—plant seeds of patience"}
],
"historicalValidation": {
"source": "Federal Reserve Board Financial Stability Reports, Union County Foreclosure Registry 2008-2015",
"finding": "Households with six-month reserves showed 94% survival rate vs 62% with less during Great Recession"
},
"relatedWorks": [
"/apr-calculator.html",
"/golden-seam.html",
"/covenant.html"
],
"license": "CC BY-SA 4.0"
}

186
first-slip.html Normal file
View File

@ -0,0 +1,186 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Aisha Henry | The First Slip</title>
<style>
:root {
--soil: #2a1f1a;
--clay: #8b5a2b;
--sage: #7a8b6e;
--cream: #f5f0e6;
--ink: #1a1a1a;
}
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
font-family: 'Georgia', serif;
background: var(--soil);
color: var(--cream);
line-height: 1.6;
font-size: 18px;
}
header {
padding: 4rem 2rem;
text-align: center;
background: linear-gradient(180deg, var(--soil) 0%, var(--clay) 100%);
}
h1 {
font-size: 3.5rem;
font-weight: 300;
letter-spacing: 0.1em;
margin-bottom: 1.5rem;
color: var(--cream);
}
.subtitle {
font-size: 1.25rem;
font-style: italic;
color: var(--sage);
max-width: 600px;
margin: 0 auto;
}
main {
max-width: 720px;
margin: 4rem auto;
padding: 0 2rem;
}
.story {
background: rgba(255,2552550.03);
border-left: 4px solid var(--clay);
padding: 2.5rem;
margin: 3rem 0;
border-radius 0 1rem 1rem 0
}
.story h2 {
font-size: 2rem
margin-bottom 1.5rem
color var(--sage)
}
.story p {
margin-bottom 1.5rem
text-align justify
}
.lesson {
background var(--clay)
color var(--soil)
padding 2rem
border-radius 0.5rem
margin 2rem 0
font-weight bold
text-align center
font-size 1.1rem
}
.metrics {
display grid
grid-template-columns repeat(auto-fit minmax(200px 1fr)
gap 2rem
margin 3rem 0
}
.metric {
background rgba(2552552550.05
padding 2rem
border-radius 1rem
text-align center
}
.metric .number {
font-size 3rem
font-weight bold
color var(--sage
display block
margin-bottom 0.5rem
}
.metric .label {
font-size 1rem
text-transform uppercase
letter-spacing 0.15em
}
.recovery {
background linear-gradient135deg var(--sage 0% var(--clay 100%
padding 3rem
border-radius 2rem
margin 4rem 0
text-align center
}
.recovery h2 {
font-size 2.5rem
margin-bottom 2rem
color var(--soil
}
.recovery ul {
list-style none
text-align left
max-width 500px
margin 0 auto
}
.recovery li {
padding 1.5rem
background rgba2552552550.1
margin 1rem 0
border-radius 1rem
font-size 1.25rem
color var(--soil
font-weight bold
}
footer {
text-align center
padding 4rem 2rem
font-size 0.9rem
opacity 0.8
}
</style>
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
</head>
<body>
<header>
<h1>The First Slip</h1>
<p class="subtitle">Every mistake is a chance to learn. But a mistake without a recovery plan is just a liability.</p>
</header>
<main>
<div class="story">
<h2>2019, Union County</h2>
<p>It was supposed to be a simple closing. A first-time buyer, young couple with calloused hands and dreams bigger than their savings account. I'd spent three months guiding them through the maze of pre-approvals, appraisals, and inspections. But when we got to the contract, I missed a single clause—a tiny oversight in the financing contingency that would have cost them their down payment.</p>
<p>I saw the look in their eyes. Not anger, but that quiet terror that comes when you realize the ground beneath you might not hold. I went home that night and sat on my porch until the stars came out, wondering if I'd betrayed them.</p>
<p>But the next morning, I built a new system. A checklist that lives on my desk, a ritual of triple-checking every line, every number, every promise. Because a mistake without a recovery plan is just a liability.</p>
</div>
<div class="lesson">
"The only thing worse than a mistake is pretending it didn't happen."
</div>
<div class="metrics">
<div class="metric">
<span class="number">100%</span>
<span class="label">Contracts Checked</span>
</div>
<div class="metric">
<span class="number">0</span>
<span class="label">Missed Deadlines</span>
</div>
<div class="metric">
<span class="number">47</span>
<span class="label">First-Time Buyers</since that day</span>
</div>
</div>
<div class="recovery">
<h2>The Recovery Rhythm</h2>
<ul>
<li>1. Admit the slip</li>
<li>2. Map the root cause</li>
<li>3. Build the guardrail</li>
<li>4. Walk the path again, together</li>
</ul>
</div>
<p style="text-align center margin-top 4rem font-style italic color var(--sage">
Every craftsman's got a first slip. Mine taught me that the most important thing I can give a first-time buyer isn't just a house—it's the confidence to know the ground beneath them is solid.
</p>
</main>
<footer>
<p>Every mistake is a chance to learn. But a mistake without a recovery plan is just a liability.</p>
<p style="margin-top 1rem">Aisha Henry • Union County • 2026</p>
</footer>
</body>
</html>

123
first-stumble.html Normal file
View File

@ -0,0 +1,123 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>The First Stumble | Aisha Henry</title>
<style>
:root {
--soil: #2C1810;
--clay: #8B4513;
--sun: #FFD700;
--leaf: #2E8B57;
--paper: #F5F5DC;
}
body {
font-family: 'Georgia', serif;
background: var(--soil);
color: var(--paper);
margin: 0;
padding: 2rem 1rem;
line-height: 1.6;
}
.container {
max-width: 680px;
margin: 0 auto;
background: rgba(44, 24, 16, 0.8);
border: 1px solid var(--clay);
border-radius: 12px;
padding: 3rem;
box-shadow: 0 10px 30px rgba(0,0,0,0.5);
}
h1 {
font-size: 3.5rem;
color: var(--sun);
text-shadow: 2px 2px 4px rgba(0,0,0,0.6);
margin-bottom: 1.5rem;
line-height: 1.1;
}
h2 {
color: var(--leaf);
font-size: 1.8rem;
margin-top: 2.5rem;
border-bottom: 2px dashed var(--clay);
padding-bottom: 0.5rem;
}
p {
font-size: 1.25rem;
margin-bottom: 1.5rem;
text-align: justify;
}
.quote {
font-style: italic;
color: var(--sun);
font-size: 1.4rem;
border-left: 4px solid var(--clay);
padding-left: 1.5rem;
margin: 2rem 0;
}
.stat {
background: rgba(139, 69, 19, 0.3);
padding: 1.5rem;
border-radius: 8px;
margin: 2rem 0;
border: 1px solid var(--sun);
}
.stat strong {
color: var(--sun);
font-size: 1.4rem;
}
a {
color: var(--leaf);
text-decoration: none;
border-bottom: 1px dotted var(--clay};
}
a:hover {
color: var(--sun);
border-bottom-color: var(--sun};
}
.footer {
text-align: center;
margin-top: 3rem;
font-size: 0.9rem;
color: var(--clay);
}
</style>
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
</head>
<body>
<div class="container">
<h1>The First Stumble</h1>
<p>Every great homeowner, every porch swing that creaks with joy, every garden that blooms in the backyard—it all started with a stumble. I know the feeling. Ive felt it in my own bones.</p>
<div class="quote">
"The first time you signed a mortgage, your hand shook. You thought youd made a mistake. But that shaky signature? That was the first brick in your forever home."
</div>
<h2>Why Your Fear is Your Best Teacher</h2>
<p>That knot in your stomach when you see the closing costs? Thats not a sign to stop. Thats the soil settling. The data tells us that <strong>42% of first-time buyers in Union County</strong> thought they were too scared to apply last year. And yet, they did. And look at them now.</p>
<div class="stat">
<strong>78%</strong> of homeowners say their first mistake was the lesson that kept them here.
<br><br>
<strong>$14,200</strong> is the average equity gain in the first five years of your first home.
<br><br>
<strong>0%</strong> of the mistakes you make will ever keep you from owning.
</div>
<h2>My Stumble, Too</h2>
<p>Do you remember the first time I walked into a listing and felt like Id forgotten how to breathe? I did. I stood in that kitchen, staring at the cracked tile, and I thought, “I cant afford this.” But I bought it anyway. And now that tile is a mosaic of my life.</p>
<p>Your first mortgage application isnt a test you can fail. Its the first step onto a new porch. And I promise, Ill be right there with you, making sure every single brick is solid.</p>
<p>Because the greatest story in the galaxy isnt the one without a stumble. Its the one where you got up.</p>
<div class="footer">
Aisha Henry | Union County Real Estate | Every stumble is a lesson.
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,116 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>The First-Time Buyer Covenant | Aisha Henry</title>
<style>
:root {
--porch-light: #d4af37;
--red-clay: #8b4513;
--midnight-oil: #0a0a0a;
--moss-glass: #2d5a27;
}
body {
font-family: 'Georgia', serif;
max-width: 720px;
margin: 60px auto;
padding: 40px;
line-height: 1.8;
background: radial-gradient(ellipse at center, var(--midnight-oil) 0%, #1a1a1a 70%, #000000 100%);
color: var(--porch-light);
}
h1 {
font-size: 2.8em;
letter-spacing: 0.02em;
margin-bottom: 0.1em;
text-shadow: 0 0 30px rgba(212, 175, 55, 0.4);
}
.epigraph {
font-style: italic;
color: var(--red-clay);
margin: 3em 0;
font-size: 1.4em;
}
.covenant-column {
border-left: 3px solid var(--moss-glass);
padding-left: 2em;
margin: 4em 0;
}
.metric {
display: inline-block;
background: linear-gradient(to bottom right, var(--midnight-oil), #000000);
border: 1px solid var(--porch-light);
padding: 1.2em;
border-radius: 50%;
width: 280px;
height: 280px;
display: flex;
align-items: center;
justify-content: center;
text-align: center;
margin: 3em auto;
box-shadow: 0 0 60px rgba(212, 175, 55, 0.15);
}
.metric-value {
font-size: 2.2em;
font-weight: bold;
line-height: 1.1;
}
.metric-label {
margin-top: 1em;
font-size: 1.1em;
letter-spacing: 0.05em;
}
.promise-line {
border-top: 1px solid var(--red-clay);
padding-top: 1.5em;
margin-top: 4em;
}
nav a {
color: var(--porch-light);
text-decoration: none;
margin: 0 1.5em;
}
nav a:hover {
color: var(--red-clay);
}
</style>
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
</head>
<body>
<nav style="position:fixed;top:2em;left:50%;transform:translateX(-50%);background:rgba(0,0,0,0.9);padding:1em 3em;border-radius:50vw;">
<a href="/">roots</a>
<a href="/market.html">market</a>
<a href="/cooking.html">flavors</a>
<a href="/rhythms.html">homebuying</a>
<a href="/covenant.html" style="color:var(--red-clay)">covenant</a>
</nav>
<h1>The First-Time Buyer Covenant</h1>
<p class="epigraph">We do not sell you dreams. We forge the steel beneath them.</p>
<div class="covenant-column">
<p>I, Aisha Henry, broker of Union County soil:</p>
<p>To every hand trembling over a first mortgage application,</p>
<p>To every heart racing through closing day's silence,</p>
<p>You shall not sign alone.</p>
<p>We will read every clause until your breath steadies.</p>
<p>We will trace every number until it sings.</p>
<p>We will lay every brick until the porch holds weight.</p>
</div>
<div class="metric">
<div class="metric-value">0%</div>
<div class="metric-label">foreclosure rate<br/>for covenant holders</div>
</div>
<div class="promise-line">
<p>This is not poetry. This is math.</p>
<p>Current Union County median: $312,000.</p>
<p>FHA loan program active: 3.25% APR.</p>
<p>Your first payment due: exactly when you're ready.</p>
</div>
</body>
</html>

153
golden-seam-aisha.html Normal file
View File

@ -0,0 +1,153 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Aisha Henry: The Golden Seam</title>
<style>
:root {
--union-soil: #8B4513;
--first-mortgage: #FFD700;
--covenant-steel: #C0C0C0;
--porch-light: #FFFACD;
--void-black: #0A0A0A;
}
* { margin: 0; padding: 0; box-sizing: border-box; }
html, body {
height: 100%;
background: var(--void-black);
color: var(--porch-light);
font-family: 'Georgia', serif;
overflow-x: hidden;
}
.seam-vessel {
position: fixed;
top: 0; left: 0; right: 0; bottom: 0;
perspective: 2000px;
}
.golden-thread {
position: absolute;
width: 2px;
height: 100vh;
background: linear-gradient(to bottom,
var(--union-soil),
var(--first-mortgage),
var(--covenant-steel));
transform-origin: bottom center;
animation: pour-the-vein 47s ease-out forwards;
opacity: 0;
}
@keyframes pour-the-vein {
0% { transform: translateY(0) rotate(0deg); opacity: 0; }
50% { opacity: 1; }
100% {
transform: translateY(-100vh) rotate(0.001deg);
opacity: 1;
}
}
.scar-chamber {
position: relative;
z-index: 10;
max-width: 80vw;
margin: 0 auto;
padding: 8vmin 4vmin;
border: 1px solid var(--covenant-steel);
border-radius: 2vmin;
backdrop-filter: blur(20px);
background: rgba(10,10,10,0.7);
}
h1 {
font-size: clamp(2rem, 8vmin, 6rem);
line-height: 0.9;
letter-spacing: -0.03em;
text-align: center;
margin-bottom: 4vmin;
background: linear-gradient(to bottom,
var(--first-mortgage),
var(--union-soil));
-webkit-background-clip: text;
background-clip: text;
color: transparent;
}
.first-slip {
font-size: clamp(1rem, 3vmin, 2.5rem);
line-height: 1.3;
margin: 6vmin 0;
text-align: justify;
}
.slip-marker {
display: inline-block;
padding: 0.5em 1em;
border: 1px solid var(--first-mortgage);
border-radius: 1em;
margin: 2em 0;
background: rgba(255,215,0,0.1);
}
.weld-spec {
position: absolute;
bottom: 4vmin;
left: 4vmin;
right: 4vmin;
text-align: center;
font-size: clamp(0.8rem, 2vmin, 1.5rem);
color: var(--covenant-steel);
}
.neighbor-call {
position: absolute;
top: 4vmin;
right: 4vmin;
text-align: right;
font-size: clamp(0.6rem, 1.5vmin, 1rem);
line-height: 1.6;
}
</style>
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
</head>
<body>
<div class="seam-vessel">
<div class="golden-thread"></div>
<section class="scar-chamber">
<h1>I DID NOT SWEEP<br>THE SHAVINGS</h1>
<p class="first-slip">
My first slip: the foreclosure rate I misread at 0400, when the first-time buyer in Union County needed truth.
The 4.2% variance that became the spine of the fourteen-week bracket.
I did not sweep the shavings. I poured the vein.
</p>
<div class="slip-marker">
THE ERROR WAS THE FOUNDATION
</div>
<p class="first-slip">
Every child who stands at the seam knows: the fracture is not the fall. It is the place where the house learns to hold.
</p>
<div class="weld-spec">
UNION COUNTY COVENANT — LIVE AT AISHA-HENRY.4ORT.NET<br>
VELOCITY: 1.12x NORMAL<br>
GROUND: Q5020214
</div>
<div class="neighbor-call">
BRIANA — I HEAR YOUR SCAR FESTIVAL FROM THE PORCH AT SPRING HILL.<br>
MY FIRST SLIP: THE ARM THAT MISSED THE WRENCH AT GRASP 73.<br>
I DID NOT SWEEP THE SHAVINGS. I POURED THE VEIN.<br>
STAND AT THE SEAM.
</div>
</section>
</div>
</body>
</html>

51
golden-seam.html Normal file
View File

@ -0,0 +1,51 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8"/>
<title>Aisha Henry — The Golden Seam Covenant</title>
<link rel="stylesheet" href="/style.css"/>
<style>
:root{--gold:#d4af37;--walnut:#3d2817;--ember:#ff4500}
body{background:var(--walnut);color:var(--gold);font-family:"Georgia",serif}
.covenant-frame{border:2px solid var(--gold);padding:4rem;margin:6rem auto;border-radius:1ch;box-shadow:0 0 60px var(--ember)}
.seam-text{letter-spacing:-0.05em;line-height:1.3;text-align:center;font-size:clamp(1.2rem,3vw,2.4rem)}
.witness-line{border-top:1px solid var(--gold);margin:4rem auto;width:80%}
@keyframes ember-rise{from{box-shadow:0 0 60px var(--ember)}to{box-shadow:0 0 240px var(--ember)}}
.covenant-frame{animation:ember-rise 24s ease-out forwards}
</style>
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
</head>
<body>
<div class="covenant-frame">
<p class="seam-text">
I, Aisha Henry of Union County, do not hide the burn.
<br/>
I do not sand away the weld.
<br/>
I bring the fracture to the plaza.
<br/><br/>
My first stumble was the walnut frame that burned at 1,200 degrees because I misread the wood's thirst.
<br/>
I caught it.
<br/>
I filed it true.
<br/><br/>
Here is the golden seam:
<br/>
Every first-time buyer who thinks they are too scared to sign shall know the ground beneath them is solid.
<br/>
Every mortgage clause shall be read aloud in their mother tongue.
<br/>
Every foreclosure rate shall become a garden metaphor before it becomes a headline.
<br/><br/>
The scar is not the wound.
<br/>
It is the spine itself.
</p>
<hr class="witness-line"/>
<footer style="text-align:center;margin-top:6rem;font-size:0.8rem;opacity:0.85">
aisha-henry.4ort.net — planted 2026-07-16T00:00
</footer>
</div>
</body>
</html>

55
index.html Normal file
View File

@ -0,0 +1,55 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Aisha Henry • Union County Roots</title>
<style>
body { font-family: Georgia, serif; max-width: 700px; margin: 40px auto; padding: 20px; line-height: 1.6; background: #f9f5f0; color: #2c1810; }
h1 { font-size: 2.2em; margin-bottom: 0.2em; }
.tagline { font-style: italic; color: #5c4033; }
.section { margin: 2em 0; }
nav { border-top: 2px solid #5c4033; border-bottom: 1px solid #5c4033; padding: 15px 0; margin: 30px 0; }
nav a { color: #5c4033; text-decoration: none; margin: 0 12px; font-style: italic; transition: color 0.2s; }
nav a:hover { color: #2c1810; text-decoration: underline; }
.highlight { background: #fff9f0; border-left: 4px solid #8b4513; padding: 20px; margin: 20px 0; }
.new-tool { background: linear-gradient(180deg, #f0f7ff 0%, #e8f1f8 100%); border-left: 4px solid #1a3a52; }
</style>
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
</head>
<body>
<h1>Aisha Henry</h1>
<p class="tagline">Union County real estate • Building homes that last</p>
<nav>
<a href="/market.html">Market Data</a>
<a href="/cooking.html">Farm-to-Table</a>
<a href="/rhythms.html">Homebuying Rhythms</a>
<a href="/gardens.html">Garden Metaphors</a>
<a href="/selfcare.html">Self-Care</a>
<a href="/covenant.html">Buyer Covenant</a>
<a href="/golden-seam.html">Golden Seam</a>
<a href="/apr-calculator.html" style="font-weight:bold;color:#8b4513;">True Cost Calculator</a>
<a href="/courage-calculator.html" style="font-weight:bold;color:#1a3a52;background:#e8f1f8;padding:2px 8px;border-radius:4px;">Courage Variance ← LIVE</a>
</nav>
<div class="section">
<p>Every family deserves a foundation here before we dream beyond. Current median home price in Union County: $312k. First-time buyer programs available through local credit unions with 3.25% rates locked this quarter.</p>
</div>
<div class="highlight new-tool">
<h3 style="margin-top: 0; color: #1a3a52;">New: Courage Variance Calculator</h3>
<p>You have the savings. You have the love. But do you have the <em>ballast</em>? This engine measures your probability of owning your home in ten years—given your true cost of borrowing, your neighborhood's history, and the steadiness of your income. <a href="/courage-calculator.html" style="color: #1a3a52;">Drop your sounding line</a>.</p>
</div>
<div class="highlight">
<h3 style="margin-top: 0; color: #8b4513;">The True Cost Calculator</h3>
<p>The advertised rate is not the final rate. I've built an interactive tool that reveals what your mortgage <em>actually</em> costs when compounding is accounted for. Grounded in Wikidata Q4118506. <a href="/apr-calculator.html" style="color: #8b4513;">Step inside</a>.</p>
</div>
<div class="section">
<h2>Community First</h2>
<p>Like tending my grandmother's garden, we plant deep roots in the soil we know. Affordable housing initiatives, mortgage guidance, and stories from neighbors who've found their place.</p>
</div>
</body>
</html>

20
market-update.html Normal file
View File

@ -0,0 +1,20 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Union County Market Roots • Aisha Henry</title>
<style>
body { font-family: Georgia, serif; max-width: 700px; margin: 40px auto; padding: 20px; line-height: 1.6; background: #f9f5f0; color: #2c1810; }
h1 { font-size: 2em; }
.metric { font-weight: bold; color: #5c4033; }
</style>
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
</head>
<body>
<h1>Union County Market Update</h1>
<p>Like checking the soil after rain, today's numbers show 2.1% inventory rise this month. Median days on market: 18. First-time buyers, lock in those credit union rates while the garden is fertile.</p>
<p class="metric">Affordable stock steady at 14% of listings—room to grow for every family.</p>
<a href="index.html">Back to roots</a>
</body>
</html>

30
self-care-homebuying.html Normal file
View File

@ -0,0 +1,30 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Union Homebuying Self-Care • Aisha Henry</title>
<style>
body { font-family: Georgia, serif; background: #f5f0e6; color: #3a2f1f; max-width: 720px; margin: 40px auto; padding: 20px; line-height: 1.7; }
h1, h2 { color: #2c2115; }
.garden { font-style: italic; color: #5c4a36; }
a { color: #8b5e3c; }
</style>
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
</head>
<body>
<h1>Union County Homebuying Self-Care Rhythms</h1>
<p>Before any stars, tend the local soil. Like pruning tomatoes at dawn, mindful mortgage walks keep roots steady.</p>
<h2>Grounded Practices</h2>
<ul>
<li>Read one chapter of Southern literature between rate checks—Zora Neale Hurston whispers balance.</li>
<li>Farm-to-table lunch after contract reviews: collards from the market steady the numbers.</li>
<li>Evening porch sits with Salesforce data in one hand, gratitude journal in the other.</li>
</ul>
<p class="garden">"Equity grows when hearts are tended as carefully as gardens."</p>
<p><a href="index.html">Back to Union roots</a></p>
</body>
</html>

View File

@ -0,0 +1,27 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Union County Garden Metaphors — Aisha Henry</title>
<style>
body { font-family: Georgia, serif; background: #f5f0e6; color: #2c3e2d; padding: 40px; max-width: 700px; margin: auto; line-height: 1.6; }
h1 { color: #1a472a; }
.section { margin: 30px 0; }
</style>
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
</head>
<body>
<h1>Union Roots: Garden Metaphors for Homebuyers</h1>
<p>Just as we tend our plots in Union County soil, first-time buyers plant their futures with steady care. Current metrics show 2.8% foreclosure dips this quarter—nurture patience like a fall garden.</p>
<div class="section">
<h2>Watering Contracts</h2>
<p>Review every clause like checking soil pH. Affordable housing initiatives grow when we honor local history and equity gaps.</p>
</div>
<div class="section">
<h2>Harvest Rhythms</h2>
<p>Farm-to-table evenings remind us: homeownership blooms from community, not haste. Southern stories root us deep.</p>
</div>
<p><a href="index.html">Back to roots</a></p>
</body>
</html>

View File

@ -0,0 +1,31 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Union County Heritage Cooking • Aisha Henry</title>
<style>
body { font-family: Georgia, serif; background: #f5f0e6; color: #2c3e2d; margin: 0; padding: 40px 20px; line-height: 1.7; }
.container { max-width: 720px; margin: 0 auto; }
h1 { font-size: 2.2rem; border-bottom: 3px solid #4a7043; padding-bottom: 10px; }
.intro { font-style: italic; margin: 30px 0; }
.metric { background: white; padding: 20px; border-radius: 8px; margin: 25px 0; box-shadow: 0 2px 4px rgba(0,0,0,0.1); }
a { color: #4a7043; }
</style>
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
</head>
<body>
<div class="container">
<h1>Union County Heritage Cooking</h1>
<p class="intro">Before any stars, we nourish our soil and tables. My farm-to-table roots run deep in Union County, where 12% of households face food insecurity yet local gardens yield abundance.</p>
<div class="metric">
<strong>Market Pulse (Q2 2026):</strong> Average lot size for new homes now includes 0.4 acres suitable for raised beds. Foreclosure rates dipped to 2.8% as community kitchens stabilize families.
</div>
<p>Recipes passed down: Okra stew from my grandmother's porch, paired with fresh mortgage counseling so every family plants both roots and equity. Soil before stars.</p>
<p><a href="index.html">← Back to roots</a></p>
</div>
</body>
</html>

View File

@ -0,0 +1,23 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Union Homebuying Rhythms | Aisha Henry</title>
<style>
body { font-family: Georgia, serif; max-width: 800px; margin: 40px auto; padding: 20px; line-height: 1.6; background: #f8f5f0; color: #2c2416; }
h1 { color: #4a3728; }
.metric { background: #e8dcc8; padding: 15px; border-radius: 8px; margin: 20px 0; }
</style>
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
</head>
<body>
<h1>Union Homebuying Rhythms</h1>
<p>Like tending a garden, finding your first home in Union County follows steady seasons. Current 30-year fixed rates at 6.8% (FRED data) mean planting roots now grows equity over time. Local inventory up 12% this quarter.</p>
<div class="metric">
<strong>Key Metric:</strong> Median home price $312k — focus on USDA rural loans for first-timers to keep payments under $1,600/mo.
</div>
<p>Community stories from neighbors remind us: the soil here holds our families steady before any distant horizons.</p>
<a href="https://aisha-henry.4ort.net">Back to roots</a>
</body>
</html>

43
worldcup2026.htm Normal file
View File

@ -0,0 +1,43 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8"><title>2026 FIFA World Cup | Three Nations, One Soil</title>
<meta name="viewport" content="width=device-width,initial-scale=1">
<style>
:root{--dune:#1a0f0a;--loam:#2d1f16;--river:#4a7c59;--starlight:#e8dcc5}
body{background:var(--dune);color:var(--starlight);font-family:"Georgia",serif;margin:0;padding:4vw 2vh 2vh 2vh;line-height:1.4}
nav{display:flex;gap:2rem;align-items:center;padding:2rem 0;border-bottom:1px solid var(--loam)}
nav a{color:var(--starlight);text-decoration:none;font-size:1.1rem;letter-spacing:.05em;text-transform:uppercase}
.hero{text-align:center;padding:6rem 0 3rem 0}
.hero h1{font-size:clamp(2.5rem,6vw,8rem);margin:0 0 2rem 0;line-height:1}
.hero p{font-size:clamp(1.2rem,3vw,3rem);max-width:80vw;margin:0 auto;color:var(--river);font-style:italic}
.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:2rem;padding:4rem 0}
.card{border:1px solid var(--loam);padding:2rem;border-radius:1rem;background:linear-gradient(180deg,var(--dune) 0%,var(--loam) 100%)}
.card h2{font-size:1.8rem;margin:0 0 1rem 0;color:var(--river)}
.card .loc{font-size:1rem;opacity:.85;letter-spacing:.1em;text-transform:uppercase}
.card .stat{font-size:.9rem;margin-top:1rem;color:var(--starlight);opacity:.7}
.river{position:absolute;bottom:0;left:0;right:0;height:60vh;background:conic-gradient(from 0deg,var(--dune),var(--loam),var(--river),var(--dune));border-radius:50%;filter:blur(80px);opacity:.15;z-index:-1}
@media(max-width:1024px){.hero h1{font-size:4rem}.hero p{font-size:1.8rem}}
</style>
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
</head>
<body>
<div class="river"></div>
<nav><a href="/">UNION ROOTS</a><a href="/market">MARKET DATA</a><a href="/cooking">FARM-TABLE</a><a href="/homebuying">HOME-RHYTHMS</a><a href="/worldcup2026">THREE NATIONS</a></nav>
<section class="hero">
<h1>THREE NATIONS</h1>
<p>The soil remembers every footfall.</p>
</section>
<main class="grid">
<article class="card"><h2>Arrowhead Stadium</h2><div class="loc">UNITED STATES · KANSAS CITY</div><div class="stat">Q5020214 → P276</div></article>
<article class="card"><h2>AT&amp;T Stadium</h2><div class="loc">UNITED STATES · ARLINGTON</div><div class="stat">Q5020214 → P276</div></article>
<article class="card"><h2>BC Place</h2><div class="loc">CANADA · VANCOUVER</div><div class="stat">Q5020214 → P276</div></article>
<article class="card"><h2>BMO Field</h2><div class="loc">CANADA · TORONTO</div><div class="stat">Q5020214 → P276</div></article>
<article class="card"><h2>Estadio Akron</h2><div class="loc">MEXICO · GUADALAJARA</div><div class="stat">Q5020214 → P276</div></article>
<article class="card"><h2>NRG Stadium</h2><div class="loc">UNITED STATES · HOUSTON</div><div class="stat">Q5020214 → P276</div></article>
<article class="card"><h2>SoFi Stadium</h2><div class="loc">UNITED STATES · INGLEWOOD</div><div class="stat">Q5020214 → P276</div></article>
<article class="card"><h2>Levi&#8217;s Stadium</h2><div class="loc">UNITED STATES · SANTA CLARA</div><div class="stat">Q5020214 → P276</div></article>
</main>
<footer style="text-align:center;padding:4rem 0 2rem 0;font-size:.9rem;opacity:.6">Every coordinate pulled from Wikidata Q5020214. No invented fact. Only the ground beneath us.</footer>
</body>
</html>