This commit is contained in:
donut 2025-02-19 02:01:41 -05:00
parent 805e7c6928
commit 16e316f950
38 changed files with 4086 additions and 291 deletions

View file

@ -1,48 +1,3 @@
# Astro Starter Kit: Basics
# Ryujinx website
```sh
npm create astro@latest -- --template basics
```
[![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/withastro/astro/tree/latest/examples/basics)
[![Open with CodeSandbox](https://assets.codesandbox.io/github/button-edit-lime.svg)](https://codesandbox.io/p/sandbox/github/withastro/astro/tree/latest/examples/basics)
[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/withastro/astro?devcontainer_path=.devcontainer/basics/devcontainer.json)
> 🧑‍🚀 **Seasoned astronaut?** Delete this file. Have fun!
![just-the-basics](https://github.com/withastro/astro/assets/2244813/a0a5533c-a856-4198-8470-2d67b1d7c554)
## 🚀 Project Structure
Inside of your Astro project, you'll see the following folders and files:
```text
/
├── public/
│ └── favicon.svg
├── src/
│ ├── layouts/
│ │ └── Layout.astro
│ └── pages/
│ └── index.astro
└── package.json
```
To learn more about the folder structure of an Astro project, refer to [our guide on project structure](https://docs.astro.build/en/basics/project-structure/).
## 🧞 Commands
All commands are run from the root of the project, from a terminal:
| Command | Action |
| :------------------------ | :----------------------------------------------- |
| `npm install` | Installs dependencies |
| `npm run dev` | Starts local dev server at `localhost:4321` |
| `npm run build` | Build your production site to `./dist/` |
| `npm run preview` | Preview your build locally, before deploying |
| `npm run astro ...` | Run CLI commands like `astro add`, `astro check` |
| `npm run astro -- --help` | Get help using the Astro CLI |
## 👀 Want to learn more?
Feel free to check [our documentation](https://docs.astro.build) or jump into our [Discord server](https://astro.build/chat).
ryujinx marketing site. inspired by revolt.chat

View file

@ -1,5 +1,13 @@
// @ts-check
import { defineConfig } from 'astro/config';
import tailwindcss from "@tailwindcss/vite";
import node from '@astrojs/node';
// https://astro.build/config
export default defineConfig({});
export default defineConfig({
adapter: node({
mode: 'standalone',
}),
vite: { plugins: [tailwindcss()], },
});

2699
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -1,5 +1,5 @@
{
"name": "solar-shell",
"name": "ryujinx.app",
"type": "module",
"version": "0.0.1",
"scripts": {
@ -9,6 +9,15 @@
"astro": "astro"
},
"dependencies": {
"astro": "^5.2.5"
"@astrojs/cloudflare": "^12.2.1",
"@astrojs/node": "^9.1.0",
"@tailwindcss/vite": "^4.0.6",
"astro": "^5.2.5",
"tailwindcss": "^4.0.6"
},
"devDependencies": {
"@types/node": "^22.13.2",
"sass-embedded": "^1.83.4",
"tsx": "^4.19.2"
}
}
}

BIN
public/favicon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 552 KiB

View file

@ -1,9 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 128 128">
<path d="M50.4 78.5a75.1 75.1 0 0 0-28.5 6.9l24.2-65.7c.7-2 1.9-3.2 3.4-3.2h29c1.5 0 2.7 1.2 3.4 3.2l24.2 65.7s-11.6-7-28.5-7L67 45.5c-.4-1.7-1.6-2.8-2.9-2.8-1.3 0-2.5 1.1-2.9 2.7L50.4 78.5Zm-1.1 28.2Zm-4.2-20.2c-2 6.6-.6 15.8 4.2 20.2a17.5 17.5 0 0 1 .2-.7 5.5 5.5 0 0 1 5.7-4.5c2.8.1 4.3 1.5 4.7 4.7.2 1.1.2 2.3.2 3.5v.4c0 2.7.7 5.2 2.2 7.4a13 13 0 0 0 5.7 4.9v-.3l-.2-.3c-1.8-5.6-.5-9.5 4.4-12.8l1.5-1a73 73 0 0 0 3.2-2.2 16 16 0 0 0 6.8-11.4c.3-2 .1-4-.6-6l-.8.6-1.6 1a37 37 0 0 1-22.4 2.7c-5-.7-9.7-2-13.2-6.2Z" />
<style>
path { fill: #000; }
@media (prefers-color-scheme: dark) {
path { fill: #FFF; }
}
</style>
</svg>

Before

Width:  |  Height:  |  Size: 749 B

0
public/robots.txt Normal file
View file

4
src/assets/Bluesky.svg Normal file
View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="600" height="530" version="1.1" xmlns="http://www.w3.org/2000/svg">
<path d="m135.72 44.03c66.496 49.921 138.02 151.14 164.28 205.46 26.262-54.316 97.782-155.54 164.28-205.46 47.98-36.021 125.72-63.892 125.72 24.795 0 17.712-10.155 148.79-16.111 170.07-20.703 73.984-96.144 92.854-163.25 81.433 117.3 19.964 147.14 86.092 82.697 152.22-122.39 125.59-175.91-31.511-189.63-71.766-2.514-7.3797-3.6904-10.832-3.7077-7.8964-0.0174-2.9357-1.1937 0.51669-3.7077 7.8964-13.714 40.255-67.233 197.36-189.63 71.766-64.444-66.128-34.605-132.26 82.697-152.22-67.108 11.421-142.55-7.4491-163.25-81.433-5.9562-21.282-16.111-152.36-16.111-170.07 0-88.687 77.742-60.816 125.72-24.795z" fill="#1185fe"/>
</svg>

After

Width:  |  Height:  |  Size: 744 B

View file

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="none" width="115" height="48"><path fill="#17191E" d="M7.77 36.35C6.4 35.11 6 32.51 6.57 30.62c.99 1.2 2.35 1.57 3.75 1.78 2.18.33 4.31.2 6.33-.78.23-.12.44-.27.7-.42.18.55.23 1.1.17 1.67a4.56 4.56 0 0 1-1.94 3.23c-.43.32-.9.61-1.34.91-1.38.94-1.76 2.03-1.24 3.62l.05.17a3.63 3.63 0 0 1-1.6-1.38 3.87 3.87 0 0 1-.63-2.1c0-.37 0-.74-.05-1.1-.13-.9-.55-1.3-1.33-1.32a1.56 1.56 0 0 0-1.63 1.26c0 .06-.03.12-.05.2Z"/><path fill="url(#a)" d="M7.77 36.35C6.4 35.11 6 32.51 6.57 30.62c.99 1.2 2.35 1.57 3.75 1.78 2.18.33 4.31.2 6.33-.78.23-.12.44-.27.7-.42.18.55.23 1.1.17 1.67a4.56 4.56 0 0 1-1.94 3.23c-.43.32-.9.61-1.34.91-1.38.94-1.76 2.03-1.24 3.62l.05.17a3.63 3.63 0 0 1-1.6-1.38 3.87 3.87 0 0 1-.63-2.1c0-.37 0-.74-.05-1.1-.13-.9-.55-1.3-1.33-1.32a1.56 1.56 0 0 0-1.63 1.26c0 .06-.03.12-.05.2Z"/><path fill="#17191E" d="M.02 30.31s4.02-1.95 8.05-1.95l3.04-9.4c.11-.45.44-.76.82-.76.37 0 .7.31.82.76l3.04 9.4c4.77 0 8.05 1.95 8.05 1.95L17 11.71c-.2-.56-.53-.91-.98-.91H7.83c-.44 0-.76.35-.97.9L.02 30.31Zm42.37-5.97c0 1.64-2.05 2.62-4.88 2.62-1.85 0-2.5-.45-2.5-1.41 0-1 .8-1.49 2.65-1.49 1.67 0 3.09.03 4.73.23v.05Zm.03-2.04a21.37 21.37 0 0 0-4.37-.36c-5.32 0-7.82 1.25-7.82 4.18 0 3.04 1.71 4.2 5.68 4.2 3.35 0 5.63-.84 6.46-2.92h.14c-.03.5-.05 1-.05 1.4 0 1.07.18 1.16 1.06 1.16h4.15a16.9 16.9 0 0 1-.36-4c0-1.67.06-2.93.06-4.62 0-3.45-2.07-5.64-8.56-5.64-2.8 0-5.9.48-8.26 1.19.22.93.54 2.83.7 4.06 2.04-.96 4.95-1.37 7.2-1.37 3.11 0 3.97.71 3.97 2.15v.57Zm11.37 3c-.56.07-1.33.07-2.12.07-.83 0-1.6-.03-2.12-.1l-.02.58c0 2.85 1.87 4.52 8.45 4.52 6.2 0 8.2-1.64 8.2-4.55 0-2.74-1.33-4.09-7.2-4.39-4.58-.2-4.99-.7-4.99-1.28 0-.66.59-1 3.65-1 3.18 0 4.03.43 4.03 1.35v.2a46.13 46.13 0 0 1 4.24.03l.02-.55c0-3.36-2.8-4.46-8.2-4.46-6.08 0-8.13 1.49-8.13 4.39 0 2.6 1.64 4.23 7.48 4.48 4.3.14 4.77.62 4.77 1.28 0 .7-.7 1.03-3.71 1.03-3.47 0-4.35-.48-4.35-1.47v-.13Zm19.82-12.05a17.5 17.5 0 0 1-6.24 3.48c.03.84.03 2.4.03 3.24l1.5.02c-.02 1.63-.04 3.6-.04 4.9 0 3.04 1.6 5.32 6.58 5.32 2.1 0 3.5-.23 5.23-.6a43.77 43.77 0 0 1-.46-4.13c-1.03.34-2.34.53-3.78.53-2 0-2.82-.55-2.82-2.13 0-1.37 0-2.65.03-3.84 2.57.02 5.13.07 6.64.11-.02-1.18.03-2.9.1-4.04-2.2.04-4.65.07-6.68.07l.07-2.93h-.16Zm13.46 6.04a767.33 767.33 0 0 1 .07-3.18H82.6c.07 1.96.07 3.98.07 6.92 0 2.95-.03 4.99-.07 6.93h5.18c-.09-1.37-.11-3.68-.11-5.65 0-3.1 1.26-4 4.12-4 1.33 0 2.28.16 3.1.46.03-1.16.26-3.43.4-4.43-.86-.25-1.81-.41-2.96-.41-2.46-.03-4.26.98-5.1 3.38l-.17-.02Zm22.55 3.65c0 2.5-1.8 3.66-4.64 3.66-2.81 0-4.61-1.1-4.61-3.66s1.82-3.52 4.61-3.52c2.82 0 4.64 1.03 4.64 3.52Zm4.71-.11c0-4.96-3.87-7.18-9.35-7.18-5.5 0-9.23 2.22-9.23 7.18 0 4.94 3.49 7.59 9.21 7.59 5.77 0 9.37-2.65 9.37-7.6Z"/><defs><linearGradient id="a" x1="6.33" x2="19.43" y1="40.8" y2="34.6" gradientUnits="userSpaceOnUse"><stop stop-color="#D83333"/><stop offset="1" stop-color="#F041FF"/></linearGradient></defs></svg>

Before

Width:  |  Height:  |  Size: 2.8 KiB

View file

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1440" height="1024" fill="none"><path fill="url(#a)" fill-rule="evenodd" d="M-217.58 475.75c91.82-72.02 225.52-29.38 341.2-44.74C240 415.56 372.33 315.14 466.77 384.9c102.9 76.02 44.74 246.76 90.31 366.31 29.83 78.24 90.48 136.14 129.48 210.23 57.92 109.99 169.67 208.23 155.9 331.77-13.52 121.26-103.42 264.33-224.23 281.37-141.96 20.03-232.72-220.96-374.06-196.99-151.7 25.73-172.68 330.24-325.85 315.72-128.6-12.2-110.9-230.73-128.15-358.76-12.16-90.14 65.87-176.25 44.1-264.57-26.42-107.2-167.12-163.46-176.72-273.45-10.15-116.29 33.01-248.75 124.87-320.79Z" clip-rule="evenodd" style="opacity:.154"/><path fill="url(#b)" fill-rule="evenodd" d="M1103.43 115.43c146.42-19.45 275.33-155.84 413.5-103.59 188.09 71.13 409 212.64 407.06 413.88-1.94 201.25-259.28 278.6-414.96 405.96-130 106.35-240.24 294.39-405.6 265.3-163.7-28.8-161.93-274.12-284.34-386.66-134.95-124.06-436-101.46-445.82-284.6-9.68-180.38 247.41-246.3 413.54-316.9 101.01-42.93 207.83 21.06 316.62 6.61Z" clip-rule="evenodd" style="opacity:.154"/><defs><linearGradient id="b" x1="373" x2="1995.44" y1="1100" y2="118.03" gradientUnits="userSpaceOnUse"><stop stop-color="#D83333"/><stop offset="1" stop-color="#F041FF"/></linearGradient><linearGradient id="a" x1="107.37" x2="1130.66" y1="1993.35" y2="1026.31" gradientUnits="userSpaceOnUse"><stop stop-color="#3245FF"/><stop offset="1" stop-color="#BC52EE"/></linearGradient></defs></svg>

Before

Width:  |  Height:  |  Size: 1.4 KiB

1
src/assets/discord.svg Normal file
View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 127.14 96.36"><defs><style>.cls-1{fill:#fff;}</style></defs><g id="图层_2" data-name="图层 2"><g id="Discord_Logos" data-name="Discord Logos"><g id="Discord_Logo_-_Large_-_White" data-name="Discord Logo - Large - White"><path class="cls-1" d="M107.7,8.07A105.15,105.15,0,0,0,81.47,0a72.06,72.06,0,0,0-3.36,6.83A97.68,97.68,0,0,0,49,6.83,72.37,72.37,0,0,0,45.64,0,105.89,105.89,0,0,0,19.39,8.09C2.79,32.65-1.71,56.6.54,80.21h0A105.73,105.73,0,0,0,32.71,96.36,77.7,77.7,0,0,0,39.6,85.25a68.42,68.42,0,0,1-10.85-5.18c.91-.66,1.8-1.34,2.66-2a75.57,75.57,0,0,0,64.32,0c.87.71,1.76,1.39,2.66,2a68.68,68.68,0,0,1-10.87,5.19,77,77,0,0,0,6.89,11.1A105.25,105.25,0,0,0,126.6,80.22h0C129.24,52.84,122.09,29.11,107.7,8.07ZM42.45,65.69C36.18,65.69,31,60,31,53s5-12.74,11.43-12.74S54,46,53.89,53,48.84,65.69,42.45,65.69Zm42.24,0C78.41,65.69,73.25,60,73.25,53s5-12.74,11.44-12.74S96.23,46,96.12,53,91.08,65.69,84.69,65.69Z"/></g></g></g></svg>

After

Width:  |  Height:  |  Size: 985 B

14
src/assets/github.svg Normal file
View file

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 28.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 97.6 96" style="enable-background:new 0 0 97.6 96;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FFFFFF;}
</style>
<path class="st0" d="M48.9,0C21.8,0,0,22,0,49.2C0,71,14,89.4,33.4,95.9c2.4,0.5,3.3-1.1,3.3-2.4c0-1.1-0.1-5.1-0.1-9.1
c-13.6,2.9-16.4-5.9-16.4-5.9c-2.2-5.7-5.4-7.2-5.4-7.2c-4.4-3,0.3-3,0.3-3c4.9,0.3,7.5,5.1,7.5,5.1c4.4,7.5,11.4,5.4,14.2,4.1
c0.4-3.2,1.7-5.4,3.1-6.6c-10.8-1.1-22.2-5.4-22.2-24.3c0-5.4,1.9-9.8,5-13.2c-0.5-1.2-2.2-6.3,0.5-13c0,0,4.1-1.3,13.4,5.1
c3.9-1.1,8.1-1.6,12.2-1.6s8.3,0.6,12.2,1.6c9.3-6.4,13.4-5.1,13.4-5.1c2.7,6.8,1,11.8,0.5,13c3.2,3.4,5,7.8,5,13.2
c0,18.9-11.4,23.1-22.3,24.3c1.8,1.5,3.3,4.5,3.3,9.1c0,6.6-0.1,11.9-0.1,13.5c0,1.3,0.9,2.9,3.3,2.4C83.6,89.4,97.6,71,97.6,49.2
C97.7,22,75.8,0,48.9,0z"/>
</svg>

After

Width:  |  Height:  |  Size: 1 KiB

BIN
src/assets/hero-bgel.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 MiB

BIN
src/assets/hero.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

1
src/assets/menu.svg Normal file
View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3,6H21V8H3V6M3,11H21V13H3V11M3,16H21V18H3V16Z" /></svg>

After

Width:  |  Height:  |  Size: 125 B

6
src/assets/wordmark.svg Normal file
View file

@ -0,0 +1,6 @@
<svg width="1057" height="293" viewBox="0 0 1057 293" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M0.963068 231V12.8182H87.0426C103.52 12.8182 117.582 15.7656 129.23 21.6605C140.949 27.4844 149.862 35.7585 155.97 46.483C162.149 57.1364 165.239 69.6719 165.239 84.0895C165.239 98.5781 162.114 111.043 155.864 121.483C149.614 131.852 140.558 139.807 128.697 145.347C116.908 150.886 102.632 153.656 85.8707 153.656H28.2358V116.582H78.4134C87.2202 116.582 94.5355 115.375 100.359 112.96C106.183 110.545 110.516 106.923 113.357 102.094C116.268 97.2642 117.724 91.2628 117.724 84.0895C117.724 76.8452 116.268 70.7372 113.357 65.7656C110.516 60.794 106.148 57.0298 100.253 54.473C94.429 51.8452 87.0781 50.5312 78.2003 50.5312H47.0923V231H0.963068ZM118.79 131.71L173.016 231H122.092L69.0384 131.71H118.79ZM225.004 292.364C219.251 292.364 213.854 291.902 208.811 290.979C203.839 290.126 199.72 289.026 196.453 287.676L206.68 253.798C212.007 255.432 216.801 256.32 221.062 256.462C225.395 256.604 229.124 255.609 232.249 253.479C235.445 251.348 238.037 247.726 240.026 242.612L242.689 235.688L183.989 67.3636H231.716L265.594 187.534H267.298L301.496 67.3636H349.543L285.942 248.685C282.888 257.491 278.733 265.162 273.477 271.696C268.293 278.301 261.723 283.379 253.768 286.93C245.814 290.553 236.226 292.364 225.004 292.364ZM477.703 161.327V67.3636H523.087V231H479.514V201.277H477.81C474.116 210.865 467.973 218.571 459.379 224.395C450.857 230.219 440.452 233.131 428.165 233.131C417.227 233.131 407.604 230.645 399.294 225.673C390.984 220.702 384.486 213.635 379.798 204.473C375.182 195.311 372.838 184.338 372.767 171.554V67.3636H418.151V163.457C418.222 173.116 420.814 180.751 425.928 186.362C431.041 191.973 437.895 194.778 446.489 194.778C451.957 194.778 457.071 193.536 461.83 191.05C466.588 188.493 470.423 184.729 473.335 179.757C476.318 174.786 477.774 168.642 477.703 161.327ZM559.388 67.3636H604.772V239.097C604.772 251.739 602.286 261.966 597.314 269.778C592.343 277.591 585.205 283.308 575.901 286.93C566.668 290.553 555.624 292.364 542.769 292.364C541.206 292.364 539.715 292.328 538.294 292.257C536.803 292.257 535.24 292.222 533.607 292.151V256.675C534.814 256.746 535.88 256.781 536.803 256.781C537.655 256.852 538.578 256.888 539.573 256.888C546.888 256.888 552.002 255.325 554.914 252.2C557.897 249.146 559.388 244.53 559.388 238.351V67.3636ZM581.973 46.2699C575.297 46.2699 569.544 44.0327 564.715 39.5582C559.885 35.0128 557.471 29.5795 557.471 23.2585C557.471 17.0085 559.885 11.6463 564.715 7.17188C569.544 2.62641 575.297 0.353682 581.973 0.353682C588.792 0.353682 594.58 2.62641 599.338 7.17188C604.168 11.6463 606.583 17.0085 606.583 23.2585C606.583 29.5795 604.168 35.0128 599.338 39.5582C594.58 44.0327 588.792 46.2699 581.973 46.2699ZM641.126 231V67.3636H686.51V231H641.126ZM663.925 46.2699C657.178 46.2699 651.389 44.0327 646.56 39.5582C641.801 35.0128 639.422 29.5795 639.422 23.2585C639.422 17.0085 641.801 11.6463 646.56 7.17188C651.389 2.62641 657.178 0.353682 663.925 0.353682C670.672 0.353682 676.425 2.62641 681.183 7.17188C686.013 11.6463 688.428 17.0085 688.428 23.2585C688.428 29.5795 686.013 35.0128 681.183 39.5582C676.425 44.0327 670.672 46.2699 663.925 46.2699ZM768.248 136.398V231H722.865V67.3636H766.118V96.2344H768.035C771.657 86.7173 777.73 79.1889 786.252 73.6491C794.775 68.0384 805.109 65.233 817.254 65.233C828.618 65.233 838.525 67.7187 846.977 72.6903C855.429 77.6619 861.998 84.7642 866.686 93.9972C871.373 103.159 873.717 114.097 873.717 126.81V231H828.333V134.906C828.404 124.892 825.848 117.08 820.663 111.469C815.478 105.787 808.341 102.946 799.25 102.946C793.142 102.946 787.744 104.26 783.056 106.888C778.44 109.516 774.818 113.351 772.19 118.393C769.633 123.365 768.319 129.366 768.248 136.398ZM947.412 67.3636L977.455 124.572L1008.24 67.3636H1054.8L1007.39 149.182L1056.08 231H1009.73L977.455 174.43L945.707 231H898.832L947.412 149.182L900.537 67.3636H947.412Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 3.9 KiB

View file

@ -1,209 +0,0 @@
---
import astroLogo from '../assets/astro.svg';
import background from '../assets/background.svg';
---
<div id="container">
<img id="background" src={background.src} alt="" fetchpriority="high" />
<main>
<section id="hero">
<a href="https://astro.build"
><img src={astroLogo.src} width="115" height="48" alt="Astro Homepage" /></a
>
<h1>
To get started, open the <code><pre>src/pages</pre></code> directory in your project.
</h1>
<section id="links">
<a class="button" href="https://docs.astro.build">Read our docs</a>
<a href="https://astro.build/chat"
>Join our Discord <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 127.14 96.36"
><path
fill="currentColor"
d="M107.7 8.07A105.15 105.15 0 0 0 81.47 0a72.06 72.06 0 0 0-3.36 6.83 97.68 97.68 0 0 0-29.11 0A72.37 72.37 0 0 0 45.64 0a105.89 105.89 0 0 0-26.25 8.09C2.79 32.65-1.71 56.6.54 80.21a105.73 105.73 0 0 0 32.17 16.15 77.7 77.7 0 0 0 6.89-11.11 68.42 68.42 0 0 1-10.85-5.18c.91-.66 1.8-1.34 2.66-2a75.57 75.57 0 0 0 64.32 0c.87.71 1.76 1.39 2.66 2a68.68 68.68 0 0 1-10.87 5.19 77 77 0 0 0 6.89 11.1 105.25 105.25 0 0 0 32.19-16.14c2.64-27.38-4.51-51.11-18.9-72.15ZM42.45 65.69C36.18 65.69 31 60 31 53s5-12.74 11.43-12.74S54 46 53.89 53s-5.05 12.69-11.44 12.69Zm42.24 0C78.41 65.69 73.25 60 73.25 53s5-12.74 11.44-12.74S96.23 46 96.12 53s-5.04 12.69-11.43 12.69Z"
></path></svg
>
</a>
</section>
</section>
</main>
<a href="https://astro.build/blog/astro-5/" id="news" class="box">
<svg width="32" height="32" fill="none" xmlns="http://www.w3.org/2000/svg"
><path
d="M24.667 12c1.333 1.414 2 3.192 2 5.334 0 4.62-4.934 5.7-7.334 12C18.444 28.567 18 27.456 18 26c0-4.642 6.667-7.053 6.667-14Zm-5.334-5.333c1.6 1.65 2.4 3.43 2.4 5.333 0 6.602-8.06 7.59-6.4 17.334C13.111 27.787 12 25.564 12 22.666c0-4.434 7.333-8 7.333-16Zm-6-5.333C15.111 3.555 16 5.556 16 7.333c0 8.333-11.333 10.962-5.333 22-3.488-.774-6-4-6-8 0-8.667 8.666-10 8.666-20Z"
fill="#111827"></path></svg
>
<h2>What's New in Astro 5.0?</h2>
<p>
From content layers to server islands, click to learn more about the new features and
improvements in Astro 5.0
</p>
</a>
</div>
<style>
#background {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: -1;
filter: blur(100px);
}
#container {
font-family: Inter, Roboto, 'Helvetica Neue', 'Arial Nova', 'Nimbus Sans', Arial, sans-serif;
height: 100%;
}
main {
height: 100%;
display: flex;
justify-content: center;
}
#hero {
display: flex;
align-items: start;
flex-direction: column;
justify-content: center;
padding: 16px;
}
h1 {
font-size: 22px;
margin-top: 0.25em;
}
#links {
display: flex;
gap: 16px;
}
#links a {
display: flex;
align-items: center;
padding: 10px 12px;
color: #111827;
text-decoration: none;
transition: color 0.2s;
}
#links a:hover {
color: rgb(78, 80, 86);
}
#links a svg {
height: 1em;
margin-left: 8px;
}
#links a.button {
color: white;
background: linear-gradient(83.21deg, #3245ff 0%, #bc52ee 100%);
box-shadow:
inset 0 0 0 1px rgba(255, 255, 255, 0.12),
inset 0 -2px 0 rgba(0, 0, 0, 0.24);
border-radius: 10px;
}
#links a.button:hover {
color: rgb(230, 230, 230);
box-shadow: none;
}
pre {
font-family: ui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, Consolas,
'DejaVu Sans Mono', monospace;
font-weight: normal;
background: linear-gradient(14deg, #d83333 0%, #f041ff 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
margin: 0;
}
h2 {
margin: 0 0 1em;
font-weight: normal;
color: #111827;
font-size: 20px;
}
p {
color: #4b5563;
font-size: 16px;
line-height: 24px;
letter-spacing: -0.006em;
margin: 0;
}
code {
display: inline-block;
background:
linear-gradient(66.77deg, #f3cddd 0%, #f5cee7 100%) padding-box,
linear-gradient(155deg, #d83333 0%, #f041ff 18%, #f5cee7 45%) border-box;
border-radius: 8px;
border: 1px solid transparent;
padding: 6px 8px;
}
.box {
padding: 16px;
background: rgba(255, 255, 255, 1);
border-radius: 16px;
border: 1px solid white;
}
#news {
position: absolute;
bottom: 16px;
right: 16px;
max-width: 300px;
text-decoration: none;
transition: background 0.2s;
backdrop-filter: blur(50px);
}
#news:hover {
background: rgba(255, 255, 255, 0.55);
}
@media screen and (max-height: 368px) {
#news {
display: none;
}
}
@media screen and (max-width: 768px) {
#container {
display: flex;
flex-direction: column;
}
#hero {
display: block;
padding-top: 10%;
}
#links {
flex-wrap: wrap;
}
#links a.button {
padding: 14px 18px;
}
#news {
right: 16px;
left: 16px;
bottom: 2.5rem;
max-width: 100%;
}
h1 {
line-height: 1.5;
}
}
</style>

