This commit introduces a new section to showcase team members, starting with the founder's profile. - Adds a dynamic page route `/about/` to display individual member profiles. - Creates a new `about` content collection to source profile information from Markdown files. - Adds the first profile for 'Xiaomai', including a detailed resume and background image. - Integrates a 'Teams' dropdown into the main navigation header. - Implements a `copyToClipboard` utility with a toast notification for sharing profile links.
94 lines
2.6 KiB
TypeScript
94 lines
2.6 KiB
TypeScript
const DEFAULT_SEO = {
|
|
title: "Tootaio Studio",
|
|
description:
|
|
"A creative technology studio offering custom development services, specializing in full-stack solutions for websites, software, games, and interactive experiences.",
|
|
keywords:
|
|
"Tootaio, Tootaio Studio, custom development, full-stack solutions, web development, software development, game development, interactive experiences",
|
|
url: "https://tootaio.com",
|
|
image: "https://tootaio.com/og-image-1.png",
|
|
};
|
|
|
|
// https://nuxt.com/docs/api/configuration/nuxt-config
|
|
export default defineNuxtConfig({
|
|
compatibilityDate: "2025-07-15",
|
|
devtools: { enabled: process.env.NODE_ENV !== "production" },
|
|
modules: [
|
|
"@nuxt/ui",
|
|
"@nuxt/content",
|
|
"@nuxt/eslint",
|
|
"@nuxtjs/i18n",
|
|
"@nuxtjs/seo",
|
|
],
|
|
runtimeConfig: {
|
|
public: {
|
|
whatsappNumber: "+601234567890",
|
|
},
|
|
},
|
|
routeRules: {
|
|
"/**": {
|
|
headers: {
|
|
"Content-Security-Policy": [
|
|
"default-src 'self'",
|
|
"script-src 'self'",
|
|
"style-src 'self' 'unsafe-inline'",
|
|
"img-src 'self' https://img.tootaio.com data:",
|
|
"connect-src 'self'",
|
|
"frame-ancestors 'self'",
|
|
"upgrade-insecure-requests",
|
|
].join("; "),
|
|
"X-Content-Type-Options": "nosniff",
|
|
"Referrer-Policy": "strict-origin-when-cross-origin",
|
|
},
|
|
},
|
|
"/_nuxt/**": {
|
|
headers: { "cache-control": "public, max-age=31536000, immutable" },
|
|
},
|
|
},
|
|
css: ["@/assets/css/main.css"],
|
|
app: {
|
|
head: {
|
|
titleTemplate: "%s - Tootaio Studio",
|
|
meta: [
|
|
{ name: "viewport", content: "width=device-width, initial-scale=1" },
|
|
{ charset: "utf-8" },
|
|
],
|
|
},
|
|
},
|
|
i18n: {
|
|
defaultLocale: "en",
|
|
locales: [
|
|
{
|
|
code: "en",
|
|
iso: "en-US",
|
|
name: "English",
|
|
files: ["en-US/common.json", "en-US/index.json"],
|
|
},
|
|
{
|
|
code: "zh-CN",
|
|
iso: "zh-CN",
|
|
name: "简体中文",
|
|
files: ["zh-CN/common.json", "zh-CN/index.json"],
|
|
},
|
|
],
|
|
strategy: "no_prefix",
|
|
},
|
|
seo: {
|
|
meta: {
|
|
title: DEFAULT_SEO.title,
|
|
description: DEFAULT_SEO.description,
|
|
keywords: DEFAULT_SEO.keywords,
|
|
ogTitle: DEFAULT_SEO.title,
|
|
ogDescription: DEFAULT_SEO.description,
|
|
ogImage: DEFAULT_SEO.image,
|
|
ogUrl: DEFAULT_SEO.url,
|
|
twitterCard: "summary_large_image",
|
|
twitterTitle: DEFAULT_SEO.title,
|
|
twitterDescription: DEFAULT_SEO.description,
|
|
twitterImage: DEFAULT_SEO.image,
|
|
},
|
|
},
|
|
site: {
|
|
url: "https://tootaio.com",
|
|
},
|
|
});
|