Add Ko-fi integration: footer link, floating widget, and admin field; v1.1.46

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
nmemmertandClaude Sonnet 4.6 committed 2026-09-02 11:57:09 -04:00
1 parent 0d830d6e79
commit d2829e610e
4 files changed
+31 -1

No files matched your search

+27
View File
@@ -452,6 +452,7 @@ function SiteFooter({ content }: { content: SiteContent }) {
const amazonUrl = content.platformAmazonUrl || '/amazon'
const creatorUrl = content.platformCreatorUrl || 'https://creators.spotify.com/pod/profile/nmemmert/'
const facebookUrl = content.platformFacebookUrl || 'https://facebook.com/versebyversewithnate'
const kofiUrl = content.platformKofiUrl
const extraFooterLinks = (content.customLinks ?? []).filter(
l => l.placement === 'footer' || l.placement === 'platforms' || l.placement === 'otherSites',
)
@@ -479,6 +480,12 @@ function SiteFooter({ content }: { content: SiteContent }) {
<a href={creatorUrl} target="_blank" rel="noreferrer">Creator Profile</a>
<span aria-hidden="true">·</span>
<a href={facebookUrl} target="_blank" rel="noreferrer">Facebook</a>
{kofiUrl && (
<>
<span aria-hidden="true">·</span>
<a href={kofiUrl} target="_blank" rel="noreferrer">Support on Ko-fi</a>
</>
)}
{extraFooterLinks.length > 0 && (
<>
<span aria-hidden="true">·</span>
@@ -2548,6 +2555,26 @@ export default function App() {
.catch(() => {})
}, [])
useEffect(() => {
const kofiUrl = content.platformKofiUrl
if (!kofiUrl) return
const username = kofiUrl.replace(/\/$/, '').split('/').pop()
if (!username) return
if (document.getElementById('kofi-overlay-script')) return
const script = document.createElement('script')
script.id = 'kofi-overlay-script'
script.src = 'https://storage.ko-fi.com/cdn/scripts/overlay-widget.umd.min.js'
script.onload = () => {
;(window as any).kofiWidgetOverlay?.draw(username, {
type: 'floating-chat',
'floating-chat.donateButton.text': 'Support the Show',
'floating-chat.donateButton.background-color': '#29abe0',
'floating-chat.donateButton.text-color': '#fff',
})
}
document.body.appendChild(script)
}, [content.platformKofiUrl])
useEffect(() => {
if (location.pathname !== '/' || !location.hash) return