View file

@ -0,0 +1,71 @@
<section>
<div class="comp">
<h2>Compatibility</h2>
<p>
Ryujinx has been tested on approximately 4,300 titles<br>over 4,100 boot past menus and into gameplay<br> with roughly 3,550 of those being considered playable.
</p>
</div>
</section>
<style lang="scss">
section {
max-width: 100vw;
overflow-x: hidden;
max-width: min(90vw, 1600px);
margin: 0 auto;
padding: 10rem 0;
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
@media (max-width: 768px) {
padding: 7rem 0;
max-width: 100%;
background-size: cover;
background-position: center;
}
.comp {
text-align: right;
display: flex;
flex-direction: column;
gap: 0.5rem;
flex: 1;
@media (max-width: 768px) {
max-width: min(90vw, 1600px);
margin: 0 auto;
}
p {
font-size: 1.5rem;
line-height: 1.2;
font-weight: 500;
color: #ffffff;
opacity: 0.8;
}
}
@media (max-width: 768px) {
flex-direction: column;
gap: 2rem;
.comp {
text-align: center;
h2 {
font-size: 3rem;
line-height: 1;
}
}
}
}
h2 {
font-size: 3rem;
font-weight: 750;
margin: 0;
line-height: 1;
color: #ffffff;
}
</style>

