hub-site/wip-refactor/pages/projects.vue
mrrpnya c2095d0b13
Some checks failed
Testing / test (pull_request) Has been cancelled
Testing / test (push) Waiting to run
Publish to OCI Registry / publish (push) Has been cancelled
.
2025-03-05 22:34:37 -08:00

155 lines
6.6 KiB
Vue

<script setup lang="ts">
import { ref, TransitionGroup } from 'vue';
import { projects, tags } from '@/assets/projects';
const activeTags: Ref<string[]> = ref([]);
const showFaq: Ref<boolean> = ref(false);
function toggleTag(tag: string) {
if (activeTags.value.includes(tag)) {
activeTags.value = activeTags.value.filter((t) => t !== tag);
} else {
activeTags.value.push(tag);
}
}
</script>
<template>
<div class="flex justify-center">
<h1>Projects</h1>
</div>
<!-- Information -->
<div class="flex justify-center mb-5">
<div class="flex flex-col justify-center text-pretty max-w-[60rem]">
<p class="text-center">
Welcome to our projects page! We create <strong>websites</strong>, <strong>video games</strong>,
<strong>addons for games</strong>, <strong>avatars and worlds for VRChat</strong>, and
<strong>game assets</strong>. Explore our ongoing projects below.
</p>
</div>
</div>
<!-- FAQ Button -->
<div class="flex justify-center">
<button @click="showFaq = true" class="border-none bg-accent text-black rounded-full hover:bg-accent-over">
Frequently Asked Questions
</button>
</div>
<!-- Filter Buttons -->
<div class="flex justify-center">
<div v-for="tag in tags" :key="tag">
<button v-if="!activeTags.includes(tag)" @click="toggleTag(tag)" class="border-none">
{{ tag }}
</button>
<button v-else :key="tag" @click="toggleTag(tag)" class="border border-accent bg-surface-2">
{{ tag }}
</button>
</div>
</div>
<!-- Projects Grid -->
<div class="flex justify-center">
<div class="flex justify-center text-pretty max-w-[60rem]">
<TransitionGroup name="list" mode="out-in" class="flex flex-wrap justify-center">
<div v-for="project in
activeTags.length === 0 ?
projects :
projects.filter((project) => project.tags.some((tag) => activeTags.includes(tag)))
" :key="project">
<Card class="w-60 min-h-60">
<div>
<h3>{{ project.name }}</h3>
<p>{{ project.description }}</p>
<div class="flex flex-wrap">
<div v-for="tag in project.tags">
<p class="bg-surface-2 p-1 m-[1px] rounded-md">{{ tag }}</p>
</div>
</div>
</div>
</Card>
</div>
</TransitionGroup>
</div>
</div>
<!-- Modal -->
<Transition name="fade">
<div v-if="showFaq" class="modal-overlay" @click="showFaq = false">
<Modal>
<h2>Frequently Asked Questions</h2>
<hr>
<ul class="faq-list">
<li>
<strong>"Do you need an idea person?"</strong>
<blockquote>No. Not now, and likely not ever.</blockquote>
</li>
<li>
<strong>"Do you need an asset creator? What would you pay me?"</strong>
<blockquote>
This applies to graphics, models, sounds, music, and similar work. Suggesting random ideas and demanding payment isn't how this works.
Provide a portfolio and clear price sheets. We offer fair indie rates based on quality. If your work is lower quality, understand that others
may carry more of the creative load.
</blockquote>
</li>
<li>
<strong>"If I'm hired to work on sound effects, that means I'm the sound director, right?"</strong>
<blockquote>
No, it doesn't. Roles like "director" require experience, leadership skills, and a proven track record. Freelance roles are just thatfreelance.
Don't expect a salary or profit share from such a position. Additionally, if we hire you to create assets, <b>we</b> decide what's needed,
unless creative freedom is explicitly granted. Thank you for understanding.
</blockquote>
</li>
<li>
<strong>"Well, how much WOULD you pay me?"</strong>
<blockquote>
Provide your portfolio and rates. If you don't have one, we'll evaluate your work against indie standards to make a fair offer. We're not presently hiring.
</blockquote>
</li>
<li>
<strong>On suggesting ideas and claiming ownership</strong>
<blockquote>
Ideas, concepts, and words alone are not copyrightableonly tangible creations such as art, sound effects, or completed works can be protected by copyright.
Claiming ownership of an idea without contributing to its execution is not recognized in the professional world. That said, we value constructive suggestions and
may acknowledge meaningful contributions with in-game benefits or recognition. However, we maintain a zero-tolerance policy for unfounded claims or disruptive behavior,
to ensure a fair and respectful environment for everyone.
</blockquote>
</li>
<li>
<strong>"You guys make games, so I want you to make this concept of mine!"</strong>
<blockquote>
Not for free. We have our own projects to focus on, and <u>we are not for hire at this time</u>. Additionally, being an "idea person" is not a paid position in the game
development industry. Successful game creation requires collaboration, execution, and tangible contributions.
</blockquote>
</li>
</ul>
</Modal>
</div>
</Transition>
</template>
<style>
/* Transition for the cards */
.list-move, /* apply transition to moving elements */
.list-enter-active,
.list-leave-active {
transition: all 0.5s ease;
}
blockquote {
@apply border-l-4 border-border pl-2
}
.list-enter-from,
.list-leave-to {
opacity: 0;
transform: translateX(30px);
}
/* ensure leaving items are taken out of layout flow so that moving
animations can be calculated correctly. */
.list-leave-active {
position: absolute;
}
</style>