Initial commit

This commit is contained in:
Julian 2024-03-19 19:30:20 -04:00
commit fc2321db6e
Signed by: NotNite
GPG key ID: BD91A5402CCEB08A
18 changed files with 7550 additions and 0 deletions

21
.gitignore vendored Normal file
View file

@ -0,0 +1,21 @@
# build output
dist/
# generated types
.astro/
# dependencies
node_modules/
# logs
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
# environment variables
.env
.env.production
# macOS-specific files
.DS_Store

7
.prettierrc Normal file
View file

@ -0,0 +1,7 @@
{
"printWidth": 80,
"trailingComma": "none",
"tabWidth": 2,
"singleQuote": false,
"plugins": ["prettier-plugin-astro"]
}

8
astro.config.mjs Normal file
View file

@ -0,0 +1,8 @@
import { defineConfig } from 'astro/config';
import mdx from "@astrojs/mdx";
// https://astro.build/config
export default defineConfig({
integrations: [mdx()]
});

7135
package-lock.json generated Normal file

File diff suppressed because it is too large Load diff

22
package.json Normal file
View file

@ -0,0 +1,22 @@
{
"name": "goatcorp-website",
"type": "module",
"version": "0.0.1",
"scripts": {
"dev": "astro dev",
"start": "astro dev",
"build": "astro check && astro build",
"preview": "astro preview",
"astro": "astro"
},
"dependencies": {
"@astrojs/check": "^0.5.9",
"@astrojs/mdx": "^2.2.0",
"astro": "^4.5.6",
"typescript": "^5.4.2"
},
"devDependencies": {
"prettier": "^3.2.5",
"prettier-plugin-astro": "^0.13.0"
}
}

BIN
public/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
src/assets/header.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

BIN
src/assets/screenshot.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 171 KiB

61
src/components/Card.astro Normal file
View file

@ -0,0 +1,61 @@
---
interface Props {
title: string;
body: string;
href: string;
}
const { href, title, body } = Astro.props;
---
<li class="link-card">
<a href={href}>
<h2>
{title}
<span>&rarr;</span>
</h2>
<p>
{body}
</p>
</a>
</li>
<style>
.link-card {
list-style: none;
display: flex;
padding: 1px;
background-color: #23262d;
background-image: none;
background-size: 400%;
border-radius: 7px;
background-position: 100%;
transition: background-position 0.6s cubic-bezier(0.22, 1, 0.36, 1);
box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.1);
}
.link-card > a {
width: 100%;
text-decoration: none;
line-height: 1.4;
padding: calc(1.5rem - 1px);
border-radius: 8px;
color: white;
background-color: #23262d;
opacity: 0.8;
}
h2 {
margin: 0;
font-size: 1.25rem;
transition: color 0.6s cubic-bezier(0.22, 1, 0.36, 1);
}
p {
margin-top: 0.5rem;
margin-bottom: 0;
}
.link-card:is(:hover, :focus-within) {
background-position: 0;
background-image: var(--accent-gradient);
}
.link-card:is(:hover, :focus-within) h2 {
color: rgb(var(--accent-light));
}
</style>

View file

@ -0,0 +1,37 @@
---
import { Image } from "astro:assets";
import header from "../assets/header.png";
---
<header>
<Image src={header} alt="XIVLauncher logo" class="headerLogo" />
<a href="/">Home</a>
<a href="/faq">FAQ</a>
<a href="https://discord.gg/3NMcUV5">Discord</a>
</header>
<style>
header,
.headerLogo {
height: 3rem;
}
header {
display: flex;
flex-direction: row;
gap: 2ch;
align-items: center;
margin-bottom: 1rem;
}
a {
color: var(--fg);
text-decoration: none;
font-weight: 500;
font-size: 1rem;
}
.headerLogo {
width: auto;
}
</style>

View file

