devfolio-page 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.
Files changed (115) hide show
  1. package/README.md +219 -0
  2. package/dist/cli/commands/init.js +282 -0
  3. package/dist/cli/commands/render.js +105 -0
  4. package/dist/cli/commands/themes.js +40 -0
  5. package/dist/cli/commands/validate.js +86 -0
  6. package/dist/cli/helpers/validate.js +99 -0
  7. package/dist/cli/index.js +51 -0
  8. package/dist/cli/postinstall.js +20 -0
  9. package/dist/cli/schemas/portfolio.schema.js +299 -0
  10. package/dist/generator/builder.js +551 -0
  11. package/dist/generator/markdown.js +57 -0
  12. package/dist/generator/themes/dark-academia/partials/education.html +15 -0
  13. package/dist/generator/themes/dark-academia/partials/experience.html +23 -0
  14. package/dist/generator/themes/dark-academia/partials/hero.html +15 -0
  15. package/dist/generator/themes/dark-academia/partials/projects.html +17 -0
  16. package/dist/generator/themes/dark-academia/partials/skills.html +11 -0
  17. package/dist/generator/themes/dark-academia/partials/writing.html +15 -0
  18. package/dist/generator/themes/dark-academia/script.js +91 -0
  19. package/dist/generator/themes/dark-academia/styles.css +913 -0
  20. package/dist/generator/themes/dark-academia/template.html +46 -0
  21. package/dist/generator/themes/dark-academia/templates/experiments-index.html +80 -0
  22. package/dist/generator/themes/dark-academia/templates/homepage.html +125 -0
  23. package/dist/generator/themes/dark-academia/templates/project.html +101 -0
  24. package/dist/generator/themes/dark-academia/templates/projects-index.html +80 -0
  25. package/dist/generator/themes/dark-academia/templates/writing-index.html +75 -0
  26. package/dist/generator/themes/modern/partials/education.html +14 -0
  27. package/dist/generator/themes/modern/partials/experience.html +21 -0
  28. package/dist/generator/themes/modern/partials/hero.html +15 -0
  29. package/dist/generator/themes/modern/partials/projects.html +17 -0
  30. package/dist/generator/themes/modern/partials/skills.html +11 -0
  31. package/dist/generator/themes/modern/partials/writing.html +14 -0
  32. package/dist/generator/themes/modern/script.js +136 -0
  33. package/dist/generator/themes/modern/styles.css +835 -0
  34. package/dist/generator/themes/modern/template.html +59 -0
  35. package/dist/generator/themes/modern/templates/experiments-index.html +78 -0
  36. package/dist/generator/themes/modern/templates/homepage.html +125 -0
  37. package/dist/generator/themes/modern/templates/project.html +98 -0
  38. package/dist/generator/themes/modern/templates/projects-index.html +79 -0
  39. package/dist/generator/themes/modern/templates/writing-index.html +73 -0
  40. package/dist/generator/themes/srcl/partials/education.html +27 -0
  41. package/dist/generator/themes/srcl/partials/experience.html +25 -0
  42. package/dist/generator/themes/srcl/partials/hero.html +22 -0
  43. package/dist/generator/themes/srcl/partials/projects.html +24 -0
  44. package/dist/generator/themes/srcl/partials/sections/code.html +8 -0
  45. package/dist/generator/themes/srcl/partials/sections/demo.html +8 -0
  46. package/dist/generator/themes/srcl/partials/sections/gallery.html +12 -0
  47. package/dist/generator/themes/srcl/partials/sections/image.html +6 -0
  48. package/dist/generator/themes/srcl/partials/sections/interactive.html +8 -0
  49. package/dist/generator/themes/srcl/partials/sections/metrics.html +10 -0
  50. package/dist/generator/themes/srcl/partials/sections/outcomes.html +5 -0
  51. package/dist/generator/themes/srcl/partials/sections/overview.html +5 -0
  52. package/dist/generator/themes/srcl/partials/sections/process.html +5 -0
  53. package/dist/generator/themes/srcl/partials/skills.html +21 -0
  54. package/dist/generator/themes/srcl/partials/writing.html +14 -0
  55. package/dist/generator/themes/srcl/script.js +354 -0
  56. package/dist/generator/themes/srcl/styles.css +1260 -0
  57. package/dist/generator/themes/srcl/template.html +46 -0
  58. package/dist/generator/themes/srcl/templates/experiments-index.html +66 -0
  59. package/dist/generator/themes/srcl/templates/homepage.html +136 -0
  60. package/dist/generator/themes/srcl/templates/project.html +96 -0
  61. package/dist/generator/themes/srcl/templates/projects-index.html +70 -0
  62. package/dist/generator/themes/srcl/templates/writing-index.html +61 -0
  63. package/dist/types/portfolio.js +4 -0
  64. package/package.json +58 -0
  65. package/src/generator/themes/dark-academia/partials/education.html +15 -0
  66. package/src/generator/themes/dark-academia/partials/experience.html +23 -0
  67. package/src/generator/themes/dark-academia/partials/hero.html +15 -0
  68. package/src/generator/themes/dark-academia/partials/projects.html +17 -0
  69. package/src/generator/themes/dark-academia/partials/skills.html +11 -0
  70. package/src/generator/themes/dark-academia/partials/writing.html +15 -0
  71. package/src/generator/themes/dark-academia/script.js +91 -0
  72. package/src/generator/themes/dark-academia/styles.css +913 -0
  73. package/src/generator/themes/dark-academia/template.html +46 -0
  74. package/src/generator/themes/dark-academia/templates/experiments-index.html +80 -0
  75. package/src/generator/themes/dark-academia/templates/homepage.html +125 -0
  76. package/src/generator/themes/dark-academia/templates/project.html +101 -0
  77. package/src/generator/themes/dark-academia/templates/projects-index.html +80 -0
  78. package/src/generator/themes/dark-academia/templates/writing-index.html +75 -0
  79. package/src/generator/themes/modern/partials/education.html +14 -0
  80. package/src/generator/themes/modern/partials/experience.html +21 -0
  81. package/src/generator/themes/modern/partials/hero.html +15 -0
  82. package/src/generator/themes/modern/partials/projects.html +17 -0
  83. package/src/generator/themes/modern/partials/skills.html +11 -0
  84. package/src/generator/themes/modern/partials/writing.html +14 -0
  85. package/src/generator/themes/modern/script.js +136 -0
  86. package/src/generator/themes/modern/styles.css +835 -0
  87. package/src/generator/themes/modern/template.html +59 -0
  88. package/src/generator/themes/modern/templates/experiments-index.html +78 -0
  89. package/src/generator/themes/modern/templates/homepage.html +125 -0
  90. package/src/generator/themes/modern/templates/project.html +98 -0
  91. package/src/generator/themes/modern/templates/projects-index.html +79 -0
  92. package/src/generator/themes/modern/templates/writing-index.html +73 -0
  93. package/src/generator/themes/srcl/partials/education.html +27 -0
  94. package/src/generator/themes/srcl/partials/experience.html +25 -0
  95. package/src/generator/themes/srcl/partials/hero.html +22 -0
  96. package/src/generator/themes/srcl/partials/projects.html +24 -0
  97. package/src/generator/themes/srcl/partials/sections/code.html +8 -0
  98. package/src/generator/themes/srcl/partials/sections/demo.html +8 -0
  99. package/src/generator/themes/srcl/partials/sections/gallery.html +12 -0
  100. package/src/generator/themes/srcl/partials/sections/image.html +6 -0
  101. package/src/generator/themes/srcl/partials/sections/interactive.html +8 -0
  102. package/src/generator/themes/srcl/partials/sections/metrics.html +10 -0
  103. package/src/generator/themes/srcl/partials/sections/outcomes.html +5 -0
  104. package/src/generator/themes/srcl/partials/sections/overview.html +5 -0
  105. package/src/generator/themes/srcl/partials/sections/process.html +5 -0
  106. package/src/generator/themes/srcl/partials/skills.html +21 -0
  107. package/src/generator/themes/srcl/partials/writing.html +14 -0
  108. package/src/generator/themes/srcl/script.js +354 -0
  109. package/src/generator/themes/srcl/styles.css +1260 -0
  110. package/src/generator/themes/srcl/template.html +46 -0
  111. package/src/generator/themes/srcl/templates/experiments-index.html +66 -0
  112. package/src/generator/themes/srcl/templates/homepage.html +136 -0
  113. package/src/generator/themes/srcl/templates/project.html +96 -0
  114. package/src/generator/themes/srcl/templates/projects-index.html +70 -0
  115. package/src/generator/themes/srcl/templates/writing-index.html +61 -0
