diff --git a/content/organizers/*organizer-template.json b/content/organizers/*organizer-template.json new file mode 100644 index 00000000..5c0d0c22 --- /dev/null +++ b/content/organizers/*organizer-template.json @@ -0,0 +1,27 @@ +{ + "name": "", + "headshot": "", + "pronouns": "", + "city": "", + "bio": "", + "role": [], + "links": [ + { + "type": "twitter", + "url": "" + }, + { + "type": "linkedin", + "url": "" + }, + { + "type": "github", + "url": "" + }, + { + "type": "website", + "url": "" + } + ] + } + \ No newline at end of file diff --git a/content/organizers/adrienne-domingus.json b/content/organizers/adrienne-domingus.json new file mode 100644 index 00000000..777f8c91 --- /dev/null +++ b/content/organizers/adrienne-domingus.json @@ -0,0 +1,19 @@ +{ + "name": "Adrienne Domingus", + "headshot": "/images/adrienne-domingus.jpg", + "pronouns": "she/her", + "city": "Seattle", + "bio": "", + "role": ["Chapter Organizer"], + "links": [ + { + "type": "twitter", + "url": "https://twitter.com/a_domingus" + }, + { + "type": "linkedin", + "url": "https://www.linkedin.com/in/adriennedomingus/" + } + ] + } + \ No newline at end of file diff --git a/content/organizers/alex-millatmal.json b/content/organizers/alex-millatmal.json new file mode 100644 index 00000000..86617236 --- /dev/null +++ b/content/organizers/alex-millatmal.json @@ -0,0 +1,27 @@ +{ + "name": "Alex Millatmal", + "headshot": "/images/alex-millatmal.jpg", + "pronouns": "she/her", + "city": "New York City", + "bio": "", + "role": ["Website Contributor", "Conference Organizer"], + "links": [ + { + "type": "twitter", + "url": "halfghaninne" + }, + { + "type": "linkedin", + "url": "alexandrajmh" + }, + { + "type": "github", + "url": "halfghaninne" + }, + { + "type": "website", + "url": "https://alexandramillatmal.com" + } + ] +} + \ No newline at end of file diff --git a/content/organizers/kara-carrell.json b/content/organizers/kara-carrell.json new file mode 100644 index 00000000..d49d043a --- /dev/null +++ b/content/organizers/kara-carrell.json @@ -0,0 +1,15 @@ +{ + "name": "Kara Carrell", + "headshot": "", + "pronouns": "she/they", + "city": "Chicago", + "bio": "Queer blaxican communitechie committed to caring for & growing codebases that challenge the 'Way Things Are'. Developer at TableXI.", + "role": ["Chapter Organizer", "Website Contributor"], + "links": [ + { + "type": "twitter", + "url": "karaAJC" + } + ] + } + \ No newline at end of file diff --git a/content/organizers/lateesha-thomas.json b/content/organizers/lateesha-thomas.json new file mode 100644 index 00000000..4bc218df --- /dev/null +++ b/content/organizers/lateesha-thomas.json @@ -0,0 +1,21 @@ +{ + "name": "Lateesha Thomas", + "pronouns": "she/her", + "city": "Oakland", + "role": ["Board Member"], + "headshot": "/images/lateesha-thomas.jpg", + "links": [ + { + "type": "twitter", + "url": "lateeshathomas" + }, + { + "type": "linkedin", + "url": "lateeshathomas" + }, + { + "type": "github", + "url": "lateesha" + } + ] +} diff --git a/content/organizers/lynn-cyrin.json b/content/organizers/lynn-cyrin.json new file mode 100644 index 00000000..90331f12 --- /dev/null +++ b/content/organizers/lynn-cyrin.json @@ -0,0 +1,19 @@ +{ + "name": "Lynn Cyrin", + "headshot": "/images/lynn-cyrin.jpg", + "pronouns": "they/them", + "city": "Seattle", + "bio": "", + "role": ["Chapter Organizer"], + "links": [ + { + "type": "twitter", + "url": "lynncyrin" + }, + { + "type": "github", + "url": "lynncyrin" + } + ] + } + \ No newline at end of file diff --git a/content/organizers/marie-casabonne.json b/content/organizers/marie-casabonne.json new file mode 100644 index 00000000..1ecc11cf --- /dev/null +++ b/content/organizers/marie-casabonne.json @@ -0,0 +1,19 @@ +{ + "name": "Marie Casabonne", + "headshot": "/images/marie-casabonne.jpeg", + "pronouns": "she/her", + "city": "San Francisco", + "bio": "Marie's been riding the Venn diagram of the tech, education, and nonprofit spaces for close to a decade and she firmly believes that the path to improving our world rests where all three meet. She's been involved with Write/Speak/Code since 2017, starting as a volunteer organizer for our annual conference. When she's not organizing conferences or responding to pings on Slack, she can be found hiking and running in the mountains, mastering a macrame project, or cooking with friends. ", + "role": ["Board Member", "Conference Organizer"], + "links": [ + { + "type": "twitter", + "url": "goodcasa" + }, + { + "type": "linkedin", + "url": "mariecasabonne" + } + ] + } + \ No newline at end of file diff --git a/content/organizers/nayonna-purnell.json b/content/organizers/nayonna-purnell.json index a395682b..6eb48dc7 100644 --- a/content/organizers/nayonna-purnell.json +++ b/content/organizers/nayonna-purnell.json @@ -1,8 +1,8 @@ { "name": "Nayonna Purnell", - "headshot": "/images/untitled.jpg", + "headshot": "/images/nayonna-purnell.jpg", "pronouns": "she/her", - "role": ["Website Contributor", "Conference Organizer"], + "role": ["Website Contributor"], "links": [ { "type": "linkedin", diff --git a/content/organizers/nicola-b.json b/content/organizers/nicola-beuscher.json similarity index 69% rename from content/organizers/nicola-b.json rename to content/organizers/nicola-beuscher.json index b18ef8c8..01490d15 100644 --- a/content/organizers/nicola-b.json +++ b/content/organizers/nicola-beuscher.json @@ -1,6 +1,7 @@ { - "name": "Nicola B", - "headshot": "/images/nicola-b.jpg", + "name": "Nicola Beuscher", + "headshot": "/images/nicola-beuscher.png", + "city": "New York City", "pronouns": "she/her", "role": ["Website Contributor", "Conference Organizer"], "links": [ diff --git a/content/organizers/nicole-majeske.json b/content/organizers/nicole-majeske.json new file mode 100644 index 00000000..451673ab --- /dev/null +++ b/content/organizers/nicole-majeske.json @@ -0,0 +1,19 @@ +{ + "name": "Nicole Majeske", + "headshot": "/images/nicole-majeske.jpg", + "pronouns": "she/her", + "city": "Austin", + "bio": "Nicole is an Experience Designer in Austin, Texas. She pushes to advance more inclusive, accessible, and thoughtful design decisions in her work and in her local tech community. Outside of work you can find traveling, doodling, or cooking up new recipes in her kitchen.", + "role": ["Chapter Organizer"], + "links": [ + { + "type": "twitter", + "url": "nicole_majeske" + }, + { + "type": "linkedin", + "url": "nicole_majeske" + } + ] + } + \ No newline at end of file diff --git a/content/organizers/sophia-li.json b/content/organizers/sophia-li.json new file mode 100644 index 00000000..4ba5e09d --- /dev/null +++ b/content/organizers/sophia-li.json @@ -0,0 +1,15 @@ +{ + "name": "Sophia Li", + "headshot": "/images/sophia-li.jpg", + "pronouns": "she/her", + "city": "San Francisco", + "bio": "", + "role": ["Chapter Organizer"], + "links": [ + { + "type": "twitter", + "url": "sophia_wyl" + } + ] + } + \ No newline at end of file diff --git a/content/organizers/sravanti-tekumalla.json b/content/organizers/sravanti-tekumalla.json new file mode 100644 index 00000000..30fa5e50 --- /dev/null +++ b/content/organizers/sravanti-tekumalla.json @@ -0,0 +1,15 @@ +{ + "name": "Sravanti Tekumalla", + "headshot": "/images/sravanti-tekumalla.jpg", + "pronouns": "she/her", + "city": "San Francisco", + "bio": "Sravanti is a software engineer who's all about civic tech and creating more vibrant cities. She also believes in the power of strong communication and community to grow (both in tech and in life). Sravanti enjoys exercising her creative side through photography and baking.", + "role": ["Chapter Organizer"], + "links": [ + { + "type": "twitter", + "url": "sravanti__" + } + ] + } + \ No newline at end of file diff --git a/content/organizers/tien-mimi-nguyen.json b/content/organizers/tien-mimi-nguyen.json new file mode 100644 index 00000000..fcb9143d --- /dev/null +++ b/content/organizers/tien-mimi-nguyen.json @@ -0,0 +1,15 @@ +{ + "name": "Tien 'Mimi' Nguyen", + "headshot": "/images/tien-mimi-nguyen.jpg", + "pronouns": "she/her", + "city": "San Francisco", + "bio": "Mimi can order from a restaurant menu in under fifteen seconds and have zero regrets. She is a Technical Writer at Sentry.io, a chapter organizer for Write/Speak/Code San Francisco, and a proud coding bootcamp grad. Before starting her career in tech, Mimi wrote creative nonfiction and received a Master of Fine Arts in Creative Writing from Northwestern University.", + "role": ["Chapter Organizer"], + "links": [ + { + "type": "twitter", + "url": "mimi_dumpling" + } + ] + } + \ No newline at end of file diff --git a/content/organizers/tiffani-elmore.json b/content/organizers/tiffani-elmore.json new file mode 100644 index 00000000..51bd846f --- /dev/null +++ b/content/organizers/tiffani-elmore.json @@ -0,0 +1,19 @@ +{ + "name": "Tiffani Elmore", + "headshot": "/images/tiffani-elmore.png", + "pronouns": "she/her", + "city": "Chicago", + "bio": "Tiffani is a Chicago chapter organizer. She's been developing software for two years and is currently a Software Crafter at 8th Light. She is especially excited about the intersection of code, art, and social justice. She tries her best when caring for house plants.", + "role": ["Chapter Organizer"], + "links": [ + { + "type": "twitter", + "url": "tiffani_elmore" + }, + { + "type": "linkedin", + "url": "tiffani-elmore/" + } + ] + } + \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 2f876b8e..f5ee7716 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9778,8 +9778,7 @@ }, "ansi-regex": { "version": "2.1.1", - "bundled": true, - "optional": true + "bundled": true }, "aproba": { "version": "1.2.0", @@ -9797,13 +9796,11 @@ }, "balanced-match": { "version": "1.0.0", - "bundled": true, - "optional": true + "bundled": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, - "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -9816,18 +9813,15 @@ }, "code-point-at": { "version": "1.1.0", - "bundled": true, - "optional": true + "bundled": true }, "concat-map": { "version": "0.0.1", - "bundled": true, - "optional": true + "bundled": true }, "console-control-strings": { "version": "1.1.0", - "bundled": true, - "optional": true + "bundled": true }, "core-util-is": { "version": "1.0.2", @@ -9930,8 +9924,7 @@ }, "inherits": { "version": "2.0.3", - "bundled": true, - "optional": true + "bundled": true }, "ini": { "version": "1.3.5", @@ -9941,7 +9934,6 @@ "is-fullwidth-code-point": { "version": "1.0.0", "bundled": true, - "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -9954,20 +9946,17 @@ "minimatch": { "version": "3.0.4", "bundled": true, - "optional": true, "requires": { "brace-expansion": "^1.1.7" } }, "minimist": { "version": "0.0.8", - "bundled": true, - "optional": true + "bundled": true }, "minipass": { "version": "2.3.5", "bundled": true, - "optional": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -9984,7 +9973,6 @@ "mkdirp": { "version": "0.5.1", "bundled": true, - "optional": true, "requires": { "minimist": "0.0.8" } @@ -10057,8 +10045,7 @@ }, "number-is-nan": { "version": "1.0.1", - "bundled": true, - "optional": true + "bundled": true }, "object-assign": { "version": "4.1.1", @@ -10068,7 +10055,6 @@ "once": { "version": "1.4.0", "bundled": true, - "optional": true, "requires": { "wrappy": "1" } @@ -10144,8 +10130,7 @@ }, "safe-buffer": { "version": "5.1.2", - "bundled": true, - "optional": true + "bundled": true }, "safer-buffer": { "version": "2.1.2", @@ -10175,7 +10160,6 @@ "string-width": { "version": "1.0.2", "bundled": true, - "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -10193,7 +10177,6 @@ "strip-ansi": { "version": "3.0.1", "bundled": true, - "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -10232,13 +10215,11 @@ }, "wrappy": { "version": "1.0.2", - "bundled": true, - "optional": true + "bundled": true }, "yallist": { "version": "3.0.3", - "bundled": true, - "optional": true + "bundled": true } } }, @@ -12326,14 +12307,12 @@ "ansi-regex": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "optional": true + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "optional": true + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" }, "slice-ansi": { "version": "1.0.0", @@ -12359,7 +12338,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "optional": true, "requires": { "ansi-regex": "^4.1.0" } @@ -13583,8 +13561,7 @@ "ansi-regex": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "optional": true + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" }, "is-fullwidth-code-point": { "version": "2.0.0", @@ -13607,7 +13584,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "optional": true, "requires": { "ansi-regex": "^4.1.0" } diff --git a/src/components/organizer/index.js b/src/components/organizer/index.js new file mode 100644 index 00000000..d4c078b9 --- /dev/null +++ b/src/components/organizer/index.js @@ -0,0 +1,80 @@ +import React, { useState } from 'react' +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' +import { faTimes } from '@fortawesome/free-solid-svg-icons' +import { + faTwitter, + faLinkedinIn, + faGithub +} from '@fortawesome/free-brands-svg-icons' +import { faMousePointer } from '@fortawesome/free-solid-svg-icons' +import styles from './organizer.module.css' + + +const SocialLink = ({ type, url }) => { + const icons = { + twitter: faTwitter, + linkedin: faLinkedinIn, + github: faGithub, + website: faMousePointer + } + const urls = { + twitter: `https://twitter.com/${url}`, + linkedin: `https://linkedin.com/in/${url}`, + github: `https://github.com/${url}`, + website: url, + } + return ( + + + + ) +} + +const randomPlaceholder = () => { + const placeholders = [ + '/images/speaker.jpg', + '/images/speaker2.jpg', + '/images/speaker3.jpg', + ] + return placeholders[Math.floor(Math.random() * placeholders.length)] +} + + +const Organizer = ({ organizer }) => { + // const [dialogIsOpen, setDialogIsOpen] = useState(false) + return ( + <> +
+ {`${organizer.name} +
+

{organizer.name}

+ {organizer.role &&

{organizer.pronouns}

} + {organizer.city &&
{organizer.city}
} +
+ {organizer.links && + organizer.links.map((link, index) => ( + + ))} +
+
+
+ {/* */} + + ) +} + +export default Organizer \ No newline at end of file diff --git a/src/components/organizer/organizer.module.css b/src/components/organizer/organizer.module.css new file mode 100644 index 00000000..8b549119 --- /dev/null +++ b/src/components/organizer/organizer.module.css @@ -0,0 +1,147 @@ +/* Speaker Regular Button Styles */ +.dialogButton { + display: inline-flex; + align-items: center; + margin: 0.5em 1em 0.5em 0; + padding: 0; + padding-right: 0.5em; + color: var(--navy); + background: transparent; + font-weight: var(--semi-bold); + border-color: inherit; + border-style: solid; + font-size: 0.9em; + border-width: 2px; + &:hover { + cursor: pointer; + color: var(--tan); + } + img { + max-width: 30px; + margin-right: 0.5em; + } + } + + /* Speaker Headshot Button Styles*/ + .organizer { + border: 2px var(--navy) solid; + padding: 1em; + + @media screen and (max-width: 30em) { + display: flex; + align-items: flex-start; + } + margin: 1em 0; + figcaption { + h3 { + margin: 1em 0 0 0; + font-family: 'PT Sans Caption'; + font-weight: var(--bold); + font-size: 1.2em; + } + h4 { + margin: 0; + font-weight: var(--semi-bold); + } + h5 { + margin: 0; + font-size: 0.9em; + font-weight: var(--regular); + } + } + } + .headshot { + @media screen and (max-width: 30em) { + width: 100px; + height: 100px; + margin-right: 2em; + } + width: 100%; + } + + /* Speaker Dialog Styles */ + + .dialog { + width: 70vw; + background: linear-gradient(to bottom right, var(--white) 50%, #ebf7ef 50%); + color: var(--navy); + position: relative; + img { + display: none; + } + h1 span { + font-size: 0.6em; + font-weight: var(--regular); + } + h1, + h2, + h3, + h4 { + margin: 0; + } + p { + margin: 0; + line-height: 1.8; + } + figure { + margin: 2em 0 1em 0; + } + @media screen and (min-width: 50em) { + width: 50vw; + figure { + display: flex; + align-items: center; + margin: 1em 2em; + } + p { + max-width: 35em; + margin: 1em 2em; + } + img { + display: block; + max-width: 150px; + margin-right: 1em; + } + } + } + + .close { + position: absolute; + right: 1em; + font-size: 1.5em; + background: transparent; + display: block; + color: var(--navy); + border: 0; + &:focus { + background-color: var(--tan); + outline: none; + border: none; + } + &:hover { + cursor: pointer; + } + } + + .name { + margin: 0; + font-size: 1.5em; + } + + .links { + text-align:center; + margin: 1em 0; + a:not(:last-child) { + margin-right: 1em; + } + .icon { + font-size: 1.1em; + } + .icon:hover { + color: var(--tan); + } + @media screen and (min-width: 50em) { + margin: 1em; + } + } + \ No newline at end of file diff --git a/src/components/organizers/index.js b/src/components/organizers/index.js new file mode 100644 index 00000000..c2f3c8ef --- /dev/null +++ b/src/components/organizers/index.js @@ -0,0 +1,53 @@ +import React from 'react' +import { graphql } from 'gatsby' +import _ from 'lodash' +import Organizer from '../organizer' +import styles from './organizers.module.css' + +const Organizers = ({organizers}) => { + const boardMembers = _.filter(organizers, function(o) { return _.includes(o.role, 'Board Member') }) + const chapterLeaders = _.filter(organizers, function(o) { return _.includes(o.role, 'Chapter Organizer') }) + const conferenceOrganizers = _.filter(organizers, function(o) { return _.includes(o.role, 'Conference Organizer') }) + const websiteContributors = _.filter(organizers, function(o) { return _.includes(o.role, 'Website Contributor') }) + + return ( +
+
+
+

Board Members

+
+ {boardMembers.map(boardMember => ( + + ))} +
+
+
+

Chapter Leaders

+
+ {chapterLeaders.map(chapterLeader => ( + + ))} +
+
+
+

Conference Organizers

+
+ {conferenceOrganizers.map(conferenceOrganizer => ( + + ))} +
+
+
+

Website Contributors

+
+ {websiteContributors.map(websiteContributor => ( + + ))} +
+
+
+
+ ) +}; + +export default Organizers \ No newline at end of file diff --git a/src/components/organizers/organizers.module.css b/src/components/organizers/organizers.module.css new file mode 100644 index 00000000..cb410526 --- /dev/null +++ b/src/components/organizers/organizers.module.css @@ -0,0 +1,36 @@ +.aboutUs { + color: var(--navy); +} + +.row { + padding: 1em 0; +} + +.info { + padding: 2em; +} + +.wrap { + margin: 0 3em; +} + +.heading { + border-bottom: 1px solid var(--tan); +} + +.grid { + display: grid; + grid-gap: 1em 2em; + @media screen and (min-width: 30em) { + grid-template-columns: 1fr 1fr; + } + @media screen and (min-width: 50em) { + grid-template-columns: 1fr 1fr 1fr 1fr; + } + @media screen and (min-width: 70em) { + grid-template-columns: 1fr 1fr 1fr 1fr 1fr; + } + @media screen and (min-width: 100em) { + grid-template-columns: 1fr 1fr 1fr 1fr 1fr 1fr 1fr; + } +} \ No newline at end of file diff --git a/src/images/photos/WSC-SF.jpg b/src/images/photos/WSC-SF.jpg new file mode 100644 index 00000000..d6190fba Binary files /dev/null and b/src/images/photos/WSC-SF.jpg differ diff --git a/src/pages/about-us/index.js b/src/pages/about-us/index.js new file mode 100644 index 00000000..7d1cb86d --- /dev/null +++ b/src/pages/about-us/index.js @@ -0,0 +1,88 @@ +import React from 'react' +// import { Link, graphql } from 'gatsby' +import Img from 'gatsby-image' +import Header from '../../components/header' +import Organizers from '../../components/Organizers' +import Footer from '../../components/footer' +import { SkipNavLink, SkipNavContent } from '@reach/skip-nav' + + +// import HomeLayout from '../../layouts/home' +// import SEO from '../components/seo' + +import styles from './index.module.css' + +const IndexPage = ({ data }) => { + const organizers = data.allOrganizersJson.nodes + + return ( + <> + +
+ +
+
+ A smiling speaker talks on stage at the 2018 conference with a microphone. +
+ {' '} +

About Us

+

+ Meet the hard-working board, chapter leaders, and conference organizers behind Write/Speak/Code. +

+

+ Email us at info@writespeakcode.com to learn about different ways to get involved in our community. +

+ {/* + Find events on Meetup + */} +
+
+
+ +
+