@ -1,16 +1,114 @@ |
|||||||
logs |
# Byte-compiled / optimized / DLL files |
||||||
|
__pycache__/ |
||||||
|
*.py[cod] |
||||||
|
*$py.class |
||||||
|
|
||||||
|
# C extensions |
||||||
|
*.so |
||||||
|
|
||||||
|
# Distribution / packaging |
||||||
|
.Python |
||||||
|
build/ |
||||||
|
develop-eggs/ |
||||||
|
dist/ |
||||||
|
downloads/ |
||||||
|
eggs/ |
||||||
|
.eggs/ |
||||||
|
lib/ |
||||||
|
lib64/ |
||||||
|
parts/ |
||||||
|
sdist/ |
||||||
|
var/ |
||||||
|
wheels/ |
||||||
|
*.egg-info/ |
||||||
|
.installed.cfg |
||||||
|
*.egg |
||||||
|
|
||||||
|
# PyInstaller |
||||||
|
# Usually these files are written by a python script from a template |
||||||
|
# before PyInstaller builds the exe, so as to inject date/other infos into it. |
||||||
|
*.manifest |
||||||
|
*.spec |
||||||
|
|
||||||
|
# Installer logs |
||||||
|
pip-log.txt |
||||||
|
pip-delete-this-directory.txt |
||||||
|
|
||||||
|
# Unit test / coverage reports |
||||||
|
htmlcov/ |
||||||
|
.tox/ |
||||||
|
.coverage |
||||||
|
.coverage.* |
||||||
|
.cache |
||||||
|
nosetests.xml |
||||||
|
coverage.xml |
||||||
|
*.cover |
||||||
|
.hypothesis/ |
||||||
|
|
||||||
|
# Translations |
||||||
|
*.mo |
||||||
|
*.pot |
||||||
|
|
||||||
|
# Django stuff: |
||||||
*.log |
*.log |
||||||
npm-debug.log* |
local_settings.py |
||||||
yarn-debug.log* |
|
||||||
yarn-error.log* |
# Flask stuff: |
||||||
.DS_Store |
instance/ |
||||||
|
.webassets-cache |
||||||
coverage |
|
||||||
node_modules |
# Scrapy stuff: |
||||||
build |
.scrapy |
||||||
.env.local |
|
||||||
.env.development.local |
# Sphinx documentation |
||||||
.env.test.local |
docs/_build/ |
||||||
.env.production.local |
|
||||||
|
# PyBuilder |
||||||
|
target/ |
||||||
|
|
||||||
|
# Jupyter Notebook |
||||||
|
.ipynb_checkpoints |
||||||
|
|
||||||
|
# pyenv |
||||||
|
.python-version |
||||||
|
|
||||||
|
# celery beat schedule file |
||||||
|
celerybeat-schedule |
||||||
|
|
||||||
|
# SageMath parsed files |
||||||
|
*.sage.py |
||||||
|
|
||||||
|
# Environments |
||||||
|
.env |
||||||
|
.venv |
||||||
|
env/ |
||||||
|
venv/ |
||||||
|
ENV/ |
||||||
|
|
||||||
|
# Spyder project settings |
||||||
|
.spyderproject |
||||||
|
.spyproject |
||||||
|
|
||||||
|
# Rope project settings |
||||||
|
.ropeproject |
||||||
|
|
||||||
|
# mkdocs documentation |
||||||
|
/site |
||||||
|
|
||||||
|
# mypy |
||||||
|
.mypy_cache/ |
||||||
|
|
||||||
|
# Editor |
||||||
*.swp |
*.swp |
||||||
*.swo |
*.swo |
||||||
|
|
||||||
|
# DB |
||||||
|
db.sqlite3 |
||||||
|
|
||||||
|
# Test mount |
||||||
|
test/ |
||||||
|
|
||||||
|
# VS Code |
||||||
|
.vscode/ |
||||||
|
|
||||||
|
output/ |
||||||
|
@ -0,0 +1,5 @@ |
|||||||
|
Title: My First Review |
||||||
|
Date: 2010-12-03 10:20 |
||||||
|
Category: Review |
||||||
|
|
||||||
|
Following is a review of my favorite mechanical keyboard. |
@ -1,18 +0,0 @@ |
|||||||
{ |
|
||||||
"name": "my-razzle-app", |
|
||||||
"version": "2.0.0-alpha.8", |
|
||||||
"license": "MIT", |
|
||||||
"scripts": { |
|
||||||
"start": "razzle start", |
|
||||||
"build": "razzle build", |
|
||||||
"test": "razzle test --env=jsdom", |
|
||||||
"start:prod": "NODE_ENV=production node build/server.js" |
|
||||||
}, |
|
||||||
"dependencies": { |
|
||||||
"express": "^4.16.3", |
|
||||||
"razzle": "^2.2.0", |
|
||||||
"react": "^16.4.1", |
|
||||||
"react-dom": "^16.4.1", |
|
||||||
"react-router-dom": "^4.3.1" |
|
||||||
} |
|
||||||
} |
|
@ -0,0 +1,35 @@ |
|||||||
|
#!/usr/bin/env python |
||||||
|
# -*- coding: utf-8 -*- # |
||||||
|
from __future__ import unicode_literals |
||||||
|
|
||||||
|
AUTHOR = 'Tanner' |
||||||
|
SITENAME = 'Tanner Collin' |
||||||
|
SITEURL = '' |
||||||
|
|
||||||
|
PATH = 'content' |
||||||
|
|
||||||
|
TIMEZONE = 'Canada/Mountain' |
||||||
|
|
||||||
|
DEFAULT_LANG = 'en' |
||||||
|
|
||||||
|
# Feed generation is usually not desired when developing |
||||||
|
FEED_ALL_ATOM = None |
||||||
|
CATEGORY_FEED_ATOM = None |
||||||
|
TRANSLATION_FEED_ATOM = None |
||||||
|
AUTHOR_FEED_ATOM = None |
||||||
|
AUTHOR_FEED_RSS = None |
||||||
|
|
||||||
|
# Blogroll |
||||||
|
LINKS = (('Pelican', 'http://getpelican.com/'), |
||||||
|
('Python.org', 'http://python.org/'), |
||||||
|
('Jinja2', 'http://jinja.pocoo.org/'), |
||||||
|
('You can modify those links in your config file', '#'),) |
||||||
|
|
||||||
|
# Social widget |
||||||
|
SOCIAL = (('You can add links in your config file', '#'), |
||||||
|
('Another social link', '#'),) |
||||||
|
|
||||||
|
DEFAULT_PAGINATION = False |
||||||
|
|
||||||
|
# Uncomment following line if you want document-relative URLs when developing |
||||||
|
#RELATIVE_URLS = True |
Before Width: | Height: | Size: 32 KiB |
@ -1,48 +0,0 @@ |
|||||||
/* http://meyerweb.com/eric/tools/css/reset/ |
|
||||||
v2.0 | 20110126 |
|
||||||
License: none (public domain) |
|
||||||
*/ |
|
||||||
|
|
||||||
html, body, div, span, applet, object, iframe, |
|
||||||
h1, h2, h3, h4, h5, h6, p, blockquote, pre, |
|
||||||
a, abbr, acronym, address, big, cite, code, |
|
||||||
del, dfn, em, img, ins, kbd, q, s, samp, |
|
||||||
small, strike, strong, sub, sup, tt, var, |
|
||||||
b, u, i, center, |
|
||||||
dl, dt, dd, ol, ul, li, |
|
||||||
fieldset, form, label, legend, |
|
||||||
table, caption, tbody, tfoot, thead, tr, th, td, |
|
||||||
article, aside, canvas, details, embed, |
|
||||||
figure, figcaption, footer, header, hgroup, |
|
||||||
menu, nav, output, ruby, section, summary, |
|
||||||
time, mark, audio, video { |
|
||||||
margin: 0; |
|
||||||
padding: 0; |
|
||||||
border: 0; |
|
||||||
font-size: 100%; |
|
||||||
font: inherit; |
|
||||||
vertical-align: baseline; |
|
||||||
} |
|
||||||
/* HTML5 display-role reset for older browsers */ |
|
||||||
article, aside, details, figcaption, figure, |
|
||||||
footer, header, hgroup, menu, nav, section { |
|
||||||
display: block; |
|
||||||
} |
|
||||||
body { |
|
||||||
line-height: 1; |
|
||||||
} |
|
||||||
ol, ul { |
|
||||||
list-style: none; |
|
||||||
} |
|
||||||
blockquote, q { |
|
||||||
quotes: none; |
|
||||||
} |
|
||||||
blockquote:before, blockquote:after, |
|
||||||
q:before, q:after { |
|
||||||
content: ''; |
|
||||||
content: none; |
|
||||||
} |
|
||||||
table { |
|
||||||
border-collapse: collapse; |
|
||||||
border-spacing: 0; |
|
||||||
} |
|
@ -1,2 +0,0 @@ |
|||||||
User-agent: * |
|
||||||
|
|
@ -0,0 +1,25 @@ |
|||||||
|
#!/usr/bin/env python |
||||||
|
# -*- coding: utf-8 -*- # |
||||||
|
from __future__ import unicode_literals |
||||||
|
|
||||||
|
# This file is only used if you use `make publish` or |
||||||
|
# explicitly specify it as your config file. |
||||||
|
|
||||||
|
import os |
||||||
|
import sys |
||||||
|
sys.path.append(os.curdir) |
||||||
|
from pelicanconf import * |
||||||
|
|
||||||
|
# If your site is available via HTTPS, make sure SITEURL begins with https:// |
||||||
|
SITEURL = '' |
||||||
|
RELATIVE_URLS = False |
||||||
|
|
||||||
|
FEED_ALL_ATOM = 'feeds/all.atom.xml' |
||||||
|
CATEGORY_FEED_ATOM = 'feeds/{slug}.atom.xml' |
||||||
|
|
||||||
|
DELETE_OUTPUT_DIRECTORY = True |
||||||
|
|
||||||
|
# Following items are often useful when publishing |
||||||
|
|
||||||
|
#DISQUS_SITENAME = "" |
||||||
|
#GOOGLE_ANALYTICS = "" |
@ -1,11 +0,0 @@ |
|||||||
* { |
|
||||||
box-sizing: border-box; |
|
||||||
} |
|
||||||
|
|
||||||
body { |
|
||||||
line-height: 1.6; |
|
||||||
font-size: 1.25rem; |
|
||||||
font-family: 'Open Sans', sans-serif; |
|
||||||
color: #333; |
|
||||||
background-color: #F9F9F9; |
|
||||||
} |
|
@ -1,13 +0,0 @@ |
|||||||
import React from 'react'; |
|
||||||
import Route from 'react-router-dom/Route'; |
|
||||||
import Switch from 'react-router-dom/Switch'; |
|
||||||
import Home from './Home'; |
|
||||||
import './App.css'; |
|
||||||
|
|
||||||
const App = () => ( |
|
||||||
<Switch> |
|
||||||
<Route exact path='/' component={Home} /> |
|
||||||
</Switch> |
|
||||||
); |
|
||||||
|
|
||||||
export default App; |
|
@ -1,176 +0,0 @@ |
|||||||
.grid-container { |
|
||||||
text-align: center; |
|
||||||
max-width: 120rem; |
|
||||||
margin: 0 auto; |
|
||||||
} |
|
||||||
|
|
||||||
.grid-item { |
|
||||||
position: relative; |
|
||||||
|
|
||||||
float: left; |
|
||||||
|
|
||||||
width: 30rem; |
|
||||||
min-width: 25rem; |
|
||||||
min-height: 25rem; |
|
||||||
padding-bottom: 30rem; |
|
||||||
} |
|
||||||
|
|
||||||
.grid-item-content { |
|
||||||
position: absolute; |
|
||||||
width: 100%; |
|
||||||
height: 100%; |
|
||||||
padding: 1rem; |
|
||||||
} |
|
||||||
|
|
||||||
.menu { |
|
||||||
display: flex; |
|
||||||
flex-flow: column; |
|
||||||
} |
|
||||||
|
|
||||||
.menu .logo { |
|
||||||
background-color: #E9E9E9; |
|
||||||
object-fit: contain; |
|
||||||
padding-top: 1em; |
|
||||||
min-height: 5rem; |
|
||||||
} |
|
||||||
|
|
||||||
.menu section { |
|
||||||
background-color: #E9E9E9; |
|
||||||
flex: 1; |
|
||||||
} |
|
||||||
|
|
||||||
.menu section aside { |
|
||||||
} |
|
||||||
|
|
||||||
.menu section .fuckcss { |
|
||||||
position: relative; |
|
||||||
height: 100%; |
|
||||||
} |
|
||||||
|
|
||||||
.menu section img { |
|
||||||
max-height: 100%; |
|
||||||
width: auto; |
|
||||||
} |
|
||||||
|
|
||||||
.menu footer { |
|
||||||
background-color: #E9E9E9; |
|
||||||
padding-bottom: 1rem; |
|
||||||
} |
|
||||||
|
|
||||||
.project { |
|
||||||
display: flex; |
|
||||||
flex-flow: column; |
|
||||||
} |
|
||||||
|
|
||||||
.project header { |
|
||||||
font-size: 2rem; |
|
||||||
line-height: 1.2; |
|
||||||
} |
|
||||||
|
|
||||||
.project section { |
|
||||||
min-height: 0; |
|
||||||
flex: 1; |
|
||||||
} |
|
||||||
|
|
||||||
.project.bottom section { |
|
||||||
flex-flow: column; |
|
||||||
display: flex; |
|
||||||
} |
|
||||||
|
|
||||||
.project.left section p { |
|
||||||
position: relative; |
|
||||||
top: 50%; |
|
||||||
transform: translateY(-50%); |
|
||||||
} |
|
||||||
|
|
||||||
.project.left section img { |
|
||||||
height: 100%; |
|
||||||
float: right; |
|
||||||
padding: 1rem; |
|
||||||
} |
|
||||||
|
|
||||||
.project.bottom section p { |
|
||||||
margin-bottom: 1rem; |
|
||||||
} |
|
||||||
|
|
||||||
.project.bottom section img { |
|
||||||
object-fit: contain; |
|
||||||
min-height: 0; |
|
||||||
padding: 1rem; |
|
||||||
} |
|
||||||
|
|
||||||
.photo a { |
|
||||||
display: block; |
|
||||||
position: relative; |
|
||||||
height: 100%; |
|
||||||
} |
|
||||||
|
|
||||||
.photo header { |
|
||||||
display: none; |
|
||||||
position: absolute; |
|
||||||
width: 100%; |
|
||||||
z-index: 2; |
|
||||||
|
|
||||||
background: rgba(0, 0, 0, 0.4); |
|
||||||
color: white; |
|
||||||
} |
|
||||||
|
|
||||||
.photo header { |
|
||||||
top: 0; |
|
||||||
font-size: 1.5rem; |
|
||||||
padding: 0.5rem; |
|
||||||
} |
|
||||||
|
|
||||||
.photo a:hover header { |
|
||||||
display: block; |
|
||||||
} |
|
||||||
|
|
||||||
.photo img { |
|
||||||
position: absolute; |
|
||||||
height: 100%; |
|
||||||
left: 0; |
|
||||||
} |
|
||||||
|
|
||||||
@media all and (max-width: 120rem) { |
|
||||||
.grid-item { |
|
||||||
width: 25%; |
|
||||||
padding-bottom: 25% |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
@media all and (max-width: 102rem) { |
|
||||||
.grid-item { |
|
||||||
width: 33.33%; |
|
||||||
padding-bottom: 33.33%; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
@media all and (max-width: 76.5rem) { |
|
||||||
.grid-container { |
|
||||||
max-width: 68rem; |
|
||||||
} |
|
||||||
.grid-item { |
|
||||||
width: 50%; |
|
||||||
padding-bottom: 50%; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
@media all and (max-width: 51rem) { |
|
||||||
.grid-container { |
|
||||||
max-width: 34rem; |
|
||||||
} |
|
||||||
.grid-item { |
|
||||||
width: 100%; |
|
||||||
padding-bottom: 100%; |
|
||||||
margin-bottom: 1rem; |
|
||||||
} |
|
||||||
.menu { |
|
||||||
background-color: #E9E9E9; |
|
||||||
} |
|
||||||
.grid-item-content.photo { |
|
||||||
padding: 0; |
|
||||||
} |
|
||||||
.photo a header { |
|
||||||
display: block; |
|
||||||
} |
|
||||||
} |
|
@ -1,95 +0,0 @@ |
|||||||
import React from 'react'; |
|
||||||
import './Grid.css'; |
|
||||||
|
|
||||||
import logo from './logo.png'; |
|
||||||
import GridItem from './GridItem'; |
|
||||||
|
|
||||||
import tanner from './tanner.jpg'; |
|
||||||
import dress1 from './dress1.jpg'; |
|
||||||
import switch1 from './switch1.jpg'; |
|
||||||
import pump1 from './pump1.jpg'; |
|
||||||
import hand1 from './hand1.jpg'; |
|
||||||
|
|
||||||
import banff1 from './banff1.jpg'; |
|
||||||
import bee1 from './bee1.jpg'; |
|
||||||
import canmore1 from './canmore1.jpg'; |
|
||||||
import carshow1 from './carshow1.jpg'; |
|
||||||
|
|
||||||
//function importAll(r) {
|
|
||||||
// return r.keys().map(x => r(x));
|
|
||||||
//}
|
|
||||||
|
|
||||||
//const images = importAll(require.context('./images'));
|
|
||||||
|
|
||||||
|
|
||||||
class Grid extends React.Component { |
|
||||||
render() { |
|
||||||
return ( |
|
||||||
<div className='grid-container'> |
|
||||||
<GridItem type='menu'> |
|
||||||
<img src={logo} className='logo' alt='' /> |
|
||||||
<section> |
|
||||||
<div className='fuckcss'> |
|
||||||
<img src={tanner} alt='' /> |
|
||||||
</div> |
|
||||||
</section> |
|
||||||
<footer>More info or a .onion link.</footer> |
|
||||||
</GridItem> |
|
||||||
<GridItem type='project left'> |
|
||||||
<header>LED Dress</header> |
|
||||||
<section> |
|
||||||
<img src={dress1} alt='' /> |
|
||||||
<p>A dress lit up with LEDs that act as twinkling stars. Seven act as The Big Dipper, and the rest twinkle randomly.</p> |
|
||||||
</section> |
|
||||||
</GridItem> |
|
||||||
<GridItem type='photo'> |
|
||||||
<a> |
|
||||||
<header>Thorncliffe Car Show</header> |
|
||||||
<img src={carshow1} alt='' /> |
|
||||||
</a> |
|
||||||
</GridItem> |
|
||||||
<GridItem type='project bottom'> |
|
||||||
<header>Remote Control Lightswitch</header> |
|
||||||
<section> |
|
||||||
<img src={switch1} alt='' /> |
|
||||||
<p>Custom circuit that lets me control a ceiling light over Wifi.</p> |
|
||||||
</section> |
|
||||||
</GridItem> |
|
||||||
<GridItem type='project bottom'> |
|
||||||
<header>Plant Waterer</header> |
|
||||||
<section> |
|
||||||
<img src={pump1} alt='' /> |
|
||||||
<p>Controller that waters my plant automatically every day.</p> |
|
||||||
</section> |
|
||||||
</GridItem> |
|
||||||
<GridItem type='photo'> |
|
||||||
<a> |
|
||||||
<header>Prince's Island Park</header> |
|
||||||
<img src={bee1} alt='' /> |
|
||||||
</a> |
|
||||||
</GridItem> |
|
||||||
<GridItem type='photo'> |
|
||||||
<a> |
|
||||||
<header>Johnston Creek, Banff</header> |
|
||||||
<img src={banff1} alt='' /> |
|
||||||
</a> |
|
||||||
</GridItem> |
|
||||||
<GridItem type='project left'> |
|
||||||
<header>Hand of Ozymandias</header> |
|
||||||
<section> |
|
||||||
<img src={hand1} alt='' /> |
|
||||||
<p>Sculpture welded together out of scrap metal for practice.</p> |
|
||||||
</section> |
|
||||||
</GridItem> |
|
||||||
<GridItem type='photo'> |
|
||||||
<a> |
|
||||||
<header>VW Van in Canmore</header> |
|
||||||
<img src={canmore1} alt='' /> |
|
||||||
</a> |
|
||||||
</GridItem> |
|
||||||
</div> |
|
||||||
); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
export default Grid; |
|
@ -1,15 +0,0 @@ |
|||||||
import React from 'react'; |
|
||||||
|
|
||||||
class GridItem extends React.Component { |
|
||||||
render() { |
|
||||||
return ( |
|
||||||
<div className='grid-item'> |
|
||||||
<div className={'grid-item-content ' + this.props.type}> |
|
||||||
{this.props.children} |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
export default GridItem; |
|
@ -1,16 +0,0 @@ |
|||||||
import React from 'react'; |
|
||||||
import './Home.css'; |
|
||||||
|
|
||||||
import Grid from './Grid'; |
|
||||||
|
|
||||||
class Home extends React.Component { |
|
||||||
render() { |
|
||||||
return ( |
|
||||||
<div className='Home'> |
|
||||||
<Grid /> |
|
||||||
</div> |
|
||||||
); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
export default Home; |
|
Before Width: | Height: | Size: 565 KiB |
Before Width: | Height: | Size: 220 KiB |
Before Width: | Height: | Size: 301 KiB |
Before Width: | Height: | Size: 371 KiB |
@ -1,15 +0,0 @@ |
|||||||
import App from './App'; |
|
||||||
import BrowserRouter from 'react-router-dom/BrowserRouter'; |
|
||||||
import React from 'react'; |
|
||||||
import { hydrate } from 'react-dom'; |
|
||||||
|
|
||||||
hydrate( |
|
||||||
<BrowserRouter> |
|
||||||
<App /> |
|
||||||
</BrowserRouter>, |
|
||||||
document.getElementById('root') |
|
||||||
); |
|
||||||
|
|
||||||
if (module.hot) { |
|
||||||
module.hot.accept(); |
|
||||||
} |
|
Before Width: | Height: | Size: 1.1 MiB |
Before Width: | Height: | Size: 1.1 MiB |
@ -1,26 +0,0 @@ |
|||||||
import app from './server'; |
|
||||||
import http from 'http'; |
|
||||||
|
|
||||||
const server = http.createServer(app); |
|
||||||
|
|
||||||
let currentApp = app; |
|
||||||
|
|
||||||
server.listen(process.env.PORT || 3000, error => { |
|
||||||
if (error) { |
|
||||||
console.log(error); |
|
||||||
} |
|
||||||
|
|
||||||
console.log('🚀 started'); |
|
||||||
}); |
|
||||||
|
|
||||||
if (module.hot) { |
|
||||||
console.log('✅ Server-side HMR Enabled!'); |
|
||||||
|
|
||||||
module.hot.accept('./server', () => { |
|
||||||
console.log('🔁 HMR Reloading `./server`...'); |
|
||||||
server.removeListener('request', currentApp); |
|
||||||
const newApp = require('./server').default; |
|
||||||
server.on('request', newApp); |
|
||||||
currentApp = newApp; |
|
||||||
}); |
|
||||||
} |
|
Before Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 1.2 MiB |
@ -1,53 +0,0 @@ |
|||||||
import App from './App'; |
|
||||||
import React from 'react'; |
|
||||||
import { StaticRouter } from 'react-router-dom'; |
|
||||||
import express from 'express'; |
|
||||||
import { renderToString } from 'react-dom/server'; |
|
||||||
|
|
||||||
const assets = require(process.env.RAZZLE_ASSETS_MANIFEST); |
|
||||||
|
|
||||||
const server = express(); |
|
||||||
server |
|
||||||
.disable('x-powered-by') |
|
||||||
.use(express.static(process.env.RAZZLE_PUBLIC_DIR)) |
|
||||||
.get('/*', (req, res) => { |
|
||||||
const context = {}; |
|
||||||
const markup = renderToString( |
|
||||||
<StaticRouter context={context} location={req.url}> |
|
||||||
<App /> |
|
||||||
</StaticRouter> |
|
||||||
); |
|
||||||
|
|
||||||
if (context.url) { |
|
||||||
res.redirect(context.url); |
|
||||||
} else { |
|
||||||
res.status(200).send( |
|
||||||
`<!doctype html>
|
|
||||||
<html lang=""> |
|
||||||
<head> |
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" /> |
|
||||||
<meta charset="utf-8" /> |
|
||||||
<title>Tanner Collin</title> |
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1"> |
|
||||||
<link rel="stylesheet" href="reset.css"> |
|
||||||
<link href="https://fonts.googleapis.com/css?family=Open+Sans" rel="stylesheet"> |
|
||||||
${ |
|
||||||
assets.client.css |
|
||||||
? `<link rel="stylesheet" href="${assets.client.css}">` |
|
||||||
: '' |
|
||||||
} |
|
||||||
${ |
|
||||||
process.env.NODE_ENV === 'production' |
|
||||||
? `<script src="${assets.client.js}" defer></script>` |
|
||||||
: `<script src="${assets.client.js}" defer crossorigin></script>` |
|
||||||
} |
|
||||||
</head> |
|
||||||
<body> |
|
||||||
<div id="root">${markup}</div> |
|
||||||
</body> |
|
||||||
</html>` |
|
||||||
); |
|
||||||
} |
|
||||||
}); |
|
||||||
|
|
||||||
export default server; |
|
Before Width: | Height: | Size: 848 KiB |
Before Width: | Height: | Size: 324 KiB |