Wikifreedia
All versions

Projects group tasks and milestones under a named initiative with Nostr Markdown content and links to associated resources. Milestones are referenced as a tags pointing to Milestone events (kind:30316); resource links use named tags (repository, application, etc.) so the event is self-descriptive without parsing kind numbers. Tasks reference a project and a milestone independently via a tags; clients group them in the UI.

Project (kind:30315)

An addressable event representing a project. Content is a Nostr Markdown description of the initiative. a tags referencing kind:30316 events list the project’s milestones in order; named resource tags (repository, application, etc.) link associated Nostr resources.

Required Tags

Tag Description
d Unique slug for the project (e.g. zapstore-v2).
title Display name of the project.

Optional Tags

Tag Description
a Milestone reference: 30316:<pubkey>:<slug>. Repeat in order; tag order defines milestone sequence.
summary One-line description for lists and previews.
repository Git repository: ["repository", "30617:<pubkey>:<d>", "<relay-url>"].
application App event: ["application", "32267:<pubkey>:<d>", "<relay-url>"].
calendar Calendar event: ["calendar", "31923:<pubkey>:<d>", "<relay-url>"].
docs Documentation collection: ["docs", "30101:<pubkey>:<d>", "<relay-url>"].
e Related event by id. Repeat for each.
p Pubkey with optional role. Repeat for each person.
t Category tag. Repeat for each.
due Project deadline as Unix timestamp.

Person Roles (p tag)

Role Description
owner Project owner / decision-maker
member Active contributor
(empty) Mentioned or CC’d

Content

Project description, goals, and context. Follows Nostr Markdown. MAY use wikilinks to reference related wiki articles.

Event Structure

{
  "kind": 30315,
  "pubkey": "<owner-pubkey>",
  "tags": [
    ["d", "zapstore-v2"],
    ["title", "Zapstore v2"],
    ["summary", "Full rewrite of the Zapstore app"],
    ["a", "30316:<pubkey>:alpha", "<relay-url>"],
    ["a", "30316:<pubkey>:beta",  "<relay-url>"],
    ["a", "30316:<pubkey>:v1-0",  "<relay-url>"],
    ["repository",   "30617:<pubkey>:zapstore",     "<relay-url>"],
    ["application",  "32267:<pubkey>:app.zapstore", "<relay-url>"],
    ["p", "<pubkey>", "owner"],
    ["p", "<pubkey>", "member"],
    ["due", "1740000000"],
    ["t", "mobile"],
    ["t", "nostr"]
  ],
  "content": "## Goals\n\n- Rewrite in Flutter\n- Add zap-split support\n- NIP-47 wallet connect",
  "created_at": 1700000000
}

Referencing a Project and Milestone from a Task

A Task event carries both references as plain a tags. Clients resolve the kind in each address to determine the type and group tasks by project and milestone in the UI.

{
  "kind": 37060,
  "tags": [
    ["d", "add-zap-split"],
    ["title", "Add zap-split support"],
    ["a", "30315:<pubkey>:zapstore-v2"],
    ["a", "30316:<pubkey>:beta"],
    ["p", "<pubkey>", "assignee"],
    ["due", "1725000000"]
  ],
  "content": "Implement zap-split per NIP-57."
}

A task MAY reference a project without a milestone, or a milestone without its parent project (the milestone event carries the back-reference).

See Also

  • Milestone — Milestone events (kind:30316) and status tracking
  • Task — Task events that target projects and milestones
  • Status — Status and priority tracking
  • Nostr Markdown — Content format

Other authors

No one else has published this topic yet.