@@ -0,0 +1,59 @@
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>{{name}} - Portfolio</title>
7
+ <meta name="description" content="{{title}} based in {{location}}">
8
+ <link rel="stylesheet" href="./assets/styles.css">
9
+ </head>
10
+ <body class="modern-theme" data-theme="{{colorScheme}}">
11
+
12
+ <!-- Header -->
13
+ <header class="site-header">
14
+ <div class="header-content">
15
+ <a href="#" class="logo">{{name}}</a>
16
+ <nav class="nav">
17
+ {{#hasExperience}}<a href="#experience">Experience</a>{{/hasExperience}}
18
+ {{#hasProjects}}<a href="#projects">Projects</a>{{/hasProjects}}
19
+ {{#hasSkills}}<a href="#skills">Skills</a>{{/hasSkills}}
20
+ {{#hasWriting}}<a href="#writing">Writing</a>{{/hasWriting}}
21
+ {{#hasEducation}}<a href="#education">Education</a>{{/hasEducation}}
22
+ </nav>
23
+ {{#enableHotkeys}}
24
+ <button class="theme-toggle" data-hotkey="ctrl+t" title="Toggle theme" aria-label="Toggle theme">
25
+ <svg class="icon-sun" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
26
+ <circle cx="12" cy="12" r="5"></circle>
27
+ <line x1="12" y1="1" x2="12" y2="3"></line>
28
+ <line x1="12" y1="21" x2="12" y2="23"></line>
29
+ <line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
30
+ <line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
31
+ <line x1="1" y1="12" x2="3" y2="12"></line>
32
+ <line x1="21" y1="12" x2="23" y2="12"></line>
33
+ <line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
34
+ <line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
35
+ </svg>
36
+ <svg class="icon-moon" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
37
+ <path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>
38
+ </svg>
39
+ </button>
40
+ {{/enableHotkeys}}
41
+ </div>
42
+ </header>
43
+
44
+ <main class="main-content">
45
+ {{{hero}}}
46
+ {{{experience}}}
47
+ {{{projects}}}
48
+ {{{skills}}}
49
+ {{{writing}}}
50
+ {{{education}}}
51
+ </main>
52
+
53
+ <footer class="site-footer">
54
+ <p>Built with <a href="https://devfolio.page" target="_blank">devfolio.page</a></p>
55
+ </footer>
56
+
57
+ {{#enableHotkeys}}<script src="./assets/script.js"></script>{{/enableHotkeys}}
58
+ </body>
59
+ </html>
@@ -0,0 +1,78 @@
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>Experiments - {{site_name}}</title>
7
+ <meta name="description" content="Experiments by {{site_name}}">
8
+ <link rel="stylesheet" href="../assets/styles.css">
9
+ <script>
10
+ (function() {
11
+ try {
12
+ var saved = localStorage.getItem('modern-theme');
13
+ if (saved) document.documentElement.dataset.theme = saved;
14
+ } catch(e) {}
15
+ })();
16
+ </script>
17
+ </head>
18
+ <body class="modern-theme" data-theme="{{colorScheme}}">
19
+
20
+ <header class="site-header">
21
+ <div class="header-content">
22
+ <a href="../" class="logo">{{site_name}}</a>
23
+ <nav class="nav">
24
+ <a href="../">Home</a>
25
+ {{#nav_links}}
26
+ <a href="{{href}}"{{#active}} class="active"{{/active}}>{{label}}</a>
27
+ {{/nav_links}}
28
+ </nav>
29
+ <button class="theme-toggle" title="Toggle theme" aria-label="Toggle theme">
30
+ <svg class="icon-sun" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
31
+ <circle cx="12" cy="12" r="5"></circle>
32
+ <line x1="12" y1="1" x2="12" y2="3"></line>
33
+ <line x1="12" y1="21" x2="12" y2="23"></line>
34
+ <line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
35
+ <line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
36
+ <line x1="1" y1="12" x2="3" y2="12"></line>
37
+ <line x1="21" y1="12" x2="23" y2="12"></line>
38
+ <line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
39
+ <line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
40
+ </svg>
41
+ <svg class="icon-moon" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
42
+ <path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>
43
+ </svg>
44
+ </button>
45
+ </div>
46
+ </header>
47
+
48
+ <main class="main-content">
49
+ <header class="page-header">
50
+ <h1>Experiments</h1>
51
+ <p>Side projects, explorations, and things I'm tinkering with.</p>
52
+ </header>
53
+
54
+ <div class="experiments-grid">
55
+ {{#experiments}}
56
+ <div class="experiment-card">
57
+ <h3>{{title}}</h3>
58
+ <p>{{description}}</p>
59
+ <div class="experiment-links">
60
+ {{#github}}<a href="{{github}}" target="_blank">GitHub</a>{{/github}}
61
+ {{#demo}}<a href="{{demo}}" target="_blank">Demo</a>{{/demo}}
62
+ {{#url}}<a href="{{url}}" target="_blank">View</a>{{/url}}
63
+ </div>
64
+ <div class="project-tags">
65
+ {{#tags}}<span class="project-tag">{{.}}</span>{{/tags}}
66
+ </div>
67
+ </div>
68
+ {{/experiments}}
69
+ </div>
70
+ </main>
71
+
72
+ <footer class="site-footer">
73
+ <p>Built with <a href="https://devfolio.page" target="_blank">devfolio.page</a></p>
74
+ </footer>
75
+
76
+ <script src="../assets/script.js"></script>
77
+ </body>
78
+ </html>
@@ -0,0 +1,125 @@
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>{{name}} - Portfolio</title>
7
+ <meta name="description" content="{{title}} based in {{location}}">
8
+ <link rel="stylesheet" href="./assets/styles.css">
9
+ <script>
10
+ (function() {
11
+ try {
12
+ var saved = localStorage.getItem('modern-theme');
13
+ if (saved) document.documentElement.dataset.theme = saved;
14
+ } catch(e) {}
15
+ })();
16
+ </script>
17
+ </head>
18
+ <body class="modern-theme" data-theme="{{colorScheme}}">
19
+
20
+ <header class="site-header">
21
+ <div class="header-content">
22
+ <a href="./" class="logo">{{name}}</a>
23
+ <nav class="nav">
24
+ {{#hasProjects}}<a href="./projects/">Projects</a>{{/hasProjects}}
25
+ {{#hasExperiments}}<a href="./experiments/">Experiments</a>{{/hasExperiments}}
26
+ {{#hasWriting}}<a href="./writing/">Writing</a>{{/hasWriting}}
27
+ </nav>
28
+ <button class="theme-toggle" title="Toggle theme" aria-label="Toggle theme">
29
+ <svg class="icon-sun" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
30
+ <circle cx="12" cy="12" r="5"></circle>
31
+ <line x1="12" y1="1" x2="12" y2="3"></line>
32
+ <line x1="12" y1="21" x2="12" y2="23"></line>
33
+ <line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
34
+ <line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
35
+ <line x1="1" y1="12" x2="3" y2="12"></line>
36
+ <line x1="21" y1="12" x2="23" y2="12"></line>
37
+ <line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
38
+ <line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
39
+ </svg>
40
+ <svg class="icon-moon" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
41
+ <path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>
42
+ </svg>
43
+ </button>
44
+ </div>
45
+ </header>
46
+
47
+ <main class="main-content">
48
+ <section class="hero">
49
+ <h1 class="hero-name">{{name}}</h1>
50
+ <p class="hero-title">{{title}}</p>
51
+ <p class="hero-location">{{location}}</p>
52
+
53
+ <div class="hero-links">
54
+ {{#email}}<a href="mailto:{{email}}" class="hero-link">Email</a>{{/email}}
55
+ {{#github}}<a href="https://github.com/{{github}}" target="_blank" class="hero-link">GitHub</a>{{/github}}
56
+ {{#linkedin}}<a href="https://linkedin.com/in/{{linkedin}}" target="_blank" class="hero-link">LinkedIn</a>{{/linkedin}}
57
+ {{#twitter}}<a href="https://twitter.com/{{twitter}}" target="_blank" class="hero-link">Twitter</a>{{/twitter}}
58
+ {{#website}}<a href="{{website}}" target="_blank" class="hero-link">Website</a>{{/website}}
59
+ </div>
60
+
61
+ <div class="hero-bio">{{{bio_html}}}</div>
62
+ </section>
63
+
64
+ {{#hasProjects}}
65
+ <section class="section" id="projects">
66
+ <h2 class="section-title">Featured Projects</h2>
67
+ <div class="projects-grid">
68
+ {{#featured_projects}}
69
+ <a href="./projects/{{id}}.html" class="project-card featured">
70
+ <div class="project-header">
71
+ <h3 class="project-name">{{title}}</h3>
72
+ </div>
73
+ {{#subtitle}}<p class="project-description">{{subtitle}}</p>{{/subtitle}}
74
+ <div class="project-tags">
75
+ {{#meta.tech}}<span class="project-tag">{{.}}</span>{{/meta.tech}}
76
+ </div>
77
+ </a>
78
+ {{/featured_projects}}
79
+ </div>
80
+ <a href="./projects/" class="view-all-link">View all projects &rarr;</a>
81
+ </section>
82
+ {{/hasProjects}}
83
+
84
+ {{#show_experiments}}
85
+ <section class="section" id="experiments">
86
+ <h2 class="section-title">Experiments</h2>
87
+ <div class="experiments-grid">
88
+ {{#experiments}}
89
+ <div class="experiment-card">
90
+ <h3>{{title}}</h3>
91
+ <p>{{description}}</p>
92
+ <div class="experiment-links">
93
+ {{#github}}<a href="{{github}}" target="_blank">GitHub</a>{{/github}}
94
+ {{#demo}}<a href="{{demo}}" target="_blank">Demo</a>{{/demo}}
95
+ </div>
96
+ </div>
97
+ {{/experiments}}
98
+ </div>
99
+ <a href="./experiments/" class="view-all-link">View all experiments &rarr;</a>
100
+ </section>
101
+ {{/show_experiments}}
102
+
103
+ {{#hasWriting}}
104
+ <section class="section" id="writing">
105
+ <h2 class="section-title">Writing</h2>
106
+ <div class="writing-list">
107
+ {{#featured_writing}}
108
+ <a href="{{url}}" target="_blank" class="writing-item">
109
+ <span class="writing-title">{{title}}</span>
110
+ <span class="writing-date">{{date}}</span>
111
+ </a>
112
+ {{/featured_writing}}
113
+ </div>
114
+ <a href="./writing/" class="view-all-link">View all writing &rarr;</a>
115
+ </section>
116
+ {{/hasWriting}}
117
+ </main>
118
+
119
+ <footer class="site-footer">
120
+ <p>Built with <a href="https://devfolio.page" target="_blank">devfolio.page</a></p>
121
+ </footer>
122
+
123
+ <script src="./assets/script.js"></script>
124
+ </body>
125
+ </html>
@@ -0,0 +1,98 @@
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>{{title}} - {{site_name}}</title>
7
+ <meta name="description" content="{{subtitle}}">
8
+ <link rel="stylesheet" href="../assets/styles.css">
9
+ <script>
10
+ (function() {
11
+ try {
12
+ var saved = localStorage.getItem('modern-theme');
13
+ if (saved) document.documentElement.dataset.theme = saved;
14
+ } catch(e) {}
15
+ })();
16
+ </script>
17
+ </head>
18
+ <body class="modern-theme" data-theme="{{colorScheme}}">
19
+
20
+ <header class="site-header">
21
+ <div class="header-content">
22
+ <a href="../" class="logo">{{site_name}}</a>
23
+ <nav class="nav">
24
+ <a href="../">Home</a>
25
+ {{#nav_links}}
26
+ <a href="{{href}}"{{#active}} class="active"{{/active}}>{{label}}</a>
27
+ {{/nav_links}}
28
+ </nav>
29
+ <button class="theme-toggle" title="Toggle theme" aria-label="Toggle theme">
30
+ <svg class="icon-sun" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
31
+ <circle cx="12" cy="12" r="5"></circle>
32
+ <line x1="12" y1="1" x2="12" y2="3"></line>
33
+ <line x1="12" y1="21" x2="12" y2="23"></line>
34
+ <line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
35
+ <line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
36
+ <line x1="1" y1="12" x2="3" y2="12"></line>
37
+ <line x1="21" y1="12" x2="23" y2="12"></line>
38
+ <line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
39
+ <line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
40
+ </svg>
41
+ <svg class="icon-moon" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
42
+ <path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>
43
+ </svg>
44
+ </button>
45
+ </div>
46
+ </header>
47
+
48
+ <main class="main-content project-page">
49
+ <header class="project-page-header">
50
+ <h1>{{title}}</h1>
51
+ {{#subtitle}}<p class="subtitle">{{subtitle}}</p>{{/subtitle}}
52
+
53
+ <div class="project-meta">
54
+ <div class="meta-item">
55
+ <span class="meta-label">Year</span>
56
+ <span class="meta-value">{{meta.year}}</span>
57
+ </div>
58
+ <div class="meta-item">
59
+ <span class="meta-label">Role</span>
60
+ <span class="meta-value">{{meta.role}}</span>
61
+ </div>
62
+ {{#meta.timeline}}
63
+ <div class="meta-item">
64
+ <span class="meta-label">Timeline</span>
65
+ <span class="meta-value">{{meta.timeline}}</span>
66
+ </div>
67
+ {{/meta.timeline}}
68
+ </div>
69
+
70
+ <div class="project-tags">
71
+ {{#meta.tech}}<span class="project-tag">{{.}}</span>{{/meta.tech}}
72
+ </div>
73
+
74
+ {{#meta.links}}
75
+ <div class="project-links">
76
+ {{#github}}<a href="{{github}}" target="_blank" class="project-link-btn">GitHub</a>{{/github}}
77
+ {{#demo}}<a href="{{demo}}" target="_blank" class="project-link-btn">Demo</a>{{/demo}}
78
+ {{#live}}<a href="{{live}}" target="_blank" class="project-link-btn">Live Site</a>{{/live}}
79
+ </div>
80
+ {{/meta.links}}
81
+ </header>
82
+
83
+ <div class="project-content prose">
84
+ {{{sections_html}}}
85
+ </div>
86
+
87
+ <nav class="project-nav">
88
+ <a href="./" class="back-link">&larr; All Projects</a>
89
+ </nav>
90
+ </main>
91
+
92
+ <footer class="site-footer">
93
+ <p>Built with <a href="https://devfolio.page" target="_blank">devfolio.page</a></p>
94
+ </footer>
95
+
96
+ <script src="../assets/script.js"></script>
97
+ </body>
98
+ </html>
@@ -0,0 +1,79 @@
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>Projects - {{site_name}}</title>
7
+ <meta name="description" content="Projects by {{site_name}}">
8
+ <link rel="stylesheet" href="../assets/styles.css">
9
+ <script>
10
+ (function() {
11
+ try {
12
+ var saved = localStorage.getItem('modern-theme');
13
+ if (saved) document.documentElement.dataset.theme = saved;
14
+ } catch(e) {}
15
+ })();
16
+ </script>
17
+ </head>
18
+ <body class="modern-theme" data-theme="{{colorScheme}}">
19
+
20
+ <header class="site-header">
21
+ <div class="header-content">
22
+ <a href="../" class="logo">{{site_name}}</a>
23
+ <nav class="nav">
24
+ <a href="../">Home</a>
25
+ {{#nav_links}}
26
+ <a href="{{href}}"{{#active}} class="active"{{/active}}>{{label}}</a>
27
+ {{/nav_links}}
28
+ </nav>
29
+ <button class="theme-toggle" title="Toggle theme" aria-label="Toggle theme">
30
+ <svg class="icon-sun" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
31
+ <circle cx="12" cy="12" r="5"></circle>
32
+ <line x1="12" y1="1" x2="12" y2="3"></line>
33
+ <line x1="12" y1="21" x2="12" y2="23"></line>
34
+ <line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
35
+ <line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
36
+ <line x1="1" y1="12" x2="3" y2="12"></line>
37
+ <line x1="21" y1="12" x2="23" y2="12"></line>
38
+ <line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
39
+ <line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
40
+ </svg>
41
+ <svg class="icon-moon" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
42
+ <path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>
43
+ </svg>
44
+ </button>
45
+ </div>
46
+ </header>
47
+
48
+ <main class="main-content">
49
+ <header class="page-header">
50
+ <h1>Projects</h1>
51
+ <p>A collection of work spanning product development, open source, and research.</p>
52
+ </header>
53
+
54
+ <div class="projects-grid">
55
+ {{#projects}}
56
+ <a href="./{{id}}.html" class="project-card {{#featured}}featured{{/featured}}">
57
+ <div class="project-header">
58
+ <h3 class="project-name">{{title}}</h3>
59
+ </div>
60
+ {{#subtitle}}<p class="project-description">{{subtitle}}</p>{{/subtitle}}
61
+ <div class="project-meta-inline">
62
+ <span>{{meta.year}}</span>
63
+ <span>{{meta.role}}</span>
64
+ </div>
65
+ <div class="project-tags">
66
+ {{#meta.tech}}<span class="project-tag">{{.}}</span>{{/meta.tech}}
67
+ </div>
68
+ </a>
69
+ {{/projects}}
70
+ </div>
71
+ </main>
72
+
73
+ <footer class="site-footer">
74
+ <p>Built with <a href="https://devfolio.page" target="_blank">devfolio.page</a></p>
75
+ </footer>
76
+
77
+ <script src="../assets/script.js"></script>
78
+ </body>
79
+ </html>
@@ -0,0 +1,73 @@
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>Writing - {{site_name}}</title>
7
+ <meta name="description" content="Writing by {{site_name}}">
8
+ <link rel="stylesheet" href="../assets/styles.css">
9
+ <script>
10
+ (function() {
11
+ try {
12
+ var saved = localStorage.getItem('modern-theme');
13
+ if (saved) document.documentElement.dataset.theme = saved;
14
+ } catch(e) {}
15
+ })();
16
+ </script>
17
+ </head>
18
+ <body class="modern-theme" data-theme="{{colorScheme}}">
19
+
20
+ <header class="site-header">
21
+ <div class="header-content">
22
+ <a href="../" class="logo">{{site_name}}</a>
23
+ <nav class="nav">
24
+ <a href="../">Home</a>
25
+ {{#nav_links}}
26
+ <a href="{{href}}"{{#active}} class="active"{{/active}}>{{label}}</a>
27
+ {{/nav_links}}
28
+ </nav>
29
+ <button class="theme-toggle" title="Toggle theme" aria-label="Toggle theme">
30
+ <svg class="icon-sun" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
31
+ <circle cx="12" cy="12" r="5"></circle>
32
+ <line x1="12" y1="1" x2="12" y2="3"></line>
33
+ <line x1="12" y1="21" x2="12" y2="23"></line>
34
+ <line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
35
+ <line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
36
+ <line x1="1" y1="12" x2="3" y2="12"></line>
37
+ <line x1="21" y1="12" x2="23" y2="12"></line>
38
+ <line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
39
+ <line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
40
+ </svg>
41
+ <svg class="icon-moon" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
42
+ <path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>
43
+ </svg>
44
+ </button>
45
+ </div>
46
+ </header>
47
+
48
+ <main class="main-content">
49
+ <header class="page-header">
50
+ <h1>Writing</h1>
51
+ <p>Articles, blog posts, and technical writing.</p>
52
+ </header>
53
+
54
+ <div class="writing-list">
55
+ {{#writing}}
56
+ <a href="{{url}}" target="_blank" class="writing-item">
57
+ <div class="writing-info">
58
+ <span class="writing-title">{{title}}</span>
59
+ {{#publication}}<span class="writing-publication">{{publication}}</span>{{/publication}}
60
+ </div>
61
+ <span class="writing-date">{{date}}</span>
62
+ </a>
63
+ {{/writing}}
64
+ </div>
65
+ </main>
66
+
67
+ <footer class="site-footer">
68
+ <p>Built with <a href="https://devfolio.page" target="_blank">devfolio.page</a></p>
69
+ </footer>
70
+
71
+ <script src="../assets/script.js"></script>
72
+ </body>
73
+ </html>
@@ -0,0 +1,27 @@
1
+ <section id="education" class="section">
2
+ <h2 class="section-title">EDUCATION</h2>
3
+ <div class="srcl-accordion">
4
+ {{#educations}}
5
+ <div class="accordion-item" data-expanded="false">
6
+ <button class="accordion-header" aria-expanded="false">
7
+ <span class="institution">{{institution}}</span>
8
+ <span class="meta">
9
+ <span class="degree">{{degree}}</span>
10
+ <span class="date">{{date.start}} - {{date.end}}</span>
11
+ </span>
12
+ <span class="accordion-icon">+</span>
13
+ </button>
14
+ <div class="accordion-content">
15
+ {{#location}}<p class="location">{{location}}</p>{{/location}}
16
+ {{#highlights}}
17
+ <ul class="srcl-list">
18
+ {{#highlights}}
19
+ <li>{{.}}</li>
20
+ {{/highlights}}
21
+ </ul>
22
+ {{/highlights}}
23
+ </div>
24
+ </div>
25
+ {{/educations}}
26
+ </div>
27
+ </section>
@@ -0,0 +1,25 @@
1
+ <section id="experience" class="section">
2
+ <h2 class="section-title">EXPERIENCE</h2>
3
+ <div class="srcl-accordion">
4
+ {{#experiences}}
5
+ <div class="accordion-item" data-expanded="{{#first}}true{{/first}}{{^first}}false{{/first}}">
6
+ <button class="accordion-header" aria-expanded="{{#first}}true{{/first}}{{^first}}false{{/first}}">
7
+ <span class="company">{{company}}</span>
8
+ <span class="meta">
9
+ <span class="role">{{role}}</span>
10
+ <span class="date">{{date.start}} - {{date.end}}</span>
11
+ </span>
12
+ <span class="accordion-icon">+</span>
13
+ </button>
14
+ <div class="accordion-content">
15
+ {{#location}}<p class="location">{{location}}</p>{{/location}}
16
+ <ul class="srcl-list">
17
+ {{#highlights}}
18
+ <li>{{.}}</li>
19
+ {{/highlights}}
20
+ </ul>
21
+ </div>
22
+ </div>
23
+ {{/experiences}}
24
+ </div>
25
+ </section>
@@ -0,0 +1,22 @@
1
+ <section id="hero" class="srcl-card hero-card">
2
+ <div class="card-corner top-left"></div>
3
+ <div class="card-corner top-right"></div>
4
+ <div class="card-corner bottom-left"></div>
5
+ <div class="card-corner bottom-right"></div>
6
+
7
+ <div class="card-content">
8
+ <h1 class="name">{{name}}</h1>
9
+ <p class="title">{{title}}</p>
10
+ <p class="location">{{location}}{{#timezone}} · {{timezone}}{{/timezone}}</p>
11
+
12
+ <div class="contact-links">
13
+ {{#email}}<a href="mailto:{{email}}" class="contact-link">EMAIL</a>{{/email}}
14
+ {{#website}}<a href="{{website}}" target="_blank" class="contact-link">WEBSITE</a>{{/website}}
15
+ {{#github}}<a href="https://github.com/{{github}}" target="_blank" class="contact-link">GITHUB</a>{{/github}}
16
+ {{#linkedin}}<a href="https://linkedin.com/in/{{linkedin}}" target="_blank" class="contact-link">LINKEDIN</a>{{/linkedin}}
17
+ {{#twitter}}<a href="https://twitter.com/{{twitter}}" target="_blank" class="contact-link">TWITTER</a>{{/twitter}}
18
+ </div>
19
+
20
+ <div class="bio">{{bio}}</div>
21
+ </div>
22
+ </section>
@@ -0,0 +1,24 @@
1
+ <section id="projects" class="section">
2
+ <h2 class="section-title">PROJECTS</h2>
3
+ <div class="project-grid">
4
+ {{#projects}}
5
+ <div class="srcl-card project-card{{#featured}} featured{{/featured}}">
6
+ <div class="card-corner top-left"></div>
7
+ <div class="card-corner top-right"></div>
8
+ <div class="card-corner bottom-left"></div>
9
+ <div class="card-corner bottom-right"></div>
10
+
11
+ <div class="card-content">
12
+ <div class="project-header">
13
+ <h3 class="project-name">{{name}}</h3>
14
+ {{#url}}<a href="{{url}}" target="_blank" class="project-link">[VIEW]</a>{{/url}}
15
+ </div>
16
+ <p class="project-description">{{description}}</p>
17
+ <div class="tags">
18
+ {{#tags}}<span class="tag">{{.}}</span>{{/tags}}
19
+ </div>
20
+ </div>
21
+ </div>
22
+ {{/projects}}
23
+ </div>
24
+ </section>
@@ -0,0 +1,8 @@
1
+ <section class="content-section section-code">
2
+ {{#title}}
3
+ <h3 class="section-subtitle">{{title}}</h3>
4
+ {{/title}}
5
+ <div class="code-block">
6
+ {{{code_html}}}
7
+ </div>
8
+ </section>
@@ -0,0 +1,8 @@
1
+ <section class="content-section section-demo">
2
+ {{#title}}
3
+ <h3 class="section-subtitle">{{title}}</h3>
4
+ {{/title}}
5
+ <div class="demo-embed">
6
+ {{{embed}}}
7
+ </div>
8
+ </section>
@@ -0,0 +1,12 @@
1
+ <section class="content-section section-gallery">
2
+ <div class="gallery-grid">
3
+ {{#images}}
4
+ <figure class="gallery-item">
5
+ <img src="{{src}}" alt="{{alt}}" loading="lazy">
6
+ {{#caption}}
7
+ <figcaption>{{caption}}</figcaption>
8
+ {{/caption}}
9
+ </figure>
10
+ {{/images}}
11
+ </div>
12
+ </section>