ViteReact作品集

My-Portfolio — Vite 作品集模板

作者 TanerTalas

Taner Talas 的个人开发者作品集,基于 React 19、Vite 8、Tailwind CSS 4 与 React Router 7 构建,包含首页与项目列表页,以及一个用于联系表单的无服务器函数。

看看你的网站会是什么样

浏览真实页面截图,比较内容排版与手机效果。点击下方缩略图切换,放大查看整页细节。

3 个预览视图
桌面端首页1 / 3
桌面端截图首屏预览

由服务器浏览器实际访问页面后截取。

全部页面与视图 3

截图用于了解视觉与布局,交互效果请以实际项目为准。

采集于 2026-10-16查看来源

值得关注的模板亮点

从已有项目资料中,快速了解它的特点。

01

首页头部是一个动态天空场景:分层 SVG 云以不同速度漂移,风痕在云后穿过,切换主题时太阳升起或落下,整套云在浅色与深色变体之间切换。

02

MiniMe 是由头、身体、手和棍子等独立 SVG 部件组成的小角色,在用户停留在 Hero 区域时运行定时动画序列。

03

调色板是 :root 和 .dark 上的一组 CSS 自定义属性,切换按钮只翻转 <html> 上的一个类,整个站点包括云都会随之改变。

04

使用 Lenis 平滑滚动,IntersectionObserver 在区块进入视口时显示内容,滚动侦测让导航与当前阅读的区块保持同步。

05

Hero 标题在页面打开时逐字打出,并带有闪烁的光标。

06

项目卡片是模拟浏览器窗口,包含带锁图标和真实域名的地址栏,悬停时截图会略微放大。

模板详细介绍

这是一个个人作品集单页应用,包含首页和用于完整项目目录的 /projects 路由。README 说明它由作者自行设计、构建和维护,没有使用模板、页面构建器或 UI 套件,所有区块、动画和 SVG 都是为本站制作的。站点除一个无服务器函数外是静态的:联系表单提交到 api/contact.js,该函数会筛查垃圾信息并将消息转发到作者邮箱,不涉及数据库和分析工具。

首页包含 Hero、About、Services、Stack、Projects、Contact 等区块,以及 Cloud、Wind、MiniMe 等装饰性效果组件。项目卡片以模拟浏览器窗口的形式呈现,包含带锁图标和真实域名的地址栏以及截图。内容存放在 src/data/ 下的纯数据文件中,包括 projects.js、services.js、skills.js 和 navLinks.js,因此站点通过修改数据而非标记来编辑。

README 未提供关于浏览器兼容性、无障碍支持、性能指标或生产环境就绪程度的说明。

ViteReact作品集

适合你的项目吗?

适用场景

  • 作为个人开发者作品集,展示精选项目、服务、技能栈和联系方式。
  • 通过 /projects 页面浏览完整的项目目录,并按 Three.js 等标签筛选。
  • 通过联系表单发送消息,由 api/contact.js 无服务器函数筛查垃圾信息后转发到作者邮箱。
  • 作为参考,了解如何用 React、Vite、Tailwind 和 Lenis 实现主题切换、滚动显示和打字机等前端效果。

适合人群

  • 希望参考或改造成自己作品集的开发者,README 说明可以取用其中有用的部分,但不要将其作为自己的作品集发布。
  • 需要查看 React 19、Vite 8、Tailwind CSS 4 和 React Router 7 组合示例的前端学习者。
  • 想要了解如何用数据文件驱动项目卡片和技能列表的开发者。
  • 需要部署到 Vercel 并使用无服务器函数处理联系表单的个人站点作者。

上手与定制指南

结合仓库当前版本的说明,按下面的资料检查内容、配置与运行要求。

  1. 1

    安装依赖:npm install。

  2. 2

    启动开发服务器:npm run dev。

  3. 3

    构建生产版本:npm run build。

  4. 4

    预览生产构建:npm run preview。

  5. 5

    部署在 Vercel 上,vercel.json 将所有路径重写到 index.html,因此直接访问或刷新 /projects 仍可解析;推送到 main 分支即发布。

查看仓库使用说明

授权与来源资料

使用条件与限制

免费使用 · 保留许可声明

本次收录的是公开仓库中采用 MIT 许可的免费版本;免费范围为该版本代码,不代表外部服务或第三方素材免费。

使用时需要遵守

  • 允许免费使用、修改、商用和分发该版本代码。
  • 分发代码副本或实质性部分时,保留原作者版权声明和完整 MIT 许可声明。
  • 代码按现状提供;担保与责任限制以原许可证及适用法律为准。

