Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 68 additions & 3 deletions src/components/DownloadsContent.astro
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
import { type CollectionEntry, getCollection } from "astro:content";
import { type CollectionEntry, getCollection, render } from "astro:content";
import CornerMarks from "~/components/CornerMarks.astro";
import Footer from "~/components/Footer.astro";
import Header from "~/components/Header.astro";
Expand Down Expand Up @@ -43,6 +43,10 @@ const published = (await getCollection("releases"))
const latest = published[0];
const archive = published.slice(1);

// The notes body is English-only, like the blog: written once, in the voice of
// the design docs. The highlights above it are the per-locale summary.
const Notes = latest ? (await render(latest)).Content : null;

const dateFmt = new Intl.DateTimeFormat(copy.dateLocale, {
year: "numeric",
month: "short",
Expand Down Expand Up @@ -185,7 +189,7 @@ const GLYPH: Record<Platform, string> = {
<section class="empty">
<p class="empty-line">{copy.emptyLine}</p>
<p class="empty-sub">{copy.emptySub}</p>
<a class="empty-cta" href={links.repo + "/-/releases"}>
<a class="empty-cta" href={links.repo + "/releases"}>
{copy.emptyCta}
</a>
</section>
Expand All @@ -202,8 +206,19 @@ const GLYPH: Record<Platform, string> = {
))}
</ul>
)}
{Notes && (
<article class="release-notes">
<header class="release-notes-head">
<h2 class="release-notes-title">{copy.notesTitle}</h2>
<span class="release-notes-version mono">v{latest.data.version}</span>
</header>
<div class="prose release-notes-body">
<Notes />
</div>
</article>
)}
<p class="all-releases mono">
<a href={links.repo + "/-/releases"} target="_blank" rel="noopener noreferrer">
<a href={links.repo + "/releases"} target="_blank" rel="noopener noreferrer">
{copy.allReleases}
</a>
</p>
Expand Down Expand Up @@ -483,6 +498,56 @@ const GLYPH: Record<Platform, string> = {
border-radius: 50%;
background: var(--cyan-glow);
}
.release-notes {
margin-top: var(--space-6);
padding-top: var(--space-6);
border-top: 1px solid var(--hairline);
}
.release-notes-head {
display: flex;
align-items: baseline;
gap: var(--space-3);
margin-bottom: var(--space-4);
}
.release-notes-title {
font-size: clamp(1.4rem, 1.3vw + 0.9rem, 1.85rem);
font-weight: 500;
letter-spacing: var(--tracking-tight);
color: var(--paper);
}
.release-notes-version {
font-size: var(--text-mono);
text-transform: uppercase;
letter-spacing: var(--tracking-eyebrow);
color: var(--fog-2);
}
/* Screenshots run wider than the measure so a 1440px capture stays legible;
the text column keeps the prose width. */
.release-notes-body {
max-width: 60rem;
}
.release-notes-body > :global(:not(figure)) {
max-width: 68ch;
}
.release-notes-body :global(figure) {
margin: 2em 0 2.4em;
width: 100%;
}
.release-notes-body :global(figure img) {
display: block;
width: 100%;
height: auto;
border-radius: var(--radius-2);
border: 1px solid var(--hairline-strong);
box-shadow: 0 24px 60px -30px rgba(0, 0, 0, 0.6);
background: var(--bg-edge);
}
.release-notes-body :global(figcaption) {
margin-top: var(--space-3);
font-size: var(--text-sm);
line-height: var(--leading-snug);
color: var(--fog-2);
}
.all-releases a {
font-size: var(--text-mono);
text-transform: uppercase;
Expand Down
12 changes: 6 additions & 6 deletions src/content/releases/0.13.0.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,22 +15,22 @@ highlights:
assets:
- platform: mac
label: Apple silicon
href: https://gitlab.com/api/v4/projects/brainstorm-os%2Fshell/packages/generic/brainstorm/0.13.0/Brainstorm-0.13.0-arm64.dmg
href: https://github.com/brainstorm-os/shell/releases/download/v0.13.0/Brainstorm-0.13.0-arm64.dmg
- platform: mac
label: Intel
href: https://gitlab.com/api/v4/projects/brainstorm-os%2Fshell/packages/generic/brainstorm/0.13.0/Brainstorm-0.13.0.dmg
href: https://github.com/brainstorm-os/shell/releases/download/v0.13.0/Brainstorm-0.13.0.dmg
- platform: windows
label: Installer (.exe)
href: https://gitlab.com/api/v4/projects/brainstorm-os%2Fshell/packages/generic/brainstorm/0.13.0/Brainstorm-Setup-0.13.0.exe
href: https://github.com/brainstorm-os/shell/releases/download/v0.13.0/Brainstorm-Setup-0.13.0.exe
- platform: linux
label: AppImage (x86_64)
href: https://gitlab.com/api/v4/projects/brainstorm-os%2Fshell/packages/generic/brainstorm/0.13.0/Brainstorm-0.13.0-x86_64.AppImage
href: https://github.com/brainstorm-os/shell/releases/download/v0.13.0/Brainstorm-0.13.0-x86_64.AppImage
- platform: linux
label: AppImage (arm64)
href: https://gitlab.com/api/v4/projects/brainstorm-os%2Fshell/packages/generic/brainstorm/0.13.0/Brainstorm-0.13.0-arm64.AppImage
href: https://github.com/brainstorm-os/shell/releases/download/v0.13.0/Brainstorm-0.13.0-arm64.AppImage
- platform: linux
label: Debian (.deb)
href: https://gitlab.com/api/v4/projects/brainstorm-os%2Fshell/packages/generic/brainstorm/0.13.0/Brainstorm-0.13.0-amd64.deb
href: https://github.com/brainstorm-os/shell/releases/download/v0.13.0/Brainstorm-0.13.0-amd64.deb
---

Most products bolt an assistant onto the side. A box in the corner that answers
Expand Down
12 changes: 6 additions & 6 deletions src/content/releases/0.14.0.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,22 +16,22 @@ highlights:
assets:
- platform: mac
label: Apple silicon
href: https://gitlab.com/api/v4/projects/brainstorm-os%2Fshell/packages/generic/brainstorm/0.14.0/Brainstorm-0.14.0-arm64.dmg
href: https://github.com/brainstorm-os/shell/releases/download/v0.14.0/Brainstorm-0.14.0-arm64.dmg
- platform: mac
label: Intel
href: https://gitlab.com/api/v4/projects/brainstorm-os%2Fshell/packages/generic/brainstorm/0.14.0/Brainstorm-0.14.0.dmg
href: https://github.com/brainstorm-os/shell/releases/download/v0.14.0/Brainstorm-0.14.0.dmg
- platform: windows
label: Installer (.exe)
href: https://gitlab.com/api/v4/projects/brainstorm-os%2Fshell/packages/generic/brainstorm/0.14.0/Brainstorm-Setup-0.14.0.exe
href: https://github.com/brainstorm-os/shell/releases/download/v0.14.0/Brainstorm-Setup-0.14.0.exe
- platform: linux
label: AppImage (x86_64)
href: https://gitlab.com/api/v4/projects/brainstorm-os%2Fshell/packages/generic/brainstorm/0.14.0/Brainstorm-0.14.0-x86_64.AppImage
href: https://github.com/brainstorm-os/shell/releases/download/v0.14.0/Brainstorm-0.14.0-x86_64.AppImage
- platform: linux
label: AppImage (arm64)
href: https://gitlab.com/api/v4/projects/brainstorm-os%2Fshell/packages/generic/brainstorm/0.14.0/Brainstorm-0.14.0-arm64.AppImage
href: https://github.com/brainstorm-os/shell/releases/download/v0.14.0/Brainstorm-0.14.0-arm64.AppImage
- platform: linux
label: Debian (.deb)
href: https://gitlab.com/api/v4/projects/brainstorm-os%2Fshell/packages/generic/brainstorm/0.14.0/Brainstorm-0.14.0-amd64.deb
href: https://github.com/brainstorm-os/shell/releases/download/v0.14.0/Brainstorm-0.14.0-amd64.deb
---

The last release added agents and app-to-app actions. This one adds almost no
Expand Down
57 changes: 42 additions & 15 deletions src/content/releases/0.15.0.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,22 +16,22 @@ highlights:
assets:
- platform: mac
label: Apple silicon
href: https://gitlab.com/api/v4/projects/brainstorm-os%2Fshell/packages/generic/brainstorm/0.15.0/Brainstorm-0.15.0-arm64.dmg
href: https://github.com/brainstorm-os/shell/releases/download/v0.15.0/Brainstorm-0.15.0-arm64.dmg
- platform: mac
label: Intel
href: https://gitlab.com/api/v4/projects/brainstorm-os%2Fshell/packages/generic/brainstorm/0.15.0/Brainstorm-0.15.0.dmg
href: https://github.com/brainstorm-os/shell/releases/download/v0.15.0/Brainstorm-0.15.0.dmg
- platform: windows
label: Installer (.exe)
href: https://gitlab.com/api/v4/projects/brainstorm-os%2Fshell/packages/generic/brainstorm/0.15.0/Brainstorm-Setup-0.15.0.exe
href: https://github.com/brainstorm-os/shell/releases/download/v0.15.0/Brainstorm-Setup-0.15.0.exe
- platform: linux
label: AppImage (x86_64)
href: https://gitlab.com/api/v4/projects/brainstorm-os%2Fshell/packages/generic/brainstorm/0.15.0/Brainstorm-0.15.0-x86_64.AppImage
href: https://github.com/brainstorm-os/shell/releases/download/v0.15.0/Brainstorm-0.15.0-x86_64.AppImage
- platform: linux
label: AppImage (arm64)
href: https://gitlab.com/api/v4/projects/brainstorm-os%2Fshell/packages/generic/brainstorm/0.15.0/Brainstorm-0.15.0-arm64.AppImage
href: https://github.com/brainstorm-os/shell/releases/download/v0.15.0/Brainstorm-0.15.0-arm64.AppImage
- platform: linux
label: Debian (.deb)
href: https://gitlab.com/api/v4/projects/brainstorm-os%2Fshell/packages/generic/brainstorm/0.15.0/Brainstorm-0.15.0-amd64.deb
href: https://github.com/brainstorm-os/shell/releases/download/v0.15.0/Brainstorm-0.15.0-amd64.deb
---

The last release was a polish pass. This one is the opposite: forty-eight
Expand All @@ -46,7 +46,10 @@ lists it back under Deliverables without you doing anything. Adding, removing
and deleting keep both sides in step, and if the far object is locked the change
is refused rather than half-applied.

![A project in Database showing the deliverables linked back to it](/screenshots/0.15.0/database-two-way-relations.webp)
<figure>
<img src="/screenshots/0.15.0/database-two-way-relations.webp" alt="A project in Database showing the deliverables linked back to it" loading="lazy" decoding="async" />
<figcaption>A project in Database showing the deliverables linked back to it</figcaption>
</figure>

**A view can live inside the object it belongs to.** An embedded view can filter
on "This object", so one project template shows each project its own tasks.
Expand All @@ -57,14 +60,20 @@ only, and wrap the way you choose. Boards split into swimlanes by a second
property, order groups by how many items they hold, and collapse every group at
once. Galleries pick their cover from a property, the first image, or none.

![A board split into swimlanes by a second property](/screenshots/0.15.0/database-board-swimlanes.webp)
<figure>
<img src="/screenshots/0.15.0/database-board-swimlanes.webp" alt="A board split into swimlanes by a second property" loading="lazy" decoding="async" />
<figcaption>A board split into swimlanes by a second property</figcaption>
</figure>

**Change your mind about a type.** Switch a property between text, number,
checkbox and date with a preview of every value that converts and every one that
would be cleared. Numbers can carry a unit. A property can also hold rich text,
and a chart view draws bars, lines, pies and single numbers over any grouping.

![A chart view drawing a bar chart over a grouped collection](/screenshots/0.15.0/database-chart-view.webp)
<figure>
<img src="/screenshots/0.15.0/database-chart-view.webp" alt="A chart view drawing a bar chart over a grouped collection" loading="lazy" decoding="async" />
<figcaption>A chart view drawing a bar chart over a grouped collection</figcaption>
</figure>

**Work on many rows at once.** Select rows and set a property or add them to a
collection in one go, with a one-step undo. Step through a view from the
Expand All @@ -82,27 +91,39 @@ editor. Images and files already in the vault can be inserted and resized inline
and images now reach HTML and Markdown exports. There is a tabs block, guide
lines on lists, outliner keys inside toggles, and a spell-check language picker.

![A tabs block in Notes with three named tabs](/screenshots/0.15.0/notes-tabs-block.webp)
<figure>
<img src="/screenshots/0.15.0/notes-tabs-block.webp" alt="A tabs block in Notes with three named tabs" loading="lazy" decoding="async" />
<figcaption>A tabs block in Notes with three named tabs</figcaption>
</figure>

## The shell

**Split view.** Alt-click any object, or choose "Open to the side", and work in
two panes with their own apps, divider and shortcuts.

![Two apps side by side in one window](/screenshots/0.15.0/shell-split-view.webp)
<figure>
<img src="/screenshots/0.15.0/shell-split-view.webp" alt="Two apps side by side in one window" loading="lazy" decoding="async" />
<figcaption>Two apps side by side in one window</figcaption>
</figure>

**A history for every object.** Idle edits are captured on their own, an agent
run is one checkpoint, and restoring is a forward edit you can undo. Retention
keeps the newest version of every object no matter how full the history gets.

![The version history panel of a note](/screenshots/0.15.0/notes-version-history.webp)
<figure>
<img src="/screenshots/0.15.0/notes-version-history.webp" alt="The version history panel of a note" loading="lazy" decoding="async" />
<figcaption>The version history panel of a note</figcaption>
</figure>

**Backups that happen without you.** An hour after launch and hourly after that,
the vault writes a backup, keeps a bounded set of restore points, and a restore
only brings back what is missing. Whole-vault Markdown export writes one dated
folder with one file per object and its assets alongside.

![Scheduled backups in Settings with the restore points listed](/screenshots/0.15.0/settings-scheduled-backups.webp)
<figure>
<img src="/screenshots/0.15.0/settings-scheduled-backups.webp" alt="Scheduled backups in Settings with the restore points listed" loading="lazy" decoding="async" />
<figcaption>Scheduled backups in Settings with the restore points listed</figcaption>
</figure>

Also: a startup page, search that shows saved searches and recents before you
type, remembered "don't ask again" on Move-to-Bin prompts, auto-hide sidebars,
Expand All @@ -118,7 +139,10 @@ Each run lists what it changed, and "Undo this run" checks the whole run first
and refuses it whole, with a reason, if anything was edited since. An object an
agent created says so in a read-only row, and that mark cannot be forged.

![An agent conversation listing what the run changed, with Undo this run](/screenshots/0.15.0/agent-run-changes-undo.webp)
<figure>
<img src="/screenshots/0.15.0/agent-run-changes-undo.webp" alt="An agent conversation listing what the run changed, with Undo this run" loading="lazy" decoding="async" />
<figcaption>An agent conversation listing what the run changed, with Undo this run</figcaption>
</figure>

## Chat and collaboration

Expand All @@ -127,7 +151,10 @@ across devices. Pin up to fifty messages per channel, see who is typing, expand
the composer, and show full dates. A `brainstorm://invite` link pre-fills the
share dialog and never grants anything by itself; Viewer is the default role.

![Message search in a Chat channel jumping to a hit](/screenshots/0.15.0/chat-message-search.webp)
<figure>
<img src="/screenshots/0.15.0/chat-message-search.webp" alt="Message search in a Chat channel jumping to a hit" loading="lazy" decoding="async" />
<figcaption>Message search in a Chat channel jumping to a hit</figcaption>
</figure>

## Everywhere else

Expand Down
4 changes: 2 additions & 2 deletions src/content/site.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ export const SITE_URL = "https://getbrainstorm.online";
export const YOUTUBE_VIDEO_ID = "kkjVrnwmZT4";

export const links = {
github: "https://gitlab.com/brainstorm-os",
repo: "https://gitlab.com/brainstorm-os/shell",
github: "https://github.com/brainstorm-os",
repo: "https://github.com/brainstorm-os/shell",
docs: "https://docs.getbrainstorm.online",
// The downloads page lists every release with per-platform builds.
downloads: "/downloads",
Expand Down
5 changes: 5 additions & 0 deletions src/i18n/pages.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@ export interface DownloadsCopy {
platformAria: string;
noBuild: string;
notesAria: string;
/** Heading over the latest release's rendered notes. */
notesTitle: string;
allReleases: string;
emptyLine: string;
emptySub: string;
Expand Down Expand Up @@ -105,6 +107,7 @@ const downloads: Record<Lang, DownloadsCopy> = {
platformAria: "Download by platform",
noBuild: "No build for this platform yet.",
notesAria: "Release notes",
notesTitle: "What's new",
allReleases: "All releases on GitHub",
emptyLine: "No public builds yet.",
emptySub: "Brainstorm builds are published on GitHub — check the releases page for the latest.",
Expand All @@ -127,6 +130,7 @@ const downloads: Record<Lang, DownloadsCopy> = {
platformAria: "Nach Plattform herunterladen",
noBuild: "Noch kein Build für diese Plattform.",
notesAria: "Release-Notes",
notesTitle: "Was ist neu",
allReleases: "Alle Versionen auf GitHub",
emptyLine: "Noch keine öffentlichen Builds.",
emptySub:
Expand All @@ -153,6 +157,7 @@ const downloads: Record<Lang, DownloadsCopy> = {
platformAria: "Télécharger par plateforme",
noBuild: "Pas encore de build pour cette plateforme.",
notesAria: "Notes de version",
notesTitle: "Nouveautés",
allReleases: "Toutes les versions sur GitHub",
emptyLine: "Aucun build public pour l'instant.",
emptySub:
Expand Down
12 changes: 6 additions & 6 deletions src/i18n/ui.ts
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ type UiKey = keyof (typeof ui)["en"];
export const ui = {
en: {
"star.text": "Brainstorm is free and open source — if it's useful to you,",
"star.link": "star it on GitLab",
"star.link": "star it on GitHub",
"nav.overview": "Overview",
"nav.apps": "Apps",
"nav.how": "How it works",
Expand All @@ -104,7 +104,7 @@ export const ui = {
"footer.download": "Download",
"footer.docs": "Docs",
"footer.blog": "Blog",
"footer.github": "GitLab",
"footer.github": "GitHub",
"footer.youtube": "YouTube",
"footer.opensource": "Open source · AGPL-3.0",
"footer.privacy": "Privacy",
Expand All @@ -124,7 +124,7 @@ export const ui = {
},
de: {
"star.text": "Brainstorm ist kostenlos und quelloffen — wenn es dir nützt,",
"star.link": "gib ihm einen Stern auf GitLab",
"star.link": "gib ihm einen Stern auf GitHub",
"nav.overview": "Überblick",
"nav.apps": "Apps",
"nav.how": "So funktioniert's",
Expand All @@ -139,7 +139,7 @@ export const ui = {
"footer.download": "Herunterladen",
"footer.docs": "Doku",
"footer.blog": "Blog",
"footer.github": "GitLab",
"footer.github": "GitHub",
"footer.youtube": "YouTube",
"footer.opensource": "Quelloffen · AGPL-3.0",
"footer.privacy": "Datenschutz",
Expand All @@ -159,7 +159,7 @@ export const ui = {
},
fr: {
"star.text": "Brainstorm est gratuit et open source — s'il vous est utile,",
"star.link": "mettez-lui une étoile sur GitLab",
"star.link": "mettez-lui une étoile sur GitHub",
"nav.overview": "Aperçu",
"nav.apps": "Applications",
"nav.how": "Comment ça marche",
Expand All @@ -174,7 +174,7 @@ export const ui = {
"footer.download": "Télécharger",
"footer.docs": "Docs",
"footer.blog": "Blog",
"footer.github": "GitLab",
"footer.github": "GitHub",
"footer.youtube": "YouTube",
"footer.opensource": "Open source · AGPL-3.0",
"footer.privacy": "Confidentialité",
Expand Down
Loading