├── .gitattributes ├── .npmrc ├── public ├── plink.mp4 ├── assets │ ├── globe.png │ ├── locked.png │ ├── oneko.gif │ ├── rocket.png │ ├── shiggy.gif │ ├── favicon.png │ ├── logo-nav.png │ ├── package.png │ ├── light-bulb.png │ ├── oneko-jump.png │ ├── chrome-button.png │ ├── firefox-button.webp │ ├── hammer-and-wrench.png │ ├── logo-nav-oneko-padding.png │ └── screenshot-placeholder.png ├── robots.txt ├── fonts │ ├── Inter.var-subset.woff2 │ └── Minecraft-Regular.woff └── favicon.svg ├── src ├── env.d.ts ├── pages │ ├── github.astro │ ├── install.astro │ ├── support.astro │ ├── discord.astro │ ├── plugins.json.astro │ ├── docs │ │ ├── plugin-requests.astro │ │ └── index.astro │ ├── faq.json.ts │ ├── plugins │ │ ├── [plugin].astro │ │ └── index.astro │ ├── download.astro │ ├── cloud │ │ ├── index.astro │ │ ├── privacy.astro │ │ └── gdpr.astro │ ├── 404.astro │ ├── releases │ │ └── [repo].ts │ ├── faq.astro │ └── index.astro ├── components │ ├── pages │ │ ├── cloud │ │ │ └── privacy │ │ │ │ ├── Usage.astro │ │ │ │ ├── sections.astro │ │ │ │ ├── Changes.astro │ │ │ │ ├── DataRetention.astro │ │ │ │ ├── InfoStored.astro │ │ │ │ └── Intro.astro │ │ ├── download │ │ │ ├── MacTab.astro │ │ │ ├── Tab.astro │ │ │ ├── WindowsTab.astro │ │ │ ├── LinuxTab.astro │ │ │ ├── BrowserTab.astro │ │ │ └── index.svelte │ │ └── plugins │ │ │ └── Plugins.svelte │ ├── Code.astro │ ├── AutoSizeGrid.astro │ ├── Card.astro │ ├── LinkButton.astro │ ├── ThemeToggle.svelte │ ├── NavBar.astro │ └── Footer.astro ├── content │ ├── faq │ │ ├── 7_settings.md │ │ ├── 1_installing.md │ │ ├── 3_web_support.md │ │ ├── 5_other_mods_plugins.md │ │ ├── 8_rtc_connecting.md │ │ ├── 2_not_working.md │ │ ├── 10_devtools_logout.md │ │ ├── 9-themes.md │ │ ├── 6_tos.md │ │ └── 4_mobile.md │ └── config.ts ├── scripts │ ├── collections.ts │ ├── data.ts │ ├── cache.ts │ ├── types.ts │ ├── text.ts │ └── constants.ts ├── styles │ └── prose.css └── layouts │ └── Layout.astro ├── .vscode ├── extensions.json ├── launch.json └── settings.json ├── svelte.config.js ├── .prettierrc.yaml ├── README.md ├── .gitignore ├── tsconfig.json ├── package.json ├── astro.config.mjs └── LICENSE /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto eol=lf 2 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | strict-peer-dependencies=false 2 | -------------------------------------------------------------------------------- /public/plink.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vmfunc/vencord-web/main/public/plink.mp4 -------------------------------------------------------------------------------- /public/assets/globe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vmfunc/vencord-web/main/public/assets/globe.png -------------------------------------------------------------------------------- /public/assets/locked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vmfunc/vencord-web/main/public/assets/locked.png -------------------------------------------------------------------------------- /public/assets/oneko.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vmfunc/vencord-web/main/public/assets/oneko.gif -------------------------------------------------------------------------------- /public/assets/rocket.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vmfunc/vencord-web/main/public/assets/rocket.png -------------------------------------------------------------------------------- /public/assets/shiggy.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vmfunc/vencord-web/main/public/assets/shiggy.gif -------------------------------------------------------------------------------- /public/assets/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vmfunc/vencord-web/main/public/assets/favicon.png -------------------------------------------------------------------------------- /public/assets/logo-nav.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vmfunc/vencord-web/main/public/assets/logo-nav.png -------------------------------------------------------------------------------- /public/assets/package.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vmfunc/vencord-web/main/public/assets/package.png -------------------------------------------------------------------------------- /src/env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | -------------------------------------------------------------------------------- /public/assets/light-bulb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vmfunc/vencord-web/main/public/assets/light-bulb.png -------------------------------------------------------------------------------- /public/assets/oneko-jump.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vmfunc/vencord-web/main/public/assets/oneko-jump.png -------------------------------------------------------------------------------- /public/assets/chrome-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vmfunc/vencord-web/main/public/assets/chrome-button.png -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Allow: / 3 | 4 | Sitemap: https://vencord.vendicated.dev/sitemap-index.xml 5 | -------------------------------------------------------------------------------- /public/assets/firefox-button.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vmfunc/vencord-web/main/public/assets/firefox-button.webp -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": ["astro-build.astro-vscode"], 3 | "unwantedRecommendations": [] 4 | } 5 | -------------------------------------------------------------------------------- /public/assets/hammer-and-wrench.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vmfunc/vencord-web/main/public/assets/hammer-and-wrench.png -------------------------------------------------------------------------------- /public/fonts/Inter.var-subset.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vmfunc/vencord-web/main/public/fonts/Inter.var-subset.woff2 -------------------------------------------------------------------------------- /public/fonts/Minecraft-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vmfunc/vencord-web/main/public/fonts/Minecraft-Regular.woff -------------------------------------------------------------------------------- /public/assets/logo-nav-oneko-padding.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vmfunc/vencord-web/main/public/assets/logo-nav-oneko-padding.png -------------------------------------------------------------------------------- /public/assets/screenshot-placeholder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vmfunc/vencord-web/main/public/assets/screenshot-placeholder.png -------------------------------------------------------------------------------- /svelte.config.js: -------------------------------------------------------------------------------- 1 | import { vitePreprocess } from '@astrojs/svelte'; 2 | 3 | export default { 4 | preprocess: vitePreprocess(), 5 | }; 6 | -------------------------------------------------------------------------------- /.prettierrc.yaml: -------------------------------------------------------------------------------- 1 | arrowParens: avoid 2 | endOfLine: auto 3 | useTabs: false 4 | tabWidth: 4 5 | trailingComma: es5 6 | semi: true 7 | printWidth: 80 8 | -------------------------------------------------------------------------------- /src/pages/github.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { GITHUB_URL, StatusCodes } from "scripts/constants"; 3 | 4 | return Astro.redirect(GITHUB_URL, StatusCodes.Found); 5 | --- 6 | -------------------------------------------------------------------------------- /src/pages/install.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { StatusCodes } from "scripts/constants"; 3 | 4 | return Astro.redirect("/download", StatusCodes.MovedPermanently); 5 | --- 6 | -------------------------------------------------------------------------------- /src/pages/support.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { SPONSOR_URL, StatusCodes } from "scripts/constants"; 3 | 4 | return Astro.redirect(SPONSOR_URL, StatusCodes.Found); 5 | --- 6 | -------------------------------------------------------------------------------- /src/pages/discord.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { DISCORD_INVITE, StatusCodes } from "scripts/constants"; 3 | 4 | return Astro.redirect(DISCORD_INVITE, StatusCodes.Found); 5 | --- 6 | -------------------------------------------------------------------------------- /src/pages/plugins.json.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { PLUGINS_JSON_URL, StatusCodes } from "scripts/constants"; 3 | 4 | return Astro.redirect(PLUGINS_JSON_URL, StatusCodes.Found); 5 | --- 6 | -------------------------------------------------------------------------------- /src/components/pages/cloud/privacy/Usage.astro: -------------------------------------------------------------------------------- 1 |

