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:
shakespeare.diy 2026-06-18 15:09:32 +07:00
parent b5edb0ab52
commit e4a9b454a4
2 changed files with 19 additions and 16 deletions

View file

@ -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

View file

@ -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"