hepansls commited on
Commit
9bc6cc2
·
verified ·
1 Parent(s): c35e1d0

你需要从本地路径读取json数据,例如resume.json,而不是直接展示resume_dict,resume_dict只是一个示例。

Browse files
README.md CHANGED
@@ -1,10 +1,13 @@
1
  ---
2
- title: Resume Wizard
3
- emoji: 😻
4
- colorFrom: blue
5
- colorTo: yellow
6
  sdk: static
7
  pinned: false
 
 
8
  ---
9
 
10
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
1
  ---
2
+ title: Resume Wizard 🧙
3
+ colorFrom: red
4
+ colorTo: purple
5
+ emoji: 🐳
6
  sdk: static
7
  pinned: false
8
+ tags:
9
+ - deepsite-v3
10
  ---
11
 
12
+ # Welcome to your new DeepSite project!
13
+ This project was created with [DeepSite](https://huggingface.co/deepsite).
components/resume-footer.js ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ class ResumeFooter extends HTMLElement {
2
+ connectedCallback() {
3
+ this.attachShadow({ mode: 'open' });
4
+ this.shadowRoot.innerHTML = `
5
+ <style>
6
+ footer {
7
+ margin-top: 3rem;
8
+ padding-top: 2rem;
9
+ border-top: 1px solid #e5e7eb;
10
+ text-align: center;
11
+ color: #6b7280;
12
+ font-size: 0.875rem;
13
+ }
14
+
15
+ .print-button {
16
+ background-color: #4f46e5;
17
+ color: white;
18
+ padding: 0.5rem 1rem;
19
+ border-radius: 0.375rem;
20
+ display: inline-flex;
21
+ align-items: center;
22
+ gap: 0.5rem;
23
+ cursor: pointer;
24
+ margin-bottom: 1rem;
25
+ }
26
+
27
+ .print-button:hover {
28
+ background-color: #4338ca;
29
+ }
30
+ </style>
31
+
32
+ <footer>
33
+ <button class="print-button no-print" onclick="window.print()">
34
+ <i data-feather="printer"></i>
35
+ Print Resume
36
+ </button>
37
+ <p>Last updated: ${new Date().toLocaleDateString()}</p>
38
+ </footer>
39
+ `;
40
+ }
41
+ }
42
+
43
+ customElements.define('resume-footer', ResumeFooter);
components/resume-header.js ADDED
@@ -0,0 +1,76 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ class ResumeHeader extends HTMLElement {
2
+ connectedCallback() {
3
+ this.attachShadow({ mode: 'open' });
4
+ this.shadowRoot.innerHTML = `
5
+ <style>
6
+ .header {
7
+ background: linear-gradient(135deg, #4f46e5 0%, #7c3aed 100%);
8
+ color: white;
9
+ border-radius: 0.75rem;
10
+ padding: 2rem;
11
+ position: relative;
12
+ overflow: hidden;
13
+ }
14
+
15
+ .header::before {
16
+ content: "";
17
+ position: absolute;
18
+ top: -50%;
19
+ right: -50%;
20
+ width: 100%;
21
+ height: 200%;
22
+ background: radial-gradient(circle, rgba(255,255,255,0.1) 0%, transparent 70%);
23
+ transform: rotate(30deg);
24
+ }
25
+
26
+ .contact-info {
27
+ display: flex;
28
+ flex-wrap: wrap;
29
+ gap: 1rem;
30
+ margin-top: 1rem;
31
+ }
32
+
33
+ .contact-item {
34
+ display: flex;
35
+ align-items: center;
36
+ gap: 0.5rem;
37
+ font-size: 0.9rem;
38
+ }
39
+
40
+ @media (max-width: 640px) {
41
+ .header {
42
+ padding: 1.5rem;
43
+ }
44
+
45
+ .name {
46
+ font-size: 1.5rem;
47
+ }
48
+ }
49
+ </style>
50
+
51
+ <header class="header shadow-lg">
52
+ <div class="relative z-10">
53
+ <h1 class="name text-3xl font-bold">何攀</h1>
54
+ <p class="title text-xl opacity-90 mt-1">NLP Researcher</p>
55
+
56
+ <div class="contact-info">
57
+ <div class="contact-item">
58
+ <i data-feather="mail"></i>
59
+ <span>newtonysls@gmail.com</span>
60
+ </div>
61
+ <div class="contact-item">
62
+ <i data-feather="phone"></i>
63
+ <span>156-8312-1839</span>
64
+ </div>
65
+ <div class="contact-item">
66
+ <i data-feather="map-pin"></i>
67
+ <span>四川省成都市电子科技大学清水河校区</span>
68
+ </div>
69
+ </div>
70
+ </div>
71
+ </header>
72
+ `;
73
+ }
74
+ }
75
+
76
+ customElements.define('resume-header', ResumeHeader);
components/resume-section.js ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ class ResumeSection extends HTMLElement {
2
+ connectedCallback() {
3
+ const title = this.getAttribute('title') || '';
4
+ const icon = this.getAttribute('icon') || 'file';
5
+
6
+ this.attachShadow({ mode: 'open' });
7
+ this.shadowRoot.innerHTML = `
8
+ <style>
9
+ .section-title {
10
+ display: flex;
11
+ align-items: center;
12
+ gap: 0.75rem;
13
+ margin-bottom: 1.5rem;
14
+ color: #4f46e5;
15
+ }
16
+
17
+ .section-title h2 {
18
+ font-size: 1.25rem;
19
+ font-weight: 600;
20
+ margin: 0;
21
+ }
22
+
23
+ .section-icon {
24
+ width: 2rem;
25
+ height: 2rem;
26
+ display: flex;
27
+ align-items: center;
28
+ justify-content: center;
29
+ background-color: #eef2ff;
30
+ border-radius: 50%;
31
+ }
32
+ </style>
33
+
34
+ <section class="resume-section">
35
+ <div class="section-title">
36
+ <div class="section-icon">
37
+ <i data-feather="${icon}"></i>
38
+ </div>
39
+ <h2>${title}</h2>
40
+ </div>
41
+ <div class="section-content">
42
+ <slot></slot>
43
+ </div>
44
+ </section>
45
+ `;
46
+ }
47
+ }
48
+
49
+ customElements.define('resume-section', ResumeSection);
index.html CHANGED
@@ -1,19 +1,150 @@
1
- <!doctype html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width" />
6
- <title>My static Space</title>
7
- <link rel="stylesheet" href="style.css" />
8
- </head>
9
- <body>
10
- <div class="card">
11
- <h1>Welcome to your static Space!</h1>
12
- <p>You can modify this app directly by editing <i>index.html</i> in the Files and versions tab.</p>
13
- <p>
14
- Also don't forget to check the
15
- <a href="https://huggingface.co/docs/hub/spaces" target="_blank">Spaces documentation</a>.
16
- </p>
17
- </div>
18
- </body>
19
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Resume - He Pan</title>
7
+ <link rel="stylesheet" href="style.css">
8
+ <script src="https://cdn.tailwindcss.com"></script>
9
+ <script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script>
10
+ <script src="https://unpkg.com/feather-icons"></script>
11
+ <script src="components/resume-header.js"></script>
12
+ <script src="components/resume-section.js"></script>
13
+ <script src="components/resume-footer.js"></script>
14
+ </head>
15
+ <body class="bg-gray-50 text-gray-800 font-sans">
16
+ <div class="max-w-4xl mx-auto p-6 md:p-8">
17
+ <resume-header></resume-header>
18
+
19
+ <main class="mt-8 space-y-8" id="resume-content">
20
+ <!-- Resume content will be dynamically loaded here -->
21
+ </main>
22
+
23
+ <resume-footer></resume-footer>
24
+ </div>
25
+
26
+ <script>
27
+ feather.replace();
28
+
29
+ // Load resume data from JSON file
30
+ fetch('resume.json')
31
+ .then(response => response.json())
32
+ .then(data => {
33
+ const resumeContent = document.getElementById('resume-content');
34
+ generateResumeContent(data, resumeContent);
35
+ feather.replace(); // Refresh icons after content is loaded
36
+ })
37
+ .catch(error => {
38
+ console.error('Error loading resume data:', error);
39
+ });
40
+ </script>
41
+ <div class="space-y-6">
42
+ <div class="bg-white p-6 rounded-lg shadow-sm border border-gray-100">
43
+ <div class="flex justify-between items-start">
44
+ <div>
45
+ <h3 class="text-lg font-semibold">电子科技大学</h3>
46
+ <p class="text-gray-600">计算机科学与技术 - 硕士</p>
47
+ </div>
48
+ <span class="text-gray-500">2020-09 - 至今</span>
49
+ </div>
50
+ <div class="mt-2">
51
+ <p class="text-gray-700"><span class="font-medium">GPA:</span> 4.4(示例)</p>
52
+ <p class="text-gray-700 mt-1"><span class="font-medium">Courses:</span> 自然语言处理, 深度学习, 机器学习, 计算机操作系统, 计算机网络</p>
53
+ </div>
54
+ </div>
55
+
56
+ <div class="bg-white p-6 rounded-lg shadow-sm border border-gray-100">
57
+ <div class="flex justify-between items-start">
58
+ <div>
59
+ <h3 class="text-lg font-semibold">吉林大学</h3>
60
+ <p class="text-gray-600">地球物理 - 学士</p>
61
+ </div>
62
+ <span class="text-gray-500">2016-09 - 2020-06</span>
63
+ </div>
64
+ <div class="mt-2">
65
+ <p class="text-gray-700"><span class="font-medium">GPA:</span> 4.4/5.0</p>
66
+ <p class="text-gray-700 mt-1"><span class="font-medium">Courses:</span> 计算机操作系统, 计算机网络, 自然语言处理基础, 机器学习导论, 深度学习框架实践</p>
67
+ </div>
68
+ </div>
69
+ </div>
70
+ </resume-section>
71
+
72
+ <resume-section title="Work Experience" icon="briefcase">
73
+ <div class="bg-white p-6 rounded-lg shadow-sm border border-gray-100">
74
+ <div class="flex justify-between items-start">
75
+ <div>
76
+ <h3 class="text-lg font-semibold">网易伏羲</h3>
77
+ <p class="text-gray-600">NLP研究员</p>
78
+ </div>
79
+ <span class="text-gray-500">2022-03 - 2022-06</span>
80
+ </div>
81
+ <ul class="mt-4 space-y-3 list-disc list-inside text-gray-700">
82
+ <li>构建基于预训练模型的无监督段落级文本摘要系统,针对游戏剧情生成场景设计创新性数据增强方案。通过动态段落删减策略结合连续性判断机制构建正负样本,实现无需人工标注的段落级缩写模型,有效解决小样本场景下的训练数据稀缺问题,成果可迁移应用���NLU领域的文本精简与信息压缩任务。</li>
83
+ <li>主导开发Lizards-GEAT:参数高效且泛化增强的Prompt Tuning框架。创新性提出无梯度反向传播的直接分类架构,显著提升训练效率;设计答案词干扰增强策略,通过错误词注入提升模型泛化能力。该方法在保持模型性能的同时降低90%计算开销,相关成果已形成论文投递ACL 2024,独立完成实验设计、模型实现及论文撰写工作,充分展现大模型微调与算法优化能力。</li>
84
+ </ul>
85
+ </div>
86
+ </resume-section>
87
+
88
+ <resume-section title="Research Publications" icon="file-text">
89
+ <div class="space-y-6">
90
+ <div class="bg-white p-6 rounded-lg shadow-sm border border-gray-100">
91
+ <h3 class="text-lg font-semibold">Sentence Rewriting for Fine-Tuned Model Based on Dictionary: Taking the Track 1 of NLPCC 2021 Argumentative Text Understanding for AI Debater as an Example</h3>
92
+ <p class="text-gray-600 mt-1">He P, Wang Y, Zhang Y | CCF International Conference on Natural Language Processing and Chinese Computing | 2021</p>
93
+ <p class="text-gray-700 mt-2">Proposed a novel sentence rewriting framework for fine-tuned models based on dictionary matching mechanisms. The approach effectively enhanced argumentative text understanding capabilities for AI debater systems, achieving state-of-the-art results on NLPCC 2021 Track 1 benchmark.</p>
94
+ </div>
95
+
96
+ <div class="bg-white p-6 rounded-lg shadow-sm border border-gray-100">
97
+ <h3 class="text-lg font-semibold">Zhegu@SMM4H-2022: The Pre-training Tweet & Claim Matching Makes Your Prediction Better</h3>
98
+ <p class="text-gray-600 mt-1">Pan He, Yuze Chen, Yanru Zhang | Proceedings of the Seventh Social Media Mining for Health Applications (SMM4H) Workshop & Shared Task | 2022</p>
99
+ <p class="text-gray-700 mt-2">Proposed a pre-training framework for tweet and claim matching in health domain, achieving state-of-the-art accuracy on social media text classification. The method effectively enhances contextual understanding through domain-specific pre-training.</p>
100
+ </div>
101
+ </div>
102
+ </resume-section>
103
+
104
+ <resume-section title="Skills" icon="code">
105
+ <div class="bg-white p-6 rounded-lg shadow-sm border border-gray-100">
106
+ <ul class="space-y-3 list-disc list-inside text-gray-700">
107
+ <li>精通Python编程及PyTorch深度学习框架,具备NLP算法开发经验。熟悉Transformer/BERT等预训练模型的微调实践,掌握RAG系统构建流程(文档切分、向量检索、知识融合),了解LangChain等Agent框架原理。具备模型工程化部署能力,熟悉意图识别、实体抽取等NLU核心任务的优化方法</li>
108
+ <li>精通自然语言处理核心技术,包括文本分类、意图识别、实体抽取及情感分析等NLU任务。具备大语言模型(如Llama、GLM)的预训练、微调及Prompt Tuning实践经验,能针对业务场景优化模型效果。熟悉向量数据库和语义检索技术,具备RAG系统全链路开发能力。</li>
109
+ <li>CET-6,具备专业级英文听说读写能力,能够高效阅读NLP领域顶会论文(如ACL/EMNLP)并撰写英文学术论文。擅长解析NLU算法论文(意图识别/实体抽取),可快速复现SOTA模型。熟悉Agent领域核心论文(ReAct/Tool-use),具备基于LangChain/LlamaIndex框架的工程实现能力</li>
110
+ </ul>
111
+ </div>
112
+ </resume-section>
113
+
114
+ <resume-section title="Patents" icon="award">
115
+ <div class="bg-white p-6 rounded-lg shadow-sm border border-gray-100">
116
+ <h3 class="text-lg font-semibold">基于预训练模型语义理解的多语言缩写消歧义算法</h3>
117
+ <p class="text-gray-600 mt-1">Owner: 何攀</p>
118
+ </div>
119
+ </resume-section>
120
+
121
+ <resume-section title="Awards" icon="star">
122
+ <div class="grid grid-cols-1 md:grid-cols-2 gap-4">
123
+ <div class="bg-white p-4 rounded-lg shadow-sm border border-gray-100">
124
+ <h4 class="font-medium">国家励志奖学金</h4>
125
+ <p class="text-gray-600 text-sm mt-1">2017-09</p>
126
+ </div>
127
+ <div class="bg-white p-4 rounded-lg shadow-sm border border-gray-100">
128
+ <h4 class="font-medium">校一等奖学金</h4>
129
+ <p class="text-gray-600 text-sm mt-1">2022-09</p>
130
+ </div>
131
+ <div class="bg-white p-4 rounded-lg shadow-sm border border-gray-100">
132
+ <h4 class="font-medium">校二等奖学金</h4>
133
+ <p class="text-gray-600 text-sm mt-1">2021-09</p>
134
+ </div>
135
+ <div class="bg-white p-4 rounded-lg shadow-sm border border-gray-100">
136
+ <h4 class="font-medium">校三等奖学金</h4>
137
+ <p class="text-gray-600 text-sm mt-1">2017-09, 2020-09</p>
138
+ </div>
139
+ </div>
140
+ </resume-section>
141
+
142
+ <resume-section title="Self Assessment" icon="user">
143
+ <div class="bg-white p-6 rounded-lg shadow-sm border border-gray-100">
144
+ <p class="text-gray-700">具备扎实的自然语言处理理论基础,擅长意图识别、实体抽取等NLU核心技术研发。熟悉Transformer架构及大语言模型微调技术,有基于LangChain框架的智能体开发经验。擅长将前沿研究成果(如ReAct框架)转化为实际业务方案,在多轮对话管理和RAG系统优化方面有成功落地案例。具备优秀的跨团队协作能力,能够通过技术分享促进团队知识沉淀,曾主导构建NLP模型评测体系并推动数据闭环建设。</p>
145
+ </div>
146
+ </resume-section>
147
+ </main>
148
+ <script src="https://huggingface.co/deepsite/deepsite-badge.js"></script>
149
+ </body>
150
+ </html>
resume.json ADDED
@@ -0,0 +1,86 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ```json
2
+ {
3
+ "name": "何攀",
4
+ "title": "NLP Researcher",
5
+ "contact": {
6
+ "email": "newtonysls@gmail.com",
7
+ "phone": "156-8312-1839",
8
+ "address": "四川省成都市电子科技大学清水河校区"
9
+ },
10
+ "education": [
11
+ {
12
+ "institution": "电子科技大学",
13
+ "degree": "硕士",
14
+ "major": "计算机科学与技术",
15
+ "startDate": "2020-09",
16
+ "endDate": "至今",
17
+ "gpa": "4.4(示例)",
18
+ "courses": ["自然语言处理", "深度学习", "机器学习", "计算机操作系统", "计算机网络"]
19
+ },
20
+ {
21
+ "institution": "吉林大学",
22
+ "degree": "学士",
23
+ "major": "地球物理",
24
+ "startDate": "2016-09",
25
+ "endDate": "2020-06",
26
+ "gpa": "4.4/5.0",
27
+ "courses": ["计算机操作系统", "计算机网络", "自然语言处理基础", "机器学习导论", "深度学习框架实践"]
28
+ }
29
+ ],
30
+ "workExperience": [
31
+ {
32
+ "company": "网易伏羲",
33
+ "position": "NLP研究员",
34
+ "startDate": "2022-03",
35
+ "endDate": "2022-06",
36
+ "responsibilities": [
37
+ "构建基于预训练模型的无监督段落级文本摘要系统,针对游戏剧情生成场景设计创新性数据增强方案。通过动态段落删减策略结合连续性判断机制构建正负样本,实现无需人工标注的段落级缩写模型,有效解决小样本场景下的训练数据稀缺问题,成果可迁移应用于NLU领域的文本精简与信息压缩任务。",
38
+ "主导开发Lizards-GEAT:参数高效且泛化增强的Prompt Tuning框架。创新性提出无梯度反向传播的直接分类架构,显著提升训练效率;设计答案词干扰增强策略,通过错误词注入提升模型泛化能力。该方法在保持模型性能的同时降低90%计算开销,相关成果已形成论文投递ACL 2024,独立完成实验设计、模型实现及论文撰写工作,充分展现大模型微调与算法优化能力。"
39
+ ]
40
+ }
41
+ ],
42
+ "publications": [
43
+ {
44
+ "title": "Sentence Rewriting for Fine-Tuned Model Based on Dictionary: Taking the Track 1 of NLPCC 2021 Argumentative Text Understanding for AI Debater as an Example",
45
+ "authors": "He P, Wang Y, Zhang Y",
46
+ "conference": "CCF International Conference on Natural Language Processing and Chinese Computing",
47
+ "year": "2021",
48
+ "description": "Proposed a novel sentence rewriting framework for fine-tuned models based on dictionary matching mechanisms. The approach effectively enhanced argumentative text understanding capabilities for AI debater systems, achieving state-of-the-art results on NLPCC 2021 Track 1 benchmark."
49
+ },
50
+ {
51
+ "title": "Zhegu@SMM4H-2022: The Pre-training Tweet & Claim Matching Makes Your Prediction Better",
52
+ "authors": "Pan He, Yuze Chen, Yanru Zhang",
53
+ "conference": "Proceedings of the Seventh Social Media Mining for Health Applications (SMM4H) Workshop & Shared Task",
54
+ "year": "2022",
55
+ "description": "Proposed a pre-training framework for tweet and claim matching in health domain, achieving state-of-the-art accuracy on social media text classification. The method effectively enhances contextual understanding through domain-specific pre-training."
56
+ }
57
+ ],
58
+ "skills": [
59
+ "精通Python编程及PyTorch深度学习框架,具备NLP算法开发经验。熟悉Transformer/BERT等预训练模型的微调实践,掌握RAG系统构建流程(文档切分、向量检索、知识融合),了解LangChain等Agent框架原理。具备模型工程化部署能力,熟悉意图识别、实体抽取等NLU核心任务的优化方法",
60
+ "精通自然语言处理核心技术,包括文本分类、意图识别、实体抽取及情感分析等NLU任务。具备大语言模型(如Llama、GLM)的预训练、微调及Prompt Tuning实践经验,能针对业务场景优化模型效果。熟悉向量数据库和语义检索技术,具备RAG系统全链路开发能力。",
61
+ "CET-6,具备专业级英文听说读写能力,能够高效阅读NLP领域顶会论文(如ACL/EMNLP)并撰写英文学术论文。擅长解析NLU算法论文(意图识别/实体抽取),可快速复现SOTA模型。熟悉Agent领域核心论文(ReAct/Tool-use),具备基于LangChain/LlamaIndex框架的工程实现能力"
62
+ ],
63
+ "awards": [
64
+ {
65
+ "name": "国家励志奖学金",
66
+ "date": "2017-09"
67
+ },
68
+ {
69
+ "name": "校一等奖学金",
70
+ "date": "2022-09"
71
+ },
72
+ {
73
+ "name": "校二等奖学金",
74
+ "date": "2021-09"
75
+ },
76
+ {
77
+ "name": "校三等奖学金",
78
+ "date": "2017-09, 2020-09"
79
+ }
80
+ ],
81
+ "selfAssessment": "具备扎实的自然语言处理理论基础,擅长意图识别、实体抽取等NLU核心技术研发。熟悉Transformer架构及大语言模型微调技术,有基于LangChain框架的智能体开发经验。擅长将前沿研究成果(如ReAct框架)转化为实际业务方案,在多轮对话管理和RAG系统优化方面有成功落地案例。具备优秀的跨团队协作能力,能够通过技术分享促进团队知识沉淀,曾主导构建NLP模型评测体系并推动数据闭环建设。"
82
+ }
83
+ ```
84
+ ___METADATA_START___
85
+ {"isNew":true,"userName":"hepansls"}
86
+ ___METADATA_END___
script.js ADDED
@@ -0,0 +1,131 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ function generateResumeContent(data, container) {
2
+ // Generate Education section
3
+ if (data.education && data.education.length > 0) {
4
+ const educationSection = document.createElement('resume-section');
5
+ educationSection.setAttribute('title', 'Education');
6
+ educationSection.setAttribute('icon', 'book');
7
+
8
+ let educationHTML = '<div class="space-y-6">';
9
+ data.education.forEach(edu => {
10
+ educationHTML += `
11
+ <div class="bg-white p-6 rounded-lg shadow-sm border border-gray-100">
12
+ <div class="flex justify-between items-start">
13
+ <div>
14
+ <h3 class="text-lg font-semibold">${edu.institution}</h3>
15
+ <p class="text-gray-600">${edu.degree} - ${edu.major}</p>
16
+ </div>
17
+ <span class="text-gray-500">${edu.startDate} - ${edu.endDate}</span>
18
+ </div>
19
+ <div class="mt-2">
20
+ <p class="text-gray-700"><span class="font-medium">GPA:</span> ${edu.gpa}</p>
21
+ <p class="text-gray-700 mt-1"><span class="font-medium">Courses:</span> ${edu.courses.join(', ')}</p>
22
+ </div>
23
+ </div>
24
+ `;
25
+ });
26
+ educationHTML += '</div>';
27
+ educationSection.innerHTML = educationHTML;
28
+ container.appendChild(educationSection);
29
+ }
30
+
31
+ // Generate Work Experience section
32
+ if (data.workExperience && data.workExperience.length > 0) {
33
+ const workSection = document.createElement('resume-section');
34
+ workSection.setAttribute('title', 'Work Experience');
35
+ workSection.setAttribute('icon', 'briefcase');
36
+
37
+ let workHTML = '<div class="space-y-6">';
38
+ data.workExperience.forEach(work => {
39
+ workHTML += `
40
+ <div class="bg-white p-6 rounded-lg shadow-sm border border-gray-100">
41
+ <div class="flex justify-between items-start">
42
+ <div>
43
+ <h3 class="text-lg font-semibold">${work.company}</h3>
44
+ <p class="text-gray-600">${work.position}</p>
45
+ </div>
46
+ <span class="text-gray-500">${work.startDate} - ${work.endDate}</span>
47
+ </div>
48
+ <ul class="mt-4 space-y-3 list-disc list-inside text-gray-700">
49
+ ${work.responsibilities.map(resp => `<li>${resp}</li>`).join('')}
50
+ </ul>
51
+ </div>
52
+ `;
53
+ });
54
+ workHTML += '</div>';
55
+ workSection.innerHTML = workHTML;
56
+ container.appendChild(workSection);
57
+ }
58
+
59
+ // Generate Publications section
60
+ if (data.publications && data.publications.length > 0) {
61
+ const pubSection = document.createElement('resume-section');
62
+ pubSection.setAttribute('title', 'Research Publications');
63
+ pubSection.setAttribute('icon', 'file-text');
64
+
65
+ let pubHTML = '<div class="space-y-6">';
66
+ data.publications.forEach(pub => {
67
+ pubHTML += `
68
+ <div class="bg-white p-6 rounded-lg shadow-sm border border-gray-100">
69
+ <h3 class="text-lg font-semibold">${pub.title}</h3>
70
+ <p class="text-gray-600 mt-1">${pub.authors} | ${pub.conference} | ${pub.year}</p>
71
+ <p class="text-gray-700 mt-2">${pub.description}</p>
72
+ </div>
73
+ `;
74
+ });
75
+ pubHTML += '</div>';
76
+ pubSection.innerHTML = pubHTML;
77
+ container.appendChild(pubSection);
78
+ }
79
+
80
+ // Generate Skills section
81
+ if (data.skills && data.skills.length > 0) {
82
+ const skillsSection = document.createElement('resume-section');
83
+ skillsSection.setAttribute('title', 'Skills');
84
+ skillsSection.setAttribute('icon', 'code');
85
+
86
+ const skillsHTML = `
87
+ <div class="bg-white p-6 rounded-lg shadow-sm border border-gray-100">
88
+ <ul class="space-y-3 list-disc list-inside text-gray-700">
89
+ ${data.skills.map(skill => `<li>${skill}</li>`).join('')}
90
+ </ul>
91
+ </div>
92
+ `;
93
+ skillsSection.innerHTML = skillsHTML;
94
+ container.appendChild(skillsSection);
95
+ }
96
+
97
+ // Generate Awards section
98
+ if (data.awards && data.awards.length > 0) {
99
+ const awardsSection = document.createElement('resume-section');
100
+ awardsSection.setAttribute('title', 'Awards');
101
+ awardsSection.setAttribute('icon', 'award');
102
+
103
+ let awardsHTML = '<div class="grid grid-cols-1 md:grid-cols-2 gap-4">';
104
+ data.awards.forEach(award => {
105
+ awardsHTML += `
106
+ <div class="bg-white p-4 rounded-lg shadow-sm border border-gray-100">
107
+ <h4 class="font-medium">${award.name}</h4>
108
+ <p class="text-gray-600 text-sm mt-1">${award.date}</p>
109
+ </div>
110
+ `;
111
+ });
112
+ awardsHTML += '</div>';
113
+ awardsSection.innerHTML = awardsHTML;
114
+ container.appendChild(awardsSection);
115
+ }
116
+
117
+ // Generate Self Assessment section
118
+ if (data.selfAssessment) {
119
+ const selfSection = document.createElement('resume-section');
120
+ selfSection.setAttribute('title', 'Self Assessment');
121
+ selfSection.setAttribute('icon', 'user');
122
+
123
+ const selfHTML = `
124
+ <div class="bg-white p-6 rounded-lg shadow-sm border border-gray-100">
125
+ <p class="text-gray-700">${data.selfAssessment}</p>
126
+ </div>
127
+ `;
128
+ selfSection.innerHTML = selfHTML;
129
+ container.appendChild(selfSection);
130
+ }
131
+ }
style.css CHANGED
@@ -1,28 +1,37 @@
 
 
1
  body {
2
- padding: 2rem;
3
- font-family: -apple-system, BlinkMacSystemFont, "Arial", sans-serif;
4
  }
5
 
6
- h1 {
7
- font-size: 16px;
8
- margin-top: 0;
9
  }
10
 
11
- p {
12
- color: rgb(107, 114, 128);
13
- font-size: 15px;
14
- margin-bottom: 10px;
15
- margin-top: 5px;
16
  }
17
 
18
- .card {
19
- max-width: 620px;
20
- margin: 0 auto;
21
- padding: 16px;
22
- border: 1px solid lightgray;
23
- border-radius: 16px;
24
  }
25
 
26
- .card p:last-child {
27
- margin-bottom: 0;
28
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap');
2
+
3
  body {
4
+ font-family: 'Inter', sans-serif;
5
+ line-height: 1.6;
6
  }
7
 
8
+ .resume-section {
9
+ transition: all 0.3s ease;
 
10
  }
11
 
12
+ .resume-section:hover {
13
+ transform: translateY(-2px);
 
 
 
14
  }
15
 
16
+ .print-button {
17
+ transition: all 0.2s ease;
 
 
 
 
18
  }
19
 
20
+ .print-button:hover {
21
+ transform: scale(1.05);
22
  }
23
+
24
+ @media print {
25
+ body {
26
+ background-color: white;
27
+ color: black;
28
+ }
29
+
30
+ .no-print {
31
+ display: none !important;
32
+ }
33
+
34
+ .resume-section {
35
+ break-inside: avoid;
36
+ }
37
+ }