Working on cs

This commit is contained in:
Max Fowler 2019-12-19 23:31:26 -05:00
parent 9c3b1d949e
commit 69e40fc773
23 changed files with 296 additions and 1624 deletions

View File

@ -0,0 +1,23 @@
import React from 'react'
import Link from 'gatsby-link'
import Helmet from "react-helmet";
var classNames = require('classnames')
const CSHelmet = (props) => {
return (
<Helmet
title="canalswans.info"
meta={[
{name: 'description', content: 'Canal Swans'},
{name: 'keywords', content: 'freelance, art'},
]}
bodyAttributes={{
class: props.mood
}}>
<link href="https://fonts.googleapis.com/css?family=Roboto+Mono" rel="stylesheet"/>
<link rel="icon" href="/img/favico.ico" type="image/x-icon"/>
</Helmet>
)
}
export default CSHelmet

View File

@ -1,73 +0,0 @@
import React from 'react'
import Slider from 'react-slick'
import Link from 'gatsby-link'
class Carousel extends React.Component {
constructor() {
super();
this.handleBeforeChange = this.handleBeforeChange.bind(this);
}
componentDidMount() {
}
handleBeforeChange(oldIndex, newIndex) {
this.refs.carouselFocus.slickGoTo(newIndex);
}
render = () => {
var imagesString = this.props.imagesString;
var images = [];
if (imagesString) {
images = imagesString.split(',')
}
else {
images = this.props.images;
}
var focusSettings = {
slidesToShow: 1,
slidesToScroll: 1,
arrows: false,
fade: true,
className: `carousel-focus ${this.props.carouselName}-focus`,
}
var thumbnailSettings = {
slidesToShow: images.length,
slidesToScroll: 1,
dots: false,
focusOnSelect: true,
arrows: false,
adaptiveHeight: true,
beforeChange: this.handleBeforeChange,
variableWidth: true,
asNavFor: this.refs.carouselFocus,
className: `carousel-thumbnails ${this.props.carouselName}-thumbnails`
}
return (
<div className="carousel-inner-wrapper">
<Slider {...focusSettings} ref="carouselFocus">
{images.map(function (imgLink, i) {
return (
<div className="img-container">
<img className="carousel-thumbnail" src={imgLink}/>
</div>
)
})}
</Slider>
<Slider {...thumbnailSettings} ref="carouselThumbnails">
{images.map(function (imgLink, i) {
return (
<div className="img-container">
<img className="carousel-thumbnail" src={imgLink}/>
</div>
)
})}
</Slider>
</div>
)
}
}
export default Carousel

View File

@ -1,26 +0,0 @@
import React from 'react'
import Link from 'gatsby-link'
var classNames = require('classnames')
const Filler = () => {
return (
<div className="filler">
<div>
<p> test 100 </p>
<p>Welcome to your new Gatsby site.</p>
<p>Now go build something great.</p>
<p>
<Link to="/page-2/">Go to page 2</Link>
</p>
<p>
<Link to="/page-2/">Go to page 2</Link>
</p>
<p>Now go build something great.</p>
<p>Welcome to your new Gatsby site.</p>
<p> test 100 </p>
</div>
</div>
)
}
export default Filler

View File

