move content images around
20
README.md
@ -42,19 +42,19 @@ The whole [portfolio](https://matthiaskretschmann.com) is a React-based Single P
|
|||||||
|
|
||||||
### 💍 One data file to rule all pages
|
### 💍 One data file to rule all pages
|
||||||
|
|
||||||
All content is powered by one YAML file where all the portfolio's projects are defined. The project description itself is transformed from Markdown written inside the YAML file int HTML on build time.
|
All content is powered by one YAML file where all the portfolio's projects are defined. The project description itself is transformed from Markdown written inside the YAML file into HTML on build time.
|
||||||
|
|
||||||
Gatsby automatically creates pages from each item in that file utilizing the [`Project.jsx`](src/templates/Project.jsx) template.
|
Gatsby automatically creates pages from each item in that file utilizing the [`Project.jsx`](src/templates/Project.jsx) template.
|
||||||
|
|
||||||
- [`gatsby-node.js`](gatsby-node.js)
|
- [`gatsby-node.js`](gatsby-node.js)
|
||||||
- [`data/projects.yml`](data/projects.yml)
|
- [`content/projects.yml`](content/projects.yml)
|
||||||
- [`src/templates/Project.jsx`](src/templates/Project.jsx)
|
- [`src/templates/Project.jsx`](src/templates/Project.jsx)
|
||||||
|
|
||||||
### 💅 Theme switcher
|
### 💅 Theme switcher
|
||||||
|
|
||||||
Includes a theme switcher which allows user to toggle between a light and a dark theme. Switching between them also happens automatically based on user's local sunset and sunrise times. Uses Cloudflare's geo location HTTP header functionality.
|
Includes a theme switcher which allows user to toggle between a light and a dark theme. Switching between them also happens automatically based on user's local sunset and sunrise times. Uses Cloudflare's geo location HTTP header functionality.
|
||||||
|
|
||||||
If a visitor has set the theme manually that selection is remembered in localStorage, and is restored on next visit.
|
If a visitor has set the theme manually that selection is remembered in `localStorage`, and is restored on next visit.
|
||||||
|
|
||||||
If you want to know how, have a look at the respective components:
|
If you want to know how, have a look at the respective components:
|
||||||
|
|
||||||
@ -71,7 +71,7 @@ If you want to know how, have a look at the respective component:
|
|||||||
|
|
||||||
### 📇 Client-side vCard creation
|
### 📇 Client-side vCard creation
|
||||||
|
|
||||||
The _Add to addressbook_ link in the footer automatically creates a downloadable vCard file on the client-side, based on data defined in `data/meta.yml`.
|
The _Add to addressbook_ link in the footer automatically creates a downloadable vCard file on the client-side, based on data defined in `content/meta.yml`.
|
||||||
|
|
||||||
If you want to know how, have a look at the respective component:
|
If you want to know how, have a look at the respective component:
|
||||||
|
|
||||||
@ -96,7 +96,7 @@ Site sends usage statistics to my own [Matomo](https://matomo.org) installation.
|
|||||||
|
|
||||||
### 🖼 Project images
|
### 🖼 Project images
|
||||||
|
|
||||||
All project images live under `src/images` and are automatically attached to each project based on the inclusion of the project's `slug` in their filenames.
|
All project images live under `content/images` and are automatically attached to each project based on the inclusion of the project's `slug` in their filenames.
|
||||||
|
|
||||||
All project images make use of the excellent [gatsby-image](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-image) plugin, working in tandem with [gatsby-plugin-sharp](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-sharp) and [gatsby-transformer-sharp](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-sharp).
|
All project images make use of the excellent [gatsby-image](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-image) plugin, working in tandem with [gatsby-plugin-sharp](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-sharp) and [gatsby-transformer-sharp](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-sharp).
|
||||||
|
|
||||||
@ -163,14 +163,14 @@ To add a new project, run the following command. This adds a new item to the top
|
|||||||
npm run new -- "Hello"
|
npm run new -- "Hello"
|
||||||
```
|
```
|
||||||
|
|
||||||
Then continue modifying the new entry in [`data/projects.yml`](data/projects.yml).
|
Then continue modifying the new entry in [`content/projects.yml`](content/projects.yml).
|
||||||
|
|
||||||
Finally, add as many images as needed with the file name format and put into `src/images/`:
|
Finally, add as many images as needed with the file name format and put into `content/images/`:
|
||||||
|
|
||||||
```text
|
```text
|
||||||
portfolio-SLUG-01.png
|
SLUG-01.png
|
||||||
portfolio-SLUG-02.png
|
SLUG-02.png
|
||||||
portfolio-SLUG-03.png
|
SLUG-03.png
|
||||||
...
|
...
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Before Width: | Height: | Size: 878 KiB After Width: | Height: | Size: 878 KiB |
Before Width: | Height: | Size: 668 KiB After Width: | Height: | Size: 668 KiB |
Before Width: | Height: | Size: 784 KiB After Width: | Height: | Size: 784 KiB |
Before Width: | Height: | Size: 2.4 MiB After Width: | Height: | Size: 2.4 MiB |
Before Width: | Height: | Size: 91 KiB After Width: | Height: | Size: 91 KiB |
Before Width: | Height: | Size: 154 KiB After Width: | Height: | Size: 154 KiB |
Before Width: | Height: | Size: 283 KiB After Width: | Height: | Size: 283 KiB |
Before Width: | Height: | Size: 2.0 MiB After Width: | Height: | Size: 2.0 MiB |
Before Width: | Height: | Size: 437 KiB After Width: | Height: | Size: 437 KiB |
Before Width: | Height: | Size: 625 KiB After Width: | Height: | Size: 625 KiB |
Before Width: | Height: | Size: 1.0 MiB After Width: | Height: | Size: 1.0 MiB |
Before Width: | Height: | Size: 578 KiB After Width: | Height: | Size: 578 KiB |
Before Width: | Height: | Size: 2.4 MiB After Width: | Height: | Size: 2.4 MiB |
Before Width: | Height: | Size: 901 KiB After Width: | Height: | Size: 901 KiB |
Before Width: | Height: | Size: 504 KiB After Width: | Height: | Size: 504 KiB |
Before Width: | Height: | Size: 530 KiB After Width: | Height: | Size: 530 KiB |
Before Width: | Height: | Size: 1.1 MiB After Width: | Height: | Size: 1.1 MiB |
Before Width: | Height: | Size: 59 KiB After Width: | Height: | Size: 59 KiB |
Before Width: | Height: | Size: 319 KiB After Width: | Height: | Size: 319 KiB |
Before Width: | Height: | Size: 797 KiB After Width: | Height: | Size: 797 KiB |
Before Width: | Height: | Size: 515 KiB After Width: | Height: | Size: 515 KiB |
Before Width: | Height: | Size: 105 KiB After Width: | Height: | Size: 105 KiB |
Before Width: | Height: | Size: 333 KiB After Width: | Height: | Size: 333 KiB |
Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 53 KiB |
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 137 KiB After Width: | Height: | Size: 137 KiB |
Before Width: | Height: | Size: 592 KiB After Width: | Height: | Size: 592 KiB |
Before Width: | Height: | Size: 291 KiB After Width: | Height: | Size: 291 KiB |
Before Width: | Height: | Size: 534 KiB After Width: | Height: | Size: 534 KiB |
Before Width: | Height: | Size: 415 KiB After Width: | Height: | Size: 415 KiB |
Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 69 KiB |
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 54 KiB |
Before Width: | Height: | Size: 425 KiB After Width: | Height: | Size: 425 KiB |
Before Width: | Height: | Size: 414 KiB After Width: | Height: | Size: 414 KiB |
Before Width: | Height: | Size: 1.8 MiB After Width: | Height: | Size: 1.8 MiB |
Before Width: | Height: | Size: 726 KiB After Width: | Height: | Size: 726 KiB |
Before Width: | Height: | Size: 714 KiB After Width: | Height: | Size: 714 KiB |
Before Width: | Height: | Size: 795 KiB After Width: | Height: | Size: 795 KiB |
Before Width: | Height: | Size: 536 KiB After Width: | Height: | Size: 536 KiB |
Before Width: | Height: | Size: 429 KiB After Width: | Height: | Size: 429 KiB |
Before Width: | Height: | Size: 358 KiB After Width: | Height: | Size: 358 KiB |
Before Width: | Height: | Size: 116 KiB After Width: | Height: | Size: 116 KiB |
Before Width: | Height: | Size: 629 KiB After Width: | Height: | Size: 629 KiB |
Before Width: | Height: | Size: 622 KiB After Width: | Height: | Size: 622 KiB |
Before Width: | Height: | Size: 751 KiB After Width: | Height: | Size: 751 KiB |
Before Width: | Height: | Size: 1.8 MiB After Width: | Height: | Size: 1.8 MiB |
Before Width: | Height: | Size: 1.8 MiB After Width: | Height: | Size: 1.8 MiB |
Before Width: | Height: | Size: 742 KiB After Width: | Height: | Size: 742 KiB |
Before Width: | Height: | Size: 428 KiB After Width: | Height: | Size: 428 KiB |
Before Width: | Height: | Size: 150 KiB After Width: | Height: | Size: 150 KiB |
@ -1,6 +1,6 @@
|
|||||||
- title: Ocean Protocol
|
- title: Ocean Protocol
|
||||||
slug: '/oceanprotocol/'
|
slug: '/oceanprotocol/'
|
||||||
img: '../src/images/portfolio-oceanprotocol-01.png'
|
img: 'images/oceanprotocol-01.png'
|
||||||
description: >
|
description: >
|
||||||
Since 2017 I'm leading the UI design & development of Ocean Protocol, iterating on a components-based UI design system spanning all of Ocean Protocol's web properties. Additionally, I conceptualize, execute and iterate on the creative and visual direction of the Ocean Protocol brand.
|
Since 2017 I'm leading the UI design & development of Ocean Protocol, iterating on a components-based UI design system spanning all of Ocean Protocol's web properties. Additionally, I conceptualize, execute and iterate on the creative and visual direction of the Ocean Protocol brand.
|
||||||
|
|
||||||
@ -36,7 +36,7 @@
|
|||||||
|
|
||||||
- title: IPDB
|
- title: IPDB
|
||||||
slug: '/ipdb/'
|
slug: '/ipdb/'
|
||||||
img: '../src/images/portfolio-ipdb-01.png'
|
img: 'images/ipdb-01.png'
|
||||||
description: >
|
description: >
|
||||||
From 2015–2017 I was leading the UI design & development of all IPDB web properties and additonally iterated on the creative and visual direction of the IPDB brand.
|
From 2015–2017 I was leading the UI design & development of all IPDB web properties and additonally iterated on the creative and visual direction of the IPDB brand.
|
||||||
|
|
||||||
@ -66,7 +66,7 @@
|
|||||||
|
|
||||||
- title: Berlin Innovation Ventures
|
- title: Berlin Innovation Ventures
|
||||||
slug: '/biv/'
|
slug: '/biv/'
|
||||||
img: '../src/images/portfolio-biv-01.png'
|
img: 'images/biv-01.png'
|
||||||
description: >
|
description: >
|
||||||
I designed & developed the website and a basic branding for the Berlin-based VC firm Berlin Innovation Ventures. The main website is a static site built with Jekyll and a custom Gulp-based build pipeline in front of it.
|
I designed & developed the website and a basic branding for the Berlin-based VC firm Berlin Innovation Ventures. The main website is a static site built with Jekyll and a custom Gulp-based build pipeline in front of it.
|
||||||
|
|
||||||
@ -84,7 +84,7 @@
|
|||||||
|
|
||||||
- title: '9984 >> Summit 2017'
|
- title: '9984 >> Summit 2017'
|
||||||
slug: '/9984/'
|
slug: '/9984/'
|
||||||
img: '../src/images/portfolio-9984-01.png'
|
img: 'images/9984-01.png'
|
||||||
links:
|
links:
|
||||||
- title: Link
|
- title: Link
|
||||||
url: https://2017.9984.io
|
url: https://2017.9984.io
|
||||||
@ -111,7 +111,7 @@
|
|||||||
|
|
||||||
- title: BigchainDB
|
- title: BigchainDB
|
||||||
slug: '/bigchaindb/'
|
slug: '/bigchaindb/'
|
||||||
img: '../src/images/portfolio-bigchaindb-01.png'
|
img: 'images/bigchaindb-01.png'
|
||||||
description: >
|
description: >
|
||||||
Since 2016 I'm leading the UI design & development of all BigchainDB web properties. I created the initial BigchainDB brand and further conceptualize, execute and iterate on the creative and visual direction of BigchainDB. This includes creating and iterating on a components-based UI design system for all of BigchainDB's web properties.
|
Since 2016 I'm leading the UI design & development of all BigchainDB web properties. I created the initial BigchainDB brand and further conceptualize, execute and iterate on the creative and visual direction of BigchainDB. This includes creating and iterating on a components-based UI design system for all of BigchainDB's web properties.
|
||||||
|
|
||||||
@ -144,7 +144,7 @@
|
|||||||
|
|
||||||
- title: ChartMogul
|
- title: ChartMogul
|
||||||
slug: '/chartmogul/'
|
slug: '/chartmogul/'
|
||||||
img: '../src/images/portfolio-chartmogul-01.png'
|
img: 'images/chartmogul-01.png'
|
||||||
description: >
|
description: >
|
||||||
From 2015–2017 I was co-designing and leading the UI design & development of various ChartMogul web properties. This included the creation of a components-based UI design system and implementing it across all web touch points.
|
From 2015–2017 I was co-designing and leading the UI design & development of various ChartMogul web properties. This included the creation of a components-based UI design system and implementing it across all web touch points.
|
||||||
|
|
||||||
@ -181,7 +181,7 @@
|
|||||||
|
|
||||||
- title: ShareTheMeal
|
- title: ShareTheMeal
|
||||||
slug: '/sharethemeal/'
|
slug: '/sharethemeal/'
|
||||||
img: '../src/images/portfolio-sharethemeal-01.png'
|
img: 'images/sharethemeal-01.png'
|
||||||
description: >
|
description: >
|
||||||
ShareTheMeal is an app from the United Nations World Food Programme (WFP) that enables people to "share their meals" with children in need. In 2015 I was consulting, co-designing and leading the front-end development of the ShareTheMeal website and various parts of the ShareTheMeal apps for iOS & Android.
|
ShareTheMeal is an app from the United Nations World Food Programme (WFP) that enables people to "share their meals" with children in need. In 2015 I was consulting, co-designing and leading the front-end development of the ShareTheMeal website and various parts of the ShareTheMeal apps for iOS & Android.
|
||||||
|
|
||||||
@ -206,7 +206,7 @@
|
|||||||
|
|
||||||
- title: ezeep
|
- title: ezeep
|
||||||
slug: '/ezeep/'
|
slug: '/ezeep/'
|
||||||
img: '../src/images/portfolio-ezeep-01.png'
|
img: 'images/ezeep-01.png'
|
||||||
description: >
|
description: >
|
||||||
From 2012–2015 I worked at ezeep, where I helped creating an unprecedented, market-leading & award-winning user experience based on the principles of emotional design way ahead of all competitors. This included conceptualizing executing, and iterating on the creative & visual direction of the ezeep brand.
|
From 2012–2015 I worked at ezeep, where I helped creating an unprecedented, market-leading & award-winning user experience based on the principles of emotional design way ahead of all competitors. This included conceptualizing executing, and iterating on the creative & visual direction of the ezeep brand.
|
||||||
|
|
||||||
@ -239,7 +239,7 @@
|
|||||||
|
|
||||||
- title: Mr. Reader
|
- title: Mr. Reader
|
||||||
slug: '/mrreader/'
|
slug: '/mrreader/'
|
||||||
img: '../src/images/portfolio-mrreader-01.png'
|
img: 'images/mrreader-01.png'
|
||||||
description: >
|
description: >
|
||||||
While working with indy iOS developer Curious Times in 2012, I designed the app icon, a custom theme, and various promotion materials for Mr. Reader, a powerful and highly loved RSS feed reader for iPad.
|
While working with indy iOS developer Curious Times in 2012, I designed the app icon, a custom theme, and various promotion materials for Mr. Reader, a powerful and highly loved RSS feed reader for iPad.
|
||||||
techstack:
|
techstack:
|
||||||
@ -247,7 +247,7 @@
|
|||||||
|
|
||||||
- title: iPixelPad
|
- title: iPixelPad
|
||||||
slug: '/ipixelpad/'
|
slug: '/ipixelpad/'
|
||||||
img: '../src/images/portfolio-ipixelpad-01.png'
|
img: 'images/ipixelpad-01.png'
|
||||||
description: >
|
description: >
|
||||||
So, what to do when everyone seem to release iPad icons but fail to include some crisp small size icons? Pushing the pixels for yourself of course. So here’s my take on the smaller sizes of an Apple iPad icon, called iPixelPad.
|
So, what to do when everyone seem to release iPad icons but fail to include some crisp small size icons? Pushing the pixels for yourself of course. So here’s my take on the smaller sizes of an Apple iPad icon, called iPixelPad.
|
||||||
|
|
||||||
@ -262,7 +262,7 @@
|
|||||||
|
|
||||||
- title: Out Of Whale Oil
|
- title: Out Of Whale Oil
|
||||||
slug: '/outofwhaleoil/'
|
slug: '/outofwhaleoil/'
|
||||||
img: '../src/images/portfolio-outofwhaleoil-01.jpg'
|
img: 'images/outofwhaleoil-01.jpg'
|
||||||
description: >
|
description: >
|
||||||
Tribute wallpaper pack inspired by the Futurama movie _Into The Wild Green Yonder_. Released as a goodie on [kremalicious.com](https://kremalicious.com/out-of-whale-oil/).
|
Tribute wallpaper pack inspired by the Futurama movie _Into The Wild Green Yonder_. Released as a goodie on [kremalicious.com](https://kremalicious.com/out-of-whale-oil/).
|
||||||
links:
|
links:
|
||||||
@ -273,7 +273,7 @@
|
|||||||
|
|
||||||
- title: Martin-Luther-Universität Halle-Wittenberg
|
- title: Martin-Luther-Universität Halle-Wittenberg
|
||||||
slug: '/unihalle/'
|
slug: '/unihalle/'
|
||||||
img: '../src/images/portfolio-unihalle-01.png'
|
img: 'images/unihalle-01.png'
|
||||||
description: >
|
description: >
|
||||||
From 2009–2012 I worked at the IT services department of [Martin-Luther-Universität Halle-Wittenberg](http://www.uni-halle.de) where I conceptualized, designed & implemented numerous in-house and public facing interfaces for thousands of students and staff.
|
From 2009–2012 I worked at the IT services department of [Martin-Luther-Universität Halle-Wittenberg](http://www.uni-halle.de) where I conceptualized, designed & implemented numerous in-house and public facing interfaces for thousands of students and staff.
|
||||||
|
|
||||||
@ -299,7 +299,7 @@
|
|||||||
|
|
||||||
- title: Coffee Cup
|
- title: Coffee Cup
|
||||||
slug: '/coffeecup/'
|
slug: '/coffeecup/'
|
||||||
img: '../src/images/portfolio-coffeecup-01.png'
|
img: 'images/coffeecup-01.png'
|
||||||
description: >
|
description: >
|
||||||
Desktop icons showing the fuel of most designers. Released as a goodie
|
Desktop icons showing the fuel of most designers. Released as a goodie
|
||||||
on [kremalicious.com](https://kremalicious.com/coffee-cup-icon/).
|
on [kremalicious.com](https://kremalicious.com/coffee-cup-icon/).
|
||||||
@ -313,7 +313,7 @@
|
|||||||
|
|
||||||
- title: Project Purple
|
- title: Project Purple
|
||||||
slug: '/projectpurple/'
|
slug: '/projectpurple/'
|
||||||
img: '../src/images/portfolio-projectpurple-01.png'
|
img: 'images/projectpurple-01.png'
|
||||||
description: >
|
description: >
|
||||||
It had been revealed the original iPhone was developed in a locked down building under the name Project Purple and because of the secrecy involved, the team decorated the building with Fight Club references. Perfect story to create a wallpaper out of it.
|
It had been revealed the original iPhone was developed in a locked down building under the name Project Purple and because of the secrecy involved, the team decorated the building with Fight Club references. Perfect story to create a wallpaper out of it.
|
||||||
|
|
||||||
@ -328,7 +328,7 @@
|
|||||||
|
|
||||||
- title: Allinnia Creative Group
|
- title: Allinnia Creative Group
|
||||||
slug: '/allinnia/'
|
slug: '/allinnia/'
|
||||||
img: '../src/images/portfolio-allinnia-01.png'
|
img: 'images/allinnia-01.png'
|
||||||
description: >
|
description: >
|
||||||
In 2009 I created the branding, website, and various key visuals for professional music production studio Allinnia Creative Group, reflecting their own musical compositions.
|
In 2009 I created the branding, website, and various key visuals for professional music production studio Allinnia Creative Group, reflecting their own musical compositions.
|
||||||
|
|
||||||
@ -342,7 +342,7 @@
|
|||||||
|
|
||||||
- title: Aperture Loupe
|
- title: Aperture Loupe
|
||||||
slug: '/apertureloupe/'
|
slug: '/apertureloupe/'
|
||||||
img: '../src/images/portfolio-apertureloupe-01.png'
|
img: 'images/apertureloupe-01.png'
|
||||||
description: >
|
description: >
|
||||||
When Apple released their professional photography app _Aperture_ in 2008, the loupe tool in there was something really novel and just fun to play with. Inspired by that, I created this macOS desktop icon.
|
When Apple released their professional photography app _Aperture_ in 2008, the loupe tool in there was something really novel and just fun to play with. Inspired by that, I created this macOS desktop icon.
|
||||||
|
|
||||||
@ -351,7 +351,7 @@
|
|||||||
|
|
||||||
- title: Adiumeetie
|
- title: Adiumeetie
|
||||||
slug: '/adiumeetie/'
|
slug: '/adiumeetie/'
|
||||||
img: '../src/images/portfolio-adiumeetie-01.png'
|
img: 'images/adiumeetie-01.png'
|
||||||
description: >
|
description: >
|
||||||
A macOS replacement desktop icon created in 2009 for the popular Mac IM client Adium following the style of atebit’s excellent Tweetie for Mac icon. Released as a goodie on [kremalicious.com](https://kremalicious.com/adiumeetie/).
|
A macOS replacement desktop icon created in 2009 for the popular Mac IM client Adium following the style of atebit’s excellent Tweetie for Mac icon. Released as a goodie on [kremalicious.com](https://kremalicious.com/adiumeetie/).
|
||||||
|
|
||||||
@ -364,7 +364,7 @@
|
|||||||
|
|
||||||
- title: "Niépce's Camera Obscura"
|
- title: "Niépce's Camera Obscura"
|
||||||
slug: '/niepces-camera-obscura/'
|
slug: '/niepces-camera-obscura/'
|
||||||
img: '../src/images/portfolio-niepces-camera-obscura-01.jpg'
|
img: 'images/niepces-camera-obscura-01.jpg'
|
||||||
description: >
|
description: >
|
||||||
In 2008 I used the camera obscura as it was used by Nicéphore Niépce in 1826 to create an Aperture and iPhoto replacement icon.
|
In 2008 I used the camera obscura as it was used by Nicéphore Niépce in 1826 to create an Aperture and iPhoto replacement icon.
|
||||||
|
|
@ -1,7 +1,7 @@
|
|||||||
const path = require('path')
|
const path = require('path')
|
||||||
const fs = require('fs')
|
const fs = require('fs')
|
||||||
const yaml = require('js-yaml')
|
const yaml = require('js-yaml')
|
||||||
const meta = yaml.load(fs.readFileSync('./data/meta.yml', 'utf8'))
|
const meta = yaml.load(fs.readFileSync('./content/meta.yml', 'utf8'))
|
||||||
const { title, description, url, matomoSite, matomoUrl } = meta
|
const { title, description, url, matomoSite, matomoUrl } = meta
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
@ -16,8 +16,8 @@ module.exports = {
|
|||||||
{
|
{
|
||||||
resolve: 'gatsby-source-filesystem',
|
resolve: 'gatsby-source-filesystem',
|
||||||
options: {
|
options: {
|
||||||
name: 'data',
|
name: 'content',
|
||||||
path: path.join(__dirname, 'data')
|
path: path.join(__dirname, 'content')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
@ -17,7 +17,7 @@ const title = process.argv[2]
|
|||||||
spinner.text = `Adding '${title}'.`
|
spinner.text = `Adding '${title}'.`
|
||||||
|
|
||||||
const titleSlug = slugify(title, { lower: true })
|
const titleSlug = slugify(title, { lower: true })
|
||||||
const projects = path.join(__dirname, '..', 'data', 'projects.yml')
|
const projects = path.join(__dirname, '..', 'content', 'projects.yml')
|
||||||
const newContents = template
|
const newContents = template
|
||||||
.split('TITLE')
|
.split('TITLE')
|
||||||
.join(title)
|
.join(title)
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
- title: TITLE
|
- title: TITLE
|
||||||
slug: '/SLUG/'
|
slug: '/SLUG/'
|
||||||
img: '../src/images/portfolio-SLUG-01.png'
|
img: 'images/SLUG-01.png'
|
||||||
description: >
|
description: >
|
||||||
Markdown can be used here.
|
Markdown can be used here.
|
||||||
links:
|
links:
|
||||||
|
@ -5,7 +5,7 @@ import { StaticQuery, graphql } from 'gatsby'
|
|||||||
|
|
||||||
const query = graphql`
|
const query = graphql`
|
||||||
query {
|
query {
|
||||||
dataYaml {
|
contentYaml {
|
||||||
title
|
title
|
||||||
tagline
|
tagline
|
||||||
description
|
description
|
||||||
@ -75,7 +75,7 @@ export default class SEO extends PureComponent {
|
|||||||
query={query}
|
query={query}
|
||||||
render={data => {
|
render={data => {
|
||||||
const { project } = this.props
|
const { project } = this.props
|
||||||
const meta = data.dataYaml
|
const meta = data.contentYaml
|
||||||
const title = (project && project.title) || null
|
const title = (project && project.title) || null
|
||||||
const description =
|
const description =
|
||||||
(project && project.fields.excerpt) || meta.description
|
(project && project.fields.excerpt) || meta.description
|
||||||
|
@ -19,7 +19,7 @@ const TypekitScript = typekitID => (
|
|||||||
|
|
||||||
const query = graphql`
|
const query = graphql`
|
||||||
query {
|
query {
|
||||||
dataYaml {
|
contentYaml {
|
||||||
typekitID
|
typekitID
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -29,7 +29,7 @@ const Typekit = () => (
|
|||||||
<StaticQuery
|
<StaticQuery
|
||||||
query={query}
|
query={query}
|
||||||
render={data => {
|
render={data => {
|
||||||
const { typekitID } = data.dataYaml
|
const { typekitID } = data.contentYaml
|
||||||
|
|
||||||
return (
|
return (
|
||||||
typekitID && (
|
typekitID && (
|
||||||
|
@ -5,7 +5,7 @@ import vCard from 'vcf'
|
|||||||
|
|
||||||
const query = graphql`
|
const query = graphql`
|
||||||
query {
|
query {
|
||||||
dataYaml {
|
contentYaml {
|
||||||
title
|
title
|
||||||
tagline
|
tagline
|
||||||
description
|
description
|
||||||
@ -37,7 +37,7 @@ export default class Vcard extends PureComponent {
|
|||||||
<StaticQuery
|
<StaticQuery
|
||||||
query={query}
|
query={query}
|
||||||
render={data => {
|
render={data => {
|
||||||
const meta = data.dataYaml
|
const meta = data.contentYaml
|
||||||
|
|
||||||
const handleAddressbookClick = e => {
|
const handleAddressbookClick = e => {
|
||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
|
@ -7,7 +7,7 @@ import styles from './Availability.module.scss'
|
|||||||
|
|
||||||
const query = graphql`
|
const query = graphql`
|
||||||
query {
|
query {
|
||||||
dataYaml {
|
contentYaml {
|
||||||
availability {
|
availability {
|
||||||
status
|
status
|
||||||
available
|
available
|
||||||
@ -27,7 +27,7 @@ export default class Availability extends PureComponent {
|
|||||||
<StaticQuery
|
<StaticQuery
|
||||||
query={query}
|
query={query}
|
||||||
render={data => {
|
render={data => {
|
||||||
const { availability } = data.dataYaml
|
const { availability } = data.contentYaml
|
||||||
const { status, available, unavailable } = availability
|
const { status, available, unavailable } = availability
|
||||||
const className = status
|
const className = status
|
||||||
? `${styles.availability} ${styles.available}`
|
? `${styles.availability} ${styles.available}`
|
||||||
|
@ -9,7 +9,7 @@ import styles from './LogoUnit.module.scss'
|
|||||||
|
|
||||||
const query = graphql`
|
const query = graphql`
|
||||||
query {
|
query {
|
||||||
dataYaml {
|
contentYaml {
|
||||||
title
|
title
|
||||||
tagline
|
tagline
|
||||||
}
|
}
|
||||||
@ -34,7 +34,7 @@ export default class LogoUnit extends PureComponent {
|
|||||||
<StaticQuery
|
<StaticQuery
|
||||||
query={query}
|
query={query}
|
||||||
render={data => {
|
render={data => {
|
||||||
const { title, tagline } = data.dataYaml
|
const { title, tagline } = data.contentYaml
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={wrapClasses}>
|
<div className={wrapClasses}>
|
||||||
|
@ -16,7 +16,7 @@ import styles from './Networks.module.scss'
|
|||||||
|
|
||||||
const query = graphql`
|
const query = graphql`
|
||||||
query {
|
query {
|
||||||
dataYaml {
|
contentYaml {
|
||||||
social {
|
social {
|
||||||
Email
|
Email
|
||||||
Blog
|
Blog
|
||||||
@ -75,7 +75,7 @@ export default class Networks extends PureComponent {
|
|||||||
<StaticQuery
|
<StaticQuery
|
||||||
query={query}
|
query={query}
|
||||||
render={data => {
|
render={data => {
|
||||||
const meta = data.dataYaml
|
const meta = data.contentYaml
|
||||||
|
|
||||||
return (
|
return (
|
||||||
!this.props.hide && (
|
!this.props.hide && (
|
||||||
|
@ -16,7 +16,7 @@ const query = graphql`
|
|||||||
bugs
|
bugs
|
||||||
}
|
}
|
||||||
|
|
||||||
dataYaml {
|
contentYaml {
|
||||||
title
|
title
|
||||||
url
|
url
|
||||||
gpg
|
gpg
|
||||||
@ -62,7 +62,7 @@ export default class Footer extends PureComponent {
|
|||||||
query={query}
|
query={query}
|
||||||
render={data => {
|
render={data => {
|
||||||
const pkg = data.portfolioJson
|
const pkg = data.portfolioJson
|
||||||
const meta = data.dataYaml
|
const meta = data.contentYaml
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<this.FooterMarkup year={this.state.year} pkg={pkg} meta={meta} />
|
<this.FooterMarkup year={this.state.year} pkg={pkg} meta={meta} />
|
||||||
|
@ -10,7 +10,7 @@ import styles from './Header.module.scss'
|
|||||||
|
|
||||||
const query = graphql`
|
const query = graphql`
|
||||||
query {
|
query {
|
||||||
dataYaml {
|
contentYaml {
|
||||||
availability {
|
availability {
|
||||||
status
|
status
|
||||||
}
|
}
|
||||||
@ -30,7 +30,7 @@ export default class Header extends PureComponent {
|
|||||||
<StaticQuery
|
<StaticQuery
|
||||||
query={query}
|
query={query}
|
||||||
render={data => {
|
render={data => {
|
||||||
const meta = data.dataYaml
|
const meta = data.contentYaml
|
||||||
|
|
||||||
let headerClasses = classNames([styles.header], {
|
let headerClasses = classNames([styles.header], {
|
||||||
[styles.minimal]: minimal
|
[styles.minimal]: minimal
|
||||||
|