@ -0,0 +1,76 @@
---
import { Image } from "astro:assets";
import screenshot from "../assets/screenshot.png";
import Download from "../components/icons/Download.astro";
import FAQ from "../components/icons/FAQ.astro";
---
<div class="screenshotDownloadContainer">
<h1>A custom launcher for FFXIV</h1>
<div class="screenshotDownloadContent">
<a
class="download"
href="https://github.com/goatcorp/FFXIVQuickLauncher/releases/latest"
>
<Download />
Download
</a>
<a class="faq" href="/faq"><FAQ /> FAQ and Help</a>
</div>
<Image src={screenshot} alt="XIVLauncher screenshot" />
</div>
<style>
img {
height: auto;
max-width: 100%;
}
h1 {
text-align: center;
}
.screenshotDownloadContainer {
display: flex;
flex-direction: column;
width: 100%;
}
.screenshotDownloadContent {
text-align: center;
margin-bottom: 1.5rem;
display: flex;
flex-direction: row;
justify-content: center;
gap: 0.5rem;
}
a {
padding: 0.75rem;
border-radius: 0.25rem;
color: var(--fg);
text-decoration: none;
}
.download > svg {
vertical-align: bottom;
}
.faq > svg {
vertical-align: -0.1em;
}
a:hover {
text-decoration: underline;
}
.download {
background-color: var(--xl);
}
.faq {
background-color: var(--card);
}
</style>

View file

@ -0,0 +1,16 @@
---
const props = Astro.props;
---
<svg
xmlns="http://www.w3.org/2000/svg"
width="1em"
height="1em"
viewBox="0 0 24 24"
{...props}
>
<path
fill="currentColor"
d="M2 12h2v5h16v-5h2v5c0 1.11-.89 2-2 2H4a2 2 0 0 1-2-2zm10 3l5.55-5.46l-1.42-1.41L13 11.25V2h-2v9.25L7.88 8.13L6.46 9.55z"
></path>
</svg>

View file

@ -0,0 +1,16 @@
---
const props = Astro.props;
---
<svg
xmlns="http://www.w3.org/2000/svg"
width="1em"
height="1em"
viewBox="0 0 24 24"
{...props}
>
<path
fill="currentColor"
d="M18 22a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2h-6v7L9.5 7.5L7 9V2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2z"
></path>
</svg>

1
src/env.d.ts vendored Normal file
View file

@ -0,0 +1 @@
/// <reference types="astro/client" />

72
src/layouts/Layout.astro Normal file
View file

@ -0,0 +1,72 @@
---
import Header from "../components/Header.astro";
interface Props {
title: string;
description: string;
}
const { title, description } = Astro.props;
---
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>{title}</title>
<meta name="description" content={description} />
<meta name="viewport" content="width=device-width" />
<link rel="icon" type="image/icon" href="/favicon.ico" />
<meta name="generator" content={Astro.generator} />
</head>
<body>
<Header />
<slot />
</body>
</html>
<style is:global>
:root {
--fg: #ececec;
--fgalt: #8d8d8d;
--bg: #303030;
--card: #424242;
--xl: #2196f3;
--dalamud: #ff0000;
}
@media (prefers-color-scheme: light) {
:root {
--fg: #303030;
--bg: #ececec;
--card: #f5f5f5;
}
}
html {
margin: 0;
padding: 0;
width: 100vw;
height: 100vh;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen,
Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif;
font-size: 1.2rem;
background-color: var(--bg);
color: var(--fg);
}
body {
max-width: min(100vw, 50rem);
margin: 0 auto;
padding: 1rem;
}
a {
color: var(--xl);
}
footer {
color: var(--fgalt);
}
</style>

View file

@ -0,0 +1,10 @@
---
import Layout from "./Layout.astro";
const { frontmatter } = Astro.props;
---
<Layout title={frontmatter.title} description={frontmatter.description}>
<main>
<slot />
</main>
</Layout>

65
src/pages/index.mdx Normal file
View file

