Files
scha/schasite/templates/schasite/scha_board2.html
T
westfarn 04c3ac913c
Unit Tests / test (push) Successful in 3s
SEO enhancement and agentic browsing updates (#18) (#27)
## Summary
Closes #18.

- Add per-page titles, meta descriptions, Open Graph/Twitter tags, and canonical URLs on public `base2.html` pages
- Improve semantic structure: skip link, primary nav ARIA, single `<main id="main-content">`, heading hierarchy, descriptive image alts
- Publish `/robots.txt`, `/sitemap.xml`, and `/llms.txt` (linked from site head via `rel="alternate"`)
- Agentic/a11y fixes: membership checkbox label associations, ZIP `name` attribute, layout stability (image aspect-ratio / min-height), footer year without `document.write`
- WebMCP deferred — membership + Stripe checkout remain standard HTML/Stripe flows; no audit flag justified custom MCP surface yet

## Lighthouse / agentic notes
Baseline Lighthouse runs still need Chrome Canary export on staging/prod. Structural SEO/a11y items from the ticket are implemented so follow-up audits can capture before/after scores.

Expected audit wins vs prior minimal `charset`+`viewport` head:
- SEO: unique titles/descriptions, crawl directives, sitemap
- Agentic/a11y: landmarks, labels, CLS-oriented image sizing

## Test plan
- [x] `uv run python manage.py test schasite` (34 passed)
- [ ] Spot-check Home/About/Calendar/Dues/Membership/Board/Links in browser
- [ ] Confirm `/robots.txt`, `/sitemap.xml`, `/llms.txt` on deployed host
- [ ] Run Lighthouse SEO + Agentic browsing on key pages and note before/after pass ratio on the issue

Reviewed-on: #27
2026-07-14 05:19:28 -07:00

111 lines
4.5 KiB
HTML

{% extends 'schasite/base2.html' %}
{% load static %}
{% block pagetitle %}
<title>SCHA Board | Stonehedge Community Homeowners Association</title>
<style type="text/css">
/* Board Page Specific Styles */
.card-header h4 {
font-size: 1.25rem;
}
.board-member-img {
width: 150px;
height: 150px;
object-fit: cover;
border: 3px solid var(--bs-success);
}
.committee-card {
transition: transform 0.3s ease;
}
.committee-card:hover {
transform: translateY(-5px);
box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);
}
/* Responsive adjustments */
@media (max-width: 767.98px) {
.board-member-img {
width: 120px;
height: 120px;
}
}
</style>
{% endblock %}
{% block meta_tags %}
<meta name="description" content="Meet the volunteer Stonehedge Community Homeowners Association board officers serving Wheaton residents.">
{% endblock %}
{% block og_title %}SCHA Board | Stonehedge Community Homeowners Association{% endblock %}
{% block og_description %}Meet the volunteer Stonehedge Community Homeowners Association board officers serving Wheaton residents.{% endblock %}
{% block twitter_title %}SCHA Board | Stonehedge Community Homeowners Association{% endblock %}
{% block twitter_description %}Meet the volunteer Stonehedge Community Homeowners Association board officers serving Wheaton residents.{% endblock %}
{% block content %}
<div class="py-5">
<div class="container">
<!-- Board Information -->
<div class="row justify-content-center mb-5">
<div class="col-lg-10">
<div class="card shadow-sm">
<div class="card-body text-center">
<h1 class="h3 text-success mb-3">2025-2026 Stonehedge Community Homeowners Association Board</h1>
<p>The Stonehedge Community Homeowners Association is governed by a volunteer board of directors elected by the community members. Board members serve two-year terms and are responsible for overseeing the community's operations, finances, and enforcement of covenants.</p>
</div>
</div>
</div>
</div>
<!-- Board Members -->
<div class="row g-4">
{% for officer in officers %}
{% if officer %}
<div class="col-md-6 col-lg-4">
<div class="card h-100 shadow-sm">
<div class="card-header bg-success text-white text-center py-3">
<h4 class="mb-0">{{ officer.position }}</h4>
</div>
<div class="card-body text-center">
<!--<img src="../images/board/john-smith.jpg" alt="John Smith" class="rounded-circle mb-3" width="150" height="150">-->
<h5 class="card-title">{{ officer.name }}</h5>
<!-- <p class="text-muted">Term: 2022-2024</p>
<p class="card-text">John has lived in Greenwood Estates since 2015 and brings 20 years of financial management experience to the board.</p> -->
<div class="d-flex justify-content-center">
<a href="mailto:{{ officer.email }}" class="btn btn-sm btn-outline-success me-2">
<i class="bi bi-envelope"></i> Email
</a>
<!-- <a href="tel:+15551234567" class="btn btn-sm btn-outline-success">
<i class="bi bi-telephone"></i> Call
</a> -->
</div>
</div>
</div>
</div>
{% else %}
<div class="col-md-6 col-lg-4">
<div class="card h-100 shadow-sm">
<div class="card-header bg-success text-white text-center py-3">
<h4 class="mb-0">TBD</h4>
</div>
<div class="card-body text-center">
<!--<img src="../images/board/john-smith.jpg" alt="John Smith" class="rounded-circle mb-3" width="150" height="150">-->
<h5 class="card-title">TBD</h5>
<p class="text-muted">TBD</p>
<p class="card-text">TBD</p>
</div>
</div>
</div>
{% endif %}
{% endfor %}
</div>
</div>
{% endblock %}