♻️ Content based about page

This commit is contained in:
2025-11-30 13:42:18 +08:00
parent ed306ae554
commit da9e789ca9
4 changed files with 88 additions and 37 deletions

View File

@@ -1,10 +1,12 @@
<template> <template>
<main class="container mx-auto h-full px-8 flex flex-col gap-16 py-16"> <main
class="container max-w-2xl text-center mx-auto h-full px-8 flex flex-col gap-16 py-16"
>
<!-- Hero Section --> <!-- Hero Section -->
<div <div
class="text-center flex flex-col items-center justify-center animate-fade-in-up" class="text-center flex flex-col items-center justify-center animate-fade-in-up"
> >
<h1 class="text-5xl font-extrabold mb-6">About Us</h1> <h1 class="text-4xl font-extrabold mb-3">About Us</h1>
<p class="text-xl max-w-2xl opacity-80"> <p class="text-xl max-w-2xl opacity-80">
We are a collective of creators, dreamers, and builders. We are a collective of creators, dreamers, and builders.
</p> </p>
@@ -12,27 +14,33 @@
<!-- Mission Section --> <!-- Mission Section -->
<section <section
class="grid grid-cols-1 md:grid-cols-2 gap-12 items-center animate-fade-in-up delay-100" class="flex flex-col gap-12 items-center animate-fade-in-up delay-100"
> >
<div> <div>
<h2 class="text-3xl font-bold mb-4">Our Mission</h2> <h2 class="text-2xl font-bold">Our Mission</h2>
<p class="text-lg opacity-90 leading-relaxed"> <div class="text-lg opacity-90 leading-relaxed flex flex-col gap-2">
Our aim is not making a profit. <p>
<i class="text-sm opacity-70">At least not yet.</i> <br /><br /> Our aim is not making a profit.
Instead, we hope we can spread the love to the world and make everyone <i class="text-sm opacity-70">At least not yet.</i>
enjoy the fun of the Internet and technology. We believe in open </p>
source, collaboration, and building things that bring joy. <p>
</p> Instead, we hope we can spread the love to the world and make
everyone enjoy the fun of the Internet and technology. We believe in
open source, collaboration, and building things that bring joy.
</p>
</div>
</div> </div>
<div class="flex justify-center"> <div class="flex justify-center">
<n-card class="max-w-sm w-full bg-opacity-50 backdrop-blur-sm"> <n-card class="max-w-sm w-full bg-opacity-50 backdrop-blur-sm">
<div class="flex flex-col items-center text-center p-4"> <div class="flex flex-col items-center text-center p-4">
<n-icon size="48" class="mb-4 text-primary"> <n-icon
<heart-outlined /> size="48"
</n-icon> class="mb-4 text-primary"
:component="FavoriteRound"
/>
<h3 class="text-xl font-bold mb-2">Built with Love</h3> <h3 class="text-xl font-bold mb-2">Built with Love</h3>
<p class="opacity-80"> <p class="opacity-80">
Every line of code is written with passion and care. Every line of code is written with passion and care in mind.
</p> </p>
</div> </div>
</n-card> </n-card>
@@ -45,22 +53,21 @@
<div class="flex flex-wrap justify-center gap-8"> <div class="flex flex-wrap justify-center gap-8">
<!-- Team Member Card --> <!-- Team Member Card -->
<n-card <n-card
v-for="member in team"
:key="member.name"
class="max-w-xs w-full hover:shadow-lg transition-shadow duration-300" class="max-w-xs w-full hover:shadow-lg transition-shadow duration-300"
> >
<div class="flex flex-col items-center text-center"> <div class="flex flex-col items-center text-center">
<n-avatar <n-avatar :src="member.avatar" :size="120" class="mb-4 shadow-md" />
src="https://fs.solian.app/api/files/200ee92546244ed1a6a02202f5ca9cc9" <h3 class="text-xl font-bold">{{ member.name }}</h3>
:size="120"
class="mb-4 shadow-md"
/>
<h3 class="text-xl font-bold">LittleSheep</h3>
<div class="flex items-center gap-2 mt-1 mb-3"> <div class="flex items-center gap-2 mt-1 mb-3">
<n-tag size="small" type="primary" round>Founder</n-tag> <n-tag size="small" type="primary" round>{{ member.role }}</n-tag>
<n-button <n-button
v-if="member.profileUrl"
text text
tag="a" tag="a"
size="small" size="small"
href="https://id.solian.app/@littlesheep" :href="member.profileUrl"
target="_blank" target="_blank"
> >
<n-icon size="18"> <n-icon size="18">
@@ -69,23 +76,21 @@
</n-button> </n-button>
</div> </div>
<p class="text-sm opacity-75 mb-4"> <p class="text-sm opacity-75 mb-4">
Founder, CEO, CTO, Senior Developer, Marketing Engineer, Customer {{ member.bio }}
Service Engineer, DevOps, Database Administrator, Product Manager,
UI/UX Designer, QA Engineer, Mobile Developer, Security Engineer,
Technical Writer, Project Manager, Community Manager, Software
Architect
</p> </p>
<div class="flex gap-3"> <div class="flex gap-3" v-if="member.socials">
<n-button <n-button
v-for="social in member.socials"
:key="social.url"
circle circle
size="small" size="small"
tag="a" tag="a"
href="https://github.com/LittleSheep" :href="social.url"
target="_blank" target="_blank"
> >
<template #icon <template #icon>
><n-icon><logo-github /></n-icon <n-icon :component="getIcon(social.icon)" />
></template> </template>
</n-button> </n-button>
</div> </div>
</div> </div>
@@ -96,11 +101,24 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { InfoOutlined } from "@vicons/material"; import { InfoOutlined, FavoriteRound, CodeRound } from "@vicons/material";
useHead({ useHead({
title: "About Us - Solsynth", title: "About Us",
}); });
const { data: team } = await useAsyncData("team", () =>
queryCollection("team").all()
);
function getIcon(name: string) {
switch (name) {
case "github":
return CodeRound;
default:
return InfoOutlined;
}
}
</script> </script>
<style scoped> <style scoped>

