The ORLY Web UI includes a comprehensive event template generator that helps users create properly-structured Nostr events for any of the 140+ defined event kinds.
The Compose tab provides a "Generate Template" button that opens a searchable, categorized modal dialog. Users can browse or search for any Nostr event kind and instantly load a pre-filled template with the correct structure, tags, and example content.
app/web/src/eventKinds.js)A comprehensive JavaScript database containing:
- Kind number - Human-readable name - Description - NIP reference (where applicable) - Event type flags (replaceable, addressable, ephemeral) - Pre-built template with proper tag structure
app/web/src/EventTemplateSelector.svelte)A user-friendly modal interface featuring:
- All Kinds - Regular Events (0-9999) - Replaceable (10000-19999) - Ephemeral (20000-29999) - Addressable (30000-39999) - Domain-specific: Social, Messaging, Lists, Marketplace, Lightning, Media, Git, Calendar, Groups
When publishing fails, the system provides detailed, actionable error messages:
| Error Type | Description | User Guidance |
|---|---|---|
| Policy Error | Event kind blocked by relay policy | Contact relay administrator to allow the kind |
| Permission Error | User role insufficient | Shows current role, suggests permission upgrade |
| Kind Restriction | Event type not allowed | Policy configuration may need updating |
| Rate Limit | Too many requests | Wait before retrying |
| Size Limit | Event too large | Reduce content length |
- Use the search box to find specific event types - Or click category tabs to filter by event type - Click on any event kind to select it
- Correct kind value
- Proper tag structure with placeholder values
- Example content (where applicable)
- Current timestamp
- Your pubkey (if logged in)
<angle_brackets>) with actual dataTemplates use placeholder values in angle brackets that must be replaced:
{
"kind": 1,
"content": "Your note content here",
"tags": [
["p", "<pubkey_to_mention>"],
["e", "<event_id_to_reference>"]
],
"created_at": 1702857600,
"pubkey": "<your_pubkey_here>"
}
Standard events that are stored indefinitely. Examples:
Events where only the latest version is kept. Examples:
Events not intended for permanent storage. Examples:
Parameterized replaceable events identified by kind + pubkey + d-tag. Examples:
eventKinds.jsimport {
eventKinds, // Array of all event kinds
kindCategories, // Array of category filter definitions
getEventKind, // Get kind info by number
searchEventKinds, // Search by query string
createTemplateEvent // Generate template with current timestamp
} from './eventKinds.js';
// Get information about a specific kind
const kind1 = getEventKind(1);
// Returns: { kind: 1, name: "Short Text Note", description: "...", template: {...} }
// Search for kinds
const results = searchEventKinds("zap");
// Returns: Array of matching kinds
// Create a template event
const template = createTemplateEvent(1, "abc123...");
// Returns: Event object with current timestamp and provided pubkey
Your user role does not allow publishing events. Check your role in the header badge and contact a relay administrator.
The relay's policy configuration does not allow this event kind. If you're an administrator, check ORLY_POLICY_PATH or the Policy tab.
Click the Sign button before Publish. Events must be cryptographically signed before the relay will accept them.
Ensure JavaScript is enabled and the page has fully loaded. Try refreshing the page.