2 | We will only use your data for the aforementioned purposes. We will never 3 | share your data with any third parties, unless we are required to do so by 4 | law. 5 |

6 | -------------------------------------------------------------------------------- /src/pages/docs/plugin-requests.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { StatusCodes } from "scripts/constants"; 3 | 4 | return Astro.redirect( 5 | "https://github.com/Vendicated/Vencord/discussions/categories/ideas", 6 | StatusCodes.Found 7 | ); 8 | --- 9 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.2.0", 3 | "configurations": [ 4 | { 5 | "command": "./node_modules/.bin/astro dev", 6 | "name": "Development server", 7 | "request": "launch", 8 | "type": "node-terminal" 9 | } 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /src/content/faq/7_settings.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: How do I migrate my Vencord Settings from Canary to Stable (or vice versa)? 3 | tags: settings, migrate 4 | --- 5 | 6 | Settings are already shared across all Discord instances on the same PC so you can just switch and they will be kept! 7 | -------------------------------------------------------------------------------- /src/content/faq/1_installing.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: How do I install Vencord? 3 | tags: installation, install, download 4 | --- 5 | 6 | We provide a convenient graphical installer you can use. Or you can just grab Vencord from the Chrome & Firefox webstores. 7 | 8 | Visit our [download page](/download) to find out more! 9 | -------------------------------------------------------------------------------- /src/content/faq/3_web_support.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Can I use this on the web version of Discord? 3 | tags: browser, web, firefox, chrome, extension, userscript 4 | --- 5 | 6 | Yes! We provide extensions for Firefox & Chromium based browsers and a UserScript build. 7 | 8 | See our [download page](/download) for more info! 9 | -------------------------------------------------------------------------------- /src/components/Code.astro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 13 | -------------------------------------------------------------------------------- /src/scripts/collections.ts: -------------------------------------------------------------------------------- 1 | import { getCollection } from "astro:content"; 2 | 3 | export async function getSortedFaq() { 4 | const faq = await getCollection("faq"); 5 | 6 | // uses the fact that parseInt("11_some_title.md") => 11 7 | faq.sort((a, b) => parseInt(a.id) - parseInt(b.id)); 8 | 9 | return faq; 10 | } 11 | -------------------------------------------------------------------------------- /src/content/faq/5_other_mods_plugins.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: How do I install BetterDiscord / Replugged / [insert other mod here] plugins? 3 | tags: betterdiscord, replugged, powercord, shelter, plugins, bd, rp 4 | --- 5 | 6 | You can't. 7 | 8 | Chances are, it's already a Vencord plugin! Or if it isn't, you can open a [plugin request](/docs/plugin-requests) 9 | -------------------------------------------------------------------------------- /src/components/pages/cloud/privacy/sections.astro: -------------------------------------------------------------------------------- 1 | --- 2 | export { default as Changes } from "./Changes.astro"; 3 | export { default as DataRetention } from "./DataRetention.astro"; 4 | export { default as InfoStored } from "./InfoStored.astro"; 5 | export { default as Intro } from "./Intro.astro"; 6 | export { default as Usage } from "./Usage.astro"; 7 | --- 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Vencord Website 2 | 3 | https://vencord.dev 4 | 5 | ## Get a dev environment started: 6 | 7 | 1. Clone this repository and install the required packages: 8 | 9 | ```sh 10 | git clone https://github.com/hytracer/vencord-web.git 11 | cd vencord-web 12 | npm i 13 | ``` 14 | 15 | 2. Start a dev server: 16 | 17 | ```sh 18 | npm run dev 19 | ``` 20 | -------------------------------------------------------------------------------- /src/scripts/data.ts: -------------------------------------------------------------------------------- 1 | import { PLUGINS_JSON_URL } from "./constants"; 2 | import { PluginData } from "./types"; 3 | 4 | export async function fetchPlugins() { 5 | const res = await fetch(PLUGINS_JSON_URL); 6 | 7 | if (!res.ok) throw new Error("Failed to fetch plugins.json: " + res.status); 8 | 9 | return res.json() as Promise; 10 | } 11 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # build output 2 | dist/ 3 | .vercel 4 | 5 | # generated types 6 | .astro/ 7 | 8 | # dependencies 9 | node_modules/ 10 | 11 | # logs 12 | npm-debug.log* 13 | yarn-debug.log* 14 | yarn-error.log* 15 | pnpm-debug.log* 16 | 17 | # environment variables 18 | .env 19 | .env.production 20 | 21 | # macOS-specific files 22 | .DS_Store 23 | 24 | package-lock.json 25 | ``` -------------------------------------------------------------------------------- /src/content/config.ts: -------------------------------------------------------------------------------- 1 | import { defineCollection, z } from "astro:content"; 2 | 3 | const faq = defineCollection({ 4 | schema: z.object({ 5 | title: z.string(), 6 | tags: z 7 | .string() 8 | .transform(value => value.split(",").map(s => s.trim())), 9 | }), 10 | }); 11 | 12 | export const collections = { 13 | faq, 14 | }; 15 | -------------------------------------------------------------------------------- /src/components/pages/cloud/privacy/Changes.astro: -------------------------------------------------------------------------------- 1 |

2 | We will update this Privacy Policy if necessary, for example if we start 3 | storing more data as part of a new Service. If we do so, you will be 4 | notified via the announcements channel on our Discord Server. The last 5 | update date will also always be present at the very top of this Privacy 6 | Policy. 7 |

