Commit Graph

15 Commits

Author SHA1 Message Date
will d2f1ffd946 Add Plausible Analytics tracking
deploy / deploy (push) Successful in 7s
2026-08-21 16:02:47 -04:00
will 7f6fe27966 Fill in homepage copy with persona bio
deploy / deploy (push) Successful in 6s
Replaces the TODO placeholder with hero copy and a voice/genre bio
in place of a separate About page, matching the reground-site pattern.
2026-08-11 10:51:54 -04:00
will f3fdd3acc5 fix title for neon tan page
deploy / deploy (push) Successful in 6s
2026-08-05 05:11:26 -04:00
will 316c55cbb1 imporve reader magnet copy.
deploy / deploy (push) Successful in 7s
2026-08-04 21:29:23 -04:00
will 0d8e50cbe3 Move Neon Tan's landing page from bookshop into Hugo
deploy / deploy (push) Successful in 6s
bookshop already supports this: ALLOWED_ORIGIN + CORS on POST
/arc/{code} exist specifically so a page on the brand's own domain can
call it cross-origin. There was no reason for bookshop to also render
the marketing/landing page itself — that put book copy inside a
generic, brand-agnostic Go template shared across every brand instead
of under normal editorial control like every other page on this site.

/books/neon-tan/ is now a plain Hugo page (content/books/neon-tan.md,
no longer draft-only/metadata-only — it's rendered for real via the new
layouts/books/single.html) with a small JS form
(layouts/partials/arc-redeem-form.html, mirroring the existing
course-enroll-form.html pattern) that POSTs form-encoded straight to
shop.michaelferrara.org/arc/neon-tan. bookshop's GET /arc/{code} page
rendering is no longer used for this campaign; only the POST redemption
and the download/Kindle/read/checkout endpoints still are.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-04 18:04:56 -04:00
will d61ba514dd Restore original reader-magnet copy as the ARC page logline
deploy / deploy (push) Successful in 5s
The old /gift page's actual visible pitch ("The world is stranger than
it looks...") got replaced with the book's back-cover blurb when this
file was first created — this was the wrong text to lose; the blurb was
only ever used as /gift's SEO meta description, not its visible copy.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-04 17:52:16 -04:00
will 29cfad5980 Retire the old EEC-based /gift reader-magnet pages
deploy / deploy (push) Successful in 6s
Neon Tan now ships via shop.michaelferrara.org/arc/neon-tan (bookshop's
ARC giveaway: single email field, gated download, tracked redemptions)
instead of these EEC-course-driven pages, which required first name as
well as email and served the epub from an ungated public bucket URL.

Old /gift and /gift-thanks paths still work via Caddy's path_redirects
(reground-infrastructure), so any existing bookmarks/emailed links keep
resolving to the new page instead of 404ing.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-04 17:29:04 -04:00
will dcffe1b171 Add content/books/neon-tan.md as arc-campaign.sh metadata source
deploy / deploy (push) Successful in 6s
Front-matter-only, mirroring thistleandmoth-site's books/ convention.
Feeds the bookshop ARC campaign's title/author/cover/description —
draft: true, not meant to render as its own page (no books layout
exists in this site).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-04 17:26:03 -04:00
will 2e2422d379 Switch deploy to CI-build + scoped rsync instead of shared-runner bind-mount
deploy / deploy (push) Successful in 5s
Fleet-wide change: CI now builds the site in an isolated container and
pushes output via rsync to a forced-command SSH key restricted (via
rrsync) to this site's own docroot only, instead of relying on the
shared Actions runner's blanket /var/www/** bind-mount capability. See
the static-site-deploy Ansible role in reground-infrastructure.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-29 12:30:31 -04:00
will efdc2521ca Collect first/last name on the course enroll form
deploy / deploy (push) Successful in 4s
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-23 19:47:34 -04:00
will 51ab8f842d Use a branded landscape social card instead of the raw portrait cover
deploy / deploy (push) Successful in 4s
The book cover is a 1664x2432 portrait image, which crops badly into
og:image's expected 1200x630. Add a social_image field (a composited
card: cover centered on the site's parchment background) that og:image/
twitter:card prefer, falling back to cover_image if unset.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-16 06:57:48 -04:00
will 55283f14aa Finish the Neon Tan reader-magnet page
deploy / deploy (push) Successful in 5s
Fill in the gift page's copy (title, description, subhead), wire the
cover image into the hero and og:image/Twitter card meta, and point the
download links at the real bucket path. Also fixes a bug where every
page's meta description fell back to the site-wide bio instead of its
own.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-16 06:30:28 -04:00
will 7c059ece02 Rename freebie -> gift
deploy / deploy (push) Successful in 3s
Matches the gift.<domain> vanity redirect's own name instead of a
different word for the same page.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-15 11:06:07 -04:00
will 8f0204b928 Wire up the new stylesheet: self-host fonts, fix markup/class mismatch
deploy / deploy (push) Successful in 4s
Self-hosts the five EB Garamond/Source Serif 4/Inter woff2 files the
new CSS's @font-face rules point at (static/fonts/ didn't exist before
now, so those requests just 404'd). Removes the old Google Fonts link
that was pulling Roboto/Open Sans/Source Code Pro — fonts the new
stylesheet never references.

Updates baseof.html's header/footer markup from the old scaffold's
.site/.brand/.inner classes to .site-header/.site-title/.site-footer,
matching what the new CSS actually targets — without this the header
and footer rendered completely unstyled.

Adds the component styles the new CSS didn't include at all: .btn,
.enroll-form/.enroll-status/.enroll-download, .course-hero and
friends, and .skip-link. Most importantly .field-honeypot — its
absence meant the anti-spam honeypot field rendered visibly on the
page instead of off-screen, which would silently break a real
visitor's signup if they filled it in.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-15 10:14:21 -04:00
will f380af16a1 Scaffold michaelferrara-site: Hugo skeleton with reader-magnet freebie flow
deploy / deploy (push) Successful in 4s
2026-07-15 06:39:49 -04:00