Files
nq/AGENTS.md
T
2026-06-08 17:07:50 -07:00

2.0 KiB

The user logs in via NIP-07, NIP-46, or private key. See https://gitea.coracle.social/coracle/caravel/raw/branch/master/frontend/src/views/Login.tsx for an example login component.

The app has a sidebar with an "inbox", a list of existing quorums, and a "create quorum" button. The bottom shows the user's profile name/nip05 and a logout button. On mobile, an icon opens a quorum list in a drawer, and a plus button opens the quorum creation form.

The inbox shows all events pending signature across all quorums, including events the user has not yet signed. Each event shows x/y signed. Events not yet signed by the user have options for signing and declining, each with an optional message posted to the NIP-17 quorum chat. The inbox also lists quorum invitations with options to join or decline, each with a message.

Create quorum opens a modal for selecting quorum members and threshold, the quorum's outbox relays, and the quorum's kind 0 profile information.

Clicking a quorum opens the quorum detail page, which shows the profile information for the quorum's pubkey, a list of members, a list of recent events (including unsigned/declined) published by the quorum, and a NIP-17 encrypted group chat among members under their own pubkeys. The overflow menu has two options: rotate membership and sign event.

Rotating membership is a special case of signing an event. The option opens a form with the member list (editable, including removing oneself) and the threshold. An optional message is posted to the NIP-17 quorum chat.

The sign event button opens a modal/drawer for choosing an event kind: public note (kind 1), relay selections (kind 10002), or profile (kind 0).

Use SolidJS, Tailwind, Preline, and applesauce for Nostr functionality. Use @noble/curves for FROST cryptographic primitives (DKG, Feldman VSS, threshold signing) and @noble/hashes for hash functions. Use toast for error messages, not inline errors.

Code style

Never re-export imports, always update the call site to point at the new source.