81
src/components/cta.astro Normal file
View file

@ -0,0 +1,81 @@
---
import Consts from "../lib/consts"
import CtaButton from "./ctabutton.astro"
const uaString = Astro.request.headers.get("user-agent") || ""
export const PLATFORM_LINKS = {
windows: {
href: Consts.WINDOWS_URL,
},
macOS: {
href: Consts.MACOS_URL,
},
linux: {
href: Consts.LINUX_URL,
},
linuxarm: {
href: Consts.LINUXARM_URL,
},
unknown: {
href: "/download",
},
}
type PlaformLinksType = Record<string, { store?: string; href: string }>
let os: string
if (uaString.includes("Windows")) {
os = "windows"
} else if (uaString.includes("Macintosh")) {
os = "macOS"
} else if (uaString.includes("ARM")) {
os = "linuxarm"
} else if (uaString.includes("Linux")) {
os = "linux"
} else {
os = "unknown"
}
const { href } = (PLATFORM_LINKS as PlaformLinksType)[os]
interface Props {
isDownloadPage?: boolean
}
const { isDownloadPage = false } = Astro.props
---
<div class="cta">
{
// If we're on the download page, don't show the download button if the OS is unknown
// as it only leads to the download page
!(isDownloadPage && os === "unknown") && (
<div class="dl-button">
<CtaButton label="Download" href={href} primary />
</div>
)
}
<CtaButton label="Join discord" href="https://discord.gg/ryujinx" />
</div>
<style lang="scss">
.cta {
display: flex;
flex-direction: row;
justify-content: center;
align-items: flex-start;
margin-top: 2rem;
margin-bottom: 2rem;
gap: 2rem;
@media (max-width: 768px) {
flex-direction: column;
align-items: center;
}
}
.dl-button {
display: flex;
flex-direction: column;
gap: 1rem;
}
</style>

