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,46 @@
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="academia-theme" data-theme="{{colorScheme}}">
11
+
12
+ <!-- Navigation -->
13
+ <nav class="site-nav">
14
+ <div class="nav-content">
15
+ <div class="nav-links">
16
+ {{#hasExperience}}<a href="#experience">Experience</a>{{/hasExperience}}
17
+ {{#hasProjects}}<a href="#projects">Projects</a>{{/hasProjects}}
18
+ {{#hasSkills}}<a href="#skills">Skills</a>{{/hasSkills}}
19
+ {{#hasWriting}}<a href="#writing">Writing</a>{{/hasWriting}}
20
+ {{#hasEducation}}<a href="#education">Education</a>{{/hasEducation}}
21
+ </div>
22
+ {{#enableHotkeys}}
23
+ <button class="theme-btn" data-hotkey="ctrl+t" title="Toggle theme">
24
+ <span class="theme-icon"></span>
25
+ </button>
26
+ {{/enableHotkeys}}
27
+ </div>
28
+ </nav>
29
+
30
+ <main class="page-content">
31
+ {{{hero}}}
32
+ {{{experience}}}
33
+ {{{projects}}}
34
+ {{{skills}}}
35
+ {{{writing}}}
36
+ {{{education}}}
37
+ </main>
38
+
39
+ <footer class="site-footer">
40
+ <div class="footer-ornament"></div>
41
+ <p>Crafted with <a href="https://devfolio.page" target="_blank">devfolio.page</a></p>
42
+ </footer>
43
+
44
+ {{#enableHotkeys}}<script src="./assets/script.js"></script>{{/enableHotkeys}}
45
+ </body>
46
+ </html>
@@ -0,0 +1,80 @@
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('academia-theme');
13
+ if (saved) document.documentElement.dataset.theme = saved;
14
+ } catch(e) {}
15
+ })();
16
+ </script>
17
+ </head>
18
+ <body class="academia-theme" data-theme="{{colorScheme}}">
19
+
20
+ <nav class="site-nav">
21
+ <div class="nav-content">
22
+ <a href="../" class="nav-logo">{{site_name}}</a>
23
+ <div class="nav-links">
24
+ <a href="../">Home</a>
25
+ {{#nav_links}}
26
+ <a href="{{href}}"{{#active}} class="active"{{/active}}>{{label}}</a>
27
+ {{/nav_links}}
28
+ </div>
29
+ <button class="theme-btn" title="Toggle theme" aria-label="Toggle theme">
30
+ <svg class="icon-sun" width="18" height="18" 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="18" height="18" 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
+ </nav>
47
+
48
+ <main class="page-content">
49
+ <header class="page-header">
50
+ <div class="header-ornament"></div>
51
+ <h1>Experiments</h1>
52
+ <p>Explorations, studies, and curious investigations.</p>
53
+ </header>
54
+
55
+ <div class="experiments-list">
56
+ {{#experiments}}
57
+ <div class="experiment-item">
58
+ <h3>{{title}}</h3>
59
+ <p>{{description}}</p>
60
+ <div class="experiment-links">
61
+ {{#github}}<a href="{{github}}" target="_blank">Repository</a>{{/github}}
62
+ {{#demo}}<a href="{{demo}}" target="_blank">Demonstration</a>{{/demo}}
63
+ {{#url}}<a href="{{url}}" target="_blank">View</a>{{/url}}
64
+ </div>
65
+ <div class="project-tags">
66
+ {{#tags}}<span class="tag">{{.}}</span>{{/tags}}
67
+ </div>
68
+ </div>
69
+ {{/experiments}}
70
+ </div>
71
+ </main>
72
+
73
+ <footer class="site-footer">
74
+ <div class="footer-ornament"></div>
75
+ <p>Crafted with <a href="https://devfolio.page" target="_blank">devfolio.page</a></p>
76
+ </footer>
77
+
78
+ <script src="../assets/script.js"></script>
79
+ </body>
80
+ </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('academia-theme');
13
+ if (saved) document.documentElement.dataset.theme = saved;
14
+ } catch(e) {}
15
+ })();
16
+ </script>
17
+ </head>
18
+ <body class="academia-theme" data-theme="{{colorScheme}}">
19
+
20
+ <nav class="site-nav">
21
+ <div class="nav-content">
22
+ <a href="./" class="nav-logo">{{name}}</a>
23
+ <div class="nav-links">
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
+ </div>
28
+ <button class="theme-btn" title="Toggle theme" aria-label="Toggle theme">
29
+ <svg class="icon-sun" width="18" height="18" 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="18" height="18" 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
+ </nav>
46
+
47
+ <main class="page-content">
48
+ <section class="hero">
49
+ <div class="hero-ornament"></div>
50
+ <h1 class="hero-name">{{name}}</h1>
51
+ <p class="hero-title">{{title}}</p>
52
+ <p class="hero-location">{{location}}</p>
53
+
54
+ <div class="hero-links">
55
+ {{#email}}<a href="mailto:{{email}}" class="hero-link">Correspondence</a>{{/email}}
56
+ {{#github}}<a href="https://github.com/{{github}}" target="_blank" class="hero-link">Archives</a>{{/github}}
57
+ {{#linkedin}}<a href="https://linkedin.com/in/{{linkedin}}" target="_blank" class="hero-link">Connections</a>{{/linkedin}}
58
+ {{#twitter}}<a href="https://twitter.com/{{twitter}}" target="_blank" class="hero-link">Musings</a>{{/twitter}}
59
+ </div>
60
+
61
+ <div class="hero-bio">{{{bio_html}}}</div>
62
+ <div class="hero-ornament"></div>
63
+ </section>
64
+
65
+ {{#hasProjects}}
66
+ <section class="section" id="projects">
67
+ <h2 class="section-title"><span>Selected Works</span></h2>
68
+ <div class="projects-list">
69
+ {{#featured_projects}}
70
+ <a href="./projects/{{id}}.html" class="project-item {{#featured}}featured{{/featured}}">
71
+ <h3 class="project-name">{{title}}</h3>
72
+ {{#subtitle}}<p class="project-description">{{subtitle}}</p>{{/subtitle}}
73
+ <div class="project-tags">
74
+ {{#meta.tech}}<span class="tag">{{.}}</span>{{/meta.tech}}
75
+ </div>
76
+ </a>
77
+ {{/featured_projects}}
78
+ </div>
79
+ <a href="./projects/" class="view-all">View Complete Collection &rarr;</a>
80
+ </section>
81
+ {{/hasProjects}}
82
+
83
+ {{#show_experiments}}
84
+ <section class="section" id="experiments">
85
+ <h2 class="section-title"><span>Experiments</span></h2>
86
+ <div class="experiments-list">
87
+ {{#experiments}}
88
+ <div class="experiment-item">
89
+ <h3>{{title}}</h3>
90
+ <p>{{description}}</p>
91
+ <div class="experiment-links">
92
+ {{#github}}<a href="{{github}}" target="_blank">Repository</a>{{/github}}
93
+ {{#demo}}<a href="{{demo}}" target="_blank">Demonstration</a>{{/demo}}
94
+ </div>
95
+ </div>
96
+ {{/experiments}}
97
+ </div>
98
+ <a href="./experiments/" class="view-all">View All Experiments &rarr;</a>
99
+ </section>
100
+ {{/show_experiments}}
101
+
102
+ {{#hasWriting}}
103
+ <section class="section" id="writing">
104
+ <h2 class="section-title"><span>Publications</span></h2>
105
+ <div class="writing-list">
106
+ {{#featured_writing}}
107
+ <a href="{{url}}" target="_blank" class="writing-item">
108
+ <span class="writing-title">{{title}}</span>
109
+ <span class="writing-date">{{date}}</span>
110
+ </a>
111
+ {{/featured_writing}}
112
+ </div>
113
+ <a href="./writing/" class="view-all">View All Publications &rarr;</a>
114
+ </section>
115
+ {{/hasWriting}}
116
+ </main>
117
+
118
+ <footer class="site-footer">
119
+ <div class="footer-ornament"></div>
120
+ <p>Crafted 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,101 @@
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('academia-theme');
13
+ if (saved) document.documentElement.dataset.theme = saved;
14
+ } catch(e) {}
15
+ })();
16
+ </script>
17
+ </head>
18
+ <body class="academia-theme" data-theme="{{colorScheme}}">
19
+
20
+ <nav class="site-nav">
21
+ <div class="nav-content">
22
+ <a href="../" class="nav-logo">{{site_name}}</a>
23
+ <div class="nav-links">
24
+ <a href="../">Home</a>
25
+ {{#nav_links}}
26
+ <a href="{{href}}"{{#active}} class="active"{{/active}}>{{label}}</a>
27
+ {{/nav_links}}
28
+ </div>
29
+ <button class="theme-btn" title="Toggle theme" aria-label="Toggle theme">
30
+ <svg class="icon-sun" width="18" height="18" 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="18" height="18" 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
+ </nav>
47
+
48
+ <main class="page-content project-page">
49
+ <header class="project-header">
50
+ <div class="header-ornament"></div>
51
+ <h1>{{title}}</h1>
52
+ {{#subtitle}}<p class="subtitle">{{subtitle}}</p>{{/subtitle}}
53
+
54
+ <div class="project-meta">
55
+ <div class="meta-item">
56
+ <span class="meta-label">Year</span>
57
+ <span class="meta-value">{{meta.year}}</span>
58
+ </div>
59
+ <div class="meta-item">
60
+ <span class="meta-label">Role</span>
61
+ <span class="meta-value">{{meta.role}}</span>
62
+ </div>
63
+ {{#meta.timeline}}
64
+ <div class="meta-item">
65
+ <span class="meta-label">Duration</span>
66
+ <span class="meta-value">{{meta.timeline}}</span>
67
+ </div>
68
+ {{/meta.timeline}}
69
+ </div>
70
+
71
+ <div class="project-tags">
72
+ {{#meta.tech}}<span class="tag">{{.}}</span>{{/meta.tech}}
73
+ </div>
74
+
75
+ {{#meta.links}}
76
+ <div class="project-links">
77
+ {{#github}}<a href="{{github}}" target="_blank" class="project-link">Repository</a>{{/github}}
78
+ {{#demo}}<a href="{{demo}}" target="_blank" class="project-link">Demonstration</a>{{/demo}}
79
+ {{#live}}<a href="{{live}}" target="_blank" class="project-link">Live Work</a>{{/live}}
80
+ </div>
81
+ {{/meta.links}}
82
+ </header>
83
+
84
+ <div class="project-content prose">
85
+ {{{sections_html}}}
86
+ </div>
87
+
88
+ <nav class="project-nav">
89
+ <div class="nav-ornament"></div>
90
+ <a href="./" class="back-link">&larr; Return to Collection</a>
91
+ </nav>
92
+ </main>
93
+
94
+ <footer class="site-footer">
95
+ <div class="footer-ornament"></div>
96
+ <p>Crafted with <a href="https://devfolio.page" target="_blank">devfolio.page</a></p>
97
+ </footer>
98
+
99
+ <script src="../assets/script.js"></script>
100
+ </body>
101
+ </html>
@@ -0,0 +1,80 @@
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('academia-theme');
13
+ if (saved) document.documentElement.dataset.theme = saved;
14
+ } catch(e) {}
15
+ })();
16
+ </script>
17
+ </head>
18
+ <body class="academia-theme" data-theme="{{colorScheme}}">
19
+
20
+ <nav class="site-nav">
21
+ <div class="nav-content">
22
+ <a href="../" class="nav-logo">{{site_name}}</a>
23
+ <div class="nav-links">
24
+ <a href="../">Home</a>
25
+ {{#nav_links}}
26
+ <a href="{{href}}"{{#active}} class="active"{{/active}}>{{label}}</a>
27
+ {{/nav_links}}
28
+ </div>
29
+ <button class="theme-btn" title="Toggle theme" aria-label="Toggle theme">
30
+ <svg class="icon-sun" width="18" height="18" 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="18" height="18" 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
+ </nav>
47
+
48
+ <main class="page-content">
49
+ <header class="page-header">
50
+ <div class="header-ornament"></div>
51
+ <h1>Complete Works</h1>
52
+ <p>A collection of projects spanning research, development, and creative endeavors.</p>
53
+ </header>
54
+
55
+ <div class="projects-list">
56
+ {{#projects}}
57
+ <a href="./{{id}}.html" class="project-item {{#featured}}featured{{/featured}}">
58
+ <h3 class="project-name">{{title}}</h3>
59
+ {{#subtitle}}<p class="project-description">{{subtitle}}</p>{{/subtitle}}
60
+ <div class="project-meta-inline">
61
+ <span>{{meta.year}}</span>
62
+ <span>&middot;</span>
63
+ <span>{{meta.role}}</span>
64
+ </div>
65
+ <div class="project-tags">
66
+ {{#meta.tech}}<span class="tag">{{.}}</span>{{/meta.tech}}
67
+ </div>
68
+ </a>
69
+ {{/projects}}
70
+ </div>
71
+ </main>
72
+
73
+ <footer class="site-footer">
74
+ <div class="footer-ornament"></div>
75
+ <p>Crafted with <a href="https://devfolio.page" target="_blank">devfolio.page</a></p>
76
+ </footer>
77
+
78
+ <script src="../assets/script.js"></script>
79
+ </body>
80
+ </html>
@@ -0,0 +1,75 @@
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>Publications - {{site_name}}</title>
7
+ <meta name="description" content="Publications by {{site_name}}">
8
+ <link rel="stylesheet" href="../assets/styles.css">
9
+ <script>
10
+ (function() {
11
+ try {
12
+ var saved = localStorage.getItem('academia-theme');
13
+ if (saved) document.documentElement.dataset.theme = saved;
14
+ } catch(e) {}
15
+ })();
16
+ </script>
17
+ </head>
18
+ <body class="academia-theme" data-theme="{{colorScheme}}">
19
+
20
+ <nav class="site-nav">
21
+ <div class="nav-content">
22
+ <a href="../" class="nav-logo">{{site_name}}</a>
23
+ <div class="nav-links">
24
+ <a href="../">Home</a>
25
+ {{#nav_links}}
26
+ <a href="{{href}}"{{#active}} class="active"{{/active}}>{{label}}</a>
27
+ {{/nav_links}}
28
+ </div>
29
+ <button class="theme-btn" title="Toggle theme" aria-label="Toggle theme">
30
+ <svg class="icon-sun" width="18" height="18" 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="18" height="18" 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
+ </nav>
47
+
48
+ <main class="page-content">
49
+ <header class="page-header">
50
+ <div class="header-ornament"></div>
51
+ <h1>Publications</h1>
52
+ <p>Articles, essays, and scholarly writings.</p>
53
+ </header>
54
+
55
+ <div class="writing-list">
56
+ {{#writing}}
57
+ <a href="{{url}}" target="_blank" class="writing-item">
58
+ <div class="writing-info">
59
+ <span class="writing-title">{{title}}</span>
60
+ {{#publication}}<span class="writing-publication">{{publication}}</span>{{/publication}}
61
+ </div>
62
+ <span class="writing-date">{{date}}</span>
63
+ </a>
64
+ {{/writing}}
65
+ </div>
66
+ </main>
67
+
68
+ <footer class="site-footer">
69
+ <div class="footer-ornament"></div>
70
+ <p>Crafted with <a href="https://devfolio.page" target="_blank">devfolio.page</a></p>
71
+ </footer>
72
+
73
+ <script src="../assets/script.js"></script>
74
+ </body>
75
+ </html>
@@ -0,0 +1,14 @@
1
+ <section id="education" class="section">
2
+ <h2 class="section-title">Education</h2>
3
+ <div class="education-list">
4
+ {{#educations}}
5
+ <div class="education-item">
6
+ <div>
7
+ <div class="education-institution">{{institution}}</div>
8
+ <div class="education-degree">{{degree}}</div>
9
+ </div>
10
+ <span class="education-date">{{date.start}} - {{date.end}}</span>
11
+ </div>
12
+ {{/educations}}
13
+ </div>
14
+ </section>
@@ -0,0 +1,21 @@
1
+ <section id="experience" class="section">
2
+ <h2 class="section-title">Experience</h2>
3
+ <div class="experience-list">
4
+ {{#experiences}}
5
+ <div class="experience-item">
6
+ <div class="experience-header">
7
+ <span class="experience-company">{{company}}</span>
8
+ <span class="experience-role">{{role}}</span>
9
+ </div>
10
+ <span class="experience-date">{{date.start}} - {{date.end}}</span>
11
+ {{#highlights.length}}
12
+ <ul class="experience-highlights">
13
+ {{#highlights}}
14
+ <li>{{.}}</li>
15
+ {{/highlights}}
16
+ </ul>
17
+ {{/highlights.length}}
18
+ </div>
19
+ {{/experiences}}
20
+ </div>
21
+ </section>
@@ -0,0 +1,15 @@
1
+ <section class="hero">
2
+ <h1 class="hero-name">{{name}}</h1>
3
+ <p class="hero-title">{{title}}</p>
4
+ <p class="hero-location">{{location}}{{#timezone}} · {{timezone}}{{/timezone}}</p>
5
+
6
+ <div class="hero-links">
7
+ {{#email}}<a href="mailto:{{email}}" class="hero-link">Email</a>{{/email}}
8
+ {{#website}}<a href="{{website}}" target="_blank" class="hero-link">Website</a>{{/website}}
9
+ {{#github}}<a href="https://github.com/{{github}}" target="_blank" class="hero-link">GitHub</a>{{/github}}
10
+ {{#linkedin}}<a href="https://linkedin.com/in/{{linkedin}}" target="_blank" class="hero-link">LinkedIn</a>{{/linkedin}}
11
+ {{#twitter}}<a href="https://twitter.com/{{twitter}}" target="_blank" class="hero-link">Twitter</a>{{/twitter}}
12
+ </div>
13
+
14
+ <p class="hero-bio">{{bio}}</p>
15
+ </section>
@@ -0,0 +1,17 @@
1
+ <section id="projects" class="section">
2
+ <h2 class="section-title">Projects</h2>
3
+ <div class="projects-grid">
4
+ {{#projects}}
5
+ <div class="project-card{{#featured}} featured{{/featured}}">
6
+ <div class="project-header">
7
+ <h3 class="project-name">{{name}}</h3>
8
+ {{#url}}<a href="{{url}}" target="_blank" class="project-link">View</a>{{/url}}
9
+ </div>
10
+ <p class="project-description">{{description}}</p>
11
+ <div class="project-tags">
12
+ {{#tags}}<span class="project-tag">{{.}}</span>{{/tags}}
13
+ </div>
14
+ </div>
15
+ {{/projects}}
16
+ </div>
17
+ </section>
@@ -0,0 +1,11 @@
1
+ <section id="skills" class="section">
2
+ <h2 class="section-title">Skills</h2>
3
+ <div class="skills-grid">
4
+ {{#skillCategories}}
5
+ <div class="skill-category">
6
+ <div class="skill-category-name">{{category}}</div>
7
+ <div class="skill-list">{{skills}}</div>
8
+ </div>
9
+ {{/skillCategories}}
10
+ </div>
11
+ </section>
@@ -0,0 +1,14 @@
1
+ <section id="writing" class="section">
2
+ <h2 class="section-title">Writing</h2>
3
+ <div class="writing-list">
4
+ {{#articles}}
5
+ <div class="writing-item">
6
+ <div>
7
+ <a href="{{url}}" target="_blank" class="writing-title">{{title}}</a>
8
+ {{#description}}<p class="writing-description">{{description}}</p>{{/description}}
9
+ </div>
10
+ <span class="writing-date">{{date}}</span>
11
+ </div>
12
+ {{/articles}}
13
+ </div>
14
+ </section>