Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
ChecksumDev committed Aug 11, 2023
2 parents 48cdd42 + 78cb01d commit 02bd329
Show file tree
Hide file tree
Showing 60 changed files with 541 additions and 417 deletions.
7 changes: 3 additions & 4 deletions .env.example
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
# WebApp (`apps/web`)

PUBLIC_GOOGLE_ANALYTICS_ID=
PUBLIC_GRAPHQL_ENDPOINT=http://localhost:8080/v1/graphql
# apps/web
PUBLIC_API_URL=
PUBLIC_GITHUB_CALL_URL=
10 changes: 10 additions & 0 deletions .licrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
[licenses]
accepted = ["AGPLV3"]

[dependencies]
ignore_dev_dependencies = true
ignore_optional_dependencies = true

[behavior]
run_only_on_dependency_modification = true
do_not_block_pr = false
6 changes: 3 additions & 3 deletions apps/ui/stories/ui/Button.stories.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ export default {
control: {
type: 'select',
},
options: ['primary', 'secondary', 'download', 'ghost', 'pill'],
options: ['primary', 'secondary', 'gradient', 'ghost', 'pill'],
},
disabled: {
control: {
Expand All @@ -35,9 +35,9 @@ export const Secondary = {
disabled: false,
},
};
export const Download = {
export const Gradient = {
args: {
variant: 'download',
variant: 'gradient',
disabled: false,
},
};
Expand Down
3 changes: 2 additions & 1 deletion apps/ui/stories/ui/views/ButtonsView.svelte
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
<script>
import { Button, LogoIcon, CopyIcon } from 'ui';
import { Button } from 'ui/button';
import { LogoIcon, CopyIcon } from 'ui/icons'
function handleClick() {
console.log('clicked');
Expand Down
2 changes: 1 addition & 1 deletion apps/ui/stories/ui/views/IconsView.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
PersonIcon,
SearchIcon,
VerifiedIcon,
} from 'ui';
} from 'ui/icons';
const iconImports = [
{ name: 'CalendarIcon', component: CalendarIcon },
Expand Down
20 changes: 2 additions & 18 deletions apps/ui/stories/ui/views/PillView.svelte
Original file line number Diff line number Diff line change
@@ -1,22 +1,6 @@
<script>
import { Pill } from 'ui';
import {
CalendarIcon,
CategoryIcon,
CheckmarkIcon,
ChevronDownIcon,
ChevronLeftIcon,
CopyIcon,
DotsIcon,
DownloadIcon,
ExclamationIcon,
GithubIcon,
LogoIcon,
NotVerifiedIcon,
PersonIcon,
SearchIcon,
VerifiedIcon,
} from 'ui';
import { Pill } from 'ui/pill';
import { CalendarIcon } from 'ui/icons';
</script>

<div class="bg-black p-8 rounded-md flex flex-col gap-2">
Expand Down
2 changes: 1 addition & 1 deletion apps/ui/stories/ui/views/TextView.svelte
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<script>
import { Text } from 'ui';
import { Text } from 'ui/text';
</script>

<div class="bg-primary-950 rounded-md p-8 flex flex-col gap-2 text-white">
Expand Down
2 changes: 1 addition & 1 deletion apps/ui/tailwind.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,6 @@ export default {
content: [
'./stories/**/*.svelte',
'../../apps/web/src/lib/**/*.svelte', // for using 'apps/web'
'../../packages/ui/components/**/*.svelte', // for using 'packages/ui'
'../../packages/ui/**/*.svelte', // for using 'packages/ui'
],
};
2 changes: 1 addition & 1 deletion apps/web/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "web",
"version": "0.0.1",
"scripts": {
"dev": "vite dev",
"dev": "vite dev --port 3000",
"build": "vite build",
"preview": "vite preview",
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
Expand Down
9 changes: 9 additions & 0 deletions apps/web/src/app.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,15 @@
<head>
<meta charset="utf-8" />
<link rel="icon" href="%sveltekit.assets%/favicon.png" />
<meta property="og:url" content="https://beatforge.net" />
<meta property="og:title" content="BeatForge" />
<!-- This doesn't work for opengraph tags -->
<!-- <meta property="og:image" content="%sveltekit.assets%/og_image.png" /> -->
<!-- Todo!: replace -->
<meta property="og:image" content="https://cdn.discordapp.com/attachments/1101270331261464628/1139029222837452830/og_image.png" />
<meta property="og:description" content="The most seamless modding platform for Beat Saber" />
<meta name="twitter:card" content="summary_large_image">

<meta name="viewport" content="width=device-width" />
%sveltekit.head%
</head>
Expand Down
4 changes: 4 additions & 0 deletions apps/web/src/app.postcss
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,10 @@
@tailwind components;
@tailwind utilities;

:root {
--transparent: transparent
}

html,
body,
.app {
Expand Down
129 changes: 129 additions & 0 deletions apps/web/src/lib/components/landing/LandingBentoSection.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
<script>
import FeatureSection from '$lib/components/landing/FeatureSection.svelte';
import LandingHeading from '$lib/components/landing/LandingHeading.svelte';
import LandingDescription from '$lib/components/landing/LandingDescription.svelte';
import IntersectionObserver from '$lib/components/IntersectionObserver.svelte';
let textTransition = 'translate-y-[32px] opacity-30 duration-[400ms]';
let headerTransition = 'translate-y-[32px] opacity-30 duration-[400ms]';
import { onMount } from 'svelte';
onMount(() => {
// @ts-ignore
document.getElementById('cards').onmousemove = (e) => {
for (const card of document.getElementsByClassName('beatforge-landing-bentobox-item')) {
const rect = card.getBoundingClientRect(),
x = e.clientX - rect.left,
y = e.clientY - rect.top;
// @ts-ignore
card.style.setProperty('--mouse-x', `${x}px`);
// @ts-ignore
card.style.setProperty('--mouse-y', `${y}px`);
}
};
});
</script>

<div
style="background: radial-gradient(ellipse 100% 40% at 50% 60%,rgb(164 99 246 / 7%),var(--transparent)); margin-top: 128px;"
>
<FeatureSection>
<h2
class="beatforge-landing-std-eyebrow landing-gradient-eyebrow font-bold text-sm uppercase tracking-wider -mb-12"
>
Why BeatForge
</h2>
<IntersectionObserver
once={true}
class="flex flex-col justify-center items-center text-center gap-8"
let:intersecting
top={-250}
>
<LandingHeading>
<div class="transition duration-[500ms] delay-300 {intersecting ? '' : headerTransition}">
Everything you want from a mod manager. And so much more.
</div>
</LandingHeading>

<LandingDescription>
<p class="transition duration-[500ms] delay-300 {intersecting ? '' : textTransition}">
From beginning to end, discovery to installation, BeatForge streamlines your modding
experience with impeccable seamlessness.
</p>
</LandingDescription>
</IntersectionObserver>

<IntersectionObserver once={true} let:intersecting top={0}>
<div
class:beatforge-landing-bentobox-animated={intersecting}
class="beatforge-landing-bentobox flex flex-col w-full gap-2 max-w-7xl"
id="cards"
>
<div class="beatforge-landing-bentobox-row-first flex flex-row gap-2">
<div
class="beatforge-landing-bentobox-item text-left bg-[#19181B] w-full basis-1/2 p-4 sm:p-16 rounded-md"
>
<h3 class="mb-1 font-bold text-white">Open-source transparency.</h3>
<p class="text-[#8B888C]">
BeatForge won’t lock you in to our platform. Distribute where you want, when you want,
and leave any time. Development is public, and always will be.
</p>
</div>
<div
class="beatforge-landing-bentobox-item text-left bg-[#19181B] w-full basis-1/2 p-4 sm:p-16 rounded-md"
>
<h3 class="mb-1 font-bold text-white">Crafted to perfection.</h3>
<p class="text-[#8B888C]">
Built with the bleeding edge of technology, BeatForge is a polished product built with
unforgiving precision.
</p>
</div>
</div>

<div class="beatforge-landing-bentobox-row-second flex flex-row gap-2">
<div
class="beatforge-landing-bentobox-item text-left bg-[#19181B] w-full p-4 sm:p-16 rounded-md relative"
>
<img src="/images/app.png" class="absolute top-0 right-0" alt="application" />
<div class="max-w-[330px] mt-[196px]">
<h3 class="mb-1 font-bold text-white">Minimally designed with tasteful touches.</h3>
<p class="text-[#8B888C]">
We stay out of your way. Mod in less time, and play in no time.
</p>
</div>
<div class="pointer-events-none w-full h-full absolute inset-0">
<img
class="pointer-events-none select-none z-[-1] w-full h-full object-cover rounded-md"
src="/images/blurglow.png"
alt="app"
/>
</div>
</div>
</div>

<div class="beatforge-landing-bentobox-row-third flex flex-row gap-2">
<div
class="beatforge-landing-bentobox-item text-left bg-[#19181B] w-full basis-1/2 p-4 sm:p-16 rounded-md"
>
<h3 class="mb-1 font-bold text-white">Safe and secure.</h3>
<p class="text-[#8B888C]">
Manual human review and additional protections and verifications at the code level
ensures that every mod featured is safe for your use.
</p>
</div>
<div
class="beatforge-landing-bentobox-item text-left bg-[#19181B] w-full basis-1/2 p-4 sm:p-16 rounded-md"
>
<h3 class="mb-1 font-bold text-white">Made for the future.</h3>
<p class="text-[#8B888C]">
Stagnation kills modding communities. We’re is in it for the long run. We’re building
a solid foundation and a team that believes in open platforms.
</p>
</div>
</div>
</div>
</IntersectionObserver>
</FeatureSection>
</div>
90 changes: 90 additions & 0 deletions apps/web/src/lib/components/landing/LandingCLISection.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
<script>
import FeatureSection from '$lib/components/landing/FeatureSection.svelte';
import LandingDescription from '$lib/components/landing/LandingDescription.svelte';
import LandingHeading from '$lib/components/landing/LandingHeading.svelte';
import IntersectionObserver from '$lib/components/IntersectionObserver.svelte';
import { DownloadIcon } from 'ui/icons';
import { Link } from 'ui/link'
let textTransition = 'translate-y-[32px] opacity-30 duration-[400ms]';
let headerTransition = 'translate-y-[32px] opacity-30 duration-[400ms]';
</script>

<div
style="background: radial-gradient(ellipse 100% 60% at 50% 60%,rgb(164 99 246 / 7%),var(--transparent)); margin-top: 128px;"
>
<FeatureSection>
<h2 class="landing-gradient-eyebrow font-bold text-sm uppercase tracking-wider -mb-12">CLI</h2>
<IntersectionObserver
once={true}
class="flex flex-col justify-center items-center text-center gap-8"
let:intersecting
top={-250}
>
<LandingHeading>
<div class="transition duration-[500ms] delay-300 {intersecting ? '' : headerTransition}">
Tools that empower developers to build better, faster.
</div>
</LandingHeading>

<LandingDescription>
<p class="transition duration-[500ms] delay-300 {intersecting ? '' : textTransition}">
BeatForge is built with developers in mind. A powerful CLI for publishing and managing
your mods, friendly for automated scripts and CI/CD pipelines.
</p>
</LandingDescription>
</IntersectionObserver>

<IntersectionObserver once={true} let:intersecting top={0}>
<div
class="beatforge-landing-terminal-window-wrapper flex flex-col overflow-hidden rounded-xl w-full border-[2px] border-[#40434e]"
style="filter: drop-shadow(0 0 100px #000000);"
>
<div class="relative h-[54px] bg-[#19181b]">
<div
class="beatforge-landing-terminal-window-bullets flex h-full items-center ml-5"
aria-hidden="true"
>
<span />
<span />
<span />
</div>
</div>
<div
class="flex flex-col gap-2 font-mono bg-[#19181b] p-8 w-full max-w-3xl text-left relative select-none"
>
<div class="contents">
<div class="flex flex-row items-center gap-4">
<div class="text-sm select-none opacity-30" aria-hidden>$</div>
<p
class:beatforge-terminal-line-animated={intersecting}
class="beatforge-terminal-line"
>
beatforge init <span class="select-none opacity-30"
>// Create a new mod project with BSIPA</span
>
</p>
</div>
<div class="flex flex-row items-center gap-4">
<div class="text-sm select-none opacity-30" aria-hidden>$</div>
<p
class:beatforge-terminal-line-animated-second={intersecting}
class="beatforge-terminal-line"
>
beatforge publish <span class="select-none opacity-30"
>// Publish your mod to BeatForge (you're done! 🎉)</span
>
</p>
</div>
</div>
<Link variant="secondary">
<DownloadIcon className="w-4 h-4 " />
<p class="p-1 text-sm font-bold">Get the CLI</p>
</Link>
</div>
</div>
</IntersectionObserver>
</FeatureSection>
</div>
Loading

0 comments on commit 02bd329

Please sign in to comment.