From 751b0105dde21dcf8b1d40efe43dc3eb70483869 Mon Sep 17 00:00:00 2001 From: TGY Date: Sun, 4 May 2025 12:04:19 +0800 Subject: [PATCH] update magic-resume --- magic-resume/README.md | 131 +++++++++++++++++++++++++ magic-resume/data.yml | 19 ++++ magic-resume/latest/.env.sample | 2 + magic-resume/latest/data.yml | 10 ++ magic-resume/latest/docker-compose.yml | 17 ++++ magic-resume/logo.png | Bin 0 -> 5908 bytes 6 files changed, 179 insertions(+) create mode 100644 magic-resume/README.md create mode 100644 magic-resume/data.yml create mode 100644 magic-resume/latest/.env.sample create mode 100644 magic-resume/latest/data.yml create mode 100644 magic-resume/latest/docker-compose.yml create mode 100644 magic-resume/logo.png diff --git a/magic-resume/README.md b/magic-resume/README.md new file mode 100644 index 000000000..f26a8ce93 --- /dev/null +++ b/magic-resume/README.md @@ -0,0 +1,131 @@ +
+ +# ✨ Magic Resume ✨ + +[![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) +![Next.js](https://img.shields.io/badge/Next.js-14.0-black) +![Framer Motion](https://img.shields.io/badge/Framer_Motion-10.0-purple) + +简体中文 | [English](./README.en-US.md) + +
+ +Magic Resume 是一个现代化的在线简历编辑器,让创建专业简历变得简单有趣。基于 Next.js 和 Motion 构建,支持实时预览和自定义主题。 + +## 📸 项目截图 + +![782shots_so](https://github.com/user-attachments/assets/d59f7582-799c-468d-becf-59ee6453acfd) + +## ✨ 特性 + +- 🚀 基于 Next.js 14+ 构建 +- 💫 流畅的动画效果 (Motion) +- 🎨 自定义主题支持 +- 🌙 深色模式 +- 📤 导出为 PDF +- 🔄 实时预览 +- 💾 自动保存 +- 🔒 硬盘级存储 + +## 🛠️ 技术栈 + +- Next.js 14+ +- TypeScript +- Motion +- Tiptap +- Tailwind CSS +- Zustand +- Shadcn/ui +- Lucide Icons + +## 🚀 快速开始 + +1. 克隆项目 + +```bash +git clone git@github.com:JOYCEQL/magic-resume.git +cd magic-resume +``` + +2. 安装依赖 + +```bash +pnpm install +``` + +3. 启动开发服务器 + +```bash +pnpm dev +``` + +4. 打开浏览器访问 `http://localhost:3000` + +## 📦 构建打包 + +```bash +pnpm build +``` + +## ⚡ Vercel 部署 + +你可以一键部署自己的 Magic Resume 实例: + +[![使用 Vercel 部署](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2FJOYCEQL%2Fmagic-resume) + +## 🐳 Docker 部署 + +### Docker Compose + +1. 确保你已经安装了 Docker 和 Docker Compose + +2. 在项目根目录运行: + +```bash +docker compose up -d +``` + +这将会: + +- 自动构建应用镜像 +- 在后台启动容器 + +### Docker Hub + +最新版本的 Magic Resume 已经发布在 Docker Hub: + +[Docker Hub](https://hub.docker.com/r/siyueqingchen/magic-resume/) + +```bash +docker pull siyueqingchen/magic-resume:main +``` + +## 📝 开源协议 + +本项目采用 Apache 2.0 协议,但有一些自定义的部分 - 查看 [LICENSE](LICENSE) 了解详情 + +## 🗺️ 路线图 + +- [x] AI 辅助编写 +- [x] 多语言支持 +- [ ] 支持更多简历模板 +- [ ] 更多格式导出 +- [ ] 自定义模型 +- [ ] 智能一页 +- [ ] 导入 PDF, Markdown 等 +- [ ] 在线简历托管 + +## 📞 联系方式 + +可以通过以下方式关注最新动态: + +- 作者:SiYue +- X: @GuangzhouY81070 +- Discord: 欢迎加入群组 https://discord.gg/9mWgZrW3VN +- 用户群:加微信 qingchensiyue +- 邮箱:18806723365@163.com +- 项目主页:https://github.com/JOYCEQL/magic-resume + +## 🌟 支持项目 + +如果这个项目对你有帮助,欢迎点个 star ⭐️ \ No newline at end of file diff --git a/magic-resume/data.yml b/magic-resume/data.yml new file mode 100644 index 000000000..534f041dc --- /dev/null +++ b/magic-resume/data.yml @@ -0,0 +1,19 @@ +name: Magic Resume +tags: + - 工具 +title: Magic Resume 是一个现代化的在线简历编辑器,让创建专业简历变得简单有趣。基于 Next.js 和 Motion 构建,支持实时预览和自定义主题。 +description: Magic Resume 是一个现代化的在线简历编辑器,让创建专业简历变得简单有趣。基于 Next.js 和 Motion 构建,支持实时预览和自定义主题。 +additionalProperties: + key: magic-resume + name: Magic Resume + tags: + - Tool + shortDescZh: Magic Resume 是一个现代化的在线简历编辑器,让创建专业简历变得简单有趣。基于 Next.js 和 Motion 构建,支持实时预览和自定义主题。 + shortDescEn: Magic Resume is a modern online resume editor that makes creating professional resumes simple and enjoyable. Built with Next.js and Framer Motion, it supports real-time preview and custom themes + type: tool + crossVersionUpdate: true + limit: 0 + recommend: 0 + website: https://magicv.art/zh + github: https://github.com/JOYCEQL/magic-resume + document: https://github.com/JOYCEQL/magic-resume/blob/main/README.md diff --git a/magic-resume/latest/.env.sample b/magic-resume/latest/.env.sample new file mode 100644 index 000000000..c72333b28 --- /dev/null +++ b/magic-resume/latest/.env.sample @@ -0,0 +1,2 @@ +CONTAINER_NAME="magic-resume" +PANEL_APP_PORT_HTTP="40250" diff --git a/magic-resume/latest/data.yml b/magic-resume/latest/data.yml new file mode 100644 index 000000000..179f5068f --- /dev/null +++ b/magic-resume/latest/data.yml @@ -0,0 +1,10 @@ +additionalProperties: + formFields: + - default: 40250 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelEn: Port + labelZh: 端口 + required: true + rule: paramPort + type: number diff --git a/magic-resume/latest/docker-compose.yml b/magic-resume/latest/docker-compose.yml new file mode 100644 index 000000000..a505a0b49 --- /dev/null +++ b/magic-resume/latest/docker-compose.yml @@ -0,0 +1,17 @@ +services: + magic-resume: + container_name: ${CONTAINER_NAME} + restart: always + networks: + - 1panel-network + ports: + - "${PANEL_APP_PORT_HTTP}:3000" + environment: + - NODE_ENV=production + image: siyueqingchen/magic-resume:main + labels: + createdBy: "Apps" + +networks: + 1panel-network: + external: true diff --git a/magic-resume/logo.png b/magic-resume/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..18ba2f0ba0873901b34c821679efad9157f45da4 GIT binary patch literal 5908 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 literal 0 HcmV?d00001