diff --git a/frontend/public/whats-new/audit-log.png b/frontend/public/whats-new/audit-log.png new file mode 100644 index 00000000..ff91aec3 Binary files /dev/null and b/frontend/public/whats-new/audit-log.png differ diff --git a/frontend/public/whats-new/file-explorer.png b/frontend/public/whats-new/file-explorer.png new file mode 100644 index 00000000..b57ae066 Binary files /dev/null and b/frontend/public/whats-new/file-explorer.png differ diff --git a/frontend/public/whats-new/fleet-prune.png b/frontend/public/whats-new/fleet-prune.png new file mode 100644 index 00000000..38780746 Binary files /dev/null and b/frontend/public/whats-new/fleet-prune.png differ diff --git a/frontend/public/whats-new/fleet-secrets.png b/frontend/public/whats-new/fleet-secrets.png new file mode 100644 index 00000000..68863232 Binary files /dev/null and b/frontend/public/whats-new/fleet-secrets.png differ diff --git a/frontend/public/whats-new/ntfy.png b/frontend/public/whats-new/ntfy.png new file mode 100644 index 00000000..16d1ff59 Binary files /dev/null and b/frontend/public/whats-new/ntfy.png differ diff --git a/frontend/public/whats-new/sso-only.png b/frontend/public/whats-new/sso-only.png new file mode 100644 index 00000000..e34c76fc Binary files /dev/null and b/frontend/public/whats-new/sso-only.png differ diff --git a/frontend/src/whats-new/entries.json b/frontend/src/whats-new/entries.json index fe51488c..a3f517de 100644 --- a/frontend/src/whats-new/entries.json +++ b/frontend/src/whats-new/entries.json @@ -1 +1,44 @@ -[] +[ + { + "id": "sso-only-authentication", + "title": "SSO-only authentication mode", + "blurb": "Require every sign-in on this node to go through your SSO provider instead of a local password. Turn it on once your provider is configured and tested.", + "docUrl": "https://docs.sencho.io/features/sso", + "screenshot": "sso-only.png" + }, + { + "id": "fleet-prune-itemized-plans", + "title": "Itemized fleet prune plans", + "blurb": "See exactly what a fleet-wide prune will remove, broken down node by node, before you run it. The destructive action stays locked until every reachable node has returned its dry run.", + "docUrl": "https://docs.sencho.io/features/fleet-actions", + "screenshot": "fleet-prune.png" + }, + { + "id": "audit-log", + "title": "Audit Log", + "blurb": "Every instance ships with an audit log of who did what, and when. Find it under Security & review → Audit.", + "docUrl": "https://docs.sencho.io/features/audit-log", + "screenshot": "audit-log.png" + }, + { + "id": "fleet-secrets", + "title": "Fleet Secrets", + "blurb": "Share encrypted, fleet-wide environment bundles across your nodes without copying env files by hand.", + "docUrl": "https://docs.sencho.io/features/fleet-secrets", + "screenshot": "fleet-secrets.png" + }, + { + "id": "ntfy-notifications", + "title": "ntfy notification channel", + "blurb": "Send Sencho alerts straight to ntfy, alongside the channels already supported. Configure it per node under Settings · Notifications · Channels.", + "docUrl": "https://docs.sencho.io/features/alerts-notifications", + "screenshot": "ntfy.png" + }, + { + "id": "resizable-file-explorer", + "title": "Resizable file explorer", + "blurb": "Drag the divider in the Files tab to give the tree pane more room, or shrink it out of the way. Your preferred width is remembered.", + "docUrl": "https://docs.sencho.io/features/stack-file-explorer", + "screenshot": "file-explorer.png" + } +] diff --git a/frontend/src/whats-new/entries.test.ts b/frontend/src/whats-new/entries.test.ts index 46032758..745a1617 100644 --- a/frontend/src/whats-new/entries.test.ts +++ b/frontend/src/whats-new/entries.test.ts @@ -5,8 +5,7 @@ import { isWhatsNewEntry, WHATS_NEW_CAP } from './types'; // These are authoring guards on the committed data, not tests of behaviour: // they fail the build when a hand-written entry is malformed, duplicated, or // pushes the file past the cap. The loader's own behaviour is covered in -// loader.test.ts. While entries.json is still empty they pass trivially, which -// is expected; they start biting as soon as the first entry lands. +// loader.test.ts. describe('whats-new entries.json', () => { it('contains only valid entries', () => { for (const entry of rawEntries) {