No description
  • Python 60.3%
  • Vue 23.8%
  • JavaScript 15.4%
  • Makefile 0.5%
Find a file
Padreug 42a373bff1
Some checks failed
lint.yml / feat: add NIP-52 Nostr publish + sync of calendar events (push) Failing after 0s
feat: add NIP-52 Nostr publish + sync of calendar events
Approved events are mirrored to Nostr as NIP-52 calendar events (kind
31922) signed by the wallet owner's pubkey, and incoming kind 31922/31923
events from subscribed relays are synced into the local DB so events
created on other LNbits instances or Nostr clients show up locally.

- m009 stores nostr_event_id + nostr_event_created_at on each event
  (used for replaceable updates and NIP-09 deletes); m011 adds location
  + JSON-encoded categories list (NIP-52 location/`t` tags).
- models: Event/PublicEvent/CreateEvent gain location, categories,
  nostr_event_id, nostr_event_created_at; parse_categories validator
  decodes the JSON column on read.
- nostr/{event,nostr_client}.py: Schnorr signing, websocket relay client,
  and a NostrEvent model (publish-only and subscribe variants).
- nostr_publisher.py: build/sign NIP-52 kind 31922 events and NIP-09
  delete events; publish via the relay client.
- nostr_sync.py: subscribe to kinds 31922/31923, dedupe by nostr_event_id
  / d-tag, upsert Events; auto-approves discovered Nostr events since
  they're already public.
- nostr_hooks.py: thin bridge that views_api handlers call to publish
  or delete a NIP-52 event for a given local event. Lives in its own
  module to keep `from . import nostr_client` out of the view layer
  and avoid the views_api -> publisher import cycle.
- views_api: hooks publish_or_delete_nostr_event into create-on-approved,
  update-when-already-published, cancel (delete), delete (delete), and
  approve (publish).
- __init__.py: 3-task lifespan — wait_for_paid_invoices (upstream),
  NostrClient bootstrap, and the NIP-52 sync loop. Module-level
  nostr_client global is set by the bootstrap and read dynamically by
  publish_or_delete_nostr_event so the import order works regardless of
  whether nostrclient is up at startup.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-05 19:31:06 +02:00
.github/workflows Update to use uv (#37) 2025-08-22 16:54:51 +02:00
nostr feat: add NIP-52 Nostr publish + sync of calendar events 2026-05-05 19:31:06 +02:00
static feat: add event approval workflow with admin UI 2026-05-05 19:31:06 +02:00
tests feat: code quality (#34) 2024-08-29 12:18:49 +02:00
.gitignore feat: code quality (#34) 2024-08-29 12:18:49 +02:00
.prettierrc feat: code quality (#34) 2024-08-29 12:18:49 +02:00
__init__.py feat: add NIP-52 Nostr publish + sync of calendar events 2026-05-05 19:31:06 +02:00
config.json chore: bump to v1.3.0-aio.1 and make m006 idempotent 2026-05-05 19:31:06 +02:00
crud.py feat: add event approval workflow with admin UI 2026-05-05 19:31:06 +02:00
description.md docs: changes to more pages (#42) 2026-01-28 17:22:09 +01:00
LICENSE add license 2023-02-24 18:13:39 +01:00
Makefile Update to use uv (#37) 2025-08-22 16:54:51 +02:00
manifest.json [FEAT] add timestamp on register (#15) 2023-08-18 08:17:29 +02:00
migrations.py feat: add NIP-52 Nostr publish + sync of calendar events 2026-05-05 19:31:06 +02:00
models.py feat: add NIP-52 Nostr publish + sync of calendar events 2026-05-05 19:31:06 +02:00
nostr_hooks.py feat: add NIP-52 Nostr publish + sync of calendar events 2026-05-05 19:31:06 +02:00
nostr_publisher.py feat: add NIP-52 Nostr publish + sync of calendar events 2026-05-05 19:31:06 +02:00
nostr_sync.py feat: add NIP-52 Nostr publish + sync of calendar events 2026-05-05 19:31:06 +02:00
package-lock.json feat: code quality (#34) 2024-08-29 12:18:49 +02:00
package.json feat: code quality (#34) 2024-08-29 12:18:49 +02:00
pyproject.toml chore: prepare release, fix lint and uv warnings (#44) 2026-04-15 17:37:34 +02:00
README.md docs: changes to more pages (#42) 2026-01-28 17:22:09 +01:00
services.py feat: add promo codes and conditional events (#40) 2025-12-09 10:48:00 +00:00
tasks.py feat: make events dynamic (#43) 2026-05-04 17:01:53 +02:00
toc.md feat: code quality (#34) 2024-08-29 12:18:49 +02:00
uv.lock chore: prepare release, fix lint and uv warnings (#44) 2026-04-15 17:37:34 +02:00
views.py feat: make events dynamic (#43) 2026-05-04 17:01:53 +02:00
views_api.py feat: add NIP-52 Nostr publish + sync of calendar events 2026-05-05 19:31:06 +02:00

LNbits

License: MIT Built for LNbits

Events - LNbits extension

For more about LNBits extension check this tutorial

Sell tickets for events and use the built-in scanner for registering attendees

Events allows you to create tickets for an event. Each ticket is in the form of a unique QR code. After registering and paying, the user gets a QR code to present at registration/entrance.

Events includes a shareable ticket scanner, which can be used to register attendees.

Usage

  1. Create an event
    create event

  2. Fill out the event information:

    • event name
    • wallet (normally there's only one)
    • event information
    • closing date for event registration
    • begin and end date of the event

    event info

  3. Share the event registration link
    event ticket

    • ticket example
      ticket example

    • QR code ticket, presented after invoice paid, to present at registration
      event ticket

  4. Use the built-in ticket scanner to validate registered, and paid, attendees
    ticket scanner

Powered by LNbits

LNbits is a free and open-source lightning accounts system.

Visit LNbits Shop Try myLNbits SaaS