Compare commits
No commits in common. "revert-1-refine-website" and "main" have entirely different histories.
revert-1-r
...
main
80
.github/workflows/deploy.yml
vendored
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
name: Deploy Next.js site to Pages
|
||||
|
||||
on:
|
||||
# Runs on pushes targeting the main branch
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
|
||||
# Allows you to run this workflow manually from the Actions tab
|
||||
workflow_dispatch:
|
||||
|
||||
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
|
||||
permissions:
|
||||
contents: read
|
||||
pages: write
|
||||
id-token: write
|
||||
|
||||
# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
|
||||
# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
|
||||
concurrency:
|
||||
group: "pages"
|
||||
cancel-in-progress: false
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- uses: pnpm/action-setup@v4
|
||||
name: Install pnpm
|
||||
with:
|
||||
version: 10
|
||||
run_install: false
|
||||
|
||||
- name: Install Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 22
|
||||
cache: 'pnpm'
|
||||
|
||||
- name: Install dependencies
|
||||
run: pnpm install
|
||||
|
||||
- name: Setup Pages
|
||||
id: setup_pages
|
||||
uses: actions/configure-pages@v5
|
||||
|
||||
- name: Restore cache
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: |
|
||||
.next/cache
|
||||
# Generate a new cache whenever packages or source files change.
|
||||
key: ${{ runner.os }}-nextjs-${{ hashFiles('**/pnpm-lock.yaml') }}-${{ hashFiles('**.[jt]s', '**.[jt]sx') }}
|
||||
# If source files changed but packages didn't, rebuild from a prior cache.
|
||||
restore-keys: |
|
||||
${{ runner.os }}-nextjs-${{ hashFiles('**/pnpm-lock.yaml') }}-
|
||||
|
||||
- name: Build with Next.js
|
||||
run: pnpm run build
|
||||
env:
|
||||
PAGES_BASE_PATH: ${{ steps.setup_pages.outputs.base_path }}
|
||||
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-pages-artifact@v3
|
||||
with:
|
||||
path: ./out
|
||||
|
||||
deploy:
|
||||
environment:
|
||||
name: github-pages
|
||||
url: ${{ steps.deployment.outputs.page_url }}
|
||||
runs-on: ubuntu-latest
|
||||
needs: build
|
||||
steps:
|
||||
- name: Deploy to GitHub Pages
|
||||
id: deployment
|
||||
uses: actions/deploy-pages@v4
|
||||
41
.github/workflows/nuxtjs.yml
vendored
|
|
@ -1,41 +0,0 @@
|
|||
# https://github.com/actions/deploy-pages#usage
|
||||
name: Deploy to GitHub Pages
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- run: corepack enable
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: "20"
|
||||
# Pick your own package manager and build script
|
||||
- run: npm install
|
||||
- run: npx nuxt build --preset github_pages
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-pages-artifact@v3
|
||||
with:
|
||||
path: ./.output/public
|
||||
# Deployment job
|
||||
deploy:
|
||||
# Add a dependency to the build job
|
||||
needs: build
|
||||
# Grant GITHUB_TOKEN the permissions required to make a Pages deployment
|
||||
permissions:
|
||||
pages: write # to deploy to Pages
|
||||
id-token: write # to verify the deployment originates from an appropriate source
|
||||
# Deploy to the github_pages environment
|
||||
environment:
|
||||
name: github_pages
|
||||
url: ${{ steps.deployment.outputs.page_url }}
|
||||
# Specify runner + deployment step
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Deploy to GitHub Pages
|
||||
id: deployment
|
||||
uses: actions/deploy-pages@v4
|
||||
53
.gitignore
vendored
|
|
@ -1,24 +1,39 @@
|
|||
# Nuxt dev/build outputs
|
||||
.output
|
||||
.data
|
||||
.nuxt
|
||||
.nitro
|
||||
.cache
|
||||
dist
|
||||
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
|
||||
|
||||
# Node dependencies
|
||||
node_modules
|
||||
# dependencies
|
||||
/node_modules
|
||||
/.pnp
|
||||
.pnp.js
|
||||
.yarn/install-state.gz
|
||||
|
||||
# Logs
|
||||
logs
|
||||
*.log
|
||||
# testing
|
||||
/coverage
|
||||
|
||||
# Misc
|
||||
# next.js
|
||||
/.next/
|
||||
/out/
|
||||
|
||||
# production
|
||||
/build
|
||||
|
||||
# misc
|
||||
.DS_Store
|
||||
.fleet
|
||||
.idea
|
||||
*.pem
|
||||
|
||||
# Local env files
|
||||
.env
|
||||
.env.*
|
||||
!.env.example
|
||||
# debug
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
|
||||
# local env files
|
||||
.env*.local
|
||||
|
||||
# vercel
|
||||
.vercel
|
||||
|
||||
# typescript
|
||||
*.tsbuildinfo
|
||||
next-env.d.ts
|
||||
|
||||
.contentlayer
|
||||
.content-collections
|
||||
3
.gitmodules
vendored
|
|
@ -1,3 +0,0 @@
|
|||
[submodule "drop-base"]
|
||||
path = drop-base
|
||||
url = https://github.com/Drop-OSS/drop-base.git
|
||||
|
|
@ -658,4 +658,4 @@ specific requirements.
|
|||
You should also get your employer (if you work as a programmer) or school,
|
||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||
For more information on this, and how to apply and follow the GNU AGPL, see
|
||||
<https://www.gnu.org/licenses/>.
|
||||
<https://www.gnu.org/licenses/>.
|
||||
13
app.vue
|
|
@ -1,13 +0,0 @@
|
|||
<template>
|
||||
<NuxtLayout>
|
||||
<NuxtPage />
|
||||
</NuxtLayout>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
useHead({
|
||||
titleTemplate(title) {
|
||||
return title ? `${title} | Drop OSS` : "Drop OSS";
|
||||
},
|
||||
});
|
||||
</script>
|
||||
|
|
@ -1,69 +0,0 @@
|
|||
$motiva: (
|
||||
("MotivaSansThin.ttf", "ttf", 100, normal),
|
||||
("MotivaSansLight.woff.ttf", "woff", 300, normal),
|
||||
("MotivaSansRegular.woff.ttf", "woff", 400, normal),
|
||||
("MotivaSansMedium.woff.ttf", "woff", 500, normal),
|
||||
("MotivaSansBold.woff.ttf", "woff", 600, normal),
|
||||
("MotivaSansExtraBold.ttf", "woff", 700, normal),
|
||||
("MotivaSansBlack.woff.ttf", "woff", 900, normal)
|
||||
);
|
||||
|
||||
$helvetica: (
|
||||
("Helvetica.woff", "woff", 400, normal),
|
||||
("Helvetica-Oblique.woff", "woff", 400, italic),
|
||||
("Helvetica-Bold.woff", "woff", 600, normal),
|
||||
("Helvetica-BoldOblique.woff", "woff", 600, italic),
|
||||
("helvetica-light-587ebe5a59211.woff2", "woff2", 300, normal)
|
||||
);
|
||||
|
||||
@each $file, $format, $weight, $style in $motiva {
|
||||
@font-face {
|
||||
font-family: "Motiva Sans";
|
||||
src: url("/fonts/motiva/#{$file}") format($format);
|
||||
font-weight: $weight;
|
||||
font-style: $style;
|
||||
}
|
||||
}
|
||||
|
||||
@each $file, $format, $weight, $style in $helvetica {
|
||||
@font-face {
|
||||
font-family: "Helvetica";
|
||||
src: url("/fonts/helvetica/#{$file}") format($format);
|
||||
font-weight: $weight;
|
||||
font-style: $style;
|
||||
}
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: "Inter";
|
||||
src: url("/fonts/inter/InterVariable.ttf");
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: "Inter";
|
||||
src: url("/fonts/inter/InterVariable-Italic.ttf");
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.carousel__icon {
|
||||
color: #f4f4f5;
|
||||
}
|
||||
.carousel__pagination-button::after {
|
||||
background-color: #3f3f46;
|
||||
border-radius: 999999px;
|
||||
}
|
||||
.carousel__pagination-button:hover::after {
|
||||
background-color: #27272a;
|
||||
border-radius: 999999px;
|
||||
}
|
||||
.carousel__pagination-button--active::after {
|
||||
background-color: #a1a1aa;
|
||||
}
|
||||
.carousel__pagination-button--active:hover::after {
|
||||
background-color: #d4d4d8;
|
||||
}
|
||||
|
||||
html {
|
||||
background-color: oklch(0.21 0.006 285.885);
|
||||
}
|
||||
|
Before Width: | Height: | Size: 5.6 KiB |
|
Before Width: | Height: | Size: 3 MiB |
|
Before Width: | Height: | Size: 78 KiB |
|
|
@ -1,27 +0,0 @@
|
|||
<template>
|
||||
<div class="flex flex-row flex-wrap gap-2 justify-center">
|
||||
<button
|
||||
v-for="(_, i) in amount"
|
||||
@click="() => slideTo(i)"
|
||||
:class="[
|
||||
currentSlide == i ? 'bg-blue-600 w-6' : 'bg-zinc-700 w-3',
|
||||
'transition-all cursor-pointer h-2 rounded-full',
|
||||
]"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
const maxSlide = inject("maxSlide", ref(1));
|
||||
const minSlide = inject("minSlide", ref(1));
|
||||
const currentSlide = inject("currentSlide", ref(1));
|
||||
const nav: { slideTo?: (index: number) => any } = inject("nav", {});
|
||||
|
||||
const amount = computed(() => maxSlide.value - minSlide.value + 1);
|
||||
|
||||
function slideTo(index: number) {
|
||||
if (!nav.slideTo) return console.warn(`error moving slide: nav not defined`);
|
||||
const offsetIndex = index + minSlide.value;
|
||||
nav.slideTo(offsetIndex);
|
||||
}
|
||||
</script>
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
<template>
|
||||
<span class="inline-flex items-center rounded-md bg-blue-600/10 px-2 py-1 text-xs font-medium text-blue-400 ring-1 ring-blue-600/40 ring-inset">Coming Soon™</span>
|
||||
</template>
|
||||
|
|
@ -1,72 +0,0 @@
|
|||
<template>
|
||||
<footer>
|
||||
<div class="mx-auto max-w-7xl overflow-hidden px-6 py-20 sm:py-24 lg:px-8">
|
||||
<nav
|
||||
class="-mb-6 flex flex-wrap justify-center gap-x-12 gap-y-3 text-sm/6"
|
||||
aria-label="Footer"
|
||||
>
|
||||
<a
|
||||
v-for="item in navigation.main"
|
||||
:key="item.name"
|
||||
:href="item.href"
|
||||
class="text-zinc-400 hover:text-white"
|
||||
>{{ item.name }}</a
|
||||
>
|
||||
</nav>
|
||||
<div class="mt-16 flex justify-center gap-x-10">
|
||||
<a
|
||||
v-for="item in navigation.social"
|
||||
:key="item.name"
|
||||
:href="item.href"
|
||||
class="text-zinc-400 hover:text-zinc-300"
|
||||
>
|
||||
<span class="sr-only">{{ item.name }}</span>
|
||||
<component :is="item.icon" class="size-6" aria-hidden="true" />
|
||||
</a>
|
||||
</div>
|
||||
<p class="mt-10 text-center text-sm/6 text-zinc-400">
|
||||
© {{ new Date().getFullYear() }} Drop OSS. Licensed under GNU
|
||||
Affero General Public License v3.0.
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { defineComponent, h } from "vue";
|
||||
|
||||
const navigation = {
|
||||
main: [
|
||||
],
|
||||
social: [
|
||||
{
|
||||
name: "GitHub",
|
||||
href: "https://github.com/Drop-OSS/",
|
||||
icon: defineComponent({
|
||||
render: () =>
|
||||
h("svg", { fill: "currentColor", viewBox: "0 0 24 24" }, [
|
||||
h("path", {
|
||||
"fill-rule": "evenodd",
|
||||
d: "M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z",
|
||||
"clip-rule": "evenodd",
|
||||
}),
|
||||
]),
|
||||
}),
|
||||
},
|
||||
{
|
||||
name: "YouTube",
|
||||
href: "#",
|
||||
icon: defineComponent({
|
||||
render: () =>
|
||||
h("svg", { fill: "currentColor", viewBox: "0 0 24 24" }, [
|
||||
h("path", {
|
||||
"fill-rule": "evenodd",
|
||||
d: "M19.812 5.418c.861.23 1.538.907 1.768 1.768C21.998 8.746 22 12 22 12s0 3.255-.418 4.814a2.504 2.504 0 0 1-1.768 1.768c-1.56.419-7.814.419-7.814.419s-6.255 0-7.814-.419a2.505 2.505 0 0 1-1.768-1.768C2 15.255 2 12 2 12s0-3.255.417-4.814a2.507 2.507 0 0 1 1.768-1.768C5.744 5 11.998 5 11.998 5s6.255 0 7.814.418ZM15.194 12 10 15V9l5.194 3Z",
|
||||
"clip-rule": "evenodd",
|
||||
}),
|
||||
]),
|
||||
}),
|
||||
},
|
||||
],
|
||||
};
|
||||
</script>
|
||||
|
|
@ -1,253 +0,0 @@
|
|||
<template>
|
||||
<header class="isolate z-10 absolute top-0 inset-x-0">
|
||||
<nav
|
||||
class="mx-auto flex max-w-7xl items-center justify-between p-6 lg:px-8"
|
||||
aria-label="Global"
|
||||
>
|
||||
<div class="flex lg:flex-1">
|
||||
<NuxtLink href="/" class="-m-1.5 p-1.5">
|
||||
<span class="sr-only">Drop</span>
|
||||
<Logo class="h-8 w-auto" />
|
||||
</NuxtLink>
|
||||
</div>
|
||||
<div class="flex lg:hidden">
|
||||
<button
|
||||
type="button"
|
||||
class="-m-2.5 inline-flex items-center justify-center rounded-md p-2.5 text-zinc-300"
|
||||
@click="mobileMenuOpen = true"
|
||||
>
|
||||
<span class="sr-only">Open main menu</span>
|
||||
<Bars3Icon class="size-6" aria-hidden="true" />
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<PopoverGroup class="hidden lg:flex lg:gap-x-12">
|
||||
<!--
|
||||
<Popover>
|
||||
<PopoverButton
|
||||
class="flex items-center gap-x-1 text-sm/6 font-semibold text-zinc-100"
|
||||
>
|
||||
Features
|
||||
<ChevronDownIcon
|
||||
class="size-5 flex-none text-zinc-400"
|
||||
aria-hidden="true"
|
||||
/>
|
||||
</PopoverButton>
|
||||
|
||||
<transition
|
||||
enter-active-class="transition ease-out duration-200"
|
||||
enter-from-class="opacity-0 -translate-y-1"
|
||||
enter-to-class="opacity-100 translate-y-0"
|
||||
leave-active-class="transition ease-in duration-150"
|
||||
leave-from-class="opacity-100 translate-y-0"
|
||||
leave-to-class="opacity-0 -translate-y-1"
|
||||
>
|
||||
<PopoverPanel
|
||||
class="absolute inset-x-0 top-0 -z-10 bg-zinc-900 pt-14 shadow-lg ring-1 ring-zinc-900/5"
|
||||
>
|
||||
<div
|
||||
class="mx-auto grid max-w-7xl grid-cols-4 gap-x-4 px-6 py-10 lg:px-8 xl:gap-x-8"
|
||||
>
|
||||
<div
|
||||
v-for="item in features"
|
||||
:key="item.name"
|
||||
class="transition group relative rounded-lg p-6 text-sm/6 hover:bg-zinc-800"
|
||||
>
|
||||
<div
|
||||
class="transition flex size-11 items-center justify-center rounded-lg bg-zinc-950 group-hover:bg-zinc-900"
|
||||
>
|
||||
<component
|
||||
:is="item.icon"
|
||||
class="transition size-6 text-blue-600 group-hover:text-blue-500"
|
||||
aria-hidden="true"
|
||||
/>
|
||||
</div>
|
||||
<NuxtLink
|
||||
:href="item.href"
|
||||
class="transition mt-6 block font-semibold text-zinc-100"
|
||||
>
|
||||
{{ item.name }}
|
||||
<span class="absolute inset-0" />
|
||||
</NuxtLink>
|
||||
<p class="mt-1 text-zinc-400">{{ item.description }}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="bg-zinc-950 h-3" />
|
||||
</PopoverPanel>
|
||||
</transition>
|
||||
</Popover>
|
||||
-->
|
||||
|
||||
<NuxtLink
|
||||
href="/"
|
||||
class="text-sm/6 font-semibold text-zinc-100"
|
||||
>Home</NuxtLink
|
||||
>
|
||||
<NuxtLink
|
||||
href="/comparison"
|
||||
class="text-sm/6 font-semibold text-zinc-100"
|
||||
>Comparison</NuxtLink
|
||||
>
|
||||
<!--
|
||||
<a href="#" class="text-sm/6 font-semibold text-zinc-100"
|
||||
>Marketplace</a
|
||||
>
|
||||
<a href="#" class="text-sm/6 font-semibold text-zinc-100">Company</a>
|
||||
-->
|
||||
</PopoverGroup>
|
||||
|
||||
<div class="hidden lg:flex" />
|
||||
<div class="hidden lg:flex lg:flex-1 lg:justify-end">
|
||||
<a
|
||||
href="https://wiki.droposs.org/guides/quickstart.html"
|
||||
class="text-sm/6 font-semibold text-zinc-100"
|
||||
>Quickstart <span aria-hidden="true">→</span></a
|
||||
>
|
||||
</div>
|
||||
</nav>
|
||||
<Dialog
|
||||
class="lg:hidden"
|
||||
@close="mobileMenuOpen = false"
|
||||
:open="mobileMenuOpen"
|
||||
>
|
||||
<div class="fixed inset-0 z-10" />
|
||||
<DialogPanel
|
||||
class="fixed inset-y-0 right-0 z-10 w-full overflow-y-auto bg-zinc-900 px-6 py-6 sm:max-w-sm sm:ring-1 sm:ring-zinc-900/10"
|
||||
>
|
||||
<div class="flex items-center justify-between">
|
||||
<NuxtLink href="/" class="-m-1.5 p-1.5">
|
||||
<span class="sr-only">Your Company</span>
|
||||
<Logo class="h-8 w-auto" alt="Drop logo" />
|
||||
</NuxtLink>
|
||||
<button
|
||||
type="button"
|
||||
class="-m-2.5 rounded-md p-2.5 text-zinc-400"
|
||||
@click="mobileMenuOpen = false"
|
||||
>
|
||||
<span class="sr-only">Close menu</span>
|
||||
<XMarkIcon class="size-6" aria-hidden="true" />
|
||||
</button>
|
||||
</div>
|
||||
<div class="mt-6 flow-root">
|
||||
<div class="-my-6 divide-y divide-zinc-500/10">
|
||||
<div class="space-y-2 py-6">
|
||||
<!--<Disclosure as="div" class="-mx-3" v-slot="{ open }">
|
||||
<DisclosureButton
|
||||
class="flex w-full items-center justify-between rounded-lg py-2 pl-3 pr-3.5 text-base/7 font-semibold text-zinc-100 hover:bg-zinc-800"
|
||||
>
|
||||
Product
|
||||
<ChevronDownIcon
|
||||
:class="[open ? 'rotate-180' : '', 'size-5 flex-none']"
|
||||
aria-hidden="true"
|
||||
/>
|
||||
</DisclosureButton>
|
||||
<DisclosurePanel class="mt-2 space-y-2">
|
||||
<DisclosureButton
|
||||
v-for="item in [...products, ...callsToAction]"
|
||||
:key="item.name"
|
||||
as="a"
|
||||
:href="item.href"
|
||||
class="block rounded-lg py-2 pl-6 pr-3 text-sm/7 font-semibold text-zinc-300 hover:bg-zinc-800"
|
||||
>{{ item.name }}</DisclosureButton
|
||||
>
|
||||
</DisclosurePanel>
|
||||
</Disclosure>-->
|
||||
<NuxtLink
|
||||
href="/"
|
||||
class="-mx-3 block rounded-lg px-3 py-2 text-base/7 font-semibold text-zinc-100 hover:bg-zinc-800"
|
||||
>Home</NuxtLink
|
||||
>
|
||||
<NuxtLink
|
||||
href="/comparison"
|
||||
class="-mx-3 block rounded-lg px-3 py-2 text-base/7 font-semibold text-zinc-100 hover:bg-zinc-800"
|
||||
>Comparison</NuxtLink
|
||||
>
|
||||
<NuxtLink
|
||||
href="https://wiki.droposs.org/"
|
||||
class="-mx-3 block rounded-lg px-3 py-2 text-base/7 font-semibold text-zinc-100 hover:bg-zinc-800"
|
||||
>Documentation</NuxtLink
|
||||
>
|
||||
</div>
|
||||
<div class="py-6">
|
||||
<a
|
||||
href="https://wiki.droposs.org/guides/quickstart.html"
|
||||
class="-mx-3 block rounded-lg px-3 py-2.5 text-base/7 font-semibold text-zinc-100 hover:bg-zinc-800"
|
||||
>Get started →</a
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</DialogPanel>
|
||||
</Dialog>
|
||||
</header>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { ref } from "vue";
|
||||
import {
|
||||
Dialog,
|
||||
DialogPanel,
|
||||
Disclosure,
|
||||
DisclosureButton,
|
||||
DisclosurePanel,
|
||||
Popover,
|
||||
PopoverButton,
|
||||
PopoverGroup,
|
||||
PopoverPanel,
|
||||
} from "@headlessui/vue";
|
||||
import {
|
||||
Bars3Icon,
|
||||
ChartPieIcon,
|
||||
CursorArrowRaysIcon,
|
||||
FingerPrintIcon,
|
||||
ServerStackIcon,
|
||||
ShareIcon,
|
||||
SquaresPlusIcon,
|
||||
XMarkIcon,
|
||||
} from "@heroicons/vue/24/outline";
|
||||
import {
|
||||
ChevronDownIcon,
|
||||
PhoneIcon,
|
||||
PlayCircleIcon,
|
||||
RectangleGroupIcon,
|
||||
} from "@heroicons/vue/20/solid";
|
||||
import SteamIcon from "./SteamIcon.vue";
|
||||
|
||||
const features = [
|
||||
{
|
||||
name: "Library Management",
|
||||
description:
|
||||
"Learn how Drop can help you manage your library, and enhance it with metadata.",
|
||||
href: "/features/library",
|
||||
icon: ServerStackIcon,
|
||||
},
|
||||
{
|
||||
name: "Sharing",
|
||||
description:
|
||||
"Learn how Drop allows you to share your game library with friends & family.",
|
||||
href: "/features/sharing",
|
||||
icon: ShareIcon,
|
||||
},
|
||||
{
|
||||
name: "Steamworks",
|
||||
description:
|
||||
"Learn how Drop's Steamworks library can emulate Steam's features on your Drop server.",
|
||||
href: "#",
|
||||
icon: SteamIcon,
|
||||
},
|
||||
{
|
||||
name: "Integrations",
|
||||
description:
|
||||
"Learn how to integrate your other tools and software with Drop.",
|
||||
href: "#",
|
||||
icon: SquaresPlusIcon,
|
||||
},
|
||||
];
|
||||
|
||||
const router = useRouter();
|
||||
router.afterEach(() => {
|
||||
mobileMenuOpen.value = false;
|
||||
});
|
||||
|
||||
const mobileMenuOpen = ref(false);
|
||||
</script>
|
||||
|
|
@ -1,17 +0,0 @@
|
|||
<template>
|
||||
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
<svg
|
||||
viewBox="-1.5 0 259 259"
|
||||
version="1.1"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
preserveAspectRatio="xMidYMid"
|
||||
>
|
||||
<g>
|
||||
<path
|
||||
d="M127.778579,0 C60.4203546,0 5.24030561,52.412282 0,119.013983 L68.7236558,147.68805 C74.5451924,143.665561 81.5845466,141.322185 89.1497766,141.322185 C89.8324924,141.322185 90.5059824,141.340637 91.1702465,141.377541 L121.735621,96.668877 L121.735621,96.0415165 C121.735621,69.1388208 143.425688,47.2457835 170.088511,47.2457835 C196.751333,47.2457835 218.441401,69.1388208 218.441401,96.0415165 C218.441401,122.944212 196.751333,144.846475 170.088511,144.846475 C169.719475,144.846475 169.359666,144.83725 168.99063,144.828024 L125.398299,176.205276 C125.425977,176.786507 125.444428,177.367738 125.444428,177.939743 C125.444428,198.144443 109.160732,214.575753 89.1497766,214.575753 C71.5836817,214.575753 56.8868387,201.917832 53.5655182,185.163615 L4.40997549,164.654462 C19.6326942,218.967277 69.0834655,258.786219 127.778579,258.786219 C198.596511,258.786219 256,200.847629 256,129.393109 C256,57.9293643 198.596511,0 127.778579,0 Z M80.3519677,196.332478 L64.6033732,189.763644 C67.389592,195.63131 72.2239585,200.539484 78.6359521,203.233444 C92.4932392,209.064206 108.472481,202.430791 114.247888,188.435116 C117.043333,181.663313 117.061785,174.190342 114.294018,167.400086 C111.526251,160.609831 106.295171,155.31417 99.5879487,152.491048 C92.9176301,149.695603 85.7767911,149.797088 79.5031858,152.186594 L95.777656,158.976849 C105.999942,163.276114 110.834309,175.122157 106.571948,185.436702 C102.318812,195.751247 90.574254,200.631743 80.3519677,196.332478 Z M202.30901,96.0424391 C202.30901,78.1165345 187.85204,63.5211763 170.092201,63.5211763 C152.323137,63.5211763 137.866167,78.1165345 137.866167,96.0424391 C137.866167,113.968344 152.323137,128.554476 170.092201,128.554476 C187.85204,128.554476 202.30901,113.968344 202.30901,96.0424391 Z M145.938821,95.9870838 C145.938821,82.4988323 156.779242,71.5661525 170.138331,71.5661525 C183.506646,71.5661525 194.347066,82.4988323 194.347066,95.9870838 C194.347066,109.475335 183.506646,120.408015 170.138331,120.408015 C156.779242,120.408015 145.938821,109.475335 145.938821,95.9870838 Z"
|
||||
fill="currentColor"
|
||||
></path>
|
||||
</g>
|
||||
</svg>
|
||||
</template>
|
||||
30
content-collections.ts
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
import { defineCollection, defineConfig } from '@content-collections/core'
|
||||
import { compileMDX } from '@content-collections/mdx'
|
||||
import { z } from 'zod'
|
||||
|
||||
const posts = defineCollection({
|
||||
name: 'Posts',
|
||||
directory: 'posts',
|
||||
include: '*.mdx',
|
||||
schema: z.object({
|
||||
title: z.string(),
|
||||
date: z.string(),
|
||||
image: z.string(),
|
||||
author: z.string(),
|
||||
tags: z.string(),
|
||||
}),
|
||||
async transform(data, context) {
|
||||
const paragraph = data.content
|
||||
.split('\n')
|
||||
.filter((e) => !e.startsWith('#'))
|
||||
.at(0)
|
||||
const excerpt = paragraph!.split(' ').slice(0, 20).join(' ') + '...'
|
||||
|
||||
const mdx = await compileMDX(context, data)
|
||||
return { ...data, excerpt, url: `/news/${data._meta.path}`, mdx }
|
||||
},
|
||||
})
|
||||
|
||||
export default defineConfig({
|
||||
collections: [posts],
|
||||
})
|
||||
|
|
@ -1 +0,0 @@
|
|||
Subproject commit 01fd41c65ae288eb19bbc92b2625733afe51c101
|
||||
34
error.vue
|
|
@ -1,34 +0,0 @@
|
|||
<template>
|
||||
<NuxtLayout>
|
||||
<main
|
||||
class="grid min-h-full place-items-center px-6 py-24 sm:py-32 lg:px-8"
|
||||
>
|
||||
<div class="text-center">
|
||||
<p class="text-base font-semibold text-blue-600">
|
||||
{{ error?.statusCode ?? 500 }}
|
||||
</p>
|
||||
<h1
|
||||
class="mt-4 text-balance text-5xl font-semibold tracking-tight text-zinc-100 sm:text-7xl"
|
||||
>
|
||||
{{ error?.statusMessage ?? "An unknown error occurred." }}
|
||||
</h1>
|
||||
<p
|
||||
class="mt-6 text-pretty text-lg font-medium text-zinc-400 sm:text-xl/8"
|
||||
>
|
||||
{{ error?.message }}
|
||||
</p>
|
||||
<div class="mt-10 flex items-center justify-center gap-x-6">
|
||||
<NuxtLink
|
||||
href="/"
|
||||
class="rounded-md bg-blue-600 px-3.5 py-2.5 text-sm font-semibold text-white shadow-sm hover:bg-blue-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-600"
|
||||
>Go back home</NuxtLink
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
</NuxtLayout>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
const error = useError();
|
||||
</script>
|
||||
22
eslint.config.mjs
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
import { FlatCompat } from '@eslint/eslintrc'
|
||||
import { dirname } from 'path'
|
||||
import { fileURLToPath } from 'url'
|
||||
|
||||
const __filename = fileURLToPath(import.meta.url)
|
||||
const __dirname = dirname(__filename)
|
||||
|
||||
const compat = new FlatCompat({
|
||||
baseDirectory: __dirname,
|
||||
})
|
||||
|
||||
const eslintConfig = [
|
||||
...compat.extends('next/core-web-vitals', 'next/typescript'),
|
||||
{
|
||||
rules: {
|
||||
'@next/next/no-img-element': 'off',
|
||||
'prefer-const': 'off',
|
||||
},
|
||||
},
|
||||
]
|
||||
|
||||
export default eslintConfig
|
||||
|
|
@ -1,97 +0,0 @@
|
|||
<template>
|
||||
<div class="relative min-h-screen w-full flex flex-col">
|
||||
<Header />
|
||||
<main class="grow">
|
||||
<slot />
|
||||
</main>
|
||||
<Footer />
|
||||
|
||||
<!-- shadows -->
|
||||
<div class="fixed w-screen h-screen -z-10">
|
||||
<div
|
||||
class="absolute inset-x-0 transform-gpu overflow-hidden blur-3xl top-[10rem]"
|
||||
aria-hidden="true"
|
||||
>
|
||||
<div
|
||||
class="relative left-[calc(50%+3rem)] aspect-[1155/678] w-[36.125rem] -translate-x-1/2 bg-gradient-to-tr from-cyan-500 to-blue-600 opacity-20 sm:left-[calc(50%+36rem)] sm:w-[72.1875rem]"
|
||||
style="
|
||||
clip-path: polygon(
|
||||
74.1% 44.1%,
|
||||
100% 61.6%,
|
||||
97.5% 26.9%,
|
||||
85.5% 0.1%,
|
||||
80.7% 2%,
|
||||
72.5% 32.5%,
|
||||
60.2% 62.4%,
|
||||
52.4% 68.1%,
|
||||
47.5% 58.3%,
|
||||
45.2% 34.5%,
|
||||
27.5% 76.7%,
|
||||
0.1% 64.9%,
|
||||
17.9% 100%,
|
||||
27.6% 76.8%,
|
||||
76.1% 97.7%,
|
||||
74.1% 44.1%
|
||||
);
|
||||
"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
class="absolute inset-x-0 transform-gpu overflow-hidden blur-3xl -top-[15rem]"
|
||||
aria-hidden="true"
|
||||
>
|
||||
<div
|
||||
class="relative left-[calc(50%-11rem)] aspect-[1155/678] w-[36.125rem] -translate-x-1/2 rotate-[30deg] bg-gradient-to-tr from-blue-600 to-blue-100 opacity-20 sm:left-[calc(50%-30rem)] sm:w-[72.1875rem]"
|
||||
style="
|
||||
clip-path: polygon(
|
||||
74.1% 44.1%,
|
||||
100% 61.6%,
|
||||
97.5% 26.9%,
|
||||
85.5% 0.1%,
|
||||
80.7% 2%,
|
||||
72.5% 32.5%,
|
||||
60.2% 62.4%,
|
||||
52.4% 68.1%,
|
||||
47.5% 58.3%,
|
||||
45.2% 34.5%,
|
||||
27.5% 76.7%,
|
||||
0.1% 64.9%,
|
||||
17.9% 100%,
|
||||
27.6% 76.8%,
|
||||
76.1% 97.7%,
|
||||
74.1% 44.1%
|
||||
);
|
||||
"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
class="absolute left-[10%] inset-x-0 transform-gpu overflow-hidden blur-3xl top-[50vh]"
|
||||
aria-hidden="true"
|
||||
>
|
||||
<div
|
||||
class="relative left-[calc(50%-11rem)] aspect-[1155/678] w-[36.125rem] -translate-x-1/2 rotate-[60deg] bg-gradient-to-tr from-blue-600 to-blue-100 opacity-20 sm:left-[calc(50%-30rem)] sm:w-[72.1875rem]"
|
||||
style="
|
||||
clip-path: polygon(
|
||||
74.1% 44.1%,
|
||||
100% 61.6%,
|
||||
97.5% 26.9%,
|
||||
85.5% 0.1%,
|
||||
80.7% 2%,
|
||||
72.5% 32.5%,
|
||||
60.2% 62.4%,
|
||||
52.4% 68.1%,
|
||||
47.5% 58.3%,
|
||||
45.2% 34.5%,
|
||||
27.5% 76.7%,
|
||||
0.1% 64.9%,
|
||||
17.9% 100%,
|
||||
27.6% 76.8%,
|
||||
76.1% 97.7%,
|
||||
74.1% 44.1%
|
||||
);
|
||||
"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
5
next.config.mjs
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
import { withContentCollections } from '@content-collections/next'
|
||||
/** @type {import('next').NextConfig} */
|
||||
const nextConfig = { reactStrictMode: true, output: 'export' }
|
||||
|
||||
export default withContentCollections(nextConfig)
|
||||
|
|
@ -1,18 +0,0 @@
|
|||
// https://nuxt.com/docs/api/configuration/nuxt-config
|
||||
export default defineNuxtConfig({
|
||||
compatibilityDate: "2024-11-01",
|
||||
devtools: { enabled: true },
|
||||
modules: ["@nuxtjs/tailwindcss", "vue3-carousel-nuxt"],
|
||||
extends: ["./drop-base"],
|
||||
css: ["~/assets/core.scss"],
|
||||
app: {
|
||||
head: {
|
||||
link: [{ rel: "icon", href: "/favicon.ico" }],
|
||||
},
|
||||
},
|
||||
carousel: {
|
||||
prefix: "Vue",
|
||||
},
|
||||
|
||||
ssr: false,
|
||||
});
|
||||
53
package.json
|
|
@ -1,25 +1,46 @@
|
|||
{
|
||||
"name": "nuxt-app",
|
||||
"name": "radiant",
|
||||
"version": "0.1.0",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"build": "nuxt build",
|
||||
"dev": "nuxt dev",
|
||||
"generate": "nuxt generate",
|
||||
"preview": "nuxt preview",
|
||||
"postinstall": "nuxt prepare"
|
||||
"dev": "next dev",
|
||||
"build": "next build",
|
||||
"start": "next start",
|
||||
"lint": "next lint",
|
||||
"typegen": "sanity schema extract --path=src/sanity/extract.json && sanity typegen generate && rm ./src/sanity/extract.json"
|
||||
},
|
||||
"dependencies": {
|
||||
"@headlessui/vue": "^1.7.23",
|
||||
"@heroicons/vue": "^2.2.0",
|
||||
"@nuxtjs/tailwindcss": "6.13.1",
|
||||
"nuxt": "^3.15.2",
|
||||
"vue": "latest",
|
||||
"vue-router": "latest",
|
||||
"vue3-carousel-nuxt": "^1.1.5"
|
||||
"@headlessui/react": "^2.2.6",
|
||||
"@heroicons/react": "^2.2.0",
|
||||
"@octokit/core": "^7.0.3",
|
||||
"clsx": "^2.1.1",
|
||||
"dayjs": "^1.11.13",
|
||||
"feed": "^5.1.0",
|
||||
"framer-motion": "^12.23.11",
|
||||
"next": "15.4.4",
|
||||
"react": "^19",
|
||||
"react-dom": "^19",
|
||||
"react-use-measure": "^2.1.7",
|
||||
"styled-components": "^6"
|
||||
},
|
||||
"packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e",
|
||||
"devDependencies": {
|
||||
"sass-embedded": "^1.83.4"
|
||||
"@content-collections/core": "^0.11.1",
|
||||
"@content-collections/mdx": "^0.2.2",
|
||||
"@content-collections/next": "^0.2.7",
|
||||
"@eslint/eslintrc": "^3",
|
||||
"@tailwindcss/postcss": "^4.1.11",
|
||||
"@types/mdx": "^2.0.13",
|
||||
"@types/node": "^24",
|
||||
"@types/react": "^19",
|
||||
"@types/react-dom": "^19",
|
||||
"eslint": "^9",
|
||||
"eslint-config-next": "15.4.4",
|
||||
"postcss": "^8.5.6",
|
||||
"prettier": "^3.6.2",
|
||||
"prettier-plugin-organize-imports": "^4.2.0",
|
||||
"prettier-plugin-tailwindcss": "^0.6.14",
|
||||
"tailwindcss": "^4.1.11",
|
||||
"typescript": "^5",
|
||||
"zod": "^4.1.5"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,461 +0,0 @@
|
|||
<template>
|
||||
<div class="py-24 sm:py-32">
|
||||
<div class="mx-auto max-w-4xl px-6 max-lg:text-center lg:max-w-7xl lg:px-8">
|
||||
<h1
|
||||
class="text-balance text-5xl font-semibold tracking-tight text-zinc-100 sm:text-6xl lg:text-pretty"
|
||||
>
|
||||
What's the
|
||||
<span class="font-mono px-2 py-1 rounded-xl text-zinc-300 bg-zinc-900"
|
||||
>git diff</span
|
||||
>?
|
||||
</h1>
|
||||
<p
|
||||
class="mt-6 max-w-2xl text-pretty text-lg font-medium text-zinc-400 max-lg:mx-auto sm:text-xl/8"
|
||||
>
|
||||
What's the difference between Drop and the other options available to
|
||||
me? This guide, put together by the Drop team, explains the difference
|
||||
in use-case and features.
|
||||
</p>
|
||||
<div class="mt-8 rounded-md bg-blue-600/20 backdrop-blur p-4">
|
||||
<div class="flex">
|
||||
<div class="shrink-0">
|
||||
<InformationCircleIcon
|
||||
class="size-5 text-blue-400"
|
||||
aria-hidden="true"
|
||||
/>
|
||||
</div>
|
||||
<div class="ml-3 flex-1 md:flex md:justify-between">
|
||||
<p class="text-sm text-blue-400">
|
||||
This comparison was made by the Drop team, and may inaccurately
|
||||
represent some options. If you are a developer or maintainer for
|
||||
one of these projects, feel free to reach out to us to get your
|
||||
project removed or updated.
|
||||
</p>
|
||||
<p class="mt-3 text-sm md:ml-6 md:mt-0">
|
||||
<a
|
||||
href="https://github.com/Drop-OSS/drop-website"
|
||||
target="_blank"
|
||||
class="whitespace-nowrap font-medium text-blue-400 hover:text-blue-500"
|
||||
>
|
||||
GitHub
|
||||
<span aria-hidden="true"> →</span>
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="relative py-16 sm:py-24">
|
||||
<div
|
||||
class="absolute inset-x-0 bottom-0 top-48 bg-zinc-950/20 backdrop-blur-xl"
|
||||
/>
|
||||
<div class="relative mx-auto max-w-2xl px-6 lg:max-w-7xl lg:px-8">
|
||||
<!-- change cols if add more projects -->
|
||||
<div class="w-fit grid grid-cols-1 gap-10 lg:grid-cols-3 mx-auto">
|
||||
<div
|
||||
v-for="project in projects"
|
||||
:key="project.name"
|
||||
class="-m-2 grid grid-cols-1 rounded-[2rem] shadow-[inset_0_0_2px_1px_#ffffff4d] ring-1 ring-black/5 max-lg:mx-auto max-lg:w-full max-lg:max-w-md"
|
||||
>
|
||||
<div
|
||||
class="grid grid-cols-1 rounded-[2rem] p-2 shadow-md shadow-black/5"
|
||||
>
|
||||
<div
|
||||
class="rounded-3xl bg-zinc-950 p-10 pb-9 shadow-2xl ring-1 ring-black/5"
|
||||
>
|
||||
<h2 class="text-2xl font-semibold text-blue-400">
|
||||
{{ project.name }}
|
||||
</h2>
|
||||
<p class="mt-2 text-pretty text-sm/6 text-zinc-400">
|
||||
{{ project.description }}
|
||||
</p>
|
||||
<div class="mt-8">
|
||||
<NuxtLink
|
||||
:href="project.href"
|
||||
:aria-label="`Check out ${project.name}`"
|
||||
class="inline-block rounded-md bg-blue-600 px-3.5 py-2 text-center text-sm/6 font-semibold text-white shadow-sm hover:bg-blue-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-600"
|
||||
>Check it out →</NuxtLink
|
||||
>
|
||||
</div>
|
||||
<div class="mt-8">
|
||||
<h3 class="text-sm/6 font-medium text-zinc-100">
|
||||
Feature highlights
|
||||
</h3>
|
||||
<ul class="flex flex-col mt-3 gap-y-3">
|
||||
<li
|
||||
v-for="highlight in project.highlights"
|
||||
:key="highlight.description"
|
||||
class="group inline-flex flex-col gap-1 items-start text-sm/6 text-zinc-400"
|
||||
>
|
||||
<div class="inline-flex items-center gap-3">
|
||||
<span class="inline-flex h-6 items-center">
|
||||
<PlusIcon
|
||||
class="size-4 fill-blue-600"
|
||||
aria-hidden="true"
|
||||
/>
|
||||
</span>
|
||||
{{ highlight.description }}
|
||||
</div>
|
||||
<ComingSoon v-if="(highlight as any)['comingsoon']" />
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mx-auto max-w-2xl px-6 pt-16 sm:pt-24 lg:max-w-7xl lg:px-8">
|
||||
<table class="w-full text-left max-sm:hidden">
|
||||
<caption class="sr-only">
|
||||
Project comparison
|
||||
</caption>
|
||||
<colgroup>
|
||||
<!-- add or remove columns when updating project -->
|
||||
<col class="w-2/5" />
|
||||
<col class="w-1/5" />
|
||||
<col class="w-1/5" />
|
||||
<col class="w-1/5" />
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<td class="p-0" />
|
||||
<th
|
||||
v-for="project in projects"
|
||||
:key="project.name"
|
||||
scope="col"
|
||||
class="p-1 sticky top-4 text-center"
|
||||
>
|
||||
<div class="text-xl font-semibold text-zinc-100">
|
||||
{{ project.name }}
|
||||
</div>
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody v-for="section in sections" :key="section.name" class="group">
|
||||
<tr>
|
||||
<th
|
||||
scope="colgroup"
|
||||
colspan="4"
|
||||
class="px-0 pb-0 pt-10 group-first-of-type:pt-5"
|
||||
>
|
||||
<div
|
||||
class="-mx-4 rounded-lg px-4 py-3 text-sm/6 font-semibold text-zinc-100"
|
||||
>
|
||||
{{ section.name }}
|
||||
</div>
|
||||
</th>
|
||||
</tr>
|
||||
<tr
|
||||
v-for="feature in section.features"
|
||||
:key="feature.name"
|
||||
class="border-b border-zinc-600 last:border-none"
|
||||
>
|
||||
<th
|
||||
scope="row"
|
||||
class="px-0 py-4 text-sm/6 font-normal text-zinc-300"
|
||||
>
|
||||
{{ feature.name }}
|
||||
</th>
|
||||
<td
|
||||
v-for="tier in projects"
|
||||
:key="tier.name"
|
||||
class="p-4 text-center"
|
||||
>
|
||||
<template v-if="typeof feature.projects[tier.name] === 'string'">
|
||||
<span class="sr-only">{{ tier.name }} includes:</span>
|
||||
<span class="text-sm/6 text-zinc-400">{{
|
||||
feature.projects[tier.name]
|
||||
}}</span>
|
||||
</template>
|
||||
<template v-else>
|
||||
<CheckIcon
|
||||
v-if="feature.projects[tier.name] === true"
|
||||
class="inline-block size-6 fill-green-600"
|
||||
aria-hidden="true"
|
||||
/>
|
||||
<MinusIcon
|
||||
v-else
|
||||
class="inline-block size-6 fill-gray-400"
|
||||
aria-hidden="true"
|
||||
/>
|
||||
<span class="sr-only">{{
|
||||
feature.projects[tier.name] === true
|
||||
? `Included in ${tier.name}`
|
||||
: `Not included in ${tier.name}`
|
||||
}}</span>
|
||||
</template>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<TabGroup class="sm:hidden" as="div">
|
||||
<TabList class="grid grid-cols-3 gap-x-1">
|
||||
<Tab
|
||||
as="template"
|
||||
v-for="tier in projects"
|
||||
:key="tier.name"
|
||||
v-slot="{ selected }"
|
||||
>
|
||||
<button
|
||||
:class="[
|
||||
selected ? 'border-blue-600' : 'border-zinc-600',
|
||||
'border-b-2 text-zinc-100 pb-1',
|
||||
]"
|
||||
>
|
||||
{{ tier.name }}
|
||||
</button>
|
||||
</Tab>
|
||||
</TabList>
|
||||
<TabPanels as="template">
|
||||
<TabPanel v-for="tier in projects" :key="tier.name">
|
||||
<template v-for="section in sections" :key="section.name">
|
||||
<div
|
||||
class="-mx-6 mt-10 rounded-lg px-6 py-3 text-sm/6 font-semibold text-zinc-100 group-first-of-type:mt-5"
|
||||
>
|
||||
{{ section.name }}
|
||||
</div>
|
||||
<dl>
|
||||
<div
|
||||
v-for="feature in section.features"
|
||||
:key="feature.name"
|
||||
class="grid grid-cols-2 border-b border-zinc-700 py-4 last:border-none"
|
||||
>
|
||||
<dt class="text-sm/6 font-normal text-gray-400">
|
||||
{{ feature.name }}
|
||||
</dt>
|
||||
<dd class="text-center">
|
||||
<span
|
||||
v-if="typeof feature.projects[tier.name] === 'string'"
|
||||
class="text-sm/6 text-zinc-400"
|
||||
>{{ feature.projects[tier.name] }}</span
|
||||
>
|
||||
<template v-else>
|
||||
<CheckIcon
|
||||
v-if="feature.projects[tier.name] === true"
|
||||
class="inline-block size-6 fill-green-600"
|
||||
aria-hidden="true"
|
||||
/>
|
||||
<MinusIcon
|
||||
v-else
|
||||
class="inline-block size-6 fill-gray-400"
|
||||
aria-hidden="true"
|
||||
/>
|
||||
<span class="sr-only">{{
|
||||
feature.projects[tier.name] === true ? "Yes" : "No"
|
||||
}}</span>
|
||||
</template>
|
||||
</dd>
|
||||
</div>
|
||||
</dl>
|
||||
</template>
|
||||
</TabPanel>
|
||||
</TabPanels>
|
||||
</TabGroup>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { CheckIcon, MinusIcon, PlusIcon } from "@heroicons/vue/16/solid";
|
||||
import { Tab, TabGroup, TabList, TabPanel, TabPanels } from "@headlessui/vue";
|
||||
import { InformationCircleIcon } from "@heroicons/vue/24/outline";
|
||||
|
||||
const projects = [
|
||||
{
|
||||
name: "Drop",
|
||||
description: "An open Steam.",
|
||||
href: "/",
|
||||
highlights: [
|
||||
{ description: "First-class Linux support" },
|
||||
{ description: "Lightweight game upgrades" },
|
||||
{ description: "Multiple metadata sources" },
|
||||
{ description: "Cloud-saves & playtime tracking", comingsoon: true },
|
||||
{ description: "Steamworks replacement library", comingsoon: true },
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "GameVault",
|
||||
description: "Create your own gaming platform.",
|
||||
href: "https://gamevau.lt/",
|
||||
highlights: [
|
||||
{ description: "First-class Windows support" },
|
||||
{ description: "Native Windows app" },
|
||||
{ description: "Share with family & friends" },
|
||||
{ description: "Playtime tracking" },
|
||||
{ description: "Paid support & optional features" },
|
||||
{ description: "Paid Playnite integration" },
|
||||
],
|
||||
},
|
||||
|
||||
{
|
||||
name: "LANCommander",
|
||||
description: "An open-source digital game platform.",
|
||||
href: "https://github.com/LANCommander/LANCommander",
|
||||
highlights: [
|
||||
{ description: "License key management" },
|
||||
{ description: "Dedicated server management" },
|
||||
{ description: "PowerShell scripting" },
|
||||
{ description: "Cloud-saves" },
|
||||
{ description: "P2P downloads & VPN networking", comingsoon: true },
|
||||
],
|
||||
},
|
||||
] as const;
|
||||
type Names = (typeof projects)[number]["name"];
|
||||
const sections: Array<{
|
||||
name: string;
|
||||
features: Array<{
|
||||
name: string;
|
||||
projects: { [key in Names]?: boolean | string };
|
||||
}>;
|
||||
}> = [
|
||||
{
|
||||
name: "Library Management",
|
||||
features: [
|
||||
{
|
||||
name: "Metadata fetching",
|
||||
projects: { Drop: true, GameVault: "Only IGDB", LANCommander: false },
|
||||
},
|
||||
{
|
||||
name: "Game versioning",
|
||||
projects: { Drop: true },
|
||||
},
|
||||
{
|
||||
name: "Redistributables",
|
||||
projects: { LANCommander: true },
|
||||
},
|
||||
{
|
||||
name: "License key management",
|
||||
projects: { LANCommander: true },
|
||||
},
|
||||
{
|
||||
name: "Automatic import",
|
||||
projects: { GameVault: true },
|
||||
},
|
||||
{
|
||||
name: "Collections",
|
||||
projects: { Drop: true, LANCommander: true },
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "Deployment",
|
||||
features: [
|
||||
{
|
||||
name: "Docker",
|
||||
projects: { Drop: true, GameVault: true, LANCommander: true },
|
||||
},
|
||||
{
|
||||
name: "CapRover",
|
||||
projects: { GameVault: true },
|
||||
},
|
||||
{
|
||||
name: "TrueNAS",
|
||||
projects: { GameVault: true },
|
||||
},
|
||||
{
|
||||
name: "UNRAID",
|
||||
projects: { GameVault: true },
|
||||
},
|
||||
{
|
||||
name: "Synology",
|
||||
projects: { GameVault: true },
|
||||
},
|
||||
{
|
||||
name: "Native",
|
||||
projects: {
|
||||
GameVault: true,
|
||||
Drop: "Possible, unsupported",
|
||||
LANCommander: true,
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "ARM support",
|
||||
projects: {
|
||||
Drop: true,
|
||||
LANCommander: true,
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "Operating Systems",
|
||||
features: [
|
||||
{
|
||||
name: "Windows",
|
||||
projects: { Drop: true, GameVault: true, LANCommander: true },
|
||||
},
|
||||
{
|
||||
name: "macOS",
|
||||
projects: { Drop: true, LANCommander: true },
|
||||
},
|
||||
{
|
||||
name: "Linux",
|
||||
projects: {
|
||||
Drop: true,
|
||||
LANCommander: true,
|
||||
GameVault: "Unsupported, using Wine",
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "Integrations",
|
||||
features: [
|
||||
{
|
||||
name: "Playnite",
|
||||
projects: { GameVault: "Paid feature ($)" },
|
||||
},
|
||||
{
|
||||
name: "Discord",
|
||||
projects: {
|
||||
GameVault: "Paid feature ($)",
|
||||
LANCommander: "Coming soon",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "Steam",
|
||||
projects: { GameVault: "Paid feature ($)" },
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "Other",
|
||||
features: [
|
||||
{
|
||||
name: "Paid support option",
|
||||
projects: { GameVault: true },
|
||||
},
|
||||
{
|
||||
name: "Cloud saves",
|
||||
projects: {
|
||||
Drop: "Coming soon",
|
||||
LANCommander: true,
|
||||
GameVault: "Paid feature ($)",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "Dedicated server management",
|
||||
projects: { LANCommander: true },
|
||||
},
|
||||
{
|
||||
name: "Steamworks library",
|
||||
projects: { Drop: "Coming soon" },
|
||||
},
|
||||
{
|
||||
name: "P2P downloads",
|
||||
projects: { Drop: "Coming soon", LANCommander: "Coming soon" },
|
||||
},
|
||||
{
|
||||
name: "Remote LAN/automatic networking",
|
||||
projects: { Drop: "Coming soon", LANCommander: "Coming soon" },
|
||||
},
|
||||
],
|
||||
},
|
||||
];
|
||||
|
||||
useHead({
|
||||
title: "What's the `git diff`?",
|
||||
});
|
||||
</script>
|
||||
|
|
@ -1,79 +0,0 @@
|
|||
<template>
|
||||
<div class="py-24 sm:py-32">
|
||||
<div class="mx-auto max-w-7xl px-6 lg:px-8">
|
||||
<div class="mx-auto max-w-2xl sm:text-center">
|
||||
<h2 class="text-base/7 font-semibold text-blue-400">Admin UI</h2>
|
||||
<p
|
||||
class="mt-2 text-pretty text-4xl font-semibold tracking-tight text-white sm:text-balance sm:text-5xl"
|
||||
>
|
||||
Powerful metadata tools.
|
||||
</p>
|
||||
<p class="mt-6 text-lg/8 text-gray-300">
|
||||
Drop includes versatile tools to customise and edit the metadata
|
||||
attached to your library. Add or remove any images, update the name or
|
||||
icon, or edit the description.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="relative overflow-hidden pt-16">
|
||||
<div class="mx-auto max-w-7xl px-6 lg:px-8">
|
||||
<img
|
||||
src="@/assets/ss/admin-metadata.png"
|
||||
alt="App screenshot"
|
||||
class="rounded-xl shadow-2xl ring-1 ring-white/10"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mx-auto mt-16 max-w-7xl px-6 sm:mt-20 md:mt-24 lg:px-8">
|
||||
<dl
|
||||
class="mx-auto grid max-w-2xl grid-cols-1 gap-x-6 gap-y-10 text-base/7 text-gray-300 sm:grid-cols-2 lg:mx-0 lg:max-w-none lg:grid-cols-3 lg:gap-x-8 lg:gap-y-16"
|
||||
>
|
||||
<div
|
||||
v-for="feature in features"
|
||||
:key="feature.name"
|
||||
class="relative pl-9"
|
||||
>
|
||||
<dt class="inline font-semibold text-white">
|
||||
<component
|
||||
:is="feature.icon"
|
||||
class="absolute left-1 top-1 size-5 text-blue-500"
|
||||
aria-hidden="true"
|
||||
/>
|
||||
{{ feature.name }}
|
||||
</dt>
|
||||
{{ " " }}
|
||||
<dd class="inline">{{ feature.description }}</dd>
|
||||
</div>
|
||||
</dl>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { DocumentDuplicateIcon, PencilIcon, ServerStackIcon } from "@heroicons/vue/24/outline";
|
||||
|
||||
const features = [
|
||||
{
|
||||
name: "Multiple sources.",
|
||||
description:
|
||||
"Drop lets you configure more than one source to pull metadata from. Then, choose between them when importing your game.",
|
||||
icon: DocumentDuplicateIcon,
|
||||
},
|
||||
{
|
||||
name: "Markdown descriptions.",
|
||||
description:
|
||||
"Descriptions are parsed as markdown, so you can use all the formatting you like. Freely edit the description, and enjoy as it auto-saves.",
|
||||
icon: PencilIcon,
|
||||
},
|
||||
{
|
||||
name: "Image library.",
|
||||
description:
|
||||
"Upload and store all the images required for your game. Freely replace images without losing the originals, and customise the cover and banner of your store page.",
|
||||
icon: ServerStackIcon,
|
||||
},
|
||||
];
|
||||
|
||||
useHead({
|
||||
title: "Library"
|
||||
})
|
||||
</script>
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
<template>
|
||||
|
||||
</template>
|
||||
193
pages/index.vue
5985
pnpm-lock.yaml
generated
Normal file
8
pnpm-workspace.yaml
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
onlyBuiltDependencies:
|
||||
- '@tailwindcss/oxide'
|
||||
- contentlayer
|
||||
- contentlayer2
|
||||
- esbuild
|
||||
- protobufjs
|
||||
- sharp
|
||||
- unrs-resolver
|
||||
5
postcss.config.js
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
module.exports = {
|
||||
plugins: {
|
||||
'@tailwindcss/postcss': {},
|
||||
},
|
||||
}
|
||||
47
posts/roadmap2025.mdx
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
---
|
||||
title: 2025 Roadmap
|
||||
date: 2025-09-03
|
||||
image: /news/roadmap-sep32025.png
|
||||
author: decduck
|
||||
tags: Roadmap, Planning
|
||||
---
|
||||
|
||||
As 2025 draws to a close, we've thought about where we want Drop to be by the end of the year. As a project, we've come a long way since our first commit in [September of 2024](https://github.com/Drop-OSS/drop/commit/e1a789fa363946f74ecc21b9800c7e84563b46c3). Since then, we've had three, major releases (v0.1.0, v0.2.0, v0.3.0), each time adding lots of cool new features. With that in mind, here's what we're planning to do before the year's end - no promises, though.
|
||||
|
||||
---
|
||||
|
||||
## Redistributable support
|
||||
|
||||
Redistributables are generally library/framework files that need to be installed before a game will run. Often games on Steam will automatically install things like the "Visual C++ Redistributable", or similar, to ensure the game works properly and has all the installed libraries it needs.
|
||||
|
||||
Drop extends this traditional idea of 'redistributables' into a general idea - anything that only needs to be downloaded for several games. Drop will also support attaching launch commands to these redistributables for one specific purpose:
|
||||
|
||||
## Emulation support
|
||||
|
||||
Through the redistributable system described above, admins will be able to add and import their favourite emulators as a "redistributable", and configure a launch command. That may look something like this:
|
||||
|
||||
```
|
||||
MyEmulator.exe --rom-file {rom} --fullscreen
|
||||
```
|
||||
|
||||
And then you'll be able to configure this redistributable as a platform. You'll be able to specify file extensions, name the platform, and attach an SVG icon as metadata. Then, when you import an emulated game, Drop will automatically download the emulator and use the above launch command to start your game.
|
||||
|
||||
For admins, Drop will automatically search for files with the extensions provided and add it to the existing file-extension based suggestions for imports.
|
||||
|
||||
This system, while may seem a little complicated, has the following benefits:
|
||||
|
||||
1. **Drop doesn't need specific integration with most emulators.** Most emulators have a CLI (command line interface), even if the documentation for it is a little buried. This means admins will be able to get almost any emulator working without writing any new code.
|
||||
2. **More flexibility than just emulators.** Lots of other useful tools and applications fit into this model. Your favourite optimisation tool, tracking tool, mod launcher, what have you - all can be done through this system.
|
||||
3. **Better UX and control for admins.** Rather than Drop hardcoding a massive list of emulation targets that are available, and developers having to maintain that list, Drop allows admins to use only what they need, and fix things themselves.
|
||||
|
||||
## Playtime tracking
|
||||
|
||||
Drop will being tracking and syncing playtime statistics with the configured server. Under the hood, each play 'session' will be tracked individually, even if Drop only displays aggregated amounts.
|
||||
|
||||
This opens up the potential for cool statistics down the line. We don't have many ideas, but features like "What are my friends playing?" and "Am I burning out?" come to mind. Endless possibilities.
|
||||
|
||||
---
|
||||
|
||||
Unfortunately, as it is for most people, these coming months will be very busy for the team, so we may not get to everything on this list. But who knows, maybe we'll complete it and more?
|
||||
|
||||
Regardless, Drop's future development is secure, and we're excited to be implementing new and awesome features for people to enjoy.
|
||||
8
prettier.config.js
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
/** @type {import('prettier').Options} */
|
||||
module.exports = {
|
||||
singleQuote: true,
|
||||
semi: false,
|
||||
plugins: ['prettier-plugin-organize-imports', 'prettier-plugin-tailwindcss'],
|
||||
tailwindFunctions: ['clsx'],
|
||||
tailwindStylesheet: './src/styles/tailwind.css',
|
||||
}
|
||||
BIN
public/apple-touch-icon.png
Normal file
|
After Width: | Height: | Size: 3.4 KiB |
BIN
public/avatars/decduck.jpg
Normal file
|
After Width: | Height: | Size: 7.9 KiB |
BIN
public/avatars/sponsor.png
Normal file
|
After Width: | Height: | Size: 168 KiB |
|
Before Width: | Height: | Size: 1 MiB |
|
Before Width: | Height: | Size: 1.3 MiB |
|
Before Width: | Height: | Size: 256 KiB |
|
Before Width: | Height: | Size: 294 KiB |
|
Before Width: | Height: | Size: 287 KiB |
|
Before Width: | Height: | Size: 1.2 MiB |
4
public/dot-texture.svg
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
<svg width="12" height="32" viewBox="0 0 12 32" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect width="2" height="2" fill="white" fill-opacity="0.1"/>
|
||||
<rect y="16" width="2" height="2" fill="white" fill-opacity="0.05"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 233 B |
23
public/drop.crt
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
-----BEGIN CERTIFICATE-----
|
||||
MIIDyzCCArOgAwIBAgIUOY7l2v2Z37NBHvnC9erDT9t3HOEwDQYJKoZIhvcNAQEL
|
||||
BQAwfDELMAkGA1UEBhMCQVUxDzANBgNVBAcMBlN5ZG5leTERMA8GA1UECgwIRHJv
|
||||
cCBPU1MxETAPBgNVBAsMCFNlY3VyaXR5MREwDwYDVQQDDAhEcm9wIE9TUzEjMCEG
|
||||
CSqGSIb3DQEJARYUc2VjdXJpdHlAZHJvcG9zcy5vcmcwHhcNMjUwODAyMDEwOTI2
|
||||
WhcNMzAwODAxMDEwOTI2WjB8MQswCQYDVQQGEwJBVTEPMA0GA1UEBwwGU3lkbmV5
|
||||
MREwDwYDVQQKDAhEcm9wIE9TUzERMA8GA1UECwwIU2VjdXJpdHkxETAPBgNVBAMM
|
||||
CERyb3AgT1NTMSMwIQYJKoZIhvcNAQkBFhRzZWN1cml0eUBkcm9wb3NzLm9yZzCC
|
||||
ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMIUBYAHKrPwo2DPqjPxj83i
|
||||
QEz7KPO3/Ezn/2QKnoV/wzOZwB8vMDEVpm5A4d1G+nyxDEDHTXG8TpFQnU/tjEHV
|
||||
ZxqPxfCet+sgigEqmpo77ZPCgaF1VRFTfRp4h36jghl++CquMU5RX5g+HHNUSl71
|
||||
PIISaiP8TJAmMEjKEFOO9uy0vHj1w8L0jo/IaiALoaOKw9N2o5sE2WI6u2kRXkBt
|
||||
lmDPHNIS37v+wWbPDuFQ5ya7hNal/CMLLDNGJ4Bd3fGkN1/X7mjVMmSORSeutN90
|
||||
WKJDLDrXmMzhaokvWq820OGbaGSGZ94bC/k9IKlBaUZHYbu/X07gzsoA+AbRIhsC
|
||||
AwEAAaNFMEMwEgYDVR0TAQH/BAgwBgEB/wIBAzAOBgNVHQ8BAf8EBAMCAcYwHQYD
|
||||
VR0OBBYEFFW5xDSAZI+4g5bf10eeXjBkfPCkMA0GCSqGSIb3DQEBCwUAA4IBAQAF
|
||||
ewFl69mGBgGtDrKD5LrXj0P795rnBhkCSOgILyZaDS/DpT2kE3Ty9VXbJ6gKtcN5
|
||||
vy3463TEgyHwNyWeyGIQpgvSrSheU0xtqKKN5iHaK/czIgOHqi7G3hp8Es11T9lY
|
||||
xIInAba9Fa3/JI+MnSm2m0GRfI8nL5AFZws11DLzKZkKrozMbWpf+MhbeWBK0Zc6
|
||||
Y9w8aZvpLCZJ1DKQz/mfVXvmVQCCCNgrNDuI6OWzX9KlPIcizY14nh4K6FM4goy8
|
||||
3Eyr2mG6bxkRy0nCzB7gzzJunFOcCVZDmSZ4enhG9jWs6SCDdcQmHlqGedeaq8ON
|
||||
PJJgQBp0IfOqoWivon6a
|
||||
-----END CERTIFICATE-----
|
||||
BIN
public/drop.der
Normal file
BIN
public/favicon-96x96.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 765 B |
|
|
@ -1,14 +1,17 @@
|
|||
<template>
|
||||
<svg
|
||||
class="text-blue-400"
|
||||
<svg
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
preserveAspectRatio="xMidYMid meet"
|
||||
>
|
||||
<style>
|
||||
:root {
|
||||
color: oklch(70.7% 0.165 254.624)
|
||||
}
|
||||
</style>
|
||||
<path
|
||||
d="M4 13.5C4 11.0008 5.38798 8.76189 7.00766 7C8.43926 5.44272 10.0519 4.25811 11.0471 3.5959C11.6287 3.20893 12.3713 3.20893 12.9529 3.5959C13.9481 4.25811 15.5607 5.44272 16.9923 7C18.612 8.76189 20 11.0008 20 13.5C20 17.9183 16.4183 21.5 12 21.5C7.58172 21.5 4 17.9183 4 13.5Z"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
/>
|
||||
</svg>
|
||||
</template>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 503 B After Width: | Height: | Size: 578 B |
BIN
public/gallery/companyadmin.png
Normal file
|
After Width: | Height: | Size: 617 KiB |
BIN
public/gallery/developermobile.png
Normal file
|
After Width: | Height: | Size: 485 KiB |
BIN
public/gallery/devices.png
Normal file
|
After Width: | Height: | Size: 379 KiB |
BIN
public/gallery/importgameadmin.png
Normal file
|
After Width: | Height: | Size: 204 KiB |
BIN
public/gallery/importversionadmin.png
Normal file
|
After Width: | Height: | Size: 234 KiB |
BIN
public/gallery/store.png
Normal file
|
After Width: | Height: | Size: 4.4 MiB |
BIN
public/gallery/storepage.png
Normal file
|
After Width: | Height: | Size: 2 MiB |
BIN
public/gallery/storepagemobile.png
Normal file
|
After Width: | Height: | Size: 625 KiB |
BIN
public/icons/gamevault-plus.png
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
public/icons/gamevault.png
Normal file
|
After Width: | Height: | Size: 168 KiB |
29
public/icons/giantbomb.svg
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
<svg version="1.2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 579 579" width="579" height="579">
|
||||
<title>giantbomb</title>
|
||||
<style>
|
||||
.s0 { fill: #f7961d }
|
||||
.s1 { fill: #ffffff }
|
||||
.s2 { fill: #888888 }
|
||||
.s3 { fill: #ec2024 }
|
||||
.s4 { fill: #666666 }
|
||||
.s5 { fill: #000000 }
|
||||
</style>
|
||||
<path class="s0" d="m441.27 91.8q1.23 5.36 1.4 10.85 0.18 5.5-0.7 10.92-0.88 5.43-2.79 10.58-1.91 5.16-4.77 9.85c-8.1 13.08-22.41 23.08-37.78 25.33q0.21 0.25 0.42 0.5 0.2 0.26 0.4 0.52 0.19 0.26 0.38 0.52 0.19 0.27 0.37 0.54c1.84 2.81 0.46 7.78-3.7 7.08-6.94-1.17-11.51-8.89-13.39-15.14q-0.22-0.74-0.41-1.49-0.18-0.76-0.32-1.52-0.14-0.76-0.23-1.53-0.1-0.77-0.15-1.54c-7.9 9.09-12.2 22.5-13.26 33.41q-0.13 1.31-0.2 2.7 3.89 2.27 7.62 4.78 3.74 2.5 7.31 5.24 3.58 2.73 6.98 5.68 3.39 2.95 6.6 6.11 2.56 2.47 5 5.05 2.44 2.58 4.77 5.27 2.32 2.68 4.52 5.48 2.19 2.79 4.26 5.68 2.28-0.96 4.5-2.05 2.21-1.09 4.37-2.31 2.15-1.21 4.24-2.54 2.08-1.33 4.09-2.77c22-15.85 37.67-41.13 37.68-68.75 0.01-21.49-10.26-43.19-27.21-56.45z"/>
|
||||
<path class="s1" d="m395.06 205.19q5.06 4.9 9.72 10.25c10.4-4.88 20.3-11.58 26.43-21.46 6.43-10.37 8.16-23.53 2.42-34.56-0.58-1.11-2.33-1.77-3.33-0.72q-2.53 2.71-5.28 5.2-2.75 2.48-5.71 4.72-2.96 2.24-6.1 4.21-3.14 1.98-6.44 3.67c-5 2.5-10.67 4.42-16.31 3.27-5.33-1.09-9.17-4.86-13-8.42-1-0.91-3-0.7-3.08 1q-0.09 2.15-0.03 4.3 0.06 2.14 0.26 4.28 0.21 2.14 0.55 4.27 0.35 2.12 0.84 4.21 2.54 1.78 5 3.65 2.46 1.88 4.85 3.86 2.38 1.97 4.69 4.04 2.3 2.07 4.52 4.23z"/>
|
||||
<path fill-rule="evenodd" class="s2" d="m360.82 446.69c-56.31 56.31-147.34 56.31-203.65 0-56.3-56.31-56.3-147.34 0-203.65 56.31-56.3 147.34-56.3 203.65 0 56.31 56.31 56.31 147.34 0 203.65z"/>
|
||||
<path class="s3" d="m441.27 91.8q0.42 1.85 0.71 3.73 0.29 1.87 0.46 3.77 0.17 1.89 0.21 3.78 0.05 1.9-0.03 3.8c3.15 6.71 6.71 13.27 9.44 20.17 4.35 11 6.83 21.8 5.45 33.63-1.25 10.66-5 20.86-9.76 30.42-2.38 4.76-5 9.39-7.77 14-1.87 3.11-4.13 6.2-5.93 9.46 20.28-15.94 34.42-40 34.43-66.29 0.01-21.51-10.26-43.21-27.21-56.47z"/>
|
||||
<path class="s4" d="m189.34 415.41c-12.15-12.15-22.04-26.38-29.17-42.02-7.14-15.63-11.43-32.42-12.65-49.57-1.22-17.14 0.64-34.37 5.48-50.86 4.85-16.49 12.61-31.98 22.92-45.73-34.37 24.3-56.38 62.43-60.25 104.34-3.87 41.92 10.8 83.43 40.14 113.61 29.34 30.18 70.42 46.02 112.43 43.33 42.01-2.68 80.74-23.61 106-57.28-13.76 9.72-29.12 16.95-45.38 21.35-16.26 4.41-33.17 5.93-49.96 4.5-16.78-1.44-33.19-5.81-48.46-12.92-15.28-7.1-29.19-16.84-41.1-28.75z"/>
|
||||
<path class="s1" d="m380.91 321.48q-1.24 0-2.42-0.4-1.18-0.41-2.16-1.17-0.98-0.76-1.67-1.8-0.69-1.04-1-2.24-1.99-7.6-4.96-14.87-2.98-7.27-6.89-14.08-3.91-6.82-8.69-13.05-4.77-6.24-10.33-11.79c-1.4-1.41-2.19-3.32-2.19-5.3-0.01-1.99 0.79-3.9 2.19-5.31 1.41-1.4 3.32-2.19 5.3-2.2 1.99 0 3.9 0.8 5.31 2.2q6.26 6.26 11.64 13.28 5.38 7.03 9.78 14.71 4.41 7.67 7.76 15.87 3.35 8.19 5.59 16.75c0.29 1.11 0.32 2.27 0.09 3.39-0.23 1.12-0.72 2.18-1.42 3.08-0.7 0.91-1.6 1.64-2.63 2.15-1.02 0.5-2.15 0.77-3.3 0.77z"/>
|
||||
<path fill-rule="evenodd" class="s5" d="m226.89 286.65c-6.85 25.62-22.75 43.56-35.56 40.13-12.81-3.42-17.62-26.9-10.77-52.52 6.86-25.62 22.75-43.56 35.56-40.14 12.82 3.43 17.63 26.91 10.77 52.53z"/>
|
||||
<path fill-rule="evenodd" class="s5" d="m319.96 297.98c-3.7 29.21-18.5 51.33-33.11 49.48-14.6-1.85-23.41-26.97-19.7-56.18 3.7-29.21 18.5-51.33 33.11-49.48 14.6 1.86 23.41 26.97 19.7 56.18z"/>
|
||||
<path fill-rule="evenodd" class="s1" d="m313.47 279.79c-1.94 15.32-11.45 26.69-21.27 25.44-9.82-1.24-16.19-14.63-14.25-29.95 1.95-15.31 11.46-26.69 21.28-25.44 9.82 1.24 16.18 14.63 14.24 29.95z"/>
|
||||
<path fill-rule="evenodd" class="s1" d="m222.3 266.39c-3.08 12.42-12.01 20.86-19.97 18.89-7.96-1.98-11.9-13.61-8.82-26.03 3.08-12.42 12-20.87 19.96-18.89 7.96 1.97 11.91 13.61 8.83 26.03z"/>
|
||||
<path class="s2" d="m371.43 232.44q6.61 6.58 12.4 13.9 5.8 7.31 10.69 15.26 4.89 7.94 8.82 16.41 3.93 8.46 6.83 17.33 0.21-0.16 0.41-0.33 0.2-0.17 0.39-0.34 0.2-0.17 0.39-0.35 0.19-0.18 0.38-0.36c14.06-14.06 2.66-48.25-25.46-76.37-28.12-28.12-62.28-39.51-76.37-25.46q-0.18 0.19-0.36 0.38-0.18 0.19-0.35 0.39-0.17 0.19-0.34 0.39-0.17 0.2-0.33 0.41 8.87 2.9 17.33 6.83 8.47 3.93 16.41 8.82 7.95 4.89 15.26 10.69 7.32 5.79 13.9 12.4z"/>
|
||||
<path class="s5" d="m387.31 190.71c2.8 3.45 7.07 5.74 10.17 9 3.1 3.26 5.37 7.36 8.15 11 2.27 3 6.34-0.24 5.21-3.36-1.75-4.81-5.69-9.25-9.34-12.74-3.33-3.18-7.55-6.94-12.22-7.72-2.06-0.34-3.16 2.31-2 3.77zm6.69-5.97c4 3.17 8.26 5.62 11.82 9.35 3.22 3.37 5.31 7.87 8.72 10.93 1.83 1.64 4.58-0.57 4.22-2.69-0.83-4.93-5.6-9.85-9.11-13.15-3.81-3.57-8.34-7.22-13.46-8.62-0.54-0.19-1.13-0.17-1.66 0.04-0.54 0.21-0.98 0.6-1.24 1.11-0.27 0.51-0.34 1.09-0.21 1.65 0.13 0.56 0.46 1.05 0.92 1.38zm9-6.48l-0.07-0.18-1.54 1.3c2.84 2 6.07 3.32 8.82 5.59 3.79 3.12 6.25 7 9.45 10.65q0.36 0.38 0.88 0.45 0.51 0.05 0.95-0.22 0.44-0.29 0.6-0.79 0.15-0.5-0.05-0.98c-1.71-4.38-5.49-8.08-9-11.05-2.39-2-7.55-6.61-11-6q-0.26 0.05-0.49 0.2-0.22 0.14-0.38 0.36-0.15 0.22-0.21 0.48-0.06 0.27-0.02 0.53 0.02 0.11 0.06 0.21 0.03 0.1 0.07 0.2 0.05 0.1 0.11 0.19 0.05 0.09 0.12 0.18c0.69 1 2.07-0.09 1.69-1.09zm4.93-2.7c2.74 1.88 5.57 3.61 8.16 5.69q1 0.84 1.94 1.74 0.94 0.9 1.82 1.86 0.88 0.97 1.69 1.99 0.81 1.02 1.55 2.09c0.35 0.48 1.13 0 0.86-0.56-3-6-9.82-10.32-15.49-13.6-0.52-0.3-1.05 0.43-0.54 0.78z"/>
|
||||
<path class="s5" d="m468.85 110.61q-2.84-5.7-6.57-10.87-3.72-5.16-8.24-9.65-4.52-4.49-9.71-8.18-5.19-3.69-10.91-6.49c-3.94-1.91-8.12 3.14-6.22 6.8 7.54 14.52 7.58 32.72-1.35 46.71-8.1 12.69-21 19.15-35.33 21.82 0-0.12-0.08-0.23-0.12-0.35-1.36-4.65-0.62-9 1.42-13.34 2.04-4.34-4.28-8.64-7.7-5.4-7.3 6.92-13.81 13.29-18.4 22.42q-1.47 2.95-2.65 6.02-1.19 3.07-2.08 6.23-0.89 3.17-1.49 6.41-0.59 3.23-0.88 6.51 4 1.91 7.94 4.14c0-0.92 0.11-1.82 0.2-2.7 1.06-10.92 5.36-24.33 13.26-33.41q0.05 0.77 0.15 1.54 0.09 0.77 0.23 1.53 0.14 0.76 0.32 1.52 0.19 0.75 0.41 1.49c1.88 6.25 6.45 14 13.39 15.14 4.16 0.7 5.53-4.27 3.7-7.08q-0.18-0.27-0.37-0.54-0.19-0.26-0.38-0.52-0.2-0.26-0.4-0.52-0.21-0.25-0.42-0.5c15.35-2.26 29.66-12.26 37.76-25.34q2.86-4.7 4.77-9.85 1.91-5.16 2.79-10.59 0.88-5.43 0.71-10.92-0.18-5.5-1.41-10.86c16.95 13.26 27.22 35 27.21 56.42 0 27.63-15.68 52.9-37.68 68.75q-2 1.45-4.09 2.78-2.08 1.33-4.23 2.54-2.15 1.22-4.37 2.31-2.22 1.09-4.49 2.06 2.3 3.24 4.4 6.62 1.23-0.48 2.44-1 1.21-0.52 2.41-1.07 1.2-0.56 2.37-1.15 1.18-0.59 2.34-1.22 5.15-2.81 9.93-6.22 4.78-3.41 9.13-7.36 4.34-3.95 8.18-8.39 3.84-4.44 7.13-9.3c17.44-25.74 21.11-58.86 6.9-86.94zm-216.68 321.9c9.83-13.32 24.63-18.51 40.66-18.51 0.68 0 0.68-3.71-0.1-3.91-16.67-4.13-33.88 7.34-40.61 22.1v0.32z"/>
|
||||
<path class="s1" d="m339.61 354.78c-1.31-2.47-4.52-3-6.84-1.79l-18.24 9.47q-3.45 0.72-6.89 1.54-3.43 0.82-6.84 1.73-3.4 0.91-6.79 1.91-3.38 1.01-6.73 2.11-0.21-0.93-0.79-1.69-0.57-0.75-1.41-1.2-0.84-0.44-1.79-0.5-0.95-0.05-1.84 0.29c-24.15 7.26-49.64 7.8-74.61 5.72q-0.37-0.03-0.75 0.02-0.37 0.04-0.73 0.15-0.36 0.11-0.69 0.28-0.34 0.18-0.63 0.41-1.46-0.57-2.91-1.18-1.44-0.62-2.87-1.27-1.42-0.65-2.83-1.35-1.4-0.69-2.79-1.43c-4.11-2.18-9.86 2.48-6.84 6.84l2.58 3.72q0.01 0.13 0.09 0.26 0.43 1.21 1.04 2.35 0.6 1.13 1.36 2.17 0.77 1.03 1.67 1.95 0.9 0.92 1.93 1.69 1.01 1.12 2.12 2.14 0.59 0.6 1.36 0.97 0.76 0.36 1.61 0.44 0.84 0.07 1.66-0.14 0.82-0.22 1.51-0.71 3.25 1.06 6.56 1.91 3.31 0.85 6.66 1.49 3.36 0.65 6.75 1.08 3.39 0.44 6.8 0.66 0.1 0.01 0.19 0.01 0.1 0.01 0.19 0.01 0.1 0 0.2-0.01 0.09 0 0.19-0.01 6 1.06 12.07 1.55 6.07 0.48 12.15 0.39 6.09-0.08 12.14-0.75 6.06-0.67 12.02-1.9 0.45 0.44 1 0.75 0.55 0.31 1.17 0.47 0.61 0.15 1.24 0.14 0.63-0.01 1.24-0.18l24.33-5.7c6.68-1.57 13.48-2.89 19.73-5.81 10.83-5.1 18.36-17.51 12.25-29z"/>
|
||||
<path class="s5" d="m346.94 345.7q-0.01-0.73-0.22-1.44-0.21-0.7-0.6-1.32-0.39-0.62-0.93-1.11-0.54-0.5-1.19-0.83-0.41-0.28-0.88-0.47-0.46-0.19-0.96-0.27-0.49-0.08-1-0.06-0.5 0.03-0.98 0.17-0.43 0.07-0.84 0.23-0.41 0.16-0.77 0.4-0.37 0.24-0.67 0.55-0.31 0.31-0.54 0.68-1.99 1.62-4.08 3.11-2.09 1.49-4.28 2.84-2.18 1.35-4.45 2.56-2.27 1.2-4.61 2.26-2.56 1.04-5.15 1.98-2.6 0.95-5.23 1.8-2.62 0.85-5.28 1.6-2.66 0.75-5.34 1.4-5.58 1.46-11.22 2.65-5.64 1.19-11.32 2.11-5.69 0.92-11.42 1.57-5.73 0.64-11.48 1.02-5.79 0.37-11.59 0.45-5.8 0.08-11.59-0.13-5.8-0.2-11.57-0.7-5.78-0.49-11.53-1.27-2.53-0.31-5.04-0.74-2.51-0.43-5-0.97-2.49-0.55-4.95-1.21-2.46-0.67-4.89-1.45-1.16-0.39-2.31-0.8-1.15-0.42-2.28-0.86-1.14-0.45-2.26-0.93-1.13-0.47-2.24-0.98c-3.25-1.54-5.98-3.54-9.39-4.26-1.89-0.39-3.45 2-2.56 3.65 1.56 2.82 4.37 5.06 7.51 6.88q0.1 0.11 0.22 0.21 0.11 0.1 0.24 0.18 0.12 0.08 0.26 0.15 0.14 0.06 0.28 0.11 0.3 0.44 0.58 0.88 0.29 0.45 0.56 0.9 0.28 0.45 0.54 0.91 0.26 0.46 0.51 0.93 1.58 2.48 3.09 5 2.55 4.32 4.66 8.87 1.14 2.44 2.17 4.92 1.04 2.48 1.97 5 0.93 2.52 1.75 5.08 0.83 2.56 1.55 5.15c1.82 6.52 3.21 13.14 4.44 19.79 1.23 6.65 1.09 14.61 3.84 20.67q0.01 0.19 0.05 0.37 0.03 0.18 0.1 0.36 0.07 0.17 0.17 0.33 0.1 0.16 0.22 0.3c4.09 5 12.47 7.09 18.42 8.8q2.67 0.77 5.37 1.41 2.7 0.63 5.43 1.13 2.73 0.51 5.48 0.87 2.75 0.36 5.52 0.59 5.63 0.47 11.27 0.39 5.65-0.07 11.27-0.68 5.61-0.62 11.14-1.77 5.53-1.15 10.92-2.83c13.62-4.28 26.92-11 37.26-21 10.34-10 16.8-22.73 20.13-36.56 3.78-15.84 4.09-32.27 3.72-48.57zm-43.94 87.3c-14.69 8.92-31.63 13.46-48.71 14.5q-3.22 0.17-6.44 0.16-3.22 0-6.44-0.18-3.21-0.17-6.42-0.52-3.2-0.34-6.38-0.86-1.74-0.28-3.46-0.6-1.73-0.33-3.45-0.7-1.72-0.38-3.42-0.8-1.71-0.43-3.4-0.9c-2.53-0.69-5.09-1.75-7.69-2.39 0.39-3.88-0.71-8-1.31-11.84-0.6-3.84-1.29-7.85-2.07-11.76q-0.58-2.92-1.25-5.82-0.68-2.9-1.44-5.78-0.76-2.87-1.61-5.72-0.86-2.86-1.8-5.68-0.94-2.87-2.03-5.69-1.1-2.82-2.34-5.57-1.24-2.76-2.62-5.44-1.39-2.69-2.91-5.3c-0.47-0.79-1.06-1.88-1.74-3.09q2.28 0.74 4.6 1.38 2.31 0.64 4.65 1.19 2.33 0.55 4.69 1.01 2.36 0.45 4.73 0.81 6.1 0.95 12.25 1.57 6.15 0.62 12.32 0.91 6.17 0.29 12.35 0.25 6.17-0.04 12.34-0.41 6.34-0.34 12.65-1.03 6.31-0.68 12.57-1.7 6.26-1.03 12.46-2.39 6.2-1.36 12.32-3.05c11.06-3.07 23-6.7 32.59-13.4-0.23 13.53-0.83 27.2-4.51 40.24-4.62 16.38-14.43 29.75-29.08 38.6zm-79 12.3l0.31 0.07z"/>
|
||||
<path class="s5" d="m335.25 378c-10.56 4-20.86 8.21-31.89 11q-4.58 1.16-9.21 2.12-4.62 0.95-9.29 1.69-4.67 0.74-9.36 1.26-4.7 0.52-9.41 0.83-4.61 0.31-9.23 0.42-4.62 0.1-9.24 0-4.62-0.1-9.23-0.4-4.61-0.3-9.2-0.81c-6-0.68-12.08-1.56-18.06-2.64q-4.84-0.87-9.63-2c-1.87-0.44-3.7-1-6.05-1.54q1.22 3.1 2.28 6.26 0.2 0.6 0.38 1.2 1.79 5.47 3.24 11l0.17 0.35-0.06 0.11q1.32 5.11 2.37 10.3c0.78 3.9 1.45 7.83 2.07 11.76 0.62 3.93 1.7 8 1.31 11.84 2.6 0.63 5.16 1.7 7.69 2.39 2.53 0.69 4.82 1.23 7.25 1.75q0-1.07 0.13-2.13 0.13-1.06 0.38-2.1 0.25-1.04 0.63-2.04 0.37-1 0.86-1.95c0.2-0.48 0.38-1 0.54-1.45l0.32-0.12q1.45-2.43 3.32-4.55 1.88-2.12 4.12-3.85 2.24-1.73 4.77-3.01 2.52-1.28 5.24-2.07l0.14-0.06c5.41-1.57 11.34-1.72 16.46 0.26q-0.51 0.55-1 1.12h0.76q0.16 0.05 0.33 0.08 0.16 0.04 0.33 0.06 0.16 0.03 0.33 0.04 0.17 0 0.34 0l1.58-0.08q1.12-0.8 2.28-1.54 1.16-0.73 2.37-1.39 1.21-0.66 2.45-1.24 1.25-0.58 2.53-1.09c13.19-3.23 28.43-0.16 38.47 8.78q0.12 0.11 0.23 0.22 0.11 0.12 0.21 0.25 0.1 0.12 0.18 0.26 0.09 0.13 0.17 0.27h0.09q3.87-3.2 7.2-6.95 3.33-3.76 6.05-7.98 2.72-4.22 4.76-8.81 2.03-4.58 3.34-9.43 0.97-3.44 1.67-7 0.28-1.38 0.52-2.76c0.39-2.19 0.75-4.42 1-6.63z"/>
|
||||
<path class="s3" d="m254.31 447.53c17.08-1 34-5.58 48.71-14.5q1-0.61 1.99-1.25 0.98-0.65 1.94-1.33 0.95-0.67 1.89-1.38 0.93-0.72 1.84-1.46-0.08-0.15-0.17-0.29-0.09-0.14-0.2-0.28-0.1-0.13-0.22-0.25-0.11-0.13-0.24-0.24c-10-8.94-25.27-12-38.47-8.78q-2.86 1.11-5.54 2.62-2.68 1.51-5.12 3.38-2.44 1.87-4.59 4.07-2.15 2.19-3.97 4.67c-1.21 1.65-0.08-0.26 0-0.32q0.66-1.43 1.44-2.8 0.77-1.37 1.65-2.68 0.88-1.3 1.86-2.54 0.98-1.23 2.05-2.38c-7.74-3-17.37-1.12-24.22 3.18-6.45 4.06-12.88 11.94-12.73 19.95q3.22 0.7 6.49 1.21 3.17 0.51 6.37 0.86 3.19 0.34 6.4 0.52 3.21 0.17 6.42 0.18 3.21 0.01 6.42-0.16z"/>
|
||||
<path class="s5" d="m414.66 312.25q3.84-3.83 7.67-7.67 1.11-1.13 2.12-2.35 1.01-1.22 1.9-2.53 0.89-1.3 1.66-2.69 0.77-1.38 1.41-2.83c6.24-14.07 3-30.39-2.68-44.07-7.06-17-18.51-32.16-31.67-44.93-12.61-12.23-27.39-22.87-43.9-29.13-14-5.3-30.73-7.74-44.37-0.17-4.81 2.67-8.46 6.61-12.3 10.45l-2.27 2.27c-0.15 0.15-0.34 0.43-0.53 0.53-0.45 0.22-1.78-0.28-2.32-0.38q-7.55-1.45-15.23-2.18-6.87-0.65-13.77-0.71-6.9-0.06-13.78 0.47-6.88 0.53-13.68 1.65-6.81 1.12-13.5 2.82-6.38 1.63-12.6 3.78-6.22 2.15-12.24 4.81-6.02 2.67-11.8 5.83-5.78 3.15-11.27 6.78-5.68 3.76-11.02 7.99-5.34 4.22-10.3 8.89-4.97 4.66-9.52 9.72-4.56 5.06-8.67 10.49-3.82 5.05-7.22 10.38-3.4 5.34-6.37 10.93-2.96 5.59-5.47 11.41-2.51 5.81-4.54 11.8c-2.72 8.07-4.79 16.34-6.19 24.74-1.41 8.39-2.15 16.89-2.21 25.4-0.06 8.51 0.56 17.02 1.85 25.43 1.29 8.42 3.25 16.72 5.85 24.82q1.96 6.04 4.4 11.91 2.43 5.87 5.33 11.52 2.91 5.65 6.25 11.06 3.35 5.4 7.12 10.51 4.16 5.64 8.8 10.9 4.63 5.26 9.7 10.09 5.08 4.84 10.55 9.22 5.48 4.37 11.31 8.26 6.36 4.23 13.09 7.82 6.73 3.6 13.78 6.53 7.05 2.92 14.35 5.16 7.3 2.23 14.78 3.75 7.59 1.53 15.29 2.32 7.71 0.79 15.45 0.84 7.74 0.05 15.46-0.64 7.71-0.69 15.32-2.12 7.51-1.41 14.84-3.55 7.34-2.13 14.43-4.96 7.1-2.83 13.89-6.34 6.78-3.5 13.2-7.65 6.04-3.91 11.71-8.35 5.68-4.44 10.93-9.37 5.25-4.92 10.04-10.3 4.8-5.37 9.09-11.15c5.21-7.01 9.83-14.44 13.81-22.21 3.97-7.77 7.3-15.86 9.94-24.19 2.64-8.32 4.59-16.85 5.82-25.49 1.23-8.65 1.74-17.38 1.53-26.11q-0.08-3.68-0.32-7.35-0.24-3.67-0.64-7.33-0.41-3.66-0.98-7.29-0.57-3.63-1.31-7.24zm-104.75-120.12c8.38-8.38 22-6.61 32.25-3.31 12.32 4 23.6 11.05 33.57 19.21q4.18 3.39 8.07 7.1 3.9 3.7 7.5 7.7 3.6 4 6.88 8.27 3.27 4.26 6.21 8.77c6.14 9.52 11.35 20.26 12.94 31.59 1.11 7.89 0.21 16.61-5.64 22.54l-1.49 1.49q-2.25-6.9-5.13-13.57-2.88-6.67-6.35-13.05-3.48-6.37-7.52-12.4-4.05-6.03-8.63-11.67-4.63-5.71-9.77-10.97-5.13-5.26-10.73-10.03-5.59-4.77-11.6-9.01-6-4.24-12.37-7.91-3.53-2.03-7.16-3.88-3.64-1.84-7.36-3.5-3.72-1.65-7.52-3.11-3.81-1.46-7.68-2.72zm-105.1 286.19c-46.27-18.81-79.49-60.25-87.78-109.51-8.29-49.26 9.54-99.29 47.12-132.21 37.57-32.91 89.51-44 137.25-29.31 47.74 14.7 84.45 53.08 97.01 101.43q1.48 5.77 2.48 11.63 1.01 5.87 1.53 11.8 0.52 5.93 0.56 11.88 0.04 5.95-0.41 11.89-0.45 6.1-1.43 12.14-0.98 6.04-2.46 11.97-1.49 5.94-3.49 11.72-1.99 5.79-4.47 11.38-2.43 5.44-5.3 10.67-2.86 5.23-6.14 10.21-3.29 4.97-6.96 9.67-3.68 4.69-7.72 9.07c-9.89 10.66-21.33 19.76-33.93 26.99-12.61 7.23-26.24 12.52-40.43 15.68-14.18 3.16-28.77 4.15-43.25 2.95-14.49-1.21-28.71-4.59-42.18-10.05z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 14 KiB |
13
public/icons/igdb.svg
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
<svg version="1.2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200 200" width="200" height="200">
|
||||
<title>igdb</title>
|
||||
<style>
|
||||
.s0 { fill: #000000 }
|
||||
</style>
|
||||
<g id="Layer_1">
|
||||
<path class="s0" d="m55.7 84.3h5.3v23.9h-5.3z"/>
|
||||
<path class="s0" d="m67.2 96.3v-0.1c0-6.7 5.3-12.3 12.5-12.3 4.3 0 6.9 1.2 9.4 3.3l-3.3 4c-1.9-1.6-3.5-2.5-6.3-2.5-3.8 0-6.8 3.4-6.8 7.5 0 4.4 3 7.6 7.2 7.6 1.9 0 3.6-0.5 4.9-1.4v-3.4h-5.2v-4.6h10.3v10.4q-1 0.9-2.2 1.6-1.2 0.7-2.5 1.2-1.3 0.5-2.7 0.7-1.4 0.3-2.8 0.3c-7.4 0-12.5-5.2-12.5-12.3z"/>
|
||||
<path fill-rule="evenodd" class="s0" d="m96.3 84.3h9.3c7.5 0 12.6 5.2 12.6 11.9 0 6.8-5.1 12-12.6 12h-9.3zm5.2 4.7v14.4h4.1c4.3 0 7.2-2.9 7.2-7.1v-0.1c0-4.2-2.9-7.2-7.2-7.2z"/>
|
||||
<path fill-rule="evenodd" class="s0" d="m124.3 84.3h11c2.7 0 4.9 0.8 6.2 2.1q0.4 0.4 0.8 0.9 0.3 0.5 0.5 1 0.2 0.5 0.3 1.1 0.1 0.5 0.1 1.1v0.1c0 2.6-1.5 4.1-3.1 5.1 2.7 1.1 4.4 2.7 4.4 5.9 0 4.4-3.5 6.6-8.9 6.6h-11.3zm13.7 7c0-1.5-1.3-2.4-3.5-2.4h-5.1v5h4.8c2.3 0 3.8-0.7 3.8-2.5zm-2.6 6.9h-6v5.3h6.2c2.3 0 3.7-0.8 3.7-2.6v-0.1c0-1.6-1.2-2.6-3.9-2.6z"/>
|
||||
<path fill-rule="evenodd" class="s0" d="m157.2 127l-1.9-0.3q-13.7-2.2-27.5-3.3-13.8-1-27.7-1-13.8 0-27.7 1-13.8 1.1-27.5 3.3l-1.9 0.3v-55h114.2zm-57.1-8.1q6.8 0 13.5 0.3 6.8 0.3 13.5 0.8 6.7 0.5 13.4 1.3 6.7 0.7 13.4 1.7v-47.7h-107.5v47.7q6.6-1 13.3-1.7 6.7-0.8 13.5-1.3 6.7-0.5 13.4-0.8 6.8-0.3 13.5-0.3z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.4 KiB |
17
public/icons/pcgamingwiki.svg
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
<svg version="1.2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 450 450" width="450" height="450">
|
||||
<title>pcgamingwiki</title>
|
||||
<style>
|
||||
.s0 { fill: #365798 }
|
||||
.s1 { fill: #a5b6d9 }
|
||||
.s2 { fill: #a5b6d8 }
|
||||
</style>
|
||||
<path class="s0" d="m127 127.2l106.3-39.6 89.7 13.6v242.6 6.8l-88.9 11.8-107.1-35.7z"/>
|
||||
<path class="s1" d="m133 321.3l-0.3-188.3 92.1-34-0.2 251.3zm107.2 29.2v-250.2l73.4 9.9v231.2z"/>
|
||||
<path class="s0" d="m178 262.5l-41.2-2.4-0.3-72.6 41.6-3.9zm4-79.3l37-4.6-0.3 85.2-36.8-1.1zm-45.7-0.6v-46.1l41.7-13.6 0.3 55zm83.1-75.1l0.2 65-37.6 4.8v-56.4zm-59.9 215.5v-55.7l33.6 2.2v63.5zm58.5 19.1l-4.1-1.5c0.9-5.3-4.5-7.6-4.5-1.4l-4.4-1.3c-0.2-5.2-3.3-7.5-5-1.6l-2.3-0.7-0.1-65.8 2.9 0.2c-1 6.5 5.6 6.7 4.8 0.4l4.8 0.3c-1 6.8 5.5 6.8 4.8 0.3l3 0.2zm-80.9-76.3l19.5 1.4-0.1 25.6-19.4-2.7zm19.7 30.6l-0.2 26.2-19.6-4.8v-24.3zm87.3-192l66 8.7v225.1l-65.9 8.3z"/>
|
||||
<path class="s1" d="m147.9 175.1l5.8-21.8-3.8 1.7 5.1-18.7 6-1.7-4.5 12.6 4.5-2.4z"/>
|
||||
<path class="s2" d="m193 163.2c0.3-0.8 0.6-1.5 0.9-2.3 3.3 1.4 6.3 2.4 9.6 0.5 3.2-1.9 5.4-5.8 6.6-9.2 2.4-6.7 2.4-15.8-2-21.7-5.3-7.2-12.9-3.4-16.5 3.3-1.1 2.1-2.7 7.4-2.9 10.7-0.1 1.6 0 3.3 0.2 5 0.2 1.9 1.2 3.9 1 5.9-0.1 0.6-0.4 1-1.1 1.1-4-6.6-1.8-17.3 1.2-23.8 3-6.5 11.3-13.1 18-6.9 6.1 5.7 6.7 16.1 5 23.8-1.5 6.8-6.2 16.9-14.7 16.2-1.4-0.4-4.4-1.1-5.3-2.6zm4.9-10.9c-0.8-2.7 2.7-4.6 3.5-6.7 0.5-1.2 0-2.3-0.5-3.3-1.2-0.6-2.1-0.3-2.6 0.9-0.8 2.1-1.5 3.5-3 5.2-0.8-3.2-0.3-6.9 1.6-9.7 1-1.5 3.1-2.2 4.6-1.6 4.9 1.8 3.4 10.1 1.3 13.4-1.2 1.7-3.1 1.8-4.9 1.8zm0.8-6.1c-1.9 5.3-4.7 11.2-6.7 15.7-0.2-0.1-0.3-0.1-0.4-0.2-0.8-0.9-1.3-2-1.8-3.1-0.2-0.4 0-0.9 0.3-1.2 3.1-3.4 5.4-8.3 8.6-11.2z"/>
|
||||
<path class="s1" d="m171.7 306.2c-1.4 2.8-1 5.9-1.4 9-2.3-0.6-4-5.1-4.4-7.1 0.4-2.3 1.6-4.1 3.1-5.9 0.7-0.9 0.9-1.7 0.5-2.7-0.2-0.4-0.1-0.9-0.5-1.2-2.1 0.4-3.3 1.9-4.7 3.3-1.6-1.7-1.2-7.9 0-9.7 2-0.4 3.7 0.2 5.4 1.4 1.3-1.2 1.3-2.4 0.2-3.7-0.9-1-3.5-2.1-4-3.1-0.4-1.5 2.4-6.5 4.1-6.4 1.8 2.7 2.9 5.8 3.6 9 0.6 0.3 1.2 0.5 1.9 0.4 0.4-3.7-0.5-7.2-1.6-10.6 0.1-0.1 0.2-0.2 0.2-0.2 2 0.1 4 0.5 5.5 2 3.5 3.4-2.7 9.9 0.1 13.8 2.5-2.4 2.5-5.5 4.4-8.1 1.9 2.4 3.6 7.3 3.2 10.4-1.6 2-2.9 3.1-6.8 3.4 0.1 0.9-0.4 1.7-0.2 2.7 2.1 2.2 4.4 1.9 7.1 1.7 0.4 1.9-1.6 8-3.1 9.4-3-1.4-4.5-4.2-6.2-6.9-0.6 0.5-1.1 0.9-1.5 1.4 0.4 3.1 4.3 6.9 3.8 9.6-1.3 0.6-2.7 1-4.2 0.8-1.5-0.2-2.1-1-2.4-2.6-0.7-3.3 0.8-7.6-2.1-10.1zm28.1 5.2v-15.1l16.1 2.6v16zm-0.1-33l16.1 1.7v15.8l-16.1-2.3zm16.1 39.2v15.8l-16-4.4v-15.1zm-76-7.5v-6.8l3.2 0.5 3.9-3.9 0.2 16-3.9-5zm9.5-6c0.3-0.1 2.5-2 2.8-1.9 1.5 4.1 1.3 7.4-0.5 11.7l-2.1-2.9c0.7-3.1 0.7-3.9-0.3-6.9zm2.3 12.9c-51.1 38.7-25.5 19.3 0 0zm117.2 18.9l-16.7 2v-89.7l16.7-0.9zm21.3-121.7c-2.6 11.9-15.6 10.8-18.5 0.7l-21.9 0.7v-16.1l21.2-0.8c5.4-12.8 15.3-10.9 19.4 0l15.7 0.1 0.4 14.6zm-40.9-56.2v-5.7l57.3 1.8v4.6zm-109.8 125.9l14.8 2.3-4.5-10.3-1.9 3.6-3.2-6.9z"/>
|
||||
<path fill-rule="evenodd" class="s0" d="m280.8 219c-4.04 0-7.3-5.5-7.3-12.3 0-6.8 3.26-12.3 7.3-12.3 4.04 0 7.3 5.5 7.3 12.3 0 6.8-3.26 12.3-7.3 12.3z"/>
|
||||
<path class="s1" d="m169.1 236.4c-0.4 0.7-0.4 1.6 0.1 2.2l-6.2 9.5h1.6l5.9-8.7c0.8 0.1 1.6-0.2 2-0.9 0.6-0.9 0.3-2.1-0.6-2.7-1-0.6-2.2-0.3-2.8 0.6zm-26.3 7.1l-2.3 3.1 1.1 1 1.9-2.6 1.7 0.1c0.1 0.2 0.2 0.3 0.4 0.5 0.8 0.8 2 0.8 2.8 0 0.8-0.8 0.8-2 0-2.8-0.8-0.8-2-0.8-2.8 0-0.2 0.2-0.4 0.5-0.5 0.9zm4.8-16.3c-1 0-1.9 0.9-1.9 1.9 0 1 0.9 1.9 1.9 1.9 0.9 0 1.6-0.6 1.8-1.4l10.5 0.3 4.1 5.1c0 0.2-0.1 0.4-0.1 0.6 0 1.1 0.9 2 2 2 1.1 0 2-0.9 2-2 0-1.1-0.9-2-2-2-0.4 0-0.7 0.1-1 0.3l-4.5-5.4-11.4-0.3c-0.2-0.7-0.8-1-1.4-1zm-4.7 4h-1.9v-1.6c1.5 0 2.3-0.4 3.1 0.9 1.6 2.4 3 5 4.5 7.4 0.7 1.2 1.5 2.5 2.3 3.7 1.1 1.8 1.4 1.9 3.5 2 1.5 0.1 3 0.1 4.5 0.1 1.6 0 1.5-1.3 3-1.2 1.3 1.2 1.3 2.8 0 4-1.4 0.1-1.3-1.4-2.3-1.4h-4.6c-2.3 0-2.9 0.5-4.1-1.3-2.6-4.2-5.3-8.4-8-12.6zm1.7 6.3c0 1-0.9 1.9-1.9 1.9-1 0-1.9-0.9-1.9-1.9 0-1 0.9-1.9 1.9-1.9 1 0 1.9 0.9 1.9 1.9zm3.1-36.8c-0.8 0-1.5 0.6-1.8 1.3l-5.4 0.2 0.1 1.5 5.4-0.2c0.3 0.7 1 1.2 1.9 1.2 1.1 0 1.9-1 1.9-2.1 0-1.1-1-1.9-2.1-1.9zm13.4 4.8c-1.1 0-2 0.9-1.9 2 0 1.1 0.9 2 2 1.9 0.8 0 1.4-0.5 1.7-1.2l6-0.2c0.3 0.7 1 1.1 1.8 1.1 1.1 0 2-0.9 1.9-2 0-1.1-0.9-2-2-1.9-0.9 0-1.6 0.6-1.8 1.4l-5.8 0.2c-0.3-0.8-1-1.4-1.9-1.3zm-10.5-7.2l-1 1.1 4.7 4.1 19.2-0.7-0.1-1.5-18.5 0.7zm-9.9 12.2v-1.4l16.2-0.9 16.9 24.6-1.3 0.8-16.6-24zm31.4 6c0.5-0.6 0.6-1.5 0.3-2.2l1.6-2.3v-2l-2.8 3.4c-0.7-0.3-1.6 0-2.1 0.6-0.7 0.8-0.6 2.1 0.2 2.8 0.8 0.6 2.1 0.5 2.8-0.3zm-7.6 0.1c0.5 0.7 1.3 1 2.1 0.8l7.3 10.5v-2.3l-6-9c0.4-0.7 0.4-1.5 0-2.2-0.6-0.9-1.8-1.1-2.7-0.5-1.2 0.6-1.4 1.9-0.7 2.7zm-8.3-2.2c-0.8 0-1.5 0.6-1.8 1.3l-13.6 0.7 0.1 1.5 13.6-0.7c0.3 0.7 1 1.2 1.9 1.2 1.1 0 1.9-1 1.9-2.1 0-1.1-1-2-2.1-1.9zm4.2 7.8l-19.3 0.5v1.5l18.6-0.5 4.1 5.3c0 0.2-0.1 0.4-0.1 0.6 0 1.1 0.9 2 2 2 1.1 0 2-0.9 2-2 0-1.1-0.9-2-2-2-0.4 0-0.7 0.1-1 0.3zm9 25c0.3 0.6 1.2 0 1.4 0.9-0.2 1-2.1 0.1-2.7 0.2-0.3-1 2-3.6 2.6-4.5 0.7-0.3 2.2 0 3 0 0.1 0.7 0.1 1.3-0.4 1.8-0.8 0-1.6-0.3-2.4-0.4-0.5 0.7-1 1.3-1.5 2zm-18.6-13.6c-1.1 0-2 0.9-1.9 2 0 1.1 0.9 2 2 1.9 0.8 0 1.4-0.5 1.7-1.2l5.3-0.1c0.3 0.7 1 1.1 1.8 1.1 1.1 0 2-0.9 1.9-2 0-1.1-0.9-2-2-1.9-0.9 0-1.6 0.6-1.8 1.4l-5.1 0.1c-0.3-0.8-1-1.4-1.9-1.3z"/>
|
||||
<path fill-rule="evenodd" class="s1" d="m188.8 206.9h22.6v31.6h-22.6z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.1 KiB |
1
public/icons/rommicon.svg
Normal file
|
After Width: | Height: | Size: 9.9 KiB |
BIN
public/icons/rommmark.png
Normal file
|
After Width: | Height: | Size: 6.8 KiB |
16
public/key.gpg
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
mDMEaI1UGxYJKwYBBAHaRw8BAQdAuywOb0ODn+sYTU01SAt5Zhnrg06Fu434sQaQ
|
||||
IQal/0+0H0Ryb3AgT1NTIDxzZWN1cml0eUBkcm9wb3NzLm9yZz6IlgQTFgoAPhYh
|
||||
BNJmUJMa2VepK+lzaoRc4skSKQf6BQJojVQbAhsDBQkB4TOABQsJCAcCBhUKCQgL
|
||||
AgQWAgMBAh4BAheAAAoJEIRc4skSKQf6pusBAOedfWEsKtkhgAYml4PtkEq2BLEA
|
||||
58w66EKuPu0ypM0dAQDDRdgEpsTgg6uUJlnQ93d6PJxgvNo20qq9tyDviCWxDYh1
|
||||
BBAWCgAdFiEEMTpKS+QtsauEUrDQOZnj7+ye63QFAmiNVOgACgkQOZnj7+ye63SC
|
||||
hwEA31IuEjccUm8miPOJ1KZApGXpDMfyolpqgfD2jx5YzuYA/RqWh9OIa4LwLNjl
|
||||
kvWwLnc7X+sE8pSyY3QDNv/VO5oKuDgEaI1UGxIKKwYBBAGXVQEFAQEHQE0/It0Y
|
||||
r8WjZetfhMBBdoz5FHw4V4qkqzT2cN8JchMrAwEIB4h+BBgWCgAmFiEE0mZQkxrZ
|
||||
V6kr6XNqhFziyRIpB/oFAmiNVBsCGwwFCQHhM4AACgkQhFziyRIpB/pE+QEAuyDc
|
||||
OM5bNbNqIkt/GvSne6WqGTJZenWUjvMKI7rKYWEA/38JAhY/OQLoyIt0pTBaJ8pQ
|
||||
JxHMLckNYF1whCZFloAM
|
||||
=GsUn
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
BIN
public/map.png
Normal file
|
After Width: | Height: | Size: 6.7 KiB |
BIN
public/news/roadmap-sep32025.png
Normal file
|
After Width: | Height: | Size: 40 KiB |
|
|
@ -1 +0,0 @@
|
|||
|
||||
BIN
public/screenshots/app.webp
Normal file
|
After Width: | Height: | Size: 125 KiB |
BIN
public/screenshots/authentication.png
Normal file
|
After Width: | Height: | Size: 134 KiB |
BIN
public/screenshots/company.png
Normal file
|
After Width: | Height: | Size: 611 KiB |
BIN
public/screenshots/competitors.png
Normal file
|
After Width: | Height: | Size: 249 KiB |
BIN
public/screenshots/engagement.png
Normal file
|
After Width: | Height: | Size: 86 KiB |
BIN
public/screenshots/metadata.webp
Normal file
|
After Width: | Height: | Size: 224 KiB |
BIN
public/screenshots/networking.png
Normal file
|
After Width: | Height: | Size: 106 KiB |
BIN
public/screenshots/news.png
Normal file
|
After Width: | Height: | Size: 499 KiB |
BIN
public/screenshots/profile.png
Normal file
|
After Width: | Height: | Size: 208 KiB |
BIN
public/screenshots/storepage.png
Normal file
|
After Width: | Height: | Size: 2.2 MiB |
21
public/site.webmanifest
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
{
|
||||
"name": "Drop OSS",
|
||||
"short_name": "Drop",
|
||||
"icons": [
|
||||
{
|
||||
"src": "/web-app-manifest-192x192.png",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png",
|
||||
"purpose": "maskable"
|
||||
},
|
||||
{
|
||||
"src": "/web-app-manifest-512x512.png",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png",
|
||||
"purpose": "maskable"
|
||||
}
|
||||
],
|
||||
"theme_color": "#3f3f46",
|
||||
"background_color": "#3f3f46",
|
||||
"display": "standalone"
|
||||
}
|
||||
BIN
public/web-app-manifest-192x192.png
Normal file
|
After Width: | Height: | Size: 3.7 KiB |
BIN
public/web-app-manifest-512x512.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
|
|
@ -1,3 +0,0 @@
|
|||
{
|
||||
"extends": "../.nuxt/tsconfig.server.json"
|
||||
}
|
||||
171
src/app/about/page.tsx
Normal file
|
|
@ -0,0 +1,171 @@
|
|||
import { AnimatedNumber } from '@/components/animated-number'
|
||||
import { Container } from '@/components/container'
|
||||
import { Footer } from '@/components/footer'
|
||||
import { GradientBackground } from '@/components/gradient'
|
||||
import { Navbar } from '@/components/navbar'
|
||||
import { Team } from '@/components/team'
|
||||
import { Heading, Lead, Subheading } from '@/components/text'
|
||||
import type { Metadata } from 'next'
|
||||
import Link from 'next/link'
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: 'About',
|
||||
description:
|
||||
'About Drop OSS - what we do, what we believe, and what we aim to achieve.',
|
||||
}
|
||||
|
||||
function Header() {
|
||||
return (
|
||||
<Container className="mt-16">
|
||||
<Heading as="h1">An open Steam.</Heading>
|
||||
<Lead className="mt-6 max-w-3xl">
|
||||
We're building an open-source alternative to platforms like Steam
|
||||
and Epic Games, enabling anyone to have full control over their gaming.
|
||||
</Lead>
|
||||
<section className="mt-16 grid grid-cols-1 lg:grid-cols-2 lg:gap-12">
|
||||
<div className="max-w-lg">
|
||||
<h2 className="text-2xl font-medium tracking-tight">Our mission</h2>
|
||||
<p className="mt-6 text-sm/6 text-gray-600">
|
||||
We aim to build a "Steam-like experience for DRM-free
|
||||
games". One of the major sticking points of DRM games, and why
|
||||
platforms like Steam have done so well, is that they provide awesome
|
||||
features like worldwide play-together, social features, and useful
|
||||
overlays and tools. We aim to replicate this for <i>any</i> game.
|
||||
</p>
|
||||
<p className="mt-8 text-sm/6 text-gray-600">
|
||||
Don't get us wrong, we don't think Steam or Valve is bad.
|
||||
They are unusually consumer-friendly, and provide a great service.
|
||||
They will always have a place, providing a marketplace for DRM
|
||||
games. Drop aims to be the alternative.
|
||||
</p>
|
||||
</div>
|
||||
<div className="max-lg:mt-16 lg:col-span-1">
|
||||
<Subheading>The Numbers</Subheading>
|
||||
<hr className="mt-6 border-t border-gray-200" />
|
||||
<dl className="mt-6 grid grid-cols-1 gap-x-8 gap-y-4 sm:grid-cols-2">
|
||||
<div className="flex flex-col gap-y-2 border-b border-dotted border-gray-200 pb-4">
|
||||
<dt className="text-sm/6 text-gray-600">Lines of code</dt>
|
||||
<dd className="order-first text-6xl font-medium tracking-tight">
|
||||
<AnimatedNumber start={10} end={40} />k
|
||||
</dd>
|
||||
</div>
|
||||
<div className="flex flex-col gap-y-2 border-b border-dotted border-gray-200 pb-4">
|
||||
<dt className="text-sm/6 text-gray-600">
|
||||
Individual open-source projects
|
||||
</dt>
|
||||
<dd className="order-first text-6xl font-medium tracking-tight">
|
||||
>
|
||||
<AnimatedNumber start={0} end={5} />
|
||||
</dd>
|
||||
</div>
|
||||
<div className="flex flex-col gap-y-2 max-sm:border-b max-sm:border-dotted max-sm:border-gray-200 max-sm:pb-4">
|
||||
<dt className="text-sm/6 text-gray-600">Docker pulls</dt>
|
||||
<dd className="order-first text-6xl font-medium tracking-tight">
|
||||
<AnimatedNumber start={0} end={48.8} decimals={1} />k
|
||||
</dd>
|
||||
</div>
|
||||
<div className="flex flex-col gap-y-2">
|
||||
<dt className="text-sm/6 text-gray-600">Contributors</dt>
|
||||
<dd className="order-first text-6xl font-medium tracking-tight">
|
||||
>
|
||||
<AnimatedNumber start={0} end={15} />
|
||||
</dd>
|
||||
</div>
|
||||
</dl>
|
||||
</div>
|
||||
</section>
|
||||
</Container>
|
||||
)
|
||||
}
|
||||
|
||||
function FrequentlyAskedQuestions() {
|
||||
return (
|
||||
<Container className="mt-32">
|
||||
<section id="faqs" className="scroll-mt-8">
|
||||
<Subheading className="">Frequently asked questions</Subheading>
|
||||
<Heading as="div" className="mt-2">
|
||||
Your questions answered.
|
||||
</Heading>
|
||||
<div className="mt-16 mb-32 max-w-xl space-y-12">
|
||||
<dl>
|
||||
<dt className="text-sm font-semibold">
|
||||
Do you intend to replace Steam?
|
||||
</dt>
|
||||
<dd className="mt-4 text-sm/6 text-gray-600">
|
||||
No. Drop is not a replacement for Steam, in the sense that we will
|
||||
ever offer a marketplace for developers to sell games. Drop can
|
||||
replace Steam <i>for an individual</i>, if they only played
|
||||
DRM-free games that they bought from outside of Steam (like GOG).
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt className="text-sm font-semibold">
|
||||
Will Drop ever cost money or require a subscription?
|
||||
</dt>
|
||||
<dd className="mt-4 text-sm/6 text-gray-600">
|
||||
We believe in <strong>paying for services, not code</strong>. All
|
||||
our projects are and always will be open source (AGPLv3), and we
|
||||
endeavour to allow users to self-host as much of it as possible.
|
||||
Where that is not possible, we may launch a subscription service -
|
||||
likely as a feature for multiplayer, to play between self-hosted
|
||||
Drop instances. Naturally, this service will also be available to
|
||||
self-host.
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt className="text-sm font-semibold">Is Drop legal?</dt>
|
||||
<dd className="mt-4 text-sm/6 text-gray-600">
|
||||
Yes. Officially, Drop is <strong>only</strong> for DRM-free games,
|
||||
like the ones you purchase from GOG or download from itch.io,{' '}
|
||||
<strong>and</strong> that you have a license to redistribute. We
|
||||
cannot control whether you use Drop with cracked, pirated, or
|
||||
DRM-bypassed games or not, and do not condone the use of
|
||||
torrenting and automation software to automatically download
|
||||
games.
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt className="text-sm font-semibold">How can I support Drop or get involved?</dt>
|
||||
<dd className="mt-4 text-sm/6 text-gray-600">
|
||||
Thank you for helping us out! If you're looking to contribute
|
||||
code, check out our{' '}
|
||||
<Link
|
||||
href="https://developer.droposs.org/contributing"
|
||||
className="text-blue-500 hover:underline"
|
||||
target="_blank"
|
||||
>
|
||||
developer contributing guide
|
||||
</Link>
|
||||
. If you're looking to contribute financially, you can join
|
||||
our{' '}
|
||||
<Link
|
||||
href="https://opencollective.com/drop-oss"
|
||||
className="text-blue-500 hover:underline"
|
||||
target="_blank"
|
||||
>
|
||||
OpenCollective
|
||||
</Link>
|
||||
, or click on individual contributors above and add to their
|
||||
personal pockets.
|
||||
</dd>
|
||||
</dl>
|
||||
</div>
|
||||
</section>
|
||||
</Container>
|
||||
)
|
||||
}
|
||||
|
||||
export default function About() {
|
||||
return (
|
||||
<main className="overflow-hidden">
|
||||
<GradientBackground />
|
||||
<Container>
|
||||
<Navbar />
|
||||
</Container>
|
||||
<Header />
|
||||
<Team />
|
||||
<FrequentlyAskedQuestions />
|
||||
<Footer />
|
||||
</main>
|
||||
)
|
||||
}
|
||||
14
src/app/comparison/page.tsx
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
import Comparison from "@/components/comparison";
|
||||
import type { Metadata } from "next";
|
||||
import { Suspense } from "react";
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: 'Comparison',
|
||||
description:
|
||||
'A breakdown of the different projects you may be interested in, and the pros & cons of each.',
|
||||
}
|
||||
|
||||
|
||||
export default function ComparisonPage() {
|
||||
return <Suspense><Comparison /></Suspense>
|
||||
}
|
||||
42
src/app/download/page.tsx
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
import { Container } from '@/components/container'
|
||||
import DownloadCards from '@/components/downloads'
|
||||
import { Footer } from '@/components/footer'
|
||||
import { GradientBackground } from '@/components/gradient'
|
||||
import { Navbar } from '@/components/navbar'
|
||||
import { Heading, Lead, Subheading } from '@/components/text'
|
||||
import type { Metadata } from 'next'
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: 'Download',
|
||||
description: 'Download the latest version of the Drop client.',
|
||||
}
|
||||
|
||||
function Header() {
|
||||
return (
|
||||
<Container className="mt-16">
|
||||
<Heading as="h1" className="leading-12">
|
||||
Download
|
||||
</Heading>
|
||||
<Lead className="mt-6 max-w-3xl">
|
||||
Download the latest version of the Drop Desktop Client for your platform.
|
||||
</Lead>
|
||||
<Subheading className="mt-2">Last updated 15-11-2025</Subheading>
|
||||
</Container>
|
||||
)
|
||||
}
|
||||
|
||||
export default function DownloadPage() {
|
||||
return (
|
||||
<main className="overflow-hidden">
|
||||
<GradientBackground />
|
||||
<Container>
|
||||
<Navbar />
|
||||
</Container>
|
||||
<Header />
|
||||
|
||||
<DownloadCards />
|
||||
|
||||
<Footer />
|
||||
</main>
|
||||
)
|
||||
}
|
||||
BIN
src/app/favicon.ico
Normal file
|
After Width: | Height: | Size: 15 KiB |
25
src/app/gallery/page.tsx
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
import { Container } from '@/components/container'
|
||||
import { Footer } from '@/components/footer'
|
||||
import { Gallery } from '@/components/gallery-modal'
|
||||
import { GradientBackground } from '@/components/gradient'
|
||||
import { Navbar } from '@/components/navbar'
|
||||
import type { Metadata } from 'next'
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: 'Gallery',
|
||||
description: 'A collection of screenshots, across all components of Drop.',
|
||||
}
|
||||
|
||||
|
||||
export default function About() {
|
||||
return (
|
||||
<main className="overflow-hidden">
|
||||
<GradientBackground />
|
||||
<Container>
|
||||
<Navbar />
|
||||
</Container>
|
||||
<Gallery />
|
||||
<Footer />
|
||||
</main>
|
||||
)
|
||||
}
|
||||