额外费用与待核对事项

  • 演示图片、字体、图标及其他第三方素材需按各自许可核对,不能仅凭代码的 MIT 许可判断。
  • 域名、托管、数据库、支付或 AI 等外部服务可能另外收费。
  • MIT 许可证允许使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本,但 README 明确要求:可以取用其中有用的部分,但不要将其作为自己的作品集发布。
查看原文依据

Permission is hereby granted, free of charge

许可证原文

[MIT](LICENSE) — take what is useful, just don't ship it as your own portfolio.

README 原文
https://github.com/TanerTalas/My-Portfolio/blob/main/LICENSEhttps://github.com/TanerTalas/My-Portfolio/blob/main/README.md

DeepSeek 根据仓库许可证和 README 整理 ·2026-10-16。结果仅覆盖已读取资料,依赖、图片、字体及后续条款变更以各自原文为准。

项目核对记录与介绍依据

模板资料

来源平台
GitHub
资料与维护参考分
资料较完整 · 85 / 100
技术栈
Vite · React
网站类型
作品集
这个分数如何计算

本站按许可资料(最高30分)、演示链接(12分)、预览图(10分)、Star数(15分)、记录的维护时间(15分)、描述完整度(8分)、功能记录(5分)和分类资料(5分)计算。它不是代码、安全或性能测试,也不是 Google 评分;有链接不代表已实测可用。

这个项目需要核对什么

记录的仓库更新时间
2026-09-09
截图检查日期
2026-10-16

已收录演示链接。请用你的内容与屏幕尺寸检查;有演示不代表表单、认证或支付已经可用。

目录记录的主要技术栈是 Vite。请通过依赖清单和锁文件核对实际版本与托管要求。这些说明基于收录资料,不代表代码审计或部署实测。

查看具体选型方法 →

介绍的制作与核对状态

介绍由 AI 辅助整理目录与仓库资料。仓库作者不等于这篇介绍的审核者。

审核声明: codex-user-requested-batch-review-20261017 · 2026-10-16

查看当时使用的来源资料

SHA-256: 752b7f187e98fab74f6e880bddeba013d4f68b0d3a9d5087167438b63cb79c7c

2026-10-16T11:49:23.232Z

来源文件 / 仓库
<div align="center">

<img src="public/img/avatar.svg" width="120" alt="Taner Talas" />

# Taner Talas — Developer Portfolio

**A hand-built portfolio with a sky that changes with the theme, clouds that drift,
and a little pixel version of me who walks in while you read.**

