devfolio-page 0.2.8 → 0.2.10
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.
- package/README.md +88 -0
- package/dist/cli/schemas/portfolio.schema.js +12 -0
- package/dist/generator/builder.js +16 -0
- package/dist/generator/themes/dark-academia/templates/about.html +2 -2
- package/dist/generator/themes/dark-academia/templates/experiments-index.html +2 -2
- package/dist/generator/themes/dark-academia/templates/projects-index.html +2 -2
- package/dist/generator/themes/dark-academia/templates/writing-index.html +2 -2
- package/dist/generator/themes/modern/templates/about.html +2 -2
- package/dist/generator/themes/modern/templates/experiments-index.html +2 -2
- package/dist/generator/themes/modern/templates/projects-index.html +2 -2
- package/dist/generator/themes/modern/templates/writing-index.html +2 -2
- package/dist/generator/themes/srcl/templates/about.html +2 -2
- package/dist/generator/themes/srcl/templates/experiments-index.html +2 -2
- package/dist/generator/themes/srcl/templates/projects-index.html +2 -2
- package/dist/generator/themes/srcl/templates/writing-index.html +2 -2
- package/package.json +1 -1
- package/src/generator/themes/dark-academia/templates/about.html +2 -2
- package/src/generator/themes/dark-academia/templates/experiments-index.html +2 -2
- package/src/generator/themes/dark-academia/templates/projects-index.html +2 -2
- package/src/generator/themes/dark-academia/templates/writing-index.html +2 -2
- package/src/generator/themes/modern/templates/about.html +2 -2
- package/src/generator/themes/modern/templates/experiments-index.html +2 -2
- package/src/generator/themes/modern/templates/projects-index.html +2 -2
- package/src/generator/themes/modern/templates/writing-index.html +2 -2
- package/src/generator/themes/srcl/templates/about.html +2 -2
- package/src/generator/themes/srcl/templates/experiments-index.html +2 -2
- package/src/generator/themes/srcl/templates/projects-index.html +2 -2
- package/src/generator/themes/srcl/templates/writing-index.html +2 -2
package/README.md
CHANGED
|
@@ -95,12 +95,16 @@ devfolio-page validate portfolio.yaml
|
|
|
95
95
|
|
|
96
96
|
## YAML Schema
|
|
97
97
|
|
|
98
|
+
### Basic Example
|
|
99
|
+
|
|
98
100
|
```yaml
|
|
99
101
|
meta:
|
|
100
102
|
name: Your Name
|
|
101
103
|
title: Your Title
|
|
102
104
|
location: Your Location
|
|
103
105
|
timezone: America/Los_Angeles # optional
|
|
106
|
+
tagline: A short tagline # optional
|
|
107
|
+
avatar: images/avatar.jpg # optional
|
|
104
108
|
|
|
105
109
|
contact:
|
|
106
110
|
email: you@example.com
|
|
@@ -113,6 +117,14 @@ bio: |
|
|
|
113
117
|
A few sentences about yourself.
|
|
114
118
|
Can be multiple lines.
|
|
115
119
|
|
|
120
|
+
# Extended about section (generates dedicated /about page)
|
|
121
|
+
about:
|
|
122
|
+
short: Brief intro for homepage
|
|
123
|
+
long: |
|
|
124
|
+
Longer bio with markdown support.
|
|
125
|
+
|
|
126
|
+
Multiple paragraphs work great here.
|
|
127
|
+
|
|
116
128
|
sections:
|
|
117
129
|
experience:
|
|
118
130
|
- company: Company Name
|
|
@@ -142,6 +154,7 @@ sections:
|
|
|
142
154
|
url: https://...
|
|
143
155
|
date: 2024-12
|
|
144
156
|
description: Brief description # optional
|
|
157
|
+
featured: true # optional
|
|
145
158
|
|
|
146
159
|
education:
|
|
147
160
|
- institution: University Name
|
|
@@ -163,6 +176,81 @@ settings:
|
|
|
163
176
|
animate: subtle # none, subtle, or full
|
|
164
177
|
```
|
|
165
178
|
|
|
179
|
+
### Rich Projects (Case Studies)
|
|
180
|
+
|
|
181
|
+
For a multi-page portfolio with dedicated project pages, use the top-level `projects` field:
|
|
182
|
+
|
|
183
|
+
```yaml
|
|
184
|
+
projects:
|
|
185
|
+
- id: my-project # URL slug: /projects/my-project.html
|
|
186
|
+
title: My Project
|
|
187
|
+
subtitle: A brief tagline
|
|
188
|
+
featured: true
|
|
189
|
+
thumbnail: images/project-thumb.jpg
|
|
190
|
+
hero: images/project-hero.jpg
|
|
191
|
+
meta:
|
|
192
|
+
year: 2024
|
|
193
|
+
role: Lead Developer
|
|
194
|
+
timeline: 3 months
|
|
195
|
+
tech: [React, Node.js, PostgreSQL]
|
|
196
|
+
links:
|
|
197
|
+
github: https://github.com/...
|
|
198
|
+
demo: https://demo.example.com
|
|
199
|
+
live: https://example.com
|
|
200
|
+
sections:
|
|
201
|
+
- type: overview
|
|
202
|
+
content: |
|
|
203
|
+
Markdown content describing the project.
|
|
204
|
+
- type: image
|
|
205
|
+
src: images/screenshot.png
|
|
206
|
+
caption: Main dashboard view
|
|
207
|
+
- type: metrics
|
|
208
|
+
data:
|
|
209
|
+
- label: Users
|
|
210
|
+
value: "10,000+"
|
|
211
|
+
- label: Uptime
|
|
212
|
+
value: "99.9%"
|
|
213
|
+
- type: outcomes
|
|
214
|
+
content: |
|
|
215
|
+
What was achieved and lessons learned.
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
### Experiments
|
|
219
|
+
|
|
220
|
+
For side projects and explorations:
|
|
221
|
+
|
|
222
|
+
```yaml
|
|
223
|
+
experiments:
|
|
224
|
+
- title: Creative Coding
|
|
225
|
+
description: Generative art experiments
|
|
226
|
+
image: images/experiment.png
|
|
227
|
+
github: https://github.com/...
|
|
228
|
+
demo: https://demo.example.com
|
|
229
|
+
tags: [p5.js, WebGL]
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
### Page Customization
|
|
233
|
+
|
|
234
|
+
Customize titles and descriptions for each page:
|
|
235
|
+
|
|
236
|
+
```yaml
|
|
237
|
+
pages:
|
|
238
|
+
projects:
|
|
239
|
+
title: My Work
|
|
240
|
+
description: A curated selection of projects and case studies.
|
|
241
|
+
about:
|
|
242
|
+
title: About Me
|
|
243
|
+
description: Designer, developer, and coffee enthusiast.
|
|
244
|
+
experiments:
|
|
245
|
+
title: Lab
|
|
246
|
+
description: Creative experiments and explorations.
|
|
247
|
+
writing:
|
|
248
|
+
title: Blog
|
|
249
|
+
description: Thoughts on design and technology.
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
If not specified, each theme provides sensible defaults.
|
|
253
|
+
|
|
166
254
|
## Themes
|
|
167
255
|
|
|
168
256
|
### SRCL (Default)
|
|
@@ -220,6 +220,16 @@ const layoutSchema = z.object({
|
|
|
220
220
|
show_experiments: z.boolean().optional(),
|
|
221
221
|
show_timeline: z.boolean().optional(),
|
|
222
222
|
});
|
|
223
|
+
const pageContentSchema = z.object({
|
|
224
|
+
title: z.string().optional().nullable(),
|
|
225
|
+
description: z.string().optional().nullable(),
|
|
226
|
+
});
|
|
227
|
+
const pagesSchema = z.object({
|
|
228
|
+
projects: pageContentSchema.optional().nullable(),
|
|
229
|
+
about: pageContentSchema.optional().nullable(),
|
|
230
|
+
experiments: pageContentSchema.optional().nullable(),
|
|
231
|
+
writing: pageContentSchema.optional().nullable(),
|
|
232
|
+
});
|
|
223
233
|
// =============================================================================
|
|
224
234
|
// Main Portfolio Schema
|
|
225
235
|
// =============================================================================
|
|
@@ -271,6 +281,8 @@ export const portfolioSchema = z.object({
|
|
|
271
281
|
layout: layoutSchema.optional().nullable(),
|
|
272
282
|
// Settings
|
|
273
283
|
settings: settingsSchema.optional().nullable(),
|
|
284
|
+
// Page content customization
|
|
285
|
+
pages: pagesSchema.optional().nullable(),
|
|
274
286
|
});
|
|
275
287
|
// =============================================================================
|
|
276
288
|
// Helper Functions
|
|
@@ -235,6 +235,8 @@ async function generateProjectsIndex(portfolio, themePath, outputDir, theme) {
|
|
|
235
235
|
projects: portfolio.projects || [],
|
|
236
236
|
colorScheme: settings.color_scheme || defaultColorScheme,
|
|
237
237
|
nav_links: generateNavLinks(portfolio, true, 'projects'),
|
|
238
|
+
page_title: portfolio.pages?.projects?.title,
|
|
239
|
+
page_description: portfolio.pages?.projects?.description,
|
|
238
240
|
};
|
|
239
241
|
const html = Mustache.render(template, data);
|
|
240
242
|
await fs.writeFile(path.join(outputDir, 'projects/index.html'), html);
|
|
@@ -273,6 +275,8 @@ async function generateAboutPage(portfolio, themePath, outputDir, theme) {
|
|
|
273
275
|
hasEducation: (portfolio.sections?.education?.length ?? 0) > 0,
|
|
274
276
|
colorScheme: settings.color_scheme || defaultColorScheme,
|
|
275
277
|
nav_links: generateNavLinks(portfolio, true, 'about'),
|
|
278
|
+
page_title: portfolio.pages?.about?.title,
|
|
279
|
+
page_description: portfolio.pages?.about?.description,
|
|
276
280
|
};
|
|
277
281
|
const html = Mustache.render(template, data);
|
|
278
282
|
await fs.writeFile(path.join(outputDir, 'about/index.html'), html);
|
|
@@ -296,6 +300,8 @@ async function generateExperimentsIndex(portfolio, themePath, outputDir, theme)
|
|
|
296
300
|
experiments: portfolio.experiments || [],
|
|
297
301
|
colorScheme: settings.color_scheme || defaultColorScheme,
|
|
298
302
|
nav_links: generateNavLinks(portfolio, true, 'experiments'),
|
|
303
|
+
page_title: portfolio.pages?.experiments?.title,
|
|
304
|
+
page_description: portfolio.pages?.experiments?.description,
|
|
299
305
|
};
|
|
300
306
|
const html = Mustache.render(template, data);
|
|
301
307
|
await fs.writeFile(path.join(outputDir, 'experiments/index.html'), html);
|
|
@@ -319,6 +325,8 @@ async function generateWritingIndex(portfolio, themePath, outputDir, theme) {
|
|
|
319
325
|
writing: portfolio.sections.writing || [],
|
|
320
326
|
colorScheme: settings.color_scheme || defaultColorScheme,
|
|
321
327
|
nav_links: generateNavLinks(portfolio, true, 'writing'),
|
|
328
|
+
page_title: portfolio.pages?.writing?.title,
|
|
329
|
+
page_description: portfolio.pages?.writing?.description,
|
|
322
330
|
};
|
|
323
331
|
const html = Mustache.render(template, data);
|
|
324
332
|
await fs.writeFile(path.join(outputDir, 'writing/index.html'), html);
|
|
@@ -824,6 +832,8 @@ async function generateProjectsIndexInMemory(portfolio, themePath, theme, files)
|
|
|
824
832
|
projects: portfolio.projects || [],
|
|
825
833
|
colorScheme: settings.color_scheme || defaultColorScheme,
|
|
826
834
|
nav_links: generateNavLinks(portfolio, true, 'projects'),
|
|
835
|
+
page_title: portfolio.pages?.projects?.title,
|
|
836
|
+
page_description: portfolio.pages?.projects?.description,
|
|
827
837
|
};
|
|
828
838
|
const html = Mustache.render(template, data);
|
|
829
839
|
files.set('projects/index.html', Buffer.from(html, 'utf-8'));
|
|
@@ -860,6 +870,8 @@ async function generateAboutPageInMemory(portfolio, themePath, theme, files) {
|
|
|
860
870
|
hasEducation: (portfolio.sections?.education?.length ?? 0) > 0,
|
|
861
871
|
colorScheme: settings.color_scheme || defaultColorScheme,
|
|
862
872
|
nav_links: generateNavLinks(portfolio, true, 'about'),
|
|
873
|
+
page_title: portfolio.pages?.about?.title,
|
|
874
|
+
page_description: portfolio.pages?.about?.description,
|
|
863
875
|
};
|
|
864
876
|
const html = Mustache.render(template, data);
|
|
865
877
|
files.set('about/index.html', Buffer.from(html, 'utf-8'));
|
|
@@ -881,6 +893,8 @@ async function generateExperimentsIndexInMemory(portfolio, themePath, theme, fil
|
|
|
881
893
|
experiments: portfolio.experiments || [],
|
|
882
894
|
colorScheme: settings.color_scheme || defaultColorScheme,
|
|
883
895
|
nav_links: generateNavLinks(portfolio, true, 'experiments'),
|
|
896
|
+
page_title: portfolio.pages?.experiments?.title,
|
|
897
|
+
page_description: portfolio.pages?.experiments?.description,
|
|
884
898
|
};
|
|
885
899
|
const html = Mustache.render(template, data);
|
|
886
900
|
files.set('experiments/index.html', Buffer.from(html, 'utf-8'));
|
|
@@ -902,6 +916,8 @@ async function generateWritingIndexInMemory(portfolio, themePath, theme, files)
|
|
|
902
916
|
writing: portfolio.sections.writing || [],
|
|
903
917
|
colorScheme: settings.color_scheme || defaultColorScheme,
|
|
904
918
|
nav_links: generateNavLinks(portfolio, true, 'writing'),
|
|
919
|
+
page_title: portfolio.pages?.writing?.title,
|
|
920
|
+
page_description: portfolio.pages?.writing?.description,
|
|
905
921
|
};
|
|
906
922
|
const html = Mustache.render(template, data);
|
|
907
923
|
files.set('writing/index.html', Buffer.from(html, 'utf-8'));
|
|
@@ -47,8 +47,8 @@
|
|
|
47
47
|
<main class="page-content">
|
|
48
48
|
<header class="page-header">
|
|
49
49
|
<div class="header-ornament"></div>
|
|
50
|
-
<h1>About</h1>
|
|
51
|
-
{{#tagline}}<p>{{tagline}}</p>{{/tagline}}
|
|
50
|
+
<h1>{{#page_title}}{{page_title}}{{/page_title}}{{^page_title}}About{{/page_title}}</h1>
|
|
51
|
+
{{#page_description}}<p>{{page_description}}</p>{{/page_description}}{{^page_description}}{{#tagline}}<p>{{tagline}}</p>{{/tagline}}{{/page_description}}
|
|
52
52
|
</header>
|
|
53
53
|
|
|
54
54
|
<div class="about-content">
|
|
@@ -47,8 +47,8 @@
|
|
|
47
47
|
<main class="page-content">
|
|
48
48
|
<header class="page-header">
|
|
49
49
|
<div class="header-ornament"></div>
|
|
50
|
-
<h1>Experiments</h1>
|
|
51
|
-
<p>Explorations, studies, and curious investigations
|
|
50
|
+
<h1>{{#page_title}}{{page_title}}{{/page_title}}{{^page_title}}Experiments{{/page_title}}</h1>
|
|
51
|
+
<p>{{#page_description}}{{page_description}}{{/page_description}}{{^page_description}}Explorations, studies, and curious investigations.{{/page_description}}</p>
|
|
52
52
|
</header>
|
|
53
53
|
|
|
54
54
|
<div class="experiments-list">
|
|
@@ -47,8 +47,8 @@
|
|
|
47
47
|
<main class="page-content">
|
|
48
48
|
<header class="page-header">
|
|
49
49
|
<div class="header-ornament"></div>
|
|
50
|
-
<h1>Complete Works</h1>
|
|
51
|
-
<p>A collection of projects spanning research, development, and creative endeavors
|
|
50
|
+
<h1>{{#page_title}}{{page_title}}{{/page_title}}{{^page_title}}Complete Works{{/page_title}}</h1>
|
|
51
|
+
<p>{{#page_description}}{{page_description}}{{/page_description}}{{^page_description}}A collection of projects spanning research, development, and creative endeavors.{{/page_description}}</p>
|
|
52
52
|
</header>
|
|
53
53
|
|
|
54
54
|
<div class="projects-list">
|
|
@@ -47,8 +47,8 @@
|
|
|
47
47
|
<main class="page-content">
|
|
48
48
|
<header class="page-header">
|
|
49
49
|
<div class="header-ornament"></div>
|
|
50
|
-
<h1>Publications</h1>
|
|
51
|
-
<p>Articles, essays, and scholarly writings
|
|
50
|
+
<h1>{{#page_title}}{{page_title}}{{/page_title}}{{^page_title}}Publications{{/page_title}}</h1>
|
|
51
|
+
<p>{{#page_description}}{{page_description}}{{/page_description}}{{^page_description}}Articles, essays, and scholarly writings.{{/page_description}}</p>
|
|
52
52
|
</header>
|
|
53
53
|
|
|
54
54
|
<div class="writing-list">
|
|
@@ -46,8 +46,8 @@
|
|
|
46
46
|
|
|
47
47
|
<main class="main-content">
|
|
48
48
|
<header class="page-header">
|
|
49
|
-
<h1>About</h1>
|
|
50
|
-
{{#tagline}}<p>{{tagline}}</p>{{/tagline}}
|
|
49
|
+
<h1>{{#page_title}}{{page_title}}{{/page_title}}{{^page_title}}About{{/page_title}}</h1>
|
|
50
|
+
{{#page_description}}<p>{{page_description}}</p>{{/page_description}}{{^page_description}}{{#tagline}}<p>{{tagline}}</p>{{/tagline}}{{/page_description}}
|
|
51
51
|
</header>
|
|
52
52
|
|
|
53
53
|
<div class="about-content">
|
|
@@ -46,8 +46,8 @@
|
|
|
46
46
|
|
|
47
47
|
<main class="main-content">
|
|
48
48
|
<header class="page-header">
|
|
49
|
-
<h1>Experiments</h1>
|
|
50
|
-
<p>Side projects, explorations, and things I'm tinkering with
|
|
49
|
+
<h1>{{#page_title}}{{page_title}}{{/page_title}}{{^page_title}}Experiments{{/page_title}}</h1>
|
|
50
|
+
<p>{{#page_description}}{{page_description}}{{/page_description}}{{^page_description}}Side projects, explorations, and things I'm tinkering with.{{/page_description}}</p>
|
|
51
51
|
</header>
|
|
52
52
|
|
|
53
53
|
<div class="experiments-grid">
|
|
@@ -46,8 +46,8 @@
|
|
|
46
46
|
|
|
47
47
|
<main class="main-content">
|
|
48
48
|
<header class="page-header">
|
|
49
|
-
<h1>Projects</h1>
|
|
50
|
-
<p>A collection of work spanning product development, open source, and research
|
|
49
|
+
<h1>{{#page_title}}{{page_title}}{{/page_title}}{{^page_title}}Projects{{/page_title}}</h1>
|
|
50
|
+
<p>{{#page_description}}{{page_description}}{{/page_description}}{{^page_description}}A collection of work spanning product development, open source, and research.{{/page_description}}</p>
|
|
51
51
|
</header>
|
|
52
52
|
|
|
53
53
|
<div class="projects-grid">
|
|
@@ -46,8 +46,8 @@
|
|
|
46
46
|
|
|
47
47
|
<main class="main-content">
|
|
48
48
|
<header class="page-header">
|
|
49
|
-
<h1>Writing</h1>
|
|
50
|
-
<p>Articles, blog posts, and technical writing
|
|
49
|
+
<h1>{{#page_title}}{{page_title}}{{/page_title}}{{^page_title}}Writing{{/page_title}}</h1>
|
|
50
|
+
<p>{{#page_description}}{{page_description}}{{/page_description}}{{^page_description}}Articles, blog posts, and technical writing.{{/page_description}}</p>
|
|
51
51
|
</header>
|
|
52
52
|
|
|
53
53
|
<div class="writing-list">
|
|
@@ -35,8 +35,8 @@
|
|
|
35
35
|
|
|
36
36
|
<main class="content">
|
|
37
37
|
<header class="page-header">
|
|
38
|
-
<h1>About</h1>
|
|
39
|
-
{{#tagline}}<p class="page-description">{{tagline}}</p>{{/tagline}}
|
|
38
|
+
<h1>{{#page_title}}{{page_title}}{{/page_title}}{{^page_title}}About{{/page_title}}</h1>
|
|
39
|
+
{{#page_description}}<p class="page-description">{{page_description}}</p>{{/page_description}}{{^page_description}}{{#tagline}}<p class="page-description">{{tagline}}</p>{{/tagline}}{{/page_description}}
|
|
40
40
|
</header>
|
|
41
41
|
|
|
42
42
|
<div class="about-content">
|
|
@@ -35,8 +35,8 @@
|
|
|
35
35
|
|
|
36
36
|
<main class="content">
|
|
37
37
|
<header class="page-header">
|
|
38
|
-
<h1>Experiments</h1>
|
|
39
|
-
<p class="page-description">Side projects, explorations, and things I'm tinkering with
|
|
38
|
+
<h1>{{#page_title}}{{page_title}}{{/page_title}}{{^page_title}}Experiments{{/page_title}}</h1>
|
|
39
|
+
<p class="page-description">{{#page_description}}{{page_description}}{{/page_description}}{{^page_description}}Side projects, explorations, and things I'm tinkering with.{{/page_description}}</p>
|
|
40
40
|
</header>
|
|
41
41
|
|
|
42
42
|
<div class="experiments-grid full-width">
|
|
@@ -35,8 +35,8 @@
|
|
|
35
35
|
|
|
36
36
|
<main class="content">
|
|
37
37
|
<header class="page-header">
|
|
38
|
-
<h1>Projects</h1>
|
|
39
|
-
<p class="page-description">A collection of work spanning product development, open source, and research
|
|
38
|
+
<h1>{{#page_title}}{{page_title}}{{/page_title}}{{^page_title}}Projects{{/page_title}}</h1>
|
|
39
|
+
<p class="page-description">{{#page_description}}{{page_description}}{{/page_description}}{{^page_description}}A collection of work spanning product development, open source, and research.{{/page_description}}</p>
|
|
40
40
|
</header>
|
|
41
41
|
|
|
42
42
|
<div class="projects-grid full-width">
|
|
@@ -35,8 +35,8 @@
|
|
|
35
35
|
|
|
36
36
|
<main class="content">
|
|
37
37
|
<header class="page-header">
|
|
38
|
-
<h1>Writing</h1>
|
|
39
|
-
<p class="page-description">Articles, blog posts, and technical writing
|
|
38
|
+
<h1>{{#page_title}}{{page_title}}{{/page_title}}{{^page_title}}Writing{{/page_title}}</h1>
|
|
39
|
+
<p class="page-description">{{#page_description}}{{page_description}}{{/page_description}}{{^page_description}}Articles, blog posts, and technical writing.{{/page_description}}</p>
|
|
40
40
|
</header>
|
|
41
41
|
|
|
42
42
|
<ul class="writing-list full-width">
|
package/package.json
CHANGED
|
@@ -47,8 +47,8 @@
|
|
|
47
47
|
<main class="page-content">
|
|
48
48
|
<header class="page-header">
|
|
49
49
|
<div class="header-ornament"></div>
|
|
50
|
-
<h1>About</h1>
|
|
51
|
-
{{#tagline}}<p>{{tagline}}</p>{{/tagline}}
|
|
50
|
+
<h1>{{#page_title}}{{page_title}}{{/page_title}}{{^page_title}}About{{/page_title}}</h1>
|
|
51
|
+
{{#page_description}}<p>{{page_description}}</p>{{/page_description}}{{^page_description}}{{#tagline}}<p>{{tagline}}</p>{{/tagline}}{{/page_description}}
|
|
52
52
|
</header>
|
|
53
53
|
|
|
54
54
|
<div class="about-content">
|
|
@@ -47,8 +47,8 @@
|
|
|
47
47
|
<main class="page-content">
|
|
48
48
|
<header class="page-header">
|
|
49
49
|
<div class="header-ornament"></div>
|
|
50
|
-
<h1>Experiments</h1>
|
|
51
|
-
<p>Explorations, studies, and curious investigations
|
|
50
|
+
<h1>{{#page_title}}{{page_title}}{{/page_title}}{{^page_title}}Experiments{{/page_title}}</h1>
|
|
51
|
+
<p>{{#page_description}}{{page_description}}{{/page_description}}{{^page_description}}Explorations, studies, and curious investigations.{{/page_description}}</p>
|
|
52
52
|
</header>
|
|
53
53
|
|
|
54
54
|
<div class="experiments-list">
|
|
@@ -47,8 +47,8 @@
|
|
|
47
47
|
<main class="page-content">
|
|
48
48
|
<header class="page-header">
|
|
49
49
|
<div class="header-ornament"></div>
|
|
50
|
-
<h1>Complete Works</h1>
|
|
51
|
-
<p>A collection of projects spanning research, development, and creative endeavors
|
|
50
|
+
<h1>{{#page_title}}{{page_title}}{{/page_title}}{{^page_title}}Complete Works{{/page_title}}</h1>
|
|
51
|
+
<p>{{#page_description}}{{page_description}}{{/page_description}}{{^page_description}}A collection of projects spanning research, development, and creative endeavors.{{/page_description}}</p>
|
|
52
52
|
</header>
|
|
53
53
|
|
|
54
54
|
<div class="projects-list">
|
|
@@ -47,8 +47,8 @@
|
|
|
47
47
|
<main class="page-content">
|
|
48
48
|
<header class="page-header">
|
|
49
49
|
<div class="header-ornament"></div>
|
|
50
|
-
<h1>Publications</h1>
|
|
51
|
-
<p>Articles, essays, and scholarly writings
|
|
50
|
+
<h1>{{#page_title}}{{page_title}}{{/page_title}}{{^page_title}}Publications{{/page_title}}</h1>
|
|
51
|
+
<p>{{#page_description}}{{page_description}}{{/page_description}}{{^page_description}}Articles, essays, and scholarly writings.{{/page_description}}</p>
|
|
52
52
|
</header>
|
|
53
53
|
|
|
54
54
|
<div class="writing-list">
|
|
@@ -46,8 +46,8 @@
|
|
|
46
46
|
|
|
47
47
|
<main class="main-content">
|
|
48
48
|
<header class="page-header">
|
|
49
|
-
<h1>About</h1>
|
|
50
|
-
{{#tagline}}<p>{{tagline}}</p>{{/tagline}}
|
|
49
|
+
<h1>{{#page_title}}{{page_title}}{{/page_title}}{{^page_title}}About{{/page_title}}</h1>
|
|
50
|
+
{{#page_description}}<p>{{page_description}}</p>{{/page_description}}{{^page_description}}{{#tagline}}<p>{{tagline}}</p>{{/tagline}}{{/page_description}}
|
|
51
51
|
</header>
|
|
52
52
|
|
|
53
53
|
<div class="about-content">
|
|
@@ -46,8 +46,8 @@
|
|
|
46
46
|
|
|
47
47
|
<main class="main-content">
|
|
48
48
|
<header class="page-header">
|
|
49
|
-
<h1>Experiments</h1>
|
|
50
|
-
<p>Side projects, explorations, and things I'm tinkering with
|
|
49
|
+
<h1>{{#page_title}}{{page_title}}{{/page_title}}{{^page_title}}Experiments{{/page_title}}</h1>
|
|
50
|
+
<p>{{#page_description}}{{page_description}}{{/page_description}}{{^page_description}}Side projects, explorations, and things I'm tinkering with.{{/page_description}}</p>
|
|
51
51
|
</header>
|
|
52
52
|
|
|
53
53
|
<div class="experiments-grid">
|
|
@@ -46,8 +46,8 @@
|
|
|
46
46
|
|
|
47
47
|
<main class="main-content">
|
|
48
48
|
<header class="page-header">
|
|
49
|
-
<h1>Projects</h1>
|
|
50
|
-
<p>A collection of work spanning product development, open source, and research
|
|
49
|
+
<h1>{{#page_title}}{{page_title}}{{/page_title}}{{^page_title}}Projects{{/page_title}}</h1>
|
|
50
|
+
<p>{{#page_description}}{{page_description}}{{/page_description}}{{^page_description}}A collection of work spanning product development, open source, and research.{{/page_description}}</p>
|
|
51
51
|
</header>
|
|
52
52
|
|
|
53
53
|
<div class="projects-grid">
|
|
@@ -46,8 +46,8 @@
|
|
|
46
46
|
|
|
47
47
|
<main class="main-content">
|
|
48
48
|
<header class="page-header">
|
|
49
|
-
<h1>Writing</h1>
|
|
50
|
-
<p>Articles, blog posts, and technical writing
|
|
49
|
+
<h1>{{#page_title}}{{page_title}}{{/page_title}}{{^page_title}}Writing{{/page_title}}</h1>
|
|
50
|
+
<p>{{#page_description}}{{page_description}}{{/page_description}}{{^page_description}}Articles, blog posts, and technical writing.{{/page_description}}</p>
|
|
51
51
|
</header>
|
|
52
52
|
|
|
53
53
|
<div class="writing-list">
|
|
@@ -35,8 +35,8 @@
|
|
|
35
35
|
|
|
36
36
|
<main class="content">
|
|
37
37
|
<header class="page-header">
|
|
38
|
-
<h1>About</h1>
|
|
39
|
-
{{#tagline}}<p class="page-description">{{tagline}}</p>{{/tagline}}
|
|
38
|
+
<h1>{{#page_title}}{{page_title}}{{/page_title}}{{^page_title}}About{{/page_title}}</h1>
|
|
39
|
+
{{#page_description}}<p class="page-description">{{page_description}}</p>{{/page_description}}{{^page_description}}{{#tagline}}<p class="page-description">{{tagline}}</p>{{/tagline}}{{/page_description}}
|
|
40
40
|
</header>
|
|
41
41
|
|
|
42
42
|
<div class="about-content">
|
|
@@ -35,8 +35,8 @@
|
|
|
35
35
|
|
|
36
36
|
<main class="content">
|
|
37
37
|
<header class="page-header">
|
|
38
|
-
<h1>Experiments</h1>
|
|
39
|
-
<p class="page-description">Side projects, explorations, and things I'm tinkering with
|
|
38
|
+
<h1>{{#page_title}}{{page_title}}{{/page_title}}{{^page_title}}Experiments{{/page_title}}</h1>
|
|
39
|
+
<p class="page-description">{{#page_description}}{{page_description}}{{/page_description}}{{^page_description}}Side projects, explorations, and things I'm tinkering with.{{/page_description}}</p>
|
|
40
40
|
</header>
|
|
41
41
|
|
|
42
42
|
<div class="experiments-grid full-width">
|
|
@@ -35,8 +35,8 @@
|
|
|
35
35
|
|
|
36
36
|
<main class="content">
|
|
37
37
|
<header class="page-header">
|
|
38
|
-
<h1>Projects</h1>
|
|
39
|
-
<p class="page-description">A collection of work spanning product development, open source, and research
|
|
38
|
+
<h1>{{#page_title}}{{page_title}}{{/page_title}}{{^page_title}}Projects{{/page_title}}</h1>
|
|
39
|
+
<p class="page-description">{{#page_description}}{{page_description}}{{/page_description}}{{^page_description}}A collection of work spanning product development, open source, and research.{{/page_description}}</p>
|
|
40
40
|
</header>
|
|
41
41
|
|
|
42
42
|
<div class="projects-grid full-width">
|
|
@@ -35,8 +35,8 @@
|
|
|
35
35
|
|
|
36
36
|
<main class="content">
|
|
37
37
|
<header class="page-header">
|
|
38
|
-
<h1>Writing</h1>
|
|
39
|
-
<p class="page-description">Articles, blog posts, and technical writing
|
|
38
|
+
<h1>{{#page_title}}{{page_title}}{{/page_title}}{{^page_title}}Writing{{/page_title}}</h1>
|
|
39
|
+
<p class="page-description">{{#page_description}}{{page_description}}{{/page_description}}{{^page_description}}Articles, blog posts, and technical writing.{{/page_description}}</p>
|
|
40
40
|
</header>
|
|
41
41
|
|
|
42
42
|
<ul class="writing-list full-width">
|