Landing page (#353)

* Landing page

* Change legal corp name, remove google from privacy policy, other fixes
This commit is contained in:
Geometrically
2022-02-16 17:39:48 -07:00
committed by GitHub
parent e91b0500c5
commit 51a9a7b75d
22 changed files with 535 additions and 187 deletions

View File

@@ -74,11 +74,11 @@
<Categories :categories="project.categories" class="categories" />
<hr class="card-divider" />
<div class="stats">
<span class="stat">{{ formatNumber(project.downloads) }}</span>
<span class="stat">{{ $formatNumber(project.downloads) }}</span>
<span class="label"
>download<span v-if="project.downloads !== 1">s</span></span
>
<span class="stat">{{ formatNumber(project.followers) }}</span>
<span class="stat">{{ $formatNumber(project.followers) }}</span>
<span class="label"
>follower<span v-if="project.followers !== 1">s</span></span
>
@@ -666,9 +666,6 @@ export default {
}
},
methods: {
formatNumber(x) {
return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',')
},
findPrimary(version) {
let file = version.files.find((x) => x.primary)

View File

@@ -525,11 +525,17 @@ export default {
description: this.newProject.description,
body: this.newProject.body,
categories: this.newProject.categories,
issues_url: this.newProject.issues_url,
source_url: this.newProject.source_url,
wiki_url: this.newProject.wiki_url,
issues_url: this.newProject.issues_url
? this.newProject.issues_url
: null,
source_url: this.newProject.source_url
? this.newProject.source_url
: null,
wiki_url: this.newProject.wiki_url ? this.newProject.wiki_url : null,
license_url: this.license_url,
discord_url: this.newProject.discord_url,
discord_url: this.newProject.discord_url
? this.newProject.discord_url
: null,
license_id: this.license.short,
client_side: this.clientSideType.toLowerCase(),
server_side: this.serverSideType.toLowerCase(),

View File

@@ -236,7 +236,7 @@
</div>
<div v-if="mode === 'version'" class="data">
<p class="title">Downloads</p>
<p class="value">{{ $parent.formatNumber(version.downloads) }}</p>
<p class="value">{{ $formatNumber(version.downloads) }}</p>
</div>
<div class="data">
<p class="title">Version number</p>

View File

@@ -76,7 +76,7 @@
</p>
<p></p>
<p>
<strong>{{ $parent.formatNumber(version.downloads) }}</strong>
<strong>{{ $formatNumber(version.downloads) }}</strong>
downloads
</p>
<p>
@@ -100,7 +100,7 @@
</td>
<td>
<p>
<span>{{ $parent.formatNumber(version.downloads) }}</span>
<span>{{ $formatNumber(version.downloads) }}</span>
downloads
</p>
<p>
@@ -176,7 +176,7 @@ table {
tr {
td:nth-child(2) {
padding-right: 2rem;
min-width: 13.875rem;
min-width: 16rem;
.top {
font-weight: bold;
}

View File

@@ -49,11 +49,7 @@
<p>
Documentation for the Modrinth API (Labrinth) can be found on the GitHub
repository's wiki
<a
target="_blank"
href="https://github.com/modrinth/labrinth/wiki/API-Documentation"
>here</a
>.
<a target="_blank" href="https://docs.modrinth.com">here</a>.
</p>
</div>
</div>

View File

@@ -505,7 +505,7 @@
>
<textarea
id="body"
v-model="versions[currentVersionIndex].changelog"
v-model="versions[currentVersionIndex].version_body"
/>
</div>
<div
@@ -513,8 +513,10 @@
v-highlightjs
class="markdown-body"
v-html="
versions[currentVersionIndex].changelog
? $xss($md.render(versions[currentVersionIndex].changelog))
versions[currentVersionIndex].version_body
? $xss(
$md.render(versions[currentVersionIndex].version_body)
)
: 'No changelog specified.'
"
></div>

View File

@@ -11,8 +11,9 @@
<h1>Discover, Play, and Create Minecraft content</h1>
<h3>
Find enjoyable and quality content through our open-source modding
platform built for the community. Create stuff, get paid*, and deploy
your project with our fully documented API!
platform built for the community. Create stuff, get
paid<sup>WIP</sup>, and deploy your project with our fully documented
API!
</h3>
<form action="/mods">
<div class="iconified-input">
@@ -33,17 +34,173 @@
</form>
</div>
</div>
<div class="points card">
<div class="point">
<div class="image">
<video
v-if="$colorMode.value === 'light'"
autoplay
loop
muted
src="~/assets/images/search.mp4"
/>
<video
v-else
autoplay
loop
muted
src="~/assets/images/search-dark.mp4"
/>
</div>
<div class="text-container">
<h3 class="subheader">Fast and Powerful Search</h3>
<h1>Find What You Want, Quickly and Easily</h1>
<p>
We are invested in making it extremely simple to find what you want
to play. Our search is adaptable, customizable and easy to use!
Whether you're a power user or someone who just discovered the world
of Minecraft modding, we've got you covered.
</p>
</div>
</div>
<div class="point left">
<div class="text-container">
<div>
<h3 class="subheader">Packed with Features</h3>
<h1>A Constantly Evolving Platform</h1>
<p>
We are always adding new features and making Modrinth have the
best user experience. Right now, we're working on finally paying
out creators on our site. If you have any more feature ideas, feel
free to join our discord!
</p>
<div class="features">
<div class="feature completed">
<CheckIcon />
<p>Open Source</p>
</div>
<div class="feature completed">
<CheckIcon />
<p>Real-time search</p>
</div>
<div class="feature completed">
<CheckIcon />
<p>Project Gallery</p>
</div>
<div class="feature completed">
<CheckIcon />
<p>Robust Team Management</p>
</div>
<div class="feature completed">
<CheckIcon />
<p>Completely documented API</p>
</div>
<div class="feature completed">
<CheckIcon />
<p>Dependency Management</p>
</div>
<div class="feature completed">
<CheckIcon />
<p>Modpacks</p>
</div>
<div class="feature in-progress">
<InProgressIcon />
<p>Creator Payouts</p>
</div>
<div class="feature in-progress">
<InProgressIcon />
<p>More project types</p>
</div>
<div class="feature in-progress">
<InProgressIcon />
<p>Creator analytics</p>
</div>
<div class="feature in-progress">
<InProgressIcon />
<p>In-house auth</p>
</div>
<div class="feature in-progress">
<InProgressIcon />
<p>Comments</p>
</div>
</div>
</div>
</div>
<div class="image">
<FeaturesIllustration />
</div>
</div>
<div class="point">
<div class="image">
<div class="terminal">
<div class="line-nums">
<span>1</span>
<span>2</span>
<span>3</span>
<span>4</span>
<span>5</span>
<span>6</span>
<span>7</span>
<span>8</span>
<span>9</span>
<span>10</span>
<span>11</span>
<span>12</span>
<span>13</span>
<span>14</span>
<span>15</span>
</div>
<div class="text" v-highlightjs>
<span class="command">curl</span>
<span>https://api.modrinth.com/v2/project/sodium</span>
<pre><code class="language-json">
{
"id": "AANobbMI",
"slug": "sodium",
"project_type": "mod",
"team": "4reLOAKe",
"title": "Sodium",
"description": "Modern rendering engine and client-side optimization mod for Minecraft",
"body": "...",
"body_url": "https://cdn.modrinth.com/data/AANobbMI/description.md",
"published": "2021-01-03T00:53:34.185936Z",
"updated": "2022-01-14T02:35:40.373686Z",
...
}</code></pre>
</div>
</div>
</div>
<div class="text-container">
<h3 class="subheader">Simple to Integrate</h3>
<h1>An Open-Source API for Everyone to Use</h1>
<p>
We have created an open source modding platform for the community.
We're committed to open source so the community can trust us as
their modding platform. Our API is
<a href="https://docs.modrinth.com">fully documented</a> so anyone
can use it. We will never add restrictions on our API!
</p>
</div>
</div>
</div>
</div>
</template>
<script>
import SearchIcon from '~/assets/images/utils/search.svg?inline'
import CheckIcon from '~/assets/images/utils/check.svg?inline'
import InProgressIcon from '~/assets/images/utils/updated.svg?inline'
import RightArrowIcon from '~/assets/images/utils/right-arrow.svg?inline'
import FeaturesIllustration from '~/assets/images/illustrations/features.svg?inline'
export default {
components: {
SearchIcon,
RightArrowIcon,
CheckIcon,
InProgressIcon,
FeaturesIllustration,
},
auth: false,
data() {
@@ -62,7 +219,7 @@ export default {
img {
border-radius: var(--size-rounded-card);
width: 100%;
height: calc(75vh - var(--size-navbar-height));
height: 40rem;
object-fit: cover;
object-position: 10% 12.5%;
@@ -77,18 +234,13 @@ export default {
.text {
position: absolute;
top: calc(10vh + var(--size-navbar-height));
top: calc(5rem + var(--size-navbar-height));
max-width: 30rem;
text-shadow: 4px 4px 8px rgba(0, 0, 0, 0.3);
padding-left: 6rem;
color: #fff;
h2 {
color: #fff;
text-transform: uppercase;
}
h1 {
color: #fff;
margin: 1rem 0;
@@ -115,8 +267,191 @@ export default {
}
@media screen and (max-width: 750px) {
padding: 1rem;
}
}
}
.points {
border-radius: 0;
padding: var(--spacing-card-lg);
margin-top: 1rem;
.point {
display: flex;
align-items: center;
flex-direction: column-reverse;
margin-bottom: 1rem;
&.left {
flex-direction: column;
.text-container {
padding-left: 3rem;
//padding-right: 0;
}
}
.text-container {
//mobile:
padding-left: 3rem;
max-width: 55%;
padding-right: 3rem;
.subheader {
margin: 0;
color: var(--color-brand);
}
a {
text-decoration: underline;
}
.features {
display: flex;
flex-wrap: wrap;
row-gap: 1rem;
.feature {
width: 100%;
display: flex;
align-items: flex-start;
p {
margin: 0;
line-height: 1.5rem;
}
svg {
min-width: 1.5rem;
height: 1.5rem;
margin-right: 0.5rem;
}
&.completed {
svg {
color: var(--color-brand);
}
}
&.in-progress {
svg {
color: var(--color-badge-yellow-text);
}
}
}
}
}
.image {
display: none;
padding: 2rem;
svg {
color: var(--color-brand);
width: fit-content;
height: unset;
}
img,
video {
border-radius: var(--size-rounded-lg);
width: 40rem;
}
.terminal {
display: flex;
padding: 0.5rem 1rem;
border-radius: var(--size-rounded-lg);
background-color: var(--color-code-bg);
font-family: monospace;
font-size: 80%;
line-height: 1.5rem;
.line-nums {
display: flex;
flex-direction: column;
padding: 0.5rem;
color: var(--color-icon);
}
.text {
padding: 0.5rem;
.command {
color: var(--color-brand);
}
pre {
margin: 0;
padding: 0;
border-radius: 0;
overflow-y: hidden;
background-color: var(--color-code-bg);
code {
padding: 0;
border-radius: 0;
background-color: var(--color-code-bg);
color: var(--color-code-text);
}
}
}
}
}
}
}
@media screen and (min-width: 500px) {
.points {
.point {
.text-container {
.features {
.feature {
width: 50%;
}
}
}
}
}
}
@media screen and (min-width: 750px) {
.points {
.point {
margin-bottom: 0;
.image {
display: block;
}
}
}
}
@media screen and (min-width: 1200px) {
.points {
border-radius: var(--spacing-card-lg);
.point {
flex-direction: row;
&.left {
flex-direction: row;
.text-container {
padding-left: 3rem;
padding-right: 0;
}
}
.text-container {
width: 60%;
padding-right: 3rem;
.features {
.feature {
width: 33%;
}
}
}
}
}
}

View File

@@ -19,22 +19,23 @@
<p>We are a Data Controller of your information.</p>
<p>
Guavy LLC legal basis for collecting and using the personal information
described in this Privacy Policy depends on the Personal Information we
collect and the specific context in which we collect the information:
Rinth, Inc. legal basis for collecting and using the personal
information described in this Privacy Policy depends on the Personal
Information we collect and the specific context in which we collect the
information:
</p>
<ul>
<li>Guavy LLC needs to perform a contract with you</li>
<li>You have given Guavy LLC permission to do so</li>
<li>Rinth, Inc. needs to perform a contract with you</li>
<li>You have given Rinth, Inc. permission to do so</li>
<li>
Processing your personal information is in Guavy LLC legitimate
Processing your personal information is in Rinth, Inc. legitimate
interests
</li>
<li>Guavy LLC needs to comply with the law</li>
<li>Rinth, Inc. needs to comply with the law</li>
</ul>
<p>
Guavy LLC will retain your personal information only for as long as is
Rinth, Inc. will retain your personal information only for as long as is
necessary for the purposes set out in this Privacy Policy. We will
retain and use your information to the extent necessary to comply with
our legal obligations, resolve disputes, and enforce our policies.

View File

@@ -18,7 +18,7 @@
<p>
Permission is granted to temporarily download one copy of the materials
on Guavy LLC's Website for personal, non-commercial transitory viewing
on Rinth, Inc.'s Website for personal, non-commercial transitory viewing
only. This is the grant of a license, not a transfer of title, and under
this license you may not:
</p>
@@ -30,7 +30,7 @@
display;
</li>
<li>
attempt to reverse engineer any software contained on Guavy LLC's
attempt to reverse engineer any software contained on Rinth, Inc.'s
Website;
</li>
<li>
@@ -44,7 +44,7 @@
</ul>
<p>
This will let Guavy LLC to terminate upon violations of any of these
This will let Rinth, Inc. to terminate upon violations of any of these
restrictions. Upon termination, your viewing right will also be
terminated and you should destroy any downloaded materials in your
possession whether it is printed or electronic format.
@@ -53,9 +53,9 @@
<h2>3. Disclaimer</h2>
<p>
All the materials on Guavy LLCs Website are provided "as is". Guavy LLC
makes no warranties, may it be expressed or implied, therefore negates
all other warranties. Furthermore, Guavy LLC does not make any
All the materials on Rinth, Inc.s Website are provided "as is". Rinth,
Inc. makes no warranties, may it be expressed or implied, therefore
negates all other warranties. Furthermore, Rinth, Inc. does not make any
representations concerning the accuracy or reliability of the use of the
materials on its Website or otherwise relating to such materials or any
sites linked to this Website.
@@ -64,39 +64,39 @@
<h2>4. Limitations</h2>
<p>
Guavy LLC or its suppliers will not be hold accountable for any damages
that will arise with the use or inability to use the materials on Guavy
LLCs Website, even if Guavy LLC or an authorize representative of this
Website has been notified, orally or written, of the possibility of such
damage. Some jurisdiction does not allow limitations on implied
warranties or limitations of liability for incidental damages, these
limitations may not apply to you.
Rinth, Inc. or its suppliers will not be hold accountable for any
damages that will arise with the use or inability to use the materials
on Rinth, Inc.s Website, even if Rinth, Inc. or an authorize
representative of this Website has been notified, orally or written, of
the possibility of such damage. Some jurisdiction does not allow
limitations on implied warranties or limitations of liability for
incidental damages, these limitations may not apply to you.
</p>
<h2>5. Revisions and Errata</h2>
<p>
The materials appearing on Guavy LLCs Website may include technical,
typographical, or photographic errors. Guavy LLC will not promise that
The materials appearing on Rinth, Inc.s Website may include technical,
typographical, or photographic errors. Rinth, Inc. will not promise that
any of the materials in this Website are accurate, complete, or current.
Guavy LLC may change the materials contained on its Website at any time
without notice. Guavy LLC does not make any commitment to update the
materials.
Rinth, Inc. may change the materials contained on its Website at any
time without notice. Rinth, Inc. does not make any commitment to update
the materials.
</p>
<h2>6. Links</h2>
<p>
Guavy LLC has not reviewed all of the sites linked to its Website and is
not responsible for the contents of any such linked site. The presence
of any link does not imply endorsement by Guavy LLC of the site. The use
of any linked website is at the users own risk.
Rinth, Inc. has not reviewed all of the sites linked to its Website and
is not responsible for the contents of any such linked site. The
presence of any link does not imply endorsement by Rinth, Inc. of the
site. The use of any linked website is at the users own risk.
</p>
<h2>7. Site Terms of Use Modifications</h2>
<p>
Guavy LLC may revise these Terms of Use for its Website at any time
Rinth, Inc. may revise these Terms of Use for its Website at any time
without prior notice. By using this Website, you are agreeing to be
bound by the current version of these Terms and Conditions of Use.
</p>
@@ -111,7 +111,7 @@
<h2>9. Governing Law</h2>
<p>
Any claim related to Guavy LLC's Website shall be governed by the laws
Any claim related to Rinth, Inc.'s Website shall be governed by the laws
of us without regards to its conflict of law provisions.
</p>

View File

@@ -208,9 +208,6 @@ export default {
this.previewImage = event.target.result
}
},
formatNumber(x) {
return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',')
},
sumDownloads() {
let sum = 0
@@ -218,7 +215,7 @@ export default {
sum += projects.downloads
}
return this.formatNumber(sum)
return this.$formatNumber(sum)
},
sumFollows() {
let sum = 0
@@ -227,7 +224,7 @@ export default {
sum += projects.followers
}
return this.formatNumber(sum)
return this.$formatNumber(sum)
},
async changeLayout() {
await this.$store.dispatch('cosmetics/save', {

View File

@@ -229,9 +229,6 @@ export default {
},
},
methods: {
formatNumber(x) {
return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',')
},
sumDownloads() {
let sum = 0
@@ -239,7 +236,7 @@ export default {
sum += projects.downloads
}
return this.formatNumber(sum)
return this.$formatNumber(sum)
},
},
}