Skip to content

anYuJia/ptype

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

87 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PType Logo PType

专为开发者打造的终极打字练习平台

English | 简体中文

License TypeScript React Next.js PRs Welcome GitHub stars


在线演示 · 报告 Bug · 请求功能


📖 目录


✨ 项目亮点

PType 不仅仅是一个打字练习工具,它是为了提升开发者生产力而生的训练场。

  • 🎯 极致体验:基于 React 19 和 Framer Motion 打造的丝滑动画与响应式设计。
  • 🌍 多语言支持:不仅支持英文、中文(现代/文言),更原生支持 10+ 种编程语言。
  • 📊 专业分析:统一使用 CPM (Characters Per Minute) 作为核心指标,提供 WPM、准确率热力图等多维度数据分析。
  • 🏆 竞技排行:内置全球排行榜与个人历史记录,实时监控你的成长曲线。
  • 实时对战:支持 1v1 在线对战,竞速模式和限时挑战两种对战方式。
  • 🔐 请求签名:内置多层加密签名机制,防止 API 滥用和自动化攻击。
  • 🌐 国际化:完整的中英文界面支持,基于 next-intl 实现。

📸 界面预览

Code Mode

程序员模式 - 沉浸式代码练习体验

查看更多截图
英文模式
English Mode
中文模式
Chinese Mode
详细统计面板
Statistics

🚀 核心特性

1. 三大练习模式

模式 描述 适用场景
📝 英文模式 经典单词练习,支持标点、大小写敏感 提升日常英文输入速度
🇨🇳 中文模式 现代文、古文(论语、道德经) 体验中华文化,提升中文打字
💻 程序员模式 真实代码片段、Linux 命令、算法题 开发者必备,提升 Coding 效率

2. 智能数据分析

  • CPM (Characters Per Minute): 全局核心速度指标,统一衡量中英文及代码输入效率。
  • WPM (Words Per Minute): 英文模式辅助参考指标。
  • 准确率热力图: 识别你的高频错误按键。
  • 历史回溯: 完整的练习历史记录与趋势分析。

3. 用户与社交

  • 账号系统: 完整的注册登录流程,JWT 认证,数据云端存储。
  • 排行榜: 实时更新的全球速度排行,激发练习动力。
  • 自定义文本: 支持用户上传自己的练习文本。

4. 🎮 对战模式 (1v1 实时竞技)

PType 现已支持实时在线对战功能,通过 WebSocket 技术实现毫秒级的同步体验。

对战特性:

  • 🏎️ 竞速模式 - 看谁先打完所有文本,速度最快赢胜利
  • ⏱️ 限时挑战 - 在固定时间内,比较谁的正确字符数更多
  • 👥 灵活配对 - 支持邀请好友或与随机对手匹配
  • ⚙️ 自定义规则 - 房主可设置比赛时间、文本内容等参数
  • 📊 实时反馈 - 对战中实时显示双方的打字进度和速度对比
  • 🏆 荣誉系统 - 赢得对战可获得荣誉分,登上对战排行榜

如何开始对战:

  1. 登录后进入对战模式页面
  2. 创建新房间或加入现有房间
  3. 配置对战参数(选择模式、时间、文本等)
  4. 邀请好友加入或等待随机匹配
  5. 开始计时,看谁能更快更准地完成打字任务

🛠️ 技术栈

本项目采用现代化的全栈技术构建,确保高性能与可维护性。

领域 技术选型
核心框架 React Next.js TypeScript
样式与动画 TailwindCSS Framer Motion
后端与数据 Prisma PostgreSQL
状态管理 Zustand
图表可视化 Recharts
国际化 next-intl
实时通信 Socket.io
认证安全 JWT HMAC

💻 代码库支持

PType 内置了丰富的代码练习库,涵盖主流语言与工具:

Python JavaScript TypeScript Java Go C++ Rust HTML5 PowerShell Bash

特色内容:包含 LeetCode 热门算法题(两数之和、LRU 缓存等)和真实场景的系统运维命令。


🏁 快速开始

环境要求

启动方式 必需环境
🐳 Docker 部署(推荐) Docker 20.10+, Docker Compose 2.0+
💻 本地部署 Node.js >= 18.0, PostgreSQL >= 14.0

本地开发(推荐用于对战功能开发)

1. 克隆仓库

git clone --depth 1 https://github.com/anYuJia/ptype.git
cd ptype

2. 安装依赖

npm install

3. 配置环境变量

cp .env.example .env

编辑 .env 文件,设置必要的密钥:

# 数据库配置(可选,如不配置则使用默认)
DATABASE_URL="postgresql://user:password@localhost:5432/ptype?schema=public"

# 安全密钥(必须修改!使用 openssl rand -base64 32 生成)
JWT_SECRET="your-random-secret-key"
SIGNATURE_SECRET="your-random-secret-key"

# Cookie 设置(HTTP 环境设为 false)
SECURE_COOKIES=false

# Socket.io 服务器地址
NEXT_PUBLIC_SOCKET_URL="http://localhost:4000"

4. 初始化数据库(可选)

npx prisma generate
npx prisma db push

5. 启动 Socket.io 服务器(用于对战功能)

在新的终端窗口运行:

node server/server.js

Socket.io 服务器运行在 4000 端口。确保此端口未被占用。

6. 启动前端开发服务器

在另一个终端窗口运行:

npm run dev

前端运行在 3000 端口。

7. 访问应用

打开浏览器访问 http://localhost:3000

现在你可以完整体验包括对战功能的所有特性!

Docker 部署(生产环境推荐)

# 构建并启动所有服务
docker-compose up -d --build

# 查看日志
docker-compose logs -f

# 停止服务
docker-compose down

常见问题

❓ Socket.io 连接失败

确保:

  1. 服务器已启动:node server/server.js
  2. 端口 4000 未被占用
  3. .env 中的 NEXT_PUBLIC_SOCKET_URL 设置正确
  4. 浏览器控制台查看连接错误日志
❓ .env 文件配置问题
cp .env.example .env
# 然后编辑 .env 配置 JWT_SECRET 和 SIGNATURE_SECRET
❓ Prisma 引擎下载失败

设置国内镜像后重试:

export PRISMA_ENGINES_MIRROR="https://registry.npmmirror.com/-/binary/prisma"
npx prisma generate

🔐 安全机制

PType 内置了多层安全防护机制:

用户认证

  • JWT 认证 - 使用 JSON Web Token 进行用户身份验证
  • HttpOnly Cookie - Token 存储在 HttpOnly Cookie 中,防止 XSS 攻击
  • Secure Cookie - 生产环境(HTTPS)自动启用 Secure 标志

⚠️ HTTP 环境配置:如果服务器未配置 HTTPS,需要在 .env 中设置 SECURE_COOKIES=false

请求签名系统

所有敏感的写操作(登录、注册、保存成绩等)都需要携带有效的请求签名。

安全特性:

  • ⏱️ 时间戳验证 - 签名 5 分钟后自动过期
  • 🔄 Nonce 防重放 - 每个签名只能使用一次
  • 🔒 数据完整性 - 验证请求数据未被篡改
  • 🌐 浏览器指纹 - 增加请求唯一性,防止跨设备重放
  • 🔐 多轮 HMAC - 增加逆向破解难度

详细文档请参阅 src/lib/security/README.md


🤝 参与贡献

我们非常欢迎社区的贡献!无论是修复 Bug、添加新功能,还是丰富代码练习库。

  1. Fork 本仓库
  2. 创建你的特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交你的更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 开启一个 Pull Request

如何添加新的练习代码?

所有代码库文件位于 /src/lib/code-libraries/。 你可以参考现有的 python.tsjava.ts 格式,创建一个新的语言文件并在 index.ts 中导出。

如何贡献对战功能?

对战相关文件位于 /src/features/battle/,后端服务在 /server/ 目录。 欢迎改进对战机制、添加新的对战模式或优化 WebSocket 通信。


📄 许可证

本项目基于 MIT 许可证 开源。详情请参阅 LICENSE 文件。


🌟 Star History


如果觉得 PType 对你有帮助,请给个 ⭐️ Star 支持一下!
Made with ❤️ by anYuJia

About

一个支持中文、英文、代码的打字练习的网站

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors