fix: rename issue -> drop, fix hashtags, add 6 tags
- "Issue" replaced with "Drop" everywhere in UI and copy: Drop #001, Weekly Drops, Write Drop #002, next drop, etc. - nostrText: hashtags consolidated to one line (some clients break each hashtag onto its own line when separated by newlines) - nostrText: removed "Full issue:" prefix — bare URL unfurls cleaner - 6 hashtags added: #skateboarding #nostr #skatespots #spotr #newsletter #skatespotsnews - Publish button tags updated to include all 6 as t-tags - Template comment updated to match new format Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
This commit is contained in:
parent
b5edb0ab52
commit
e4a9b454a4
2 changed files with 19 additions and 16 deletions
|
|
@ -76,7 +76,7 @@ function LatestDropPill() {
|
||||||
>
|
>
|
||||||
<Radio className="h-3.5 w-3.5 text-[#ccff00] animate-pulse flex-shrink-0" />
|
<Radio className="h-3.5 w-3.5 text-[#ccff00] animate-pulse flex-shrink-0" />
|
||||||
<span className="text-xs font-black text-[#ccff00] uppercase tracking-wide whitespace-nowrap">
|
<span className="text-xs font-black text-[#ccff00] uppercase tracking-wide whitespace-nowrap">
|
||||||
{formatIssueNumber(latest.number)} is out
|
Drop {formatIssueNumber(latest.number)} is out
|
||||||
</span>
|
</span>
|
||||||
<span className="text-[10px] text-gray-500 hidden sm:inline">
|
<span className="text-[10px] text-gray-500 hidden sm:inline">
|
||||||
· {age === 0 ? 'Today' : age === 1 ? 'Yesterday' : `${age}d ago`}
|
· {age === 0 ? 'Today' : age === 1 ? 'Yesterday' : `${age}d ago`}
|
||||||
|
|
@ -139,7 +139,7 @@ function MondayAdminReminder() {
|
||||||
onClick={() => setDismissed(todayKey)}
|
onClick={() => setDismissed(todayKey)}
|
||||||
>
|
>
|
||||||
<Pencil className="h-3.5 w-3.5" />
|
<Pencil className="h-3.5 w-3.5" />
|
||||||
Write Issue #{String(NEWSLETTER_ISSUES[0].number + 1).padStart(3, '0')}
|
Write Drop #{String(NEWSLETTER_ISSUES[0].number + 1).padStart(3, '0')}
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<button
|
<button
|
||||||
|
|
|
||||||
|
|
@ -65,22 +65,22 @@ export interface NewsletterIssue {
|
||||||
/**
|
/**
|
||||||
* Plain-text teaser posted as a kind 1 Nostr note.
|
* Plain-text teaser posted as a kind 1 Nostr note.
|
||||||
*
|
*
|
||||||
* TEMPLATE (copy this for every new issue):
|
* TEMPLATE (copy this for every new drop):
|
||||||
*
|
*
|
||||||
* 🛹 SkateSpots Weekly #00X
|
* 🛹 SkateSpots Drop #00X
|
||||||
*
|
*
|
||||||
* [One punchy sentence summing up the week — what was the theme?]
|
* [One punchy sentence summing up the week — what was the theme?]
|
||||||
* [One sentence on the most important thing that shipped.]
|
* [One sentence on the most important thing that shipped.]
|
||||||
*
|
*
|
||||||
* Full issue: https://skate-spots.org/newsletter
|
* https://skate-spots.org/newsletter
|
||||||
*
|
*
|
||||||
* #skateboarding #nostr #skatespots
|
* #skateboarding #nostr #skatespots #spotr #newsletter #skatespotsnews
|
||||||
*
|
*
|
||||||
* Rules:
|
* Rules:
|
||||||
* - Max 5 lines of content before the URL
|
* - Max 5 lines of content before the URL
|
||||||
* - No bullet lists — clients render them differently
|
* - No bullet lists — clients render them differently
|
||||||
* - URL always on its own line, always last before hashtags
|
* - URL on its own line, no "Full issue:" prefix — cleaner unfurl
|
||||||
* - 3 hashtags max — more looks spammy
|
* - Hashtags all on one line — some clients break each onto a new line if separated
|
||||||
*/
|
*/
|
||||||
nostrText: string;
|
nostrText: string;
|
||||||
}
|
}
|
||||||
|
|
@ -146,13 +146,13 @@ export const NEWSLETTER_ISSUES: NewsletterIssue[] = [
|
||||||
spotOfTheWeek: undefined,
|
spotOfTheWeek: undefined,
|
||||||
communityNote:
|
communityNote:
|
||||||
"The relay at wss://goskatespots.nostr1.com is live and growing. Spots, shops, events, coaches, filmers, editors and tours are all flowing through it. Add it to your Nostr client to follow the scene directly.",
|
"The relay at wss://goskatespots.nostr1.com is live and growing. Spots, shops, events, coaches, filmers, editors and tours are all flowing through it. Add it to your Nostr client to follow the scene directly.",
|
||||||
nostrText: `🛹 SkateSpots Weekly #001
|
nostrText: `🛹 SkateSpots Drop #001
|
||||||
|
|
||||||
Security week. Fake spot protection, URL sanitization, map clustering, phishing warnings and more — eight improvements shipped to keep the community clean and the map usable.
|
Security week. Fake spot protection, URL sanitization, map clustering, phishing warnings and more — eight improvements shipped to keep the community clean and the map usable.
|
||||||
|
|
||||||
Full issue: https://skate-spots.org/newsletter
|
https://skate-spots.org/newsletter
|
||||||
|
|
||||||
#skateboarding #nostr #skatespots`,
|
#skateboarding #nostr #skatespots #spotr #newsletter #skatespotsnews`,
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
@ -182,13 +182,16 @@ function PublishToNostrButton({ issue }: { issue: NewsletterIssue }) {
|
||||||
content: issue.nostrText,
|
content: issue.nostrText,
|
||||||
tags: [
|
tags: [
|
||||||
['t', 'skateboarding'],
|
['t', 'skateboarding'],
|
||||||
['t', 'skatespots'],
|
|
||||||
['t', 'nostr'],
|
['t', 'nostr'],
|
||||||
['r', `https://skate-spots.org/newsletter`],
|
['t', 'skatespots'],
|
||||||
|
['t', 'spotr'],
|
||||||
|
['t', 'newsletter'],
|
||||||
|
['t', 'skatespotsnews'],
|
||||||
|
['r', 'https://skate-spots.org/newsletter'],
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
setPublished(true);
|
setPublished(true);
|
||||||
toast({ title: 'Published!', description: `Issue #${String(issue.number).padStart(3, '0')} posted to Nostr.` });
|
toast({ title: 'Published!', description: `Drop #${String(issue.number).padStart(3, '0')} posted to Nostr.` });
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
toast({
|
toast({
|
||||||
title: 'Publish failed',
|
title: 'Publish failed',
|
||||||
|
|
@ -418,7 +421,7 @@ function IssueArticle({ issue }: { issue: NewsletterIssue }) {
|
||||||
) : (
|
) : (
|
||||||
<div className="mt-4 p-5 rounded-2xl border-2 border-[#ff0040]/20 bg-[#ff0040]/5">
|
<div className="mt-4 p-5 rounded-2xl border-2 border-[#ff0040]/20 bg-[#ff0040]/5">
|
||||||
<p className="text-gray-500 text-sm italic">
|
<p className="text-gray-500 text-sm italic">
|
||||||
No spot picked this week. Submit yours and it might make the next issue.
|
No spot picked this week. Submit yours and it might make the next drop.
|
||||||
</p>
|
</p>
|
||||||
<Link
|
<Link
|
||||||
to="/map"
|
to="/map"
|
||||||
|
|
@ -501,7 +504,7 @@ export default function NewsletterPage() {
|
||||||
<div className="mb-12 text-center">
|
<div className="mb-12 text-center">
|
||||||
<div className="inline-flex items-center gap-2 px-3 py-1.5 rounded-full border border-[#ccff00]/30 bg-[#ccff00]/5 text-[10px] font-black uppercase tracking-widest text-[#ccff00] mb-5">
|
<div className="inline-flex items-center gap-2 px-3 py-1.5 rounded-full border border-[#ccff00]/30 bg-[#ccff00]/5 text-[10px] font-black uppercase tracking-widest text-[#ccff00] mb-5">
|
||||||
<Radio className="h-3 w-3" />
|
<Radio className="h-3 w-3" />
|
||||||
Weekly Drop
|
Weekly Drops
|
||||||
</div>
|
</div>
|
||||||
<h1
|
<h1
|
||||||
className="text-4xl sm:text-6xl font-black uppercase leading-none mb-3"
|
className="text-4xl sm:text-6xl font-black uppercase leading-none mb-3"
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue