diff --git a/src/modules/activities/components/CreateEventDialog.vue b/src/modules/activities/components/CreateEventDialog.vue
index 5f3a605..3eb5b2a 100644
--- a/src/modules/activities/components/CreateEventDialog.vue
+++ b/src/modules/activities/components/CreateEventDialog.vue
@@ -62,9 +62,7 @@ const formSchema = toTypedSchema(z.object({
name: z.string().min(1, "Title is required").max(200, "Title too long"),
info: z.string().max(2000, "Description too long").optional().default(''),
event_start_date: z.string().min(1, "Start date is required"),
- event_start_time: z.string().optional().default(''),
event_end_date: z.string().optional().default(''),
- event_end_time: z.string().optional().default(''),
location: z.string().max(500).optional().default(''),
banner: z.string().optional().default(''),
currency: z.string().default("sat"),
@@ -78,9 +76,7 @@ const form = useForm({
name: '',
info: '',
event_start_date: '',
- event_start_time: '',
event_end_date: '',
- event_end_time: '',
location: '',
banner: '',
currency: 'sat',
@@ -89,15 +85,6 @@ const form = useForm({
}
})
-// Fold a date input ("YYYY-MM-DD") and an optional time input ("HH:MM")
-// into the events-extension wire format: date-only when no time given,
-// ISO 8601 datetime otherwise. The publisher switches NIP-52 kinds on
-// the "T" delimiter.
-function foldDateTime(date: string, time: string): string {
- if (!date) return ''
- return time ? `${date}T${time}` : date
-}
-
const paymentService = injectService(SERVICE_TOKENS.PAYMENT_SERVICE)
const ticketApi = injectService(SERVICE_TOKENS.TICKET_API) as TicketApiService | null
@@ -157,21 +144,13 @@ const onSubmit = form.handleSubmit(async (formValues) => {
try {
const eventData: CreateEventRequest = {
name: formValues.name,
- event_start_date: foldDateTime(
- formValues.event_start_date,
- formValues.event_start_time
- ),
+ event_start_date: formValues.event_start_date,
wallet: preferredWallet.id,
}
// Optional fields — only include if provided
if (formValues.info) eventData.info = formValues.info
- if (formValues.event_end_date) {
- eventData.event_end_date = foldDateTime(
- formValues.event_end_date,
- formValues.event_end_time
- )
- }
+ if (formValues.event_end_date) eventData.event_end_date = formValues.event_end_date
if (formValues.location) eventData.location = formValues.location
if (formValues.banner) eventData.banner = formValues.banner
if (formValues.currency) eventData.currency = formValues.currency
@@ -228,28 +207,16 @@ const handleOpenChange = (open: boolean) => {
-
-
-
-
- Start date *
-
-
-
-
-
-
-
-
-
- Start time
-
-
-
-
-
-
-
+
+
+
+ Start date *
+
+
+
+
+
+
@@ -362,28 +329,16 @@ const handleOpenChange = (open: boolean) => {
-
-
-
- End date
-
-
-
- Defaults to start date
-
-
-
-
-
-
- End time
-
-
-
-
-
-
-
+
+
+ End date
+
+
+
+ Defaults to start date if not set
+
+
+
diff --git a/src/modules/activities/types/nip52.ts b/src/modules/activities/types/nip52.ts
index 332d054..2a57a71 100644
--- a/src/modules/activities/types/nip52.ts
+++ b/src/modules/activities/types/nip52.ts
@@ -181,14 +181,6 @@ export function parseCalendarDateEvent(event: NostrEvent): CalendarDateEvent | n
if (!dTag || !title || !start) return null
- // NIP-52 kind 31922 requires YYYY-MM-DD. Reject anything else (including
- // accidentally-published datetimes) so downstream parseIsoDate cannot
- // produce an Invalid Date and crash the renderer.
- const ISO_DATE = /^\d{4}-\d{2}-\d{2}$/
- if (!ISO_DATE.test(start)) return null
- const end = getTagValue(event.tags, 'end')
- if (end && !ISO_DATE.test(end)) return null
-
const participants: Participant[] = event.tags
.filter(t => t[0] === 'p')
.map(t => ({
@@ -205,7 +197,7 @@ export function parseCalendarDateEvent(event: NostrEvent): CalendarDateEvent | n
content: event.content,
image: getTagValue(event.tags, 'image'),
start,
- end,
+ end: getTagValue(event.tags, 'end'),
location: getTagValue(event.tags, 'location'),
geohash: getTagValue(event.tags, 'g'),
hashtags: getTagValues(event.tags, 't'),
diff --git a/src/modules/activities/types/ticket.ts b/src/modules/activities/types/ticket.ts
index 5384ddf..8943421 100644
--- a/src/modules/activities/types/ticket.ts
+++ b/src/modules/activities/types/ticket.ts
@@ -44,10 +44,6 @@ export interface TicketPaymentStatus {
/**
* LNbits events extension event (database-backed ticketed event).
* Corresponds to the Event model in the events extension.
- *
- * event_start_date / event_end_date are ISO 8601 — either date-only
- * ("2026-05-19") or with a time ("2026-05-19T18:30"). Presence of "T"
- * switches the publisher between NIP-52 kind 31922 and 31923.
*/
export interface TicketedEvent {
id: string
diff --git a/src/modules/activities/views/EventsPage.vue b/src/modules/activities/views/EventsPage.vue
index ab4feb8..0181dc1 100644
--- a/src/modules/activities/views/EventsPage.vue
+++ b/src/modules/activities/views/EventsPage.vue
@@ -33,10 +33,7 @@ function formatDate(dateStr: string | null | undefined) {
if (!dateStr) return 'Date not available'
const date = new Date(dateStr)
if (isNaN(date.getTime())) return 'Invalid date'
- // Presence of "T" in the wire value marks a time-based event (NIP-52
- // kind 31923 on our publisher). Show time only when one was set.
- const hasTime = dateStr.includes('T')
- return format(date, hasTime ? 'MMMM do, yyyy p' : 'MMMM do, yyyy')
+ return format(date, 'MMMM do, yyyy')
}
function handlePurchaseClick(event: {