- {features.featureTabs.workspaces.title}
+ Workspaces
- {features.featureTabs.compactMode.title}
+ Compact Mode
- {features.featureTabs.glance.title}
+ Glance
- {features.featureTabs.splitView.title}
+ Split View
@@ -93,45 +82,37 @@ const descriptions = Object.values(features.featureTabs).map(
className="feature"
data-active="true"
>
-
@@ -179,16 +160,17 @@ const descriptions = Object.values(features.featureTabs).map(
-
+
{redirect ?
: null}
diff --git a/src/pages/404.astro b/src/pages/404.astro
deleted file mode 100644
index 0f4e363..0000000
--- a/src/pages/404.astro
+++ /dev/null
@@ -1,5 +0,0 @@
----
-import NotFound from './[...locale]/404.astro'
----
-
-
diff --git a/src/pages/[...locale]/404.astro b/src/pages/[...locale]/404.astro
deleted file mode 100644
index 7ad890f..0000000
--- a/src/pages/[...locale]/404.astro
+++ /dev/null
@@ -1,31 +0,0 @@
----
-import Title from '~/components/Title.astro'
-import Description from '~/components/Description.astro'
-import Button from '~/components/Button.astro'
-import { getLocale, getPath, getUI } from '~/utils/i18n'
-import Layout from '~/layouts/Layout.astro'
-export { getStaticPaths } from '~/utils/i18n'
-
-const locale = getLocale(Astro)
-const getLocalePath = getPath(locale)
-const {
- routes: { notFound },
-} = getUI(locale)
----
-
-
-
- 404
-
- {notFound.title}
-
-
- {notFound.description}
-
-
- {notFound.button}
-
-
-
diff --git a/src/pages/[...locale]/about.astro b/src/pages/[...locale]/about.astro
deleted file mode 100644
index d9a82b0..0000000
--- a/src/pages/[...locale]/about.astro
+++ /dev/null
@@ -1,84 +0,0 @@
----
-import Button from '~/components/Button.astro'
-import Description from '~/components/Description.astro'
-import Layout from '~/layouts/Layout.astro'
-import { getLocale, getUI } from '~/utils/i18n'
-export { getStaticPaths } from '~/utils/i18n'
-
-const locale = getLocale(Astro)
-
-const {
- routes: {
- about,
- },
- layout
-} = getUI(locale)
----
-
-
-
-
- {about.title}
-
- {about.description}
-
- {about.littleHelp}
-
-
-
-
{about.mainTeam.title}
-
- {about.mainTeam.description}
-
-
-
- {Object.entries(about.mainTeam.members).map(([key, member]) => (
-
- {member.link ? (
-
- {member.name}
-
- : {member.description}
- ) : (
- {member.name}
- : {member.description}
- )}
-
- ))}
-
-
-
-
-
-
-
{about.contributors.title}
-
- {about.contributors.description}
-
-
-
-
-
-
-
diff --git a/src/pages/[...locale]/index.astro b/src/pages/[...locale]/index.astro
deleted file mode 100644
index 7bb1e45..0000000
--- a/src/pages/[...locale]/index.astro
+++ /dev/null
@@ -1,41 +0,0 @@
----
-import Layout from '~/layouts/Layout.astro'
-import Hero from '~/components/Hero.astro'
-import Community from '~/components/Community.astro'
-import Features from '~/components/Features.astro'
-import Sponsors from '~/components/Sponsors.astro'
-import { getLocale, getUI } from '~/utils/i18n'
-export { getStaticPaths } from '~/utils/i18n'
-
-const locale = getLocale(Astro)
-
-const { layout } = getUI(locale)
----
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/pages/[...locale]/mods/index.astro b/src/pages/[...locale]/mods/index.astro
deleted file mode 100644
index b804984..0000000
--- a/src/pages/[...locale]/mods/index.astro
+++ /dev/null
@@ -1,40 +0,0 @@
----
-import Description from '~/components/Description.astro'
-import Layout from '~/layouts/Layout.astro'
-import ModsList from '~/components/ModsList'
-import { getAllMods } from '~/mods'
-import { getLocale, getUI } from '~/utils/i18n'
-import { CONSTANT } from '~/constants'
-export { getStaticPaths } from '~/utils/i18n'
-
-const locale = getLocale(Astro)
-
-const {
- routes: { mods },
- layout,
-} = getUI(locale)
-
-const allMods = (await getAllMods()) || []
----
-
-
-
-
-
-
-
-
-
diff --git a/src/pages/[...locale]/privacy-policy.astro b/src/pages/[...locale]/privacy-policy.astro
deleted file mode 100644
index dd552b4..0000000
--- a/src/pages/[...locale]/privacy-policy.astro
+++ /dev/null
@@ -1,201 +0,0 @@
----
-import Title from '~/components/Title.astro'
-import Layout from '~/layouts/Layout.astro'
-import { getLocale, getUI } from '~/utils/i18n'
-export { getStaticPaths } from '~/utils/i18n'
-
-const locale = getLocale(Astro)
-
-const {
- routes: { privacyPolicy },
- layout,
-} = getUI(locale)
----
-
-
-
- {privacyPolicy.title}
- {privacyPolicy.lastUpdated}
-
- {privacyPolicy.sections.introduction.title}
-
- {privacyPolicy.sections.introduction.body}
-
- {privacyPolicy.sections.introduction.summary}
-
-
- {privacyPolicy.sections.noCollect.title}
-
- {privacyPolicy.sections.noCollect.body}
-
- {privacyPolicy.sections.noTelemetry.title}
-
- {privacyPolicy.sections.noTelemetry.body}
- {privacyPolicy.sections.noTelemetry.body2}
-
- {privacyPolicy.sections.noPersonalData.title}
-
- {privacyPolicy.sections.noPersonalData.body}
-
- {privacyPolicy.sections.noThirdParty.title}
-
- {privacyPolicy.sections.noThirdParty.body}
-
- {privacyPolicy.sections.externalConnections.title}
-
- {privacyPolicy.sections.externalConnections.body}
-
- {privacyPolicy.sections.localStorage.title}
-
-
- {privacyPolicy.sections.browsingData.title}
-
- {privacyPolicy.sections.browsingData.body}
-
-
- {privacyPolicy.sections.cookies.title} : {privacyPolicy.sections.cookies.body}
-
-
- {privacyPolicy.sections.cache.title} : {
- privacyPolicy.sections.cache.body
- }
-
-
-
- {privacyPolicy.sections.settings.title}
-
- {privacyPolicy.sections.settings.body}
-
- {privacyPolicy.sections.sync.title}
-
- {privacyPolicy.sections.sync.body}
-
-
- {privacyPolicy.sections.addons.title}
-
- {privacyPolicy.sections.addons.body}
-
- {privacyPolicy.sections.security.title}
-
- {privacyPolicy.sections.security.body}
-
- {privacyPolicy.sections.security.note}
-
-
- {privacyPolicy.sections.control.title}
-
-
- {privacyPolicy.sections.control.deletionTitle}
-
- {privacyPolicy.sections.control.deletionBody}
-
- {privacyPolicy.sections.website.title}
-
- {privacyPolicy.sections.website.body}
-
- {privacyPolicy.sections.website.externalLinksTitle}
-
- {privacyPolicy.sections.website.externalLinksBody}
-
- {privacyPolicy.sections.changes.title}
-
-
- {privacyPolicy.sections.changes.body}
-
-
- {privacyPolicy.sections.otherTelemetry.title}
-
-
- {privacyPolicy.sections.otherTelemetry.body}
-
-
-
- {privacyPolicy.sections.contact.title}
-
-
- {privacyPolicy.sections.contact.body}
-
-
-
-
-
diff --git a/src/pages/[...locale]/release-notes/[...slug].astro b/src/pages/[...locale]/release-notes/[...slug].astro
deleted file mode 100644
index d1be3f9..0000000
--- a/src/pages/[...locale]/release-notes/[...slug].astro
+++ /dev/null
@@ -1,36 +0,0 @@
----
-import { releaseNotes } from '~/release-notes'
-import Layout from '~/layouts/Layout.astro'
-import { getLocale, getUI, getStaticPaths as getI18nPaths } from '~/utils/i18n'
-
-const locale = getLocale(Astro)
-
-const {
- routes: {
- releaseNotes: { slug },
- },
-} = getUI(locale)
-
-export async function getStaticPaths() {
- const i18nPaths = getI18nPaths()
-
- return i18nPaths.flatMap(({ params: { locale } }) => [
- ...releaseNotes.map((release: any) => ({
- params: { slug: release.version, locale },
- props: { ...release },
- })),
- {
- params: { slug: 'latest', locale },
- props: { ...releaseNotes[0] },
- },
- ])
-}
-
-const release = Astro.props
----
-
-
-
- {slug.redirect.replace('{version}', release.version)}
-
-
diff --git a/src/pages/[...locale]/welcome.astro b/src/pages/[...locale]/welcome.astro
deleted file mode 100644
index 0e2e72b..0000000
--- a/src/pages/[...locale]/welcome.astro
+++ /dev/null
@@ -1,25 +0,0 @@
----
-import Layout from '~/layouts/Layout.astro'
-import Features from '~/components/Features.astro'
-import { getLocale, getUI } from '~/utils/i18n'
-export { getStaticPaths } from '~/utils/i18n'
-
-const locale = getLocale(Astro)
-
-const {
- routes: { welcome },
- layout,
-} = getUI(locale)
----
-
-
-
-
-
-
diff --git a/src/pages/about.astro b/src/pages/about.astro
new file mode 100644
index 0000000..e91a4c7
--- /dev/null
+++ b/src/pages/about.astro
@@ -0,0 +1,142 @@
+---
+import Button from '../components/Button.astro'
+import Description from '../components/Description.astro'
+import Title from '../components/Title.astro'
+import Layout from '../layouts/Layout.astro'
+---
+
+
+
+
+ About Us
+
+ We are simply a group of developers and designers who care about your
+ experience on the web. We believe that the internet should be a place
+ where you can explore, learn, and connect without worrying about your
+ data being collected.
+
+ A little help?
+
+
+
+
Main Team
+
+ This list shows the main team members who are working hard to bring
+ you the best browsing experience.
+
+
+
+
+ Mauro B. : Creator, Main Developer
+
+
+ Oscar Gonzalez
+ : Site Reliability Engineer (SRE) and code signing.
+
+
+ Jan Heres
+ : Active contributor and helps with MacOS builds
+
+
+ BrhmDev
+ : Active contributor with great contributions
+
+
+ Canoa
+ : Active contributor, and very active in issue handling and
+ website management
+
+
+ Adam : Branding and design
+
+
+ kristijanribaric : Active contributor
+
+
+ n7itro
+ : Active contributor and release notes writer
+
+
+ Bryan Galdámez
+ : Huge contributor on theme functionalities
+
+
+ Jafeth Garro : Documentation writer
+
+
+ Larvey : AUR maintainer
+
+
+ Daniel García
+ : MacOS certificate and app notarization maintainer
+
+
+
+
+
+
+
+
Contributors
+
+ Here are all the wonderful people that decided to contribute to the
+ project! The first set of images are from the desktop repository, and
+ the second set is from the website repository.
+
+
+
+
+
+
+
diff --git a/src/pages/[...locale]/donate.astro b/src/pages/donate.astro
similarity index 53%
rename from src/pages/[...locale]/donate.astro
rename to src/pages/donate.astro
index cbee1e1..42a953b 100644
--- a/src/pages/[...locale]/donate.astro
+++ b/src/pages/donate.astro
@@ -1,34 +1,32 @@
---
-import { ArrowRight } from 'lucide-astro'
-import Button from '~/components/Button.astro'
-import Description from '~/components/Description.astro'
-import Layout from '~/layouts/Layout.astro'
-import { getLocale, getUI } from '~/utils/i18n'
-export { getStaticPaths } from '~/utils/i18n'
-
-const locale = getLocale(Astro)
-const {
- routes: { donate },
- layout,
-} = getUI(locale)
+import { ArrowRight, ChevronRight } from 'lucide-astro'
+import Button from '../components/Button.astro'
+import Description from '../components/Description.astro'
+import Title from '../components/Title.astro'
+import Layout from '../layouts/Layout.astro'
---
-
+
- {donate.title}
+ Help us build a better browser!
- {donate.description}
+ We are a small team of developers working hard to bring you the best
+ browsing experience. If you like what we do, please consider
+ supporting us.
-
{donate.patreon.title}
+
Patreon
- {donate.patreon.description}
+ Patreon allows you to support us with a monthly donation. You can
+ choose the level of support that works best for you.
-
{donate.koFi.title}
+
Ko-fi
- {donate.koFi.description}
+ Ko-fi allows you to support us with a one-time donation. You can
+ choose the amount that works best for you. Monthly donations are
+ also available.
- {donate.koFi.button}
+ Go to Ko-fi
diff --git a/src/pages/[...locale]/download.astro b/src/pages/download.astro
similarity index 70%
rename from src/pages/[...locale]/download.astro
rename to src/pages/download.astro
index 62c3f2e..841cef5 100644
--- a/src/pages/[...locale]/download.astro
+++ b/src/pages/download.astro
@@ -1,11 +1,11 @@
---
-import Description from '~/components/Description.astro'
-import Layout from '~/layouts/Layout.astro'
-import { getReleasesWithChecksums } from '~/components/download/release-data.astro'
-import PlatformDownload from '~/components/download/PlatformDownload.astro'
-import DownloadScript from '~/components/download/DownloadScript.astro'
-import { getChecksums } from '~/utils/githubChecksums'
-import { getLocale, getUI } from '~/utils/i18n'
+import Description from '../components/Description.astro'
+import Title from '../components/Title.astro'
+import Layout from '../layouts/Layout.astro'
+import { getReleasesWithChecksums } from '../components/download/release-data.astro'
+import PlatformDownload from '../components/download/PlatformDownload.astro'
+import DownloadScript from '../components/download/DownloadScript.astro'
+import { getChecksums } from '../utils/githubChecksums'
import { library, icon } from '@fortawesome/fontawesome-svg-core'
import {
@@ -16,14 +16,6 @@ import {
} from '@fortawesome/free-brands-svg-icons'
import { Lock, ExternalLink } from 'lucide-astro'
-export { getStaticPaths } from '~/utils/i18n'
-
-const locale = getLocale(Astro)
-const {
- routes: { download },
- layout,
-} = getUI(locale)
-
library.add(faWindows, faLinux, faApple, faGithub)
const windowsIcon = icon({ prefix: 'fab', iconName: 'windows' })
const linuxIcon = icon({ prefix: 'fab', iconName: 'linux' })
@@ -32,22 +24,21 @@ const githubIcon = icon({ prefix: 'fab', iconName: 'github' })
const checksums = await getChecksums()
const releases = getReleasesWithChecksums(checksums)
-
-const platformNames = download.platformNames
-const platformDescriptions = download.platformDescriptions
---
-
-
+
+
{download.title} Download Zen
- {download.description}
+ Download Zen Browser for your platform and experience a more mindful
+ internet browsing experience. All downloads include SHA256 checksums
+ for verification.
-
+
+ Twilight Mode: You're
+ currently in Twilight mode, this means you're downloading the latest
+ experimental features and updates.
+
@@ -82,7 +77,7 @@ const platformDescriptions = download.platformDescriptions
>
- {platformNames.mac}
+ macOS
- {platformNames.windows}
+ Windows
- {platformNames.linux}
+ Linux
@@ -114,16 +109,16 @@ const platformDescriptions = download.platformDescriptions
@@ -131,16 +126,16 @@ const platformDescriptions = download.platformDescriptions
-
- {download.additionalResources.title}
+
+ Additional Resources
@@ -150,11 +145,10 @@ const platformDescriptions = download.platformDescriptions
>
-
- {download.additionalResources.sourceCode.title}
-
+
Source Code
- {download.additionalResources.sourceCode.description}
+ Explore Zen Browser's source code on GitHub. Contribute to the
+ project or build your own version.
-
- {download.additionalResources.documentation.title}
-
+
Documentation
- {download.additionalResources.documentation.description}
+ Access comprehensive documentation, guides, and tutorials for
+ Zen Browser.
-
- {download.securityNotice.title}
-
-
+
Verified & Secure Downloads
+
+ All Zen downloads are signed and verified for your security. We
+ recommend downloading directly from our official website or GitHub
+ repository. If your download seems broken or gets flagged by your
+ antivirus, please
+ report it to us .
+
diff --git a/src/pages/[...locale]/feed.xml.ts b/src/pages/feed.xml.ts
similarity index 97%
rename from src/pages/[...locale]/feed.xml.ts
rename to src/pages/feed.xml.ts
index ccd5661..cb10b28 100644
--- a/src/pages/[...locale]/feed.xml.ts
+++ b/src/pages/feed.xml.ts
@@ -1,7 +1,6 @@
import rss, { type RSSOptions } from '@astrojs/rss'
-import { releaseNotes } from '~/release-notes'
-import type { ReleaseNote } from '~/release-notes'
-export { getStaticPaths } from '~/utils/i18n'
+import { releaseNotes } from '../release-notes'
+import type { ReleaseNote } from '../release-notes'
/** The default number of entries to include in the RSS feed. */
const RSS_ENTRY_LIMIT = 20
diff --git a/src/pages/index.astro b/src/pages/index.astro
new file mode 100644
index 0000000..a09e6a0
--- /dev/null
+++ b/src/pages/index.astro
@@ -0,0 +1,31 @@
+---
+import Layout from '../layouts/Layout.astro'
+import Hero from '../components/Hero.astro'
+import Community from '../components/Community.astro'
+import Features from '../components/Features.astro'
+import Sponsors from '../components/Sponsors.astro'
+---
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/[...locale]/mods/[...slug].astro b/src/pages/mods/[...slug].astro
similarity index 61%
rename from src/pages/[...locale]/mods/[...slug].astro
rename to src/pages/mods/[...slug].astro
index 695cb11..d22e624 100644
--- a/src/pages/[...locale]/mods/[...slug].astro
+++ b/src/pages/mods/[...slug].astro
@@ -1,37 +1,19 @@
---
-import { getAllMods, getAuthorLink, getLocalizedDate } from '~/mods'
-import Layout from '~/layouts/Layout.astro'
-import Description from '~/components/Description.astro'
-import Button from '~/components/Button.astro'
-import BackButton from '~/components/BackButton.astro'
+import { getAbsoluteLocaleUrl } from 'astro:i18n'
+import { getAllMods, getAuthorLink, getLocalizedDate } from '../../mods'
+import Layout from '../../layouts/Layout.astro'
+import Title from '../../components/Title.astro'
+import Description from '../../components/Description.astro'
+import Button from '../../components/Button.astro'
+import BackButton from '../../components/BackButton.astro'
import { ArrowRight, Info } from 'lucide-astro'
-import { getUI } from '~/utils/i18n'
-import { getLocales, getLocale } from '~/utils/i18n'
export async function getStaticPaths() {
const mods = await getAllMods()
- return mods.flatMap((mod) => [
- ...getLocales().map((locale) => ({
- params: {
- slug: mod.id,
- locale: locale,
- },
- props: {
- ...mod,
- locale: locale,
- },
- })),
- {
- params: {
- slug: mod.id,
- locale: undefined,
- },
- props: {
- ...mod,
- locale: undefined,
- },
- },
- ])
+ return mods.map((mod) => ({
+ params: { slug: mod.id },
+ props: { ...mod },
+ }))
}
// https://github.com/TeaClientMC/Website/blob/7faacc9f8b2c79c74f711d413b155c84faafc00d/src/pages/news/%5B...slug%5D.astro
@@ -42,19 +24,11 @@ const dates = {
createdAt: getLocalizedDate(mod.createdAt),
updatedAt: getLocalizedDate(mod.updatedAt),
}
-
-const locale = getLocale(Astro)
-
-const {
- routes: {
- mods: { slug },
- },
-} = getUI(locale)
---
@@ -66,7 +40,7 @@ const {
- {slug.alert.description}
+ You need to have Zen Browser installed to install this theme.{' '}
- {slug.alert.button}
+ Download now!
@@ -90,23 +64,18 @@ const {
/>
-
-
+
+ Created by @{mod.author} • v{mod.version}
+
+
Creation date • {dates.createdAt}
{
dates.createdAt !== dates.updatedAt && (
-
+
+ Latest update • {dates.updatedAt}
+
)
}
{
@@ -117,7 +86,7 @@ const {
rel="noopener noreferrer"
class="zen-link"
>
- {slug.visitModHomepage}
+ Visit mod homepage
)
}
@@ -129,7 +98,7 @@ const {
extra={{ 'zen-theme-id': mod.id }}
isPrimary
>
- {slug.installMod}
+ Install Theme 🎉
- {slug.uninstallMod}
+ Uninstall Theme
diff --git a/src/pages/mods/index.astro b/src/pages/mods/index.astro
new file mode 100644
index 0000000..71b2d3e
--- /dev/null
+++ b/src/pages/mods/index.astro
@@ -0,0 +1,30 @@
+---
+import Description from '../../components/Description.astro'
+import Title from '../../components/Title.astro'
+import Layout from '../../layouts/Layout.astro'
+import ModsList from '../../components/ModsList'
+import { getAllMods } from '../../mods'
+
+const mods = (await getAllMods()) || []
+---
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/privacy-policy.astro b/src/pages/privacy-policy.astro
new file mode 100644
index 0000000..e54a57b
--- /dev/null
+++ b/src/pages/privacy-policy.astro
@@ -0,0 +1,256 @@
+---
+import Title from '../components/Title.astro'
+import Layout from '../layouts/Layout.astro'
+---
+
+
+
+ Privacy Policy
+ Last updated: 2025-02-5
+ Introduction
+
+ Welcome to Zen Browser! Your privacy is our priority. This Privacy Policy
+ outlines the types of personal information we collect, how we use it, and
+ the steps we take to protect your data when you use Zen Browser.
+
+
+ We don't sell data - We don't collect data - We don't track you
+
+ 1. Information We Do Not Collect
+
+ Zen Browser is designed with privacy in mind. We do not collect, store, or
+ share any of your personal data. Here’s what that means:
+
+
+ 1.1. No Telemetry
+
+ We do not collect any telemetry data or crash reports.
+
+ Zen Browser has stripped out telemetry built into Mozilla Firefox. We have
+ removed all telemetry data collection and crash reports.
+
+
+ 1.2. No Personal Data Collection
+
+
+ Zen Browser does not collect any personal information such as your IP
+ address, browsing history, search queries, or form data.
+
+
+ 1.3. No Third-Party Tracking
+
+
+ We do not allow third-party trackers or analytics tools to operate within
+ Zen Browser. Your browsing activity remains entirely private and is not
+ shared with any third party. Mozilla is not considered a third party as it
+ is the base of Zen Browser.
+
+
+ 1.4. External connections made at startup
+
+
+ Zen Browser may make external connections at startup to check for updates
+ and ensure the browser is up to date on plugins, addons, check for
+ connectivity and Geolocation/push notifications services in order to
+ comply with web standards. We, at Zen, do not collect any data from these
+ connections, but they may be logged by third-party services or websites
+ you visit. These connections are necessary for the proper functioning of
+ the browser and are not used for tracking or profiling purposes. They can
+ be disabled through the browser flags (about:config).
+
+ 2. Information Stored Locally on Your Device
+
+ 2.1. Browsing Data
+
+
+ Zen Browser stores certain data locally on your device to enhance your
+ browsing experience. This includes:
+
+
+
+ Cookies : Cookies are stored locally
+ on your device and are not shared with Zen Browser or any third party.
+ You have full control over the management of cookies through the
+ browser’s settings.
+
+
+ Cache and Temporary Files : Zen
+ Browser may store cache files and other temporary data locally to
+ improve performance. These files can be cleared at any time through the
+ browser’s settings.
+
+
+
+ 2.2. Settings and Preferences
+
+
+ Any customizations, settings, and preferences you make within Zen Browser
+ are stored locally on your device. We do not have access to or control
+ over this data.
+
+ 3. Sync Feature
+
+ Zen Browser offers a "Sync" feature, which is implemented using
+ Mozilla Firefox's Sync feature. This feature allows you to synchronize
+ your bookmarks, history, passwords, and other data across multiple
+ devices. For this feature to work, your data is encrypted and stored on
+ Mozilla’s servers and is treated in accordance with their Privacy Policy.
+ We, at Zen, cannot view any of this data.
+
+
+ 4. Add-ons and "Mods"
+
+ You can install Add-ons from addons.mozilla.org. Zen Browser periodically
+ checks for updates to these Add-ons.
+
+ You can also install "Mods" from zen-browser.app/mods. These Mods
+ are hosted by our services and follow the same privacy policy our website.
+ We do not collect any data from these Mods, they are purely static content
+ that is downloaded to your device.
+
+ 5. Data Security
+
+ Although Zen Browser does not collect your data, we are committed to
+ protecting the information that is stored locally on your device and, if
+ you use the Sync feature, the encrypted data stored on Mozilla's
+ servers. We recommend that you use secure passwords, enable device
+ encryption, and regularly update your software to ensure your data remains
+ safe.
+
+
+
+ Note that most of the security measures are taken care by Mozilla
+ Firefox.
+
+
+ 6. Your Control
+
+ 6.1. Data Deletion
+
+
+ You have full control over all data stored locally on your device by Zen
+ Browser. You can clear your browsing data, cookies, and cache at any time
+ using the browser’s settings.
+
+ 7. Our Website and Services
+
+ Zen Browser's website and services do not use any third-party analytics,
+ tracking, or CDN services. We do not collect any personal information from
+ users visiting our website. The website is hosted on Cloudflare but with
+ analytics and tracking disabled, Cloudflare may collect some analytics
+ data from HTTP requests in order to provide security and performance
+ improvements. However, this data is not linked to any personal information
+ and is not used for tracking purposes.
+
+
+ 7.1. External links
+
+
+ Zen Browser may contain links to external websites or services that are
+ not owned or operated by us. We are not responsible for the content or
+ privacy practices of these sites. We recommend that you review the privacy
+ policies of these sites before providing them with any personal
+ information.
+
+ 8. Changes to This Privacy Policy
+
+ We may update this Privacy Policy from time to time to reflect changes in
+ our practices or legal requirements. We will notify you of any significant
+ changes by updating the effective date at the top of this policy.
+ Continued use of Zen Browser after such changes constitutes your
+ acceptance of the new terms.
+
+ 9. Other telemetry done by Mozilla Firefox
+
+ We try to disable all telemetry data collection in Zen Browser. But, we
+ may have missed some. Check the below links for more information.
+
+
+ 10. Contact Us
+
+ If you have any questions or concerns about this Privacy Policy or Zen
+ Browser, please contact us at:
+
+
+
+
+
diff --git a/src/pages/release-notes/[...slug].astro b/src/pages/release-notes/[...slug].astro
new file mode 100644
index 0000000..2c66131
--- /dev/null
+++ b/src/pages/release-notes/[...slug].astro
@@ -0,0 +1,25 @@
+---
+import { releaseNotes } from '../../release-notes'
+import Layout from '../../layouts/Layout.astro'
+
+export async function getStaticPaths() {
+ return [
+ ...releaseNotes.map((release: any) => ({
+ params: { slug: release.version },
+ props: { ...release },
+ })),
+ {
+ params: { slug: 'latest' },
+ props: { ...releaseNotes[0] },
+ },
+ ]
+}
+
+const release = Astro.props
+---
+
+
+
+ Redirecting to release notes for version {release.version}...
+
+
diff --git a/src/pages/[...locale]/release-notes/index.astro b/src/pages/release-notes/index.astro
similarity index 77%
rename from src/pages/[...locale]/release-notes/index.astro
rename to src/pages/release-notes/index.astro
index a51c96a..5017e26 100644
--- a/src/pages/[...locale]/release-notes/index.astro
+++ b/src/pages/release-notes/index.astro
@@ -1,26 +1,14 @@
---
-import Layout from '~/layouts/Layout.astro'
-import ReleaseNoteItem from '~/components/ReleaseNoteItem.astro'
-import {
- releaseNotes as releaseNotesData,
- releaseNotesTwilight,
-} from '~/release-notes'
-import Description from '~/components/Description.astro'
-import Button from '~/components/Button.astro'
+import Layout from '../../layouts/Layout.astro'
+import ReleaseNoteItem from '../../components/ReleaseNoteItem.astro'
+import { releaseNotes, releaseNotesTwilight } from '../../release-notes'
+import Description from '../../components/Description.astro'
+import Button from '../../components/Button.astro'
import { Modal, ModalBody, ModalHeader } from 'free-astro-components'
import { ArrowUp } from 'lucide-astro'
-import { getLocale, getUI } from '~/utils/i18n'
-export { getStaticPaths } from '~/utils/i18n'
-
-const locale = getLocale(Astro)
-
-const {
- routes: { releaseNotes },
- layout,
-} = getUI(locale)
---
-
+
@@ -29,24 +17,26 @@ const {
class="py-42 flex min-h-screen flex-col justify-center px-10 lg:px-10 xl:px-10 2xl:w-3/5"
>
Release Notes
-
+
+ Stay up to date with the latest changes to Zen Browser! Since the first release till {releaseNotes[0].version} , we've been working hard to make Zen Browser the best it can be.
+ Thanks everyone for your feedback! ❤️
+
- {releaseNotes.list.support}
+ Give us some support!
- {releaseNotes.list.expandAll}
+ Expand all
- {releaseNotes.list.navigateToVersion}
+ Navigate to version...
{
@@ -55,25 +45,29 @@ const {
) : null
}
- {releaseNotesData.map((notes: any) => )}
+ {releaseNotes.map((notes: any) => )}
-
+
- {releaseNotes.backToTop}
-
+ Back to the top
- {releaseNotes.chooseVersion}
+ Choose version
{
- releaseNotesData.map((note) => (
+ releaseNotes.map((note) => (
+
+
+
+
diff --git a/src/pages/[...locale]/whatsnew.astro b/src/pages/whatsnew.astro
similarity index 62%
rename from src/pages/[...locale]/whatsnew.astro
rename to src/pages/whatsnew.astro
index b335e85..2cde27b 100644
--- a/src/pages/[...locale]/whatsnew.astro
+++ b/src/pages/whatsnew.astro
@@ -1,26 +1,18 @@
---
import { ArrowRight } from 'lucide-astro'
-import Button from '~/components/Button.astro'
-import Description from '~/components/Description.astro'
-import SocialMediaStrip from '~/components/SocialMediaStrip.astro'
-import Layout from '~/layouts/Layout.astro'
+import Button from '../components/Button.astro'
+import Description from '../components/Description.astro'
+import SocialMediaStrip from '../components/SocialMediaStrip.astro'
+import Layout from '../layouts/Layout.astro'
-import { releaseNotes } from '~/release-notes'
-import whatsNewText from '~/release-notes/whats-new.json'
-import Video from '~/components/Video.astro'
-import { getLocale, getUI } from '~/utils/i18n'
-import whatsNewVideo from '~/assets/whats-new.mp4'
-export { getStaticPaths } from '~/utils/i18n'
+import { releaseNotes } from '../release-notes'
+import whatsNewText from '../release-notes/whats-new.json'
+import Video from '../components/Video.astro'
+
+import whatsNewVideo from '../assets/whats-new.mp4'
const latestVersion = releaseNotes[0]
-const locale = getLocale(Astro)
-
-const {
- routes: { whatsNew },
- layout,
-} = getUI(locale)
-
// Just redirect to the release notes if we are in a patch version
if (
latestVersion.version.split('.').length > 2 &&
@@ -30,24 +22,14 @@ if (
}
---
-
+
{
- whatsNew.title.replace(
- '{latestVersion.version}',
- latestVersion.version
- )
- } What's New in {latestVersion.version}!
{latestVersion.date}
@@ -61,14 +43,14 @@ if (
>
{whatsNew.reportIssue} Report an issue
{whatsNew.joinDiscord} Join our Discord
@@ -79,7 +61,7 @@ if (
isPrimary
class="flex w-fit items-center gap-2"
>
-
{whatsNew.readFullReleaseNotes}
+
Read the full release notes
diff --git a/src/utils/i18n.ts b/src/utils/i18n.ts
deleted file mode 100644
index c184ac3..0000000
--- a/src/utils/i18n.ts
+++ /dev/null
@@ -1,81 +0,0 @@
-import type { AstroGlobal, GetStaticPaths } from 'astro'
-import { CONSTANT } from '~/constants'
-import UI_EN from '~/i18n/en.json'
-
-export type Locale = (typeof locales)[number]
-
-export const getPath = (locale?: Locale) => (path: string) => {
- if (locale && !path.startsWith(`/${locale}`)) {
- return `/${locale}${path.startsWith('/') ? '' : '/'}${path}`
- }
- return path
-}
-
-export const getLocale = (Astro: AstroGlobal) => {
- if (Astro.params.locale) {
- return Astro.params.locale as Locale
- }
-}
-
-export const locales = CONSTANT.I18N.LOCALES.map(({ value }) => value)
-
-export const otherLocales = CONSTANT.I18N.LOCALES.map(
- ({ value }) => value,
-).filter((locale) => locale !== CONSTANT.I18N.DEFAULT_LOCALE)
-
-export type UI = typeof UI_EN
-
-export const ui = { en: UI_EN }
-
-export const getUI = (locale?: Locale | string): UI => {
- const validLocale = locales.includes(locale as Locale)
- ? locale
- : CONSTANT.I18N.DEFAULT_LOCALE
- const defaultUI = ui[CONSTANT.I18N.DEFAULT_LOCALE]
- const localeUI = ui[validLocale as Locale]
-
- function deepMerge
(defaultObj: T, overrideObj: Partial): T {
- if (typeof defaultObj !== 'object' || defaultObj === null)
- return (overrideObj ?? defaultObj) as T
- if (typeof overrideObj !== 'object' || overrideObj === null)
- return (overrideObj ?? defaultObj) as T
- const result: any = Array.isArray(defaultObj)
- ? [...defaultObj]
- : { ...defaultObj }
- for (const key in defaultObj) {
- if (Object.prototype.hasOwnProperty.call(defaultObj, key)) {
- result[key] = deepMerge(
- (defaultObj as any)[key],
- (overrideObj as any)?.[key],
- )
- }
- }
- for (const key in overrideObj) {
- if (!(key in defaultObj)) {
- result[key] = (overrideObj as any)[key]
- }
- }
- return result as T
- }
-
- return deepMerge(defaultUI, localeUI)
-}
-
-export const getStaticPaths = (() => {
- return [
- {
- params: { locale: undefined },
- props: { locale: CONSTANT.I18N.DEFAULT_LOCALE },
- },
- ...CONSTANT.I18N.LOCALES.map(({ value }) => ({
- params: { locale: value },
- props: {
- locale: value,
- },
- })),
- ]
-}) satisfies GetStaticPaths
-
-export const getLocales = () => {
- return [...locales, ...otherLocales]
-}
diff --git a/tsconfig.json b/tsconfig.json
index 2cc0867..e43d02f 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -2,12 +2,6 @@
"extends": "astro/tsconfigs/strict",
"compilerOptions": {
"jsx": "react-jsx",
- "jsxImportSource": "preact",
- "baseUrl": ".",
- "paths": {
- "~/*": [
- "./src/*"
- ]
- }
+ "jsxImportSource": "preact"
}
-}
\ No newline at end of file
+}