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>
This commit is contained in:
2026-07-16 06:30:28 -04:00
parent 7c059ece02
commit 55283f14aa
5 changed files with 37 additions and 10 deletions
+9
View File
@@ -385,6 +385,15 @@ textarea {
text-align: center; text-align: center;
} }
.course-cover {
max-width: 14rem;
width: 100%;
height: auto;
border-radius: 4px;
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.2);
margin: 0 auto var(--space-3);
}
.course-subhead { .course-subhead {
font-style: italic; font-style: italic;
color: var(--color-brass); color: var(--color-brass);
+8 -4
View File
@@ -1,8 +1,12 @@
--- ---
title: "Thanks — here's your story" title: "Thanks! Here's your story."
description: "Download your free short story." description: "Enjoy Neon Tan!"
--- ---
Thanks for signing up — here's your copy. Here's your copy of *Neon Tan*.
[Download the story](https://downloads.michaelferrara.org/TODO-story-filename.epub) [Download the story](https://downloads.michaelferrara.org/neon-tan/neon_tan.epub)
Talk soon,
Michael
+12 -5
View File
@@ -1,23 +1,30 @@
--- ---
title: "TODO: Story Title" title: "Get A Story"
description: "TODO: one-line description of the free short story." description: "An AI's trademark silver-blue suit isn't exactly beach-town vibes, but he's determined to land his song a spot on the weekly top 40 countdown anyway. After a string of failed attempts to get noticed by the countdown's enigmatic curator DJ, he and his wisecracking seagull sidekick stumble into an open mic night just as a malware glitch hits, forcing him to trade analysis for improvisation, rallying tourists into one spontaneous singalong to discover connection was never something you could calculate."
type: "courses" type: "courses"
eec_slug: "reader-magnet" eec_slug: "reader-magnet"
# Optional italic line under the title, for handling an objection up front. # Optional italic line under the title, for handling an objection up front.
hero_subhead: "TODO: subhead for the landing page" hero_subhead: "This story, occasional emails when something new comes out and other things you want in your inbox."
# Label on the signup form's submit button. # Label on the signup form's submit button.
cta_text: "Send me the story" cta_text: "Send me the story"
# Cover image, hosted in the public downloads bucket alongside the epub.
# Used as the on-page hero image and for the og:image/Twitter card meta tags.
cover_image: "https://downloads.michaelferrara.org/neon-tan/neon_tan_cover.jpg"
# Direct link to the epub in the public downloads bucket — shown as an # Direct link to the epub in the public downloads bucket — shown as an
# on-page button immediately after a successful signup, independent of the # on-page button immediately after a successful signup, independent of the
# welcome email (see layouts/partials/course-enroll-form.html). # welcome email (see layouts/partials/course-enroll-form.html).
download_url: "https://downloads.michaelferrara.org/TODO-story-filename.epub" download_url: "https://downloads.michaelferrara.org/neon-tan/neon_tan.epub"
download_text: "Download now" download_text: "Download now"
# Optional heading above the repeated signup form at the bottom of the page. # Optional heading above the repeated signup form at the bottom of the page.
repeat_cta_heading: "Want the story?" repeat_cta_heading: "Want the story?"
--- ---
The world is stranger than it looks and more meaningful than it lets on.
TODO: Michael's landing-page copy goes here. You know this.
Sign up to my mailing list and I'll send you a story about an AI, a wisecracking seagull, and a song that needs to be heard.
+7 -1
View File
@@ -4,7 +4,13 @@
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<title>{{ if .IsHome }}{{ .Site.Title }}{{ else }}{{ .Title }} · {{ .Site.Title }}{{ end }}</title> <title>{{ if .IsHome }}{{ .Site.Title }}{{ else }}{{ .Title }} · {{ .Site.Title }}{{ end }}</title>
<meta name="description" content="{{ .Site.Params.description }}"> <meta name="description" content="{{ .Description | default .Site.Params.description }}">
{{ with .Params.cover_image }}
<meta property="og:title" content="{{ $.Title }}">
<meta property="og:description" content="{{ $.Description | default $.Site.Params.description }}">
<meta property="og:image" content="{{ . }}">
<meta name="twitter:card" content="summary_large_image">
{{ end }}
{{ $css := resources.Get "css/main.css" }} {{ $css := resources.Get "css/main.css" }}
{{ if hugo.IsProduction }} {{ if hugo.IsProduction }}
{{ $css = $css | minify | fingerprint }} {{ $css = $css | minify | fingerprint }}
+1
View File
@@ -1,6 +1,7 @@
{{ define "main" }} {{ define "main" }}
<section class="course-hero"> <section class="course-hero">
<h1>{{ .Title }}</h1> <h1>{{ .Title }}</h1>
{{ with .Params.cover_image }}<img class="course-cover" src="{{ . }}" alt="{{ $.Title }} cover">{{ end }}
{{ with .Params.hero_subhead }}<p class="course-subhead">{{ . }}</p>{{ end }} {{ with .Params.hero_subhead }}<p class="course-subhead">{{ . }}</p>{{ end }}
{{ partial "course-enroll-form.html" (dict "id" "top" "page" .) }} {{ partial "course-enroll-form.html" (dict "id" "top" "page" .) }}