@ -0,0 +1,65 @@
---
title: XIVLauncher
description: A faster launcher for FFXIV with addons and enhancements
layout: ../layouts/Markdown.astro
---
import ScreenshotDownload from "../components/ScreenshotDownload.astro";
<ScreenshotDownload />
## Why?
The original FFXIV launcher is slow and cannot save your password. This project aims to fix that and add some QoL features to the game, such as:
- Auto-login
- Fast patching
- Saving your account password & logging into multiple accounts
- Game install repair
- In-game plugin system
## How to install the launcher
[Download the latest "Setup.exe" from the releases](https://github.com/goatcorp/FFXIVQuickLauncher/releases/latest) page and run it. XIVLauncher will start and will be installed to your start menu.
To uninstall, you can use the Windows Programs & Apps menu or right click XIVLauncher in your start menu.
**Attention!** If you receive errors during the installation or if the launcher doesn't work correctly, make sure to **check your antivirus** first and disable it for XIVLauncher. Many commercial antivirus programs detect XIVLauncher as a false positive. You can check for yourself on VirusTotal. If you need any help with this, please [check our FAQ](https://goatcorp.github.io/faq/xl_troubleshooting#q-how-do-i-whitelist-xivlauncher-and-dalamud-so-my-antivirus-leaves-them-alone) or join our Discord channel.
## On Steam Deck and Desktop Linux
XIVLauncher now has a native Linux version that works on Steam Deck and Desktop Linux - no more messing around with scripts and command lines, just a few easy steps to install the game and add it to Steam, with a Wine version especially tuned to FFXIV. [Click here to read a comprehensive guide.](/todo)
## How to install plugins
XIVLauncher supports the installation of plugins made by community developers in-game. Open the system menu in-game by pressing Escape, and then select "Dalamud Plugins" from there. You can also use the `/xlplugins` command in chat. If the command is not found, or the options don't show up, make sure that the in-game addon is enabled in the launcher settings.
## Need any help?
[Please check out our exhaustive FAQ](/faq), you may find what you need there. You can also [join our Discord server](https://discord.gg/3NMcUV5) and ask our incredibly forthcoming community.
## Is XIVLauncher safe to use?
We put a lot of effort into ensuring that XIVLauncher is safe to use for everyone. Please read through our [FAQ entry](/todo) on this matter if you want to know more.
## Plugin API
XIVLauncher lets you use many community-created plugins that improve your game. To make your own in-game plugins for XIVLauncher, check out the [API documentation](https://dalamud.dev/) and the [sample plugin](https://github.com/goatcorp/SamplePlugin). If you want to contribute to the plugin API itself, you can check it out [here](https://github.com/goatcorp/Dalamud).
## Is this cheating?
We don't think so - our official guideline for plugins on this launcher is this:
Make sure that your plugin does not directly interact with the game servers in a way that is...
1. *outside of specification*, as in allowing the player to do things or submit data to the server that would not be possible by normal means or by a normal player on PC or PS4.
2. *automatic*, as in polling data or making requests without direct interaction from the user which could create unwanted load on the server or give away that XIVLauncher is being used.
3. *circumvent paywalls*, as in any attempts to bypass restrictions that require purchase to be lifted such as enabling access to mog station emotes.
We feel like that this offers developers the *freedom to improve the game's functionality* in ways that SE can't, while officially disallowing plugins that can give *unfair advantages over players on other platforms*.
## Disclaimer
XIVLauncher is not in-line with Square Enix ToS. We are doing our best to make it safe to use for everyone, and to our knowledge, no one ever got into trouble for using XIVLauncher, but please be aware that it is a possibility. You can read through our [FAQ entry](/todo) on this matter if you want to know more.
<footer>
FINAL FANTASY is a registered trademark of Square Enix Holdings Co., Ltd. FINAL FANTASY XIV © 2010-2024 SQUARE ENIX CO., LTD. All Rights Reserved. We are not affiliated with SQUARE ENIX CO., LTD. in any way.
</footer>

3
tsconfig.json Normal file
View file

@ -0,0 +1,3 @@
{
"extends": "astro/tsconfigs/strict"
}