diff --git a/apps/website2/src/index.tsx b/apps/website2/src/index.tsx
index 790b62ce3..1c8c127e2 100644
--- a/apps/website2/src/index.tsx
+++ b/apps/website2/src/index.tsx
@@ -5,6 +5,7 @@ import { Home } from './pages/Home/index.jsx';
import { NotFound } from './pages/_404.jsx';
import './style.css';
import Footer from './components/Footer.js';
+import Download from './pages/Download/download.js';
export function App() {
return (
@@ -14,6 +15,7 @@ export function App() {
+
diff --git a/apps/website2/src/pages/Download/download.css b/apps/website2/src/pages/Download/download.css
new file mode 100644
index 000000000..1f42bcdc4
--- /dev/null
+++ b/apps/website2/src/pages/Download/download.css
@@ -0,0 +1,40 @@
+.download-card {
+ padding: 1em;
+}
+
+.download-card h3 {
+ color: var(--accent-color);
+ font-size: 1.5em;
+}
+
+.download-options {
+ margin-top: 2em;
+}
+
+.download-options a.recommended {
+ display: block;
+ background: var(--accent-color);
+ padding: 0.5em 1em;
+ border-radius: calc(infinity * 1px);
+ color: var(--foreground-color);
+ margin: 1em 0;
+ text-decoration: none;
+ text-align: center;
+}
+
+.download-options .other-options {
+ display: flex;
+ gap: 0.5em 1em;
+ justify-content: center;
+ flex-wrap: wrap;
+}
+
+.download-desktop .download-card:first-of-type { --accent-color: var(--brand-1); }
+.download-desktop .download-card:nth-of-type(2) { --accent-color: var(--brand-2); }
+.download-desktop .download-card:last-of-type { --accent-color: var(--brand-3); }
+
+.download-server .download-card:first-of-type { --accent-color: var(--brand-1); }
+.download-server {
+ width: 75%;
+ margin: auto;
+}
\ No newline at end of file
diff --git a/apps/website2/src/pages/Download/download.tsx b/apps/website2/src/pages/Download/download.tsx
new file mode 100644
index 000000000..994ff6884
--- /dev/null
+++ b/apps/website2/src/pages/Download/download.tsx
@@ -0,0 +1,51 @@
+import { useState } from "preact/hooks";
+import Card from "../../components/Card";
+import Section from "../../components/Section";
+import { App, Architecture, buildDownloadUrl, downloadMatrix, DownloadMatrixEntry, getArchitecture, Platform } from "../../download-helper";
+import "./download.css";
+
+export default function DownloadPage() {
+ const [ arch, setArch ] = useState(getArchitecture());
+
+ return (
+ <>
+
+
+ {Object.entries(downloadMatrix.desktop).map(entry => )}
+
+
+
+
+
+ {Object.entries(downloadMatrix.server).map(entry => )}
+
+
+ >
+ )
+}
+
+export function DownloadCard({ app, arch, entry: [ platform, entry ] }: { app: App, arch: Architecture, entry: [string, DownloadMatrixEntry] }) {
+ function unwrapText(text: string | Record
) {
+ return (typeof text === "string" ? text : text[arch]);
+ }
+
+ const allDownloads = Object.entries(entry.downloads);
+ const recommendedDownload = allDownloads.find(download => download[1].recommended);
+ const restDownloads = allDownloads.filter(download => !download[1].recommended);
+
+ return (
+
+ {unwrapText(entry.description)}
+
+
+
+ )
+}
diff --git a/apps/website2/src/pages/Home/index.css b/apps/website2/src/pages/Home/index.css
index 7b417fd0a..5bc5bcaef 100644
--- a/apps/website2/src/pages/Home/index.css
+++ b/apps/website2/src/pages/Home/index.css
@@ -99,24 +99,6 @@ section:nth-of-type(2n+1) {
background: linear-gradient(135deg, rgba(228, 123, 25, 0.08), rgba(79, 165, 43, 0.08));
}
-.benefits-container {
- display: grid;
- grid-template-columns: 1fr 1fr 1fr;
- gap: 1em;
-}
-
.benefits-container .card {
padding: 1em;
}
-
-.note-types-container {
- display: grid;
- grid-template-columns: 1fr 1fr 1fr;
- gap: 1em;
-}
-
-.collections-container {
- display: grid;
- grid-template-columns: 1fr 1fr;
- gap: 1em;
-}
\ No newline at end of file
diff --git a/apps/website2/src/pages/Home/index.tsx b/apps/website2/src/pages/Home/index.tsx
index fe2a03814..67d949f03 100644
--- a/apps/website2/src/pages/Home/index.tsx
+++ b/apps/website2/src/pages/Home/index.tsx
@@ -37,7 +37,7 @@ function HeroSection() {
function BenefitsSection() {
return (
-
+
Notes can be arranged hierarchically. There's no need for folders, since each note can contain sub-notes. A single note can be added in multiple places in the hierarchy.
Define relations between notes
or add labels for easy categorization. Using promoted attributes, there's an easy way to
@@ -63,7 +63,7 @@ function BenefitsSection() {
function NoteTypesSection() {
return (
-
+
The notes are edited using a visual (WYSIWYG) editor, with support for tables, images, math expressions, code blocks with syntax highlighting. Quickly format the text using Markdown-like syntax or using slash commands.
Large samples of source code or scripts use a dedicated editor, with syntax highlighting for many programming languages and with various color themes.
Embed multimedia files such as PDFs, images, videos with an in-application preview.
@@ -79,7 +79,7 @@ function NoteTypesSection() {
function CollectionsSection() {
return (
-
+
Organize your personal or professional events using a calendar, with support for all-day and multi-day events. See your events at a glance with the week, month and year views. Easy interaction to add or drag events.
Display and edit information about notes in a tabular structure, with various column types such as text, number, check boxes, date & time, links and colors and support for relations. Optionally, display the notes within a tree hierarchy inside the table.
Organize your tasks or project status into a Kanban board with an easy way to create new items and columns and simply changing their status by dragging across the board.
diff --git a/apps/website2/src/style.css b/apps/website2/src/style.css
index 2b706d586..40f651543 100644
--- a/apps/website2/src/style.css
+++ b/apps/website2/src/style.css
@@ -89,4 +89,16 @@ footer {
.card > .image {
height: 200px;
object-fit: cover;
+}
+
+.grid-3-cols {
+ display: grid;
+ grid-template-columns: 1fr 1fr 1fr;
+ gap: 1em;
+}
+
+.grid-2-cols {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ gap: 1em;
}
\ No newline at end of file