View file

@ -0,0 +1,55 @@
---
interface Props {
label: string
href: string
primary?: boolean
}
const { label, href, primary } = Astro.props
---
<a href={href} class:list={['cta-button', primary && 'cta-button-primary']}>
<span class="cta-button-label">{label}</span>
</a>
<style lang="scss">
.cta-button {
backface-visibility: hidden;
border-radius: 12px;
width: 225px;
height: 55px;
background: #5865F2;
box-shadow: 0px 2px 4px rgba(0,0,0,0.7);
display: grid;
place-items: center;
will-change: transform;
transition: filter 0.2s var(--easing), transform 0.2s var(--easing);
&:hover {
filter: brightness(0.9);
transform: scale(0.98);
}
&:active {
filter: brightness(0.8);
transform: scale(0.96);
}
&:link, &:visited {
text-decoration: none;
}
}
.cta-button-primary {
background: linear-gradient(180deg, #FF005C 0%, #9A0239 100%);
box-shadow: 0px 2px 4px rgba(0,0,0,0.7);
}
.cta-button-label {
font-size: 1.4rem;
letter-spacing: 0.02em;
font-weight: 500;
color: white;
}
</style>

View file

@ -0,0 +1,52 @@
---
interface Props {
href: string
primary: boolean
}
const { href, primary } = Astro.props
---
<a href={href} class:list={["dl-button", primary && "primary"]}>
<slot />
</a>
<style lang="scss">
.dl-button {
padding: 0.9rem 1.5rem;
border-radius: 9999px;
font-size: 1rem;
font-weight: 550;
letter-spacing: 0.02em;
font-family: inherit;
cursor: pointer;
text-decoration: none;
transition:
background-color 0.2s,
filter 0.2s;
display: inline-block;
text-align: center;
color: white;
background-color: rgb(255 255 255 / 10%);
&:hover {
background-color: rgb(255 255 255 / 20%);
}
&:active {
background-color: rgb(255 255 255 / 30%);
}
&.primary {
background: linear-gradient(180deg, #FF005C 0%, #9A0239 100%);
&:hover {
filter: brightness(1.1);
}
&:active {
filter: brightness(0.9);
}
}
}
</style>

View file

@ -0,0 +1,51 @@
---
import type { Store } from "../lib/decl"
import DownloadButton from "./downloadbutton.astro"
interface Props {
name: string
stores: Store[]
}
const { name, stores } = Astro.props
---
<div class="dl-tile">
<h2>{name}</h2>
<slot name="description" />
<div class="grow"></div>
<div class="cta">
{
stores.map((store) => (
<DownloadButton href={store.url} primary={store.primary}>
{store.name}
</DownloadButton>
))
}
</div>
</div>
<style lang="scss">
.dl-tile {
padding: 2rem;
border-radius: 1rem;
background-color: rgba(255, 255, 255, 0.082);
display: flex;
flex-direction: column;
.grow {
flex-grow: 1;
}
.cta {
padding-top: 1rem;
}
h2 {
font-size: 1.5rem;
font-weight: 530;
letter-spacing: 0.03em;
color: white;
margin: 0;
}
}
</style>

View file

@ -0,0 +1,72 @@
<section>
<div class="t">
<h2>Get In Touch</h2>
<p>
If you have something you'd like to contribute to the fork<br> need emulator support or just want to get in touch with the team<br> or contributors join the Discord.
</p>
</div>
</section>
<style lang="scss">
section {
max-width: 100vw;
overflow-x: hidden;
max-width: min(90vw, 1600px);
margin: 0 auto;
padding: 20rem 0;
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
@media (max-width: 768px) {
padding: 5rem 0;
max-width: 100%;
background-size: cover;
background-position: center;
}
.t {
text-align: left;
display: flex;
flex-direction: column;
gap: 0.5rem;
flex: 1;
@media (max-width: 768px) {
max-width: min(90vw, 1600px);
margin: 0 auto;
}
p {
font-size: 1.5rem;
line-height: 1.2;
font-weight: 500;
color: #ffffff;
opacity: 0.8;
}
}
@media (max-width: 768px) {
flex-direction: column-reverse;
gap: 2rem;
.t {
text-align: center;
h2 {
font-size: 3rem;
line-height: 1;
}
}
}
}
h2 {
font-size: 3rem;
font-weight: 750;
margin: 0;
line-height: 1;
color: #ffffff;
}
</style>

View file

@ -0,0 +1,75 @@
---
import Cta from "../components/cta.astro"
import hero from "../assets/hero.png"
---
<header>
<h1>Nintendo Switch Emulator</h1>
<p>providing excellent accuracy and performance, <br/> a user-friendly interface and consistent builds</p>
<div class="top">
<Cta />
</div>
<img src={hero.src} alt="" class="hero" aria-hidden="true" />
</header>
<style lang="scss">
header {
background: url("../assets/hero-bgel.png");
background-size: 100%;
background-position: center;
background-repeat: no-repeat;
text-align: center;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
padding-bottom: 10rem;
padding-top: 13rem;
h1 {
font-size: 5rem;
font-weight: 750;
margin: 0;
line-height: 1.2;
z-index: 0;
@media (max-width: 1024px) {
font-size: 3rem;
line-height: 1;
}
@media (max-width: 768px) {
font-size: 3rem;
line-height: 1;
z-index: 1;
}
}
p {
font-size: 2.5em;
font-weight: 700;
z-index: 1;
}
.top {
z-index: 1;
}
.hero {
user-select: none;
pointer-events: none;
position: absolute;
top: 240px;
width: 80vw;
z-index: 0;
@media (max-width: 768px) {
top: 50vh;
transform: scale(2);
width: 50vw;
max-width: 100vw;
overflow-x: hidden;
}
}
}
</style>

View file

@ -0,0 +1,131 @@
---
import wordmark from "../../assets/wordmark.svg"
import "./styleconstants.astro"
---
<footer>
<div class="copyright-section">
<a href="/"> <img src={wordmark.src} alt="Ryujinx" draggable="false" class="wordmark" /></a>
<div class="copyright">
© {new Date().getFullYear()}
</div>
</div>
<div class="links-section">
<div class="links">
<span>Get Started</span>
<a href="/download">Download</a>
</div>
<div class="links">
<span>Wiki</span>
<a href="https://github.com/Ryubing/Ryujinx/wiki/Ryujinx-Setup-&-Configuration-Guide" target="_blank">Setup Guide</a>
</div>
<div class="links socials">
<span>Socials</span>
<a href="https://discord.gg/ryujinx">
Discord
</a>
<a href="https://bsky.app/profile/ryujinx.app">
Bluesky
</a>
<a href="https://github.com/Ryubing/Ryujinx">
GitHub
</a>
</div>
</div>
</footer>
<style lang="scss">
footer {
color: white;
background-size: cover;
background-position: center;
padding: 0;
padding: 5rem 10rem;
border-top: 2px solid;
transition:
padding 0.5s var(--easing),
flex-direction 0.5s var(--easing);
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: flex-start;
@media (max-width: 1600px) {
padding: 5rem 2rem;
}
@media (max-width: 1350px) {
flex-direction: column;
justify-content: center;
gap: 2rem;
}
.copyright-section {
.wordmark {
width: 140px;
height: auto;
}
.copyright {
font-size: 0.9rem;
margin-top: 1rem;
opacity: 0.75;
}
}
.links-section {
display: flex;
flex-direction: row;
padding-right: 45rem;
justify-content: flex-end;
align-items: flex-start;
gap: 2.5rem;
@media (max-width: 1350px) {
flex-wrap: wrap;
justify-content: flex-start;
}
@media (max-width: 600px) {
flex-direction: column;
justify-content: flex-start;
.links > span {
font-weight: 800 !important;
margin-bottom: 0 !important;
}
}
.links {
display: flex;
flex-direction: column;
gap: 0.75rem;
span {
transition:
margin-bottom 0.2s var(--easing),
font-weight 0.2s var(--easing);
font-weight: 600;
margin-bottom: 1rem;
}
.img {
display: inline-block;
}
a:link,
a:visited {
color: white;
transition:
opacity 0.2s var(--easing),
filter 0.2s var(--easing);
text-decoration: none;
&:hover {
color: #FF005C;
}
}
}
}
}
</style>

View file

@ -0,0 +1,55 @@
---
import StyleConstants from "./styleconstants.astro"
interface Props {
title: string
backgroundColor?: string
foregroundColor?: string
}
const { title, backgroundColor } = Astro.props
---
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta
name="description"content="Ryubing/Ryujinx is a fork of the discontinued Switch emulator witten in C#!"/>
<meta name="keywords" content="Ryujinx, switch emulator, fork, emulator, switch, ryubing, ldn, open-source"/>
<meta name="author" content="Ryujinx" />
<meta name="viewport" content="width=device-width" />
<link rel="icon" type="image/png" href="/favicon.png" />
<meta name="generator" content={Astro.generator} />
<title>{title}</title>
<StyleConstants />
</head>
<body>
<slot />
</body>
</html>
<style is:global define:vars={{ backgroundColor }}>
body {
max-width: 100vw;
overflow-x: hidden;
margin: 0;
padding: 0;
background-color: #090b11;
color: var(--foreground-color, white);
font-family: var(--typeface-primary);
font-optical-sizing: auto;
}
code {
font-size: 1.25em;
}
::-webkit-scrollbar {
width: 3px;
height: 3px;
}
::-webkit-scrollbar-track {
background: transparent;
}
</style>

View file

@ -0,0 +1,167 @@
---
import NavLinks from "./navlinks.astro"
import wordmark from "../../assets/wordmark.svg"
import MenuIcon from "../../assets/menu.svg"
import "./styleconstants.astro"
---
<nav class="site-navbar">
<div class="nav-inner">
<a href="/">
<img src={wordmark.src} width="100px" height="50px" font-weight="750" alt="Ryujinx" />
</a>
<div class="links desktop">
<NavLinks />
</div>
<div class="mobile">
<button aria-label="Open mobile menu">
<img src={MenuIcon.src} alt="Menu" />
</button>
</div>
</div>
<div id="mobile-menu" class="mobile-menu links">
<NavLinks />
</div>
</nav>
<style lang="scss" is:global>
nav.site-navbar {
position: absolute;
top: 0;
left: 0;
right: 0;
z-index: 1000;
.nav-inner {
padding: 3rem 0;
display: flex;
gap: 4rem;
align-items: center;
overflow-x: hidden;
max-width: min(90vw, 1600px);
margin: 0 auto;
}
.links {
display: flex;
gap: 1.5rem;
a {
color: white;
text-decoration: none;
font-weight: 500;
font-size: 1.2rem;
transition: color 0.2s var(--easing);
&:hover {
color: #FF005C;
}
}
}
.mobile > button {
background: none;
border: none;
padding: 0;
cursor: pointer;
img {
width: 2rem;
height: 2rem;
filter: invert(1);
}
}
.mobile-menu:not(.open) {
display: none;
}
@keyframes slide-down {
0% {
transform: translateY(-50vh);
}
100% {
transform: translateY(-100px);
}
}
.mobile-menu {
position: absolute;
top: 100%;
left: 0;
right: 0;
background: #090b11;
padding: 2rem 1.75rem;
padding-top: 8rem;
transform: translateY(-100px);
display: flex;
flex-direction: column;
gap: 1rem;
z-index: -1;
animation: slide-down 0.3s cubic-bezier(0.22, 1, 0.36, 1);
}
@keyframes slide-up {
0% {
transform: translateY(-100px);
}
100% {
transform: translateY(-50vh);
}
}
.mobile-menu.animate-out {
animation: slide-up 0.5s cubic-bezier(0.64, 0, 0.78, 0) forwards;
}
@media (max-width: 768px) {
.nav-inner {
padding: 2rem 0;
gap: 2rem;
justify-content: space-between;
}
.desktop {
display: none;
}
}
@media (min-width: 769px) {
.mobile {
display: none;
}
.mobile-menu {
display: none;
}
}
}
</style>
<script>
document
.querySelector<HTMLElement>(".mobile > button")!
.addEventListener("click", () => {
if (
document
.querySelector<HTMLElement>(".mobile-menu")!
.classList.contains("open")
) {
document
.querySelector<HTMLElement>(".mobile-menu")!
.classList.add("animate-out")
setTimeout(() => {
document
.querySelector<HTMLElement>(".mobile-menu")!
.classList.remove("animate-out")
document
.querySelector<HTMLElement>(".mobile-menu")!
.classList.remove("open")
}, 500)
} else {
document
.querySelector<HTMLElement>(".mobile-menu")!
.classList.add("open")
}
})
</script>

View file

@ -0,0 +1,9 @@
---
---
<a href="/download">Download</a>
<a href="/donate">Donate</a>
<a href="https://ryuldnweb.vudjun.com/">Ldn</a>
<a href="https://github.com/Ryubing/Ryujinx/wiki">Wiki</a>
<a href="https://github.com/Ryubing/Ryujinx/wiki/FAQ-and-Troubleshooting">FAQ</a>

View file

@ -0,0 +1,11 @@
---
---
<style is:global>
:root {
--typeface-primary: "Inter", sans-serif;
--typeface-mono: "Fragment Mono", monospace;
--easing: cubic-bezier(0.33, 1, 0.68, 1);
-webkit-tap-highlight-color: transparent;
}
</style>

View file

@ -0,0 +1,78 @@
<section>
<div class="open">
<h2>Open Source</h2>
<p>
Ryujinx is open source and is licensed under the MIT license.
</p>
</div>
</div>
</section>
<style lang="scss">
section {
z-index: 1;
max-width: 100vw;
overflow-x: hidden;
max-width: min(90vw, 1600px);
margin: 0 auto;
padding: 30rem 0;
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
@media (max-width: 768px) {
max-width: 100%;
background-size: cover;
background-position: center;
}
.open {
z-index: 1;
text-align: left;
display: flex;
flex-direction: column;
gap: 0.5rem;
flex: 1;
@media (max-width: 768px) {
max-width: min(90vw, 1600px);
margin: 0 auto;
}
p {
z-index: 1;
font-size: 1.5rem;
line-height: 1.2;
font-weight: 500;
color: #ffffff;
opacity: 0.8;
}
a {
color: #ffffff;
}
}
@media (max-width: 768px) {
flex-direction: column-reverse;
gap: 2rem;
.open {
text-align: center;
h2 {
font-size: 3rem;
line-height: 1;
}
}
}
}
h2 {
font-size: 3rem;
font-weight: 700;
margin: 0;
line-height: 1;
color: #ffffff;
}
</style>

View file

@ -3,9 +3,9 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<link rel="icon" type="image" href="/favicon.png" />
<meta name="generator" content={Astro.generator} />
<title>Astro Basics</title>
<title>Ryujinx - Nintendo Switch Emulator</title>
</head>
<body>
<slot />

7
src/lib/consts.ts Normal file
View file

@ -0,0 +1,7 @@
export default class Consts {
static readonly WINDOWS_URL = "https://github.com/Ryubing/Ryujinx/releases/download/1.2.81/ryujinx-1.2.81-win_x64.zip" as const;
static readonly MACOS_URL = "https://github.com/Ryubing/Ryujinx/releases/download/1.2.81/ryujinx-1.2.81-macos_universal.app.tar.gz" as const;
static readonly LINUX_URL = "https://github.com/Ryubing/Ryujinx/releases/download/1.2.81/ryujinx-1.2.81-linux_x64.tar.gz" as const;
static readonly LINUXARM_URL = "https://github.com/Ryubing/Ryujinx/releases/download/1.2.81/ryujinx-1.2.81-linux_arm64.tar.gz" as const;
static readonly GITHUB_URL = "https://github.com/Ryubing/Ryujinx/releases" as const;
}

6
src/lib/decl.ts Normal file
View file

@ -0,0 +1,6 @@
export type ChangelogProduct = "web" | "android" | "ios" | "api" | "all"
export type Store = {
name: string
url: string
primary: boolean
}

46
src/lib/fetchreleases.ts Normal file
View file

@ -0,0 +1,46 @@
import fs from "fs";
import { fileURLToPath } from "url";
import path from "path";
const __dirname = path.dirname(fileURLToPath(import.meta.url));
const GITHUB_REPO = "Ryubing/Ryujinx";
const API_URL = `https://api.github.com/repos/${GITHUB_REPO}/releases/latest`;
interface ReleaseAsset {
name: string;
browser_download_url: string;
}
async function fetchLatestRelease() {
try {
const response = await fetch(API_URL, {
headers: {
"User-Agent": "Ryujinx",
"Accept": "application/vnd.github.v3+json",
},
});
const data = await response.json();
const assets: ReleaseAsset[] = data.assets;
const downloads = {
WINDOWS_URL: assets.find(asset => asset.name.includes("win_x64.zip"))?.browser_download_url || "",
MACOS_URL: assets.find(asset => asset.name.includes("macos_universal.app.tar.gz"))?.browser_download_url || "",
LINUX_URL: assets.find(asset => asset.name.includes("linux_x64.tar.gz"))?.browser_download_url || "",
LINUXARM_URL: assets.find(asset => asset.name.includes("linux_arm64.tar.gz"))?.browser_download_url || "",
};
// update Consts class
const constsContent = `export default class Consts {
static readonly WINDOWS_URL = "${downloads.WINDOWS_URL}" as const;
static readonly MACOS_URL = "${downloads.MACOS_URL}" as const;
static readonly LINUX_URL = "${downloads.LINUX_URL}" as const;
static readonly LINUXARM_URL = "${downloads.LINUXARM_URL}" as const;
}`;
fs.writeFileSync(path.join(__dirname, "../lib/consts.ts"), constsContent);
} catch {}
}
fetchLatestRelease();

View file

@ -0,0 +1,194 @@
---
import Footer from "../../components/layout/footer.astro"
import Navbar from "../../components/layout/navbar.astro"
import MarketingLayout from "../../components/layout/marketing.astro"
export const prerender = false;
---
<MarketingLayout
title="Ryujinx - Donate"
backgroundColor="#150E2A"
>
<Navbar />
<div class="spacer"></div>
<div class="lr-pad">
<div class="center">
<h1 class="main-heading">Donate</h1>
<p class="main-heading-sub">
Want to support the project? thats awesome, thank you for supporting us!<br />
</p>
</div>
<div class="tiles">
<div class="do-tile">
<div class="header">
<img src="https://avatars.githubusercontent.com/u/69540471?v=4" height="50" width="50" alt="donut">
<h2>Donut</h2>
<span class="role">Web developer</span>
</div>
<p class="description">
hi, im donut/claire<br><br>im a hobbyist web developer currently studying software development<br><br> i currently only develop the website ur currently on but plan on contributing to the emulator itself
</p>
<div class="grow"></div>
<div class="cta">
<a class="do-button primary" href="https://ko-fi.com/smoresdonut">
Donate
</a>
</div>
</div>
<div class="do-tile">
<div class="header">
<img src="https://avatars.githubusercontent.com/u/28578990?s=160&v=4" height="50" width="50" alt="greemdev">
<h2>Greemdev</h2>
<span class="role">Fork Maintainer</span>
</div>
<p class="description" style="font-weight: 500;">
Hey there,<br><br>
I'm GreemDev.<br><br>
I'm a 22 year old hobbyist .NET and JVM developer.<br><br>
My main projects are a fork of the discontinued Switch emulator <a href="https://github.com/Ryubing/Ryujinx" style="text-decoration: underline; color: #74b9ff">Ryujinx</a>, and the Discord bot <a href="https://github.com/Ryubing/Ryujinx" style="text-decoration: underline; color: #74b9ff">Volte</a>.
</p>
<div class="grow"></div>
<div class="cta">
<a class="do-button primary" href="https://github.com/sponsors/GreemDev">
Donate
</a>
</div>
</div>
</div>
</div>
<Footer/>
<style lang="scss">
.lr-pad {
max-width: min(130ch, 90vw);
margin: 0 auto;
padding-bottom: 50px;
display: grid;
gap: 4rem;
padding-bottom: 4rem;
}
.spacer {
height: 12rem;
}
.center {
display: block;
margin: 0 auto;
text-align: center;
}
.main-heading {
font-size: 4rem;
font-weight: 750;
color: white;
line-height: 1;
}
.main-heading-sub {
font-size: 1.5rem;
color: white;
opacity: 0.7;
margin-bottom: 4rem;
line-height: 1.5;
}
.tiles {
display: grid;
gap: 2rem;
grid-template-columns: 1fr 1fr;
@media (max-width: 1024px) {
grid-template-columns: 1fr;
}
}
.do-tile {
padding: 3rem;
border-radius: 1rem;
background-color: rgba(255, 255, 255, 0.082);
display: flex;
flex-direction: column;
gap: 1rem;
.grow {
flex-grow: 1;
}
.cta {
padding-top: 1rem;
}
.description {
font-size: 1rem;
font-weight: 500;
}
}
.header {
display: flex;
align-items: center;
gap: 0.75rem;
flex-direction: column;
}
.header img {
border-radius: 50%;
width: 50px;
height: 50px;
object-fit: cover;
}
h2 {
font-size: 1.5rem;
font-weight: 530;
letter-spacing: 0.03em;
color: white;
margin: 0;
}
.role {
font-size: 1rem;
color: rgba(255, 255, 255, 0.7);
margin-top: -2px;
}
.do-button {
padding: 0.9rem 1.5rem;
border-radius: 9999px;
font-size: 1rem;
font-weight: 550;
letter-spacing: 0.02em;
font-family: inherit;
cursor: pointer;
text-decoration: none;
transition:
background-color 0.2s,
filter 0.2s;
display: inline-block;
text-align: center;
color: white;
background-color: rgb(255 255 255 / 10%);
&:hover {
background-color: rgb(255 255 255 / 20%);
}
&:active {
background-color: rgb(255 255 255 / 30%);
}
&.primary {
background: linear-gradient(180deg, #FF005C 0%, #9A0239 100%);
&:hover {
filter: brightness(1.1);
}
&:active {
filter: brightness(0.9);
}
}
}

View file

@ -0,0 +1,153 @@
---
import DownloadTile from "../../components/downloadtile.astro"
import Footer from "../../components/layout/footer.astro"
import Cta from "../../components/cta.astro"
import Navbar from "../../components/layout/navbar.astro"
import MarketingLayout from "../../components/layout/marketing.astro"
import Consts from "../../lib/consts"
export const prerender = false;
---
<MarketingLayout
title="Ryujinx - Download"
backgroundColor="#150E2A"
>
<Navbar />
<div class="spacer"></div>
<div class="lr-pad">
<div class="center">
<h1 class="main-heading">Get Ryujinx</h1>
<p class="main-heading-sub">
Download Ryujinx for windows, macOS, linux, and linux arm<br />
</p>
<Cta isDownloadPage />
</div>
<div class="tiles">
<DownloadTile
name="Windows"
stores={[
{
name: "Download",
url: Consts.WINDOWS_URL,
primary: true,
},
]}
>
<p slot="description" class="description">
Available for Windows 10 and 11.
</p>
</DownloadTile>
<DownloadTile
name="macOS"
stores={[
{
name: "Download",
url: Consts.MACOS_URL,
primary: true,
},
]}
>
<p slot="description" class="description">
Apple Silicon and Intel Macs supported.
</p>
</DownloadTile>
<DownloadTile
name="Linux"
stores={[
{
name: "Download",
url: Consts.LINUX_URL,
primary: true,
},
{
name: "GitHub",
url: Consts.GITHUB_URL,
primary: false,
},
]}
>
<p slot="description" class="description">
Available for most Linux distributions<br />
Appimage packages available on GitHub
</p>
</DownloadTile>
<DownloadTile
name="Linux ARM"
stores={[
{
name: "Download",
url: Consts.LINUXARM_URL,
primary: true,
},
]}
>
<p slot="description" class="description">
Download Ryujinx for ARM based operating systems
</p>
</DownloadTile>
</div>
</div>
<Footer />
</MarketingLayout>
<style lang="scss">
.lr-pad {
max-width: min(130ch, 90vw);
margin: 0 auto;
display: grid;
gap: 4rem;
padding-bottom: 4rem;
}
.spacer {
height: 12rem;
}
.center {
display: block;
margin: 0 auto;
text-align: center;
}
.main-heading {
font-size: 4rem;
font-weight: 750;
color: white;
line-height: 1;
}
.main-heading-sub {
font-size: 1.5rem;
color: white;
opacity: 0.7;
margin-bottom: 4rem;
line-height: 1.5;
}
.tiles {
display: grid;
gap: 2rem;
// Max 2 columns, 1 if space is too small
grid-template-columns: 1fr 1fr;
@media (max-width: 1024px) {
grid-template-columns: 1fr;
}
}
code {
font-size: 0.9em;
font-family: var(--typeface-mono);
background-color: rgb(255 255 255 / 10%);
padding: 0.1em 0.3em;
border-radius: 0.2em;
vertical-align: middle;
}
.description {
font-size: 1rem;
color: white;
opacity: 0.7;
line-height: 1.5;
}
</style>

View file

@ -1,11 +1,18 @@
---
import Welcome from '../components/Welcome.astro';
import Layout from '../layouts/Layout.astro';
// Welcome to Astro! Wondering what to do next? Check out the Astro documentation at https://docs.astro.build
// Don't want to use any of this? Delete everything in this file, the `assets`, `components`, and `layouts` directories, and start fresh.
import Layout from "../components/layout/marketing.astro"
import Navbar from "../components/layout/navbar.astro"
import Footer from "../components/layout/footer.astro"
import IndexHero from "../components/indexHero.astro"
import Copyrightsection from "../components/opensourcesection.astro"
import Compatibility from "src/components/compatibilitysection.astro"
import Getintouch from "src/components/getintouchsection.astro"
---
<Layout>
<Welcome />
</Layout>
<Layout title="Ryujinx - Nintendo Switch Emulator" backgroundColor="#090b11">
<Navbar />
<IndexHero />
<Copyrightsection />
<Compatibility />
<Getintouch />
<Footer />
</Layout>

View file

@ -1,5 +1,18 @@
{
"extends": "astro/tsconfigs/strict",
"include": [".astro/types.d.ts", "**/*"],
"exclude": ["dist"]
"compilerOptions": {
"baseUrl": ".", // Base directory for resolving modules
"paths": {
"@lib/*": ["src/lib/*"] // Alias for src/lib folder
},
"outDir": "dist",
"types": ["node"], // Add Node.js types for using fs, path, etc.
"lib": ["ESNext", "DOM"] // Include modern JavaScript and DOM library support
},
"include": [
".astro/types.d.ts", // Keep Astro types
"**/*", // Include everything in the project
"src/lib/**/*" // Explicitly include the src/lib folder
],
"exclude": ["dist"] // Exclude the dist folder
}