mirror of
https://github.com/kremalicious/portfolio.git
synced 2025-02-14 21:10:41 +01:00
lots of changes
This commit is contained in:
parent
2a467978bf
commit
ed609766cf
@ -1,11 +1,14 @@
|
||||
{
|
||||
"title": "Matthias Kretschmann",
|
||||
"tagline": "Designer & Developer",
|
||||
"description": "",
|
||||
"description": "Portfolio of web & ui designer/developer hybrid Matthias Kretschmann.",
|
||||
"url": "https://matthiaskretschmann.com",
|
||||
"email": "m@kretschmann.io",
|
||||
"social": {
|
||||
"Twitter": "https://twitter.com/kremalicious",
|
||||
"GitHub": "https://github.com/kremalicious",
|
||||
"Facebook": "https://facebook.com/matthiaskretschmann"
|
||||
}
|
||||
},
|
||||
"available": false,
|
||||
"googleanalytics": "UA-1441794-4"
|
||||
}
|
@ -237,12 +237,6 @@
|
||||
},
|
||||
"description": ""
|
||||
},
|
||||
{
|
||||
"title": "Aref Jdey",
|
||||
"slug": "aref-jdey",
|
||||
"img": "aref-jdey.jpg",
|
||||
"description": ""
|
||||
},
|
||||
{
|
||||
"title": "Niépce's Camera Obscura",
|
||||
"slug": "camera-obscura",
|
||||
@ -257,14 +251,5 @@
|
||||
"slug": "allinnia",
|
||||
"img": "allinnia.jpg",
|
||||
"description": ""
|
||||
},
|
||||
{
|
||||
"title": "mkretschmann.com v1",
|
||||
"slug": "mkv1",
|
||||
"img": "mkv1.jpg",
|
||||
"links": {
|
||||
"Info": "http://www.kremalicious.com/2009/02/portal-thingy/"
|
||||
},
|
||||
"description": ""
|
||||
}
|
||||
]
|
@ -1,4 +1,4 @@
|
||||
const meta = require('./src/data/meta.json')
|
||||
const meta = require('./content/meta.json')
|
||||
|
||||
module.exports = {
|
||||
siteMetadata: {
|
||||
@ -17,10 +17,19 @@ module.exports = {
|
||||
{
|
||||
resolve: 'gatsby-source-filesystem',
|
||||
options: {
|
||||
name: 'data',
|
||||
path: `${__dirname}/src/data/`,
|
||||
name: 'content',
|
||||
path: `${__dirname}/content/`,
|
||||
},
|
||||
},
|
||||
'gatsby-transformer-json',
|
||||
{
|
||||
resolve: 'gatsby-plugin-google-analytics',
|
||||
options: {
|
||||
trackingId: `${meta.googleanalytics}`,
|
||||
head: false,
|
||||
anonymize: true,
|
||||
respectDNT: true,
|
||||
},
|
||||
},
|
||||
],
|
||||
}
|
||||
|
@ -5,6 +5,7 @@
|
||||
"dependencies": {
|
||||
"gatsby": "^1.9.241",
|
||||
"gatsby-link": "^1.6.39",
|
||||
"gatsby-plugin-google-analytics": "^1.0.28",
|
||||
"gatsby-plugin-react-helmet": "^2.0.8",
|
||||
"gatsby-plugin-react-next": "^1.0.11",
|
||||
"gatsby-plugin-sass": "^1.0.25",
|
||||
|
@ -4,7 +4,7 @@ import Helmet from 'react-helmet'
|
||||
|
||||
const Head = ({ meta }) => {
|
||||
return <Helmet defaultTitle={`${meta.title.toLowerCase()} { ${meta.tagline.toLowerCase()} }`} titleTemplate={`%s // ${meta.title.toLowerCase()} { ${meta.tagline.toLowerCase()} }`}>
|
||||
<meta name="desacription" content={meta.description} />
|
||||
<meta name="description" content={meta.description} />
|
||||
<link rel="stylesheet" href="https://use.typekit.net/dtg3zui.css" />
|
||||
</Helmet>
|
||||
}
|
||||
|
@ -7,7 +7,7 @@ const Footer = ({ meta }) => {
|
||||
|
||||
return (
|
||||
<footer className="footer">
|
||||
<small>© {year} {meta.title} — All Rights Reserved</small>
|
||||
<small>© {year} {meta.title} — All Rights Reserved</small>
|
||||
</footer>
|
||||
)
|
||||
}
|
||||
|
@ -1,16 +1,16 @@
|
||||
import React from 'react'
|
||||
import Link from 'react-router-dom/Link'
|
||||
import Link from 'gatsby-link'
|
||||
import PropTypes from 'prop-types'
|
||||
import Social from './Social'
|
||||
import './Header.scss'
|
||||
|
||||
const Header = ({ meta }) => {
|
||||
const minimal = location.pathname === '/' ? false : true
|
||||
const classes = minimal ? 'header header--minimal' : 'header'
|
||||
const isHomepage = location.pathname === '/'
|
||||
const classes = isHomepage ? 'header' : 'header header--minimal'
|
||||
|
||||
return (
|
||||
<header className={classes}>
|
||||
<Link className="header__name" to="/">
|
||||
<Link className="header__name" to={'/'}>
|
||||
<span className="header__logo">␥</span>
|
||||
<h1 className="header__title">{meta.title}</h1>
|
||||
<p className="header__description">{meta.tagline}</p>
|
||||
@ -22,7 +22,6 @@ const Header = ({ meta }) => {
|
||||
}
|
||||
|
||||
Header.propTypes = {
|
||||
minimal: PropTypes.bool,
|
||||
meta: PropTypes.object,
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
import React from 'react'
|
||||
import PropTypes from 'prop-types'
|
||||
import { OutboundLink } from 'gatsby-plugin-google-analytics'
|
||||
import { Chain, GitHub, Dribbble } from '../atoms/Icons'
|
||||
import './ProjectLinks.scss'
|
||||
|
||||
@ -16,19 +17,24 @@ const LinkIcon = ({ title }) => {
|
||||
}
|
||||
|
||||
const ProjectLinks = ({ links }) => (
|
||||
<ul className="projectlinks">
|
||||
{!!links &&
|
||||
Object.keys(links).map(key => {
|
||||
<div className="project__links">
|
||||
<h3 className="project__meta__title">
|
||||
Links <span>See the project live on the interwebz.</span>
|
||||
</h3>
|
||||
|
||||
<ul>
|
||||
{Object.keys(links).map(key => {
|
||||
if (links[key]) {
|
||||
return <li key={key}>
|
||||
<a href={links[key]}>
|
||||
<LinkIcon title={key} />
|
||||
{key}
|
||||
</a>
|
||||
</li>
|
||||
<OutboundLink href={links[key]}>
|
||||
<LinkIcon title={key} />
|
||||
{key}
|
||||
</OutboundLink>
|
||||
</li>
|
||||
}
|
||||
})}
|
||||
</ul>
|
||||
</ul>
|
||||
</div>
|
||||
)
|
||||
|
||||
ProjectLinks.propTypes = {
|
||||
|
@ -1,11 +1,13 @@
|
||||
@import 'variables';
|
||||
|
||||
.projectlinks {
|
||||
padding: 0;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: space-between;
|
||||
width: 100%;
|
||||
.project__links {
|
||||
ul {
|
||||
padding: 0;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: space-between;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
li {
|
||||
display: block;
|
||||
|
20
src/components/molecules/ProjectTechstack.js
Normal file
20
src/components/molecules/ProjectTechstack.js
Normal file
@ -0,0 +1,20 @@
|
||||
import React from 'react'
|
||||
import PropTypes from 'prop-types'
|
||||
import './ProjectTechstack.scss'
|
||||
|
||||
const ProjectTechstack = ({ techstack }) => (
|
||||
<div className="project__techstack">
|
||||
<h3 className="project__meta__title">
|
||||
Technologies <span>The tech stack I was involved with.</span>
|
||||
</h3>
|
||||
<ul>
|
||||
{techstack.map(tech => <li key={tech}>{tech}</li>)}
|
||||
</ul>
|
||||
</div>
|
||||
)
|
||||
|
||||
ProjectTechstack.propTypes = {
|
||||
techstack: PropTypes.array,
|
||||
}
|
||||
|
||||
export default ProjectTechstack
|
19
src/components/molecules/ProjectTechstack.scss
Normal file
19
src/components/molecules/ProjectTechstack.scss
Normal file
@ -0,0 +1,19 @@
|
||||
@import 'variables';
|
||||
|
||||
.project__techstack {
|
||||
ul {
|
||||
padding: 0;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
li {
|
||||
display: inline-block;
|
||||
padding: 0;
|
||||
flex: 0 0 (100% / 3);
|
||||
margin-bottom: $spacer;
|
||||
border-radius: 4rem;
|
||||
font-size: $font-size-small;
|
||||
}
|
||||
}
|
@ -1,5 +1,6 @@
|
||||
import React from 'react'
|
||||
import PropTypes from 'prop-types'
|
||||
import { OutboundLink } from 'gatsby-plugin-google-analytics'
|
||||
import { Twitter, GitHub, Facebook } from '../atoms/Icons'
|
||||
import './Social.scss'
|
||||
|
||||
@ -19,9 +20,9 @@ const Social = ({ meta }) => {
|
||||
return (
|
||||
<aside className="social">
|
||||
{Object.keys(social).map((key, i) => (
|
||||
<a className="social__link" href={social[key]} key={i} title={key}>
|
||||
<OutboundLink className="social__link" href={social[key]} key={i} title={key}>
|
||||
<SocialIcon title={key} />
|
||||
</a>
|
||||
</OutboundLink>
|
||||
))}
|
||||
</aside>
|
||||
)
|
||||
|
@ -20,6 +20,7 @@
|
||||
height: 1.35rem;
|
||||
box-shadow: 0 3px 5px rgba($brand-main, .1), 0 5px 16px rgba($brand-main, .1);
|
||||
border-radius: .25rem;
|
||||
transition-property: transform, background, box-shadow;
|
||||
|
||||
&:hover,
|
||||
&:focus {
|
||||
|
@ -4,6 +4,7 @@ import Helmet from 'react-helmet'
|
||||
import ReactMarkdown from 'react-markdown'
|
||||
import Content from '../atoms/Content'
|
||||
import FullWidth from '../atoms/FullWidth'
|
||||
import ProjectTechstack from '../molecules/ProjectTechstack'
|
||||
import ProjectLinks from '../molecules/ProjectLinks'
|
||||
import images from '../../images'
|
||||
import './Project.scss'
|
||||
@ -33,9 +34,9 @@ const Project = props => {
|
||||
<img className="project__image" src={images[img]} alt={title} />
|
||||
</FullWidth>
|
||||
|
||||
<FullWidth>
|
||||
{!!img_more &&
|
||||
img_more.map(key => (
|
||||
{!!img_more &&
|
||||
<FullWidth>
|
||||
{img_more.map(key => (
|
||||
<img
|
||||
key={key}
|
||||
className="project__image"
|
||||
@ -43,27 +44,12 @@ const Project = props => {
|
||||
alt={title}
|
||||
/>
|
||||
))}
|
||||
</FullWidth>
|
||||
</FullWidth>
|
||||
}
|
||||
|
||||
<footer className="project__meta">
|
||||
<div className="project__techstack">
|
||||
<h3 className="project__meta__title">
|
||||
Technologies <span>
|
||||
The tech stack I was involved with.
|
||||
</span>
|
||||
</h3>
|
||||
<ul>
|
||||
{!!techstack &&
|
||||
techstack.map(tech => <li key={tech}>{tech}</li>)}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div className="project__links">
|
||||
<h3 className="project__meta__title">
|
||||
Links <span>See the project live on the interwebz.</span>
|
||||
</h3>
|
||||
<ProjectLinks links={links} />
|
||||
</div>
|
||||
{!!techstack && <ProjectTechstack techstack={techstack} />}
|
||||
{!!links && <ProjectLinks links={links} />}
|
||||
</footer>
|
||||
</Content>
|
||||
</article>
|
||||
|
@ -32,24 +32,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
.project__techstack {
|
||||
ul {
|
||||
padding: 0;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
li {
|
||||
display: inline-block;
|
||||
padding: 0;
|
||||
flex: 0 0 (100% / 3);
|
||||
margin-bottom: $spacer;
|
||||
border-radius: 4rem;
|
||||
font-size: $font-size-small;
|
||||
}
|
||||
}
|
||||
|
||||
.project__meta__title {
|
||||
font-size: $font-size-h3;
|
||||
margin-bottom: $spacer * 1.5;
|
||||
|
@ -1,7 +1,6 @@
|
||||
import React from 'react'
|
||||
import PropTypes from 'prop-types'
|
||||
import Link from 'gatsby-link'
|
||||
import FadeIn from '../atoms/FadeIn'
|
||||
import images from '../../images'
|
||||
import './Projects.scss'
|
||||
|
||||
@ -9,13 +8,15 @@ const Projects = ({ data }) => {
|
||||
const projects = data.allProjectsJson.edges
|
||||
|
||||
return <div className="projects full-width">
|
||||
{projects.map(({ node }) => <FadeIn key={node.slug}>
|
||||
<Link key={node.slug} to={`/${node.slug}`} className="projects__project">
|
||||
<h1 className="projects__project__title">{node.title}</h1>
|
||||
{projects.map(({ node }) =>
|
||||
<Link
|
||||
key={node.slug}
|
||||
to={`/${node.slug}`}
|
||||
className="projects__project">
|
||||
|
||||
<img className="projects__project__image" src={images[node.img]} alt={node.title} />
|
||||
</Link>
|
||||
</FadeIn>)}
|
||||
<h1 className="projects__project__title">{node.title}</h1>
|
||||
<img className="projects__project__image" src={images[node.img]} alt={node.title} />
|
||||
</Link>)}
|
||||
</div>
|
||||
}
|
||||
|
||||
|
@ -7,7 +7,7 @@ import Footer from '../components/molecules/Footer'
|
||||
import './index.scss'
|
||||
|
||||
const TemplateWrapper = props => {
|
||||
const meta = props.data.allDataJson.edges[0].node
|
||||
const meta = props.data.allContentJson.edges[0].node
|
||||
|
||||
return <div className="app">
|
||||
<Head meta={meta} />
|
||||
@ -26,7 +26,7 @@ export default TemplateWrapper
|
||||
|
||||
export const query = graphql`
|
||||
query metaQuery {
|
||||
allDataJson {
|
||||
allContentJson {
|
||||
edges {
|
||||
node {
|
||||
title
|
||||
|
@ -77,7 +77,7 @@ h6 {
|
||||
a {
|
||||
color: $brand-cyan;
|
||||
text-decoration: none;
|
||||
transition: .2s ease-out;
|
||||
transition: color .2s ease-out;
|
||||
|
||||
&:hover,
|
||||
&:focus {
|
||||
|
Loading…
Reference in New Issue
Block a user