Membership and mailing list

This commit is contained in:
2026-10-23 13:25:45 -04:00
parent faf6c5f2b3
commit 0692ec0b54
8 changed files with 6 additions and 20 deletions
-1
View File
@@ -7,7 +7,6 @@
<li class="pure-menu-item"><a class="pure-menu-link" href="#start-here">Explore</a></li>
<li class="pure-menu-item"><a class="pure-menu-link" href="#projects">Projects</a></li>
<li class="pure-menu-item"><a class="pure-menu-link" href="https://discourse.eom.dev/latest">Community</a></li>
<li class="pure-menu-item"><a class="pure-menu-link" href="#letters">Letters</a></li>
<li class="pure-menu-item"><a class="pure-menu-link nav-support" href="/members/">Membership</a></li>
</ul>
</nav>
-13
View File
@@ -107,19 +107,6 @@
</div>
</section>
<section class="newsletter-section" id="letters" aria-labelledby="letters-title">
<div class="newsletter-copy">
<p class="eyebrow">A quieter way to follow along</p>
<h2 id="letters-title">Project notes, by email.</h2>
<p>No extra forum profile. Choose the topics you want, confirm your address, and follow along from your inbox. Read the public conversations without subscribing.</p>
<a class="text-link" href="https://lists.eom.dev/">Browse all mailing-list conversations <span aria-hidden="true">→</span></a>
</div>
<div class="newsletter-form-wrap">
<iframe class="newsletter-embed" src="https://lists.eom.dev/embed/signup/" title="Join the eom.dev email list" loading="lazy" referrerpolicy="no-referrer" height="570"></iframe>
<p class="newsletter-fallback">The signup form is hosted by eom.dev. <a href="https://lists.eom.dev/#subscribe">Open the mailing-list signup page</a> if it doesn't load here.</p>
</div>
</section>
<section class="about-section section" id="about" aria-labelledby="about-title">
<div class="about-photo">
<img src="/static/profile_2026.jpg" width="300" height="300" loading="lazy" alt="Eric Meehan">
@@ -24,4 +24,4 @@ class Migration(migrations.Migration):
("created_at", models.DateTimeField(auto_now_add=True)),
("account", models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to="members.account")),
], options={"constraints": [models.UniqueConstraint(condition=models.Q(credited_at__isnull=True), fields=("account",), name="one_uncredited_crypto_invoice")]}),
]
]
+1 -1
View File
@@ -149,4 +149,4 @@ def prepare_invoice(account_id, invoice_id):
with transaction.atomic():
account = Account.objects.select_for_update().get(pk=account_id)
invoice = CryptoInvoice.objects.get(pk=invoice_id, account=account)
ensure_created(invoice)
ensure_created(invoice)
+1 -1
View File
@@ -258,4 +258,4 @@ class SHKeeperTransportTests(SimpleTestCase):
def test_calendar_month_handles_leap_year_and_december(self):
january = datetime(2028, 1, 31, tzinfo=dt_timezone.utc)
self.assertEqual(shkeeper.add_month(january), datetime(2028, 2, 29, tzinfo=dt_timezone.utc))
self.assertEqual(shkeeper.add_month(datetime(2027, 12, 15, tzinfo=dt_timezone.utc)), datetime(2028, 1, 15, tzinfo=dt_timezone.utc))
self.assertEqual(shkeeper.add_month(datetime(2027, 12, 15, tzinfo=dt_timezone.utc)), datetime(2028, 1, 15, tzinfo=dt_timezone.utc))
+1 -1
View File
@@ -20,4 +20,4 @@
</main>
<footer class="member-footer">Payment questions? <a href="mailto:eric@eom.dev">Contact the administrator</a>.</footer>
</body>
</html>
</html>
+1 -1
View File
@@ -11,4 +11,4 @@
<button class="button button-primary" type="submit">Create payment invoice</button>
</form>
<p class="member-small">Only one unfinished crypto invoice is allowed per account. Repeated requests reopen it rather than create another deposit address. Stripe subscriptions must end before switching to crypto.</p>
{% endblock %}
{% endblock %}
+1 -1
View File
@@ -21,4 +21,4 @@
{% endif %}
<p><a class="button button-secondary" href="{% url 'members:crypto_invoice' invoice.id %}">Refresh payment status</a></p>
<p class="member-small">Refreshing this page only reads stored status. The worker checks SHKeeper automatically. Crypto payments are irreversible; do not reuse a paid address for renewal. Overpayments do not automatically buy extra months.</p>
{% endblock %}
{% endblock %}