[![live](https://img.shields.io/badge/live-tanertalas--portfolio-2563eb?style=for-the-badge)](https://tanertalas-portfolio.vercel.app)
&nbsp;
![React](https://img.shields.io/badge/React-19-61dafb?style=for-the-badge&logo=react&logoColor=000)
![Vite](https://img.shields.io/badge/Vite-8-646cff?style=for-the-badge&logo=vite&logoColor=fff)
![Tailwind](https://img.shields.io/badge/Tailwind-4-38bdf8?style=for-the-badge&logo=tailwindcss&logoColor=fff)
![MIT](https://img.shields.io/badge/license-MIT-4c9a6a?style=for-the-badge)

<img src="public/img/banner.png" alt="Taner Talas portfolio preview" width="820" />

</div>

---

## Contents

- [What it is](#what-it-is)
- [Featured work](#featured-work)
- [The details worth noticing](#the-details-worth-noticing)
- [Stack](#stack)
- [Getting started](#getting-started)
- [Project layout](#project-layout)
- [Adding a project](#adding-a-project)
- [Deploying](#deploying)
- [Contact](#contact)

---

## What it is

My personal portfolio — designed, built and maintained entirely by me. No template,
no page builder, no UI kit. Every section, animation and SVG in this repo was made
for this site.

It is a single-page React app with one extra route for the full project catalogue.
Static apart from one serverless function: the contact form posts to `api/contact.js`,
which screens the message for spam and relays it to my inbox. No database, no analytics.

---

## Featured work

The two cards on the home page, plus everything else on `/projects`:

| Project | What it is | Built with |
| --- | --- | --- |
| **[Stargazers](https://stargazers-rust.vercel.app)** | Send someone words under the stars | Next.js · TypeScript · Three.js · Tailwind |
| **[Solar System Journey](https://solar-system-journey-plum.vercel.app)** | A 3D flight from the Sun out to Neptune at true spacing | Next.js · TypeScript · Three.js · Tailwind |
| **[Fire Eye](https://tanertalas.github.io/fire-eye/)** | A burning eye drawn by a custom GLSL shader | Three.js · GLSL · JS |
| **[Dragon](https://tanertalas.github.io/dragon/)** | A dragon that builds its own scales in the browser | Three.js · JS |
| **[Logo Quiz](https://logo-quiz-lake.vercel.app)** | Guess the brand behind the blurred logo | Next.js · TypeScript · Tailwind · PostgreSQL |

<sub>…and more on the [projects page](https://tanertalas-portfolio.vercel.app/projects).</sub>

---

## The details worth noticing

**A sky, not a background.** The header is a live scene: layered SVG clouds drifting
at different speeds, wind streaks crossing behind them, and a sun that rises or sets
when you flip the theme — the whole cloud set swaps between a light and a dark
variant rather than just dimming.

**The mini me.** A small character assembled from separate SVG parts (head, body,
hands, stick) that runs a timed animation sequence while you sit on the hero.

**One class, two skies.** The palette is a set of CSS custom properties on `:root` and
`.dark`; the toggle flips a single class on `<html>` and the whole site — clouds
included — changes with it.

**Motion that follows you.** [Lenis](https://github.com/darkroomengineering/lenis)
smooths the scroll, an `IntersectionObserver` reveals each block as it enters the
viewport, and a scroll-spy keeps the nav in sync with the section you are reading.

**A typewriter hero.** The headline types itself out one character at a time when the
page opens, with a blinking caret trailing behind it.

**Projects as browser windows.** Each project card is a mock browser — a URL bar with
a padlock and the real domain, and a screenshot that zooms a little when you hover it.

**Responsive down to a phone.** Every section reflows; the nav collapses into a
mobile menu.

---

## Stack

| Layer | Choice | Why |
| --- | --- | --- |
| UI | **React 19** | Component-per-section, data-driven cards |
| Build | **Vite 8** | Instant dev server, tiny production bundle |
| Styling | **Tailwind CSS 4** | Utility-first, with theme tokens as CSS variables |
| Routing | **React Router 7** | `/` and `/projects`, client-side |
| Scroll | **Lenis** | Smooth scrolling that plays well with the reveals |

Content lives in plain data files under `src/data/` — projects, services, skills and
nav links — so the site is edited by changing data, not markup.

---

## Getting started

```bash
npm install      # install dependencies
npm run dev      # start the dev server
npm run build    # build for production
npm run preview  # preview the production build
```

---

## Project layout

```
api/contact.js       # Serverless endpoint behind the contact form
public/img/          # All artwork: clouds, character, tool icons, project shots
src/
├── components/
│   ├── effects/     # Clouds, Wind, MiniMe — the decorative layer
│   ├── layout/      # Navbar, Footer
│   ├── sections/    # Hero, About, Services, Stack, Projects, Contact
│   └── ui/          # ProjectCard, SectionHeading, Reveal, Turnstile
├── data/            # projects.js, services.js, skills.js, navLinks.js
├── hooks/           # useTheme, useLenis, useScrollSpy, useTypewriter, useInView
├── pages/           # HomePage, ProjectsPage
├── App.jsx          # Routes and layout
└── main.jsx         # Entry point
```

---

## Adding a project

One entry in `src/data/projects.js` — the home preview takes the first two, the
projects page renders the whole list, so order is priority:

```js
{
  name: "Solar System Journey",
  tagline: "3D flight from the Sun out to Neptune",
  urlLabel: "solar-system-journey-plum.vercel.app",
  image: "/img/projects/solar-system-journey.png",
  live: "https://solar-system-journey-plum.vercel.app",
  github: "https://github.com/TanerTalas/Solar-System-Journey",
  threejs: true,   // optional — only marks it for the Three.js filter on /projects
}
```

Drop the screenshot in `public/img/projects/` at **1981 × 1400** to match the rest.
New technology in the stack section? Add its SVG under
`public/img/toolicons/<category>/` and one line in `src/data/skills.js`.

---

## Deploying

Hosted on **Vercel**. `vercel.json` rewrites every path to `index.html`, so
`/projects` still resolves on a direct visit or a refresh. Pushing to `main` ships it.

---

## Contact

<div align="center">

**[[email protected]](mailto:[email protected])**

[![GitHub](https://img.shields.io/badge/GitHub-TanerTalas-181717?style=for-the-badge&logo=github)](https://github.com/TanerTalas)
&nbsp;
[![LinkedIn](https://img.shields.io/badge/LinkedIn-tanertalas-0a66c2?style=for-the-badge&logo=linkedin&logoColor=fff)](https://www.linkedin.com/in/tanertalas/)

</div>

---

## License

[MIT](LICENSE) — take what is useful, just don't ship it as your own portfolio.
反馈内容错误

看看同类模板

对比同技术栈与用途的模板,找到更适合的视觉与内容结构。