jsonresume-theme-reference 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,197 @@
1
+ {
2
+ "basics": {
3
+ "name": "Alex Chen",
4
+ "label": "Senior Software Engineer",
5
+ "image": "",
6
+ "email": "alex.chen@example.com",
7
+ "phone": "+1 (555) 123-4567",
8
+ "url": "https://alexchen.dev",
9
+ "summary": "Full-stack engineer with 8+ years building scalable web applications. Passionate about developer experience, clean architecture, and mentoring junior developers.",
10
+ "location": {
11
+ "city": "San Francisco",
12
+ "region": "CA",
13
+ "countryCode": "US"
14
+ },
15
+ "profiles": [
16
+ {
17
+ "network": "GitHub",
18
+ "username": "alexchen",
19
+ "url": "https://github.com/alexchen"
20
+ },
21
+ {
22
+ "network": "LinkedIn",
23
+ "username": "alexchen",
24
+ "url": "https://linkedin.com/in/alexchen"
25
+ }
26
+ ]
27
+ },
28
+ "work": [
29
+ {
30
+ "name": "TechCorp Inc",
31
+ "position": "Senior Software Engineer",
32
+ "location": "San Francisco, CA",
33
+ "startDate": "2021-03-01",
34
+ "endDate": null,
35
+ "summary": "Tech lead for core product platform serving 2M+ users",
36
+ "highlights": [
37
+ "Led migration from monolith to microservices, reducing deployment time by 75%",
38
+ "Architected real-time messaging system handling 100k messages/second",
39
+ "Mentored team of 6 engineers, 3 promoted to senior roles",
40
+ "Reduced cloud costs by $200k/year through optimization initiatives"
41
+ ]
42
+ },
43
+ {
44
+ "name": "StartupXYZ",
45
+ "position": "Software Engineer",
46
+ "location": "Remote",
47
+ "startDate": "2018-06-01",
48
+ "endDate": "2021-02-28",
49
+ "summary": "Full-stack engineer building fintech products from 0 to 1",
50
+ "highlights": [
51
+ "Built payment processing system handling $50M+ in transactions",
52
+ "Implemented automated testing pipeline, increasing coverage from 20% to 85%",
53
+ "Developed customer-facing dashboard using React and GraphQL",
54
+ "Collaborated with design team to improve user experience metrics by 40%"
55
+ ]
56
+ },
57
+ {
58
+ "name": "Digital Agency Co",
59
+ "position": "Junior Developer",
60
+ "location": "New York, NY",
61
+ "startDate": "2016-08-01",
62
+ "endDate": "2018-05-31",
63
+ "summary": "Web developer for client projects across various industries",
64
+ "highlights": [
65
+ "Delivered 15+ client websites using WordPress, React, and Vue.js",
66
+ "Implemented responsive designs with 98% cross-browser compatibility",
67
+ "Reduced page load times by 60% through optimization techniques"
68
+ ]
69
+ }
70
+ ],
71
+ "education": [
72
+ {
73
+ "institution": "University of California, Berkeley",
74
+ "area": "Computer Science",
75
+ "studyType": "Bachelor of Science",
76
+ "startDate": "2012-09-01",
77
+ "endDate": "2016-05-31",
78
+ "score": "3.8",
79
+ "courses": [
80
+ "CS 61A: Structure and Interpretation of Computer Programs",
81
+ "CS 170: Efficient Algorithms and Intractable Problems",
82
+ "CS 186: Database Systems"
83
+ ]
84
+ }
85
+ ],
86
+ "skills": [
87
+ {
88
+ "name": "Languages",
89
+ "keywords": ["JavaScript", "TypeScript", "Python", "Go", "SQL"]
90
+ },
91
+ {
92
+ "name": "Frontend",
93
+ "keywords": ["React", "Next.js", "Vue.js", "Tailwind CSS", "GraphQL"]
94
+ },
95
+ {
96
+ "name": "Backend",
97
+ "keywords": ["Node.js", "Express", "PostgreSQL", "Redis", "Docker"]
98
+ },
99
+ {
100
+ "name": "Cloud & DevOps",
101
+ "keywords": ["AWS", "Vercel", "GitHub Actions", "Kubernetes", "Terraform"]
102
+ }
103
+ ],
104
+ "projects": [
105
+ {
106
+ "name": "OpenSource CMS",
107
+ "description": "Headless CMS with visual editor used by 5k+ developers",
108
+ "highlights": [
109
+ "Built plugin architecture supporting 50+ community extensions",
110
+ "Achieved 4.5k GitHub stars and 200+ contributors",
111
+ "Featured in Tech Crunch and Product Hunt #1 product of the day"
112
+ ],
113
+ "keywords": ["React", "Node.js", "PostgreSQL", "TypeScript"],
114
+ "startDate": "2020-01-01",
115
+ "endDate": null,
116
+ "url": "https://github.com/alexchen/opensource-cms"
117
+ },
118
+ {
119
+ "name": "DevTools Extension",
120
+ "description": "Browser extension for debugging GraphQL applications",
121
+ "highlights": [
122
+ "Used by 50k+ developers with 4.7 star rating",
123
+ "Integrated with Apollo, Relay, and URQL clients"
124
+ ],
125
+ "keywords": ["JavaScript", "GraphQL", "Chrome Extension"],
126
+ "startDate": "2019-06-01",
127
+ "endDate": "2021-12-31",
128
+ "url": "https://devtools.example.com"
129
+ }
130
+ ],
131
+ "volunteer": [
132
+ {
133
+ "organization": "Code for America",
134
+ "position": "Volunteer Developer",
135
+ "startDate": "2019-01-01",
136
+ "endDate": null,
137
+ "summary": "Building civic tech tools to improve government services",
138
+ "highlights": [
139
+ "Developed public benefits enrollment system used by 10k+ citizens",
140
+ "Mentored 5 new volunteers in full-stack development"
141
+ ]
142
+ }
143
+ ],
144
+ "awards": [
145
+ {
146
+ "title": "Hackathon Winner - Best Developer Tool",
147
+ "date": "2020-11-15",
148
+ "awarder": "TechConf 2020",
149
+ "summary": "Built AI-powered code review assistant in 24 hours"
150
+ },
151
+ {
152
+ "title": "Employee of the Year",
153
+ "date": "2019-12-01",
154
+ "awarder": "StartupXYZ",
155
+ "summary": "Recognized for exceptional technical contributions and team leadership"
156
+ }
157
+ ],
158
+ "publications": [
159
+ {
160
+ "name": "Building Scalable GraphQL APIs",
161
+ "publisher": "Medium Engineering",
162
+ "releaseDate": "2021-06-15",
163
+ "url": "https://medium.com/engineering/building-scalable-graphql",
164
+ "summary": "Deep dive into GraphQL architecture patterns for high-traffic applications"
165
+ }
166
+ ],
167
+ "languages": [
168
+ {
169
+ "language": "English",
170
+ "fluency": "Native"
171
+ },
172
+ {
173
+ "language": "Mandarin",
174
+ "fluency": "Professional working proficiency"
175
+ },
176
+ {
177
+ "language": "Spanish",
178
+ "fluency": "Elementary proficiency"
179
+ }
180
+ ],
181
+ "interests": [
182
+ {
183
+ "name": "Technology",
184
+ "keywords": ["Open Source", "Web3", "AI/ML", "DevTools"]
185
+ },
186
+ {
187
+ "name": "Other",
188
+ "keywords": ["Rock Climbing", "Photography", "Coffee Roasting", "Travel"]
189
+ }
190
+ ],
191
+ "references": [
192
+ {
193
+ "name": "Sarah Johnson, Engineering Manager at TechCorp",
194
+ "reference": "Alex is one of the most talented engineers I've worked with. Their technical expertise and mentorship have been invaluable to our team's growth."
195
+ }
196
+ ]
197
+ }
@@ -0,0 +1,192 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { render } from '../src/index.js';
3
+ import completeResume from './fixtures/complete-resume.json';
4
+
5
+ describe('Reference Theme', () => {
6
+ it('renders complete resume HTML', () => {
7
+ const html = render(completeResume);
8
+
9
+ // Should be valid HTML document
10
+ expect(html).toContain('<!DOCTYPE html>');
11
+ expect(html).toContain('<html lang="en">');
12
+ expect(html).toContain('</html>');
13
+ });
14
+
15
+ it('renders hero section with basics', () => {
16
+ const html = render(completeResume);
17
+
18
+ // Name and label
19
+ expect(html).toContain('Alex Chen');
20
+ expect(html).toContain('Senior Software Engineer');
21
+
22
+ // Contact info
23
+ expect(html).toContain('alex.chen@example.com');
24
+ expect(html).toContain('+1 (555) 123-4567');
25
+ expect(html).toContain('https://alexchen.dev');
26
+
27
+ // Location
28
+ expect(html).toContain('San Francisco');
29
+
30
+ // Summary
31
+ expect(html).toContain('Full-stack engineer with 8+ years');
32
+
33
+ // Social profiles
34
+ expect(html).toContain('GitHub');
35
+ expect(html).toContain('LinkedIn');
36
+ });
37
+
38
+ it('renders work experience section', () => {
39
+ const html = render(completeResume);
40
+
41
+ expect(html).toContain('Work Experience');
42
+ expect(html).toContain('TechCorp Inc');
43
+ expect(html).toContain('Senior Software Engineer');
44
+ expect(html).toContain('Present'); // Current role
45
+ expect(html).toContain('Led migration from monolith to microservices');
46
+ });
47
+
48
+ it('renders education section', () => {
49
+ const html = render(completeResume);
50
+
51
+ expect(html).toContain('Education');
52
+ expect(html).toContain('University of California, Berkeley');
53
+ expect(html).toContain('Bachelor of Science');
54
+ expect(html).toContain('Computer Science');
55
+ expect(html).toContain('GPA: 3.8');
56
+ });
57
+
58
+ it('renders skills section with badges', () => {
59
+ const html = render(completeResume);
60
+
61
+ expect(html).toContain('Skills');
62
+ expect(html).toContain('resume-badge'); // Badge component used
63
+ expect(html).toContain('JavaScript');
64
+ expect(html).toContain('TypeScript');
65
+ expect(html).toContain('React');
66
+ expect(html).toContain('PostgreSQL');
67
+ });
68
+
69
+ it('renders projects section', () => {
70
+ const html = render(completeResume);
71
+
72
+ expect(html).toContain('Projects');
73
+ expect(html).toContain('OpenSource CMS');
74
+ expect(html).toContain('DevTools Extension');
75
+ expect(html).toContain('4.5k GitHub stars');
76
+ });
77
+
78
+ it('renders volunteer section', () => {
79
+ const html = render(completeResume);
80
+
81
+ expect(html).toContain('Volunteer Experience');
82
+ expect(html).toContain('Code for America');
83
+ expect(html).toContain('Volunteer Developer');
84
+ });
85
+
86
+ it('renders awards section', () => {
87
+ const html = render(completeResume);
88
+
89
+ expect(html).toContain('Awards & Honors');
90
+ expect(html).toContain('Hackathon Winner');
91
+ expect(html).toContain('Employee of the Year');
92
+ });
93
+
94
+ it('renders publications section', () => {
95
+ const html = render(completeResume);
96
+
97
+ expect(html).toContain('Publications');
98
+ expect(html).toContain('Building Scalable GraphQL APIs');
99
+ expect(html).toContain('Medium Engineering');
100
+ });
101
+
102
+ it('renders languages section', () => {
103
+ const html = render(completeResume);
104
+
105
+ expect(html).toContain('Languages');
106
+ expect(html).toContain('English');
107
+ expect(html).toContain('Mandarin');
108
+ expect(html).toContain('Native');
109
+ });
110
+
111
+ it('renders interests section', () => {
112
+ const html = render(completeResume);
113
+
114
+ expect(html).toContain('Interests');
115
+ expect(html).toContain('Open Source');
116
+ expect(html).toContain('Rock Climbing');
117
+ });
118
+
119
+ it('renders references section', () => {
120
+ const html = render(completeResume);
121
+
122
+ expect(html).toContain('References');
123
+ expect(html).toContain('Sarah Johnson');
124
+ expect(html).toContain('most talented engineers');
125
+ });
126
+
127
+ it('handles empty sections gracefully', () => {
128
+ const minimalResume = {
129
+ basics: {
130
+ name: 'John Doe',
131
+ email: 'john@example.com',
132
+ },
133
+ };
134
+
135
+ const html = render(minimalResume);
136
+
137
+ expect(html).toContain('John Doe');
138
+ expect(html).toContain('john@example.com');
139
+ expect(html).toContain('</html>');
140
+ });
141
+
142
+ it('includes @resume/core stylesheet', () => {
143
+ const html = render(completeResume);
144
+
145
+ expect(html).toContain('@resume/core');
146
+ expect(html).toContain('tokens.css');
147
+ });
148
+
149
+ it('uses all @resume/core primitives', () => {
150
+ const html = render(completeResume);
151
+
152
+ // Section wrapper used
153
+ expect(html).toContain('resume-section');
154
+
155
+ // SectionTitle used
156
+ expect(html).toContain('resume-section-title');
157
+
158
+ // ListItem used
159
+ expect(html).toContain('resume-item');
160
+
161
+ // DateRange used (Present indicates DateRange component)
162
+ expect(html).toContain('Present');
163
+
164
+ // Badge/BadgeList used
165
+ expect(html).toContain('resume-badge');
166
+ });
167
+
168
+ it('generates ATS-friendly HTML structure', () => {
169
+ const html = render(completeResume);
170
+
171
+ // Semantic HTML tags
172
+ expect(html).toContain('<header');
173
+ expect(html).toContain('<section');
174
+ expect(html).toContain('<h1');
175
+ expect(html).toContain('<h2');
176
+
177
+ // No tables or complex layouts
178
+ expect(html).not.toContain('<table');
179
+
180
+ // Standard fonts (defined in inline styles)
181
+ expect(html).toContain('font-family: var(--resume-font-sans)');
182
+ });
183
+
184
+ it('is print-ready', () => {
185
+ const html = render(completeResume);
186
+
187
+ // Should be single-page optimized
188
+ expect(html).toContain('max-width: var(--resume-max-width)');
189
+
190
+ // Standard A4/Letter dimensions assumed via CSS variables
191
+ });
192
+ });