mirror of
https://github.com/spoopyghosty0/frameport.git
synced 2026-10-23 08:02:38 +02:00
Source of truth: announcements/current.md on main (front matter: id, title, date, optional image/button/expires; Markdown body), read from raw GitHub every 6 h like the catalog, so a push reaches users without a release. Ships switched off (active: false). Shown only to people who used FramePort before the announcement's date, never on a first start; any close (X, click outside, Escape) dismisses that id for good, and a new announcement = a new id. Centred over the content area, right of the sidebar. announcements/README.md explains the file; ui_smoke.py --announcement renders it.
Announcements
current.md is the one announcement FramePort shows as a pop-up in the app. Edit it on main: the app reads it
from GitHub main (raw.githubusercontent.com) at most every 6 hours, so a push reaches everyone without a release.
Who sees it
- Only people who already used FramePort before the announcement's
date. A new install never shows one, and nor does an announcement published before FramePort was installed. - Once. Closing it in any way (the X, a click outside it, Escape, or its button) dismisses it for good. The app
remembers dismissals in its settings (
announce.dismissed). - A new announcement = a new
id. Fixing a typo with the sameiddoesn't show it again to anyone who closed it. A newidshows to everyone who used FramePort before itsdate, whether they closed the earlier one or not.
The file
---
active: true # false = nothing is shown (the fields are still checked)
id: meetup-2026-11 # letters, digits, . _ - — change it for every new announcement
title: Steam Frame meetup on Discord # required
date: 2026-11-02T18:00:00Z # required: when it was published (UTC; a bare date = midnight UTC)
image: announcements/meetup.png # optional: a file in this folder, or an https URL (PNG, JPEG, WebP, GIF; ≤ 5 MiB)
image_alt: The meetup poster # optional: what the picture shows (screen readers)
button: Join the meetup # optional: an action button, with url
url: https://example.com/meetup
expires: 2026-11-30 # optional: not shown after this day (UTC, inclusive)
---
The body, in Markdown: **bold**, *italic*, `code`, [links](https://frameport.app/), lists, headings.
The body is Markdown (no HTML). A date in the future works as a schedule: nobody sees it before then.
Images look best at about 2:1 (e.g. 1200×600). The pop-up is 600 px wide and shows between 140 and 320 px of the picture's height.
pytest tests/test_announcements.py checks this file, so a broken announcement fails CI instead of silently showing
nothing.
To turn announcements off for testing: FRAMEPORT_NO_ANNOUNCEMENTS=1.