首页头部是一个动态天空场景:分层 SVG 云以不同速度漂移,风痕在云后穿过,切换主题时太阳升起或落下,整套云在浅色与深色变体之间切换。
My-Portfolio — Vite 作品集模板
作者 TanerTalas
Taner Talas 的个人开发者作品集,基于 React 19、Vite 8、Tailwind CSS 4 与 React Router 7 构建,包含首页与项目列表页,以及一个用于联系表单的无服务器函数。
看看你的网站会是什么样
浏览真实页面截图,比较内容排版与手机效果。点击下方缩略图切换,放大查看整页细节。
全部页面与视图 3
截图用于了解视觉与布局,交互效果请以实际项目为准。
值得关注的模板亮点
从已有项目资料中,快速了解它的特点。
MiniMe 是由头、身体、手和棍子等独立 SVG 部件组成的小角色,在用户停留在 Hero 区域时运行定时动画序列。
调色板是 :root 和 .dark 上的一组 CSS 自定义属性,切换按钮只翻转 <html> 上的一个类,整个站点包括云都会随之改变。
使用 Lenis 平滑滚动,IntersectionObserver 在区块进入视口时显示内容,滚动侦测让导航与当前阅读的区块保持同步。
Hero 标题在页面打开时逐字打出,并带有闪烁的光标。
项目卡片是模拟浏览器窗口,包含带锁图标和真实域名的地址栏,悬停时截图会略微放大。
模板详细介绍
这是一个个人作品集单页应用,包含首页和用于完整项目目录的 /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 未提供关于浏览器兼容性、无障碍支持、性能指标或生产环境就绪程度的说明。
适合你的项目吗?
适用场景
- 作为个人开发者作品集,展示精选项目、服务、技能栈和联系方式。
- 通过 /projects 页面浏览完整的项目目录,并按 Three.js 等标签筛选。
- 通过联系表单发送消息,由 api/contact.js 无服务器函数筛查垃圾信息后转发到作者邮箱。
- 作为参考,了解如何用 React、Vite、Tailwind 和 Lenis 实现主题切换、滚动显示和打字机等前端效果。
适合人群
- 希望参考或改造成自己作品集的开发者,README 说明可以取用其中有用的部分,但不要将其作为自己的作品集发布。
- 需要查看 React 19、Vite 8、Tailwind CSS 4 和 React Router 7 组合示例的前端学习者。
- 想要了解如何用数据文件驱动项目卡片和技能列表的开发者。
- 需要部署到 Vercel 并使用无服务器函数处理联系表单的个人站点作者。
上手与定制指南
结合仓库当前版本的说明,按下面的资料检查内容、配置与运行要求。
- 1
安装依赖:npm install。
- 2
启动开发服务器:npm run dev。
- 3
构建生产版本:npm run build。
- 4
预览生产构建:npm run preview。
- 5
部署在 Vercel 上,vercel.json 将所有路径重写到 index.html,因此直接访问或刷新 /projects 仍可解析;推送到 main 分支即发布。
授权与来源资料
使用条件与限制
免费使用 · 保留许可声明本次收录的是公开仓库中采用 MIT 许可的免费版本;免费范围为该版本代码,不代表外部服务或第三方素材免费。
使用时需要遵守
- 允许免费使用、修改、商用和分发该版本代码。
- 分发代码副本或实质性部分时,保留原作者版权声明和完整 MIT 许可声明。
- 代码按现状提供;担保与责任限制以原许可证及适用法律为准。
额外费用与待核对事项
- 演示图片、字体、图标及其他第三方素材需按各自许可核对,不能仅凭代码的 MIT 许可判断。
- 域名、托管、数据库、支付或 AI 等外部服务可能另外收费。
- MIT 许可证允许使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本,但 README 明确要求:可以取用其中有用的部分,但不要将其作为自己的作品集发布。
查看原文依据
Permission is hereby granted, free of charge
许可证原文
https://github.com/TanerTalas/My-Portfolio/blob/main/LICENSEhttps://github.com/TanerTalas/My-Portfolio/blob/main/README.md[MIT](LICENSE) — take what is useful, just don't ship it as your own portfolio.
README 原文
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.**
[](https://tanertalas-portfolio.vercel.app)




<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])**
[](https://github.com/TanerTalas)
[](https://www.linkedin.com/in/tanertalas/)
</div>
---
## License
[MIT](LICENSE) — take what is useful, just don't ship it as your own portfolio.
看看同类模板
对比同技术栈与用途的模板,找到更适合的视觉与内容结构。

Resumify
Free, privacy-first resume builder — 6 ATS-friendly templates, full customization, JSON import/export. No sign…
Vite · 作品集

showlit
✨ Showlit - A modern and clean template for creating a personal website
Vite · 作品集

folium
Professional developer portfolio boilerplate (React • TypeScript • Tailwind • Vite) with simple content custom…
Vite · 作品集

kurizu-discord
A Discord themed website built using React & Vite
Vite · 作品集

cv-educornelsen
Production portfolio with a streaming AI chatbot (Gemini + SSE), containerized via Docker, deployed to Google …
Vite · 作品集

about-me-personal-portfolio-website-template
Simple Personal Website Template, built with bootstrap and vite js project.
Vite · 作品集
