initial commit

This commit is contained in:
xiaomai
2025-11-04 09:11:18 +08:00
commit 778f32b617
23 changed files with 12671 additions and 0 deletions

24
.gitignore vendored Normal file
View File

@@ -0,0 +1,24 @@
# Nuxt dev/build outputs
.output
.data
.nuxt
.nitro
.cache
dist
# Node dependencies
node_modules
# Logs
logs
*.log
# Misc
.DS_Store
.fleet
.idea
# Local env files
.env
.env.*
!.env.example

2
.npmrc Normal file
View File

@@ -0,0 +1,2 @@
shamefully-hoist=true
package-lock=false

75
README.md Normal file
View File

@@ -0,0 +1,75 @@
# Nuxt Minimal Starter
Look at the [Nuxt documentation](https://nuxt.com/docs/getting-started/introduction) to learn more.
## Setup
Make sure to install dependencies:
```bash
# npm
npm install
# pnpm
pnpm install
# yarn
yarn install
# bun
bun install
```
## Development Server
Start the development server on `http://localhost:3000`:
```bash
# npm
npm run dev
# pnpm
pnpm dev
# yarn
yarn dev
# bun
bun run dev
```
## Production
Build the application for production:
```bash
# npm
npm run build
# pnpm
pnpm build
# yarn
yarn build
# bun
bun run build
```
Locally preview production build:
```bash
# npm
npm run preview
# pnpm
pnpm preview
# yarn
yarn preview
# bun
bun run preview
```
Check out the [deployment documentation](https://nuxt.com/docs/getting-started/deployment) for more information.

7
app/app.vue Normal file
View File

@@ -0,0 +1,7 @@
<template>
<UApp>
<NuxtLayout>
<NuxtPage />
</NuxtLayout>
</UApp>
</template>

24
app/assets/css/main.css Normal file
View File

@@ -0,0 +1,24 @@
@import "@nuxt/ui";
@import "tailwindcss";
@theme {
/* Default to Inter / JetBrains Mono / Noto Sans fonts */
--font-sans:
"Inter", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
"Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji",
"Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
--font-mono:
"JetBrains Mono", SFMono-Regular, Menlo, Monaco, Consolas,
"Liberation Mono", "Courier New", monospace;
/* Primary Color is Neon Red */
--color-primary: #ff073a;
--color-primary-100: #ffe5ea;
--color-primary-200: #ffb3bf;
--color-primary-300: #ff8094;
--color-primary-400: #ff4d69;
--color-primary-500: #ff1a3e;
--color-primary-600: #e60035;
--color-primary-700: #b40029;
--color-primary-800: #82001e;
--color-primary-900: #4d0012;
}

13
app/layouts/default.vue Normal file
View File

@@ -0,0 +1,13 @@
<template>
<div>
<slot />
</div>
</template>
<script lang="ts" setup>
</script>
<style>
</style>

29
app/pages/index.vue Normal file
View File

@@ -0,0 +1,29 @@
<template>
<UPage>
<UPageSection title="Trusted by">
<UMarquee>
<img
v-for="logo in trustedBy"
:key="logo.src"
:src="logo.src"
:alt="logo.alt"
class="h-12 mx-8 grayscale opacity-60"
/>
</UMarquee>
</UPageSection>
</UPage>
</template>
<script lang="ts" setup>
const trustedBy = ref([
{ src: "/index/trusted-by/logoipsum-284.svg", alt: "Logo Ipsum" },
{ src: "/index/trusted-by/logoipsum-338.svg", alt: "Logo Ipsum" },
{ src: "/index/trusted-by/logoipsum-353.svg", alt: "Logo Ipsum" },
{ src: "/index/trusted-by/logoipsum-378.svg", alt: "Logo Ipsum" },
{ src: "/index/trusted-by/logoipsum-392.svg", alt: "Logo Ipsum" },
{ src: "/index/trusted-by/logoipsum-403.svg", alt: "Logo Ipsum" },
{ src: "/index/trusted-by/logoipsum-409.svg", alt: "Logo Ipsum" },
]);
</script>
<style></style>

130
docs/design-doc-v1.md Normal file
View File

@@ -0,0 +1,130 @@
## 🧭 一、网站核心定位Brand Positioning
### 🔹 品牌主轴:
> 「一家融合创意与技术的定制开发工作室,专注于网站、软件、游戏与交互体验的全栈实现。」
### 🔹 品牌关键词:
科技感、专业、创意、可靠、跨界。
### 🔹 Slogan 建议:
* “Crafted Code, Custom Experience.”
* “Technology Meets Imagination.”
* “专为想要独特体验的品牌打造量身定制的数字产品。”
---
## 🧩 二、网站信息架构Site Map
你的业务广泛,所以我们要**结构化展示不同类别**,同时保留“重点案例引导”。
### 推荐结构:
```
首页
├── 关于工作室(品牌故事 + 技术栈 + 团队 / 联系)
├── 服务 Services
│ ├── 网站开发(高级定制 + CMS
│ ├── 程序开发(工具 / 软件 / 自动化)
│ ├── 游戏开发(独立游戏 + 展示未来计划)
│ ├── 宴会大屏幕定制
│ └── 测评与实验室Lab / 未来功能)
├── 案例 Projects
│ ├── 企业网站
│ ├── 游戏
│ ├── 工具 & 系统
│ └── 特殊项目(如宴会系统)
├── 博客 / 洞察 Insight
│ ├── 技术分享
│ ├── 开发笔记
│ ├── 游戏制作日志
│ └── 测评报告(未来)
└── 联系 Contact
```
> ✅ 可用 **标签系统**website / game / tool / event让访客快速筛选项目。
---
## 🧱 三、视觉与交互风格建议
### 🔹 整体风格
| 元素 | 建议 |
| -------- | --------------------------------------- |
| 主题基调 | 黑白 + 强调色(霓虹蓝 / 电紫 / 琥珀橙) |
| 字体 | Inter / JetBrains Mono / Noto Sans |
| 动效 | 滚动渐显、微交互、简洁的 GSAP 过渡 |
| 布局 | 大留白 + 组件模块化(每段文字配视觉块) |
### 🔹 首页结构建议
1. **Hero Section**:一句话说明使命 + 动态展示 Logo / Particle 动效
2. **Our Capabilities**:展示 35 个核心服务(带小动效)
3. **Featured Works**精选案例36 个)
4. **Tech Stack / Tools**:展示使用的框架、语言、引擎
5. **Why Choose Us**:列出差异化优势(定制化、速度、交付标准)
6. **Call To Action**:引导联系 / 合作 / 提案按钮
---
## ⚙️ 四、技术栈建议Nuxt 3 重构方案)
| 模块 | 推荐实现 |
| -------- | ------------------------------------------- |
| UI 框架 | TailwindCSS + shadcn/ui |
| 动画 | GSAP / Framer MotionVue 兼容版) |
| 内容管理 | `@nuxt/content`Markdown 管理案例 / 博客) |
| 图片优化 | Nuxt Image Module |
| 部署 | Vercel / Cloudflare Pages |
| SEO | Nuxt SEO 模块 + sitemap 自动生成 |
| 分析 | Umami轻量自托管 |
> 💡 如果你想展示「技术力」,可以开放 API 结构、可视化作品数据、甚至在后台集成 CMS如 Directus 或自写的 Nuxt Admin 模块)。
---
## 🎨 五、内容策略建议
| 板块 | 内容方向 |
| ------ | -------------------------------------------------- |
| 首页 | “我们是谁 + 代表作 + 我们能做什么” |
| 服务页 | 每项服务都有详细说明 + 实际案例链接 |
| 案例页 | 用故事化方式讲解项目(客户问题 → 方案 → 成果) |
| 博客页 | 不只是技术文章,也包括幕后分享、失败经验、研发故事 |
| 关于页 | 强调团队理念与未来方向(尤其是游戏重启计划) |
---
## 📈 六、阶段性重构计划(实际执行路线)
| 阶段 | 时间 | 任务 |
| ------------ | ------ | ------------------------------- |
| 1⃣ 品牌重构 | 35 天 | 撰写文案、确定视觉调性、slogan |
| 2⃣ 架构设计 | 57 天 | 设计 sitemap、线框图、内容结构 |
| 3⃣ 开发实现 | 23 周 | Nuxt3 + Tailwind 架构、页面搭建 |
| 4⃣ 内容导入 | 1 周 | Markdown / CMS 整合、案例上传 |
| 5⃣ 动效与微调 | 35 天 | 动画、SEO 优化、性能压测 |
| 6⃣ 部署与上线 | 1 天 | Vercel / CF Pages 一键上线 |
---
## 🔮 七、未来扩展潜力
* 加入 **实验室板块Lab**,展示新工具或原型。
* **自建 CMS**(你完全可以自己写一个轻量 Nuxt Admin
* 集成 **多语言支持i18n**,面向海外客户。
* 游戏项目可接入 **WebGL / Godot Web Export**,直接可试玩。
* 将案例模块化为 JSON / Markdown 文件,可持续维护。
---
要不我直接帮你整理成一个完整的:
> 🧾《工作室网站重构计划书v1》——包括结构图、推荐技术栈、视觉方向与页面草稿说明。
格式我可以生成成 Word / PDF你可以直接交给团队或自己用来开发。
是否要我现在帮你生成?(如果要,请告诉我希望输出哪种格式:**Word** 还是 **PDF**

6
eslint.config.mjs Normal file
View File

@@ -0,0 +1,6 @@
// @ts-check
import withNuxt from './.nuxt/eslint.config.mjs'
export default withNuxt(
// Your custom configs here
)

7
nuxt.config.ts Normal file
View File

@@ -0,0 +1,7 @@
// https://nuxt.com/docs/api/configuration/nuxt-config
export default defineNuxtConfig({
compatibilityDate: "2025-07-15",
devtools: { enabled: true },
modules: ["@nuxt/content", "@nuxt/ui", "@nuxt/eslint"],
css: ["@/assets/css/main.css"],
});

23
package.json Normal file
View File

@@ -0,0 +1,23 @@
{
"name": "tootaio-com",
"type": "module",
"private": true,
"scripts": {
"build": "nuxt build",
"dev": "nuxt dev",
"generate": "nuxt generate",
"preview": "nuxt preview",
"postinstall": "nuxt prepare"
},
"dependencies": {
"@nuxt/content": "3.8.0",
"@nuxt/eslint": "1.10.0",
"@nuxt/ui": "4.1.0",
"better-sqlite3": "^12.4.1",
"eslint": "^9.39.0",
"nuxt": "^4.2.0",
"typescript": "^5.9.3",
"vue": "^3.5.22",
"vue-router": "^4.6.3"
}
}

12280
pnpm-lock.yaml generated Normal file

File diff suppressed because it is too large Load Diff

6
pnpm-workspace.yaml Normal file
View File

@@ -0,0 +1,6 @@
onlyBuiltDependencies:
- '@parcel/watcher'
- better-sqlite3
- esbuild
- unrs-resolver
- vue-demi

BIN
public/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 17 KiB

View File

@@ -0,0 +1,3 @@
<svg width="67" height="41" viewBox="0 0 67 41" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M45.0353 4.66312C45.8331 3.77669 46.7195 3.04539 47.6281 2.46921C49.2236 1.47198 50.9079 0.940125 52.6364 0.940125V15.411C51.3732 11.0232 48.6475 7.25591 45.0353 4.66312ZM66.5533 40.9401H15.2957C6.87461 40.9401 0.0712891 34.1146 0.0712891 25.7157C0.0712891 17.6714 6.3206 11.0675 14.232 10.5135V0.940125C16.0048 0.940125 17.7555 1.44982 19.3954 2.46921C20.304 3.02323 21.1904 3.75453 21.9882 4.59663C25.2458 2.31409 29.1904 0.984446 33.4674 0.984446C33.4674 10.2254 30.1433 20.9734 19.3289 20.9955H33.3566C32.9577 19.2005 31.3178 17.8709 29.3677 17.8487H37.5228C35.5727 17.8487 33.9328 19.2005 33.5339 21.0177H46.6087C49.2236 21.0177 51.8164 21.5274 54.2541 22.5468C56.6696 23.544 58.8857 25.0288 60.725 26.8681C62.5865 28.7296 64.0491 30.9235 65.0464 33.339C66.0436 35.7324 66.5533 38.3252 66.5533 40.9401ZM22.8525 10.7795C23.1849 11.6437 24.0713 12.6188 25.3123 13.3279C26.5533 14.0371 27.8386 14.3252 28.7472 14.1922C28.4148 13.3279 27.5284 12.3529 26.2874 11.6437C25.0464 10.9346 23.761 10.6465 22.8525 10.7795ZM41.5117 13.3279C40.2707 14.0371 38.9854 14.3252 38.0768 14.1922C38.4092 13.3279 39.2957 12.3529 40.5367 11.6437C41.7777 10.9346 43.063 10.6465 43.9716 10.7795C43.6613 11.6437 42.7527 12.6188 41.5117 13.3279Z" fill="#283841"></path>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -0,0 +1,3 @@
<svg width="35" height="40" viewBox="0 0 35 40" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M29.4554 2.43478V0H35V22.4348C35 32.1358 27.165 40 17.5 40C8.24271 40 0.664262 32.7853 0.0413736 23.6522H0V0H5.54455V2.43478L14.901 2.43478V0H20.4455V2.43478L29.4554 2.43478ZM29.4554 22.4348V19.0202C28.8318 19.6656 28.1633 20.2785 27.4539 20.8558C25.1121 22.7615 22.3612 24.2503 19.369 25.2589C16.3764 26.2677 13.1833 26.7826 9.96797 26.7826H6.35343C8.08848 31.2608 12.425 34.4348 17.5 34.4348C24.1028 34.4348 29.4554 29.0622 29.4554 22.4348ZM15.4269 18.2435C14.3706 19.3674 13.18 20.3419 11.8852 21.1425C13.8545 20.9882 15.7827 20.5971 17.6038 19.9833C20.013 19.1712 22.1698 17.9913 23.9621 16.5329C25.7535 15.075 27.136 13.3757 28.0645 11.5515C28.6507 10.3998 29.0518 9.20727 29.2674 8H20.2671C20.0641 9.47968 19.6891 10.9319 19.1475 12.3231C18.2893 14.5274 17.0275 16.5405 15.4269 18.2435ZM5.54455 17.8146V8H14.6483C14.4948 8.78546 14.2724 9.55482 13.9832 10.2975C13.3786 11.8506 12.4962 13.2517 11.3938 14.4246C10.2918 15.5971 8.99228 16.518 7.57404 17.143C6.91535 17.4333 6.23601 17.6576 5.54455 17.8146Z" fill="#1D3AA7"></path>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 25 KiB

View File

@@ -0,0 +1,4 @@
<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M0 20C0 12.5231 0 8.78461 1.60769 6C2.66091 4.17577 4.17577 2.66091 6 1.60769C8.78461 0 12.5231 0 20 0C27.4769 0 31.2154 0 34 1.60769C35.8242 2.66091 37.3391 4.17577 38.3923 6C40 8.78461 40 12.5231 40 20C40 27.4769 40 31.2154 38.3923 34C37.3391 35.8242 35.8242 37.3391 34 38.3923C31.2154 40 27.4769 40 20 40C12.5231 40 8.78461 40 6 38.3923C4.17577 37.3391 2.66091 35.8242 1.60769 34C0 31.2154 0 27.4769 0 20Z" fill="#00DC33"></path>
<path fill-rule="evenodd" clip-rule="evenodd" d="M28.0441 7.60927C28.8868 6.80331 30.2152 6.79965 31.0622 7.58229L31.1425 7.66005L31.4164 7.94729C34.1911 10.9318 35.2251 14.4098 34.9599 17.8065C34.6908 21.2511 33.1012 24.4994 30.8836 27.0664C28.6673 29.6316 25.7084 31.6519 22.51 32.5287C19.2714 33.4164 15.7294 33.1334 12.6547 30.9629C10.0469 29.1218 9.05406 26.1465 8.98661 23.2561C7.52323 22.5384 5.98346 21.6463 4.36789 20.5615L3.941 20.2716L3.85006 20.206C2.93285 19.5053 2.72313 18.2084 3.39161 17.2564C4.06029 16.3043 5.36233 16.046 6.34665 16.6512L6.44134 16.7126L6.83024 16.9771C7.79805 17.6269 8.72153 18.1903 9.59966 18.6767C10.1661 16.6889 11.1047 14.7802 12.3413 13.207C14.1938 10.8501 16.9713 8.96525 20.374 9.24647C23.439 9.49995 25.7036 11.081 26.8725 13.3122C28.0044 15.4728 28.0211 18.0719 27.0319 20.307C26.0234 22.5857 23.976 24.484 21.0309 25.2662C18.9114 25.8291 16.4284 25.7905 13.6267 25.0367V25.0377C12.5115 24.7375 11.3427 24.323 10.1212 23.7846C9.8472 23.6638 9.60873 23.8483 10.1212 24.1686C11.5636 25.1924 13.5956 26.0505 14.1836 26.3385C14.4615 26.788 14.8061 27.1568 15.2011 27.4356C17.0188 28.7188 19.1451 28.9539 21.3396 28.3523C23.5743 27.7397 25.8141 26.2625 27.5514 24.2516C29.2873 22.2423 30.4065 19.8348 30.5909 17.4727C30.765 15.2439 30.1218 12.9543 28.1842 10.8736L27.9927 10.6731L27.9162 10.5906C27.1538 9.72748 27.2018 8.41516 28.0441 7.60927ZM20.0092 13.5651C18.6033 13.4489 17.1196 14.189 15.8013 15.8662C14.7973 17.1436 14.0376 18.8033 13.6503 20.5112C16.4093 21.4544 18.4655 21.4608 19.8942 21.0814C21.5481 20.6422 22.5399 19.6477 23.0172 18.5693C23.5137 17.4472 23.4628 16.2245 22.9813 15.3055C22.5369 14.4571 21.6422 13.7002 20.0092 13.5651Z" fill="#ffffff"></path>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

@@ -0,0 +1,4 @@
<svg width="55" height="41" viewBox="0 0 55 41" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M35.5 0.5C45.9934 0.5 54.5 9.00659 54.5 19.5V40.5C50.0817 40.5 46.5 36.9183 46.5 32.5V19.5C46.5 13.4249 41.5751 8.5 35.5 8.5H30.2988C27.6467 8.50004 25.1029 9.55339 23.2275 11.4287L9.67188 24.9854C8.92179 25.7354 8.50006 26.7527 8.5 27.8135V28.5C8.5 30.7091 10.2909 32.5 12.5 32.5H30.5C30.5 36.7801 27.1389 40.2748 22.9121 40.4893L22.5 40.5H12.5C5.87259 40.5 0.5 35.1274 0.5 28.5V27.8135C0.500062 24.631 1.76427 21.5785 4.01465 19.3281L17.5713 5.77246C20.9469 2.39685 25.525 0.500044 30.2988 0.5H35.5Z" fill="#FF500B"></path>
<path d="M37.5 12.5C40.2614 12.5 42.5 14.7386 42.5 17.5V40.5C38.0817 40.5 34.5 36.9183 34.5 32.5V20.5H31.1562L24.6207 27.0355C23.683 27.9732 22.4113 28.5 21.0852 28.5H12.9775C12.5588 28.5 12.3491 27.9937 12.6452 27.6976L26.3789 13.9648C27.3165 13.0272 28.588 12.5 29.9141 12.5H37.5Z" fill="#FF500B"></path>
</svg>

After

Width:  |  Height:  |  Size: 944 B

View File

@@ -0,0 +1,4 @@
<svg width="100%" height="100%" viewBox="0 0 56 40" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M43 0C50.1797 6.44277e-07 56 5.8203 56 13C56 20.1797 50.1797 26 43 26H34.4844L48.4844 40H31.5156L15.7578 24.2422C14.672 23.1564 14 21.6569 14 20C14 16.6863 16.6863 14 20 14H43C43.5523 14 44 13.5523 44 13C44 12.4477 43.5523 12 43 12H20C15.5817 12 12 15.5817 12 20C12 22.3901 13.0482 24.5347 14.71 26H14.6875L28.6875 40H20C8.95431 40 0 31.0457 0 20C0 8.95431 8.9543 0 20 0H43Z" fill="#3902FF"></path>
<path d="M56 28V40H51.3125L39.3125 28H56Z" fill="#3902FF"></path>
</svg>

After

Width:  |  Height:  |  Size: 580 B

2
public/robots.txt Normal file
View File

@@ -0,0 +1,2 @@
User-Agent: *
Disallow:

18
tsconfig.json Normal file
View File

@@ -0,0 +1,18 @@
{
// https://nuxt.com/docs/guide/concepts/typescript
"files": [],
"references": [
{
"path": "./.nuxt/tsconfig.app.json"
},
{
"path": "./.nuxt/tsconfig.server.json"
},
{
"path": "./.nuxt/tsconfig.shared.json"
},
{
"path": "./.nuxt/tsconfig.node.json"
}
]
}