8 | -------------------------------------------------------------------------------- /src/scripts/cache.ts: -------------------------------------------------------------------------------- 1 | export const SECONDS = 1; 2 | export const MINUTES = 60 * SECONDS; 3 | export const HOURS = 60 * MINUTES; 4 | export const DAYS = 24 * HOURS; 5 | 6 | export function cacheResponseFor(req: { headers: Headers }, seconds: number) { 7 | req.headers.set( 8 | "Cache-Control", 9 | `public, max-age=${seconds}, s-maxage=${seconds}` 10 | ); 11 | } 12 | -------------------------------------------------------------------------------- /src/components/pages/cloud/privacy/DataRetention.astro: -------------------------------------------------------------------------------- 1 |

2 | We will retain your data until it is no longer necessary for the 3 | aforementioned purposes. 4 |

5 |

6 | You can delete all your data permamently at any time by using the Erase All Data button in the Vencord Cloud settings section or by emailing us at privacy@vencord.dev. 9 |

10 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "astro/tsconfigs/base", 3 | "include": ["src/**/*"], 4 | "compilerOptions": { 5 | // astro considers stuff only used in frontmatter unused, so disable for now 6 | // "importsNotUsedAsValues": "error", 7 | "strictNullChecks": true, 8 | "types": ["@cloudflare/workers-types"], 9 | "baseUrl": "src/" 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/pages/docs/index.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import Layout from "layouts/Layout.astro"; 3 | --- 4 | 5 | 9 |

Documentation

10 |

WIP...

11 |
12 | 13 | 18 | -------------------------------------------------------------------------------- /src/scripts/types.ts: -------------------------------------------------------------------------------- 1 | export interface PluginDev { 2 | name: string; 3 | id: string; 4 | } 5 | 6 | export interface PluginData { 7 | name: string; 8 | description: string; 9 | tags: string[]; 10 | authors: PluginDev[]; 11 | dependencies: string[]; 12 | hasPatches: boolean; 13 | hasCommands: boolean; 14 | required: boolean; 15 | enabledByDefault: boolean; 16 | target: "desktop" | "web" | "dev"; 17 | } 18 | -------------------------------------------------------------------------------- /src/content/faq/8_rtc_connecting.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: When joining voice channels, I get "RTC Connecting" 3 | tags: vc 4 | --- 5 | 6 | Cause is unknown, so there is no real fix. 7 | 8 | However, a simple workaround that fixes it temporarily is to click the text that says RTC Connecting, then click Debug. Close the page that opens again and it should now be fixed! 9 | 10 | Note that you need Discord Developer Mode (Discord Settings > Advanced > Developer Mode) enabled to do this! 11 | -------------------------------------------------------------------------------- /src/components/pages/cloud/privacy/InfoStored.astro: -------------------------------------------------------------------------------- 1 |

We only store information you provide to us. This includes

2 |
    3 |
  • 4 | The sha1 hash of your Discord user id. This is necessary to uniquely 5 | identify your data 6 |
  • 7 |
  • 8 | 9 | Your Vencord settings, stored as JSON plain text. This is necessary to synchronise 10 | your settings between multiple clients as part of our Settings Sync feature. 11 |
  • 12 |
13 | -------------------------------------------------------------------------------- /src/content/faq/2_not_working.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Vencord isn't working! :( 3 | tags: broken, not working, reinstall, update 4 | --- 5 | 6 | The most likely cause is that your install is outdated. Check if there's any updates. You can either do so using our inbuilt updater, or if you cannot get there due to crashes or similar, use the "Update Vencord" in the Installer. 7 | 8 | If you're all up to date, try reinstalling with the installer anyway! 9 | 10 | And if it now still doesn't work, please let us know in our [support server](/discord) 11 | -------------------------------------------------------------------------------- /src/components/AutoSizeGrid.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { HTMLAttributes } from "astro/types"; 3 | 4 | export type Props = HTMLAttributes<"div">; 5 | --- 6 | 7 |
8 | 9 |
10 | 11 | 26 | -------------------------------------------------------------------------------- /src/scripts/text.ts: -------------------------------------------------------------------------------- 1 | export function humanFriendlyJoin( 2 | elements: T[], 3 | mapper: (e: T) => string 4 | ): string; 5 | export function humanFriendlyJoin( 6 | elements: any[], 7 | mapper: (e: any) => string = s => s 8 | ): string { 9 | const { length } = elements; 10 | if (length === 0) return ""; 11 | if (length === 1) return mapper(elements[0]); 12 | 13 | let s = ""; 14 | 15 | for (let i = 0; i < length; i++) { 16 | s += mapper(elements[i]); 17 | if (length - i > 2) s += ", "; 18 | else if (length - i > 1) s += " and "; 19 | } 20 | 21 | return s; 22 | } 23 | -------------------------------------------------------------------------------- /src/content/faq/10_devtools_logout.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Why do I get logged out after opening DevTools? 3 | tags: nodevtoolswarning, hidetoken 4 | --- 5 | 6 | Discord tries to protect you from getting scammed by "hiding" your token when you open DevTools, which means it deletes it from storage and only keeps it in memory in order to make it harder to obtain. 7 | 8 | If you now close discord before closing DevTools again, your token will not be saved anywhere anymore and as a consequence you will be logged out 9 | 10 | Solution: **Close DevTools** before closing discord or better yet enable the **NoDevtoolsWarning plugin** which removes this "feature" 11 | -------------------------------------------------------------------------------- /src/content/faq/9-themes.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: My themes broke and now I can't open settings or disable them 3 | tags: themes, broken themes, themefix 4 | --- 5 | 6 | open the dev tools with `CTRL + Shift + i` and click on the "console" tab at the top. Then paste and run (with enter) the following code. 7 | 8 | It will 9 | - disable custom css (you can turn it back on in Vencord Settings) 10 | - copy your current theme links to your clipboard as a backup 11 | - remove all themes 12 | 13 | ```js 14 | (() => { 15 | Vencord.Settings.useQuickCss = false 16 | copy(Vencord.Settings.themeLinks.join("\n")) 17 | Vencord.Settings.themeLinks = [] 18 | })() 19 | ``` 20 | -------------------------------------------------------------------------------- /src/pages/faq.json.ts: -------------------------------------------------------------------------------- 1 | import { APIRoute } from "astro"; 2 | import { getSortedFaq } from "scripts/collections"; 3 | 4 | export const prerender = true; 5 | 6 | export const get: APIRoute = async ctx => { 7 | const faq = (await getSortedFaq()).map( 8 | ({ data: { title, tags }, body }) => ({ 9 | question: title, 10 | // fix [text](/relativeurl) to have full urls 11 | answer: body.replace( 12 | /\[(.+?)\]\((\/.+?)\)/g, 13 | `[$1](${ctx.url.origin}$2)` 14 | ), 15 | tags: tags, 16 | }) 17 | ); 18 | 19 | return { 20 | body: JSON.stringify(faq), 21 | }; 22 | }; 23 | -------------------------------------------------------------------------------- /src/components/Card.astro: -------------------------------------------------------------------------------- 1 | --- 2 | export interface Props { 3 | kind: Kind; 4 | } 5 | 6 | export const enum Kind { 7 | Warning = "#f0b232", 8 | Error = "#ec4144", 9 | Success = "#2d7c46", 10 | Info = "#5865f2", 11 | Blank = "#aaaaaa", 12 | } 13 | 14 | const { kind } = Astro.props; 15 | const border = kind; 16 | const background = kind + Math.floor(0xff / 4).toString(16); 17 | --- 18 | 19 |
20 | 21 |
22 | 23 | 31 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vencord-site", 3 | "type": "module", 4 | "private": true, 5 | "license": "AGPL-3.0", 6 | "version": "0.0.1", 7 | "scripts": { 8 | "dev": "astro dev", 9 | "start": "astro dev", 10 | "build": "astro build", 11 | "preview": "astro preview", 12 | "astro": "astro" 13 | }, 14 | "dependencies": { 15 | "@astrojs/cloudflare": "^6.2.2", 16 | "@astrojs/mdx": "^0.18.1", 17 | "@astrojs/sitemap": "^1.2.1", 18 | "@astrojs/svelte": "^2.1.0", 19 | "astro": "^2.3.0", 20 | "normalize.css": "^8.0.1", 21 | "svelte": "^3.54.0" 22 | }, 23 | "devDependencies": { 24 | "@cloudflare/workers-types": "^4.20230404.0" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /astro.config.mjs: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "astro/config"; 2 | import mdx from "@astrojs/mdx"; 3 | import sitemap from "@astrojs/sitemap"; 4 | import svelte from "@astrojs/svelte"; 5 | import cloudflare from "@astrojs/cloudflare"; 6 | const site = "https://vencord.dev"; 7 | 8 | // https://astro.build/config 9 | export default defineConfig({ 10 | site, 11 | vite: { 12 | build: { 13 | sourcemap: true, 14 | }, 15 | }, 16 | markdown: { 17 | shikiConfig: { 18 | theme: "css-variables", 19 | }, 20 | }, 21 | integrations: [ 22 | mdx(), 23 | sitemap({ 24 | customPages: [site + "/discord", site + "/github"], 25 | }), 26 | svelte(), 27 | ], 28 | output: "server", 29 | adapter: cloudflare(), 30 | }); 31 | -------------------------------------------------------------------------------- /src/content/faq/6_tos.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Will I get banned for using Vencord? Will plugin X get me banned? 3 | tags: tos, banned, terms of service 4 | --- 5 | 6 | Client modifications are against Discord's Terms of Service. 7 | 8 | However, Discord is pretty indifferent about them and there are no known cases of users getting banned for using client mods! So you should generally be fine as long as you don't use any plugins that implement abusive behaviour. But no worries, all inbuilt plugins are safe to use! 9 | 10 | Regardless, if your account is very important to you and it getting disabled would be a disaster for you, you should probably not use any client mods (not exclusive to Vencord), just to be safe 11 | 12 | Additionally, make sure not to post screenshots with Vencord in a server where you might get banned for it 13 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.formatOnSave": true, 3 | "[astro]": { 4 | "editor.defaultFormatter": "astro-build.astro-vscode" 5 | }, 6 | "[typescript]": { 7 | "editor.defaultFormatter": "esbenp.prettier-vscode" 8 | }, 9 | "[javascript]": { 10 | "editor.defaultFormatter": "esbenp.prettier-vscode" 11 | }, 12 | "[typescriptreact]": { 13 | "editor.defaultFormatter": "esbenp.prettier-vscode" 14 | }, 15 | "[json]": { 16 | "editor.defaultFormatter": "esbenp.prettier-vscode" 17 | }, 18 | "[jsonc]": { 19 | "editor.defaultFormatter": "esbenp.prettier-vscode" 20 | }, 21 | "formatFiles.runOrganizeImports": true, 22 | "typescript.preferences.importModuleSpecifier": "shortest", 23 | "javascript.preferences.importModuleSpecifier": "shortest" 24 | } 25 | -------------------------------------------------------------------------------- /src/components/pages/cloud/privacy/Intro.astro: -------------------------------------------------------------------------------- 1 |

2 | This privacy policy applies to our cloud services, which you need to 3 | explicitly enable. If you don't enable the cloud, Vencord will not collect 4 | any data about you whatsoever. Our website (the one you are currently on) 5 | might collect data about you via our hosting provider Vercel. You can find 6 | out more about this in our GDPR policy linked below. 7 |

8 |

9 | We take your privacy very seriously! As such, we collect as little 10 | information as possible and only use it for the purposes absolutely 11 | necessary to provide our services to you. 12 |

13 |

14 | This is a very simple summary for normal people. We also have a proper GDPR policy. You might want to read that as well. 17 |

18 | -------------------------------------------------------------------------------- /src/components/pages/download/MacTab.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import Card, { Kind } from "components/Card.astro"; 3 | import Code from "components/Code.astro"; 4 | import Tab from "./Tab.astro"; 5 | --- 6 | 7 | 8 |

9 | Download the zip, unzip it and run VencordInstaller.app! 10 |

11 | 12 | 13 |

14 | If you get a VencordInstaller can't be opened warning, right-click 15 | VencordInstaller.app and click open 16 |

17 |

18 | This warning shows due the app not being signed. Doing so would cost 19 | us 100€ a year for an Apple Developer license 20 | :( 21 |

22 |
23 |
24 | -------------------------------------------------------------------------------- /public/favicon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 13 | 14 | -------------------------------------------------------------------------------- /src/pages/plugins/[plugin].astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { cacheResponseFor, HOURS, DAYS } from "scripts/cache"; 3 | import Layout from "layouts/Layout.astro"; 4 | import { fetchPlugins } from "scripts/data"; 5 | import { humanFriendlyJoin } from "scripts/text"; 6 | 7 | const pluginName = Astro.params.plugin; 8 | 9 | const plugins = await fetchPlugins(); 10 | 11 | const p = plugins.find((p) => p.name === pluginName); 12 | if (!p) { 13 | cacheResponseFor(Astro.response, 1 * HOURS); 14 | return new Response(null, { status: 404 }); 15 | } else { 16 | cacheResponseFor(Astro.response, 1 * DAYS); 17 | } 18 | --- 19 | 20 | 21 |
22 |

{p.name}

23 |

24 | by {humanFriendlyJoin(p.authors, (a) => a.name)} 25 |

26 |
27 | 28 |

29 | {p.description} 30 |

31 |
32 | 33 | 34 | -------------------------------------------------------------------------------- /src/pages/download.astro: -------------------------------------------------------------------------------- 1 | --- 2 | export const prerender = true; 3 | 4 | import Layout from "../layouts/Layout.astro"; 5 | 6 | import BrowserTab from "components/pages/download/BrowserTab.astro"; 7 | import LinuxTab from "components/pages/download/LinuxTab.astro"; 8 | import MacTab from "components/pages/download/MacTab.astro"; 9 | import WindowsTab from "components/pages/download/WindowsTab.astro"; 10 | import DownloadTabs from "components/pages/download/index.svelte"; 11 | --- 12 | 13 | 17 | 18 |

Download Vencord

19 | 20 | 21 | 22 | 23 |
24 |
25 | 26 | 31 | -------------------------------------------------------------------------------- /src/components/pages/download/Tab.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import AutoSizeGrid from "components/AutoSizeGrid.astro"; 3 | import LinkButton from "components/LinkButton.astro"; 4 | import { DOWNLOAD_BASE } from "scripts/constants"; 5 | 6 | export interface Props { 7 | fileNames?: string[]; 8 | } 9 | 10 | const { fileNames } = Astro.props as Props; 11 | --- 12 | 13 |
14 | 15 | 16 | { 17 | fileNames && fileNames.length > 0 && ( 18 | 19 | {fileNames.map(f => ( 20 | 21 | Download {f} 22 | 23 | ))} 24 | 25 | ) 26 | } 27 | 28 | 29 |
30 | 31 | 42 | -------------------------------------------------------------------------------- /src/pages/plugins/index.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import Layout from "layouts/Layout.astro"; 3 | import PluginsList from "components/pages/plugins/Plugins.svelte"; 4 | import { cacheResponseFor, MINUTES } from "scripts/cache"; 5 | import { fetchPlugins } from "scripts/data"; 6 | 7 | cacheResponseFor(Astro.response, 5 * MINUTES); 8 | 9 | const plugins = (await fetchPlugins()).filter((p) => !p.name.endsWith("API")); 10 | --- 11 | 12 | 16 |
17 |

Plugins

18 |

19 | We have {plugins.length} plugins available for you to use immediately, 20 | with more being made every day. 21 |

22 | 23 | 24 |
25 |
26 | 27 | 37 | -------------------------------------------------------------------------------- /src/content/faq/4_mobile.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Is there a mobile version of Vencord? 3 | tags: android, ios, mobile, phone 4 | --- 5 | 6 | Yes actually! We have an [Android app](https://github.com/Vencord/Android) embedding the Discord website 7 | 8 | However, as Discord's mobile website has some issues (performance, usability, etc), chances are you won't like it. 9 | In that case you will instead want to use one of the following mods focused on Mobile. 10 | 11 | Do note however that these mods are not related to / affiliated with Vencord, so we do not provide support for them in any way. Join their support servers for help & more info! 12 | 13 | - Vendetta (android/ios): [GitHub](https://github.com/vendetta-mod/Vendetta) - [Discord Server](https://discord.gg/n9QQ4XhhJP) 14 | - Enmity (ios only): [GitHub](https://github.com/enmity-mod/enmity) - [Discord Server](https://discord.gg/rMdzhWUaGT) 15 | - Aliucord (android only, very outdated but still works well if you like the old version of Discord): 16 | [GitHub](https://github.com/Aliucord/Aliucord) - [Discord Server](https://discord.gg/EsNDvBaHVU) 17 | -------------------------------------------------------------------------------- /src/scripts/constants.ts: -------------------------------------------------------------------------------- 1 | export const DISCORD_INVITE = "https://discord.gg/D9uwnFnqmd"; 2 | export const GITHUB_URL = "https://github.com/Vendicated/Vencord"; 3 | export const SOURCE_CODE = "https://github.com/Vencord/website"; 4 | export const VENCORD_CLOUD_SOURCE_CODE_URL = 5 | "https://github.com/Vencord/Backend"; 6 | export const SPONSOR_URL = "https://github.com/sponsors/Vendicated"; 7 | 8 | export const DOWNLOAD_BASE = 9 | "https://github.com/Vencord/Installer/releases/latest/download/"; 10 | 11 | export const PLUGINS_JSON_URL = 12 | "https://raw.githubusercontent.com/Vencord/builds/main/plugins.json"; 13 | 14 | export const FIREFOX_WEBSTORE_URL = 15 | "https://addons.mozilla.org/en-GB/firefox/addon/vencord-web"; 16 | export const CHROME_WEBSTORE_URL = 17 | "https://chrome.google.com/webstore/detail/vencord-web/cbghhgpcnddeihccjmnadmkaejncjndb"; 18 | export const USERSCRIPT_URL = 19 | "https://raw.githubusercontent.com/Vencord/builds/main/Vencord.user.js"; 20 | 21 | export const IS_SERVER = import.meta.env.SSR; 22 | 23 | export const enum StatusCodes { 24 | MovedPermanently = 301, 25 | Found = 302, 26 | SeeOther = 303, 27 | } 28 | -------------------------------------------------------------------------------- /src/components/pages/download/WindowsTab.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import Card, { Kind } from "components/Card.astro"; 3 | import Code from "components/Code.astro"; 4 | import Tab from "./Tab.astro"; 5 | --- 6 | 7 | 8 |
9 |

Download and run VencordInstaller.exe

10 |
11 | 12 |
13 | 14 |

Do not run the installer as an Administrator!

15 |

16 | If you get a warning that the app cannot be opened, click "Run 17 | Anyways". You may need to click "more info" to see this option. 18 |

19 |
20 | 21 |

22 | Alternatively, or if the normal installer doesn't work for you, open 23 | Powershell and run the following command: 24 |

25 | 26 | iwr 28 | "https://raw.githubusercontent.com/Vencord/Installer/main/install.ps1" 29 | | iex 31 | 32 | 33 |
34 |
35 |
36 | 37 | 42 | -------------------------------------------------------------------------------- /src/components/LinkButton.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import type { HTMLAttributes } from "astro/types"; 3 | 4 | export interface Props extends HTMLAttributes<"a"> { 5 | href: string; 6 | children: any; 7 | } 8 | --- 9 | 10 | 11 | 12 | 55 | -------------------------------------------------------------------------------- /src/components/pages/download/LinuxTab.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import Card, { Kind } from "components/Card.astro"; 3 | import Code from "components/Code.astro"; 4 | import Tab from "./Tab.astro"; 5 | --- 6 | 7 | 14 |
15 |

16 | Most of the time, you can just use our automatic launcher script and 17 | it will figure everything out for you! To do so, just run the below 18 | command. If you're using fish, switch to bash first (by running 19 | {} 20 | bash) 21 |

22 | 23 | sh -c "$(curl -sS 25 | https://raw.githubusercontent.com/Vendicated/VencordInstaller/main/install.sh)" 27 | 28 | 29 |

30 | Alternatively, download the correct installer manually and make it 31 | executable, then just run it. Make sure to use 32 | sudo/doas to elevate, running as root user 33 | is not supported 34 |

35 |
36 |
37 | 38 | 43 | -------------------------------------------------------------------------------- /src/pages/cloud/index.astro: -------------------------------------------------------------------------------- 1 | --- 2 | export const prerender = true; 3 | 4 | import Layout from "layouts/Layout.astro"; 5 | import { VENCORD_CLOUD_SOURCE_CODE_URL } from "scripts/constants"; 6 | --- 7 | 8 | 12 |

Cloud

13 |

Now in your Vencord!!

14 | 15 |

16 | Vencord has a cloud integration that powers additional features. It's 17 | completely optional and honours your privacy! 18 |

19 | 20 |

Features

21 |
    22 |
  • 23 | Settings Sync: Easily synchronise your settings 24 | across Devices 25 |
  • 26 |
  • Stay tuned for more future features!
  • 27 |
28 | 29 |

Getting Started

30 |

31 | To start using our cloud integration, head over to the Vencord settings 32 | section inside Discord and check the "Enable Cloud Integrations" switch. 33 | After authorising, you're good to go! You can now enable specific 34 | features on the same page 35 |

36 | 37 |

Links

38 | 46 |
47 | 48 | 58 | -------------------------------------------------------------------------------- /src/pages/404.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import Layout from "layouts/Layout.astro"; 3 | --- 4 | 5 | 6 |
7 | 8 |

404

9 |

it's dark here...

10 |

are you lost?

11 | let's go home... 12 |
13 |
14 | 15 | 74 | -------------------------------------------------------------------------------- /src/components/ThemeToggle.svelte: -------------------------------------------------------------------------------- 1 | 34 | 35 | 42 | 43 | 63 | -------------------------------------------------------------------------------- /src/components/pages/download/BrowserTab.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import Card, { Kind } from "components/Card.astro"; 3 | import LinkButton from "components/LinkButton.astro"; 4 | import { 5 | CHROME_WEBSTORE_URL, 6 | FIREFOX_WEBSTORE_URL, 7 | USERSCRIPT_URL, 8 | } from "scripts/constants"; 9 | import Tab from "./Tab.astro"; 10 | --- 11 | 12 | 13 | 14 |

15 | You can download Vencord from the Chrome or Firefox Store, or use 16 | the UserScript. 17 |

18 |
19 | 20 | Get Vencord on the Firefox Webstore 25 | 26 | 27 | Get Vencord on the Chrome Webstore 32 | 33 | 34 | Download Vencord.user.js 35 | 36 |
37 |
38 | 39 | 40 |

41 | Please note that due to Discord's 42 | content security policy, the CSS Editor, custom themes and plugins making use of external 45 | scripts will not work with the UserScript. 46 |

47 |
48 |
49 | 50 | 60 | -------------------------------------------------------------------------------- /src/pages/releases/[repo].ts: -------------------------------------------------------------------------------- 1 | import { getRuntime } from "@astrojs/cloudflare/runtime"; 2 | import { APIRoute } from "astro"; 3 | 4 | const Repos = { 5 | installer: "Vencord/Installer", 6 | vencord: "Vendicated/Vencord", 7 | "vencord-desktop": "Vencord/Desktop", 8 | }; 9 | 10 | export const get: APIRoute = async ({ params, request }) => { 11 | const repo = Repos[params.repo as keyof typeof Repos]; 12 | 13 | if (!repo) 14 | return new Response(null, { 15 | status: 404, 16 | headers: { 17 | // 1h 18 | "Cache-Control": "public, max-age=3600, s-maxage=3600", 19 | }, 20 | }); 21 | 22 | const { GITHUB_TOKEN } = getRuntime<{ GITHUB_TOKEN: string }>(request).env; 23 | 24 | const data = await fetch( 25 | `https://api.github.com/repos/${repo}/releases/latest`, 26 | { 27 | cf: { 28 | // https://docs.github.com/en/rest/overview/resources-in-the-rest-api?apiVersion=2022-11-28#rate-limits-for-requests-from-personal-accounts 29 | // cache for 5 seconds, so we send at most 60 * 60 / 5 * 3 = 2160 requests per hour, which falls 30 | // comfortably within the 5k requests per hour limit 31 | cacheTtl: 5, 32 | cacheEverything: true, 33 | }, 34 | headers: { 35 | Accept: "application/vnd.github+json", 36 | Authorization: `Bearer ${GITHUB_TOKEN}`, 37 | "User-Agent": "https://github.com/Vencord/Website", 38 | }, 39 | } 40 | ); 41 | 42 | if (!data.ok) { 43 | console.error( 44 | `GET ${repo}/releases/latest failed with status ${data.status}` 45 | ); 46 | 47 | return new Response(null, { 48 | status: 502, 49 | }); 50 | } 51 | 52 | return new Response(await data.text(), { 53 | status: 200, 54 | headers: { 55 | "Content-Type": "application/json", 56 | "Cache-Control": "public, max-age=20, s-maxage=20", 57 | }, 58 | }); 59 | }; 60 | -------------------------------------------------------------------------------- /src/pages/cloud/privacy.astro: -------------------------------------------------------------------------------- 1 | --- 2 | export const prerender = true; 3 | 4 | import { 5 | Changes, 6 | DataRetention, 7 | InfoStored, 8 | Intro, 9 | Usage, 10 | } from "components/pages/cloud/privacy/sections.astro"; 11 | import Layout from "layouts/Layout.astro"; 12 | 13 | const sections = [ 14 | ["intro", "Introduction", Intro], 15 | ["information-stored", "The information we store", InfoStored], 16 | ["usage", "How we use your information", Usage], 17 | ["retention", "Data Retention", DataRetention], 18 | ["changes", "Changes to this Privacy Policy", Changes], 19 | ] as const; 20 | --- 21 | 22 | 26 |

Vencord Cloud Privacy Policy

27 |

Last Updated: 26/03/2023

28 | 29 | 40 | 41 | { 42 | sections.map(([id, title, Component]) => ( 43 |
44 | 45 |

{title}

46 |
47 | 48 |
49 | )) 50 | } 51 |
52 | 53 | 69 | 70 | 90 | -------------------------------------------------------------------------------- /src/pages/faq.astro: -------------------------------------------------------------------------------- 1 | --- 2 | export const prerender = true; 3 | 4 | import Layout from "layouts/Layout.astro"; 5 | import { getSortedFaq } from "scripts/collections"; 6 | 7 | const faq = await getSortedFaq(); 8 | --- 9 | 10 | 14 |

Frequently Asked Questions

15 |

Questions that we're asked often.

16 | 17 |
18 | { 19 | faq.map(async f => { 20 | const { Content } = await f.render(); 21 | return ( 22 |
23 | {f.data.title} 24 | 25 |
26 | 27 |
28 |
29 | ); 30 | }) 31 | } 32 |
33 | 34 |

35 | Still lost? Visit our support server for more assistance! 36 | We're happy to help. 37 |

38 |
39 | 40 | 98 | -------------------------------------------------------------------------------- /src/styles/prose.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --fontWeightBold: 700; 3 | --fontWeightSemiBold: 600; 4 | --fontWeightMedium: 500; 5 | --fontWeightRegular: 400; 6 | } 7 | 8 | html { 9 | /* make scrollbar overlay over the content, not taking up any space */ 10 | overflow-y: overlay; 11 | } 12 | 13 | h1, 14 | h2, 15 | h3, 16 | h4, 17 | h5, 18 | h6 { 19 | font-weight: var(--fontWeightSemiBold); 20 | letter-spacing: -0.02em; 21 | } 22 | 23 | h1 { 24 | font-size: 4em; 25 | line-height: 4.8125rem; 26 | } 27 | 28 | h2 { 29 | font-size: 3em; 30 | line-height: 3.625rem; 31 | } 32 | 33 | h3 { 34 | font-size: 2.5em; 35 | line-height: 3rem; 36 | } 37 | 38 | h4, 39 | .p-page-title { 40 | font-size: 2.25em; 41 | line-height: 2.75rem; 42 | margin-bottom: 0; 43 | } 44 | 45 | h5 { 46 | font-size: 2em; 47 | line-height: 1.8125rem; 48 | } 49 | 50 | h6 { 51 | font-size: 1.5em; 52 | line-height: 2.45rem; 53 | } 54 | 55 | .p-subtitle { 56 | margin-top: -0.1em; 57 | color: var(--grey1); 58 | } 59 | 60 | .p-display { 61 | font-size: 6em; 62 | font-weight: var(--fontWeightBold); 63 | letter-spacing: -0.02rem; 64 | line-height: 7.25rem; 65 | } 66 | 67 | .p-xs { 68 | font-size: 0.75em; 69 | } 70 | 71 | .p-s { 72 | font-size: 0.875em; 73 | line-height: 1rem; 74 | } 75 | 76 | .p-l { 77 | font-size: 1.25em; 78 | } 79 | 80 | .p-label-xs { 81 | font-size: 0.75em; 82 | font-weight: var(--fontWeightSemiBold); 83 | } 84 | 85 | .p-label-s { 86 | font-size: 0.875em; 87 | font-weight: var(--fontWeightSemiBold); 88 | letter-spacing: 0.02rem; 89 | line-height: 1rem; 90 | } 91 | 92 | .p-label-m { 93 | font-size: 1em; 94 | font-weight: var(--fontWeightSemiBold); 95 | letter-spacing: 0.02rem; 96 | } 97 | 98 | .p-label-l { 99 | font-size: 1.25em; 100 | font-weight: var(--fontWeightSemiBold); 101 | letter-spacing: 0.02rem; 102 | } 103 | 104 | .p-overline-s { 105 | font-size: 0.75em; 106 | font-weight: var(--fontWeightSemiBold); 107 | text-transform: uppercase; 108 | letter-spacing: 0.2rem; 109 | 110 | line-height: 1rem; 111 | } 112 | 113 | .p-overline-m { 114 | font-size: 0.875em; 115 | font-weight: var(--fontWeightSemiBold); 116 | text-transform: uppercase; 117 | letter-spacing: 0.2rem; 118 | 119 | line-height: 1rem; 120 | } 121 | 122 | .p-overline-l { 123 | font-size: 1em; 124 | font-weight: var(--fontWeightSemiBold); 125 | text-transform: uppercase; 126 | letter-spacing: 0.2rem; 127 | 128 | line-height: 1rem; 129 | } 130 | 131 | @media screen and (max-width: 600px) { 132 | .p-display { 133 | font-size: 4.5em; 134 | } 135 | } 136 | -------------------------------------------------------------------------------- /src/components/pages/download/index.svelte: -------------------------------------------------------------------------------- 1 | 31 | 32 |
33 | 34 | 50 | 51 |
52 | 53 | {#if $selected === "Windows"} 54 |
55 | 56 |
57 | {:else if $selected === "Linux"} 58 |
59 | 60 |
61 | {:else if $selected === "Mac"} 62 |
63 | 64 |
65 | {:else if $selected === "Browser"} 66 |
67 | 68 |
69 | {/if} 70 |
71 |
72 | 73 | 133 | -------------------------------------------------------------------------------- /src/components/NavBar.astro: -------------------------------------------------------------------------------- 1 | --- 2 | const navLinks = { 3 | download: ["Download", "accentPurple"], 4 | plugins: ["Plugins", "accentBlue"], 5 | faq: ["FAQ", "accentAqua"], 6 | docs: ["Docs", "accentGreen"], 7 | cloud: ["Cloud", "accentYellow"], 8 | }; 9 | 10 | const page = Astro.url.pathname.split("/")[1]; 11 | --- 12 | 13 | 43 | 44 | 181 | -------------------------------------------------------------------------------- /src/pages/cloud/gdpr.astro: -------------------------------------------------------------------------------- 1 | --- 2 | export const prerender = true; 3 | 4 | import Layout from "layouts/Layout.astro"; 5 | --- 6 | 7 | 11 |

Vencord Cloud GDPR Policy

12 |

Last Updated: 06/04/2023

13 | 14 |

15 | This is the scary legal bit that we need to have (by law) to make sure 16 | that we are GDPR compliant. Long story short, we swear we won't do 17 | anything bad with your data, that we only use it for good and legitimate 18 | purposes, and that you can get it changed or removed at any time by 19 | contacting us at privacy@vencord.dev. 20 |

21 | 22 |

We are a Data Controller of your information.

23 |

24 | Vencord's legal basis for collecting and using the personal information 25 | described in this Privacy Policy depends on the Personal Information we 26 | collect and the specific context in which we collect the information: 27 |

    28 |
  • Vencord needs to perform a contract with you
  • 29 |
  • You have given Vencord permission to do so
  • 30 |
  • 31 | Processing your personal information is in Vencord's legitimate 32 | interests 33 |
  • 34 |
  • Vencord needs to comply with the law
  • 35 |
36 |

37 |

38 | Vencord will retain your personal information only for as long as is 39 | necessary for the purposes set out in this Privacy Policy. We will 40 | retain and use your information to the extent necessary to comply with 41 | our legal obligations, resolve disputes, and enforce our policies. 42 |

43 |

44 | If you are a resident of the European Economic Area (EEA), you have 45 | certain data protection rights. If you wish to be informed what Personal 46 | Information we hold about you and if you want it to be removed from our 47 | systems, please contact us. 48 |

49 |

50 | In certain circumstances, you have the following data protection rights: 51 |

    52 |
  • 53 | The right to access, update or to delete the information we have 54 | on you 55 |
  • 56 |
  • The right of rectification
  • 57 |
  • The right to object
  • 58 |
  • The right of restriction
  • 59 |
  • The right to data portability
  • 60 |
  • The right to withdraw consent
  • 61 |
62 |

63 | 64 |

Log Files

65 |

66 | Vencord follows a standard procedure of using log files. These files log 67 | visitors when they visit websites. All hosting companies do this and a 68 | part of hosting services' analytics. The information collected by log 69 | files include internet protocol (IP) addresses, browser type, Internet 70 | Service Provider (ISP), date and time stamp, referring/exit pages, and 71 | possibly the number of clicks. These are not linked to any information 72 | that is personally identifiable. The purpose of the information is for 73 | analyzing trends, administering the site, tracking users' movement on 74 | the website, and gathering demographic information. 75 |

76 | 77 |

Children's Information

78 |

79 | Another part of our priority is adding protection for children while 80 | using the internet. We encourage parents and guardians to observe, 81 | participate in, and/or monitor and guide their online activity. 82 |

83 |

84 | Vencord does not knowingly collect any Personal Identifiable Information 85 | from children under the age of 13. If you think that your child provided 86 | this kind of information on our website, we strongly encourage you to 87 | contact us immediately and we will do our best efforts to promptly 88 | remove such information from our records. 89 |

90 | 91 |

Online Privacy Policy Only

92 |

93 | This Privacy Policy applies only to our online activities and is valid 94 | for visitors to our website with regards to the information that they 95 | shared and/or collect in Vencord. This policy is not applicable to any 96 | information collected offline or via channels other than this website. 97 |

98 | 99 |

Consent

100 |

By using our website, you hereby consent to our Privacy Policy.

101 |
102 | 103 | 108 | -------------------------------------------------------------------------------- /src/pages/index.astro: -------------------------------------------------------------------------------- 1 | --- 2 | export const prerender = true; 3 | 4 | import Layout from "layouts/Layout.astro"; 5 | 6 | import LinkButton from "components/LinkButton.astro"; 7 | import AutoSizeGrid from "components/AutoSizeGrid.astro"; 8 | 9 | const features = [ 10 | { 11 | icon: "light-bulb", 12 | title: "Easy Install", 13 | description: "Super easy to install thanks to our graphical installer", 14 | }, 15 | { 16 | icon: "rocket", 17 | title: "Great Performance", 18 | description: 19 | "Built with performance in mind. No more sluggish Discord!", 20 | }, 21 | { 22 | icon: "globe", 23 | title: "Excellent Browser Support", 24 | description: "Works just as well inside your favourite Browser!", 25 | }, 26 | { 27 | icon: "locked", 28 | title: "Privacy Friendly", 29 | description: "Blocks Discord analytics & crash reports out of the box", 30 | }, 31 | { 32 | icon: "package", 33 | title: "Maintained Actively", 34 | description: 35 | "No more broken plugins! Bugs are usually fixed within a day", 36 | }, 37 | { 38 | icon: "hammer-and-wrench", 39 | title: "Developer Friendly", 40 | description: 41 | "Flexible and robust plugin system with many APIs empowering you", 42 | }, 43 | ]; 44 | 45 | if (features.length % 3 !== 0) 46 | throw new Error("Feature amount must be multiple of 3"); 47 | --- 48 | 49 | 50 |
51 |
52 |

Vencord

53 |

The cutest Discord client mod

54 |
55 | 56 |
57 | 58 | 59 | Download Vencord 60 | 61 | Join our Support Server 62 | View on GitHub 63 | 64 |
65 |
66 | 67 | 68 |
69 | { 70 | features.map(({ icon, title, description }) => ( 71 |
72 | 75 |

{title}

76 |

{description}

77 |
78 | )) 79 | } 80 |
81 |
82 | 83 | 198 | -------------------------------------------------------------------------------- /src/components/Footer.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { SOURCE_CODE } from "scripts/constants"; 3 | import ThemeToggle from "./ThemeToggle.svelte"; 4 | --- 5 | 6 | 63 | 64 | 122 | -------------------------------------------------------------------------------- /src/components/pages/plugins/Plugins.svelte: -------------------------------------------------------------------------------- 1 | 71 | 72 |
73 |
74 |

Filter

75 | 76 |
77 | {#each criteria as c} 78 | 82 | {/each} 83 |
84 | 85 | 98 |
99 | 100 |
101 | {#each filteredPlugins as p} 102 | 168 | {/each} 169 |
170 |
171 | 172 | 334 | -------------------------------------------------------------------------------- /src/layouts/Layout.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import "normalize.css"; 3 | import "styles/prose.css"; 4 | 5 | import Footer from "components/Footer.astro"; 6 | import NavBar from "components/NavBar.astro"; 7 | 8 | export interface Props { 9 | title?: string; 10 | description: string; 11 | opengraph?: boolean; 12 | } 13 | 14 | const { title, description, opengraph } = Astro.props; 15 | --- 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 31 | 32 | {title && `${title} | `}Vencord 33 | 34 | 35 | 36 | 37 | { 38 | opengraph !== false && ( 39 | <> 40 | 41 | 42 | 43 | 44 | 48 | 49 | ) 50 | } 51 | { 52 | /* FIXME: Seems to be a bug in Astro because this statement doesn't work in the above block. */ 53 | } 54 | { 55 | title && opengraph !== false && ( 56 | 57 | ) 58 | } 59 | 60 | 61 | {/* explode darkreader */} 62 | 63 | 67 | 68 | 69 | { 70 | /* Loads theme (this fixes a "flickering" bug 71 | that occurs when the theme script loads after 72 | the page content does, causing it to briefly 73 | show the original colors.) 74 | */ 75 | } 76 | 81 | 82 |
83 | 84 |
85 |