🎉 init

This commit is contained in:
2026-07-01 15:43:18 +02:00
commit 2f492c55be
64 changed files with 11645 additions and 0 deletions
+21
View File
@@ -0,0 +1,21 @@
import { readIdentity, writeIdentity } from '../utils/identity'
export function useIdentity() {
const name = useState<string | null>('identity-name', () => null)
const loaded = useState('identity-loaded', () => false)
if (import.meta.client && !loaded.value) {
const identity = readIdentity(window.localStorage)
name.value = identity?.name ?? null
loaded.value = true
}
function setName(newName: string) {
const trimmed = newName.trim()
if (!trimmed) return
name.value = trimmed
if (import.meta.client) writeIdentity(window.localStorage, { name: trimmed })
}
return { name, setName }
}
+17
View File
@@ -0,0 +1,17 @@
import { readCachedPaymentLink, writeCachedPaymentLink } from '../utils/paymentLinkCache'
export function usePaymentLinkCache() {
const lastLink = useState<string | null>('payment-link-cache', () => null)
if (import.meta.client && lastLink.value === null) {
lastLink.value = readCachedPaymentLink(window.localStorage)
}
function rememberLink(link: string) {
if (!import.meta.client || !link) return
lastLink.value = link
writeCachedPaymentLink(window.localStorage, link)
}
return { lastLink, rememberLink }
}
+18
View File
@@ -0,0 +1,18 @@
import { readVisitedPots, recordVisitedPot, type VisitedPot } from '../utils/visitedPots'
export function useVisitedPots() {
const stored = useState<VisitedPot[] | null>('visited-pots', () => null)
if (import.meta.client && stored.value === null) {
stored.value = readVisitedPots(window.localStorage)
}
const pots = computed(() => stored.value ?? [])
function recordVisit(pot: Omit<VisitedPot, 'visitedAt'>) {
if (!import.meta.client) return
stored.value = recordVisitedPot(window.localStorage, pot)
}
return { pots, recordVisit }
}