View File

@@ -2,7 +2,7 @@
<main class="container mx-auto h-full px-8 flex flex-col gap-24 pb-24"> <main class="container mx-auto h-full px-8 flex flex-col gap-24 pb-24">
<!-- Hero Section --> <!-- Hero Section -->
<div <div
class="text-center min-h-[80vh] flex flex-col items-center justify-center relative" class="text-center min-h-[80vh] flex flex-col items-center justify-center relative isolate"
> >
<!-- Background decoration --> <!-- Background decoration -->
<div <div
@@ -179,7 +179,8 @@ const typedElement = ref(null);
const typed = shallowRef(null); const typed = shallowRef(null);
useHead({ useHead({
title: "Solsynth - Creating Experiences", title: "We are Solsynth",
titleTemplate: "%s",
}); });
onMounted(() => { onMounted(() => {

View File

@@ -28,5 +28,24 @@ export default defineContentConfig({
updatedDate: z.date().optional(), updatedDate: z.date().optional(),
}), }),
}), }),
team: defineCollection({
type: "data",
source: "team/**.json",
schema: z.object({
name: z.string(),
role: z.string(),
avatar: z.string(),
bio: z.string(),
profileUrl: z.string().optional(),
socials: z
.array(
z.object({
icon: z.string(),
url: z.string(),
})
)
.optional(),
}),
}),
}, },
}); });

View File

@@ -0,0 +1,13 @@
{
"name": "LittleSheep",
"role": "Founder",
"avatar": "https://api.solian.app/drive/files/thgJtsTgwBDM7zm9bPjNp",
"bio": "Founder, CEO, CTO, Senior Developer, Marketing Engineer, Customer Service Engineer, DevOps, Database Administrator, Product Manager, UI/UX Designer, QA Engineer, Mobile Developer, Security Engineer, Technical Writer, Project Manager, Community Manager, Software Architect",
"profileUrl": "https://id.solian.app/@littlesheep",
"socials": [
{
"icon": "github",
"url": "https://github.com/LittleSheep2Code"
}
]
}