> ## Documentation Index
> Fetch the complete documentation index at: https://docs.invaro.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Announcements

> Write, publish, and schedule portal announcements with Discord posting and community interactions

Announcements is a full portal publishing system. Staff with the right permissions can write rich updates in a markdown editor, schedule them for future publishing, post them to Discord with a custom embed, and allow portal members to comment and react.

***

## The Announcements Feed

The main page shows all announcements in reverse-chronological order as a timeline feed. Each card shows the author, tags, status badge, a plain-text preview, and engagement counts for views, comments, and reactions. Pinned announcements always appear at the top and are marked with a pin badge.

Staff members see a stats strip showing total, published, draft, and scheduled counts. Non-staff members only see published announcements.

Use the **search bar** to filter by title, content, or tag. Use the **status tabs** (All, Published, Drafts, Scheduled, Archived) to narrow the view.

***

## Creating an Announcement

Click **New Announcement** in the top-right corner. This opens the announcement form.

### Content Tab

The core writing area:

| Field       | Description                                                                                                                                  |
| ----------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
| **Title**   | Required. Shown as the announcement heading in the feed and on the detail page.                                                              |
| **Content** | Required. Supports Markdown — bold, italic, headings, lists, code blocks, and blockquotes.                                                   |
| **Excerpt** | Optional. A short summary shown in the feed instead of the full content preview. If left blank the feed trims the raw content automatically. |
| **Tags**    | Optional. Type a tag and press Enter or click the + button. Tags appear as pills in the feed and can be searched.                            |

### Settings Tab

| Setting              | Description                                                                                                         |
| -------------------- | ------------------------------------------------------------------------------------------------------------------- |
| **Status**           | Draft, Published, Scheduled, or Archived. Switching to Scheduled activates the publish-at date field.               |
| **Pin announcement** | Pinned announcements appear above all others in the feed regardless of date.                                        |
| **Publish at**       | Set a future date and time to auto-publish. The form automatically sets status to Scheduled when a date is entered. |
| **Auto-archive at**  | Set a date for the announcement to automatically move to Archived status.                                           |
| **Comments**         | Toggle whether portal members can leave comments on this announcement.                                              |
| **Reactions**        | Toggle whether portal members can add emoji reactions.                                                              |

### Discord Tab

Configure an optional Discord post alongside the portal announcement.

<Steps>
  <Step title="Select a channel">
    Under **Channel**, pick the Discord text channel where the message will be posted. If a message has been posted there before, the channel and last-sent timestamp are shown.
  </Step>

  <Step title="Choose a format">
    Select **Plain message** (simple text, no styling) or **Rich embed** (coloured bar, title, fields). The choice affects what appears in the next step.
  </Step>

  <Step title="Add message content">
    Type optional plain text above the embed (or the full message if using plain format). You can reference announcement data using the Discord variables list.
  </Step>

  <Step title="Configure the embed (if using Rich embed)">
    The full embed builder expands. Configure accent colour, title, title URL, description, author, thumbnail, image, footer, timestamp, and up to 25 fields.
  </Step>

  <Step title="Post to Discord">
    Click **Post to Discord** (or **Update Discord message** if already posted). If there are unsaved changes to the announcement, Invaro saves them automatically before posting.
  </Step>
</Steps>

A collapsible **Preview** panel at the bottom of the Discord tab shows a Discord-style render of the message before sending.

#### Discord Variables

| Variable            | Output                                          |
| ------------------- | ----------------------------------------------- |
| `{title}`           | Announcement title                              |
| `{content}`         | Full announcement content                       |
| `{excerpt}`         | Short excerpt                                   |
| `{authorUsername}`  | Username of who created the announcement        |
| `{authorMention}`   | Discord mention of the creator                  |
| `{authorAvatarUrl}` | Avatar URL of the creator                       |
| `{portalName}`      | Name of the portal                              |
| `{serverName}`      | Name of the Discord server                      |
| `{serverIconUrl}`   | Server icon URL                                 |
| `{status}`          | Current status (draft, published, etc.)         |
| `{pinned}`          | Whether the announcement is pinned (true/false) |
| `{date}`            | Published date                                  |
| `{url}`             | Link to the announcement                        |
| `{tags}`            | Comma-separated tags                            |

### Comments Tab

The Comments tab is available after an announcement has been saved (not on new unsaved announcements). It shows all existing comments and a text area to post a new one. Comments can be deleted by hovering over them and clicking the X. If comments are disabled, the tab shows an option to enable them from Settings.

***

## Saving and Publishing

The **Save** button in the top-right saves the current status (draft, scheduled, etc.) without changing it. The dropdown arrow next to Save reveals:

* **Publish** — saves the announcement and sets status to Published immediately (only shown when not already published)
* **Save as preset** — saves the current form settings as a reusable preset

An **Unsaved Changes** bar at the bottom of the page appears whenever there are edits and offers Save and Discard options.

***

## Presets

Presets let you save a set of announcement settings and reuse them on future announcements. When saving a preset you choose which parts to include: title template, content, tags, interaction settings (comments/reactions on/off), and Discord defaults.

**Using a preset** — click **Use Preset** in the top-right corner of the form. Select a preset from the list. The form fields are updated immediately; you can still edit everything before saving.

***

## Managing Announcements

From the feed, hovering over an announcement card reveals action buttons (for users with the right permissions):

| Action        | Permission required                                                                |
| ------------- | ---------------------------------------------------------------------------------- |
| **Edit**      | `CanEdit`                                                                          |
| **Duplicate** | `CanCreate` — opens a new draft pre-filled with the same content, tagged as a copy |
| **Delete**    | `CanDelete`                                                                        |

***

## Access Control

The Announcements page supports granular access via the Permissions system. `CanView` lets staff see all statuses (not just published). `CanCreate` allows creating new announcements and duplicating. `CanEdit` allows editing existing ones. `CanDelete` allows deletion. Portal members without any Announcements permission only see published announcements.