@ -1,8 +1,6 @@
import React from 'react'
import Link from 'gatsby-link'
import Filler from './Filler.js'
import SLink from "./SLink";
var classNames = require('classnames')
const Footer = ({reversed}) => {
return (

View File

@ -1,44 +1,39 @@
import React from 'react'
import Link from 'gatsby-link'
import Filler from './Filler.js'
import SLink from "./SLink";
var classNames = require('classnames')
const Header = ({reversed}) => {
const MoodButton = ({mood, currentMood, handleMoodClick}) => {
var classes = classNames({
'navbar': true,
'overlaid': true,
'reversed': reversed
'mood-button': true,
'clicked': mood === currentMood
});
return (
<div className={classes}>
<div className="myname">
<Link to="/">MAX FOWLER </Link>
<a className={classes} onClick={handleMoodClick.bind(this, mood)}>{mood}</a>
)
}
const Header = (props) => {
return (
<header>
<div className="header-left">
<div className="click-your-mood"> click your mood:</div>
<MoodButton mood="standard" currentMood={props.mood} handleMoodClick={props.handleMoodClick} />
<MoodButton mood="asmr" currentMood={props.mood} handleMoodClick={props.handleMoodClick} />
<MoodButton mood="sponsored" currentMood={props.mood} handleMoodClick={props.handleMoodClick} />
<MoodButton mood="test" currentMood={props.mood} handleMoodClick={props.handleMoodClick} />
</div>
<div className="navlinks">
<div className="navlink">
<Link to="/about">about</Link>
</div>
<div className="navlink">
<Link to="/">work </Link>
</div>
<div className="navlink">
<a href="http://twitter.com/notplants">twitter </a>
</div>
<div className="navlink">
<a href="http://github.com/mhfowler">github </a>
</div>
<div className="navlink">
<Link to="/notes">notes </Link>
</div>
<div className="navlink last-navlink">
<Link to="/contact">contact </Link>
<div className="header-center">
Canal Swans
</div>
<div className="header-right">
<div>
<SLink className="hlink" to='/about'>about</SLink>
<SLink className="hlink" to='/essays'>essays</SLink>
<SLink className="hlink" to='/zines'>zines</SLink>
</div>
</div>
<div className="filler-wrapper">
<Filler/>
<Filler/>
</div>
</div>
</header>
)
}

View File

@ -1,69 +0,0 @@
import React from 'react'
import SLink from './SLink.js'
class SubscribePage extends React.Component {
constructor(props) {
super(props);
this.state = {
emailValue: '',
};
}
componentDidMount(){
this.emailInput.focus();
}
render() {
return (
<form action="https://mfowler.us17.list-manage.com/subscribe/post" method="POST" target="blank" noValidate>
<input type="hidden" name="u" value="6c6d8e78103fbc8ddebf845a3"/>
<input type="hidden" name="id" value="b1b22a6281"/>
<label htmlFor='MERGE0'>
Enter your email:
<input
ref={(input) => { this.emailInput = input; }}
type="email"
className="email-input"
name="EMAIL"
id="MERGE0"
value={this.state.emailValue}
onChange={ (e)=>{this.setState({emailValue: e.target.value});} }
autoCapitalize="off"
autoCorrect="off"
/>
</label>
<input type="submit" value="Subscribe" name="subscribe" id="mc-embedded-subscribe" className="button"/>
<div style={{position: 'absolute', left: '-5000px'}} aria-hidden='true' aria-label="Please leave the following three fields empty">
<label htmlFor="b_name">Name: </label>
<input type="text" name="b_name" tabIndex="-1" value="" placeholder="Freddie" id="b_name"/>
<label htmlFor="b_email">Email: </label>
<input type="email" name="b_email" tabIndex="-1" value="" placeholder="youremail@gmail.com" id="b_email"/>
<label htmlFor="b_comment">Comment: </label>
<textarea name="b_comment" tabIndex="-1" placeholder="Please comment" id="b_comment"></textarea>
</div>
</form>
)
}
}
const Newsletter = () => {
return (
<div className="newsletter">
<img src="/mfowler/img/peaceful.jpg" className="no-mobile" style={{width: "300px", "float": "left", "margin-right": "80px"}} />
<div className="form-holder">
<p style={{"margin-bottom": "15px"}}>
A mailing list of <a href="http://twitter.com/notplants">@notplants</a>.
</p>
<div className="mc-field-group">
<SubscribePage/>
</div>
</div>
</div>
)
}
export default Newsletter

View File

@ -1,29 +0,0 @@
import React from 'react'
import SLink from './SLink.js'
import Img from "gatsby-image"
var classNames = require('classnames')
const Project = ({project_link, project_image, project_title, project_tags, project_snippet}) => {
return (
<div className="project-wrapper overlaid">
<SLink to={project_link} className="project-image-wrapper">
<img className="project-image" src={project_image}/>
</SLink>
<div className="project-description">
<SLink className="project-title" to={project_link}>
{project_title}
</SLink>
<div className="project-tags">
{project_tags}
</div>
<div className="project-snippet">
{project_snippet}
</div>
</div>
</div>
)
}
export default Project

View File

@ -1,128 +0,0 @@
import React from 'react'
import Link from 'gatsby-link'
import Project from './Project'
import SimpleSite from './SimpleSite.js'
var classNames = require('classnames')
const Projects = () => {
return (
<div>
<SimpleSite/>
<div className="projects-wrapper">
<Project
project_title="What's On Your Mind?"
project_image="/mfowler/img/thumbnails/woym-notebook.png"
project_snippet="facebook statuses from the week after November 9th, 2016"
project_tags="website, zine, reading"
project_link="/work/whats-on-your-mind"
/>
<Project
project_title="Open Source Feeds"
project_image="/mfowler/img/thumbnails/4-graphs.png"
project_snippet="a workshop to create your own feed algorithm"
project_tags="workshop, mac application"
project_linktest="https://pioneerworks.org/classes/open-source-feeds/"
project_link="https://pioneerworks.org/classes/open-source-feeds/"
/>
<Project
project_title="Infinite Wishing"
project_image="/mfowler/img/thumbnails/iw-above.png"
project_snippet='a wishing well'
project_tags="installation, receipt printer"
project_link="/work/infinite-wishing"
/>
<Project
project_title="Looking Glass"
project_image="/mfowler/img/thumbnails/lg-test.png"
project_snippet="a broken mirror"
project_tags="installation, projection mapping"
project_link="/work/looking-glass"
/>
<Project
project_title="Abridged Maps"
project_image="/mfowler/img/thumbnails/abridged1.png"
project_snippet="a twitter bot that strips Google Maps of all natural imagery"
project_tags="website, twitter bot"
project_link="http://mfowler.info/abridgedmaps/index.html"
/>
<Project
project_title="2 Pots"
project_image="/mfowler/img/thumbnails/2pots1.png"
project_snippet="a series of generative line drawings"
project_tags="installation, open frameworks, arduino"
project_link="/work/2pots"
/>
<Project
project_title="Oasis"
project_image="/mfowler/img/thumbnails/oasis.png"
project_snippet="a virtual reality commune only accessible by SSH"
project_tags="installation, website, raspberry pi"
project_link="/work/oasis"
/>
<Project
project_title="Memory Prosthetics"
project_image="/mfowler/img/floppy_disk.jpg"
project_snippet="what systems and thought-processes do you use to store & organize files/links/media?"
project_tags="website"
project_link="http://memoryprosthetics.net"
/>
<Project
project_title="HowDoISpeak"
project_snippet="a website which shows you insights about the way you text by analyzing your word usage in your text messages"
project_tags="website"
project_image="/mfowler/img/thumbnails/hdis.png"
project_link="http://howdoispeak.com"
/>
<Project
project_title="TrueSpeak"
project_snippet="an app that allows you to upload your text message history to a publicly viewable page on the internet"
project_tags="website"
project_image="/mfowler/img/thumbnails/truespeak.png"
project_link="http://brocascoconut.com/truespeak/"
/>
<Project
project_title="The Capitalist T-Shirt"
project_snippet="an e-commerce store which sells t-shirts, framed prints and booty shorts"
project_tags="website"
project_image="/mfowler/img/thumbnails/capitalist.png"
project_link="http://brocascoconut.com/the_capitalist_tshirt/"
/>
<Project
project_title="CSS Sketchbook"
project_snippet="experiments in css"
project_tags="website"
project_image="/mfowler/img/thumbnails/post-content.png"
project_link="http://mhfowler.github.io"
/>
</div>
</div>
)
}
export default Projects

View File

@ -1,120 +0,0 @@
import React from 'react'
import SLink from './SLink.js'
const SimpleSite = () => {
return (
<div className="simple-site">
<div className="about-line" style={{"marginTop": "20px"}}>
Max Fowler is an artist, programmer and organizer living in Berlin
who makes websites and interactive installations.
View his <SLink to="/about">cv</SLink>, sign up for his <SLink to="/mail">newsletter</SLink>, or <a href="mailto:maxhfowler@gmail.com">send him an email</a>.
</div>
<div className="simple-list">
<div className="list-of-projects">
<div className="simple-wrapper">
<div className="simple-title">
<SLink to="/work/whats-on-your-mind">What's On Your Mind?</SLink>
</div>
<div className="simple-description">
a collection of facebook statuses from the week after November 9th, 2016
</div>
</div>
<div className="simple-wrapper">
<div className="simple-title">
<SLink to="/work/open-source-feeds">Open Source Feeds</SLink>
</div>
<div className="simple-description">
a workshop to make your own feed algorithm
</div>
</div>
<div className="simple-wrapper">
<div className="simple-title">
<SLink to="/work/infinite-wishing">Infinite Wishing</SLink>
</div>
<div className="simple-description">
a hopeful receipt printer
</div>
</div>
<div className="simple-wrapper">
<div className="simple-title">
<SLink to="/work/looking-glass">Looking Glass</SLink>
</div>
<div className="simple-description">
a projection onto a broken mirror
</div>
</div>
<div className="simple-wrapper">
<div className="simple-title">
<SLink to="/work/oasis">Oasis</SLink>
</div>
<div className="simple-description">
a virtual reality commune only acessible by SSH
</div>
</div>
<div className="simple-wrapper">
<div className="simple-title">
<SLink to="/work/2pots">2 pots</SLink>
</div>
<div className="simple-description">
a series of generative lines drawings exploring controlled noise
</div>
</div>
<div className="simple-wrapper">
<div className="simple-title">
<SLink to="http://abridgedmaps.com/">Abridged Maps</SLink>
</div>
<div className="simple-description">
a website that strips Google Maps of all natural imagery to reveal concrete poems about the structure of contemporary space
</div>
</div>
<div className="simple-wrapper">
<div className="simple-title">
<SLink to="http://brocascoconut.com/truespeak/">Truespeak</SLink>
</div>
<div className="simple-description">
an app that allows you to upload your text message history to a publicly viewable page on the internet
</div>
</div>
<div className="simple-wrapper">
<div className="simple-title">
<SLink to="http://howdoispeak.com">HowDoISpeak</SLink>
</div>
<div className="simple-description">
a website which shows you insights about the way you text by analyzing your word usage in your text messages
</div>
</div>
<div className="simple-wrapper">
<div className="simple-title">
<SLink to="http://brocascoconut.com/the_capitalist_tshirt/">The Capitalist T-Shirt</SLink>
</div>
<div className="simple-description">
an e-commerce store which sells t-shirts, framed prints and booty shorts
</div>
</div>
<div className="simple-wrapper">
<div className="simple-title">
<SLink to="http://brocascoconut.com">Brocas's Coconut</SLink>
</div>
<div className="simple-description">
the landing page for a pseudo-anonymous mailing list
</div>
</div>
<div className="simple-wrapper">
<div className="simple-title">
<SLink to="http://mhfowler.github.io">CSS Sketchbook</SLink>
</div>
<div className="simple-description">
experiments in css
</div>
</div>
</div>
</div>
</div>
)
}
export default SimpleSite

View File

@ -1,32 +0,0 @@
import React from 'react'
import Link from 'gatsby-link'
const Header = () => (
<div className="navbar overlaid">
<div className="myname">
<a href="/">MAX FOWLER</a>
</div>
<div className="navlinks">
<div className="navlink">
<a href="/about.html">about</a>
</div>
<div className="navlink">
<a href="/">work</a>
</div>
<div className="navlink">
<a href="http://twitter.com/notplants">twitter</a>
</div>
<div className="navlink">
<a href="http://github.com/mhfowler">github</a>
</div>
<div className="navlink">
<a href="/notes.html">notes</a>
</div>
<div className="navlink last-navlink">
<a href="/contact.html">contact</a>
</div>
</div>
</div>
)
export default Header

View File

@ -1,35 +0,0 @@
.blog {
.blog-post-title {
text-align: center;
}
.blog-post-meta {
text-align: center;
margin-bottom: 45px;
}
header {
h1 {
text-align: center;
}
h2 {
text-align: center;
}
p {
text-align: center;
margin-bottom: 45px;
}
}
.footnotes {
margin-top: 40px;
}
.main-wrapper {
//padding-left: 50px;
//padding-right: 50px;
padding-top: 30px;
padding-bottom: 20px;
overflow: hidden;
}
}

View File

@ -1,3 +1,73 @@
@mixin clearfix {
&:after {
content: "";
display: table;
clear: both;
}
}
body {
margin: 0px;
padding-bottom: 30px;
@include clearfix();
.page-wrapper {
background-size: contain;
margin: auto;
max-width: 750px;
padding-top: 75px;
width: 90%;
padding-bottom: 70px;
min-height: 100vh;
@include clearfix();
@media screen and (max-width: 575px) {
}
}
}
.main-wrapper {
padding-top: 20px;
}
header {
display:flex;
justify-content: center;
padding-top: 17px;
padding-left: 23px;
padding-right: 21px;
.header-left {
display: flex;
justify-content: flex-start;
align-items: center;
}
.header-center {
display: flex;
justify-content: center;
align-items: center;
}
.header-right {
display: flex;
justify-content: flex-end;
align-items: center;
margin-left: auto;
}
.mood-button {
float: left;
margin-right: 15px;
&:hover {
cursor: pointer;
}
&.clicked {
text-decoration: underline;
}
}
.click-your-mood {
float: left;
margin-right: 15px;
}
}
a.hlink {
//display: block;
//text-align: right;
@ -5,8 +75,8 @@ a.hlink {
//margin-top: 10px;
color: gray;
float:left;
margin-top: 5px;
margin-right: 15px;
text-decoration: none;
}
body.standard a.hlink {
color: gray;

View File

@ -1,101 +0,0 @@
import React from 'react'
import PropTypes from 'prop-types'
import Helmet from 'react-helmet'
import Header from '../components/Header.js'
import Footer from '../components/Footer.js'
import SLink from '../components/SLink.js'
import "./index.scss"
import "./blog.scss"
import "./markdown.scss"
import "./canalswans.scss"
var classNames = require('classnames')
const MoodButton = ({mood, currentMood, handleMoodClick}) => {
var classes = classNames({
'mood-button': true,
'clicked': mood === currentMood
});
return (
<a className={classes} onClick={handleMoodClick.bind(this, mood)}>{mood}</a>
)
}
class Layout extends React.Component {
constructor() {
super();
this.handleMoodClick = this.handleMoodClick.bind(this);
this.state = {
mood: 'standard'
}
this.handleMoodClick = this.handleMoodClick.bind(this)
}
handleMoodClick(mood) {
this.setState({mood: mood})
}
render() {
var wrapperClasses = `base-body ${this.state.mood} ${this.props.pageType}`
return (
<div className={wrapperClasses}>
<Helmet
title="mfowler.info"
meta={[
{name: 'description', content: 'Max Fowler | Freelancer'},
{name: 'keywords', content: 'freelance, art'},
]}
bodyAttributes={{
class: this.state.mood
}}
/>
<link rel="stylesheet" type="text/css" charset="UTF-8"
href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.6.0/slick.min.css"/>
<link rel="stylesheet" type="text/css"
href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.6.0/slick-theme.min.css"/>
<link href="https://fonts.googleapis.com/css?family=Roboto+Mono" rel="stylesheet"/>
<link rel="icon" href="/mfowler/img/favico.ico" type="image/x-icon"/>
<div className="page-wrapper">
<div className="main-wrapper">
{this.props.children}
</div>
{ !this.props.noMoodSelector &&
<div>
<div className="right-filler">
{/*<div>*/}
{/* welcome to the website*/}
{/*</div>*/}
<div>
<SLink className="hlink" to='/about'>about</SLink>
{/*<SLink className="hlink" to='/rss'>rss</SLink>*/}
{/*<SLink className="hlink" to='tinyletter.com/newsletter'>newsletter</SLink>*/}
<SLink className="hlink" to='/essays'>essays</SLink>
<SLink className="hlink" to='/zines'>zines</SLink>
</div>
{/*<div>*/}
{/* <SLink className="hlink" to='/essays'>rss</SLink>*/}
{/* <SLink className="hlink" to='/zines'>newsletter</SLink>*/}
{/*</div>*/}
</div>
<div className="center-title">
Canal Swans
</div>
<div className="right-filler top-left">
<div className="click-your-mood"> click your mood:</div>
<MoodButton mood="standard" currentMood={this.state.mood} handleMoodClick={this.handleMoodClick} />
<MoodButton mood="asmr" currentMood={this.state.mood} handleMoodClick={this.handleMoodClick} />
<MoodButton mood="sponsored" currentMood={this.state.mood} handleMoodClick={this.handleMoodClick} />
<MoodButton mood="test" currentMood={this.state.mood} handleMoodClick={this.handleMoodClick} />
</div>
</div>
}
</div>
<Footer/>
</div>
)
}
}
export default Layout

View File

@ -1,955 +0,0 @@
body {
margin: 0px;
}
@mixin clearfix {
&:after {
content: "";
display: table;
clear: both;
}
}
#sketch-holder {
position:absolute;
z-index: 1;
top: 0px;
left: 0px;
width: 100%;
height: 100%;
pointer-events: none;
}
#preloadedImages
{
width: 0px;
height: 0px;
display: inline;
}
.no-css {
.filler-wrapper {
display: block;
}
.main-wrapper {
float: left;
width: 100%;
max-width: 736px;
padding-top: 38px;
padding-bottom: 200px;
margin-left: 20px;
@media screen and (max-width: 1150px) {
max-width: 497px;
}
@media screen and (max-width: 850px) {
max-width: 736px;
}
}
.navbar {
float:left;
}
}
.main-wrapper {
padding-top: 20px;
}
.doc-wrapper {
h2 {
margin-top: 5px;
}
}
.right-filler {
float: right;
padding-right: 5px;
position: absolute;
right: 20px;
top: 2%;
width: 163px;
@media screen and (max-width: 850px) {
display:none;
}
&.top-right {
right: 2%;
}
&.top-left {
left: 20px;
top: 2%;
width: 100%;
}
&.bottom-left {
left: 2%;
bottom: 2%;
display: none;
}
&.bottom-right {
right: 2%;
bottom: 2%;
display: none;
}
.mood-button {
float: left;
margin-right: 15px;
&:hover {
cursor: pointer;
}
&.clicked {
text-decoration: underline;
}
}
.click-your-mood {
float: left;
margin-right: 15px;
}
}
body {
padding-bottom: 30px;
@include clearfix();
}
body.asmr {
font-family: 'Roboto Mono', monospace;
font-size: 12px;
background-color: #c2c2de;
.projects-wrapper {
display:none;
}
}
body.times-new-roman {
background-color: white;
.simple-site {
display:none;
}
a {
color: rgb(255, 0, 174);
}
}
body.standard {
font-family: 'Roboto Mono', monospace;
font-size: 12px;
.simple-site {
display:none;
}
a {
//color: rgb(255, 0, 174);
color: #8900ff;
}
}
body.sponsored {
background-image: url('/mfowler/img/inverted-bp.png');
background-repeat: repeat;
background-size: cover;
font-family: 'Roboto Mono', monospace;
font-size: 12px;
color:white;
.navlink a {
color: white;
}
.simple-title a {
color: white;
}
.myname a {
color: white;
}
.projects-wrapper {
display:none;
}
}
body.test {
background-image: url('/mfowler/img/triangles.png');
background-repeat: repeat;
background-size: cover;
font-family: 'Roboto Mono', monospace;
color: red;
font-size: 28px;
.navlink a {
color: blue;
}
.simple-title a {
color: blue;
}
.myname a {
color: red;
}
.p5-sketch {
display: block;
}
.projects-wrapper {
display:none;
}
.page-wrapper {
padding-top: 100px;
}
}
.p5-sketch {
display: none;
position: absolute;
top: 0px;
left: 0px;
z-index: -2;
}
.slider-wrapper {
display: none;
position: absolute;
top: 10%;
font-size: 16px;
left: 20px;
width: 169px;
input {
width: 40px;
}
.ui-slider {
margin:auto;
}
.ui-slider-handle {
outline: 0;
}
@media screen and (max-width: 1000px) {
display: none;
}
}
body {
//display: none;
//font-family: "resistanceregular";
font-family: 'Times New Roman';
//font-family: 'Roboto Mono', monospace;
//background-color: #d9e2d4;
//background-color: #efefef;
// #d9e2d4 light green
// #8cccb1 turqoise
// #efefef gray
//font-size: 12px;
// font-size: 12px;
font-size: 16px;
//background-color: mediumpurple;
//background: linear-gradient(white, black);
//background-image: url('/mfowler/img/grid.png');
//background-size: 200px 200px;
//background-color: lightgray;
//background-image: url('https://78.media.tumblr.com/37816081fb4c15e85596ed7931c6d2e0/tumblr_n6awg7ky2K1tw598eo1_500.jpg');
//background-image: url('/mfowler/img/diamond.gif');
//background-image: url('/mfowler/img/triangles.png');
//background-image: url('/mfowler/img/plant.jpg');
//background-image: url('/mfowler/img/bp.png');
//background-image: url('/mfowler/img/bptest.png');
//background-image: url('/mfowler/img/inverted-bp.png');
background-size: cover;
}
.control-panel {
//display: none;
position: absolute;
padding: 20px;
top: 0px;
padding-bottom: 30px;
//border: 1px solid gray;
width: 100%;
.click-your-mood {
float: left;
@media screen and (max-width: 600px) {
width: 100%;
}
}
.mood-button {
display: block;
margin-left: 23px;
margin-bottom:5px;
float: left;
font-size: 12px;
&:hover {
cursor: pointer;
}
&.clicked {
text-decoration: underline;
}
@media screen and (max-width: 600px) {
margin-right: 23px;
margin-left: 0px;
margin-top: 5px;
}
}
}
.overlaid {
//background-color: white;
//padding-left: 20px;
//padding-right: 20px;
//padding-top: 20px;
//padding-bottom: 20px;
//border: px solid black;
//border-top: 10px solid black;
}
.simple-title {
line-height: 22px;
margin-bottom: 20px;
}
.carousel-focus {
margin-bottom: 10px;
.img-container {
width: 100%;
height: 434px;
text-align: center;
background: #e0dfdf;
}
img.carousel-thumbnail {
max-height: 100%;
max-width: 100%;
vertical-align: middle;
margin: auto;
}
}
.carousel-thumbnails {
width: 100%;
margin: auto;
.img-container.slick-current {
img.carousel-thumbnail {
opacity: 1;
}
}
img.carousel-thumbnail {
opacity: 0.5;
//max-height:100%;
height: 80px;
vertical-align: middle;
padding-right: 1px;
&:hover {
cursor: pointer;
//opacity: 1;
}
}
}
.whats-carousel {
.carousel-focus {
width: 100%;
margin-bottom: 10px;
.img-container {
width: 100%;
height: 434px;
}
}
.carousel-thumbnails {
max-width: 670px;
}
}
.iw-focus {
.img-container {
height: 502px;
}
}
.iw-carousel {
.carousel-thumbnails {
max-width: 268px;
}
}
.slick-slide {
outline: none
}
a.timeline-row {
display: block;
color: black;
&:visited {
color: black;
}
&:hover {
color: darkgray;
}
}
.dropline {
background-size: 332px 150px;
background-position: 44px;
background-repeat: no-repeat;
width: 400px;
//height: 50px;
height: 90px;
//height: s50px;
margin: auto;
}
.navbar {
//margin-top: 3em;
&.reversed {
-webkit-transform:rotateY(180deg);
-moz-transform:rotateY(180deg);
-o-transform:rotateY(180deg);
-ms-transform:rotateY(180deg);
float: right;
}
@include clearfix;
.navlinks {
width: 100%;
}
max-width: 100%;
width: 100%;
}
body.new-blog-body {
.blog-post-title {
color: #6801c1;
}
.doc-wrapper {
max-width: 550px;
}
}
body {
transition: background 0.4s;
padding-bottom: 0px;
height: 100%;
margin: 0px;
.blog-back-button {
margin-bottom: 40px;
}
.blog-sidebar {
//font-family: 'PT Sans', sans-serif;
margin-right: 45px;
padding-top: 25px;
margin-left: 30px;
float: left;
@media screen and (max-width: 1000px) {
margin-left: 15px;
}
a {
display: block;
color: black;
}
}
.page-wrapper {
//border: 1px solid blue;
//background-image: url('https://78.media.tumblr.com/37816081fb4c15e85596ed7931c6d2e0/tumblr_n6awg7ky2K1tw598eo1_500.jpg');
background-size: contain;
//padding: 20px;
//background-color: white;
margin: auto;
//max-width: 1000px;
max-width: 750px;
padding-top: 75px;
//max-width: 100%;
width: 90%;
padding-bottom: 70px;
min-height: 100vh;
@include clearfix();
@media screen and (max-width: 575px) {
//margin-left: 10px;
}
}
.navlinks {
width: 100%;
margin-top: 20px;
}
.navlinks:after {
content: "";
display: table;
clear: both;
}
a {
/*color:black;*/
//color: #6801c1;
color: #1724e4;
text-decoration: none;
/*padding:5px;*/
/*border: 1px solid black;*/
/*text-decoration: line-through;*/
}
.navlink {
float: left;
margin-right: 20px;
margin-bottom: 10px;
&.last-navlink {
margin-right: 0px;
}
}
.navlink a {
color: black;
&:hover {
color: pink;
}
}
.myname a {
color: black;
&:hover {
color: pink;
}
//float: left;
//font-size: 28px;
//font-size: 16px;
}
.right-header {
float: right;
a {
float: right;
margin-right: 20px;
color: black;
}
}
a:hover {
/*border:10px solid black;*/
/*position:relative;*/
/*left: -10px;*/
/*top: -10px;*/
/*background-color:black;*/
/*background-color: #00ffc6;*/
/*border-color:red;*/
/*border-color: cadetblue;*/
/*color:white;*/
}
.content-wrapper {
max-width: 100%;
margin-bottom: 0px;
@include clearfix;
}
a.source-link {
color: gray;
margin-top: 150px;
}
.sources {
margin-top: 25px;
}
img.img {
width: 100%;
margin-top: 25px;
}
body {
padding-bottom: 75px;
}
.post {
margin-bottom: 100px;
/*border-bottom: 1px solid gray;*/
/*border-right: 1px solid gray;*/
padding-right: 100px;
padding-bottom: 100px;
width: 100%;
}
a.postlink {
/*text-decoration:underline;*/
}
.bio-pic {
width: 200px;
float: left;
margin-right: 40px;
margin-bottom: 40px;
}
.bio-writeup {
float: left;
max-width: 500px;
}
.projects-list {
margin-top: 60px;
}
.about-line {
margin-top: 40px;
//max-width: 700px;
max-width: 645px;
}
.project-wrapper {
float: left;
//margin-right: 120px;
margin-right: 45px;
width: 200px;
//height: 302px;
//height: 350px;
margin-bottom: 0px;
@media screen and (max-width: 575px) {
width: 100%;
height: auto;
//padding-bottom:15px;
}
}
.project-image-wrapper {
overflow: hidden;
/*padding: 5px;*/
/*background-color: lightgray;*/
margin-bottom: 5px;
/*box-shadow: 5px;*/
}
.project-image {
height: 200px;
width: 200px;
background-size: cover;
filter: grayscale(100%);
opacity: 0.8;
@media screen and (max-width: 575px) {
width: 100%;
height: auto;
}
&:hover {
opacity: 1;
filter: none;
}
}
.portfolio-image-wrapper {
/*padding: 5px;*/
/*background-color: lightgray;*/
margin-bottom: 5px;
float: left;
/*box-shadow: 5px;*/
}
.portfolio-image {
width: 100%;
max-width: 450px;
height: 100%;
max-height: 333px;
background-size: cover;
}
.portfolio-description {
width: 100%;
max-width: 450px;
float: left;
padding-left: 20px;
@media screen and (max-width: 1100px) {
padding-left: 5px;
}
padding-right: 10px;
}
.project-title {
color: black;
margin-bottom: 20px;
}
.portfolio-title {
color: black;
font-size: 24px;
}
.project-snippet {
margin-top: 10px;
display: none;
}
.project-tags {
color: gray;
display: none;
display: none;
//margin-top: 10px;
}
.note {
width: 400px;
}
.note-wrapper {
margin-top: 20px;
width: 100%;
}
.about-wrapper {
//margin-top: 60px;
//margin-top: 20px;
max-width: 650px;
float: left;
//margin-top: 20px;
}
.about-writeup {
float: left;
max-width: 500px;
}
.portfolio-item {
@include clearfix;
border: 1px solid black;
padding: 20px;
margin-top: 40px;
max-width: 950px;
width: 100%;
padding-top: 40px;
padding-bottom: 40px;
@media screen and (max-width: 1100px) {
max-width: 85%;
width: 550px;
}
}
.portfolio-tags {
color: gray;
margin-top: 5px;
display: none;
}
.author {
color: gray;
}
.project-description {
//display:none;
margin-top: 5px;
margin-bottom: 35px;
//display: none;
}
.projects-wrapper {
@include clearfix;
width: 100%;
@media screen and (max-width: 575px) {
width: 95%;
}
}
.left-col {
width: 518px;
float: left;
padding-bottom: 35px;
margin-right: 40px;
}
.right-col {
width: 300px;
float: left;
}
.doc-wrapper {
@include clearfix;
//max-width: 95%;
//max-width: 650px;
//margin:auto;
}
.documentation-wrapper {
width: 100%;
max-width: 650px;
margin: auto;
height: 100%;
padding: 25px;
//font-family: 'PT Sans', sans-serif;
@media screen and (max-width: 800px) {
max-width: 85%;
padding-left: 15px;
margin-left: 0px;
}
}
.documentation-wrapper.blog-wrapper {
font-family: "Times New Roman";
}
.doc-image {
width: 100%;
max-width: 100%;
margin-bottom: 30px;
}
.doc-image.first-image {
margin-top: 20px;
}
.cover-image {
margin-bottom: 30px;
}
.doc-image.small-doc-image {
max-width: 300px;
display: block;
}
.doc-image.md-doc-image {
max-width: 450px;
display: block;
}
.writeup-wrapper {
}
.doc-tags {
//color: gray;
color: #696969;
}
.doc-title {
margin-bottom: 30px;
font-decoration: italic;
}
.documentation-footer {
border-top: 1px solid gray;
width: 100%;
padding-top: 30px;
margin-top: 100px;
}
.simple-title a {
color: black;
text-decoration: underline;
text-transform: lowercase;
}
.simple-wrapper {
margin-top: 25px;
}
.simple-description {
padding-left: 20px;
margin-top: 10px;
}
.simple-list {
//margin-top: 20px;
max-width: 600px;
}
.here-are {
margin-top: 40px;
}
}
.looking-glass {
.doc-image {
max-width: 450px;
}
}
.filler-wrapper {
@media screen and (max-width: 850px) {
display: none;
}
display: none;
}
.doc-wrapper {
max-width: 750px;
width: 100%;
@media screen and (max-width: 850px) {
width: 100%;
}
float: left;
}
.about-wrapper {
ul {
//padding-left: 0px;
}
.year {
float: left;
//margin-right: 15px;
}
.year-events {
float: left;
}
.year-wrapper {
@include clearfix();
}
li {
//list-style: none;
text-indent: -37px;
padding-left: 37px;
//margin-bottom: 8px;
}
}
.upper-about {
@include clearfix();
}
.right-about {
margin-left: 40px;
}
div.mini-cv {
//a {
// color: black;
//}
}
.left-col-cv {
padding-left: 30px;
float: left;
margin-right: 20px;
}
.right-col-cv {
float: left;
max-width: 70%;
}
.year-wrapper {
@include clearfix();
width: 100%;
}
.italic {
font-style: italic;
}
.newsletter {
.button {
margin-top: 15px;
border-radius: 0px;
font-family: "Helvetica";
color: black;
border-color: black;
display: block;
width: 100%;
border: 1px solid black;
background-color: white;
-webkit-appearance: none;
&:hover {
cursor: pointer;
}
}
.email-input {
width: 97%;
display: block;
margin-top: 10px;
}
#mc_embed_signup .button:hover {
border-radius: 0px;
font-family: "Helvetica";
color: black;
border-color: black;
border: 1px solid black;
background-color: white;
}
canvas {
width: 100%;
height: 100%;
/*opacity: 0.5;*/
left: 0;
right: 0;
position: absolute;
}
.form-holder {
//width: 400px;
margin:auto; margin-top: 0px; float:left;
}
body {
padding: 0px;
margin: 0px;
}
.only-mobile {
display: none;
}
@media screen and (max-width: 700px) {
.no-mobile {
display: none;
}
.only-mobile {
display: block;
}
.form-holder {
margin-top: 30px;
margin-left: 20px;
}
.page-wrapper {
margin-top: 0px;
width: 100%;
text-align: center;
/*height: 0px;*/
/*float: left;*/
}
}
}

45
src/layouts/layout.js Normal file
View File

@ -0,0 +1,45 @@
import React from 'react'
import PropTypes from 'prop-types'
import Header from '../components/Header.js'
import CSHelmet from '../components/CSHelmet.js'
import Footer from '../components/Footer.js'
import SLink from '../components/SLink.js'
import "./moods.scss"
import "./markdown.scss"
import "./canalswans.scss"
var classNames = require('classnames')
class Layout extends React.Component {
constructor() {
super();
this.handleMoodClick = this.handleMoodClick.bind(this);
this.state = {
mood: 'standard'
}
this.handleMoodClick = this.handleMoodClick.bind(this)
}
handleMoodClick(mood) {
this.setState({mood: mood})
}
render() {
var wrapperClasses = `base-body ${this.state.mood} ${this.props.pageType}`
return (
<div className={wrapperClasses}>
<CSHelmet mood={this.state.mood}/>
<Header mood={this.state.mood} handleMoodClick={this.handleMoodClick}/>
<div className="page-wrapper">
<div className="main-wrapper">
{this.props.children}
</div>
</div>
<Footer/>
</div>
)
}
}
export default Layout

View File

@ -1,14 +1,10 @@
.markdownWrapper {
header {
//h1 {
// text-align: center;
//}
.articleHeader {
p {
color: gray;
// text-align: center;
// margin-bottom: 45px;
}
text-align: center;
}
.gatsby-resp-image-wrapper {
@ -19,4 +15,5 @@
.footnotes {
margin-top: 40px;
}
}

113
src/layouts/moods.scss Normal file
View File

@ -0,0 +1,113 @@
body.asmr {
font-family: 'Roboto Mono', monospace;
font-size: 12px;
background-color: #c2c2de;
.projects-wrapper {
display:none;
}
}
body.times-new-roman {
background-color: white;
.simple-site {
display:none;
}
a {
color: rgb(255, 0, 174);
}
}
body.standard {
font-family: 'Roboto Mono', monospace;
font-size: 12px;
.simple-site {
display:none;
}
a {
color: #8900ff;
}
}
body.sponsored {
background-image: url('/img/inverted-bp.png');
background-repeat: repeat;
background-size: cover;
font-family: 'Roboto Mono', monospace;
font-size: 12px;
color:white;
.navlink a {
color: white;
}
.simple-title a {
color: white;
}
.myname a {
color: white;
}
.projects-wrapper {
display:none;
}
}
body.test {
background-image: url('/img/triangles.png');
background-repeat: repeat;
background-size: cover;
font-family: 'Roboto Mono', monospace;
color: red;
font-size: 28px;
.navlink a {
color: blue;
}
.simple-title a {
color: blue;
}
.myname a {
color: red;
}
.p5-sketch {
display: block;
}
.projects-wrapper {
display:none;
}
.page-wrapper {
padding-top: 100px;
}
}
.control-panel {
//display: none;
position: absolute;
padding: 20px;
top: 0px;
padding-bottom: 30px;
//border: 1px solid gray;
width: 100%;
.click-your-mood {
float: left;
@media screen and (max-width: 600px) {
width: 100%;
}
}
.mood-button {
display: block;
margin-left: 23px;
margin-bottom:5px;
float: left;
font-size: 12px;
&:hover {
cursor: pointer;
}
&.clicked {
text-decoration: underline;
}
@media screen and (max-width: 600px) {
margin-right: 23px;
margin-left: 0px;
margin-top: 5px;
}
}
}

View File

@ -1,5 +1,5 @@
import React from 'react'
import Layout from "../layouts/index.js"
import Layout from "../layouts/layout.js"
const NotFoundPage = () => (
<Layout>

View File

@ -1,7 +1,6 @@
import React from 'react'
import Link from 'gatsby-link'
import Projects from '../components/Projects'
import Layout from "../layouts/index.js"
import Layout from "../layouts/layout.js"
const IndexPage = () => (
<Layout>

View File

@ -1,14 +1,11 @@
// src/components/layout.js
import React from "react"
import Carousel from "../components/Carousel.js"
import SLink from "../components/SLink.js"
import { MDXRenderer } from "gatsby-plugin-mdx"
import { MDXProvider } from '@mdx-js/react'
import Layout from "../layouts";
import Layout from "../layouts/layout.js";
import {Link} from "gatsby";
const shortcodes = { Carousel, SLink }
// simple template for testing
// export default function PageTemplate({ data: { mdx } }) {
// return (
@ -39,7 +36,7 @@ export default function MdxTemplate({ data: { mdx }}) {
return (
<Layout noHeader={noHeader} pageType={pageType}>
<article className={"markdownWrapper"}>
<header style={{'margin-bottom': '20px', 'width': '100%', 'float':'left'}}>
<div className="articleHeader" style={{'margin-bottom': '20px', 'width': '100%', 'float':'left'}}>
<h2
style={{
marginBottom: 0,
@ -65,11 +62,10 @@ export default function MdxTemplate({ data: { mdx }}) {
>
</p>
: null}
</header>
</div>
<section className="mdxWrapper">
<MDXProvider components={{
"SLink": SLink,
"Carousel": Carousel,
}}>
<MDXRenderer >{mdx.body}</MDXRenderer>
</MDXProvider>

View File

@ -12,7 +12,7 @@ This is a reflection into my ongoing experiments into accessing this well,
as a potential form of direct action against the oppressive structures that frequently mediate our world.
What are the pathways immediately around us that lead to information being transmitted into our eyes?
What effects do these structures have on us?
What agency do we have in how we relate to them? What actions can we take today?
What agency do we have in how we relate to them?
![map5](img/map5.png)
@ -53,10 +53,12 @@ like imagining a UI based on blank screen
the only ideas that surface are the ideas that originate from you
```
In the past year, I experienced a variety of ups and downs, and its hard to say what can really be attributed to using a flip-phone,
but I still believe in the potential of more mindfully using (and not using) technology as a healing practice.
In the past year, I experienced a variety of ups and downs, and its hard to say what can really be attributed to using a flip-phone.
A recurring theme was that if I was feeling bad I tended to blame it on the flip-phone and be frustrated by the project,
I am now using my iPhone again but I still believe in the potential of more mindfully using (and not using) technology as a healing practice
as described in this zine I created with Catherine Schmidt.
A recurring theme of the year was that if I was feeling bad I tended to blame it on the flip-phone and be frustrated by the project,
and if I was feeling good then I felt like the flip-phone was a great idea.
This was my note from May 7th:
@ -73,8 +75,10 @@ petja says “i have friends, i am doing ok”
Unfortunately, only the Auslanderbehorde (the German Foreigners office which grants Visas) is institutionally verified to really say if Im doing OK or not.
In the absence of their official opinion, I will leave that for the wind to debate,
and instead will share my journal entries from the first 10 days after I decided to use a flip-phone:
as for me using a flip-phone was more intended as a ritual in tribute to mindfulness
than as something with a single result.
Here are my journal entries from the first 10 days after I decided to use a flip-phone:
```
day 1 (sunday)
picked up rpi from kleinanzeigen and hung out with mylene
@ -146,7 +150,7 @@ I am currently using my smart phone again and I may stop again in the future.
In tribute to the power of direct of experience,
Disconnecting and connecting,
M

BIN
static/img/inverted-bp.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

BIN
static/img/triangles.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 MiB