diff --git a/.eleventy.js b/.eleventy.js index 09835f6..fb1e2ac 100644 --- a/.eleventy.js +++ b/.eleventy.js @@ -2,6 +2,8 @@ const HTMLMinifier = require("html-minifier"); const CleanCSS = require("clean-css"); const UglifyES = require("uglify-es"); const MarkdownIt = require("markdown-it"); +const JSYaml = require("js-yaml"); +require('intl'); const markdownIt = MarkdownIt({ html: true, @@ -17,6 +19,184 @@ module.exports = function(eleventyConfig) { "static/img": "img" }); + eleventyConfig.addFilter("monthAndYear", function(date) { + return date.toLocaleDateString(undefined, { + year: "numeric", + month: "short" + }); + }); + + // Creates a child object with a new or overridden property without affecting + // the original. + function inheritAndAdd(base, newProperties) { + return Object.assign(Object.create(base), newProperties); + } + + // Sorts highlights before lowlights, and adds a highlight boolean property. + // + // itemList is an array of objects with "id" (string) properties + // filter is a specification for how to filter this list, which can be: + // * true or "all", in which case all items are highlights + // * some falsy value, in which case no items are highlights + // * an array containing item IDs which are highlights and others are + // lowlights + // * an array containing "all" and item IDs each prepended by "-", where + // negated IDs are lowlights and others are highlights + // * an object, in which case its keys are used as an array (as above)m + // regardless of their values + // Returns an array of objects, each of which has a one-to-one correspondence + // with an input item, using that object as its prototype and adding a + // boolean "highlight" property. Order is preserved within highlights and + // lowlights, but highlights are first in the list. + function identifyHighlights(itemList, filter) { + if (!Array.isArray(itemList)) { + return itemList; + } + const highlights = []; + const lowlights = []; + if (!Array.isArray(filter)) { + if (filter === true || filter === "all") { + filter = ["all"] + } else if (typeof filter === "object") { + filter = Object.keys(filter); + } else { + filter = []; + } + } + itemList.forEach(function(item) { + if ((filter.includes("all") + && !filter.includes("-" + item.id)) + || filter.includes(item.id)) { + highlights.push(inheritAndAdd(item, {highlight: true})); + } else { + lowlights.push(inheritAndAdd(item, {highlight: false})); + } + }); + return highlights.concat(lowlights); + } + eleventyConfig.addFilter("identifyHighlights", identifyHighlights); + + // Sorts highlights before lowlights for this list and each of the child + // layers listed. + // + // itemList is an array of objects with + // "id" (string) and headAttribute (list of object) properties. + // filter is a specification for how to filter this list and its children: + // * true or "all", in which case all items on all layers are highlights + // * some falsy value, in which case all items on all layers are lowlights + // * an array containing item IDs, in which case all matching items on this + // layer are highlights, as well as all of their descendants, and all + // non-matching items on this layer and all of their descendants are + // lowlights + // * an array containing "all" and item IDs preceded by "-", in which case all + // negated IDs and their descendants are lowlights, and all others and + // their descendants are highlights + // * an object whose keys are used as an array (as above) to match this layer, + // but whose values are used as the value for filter when recursively + // calling on the value of headAttribute. + // If one of these keys exists, the child will be called with its value as + // the filter argument, in this order: + // * child.id + // * "-" + child.id + // * "all" + // * "-all" + // Otherwise, the child will be called with false. + // headAttribute, nextAttribute, and tailAttributes are strings; nextAttribute + // and tailAttributes are optional. + // Returns an array of objects, each of which has a one-to-one correspondence + // with an input item, using that object as its prototype and adding a + // boolean "highlight" property and a list of objects headAttribute property + // fulfilling the same type of contract as described here. Order is + // preserved within highlights and lowlights, but highlights are first in + // the list. + function identifyHighlightsRecursive(itemList, filter, headAttribute, nextAttribute, ...tailAttributes) { + if (Array.isArray(filter)) { + const newFilter = {}; + filter.forEach(function(item) { + if (item.startsWith("-")) { + newFilter[item] = false; + } else { + newFilter[item] = true; + } + }); + filter = newFilter; + } else if (typeof filter !== "object"){ + if (filter === true || filter === "all") { + filter = { "all": true }; + } else { + filter = {}; + } + } + const highlightList = identifyHighlights(itemList, filter); + if (!headAttribute || !Array.isArray(highlightList)) { + return highlightList; + } + highlightList.forEach(function(item) { + if (!(headAttribute in item)) { + // can't recurse into an item which doesn't have our recursive property + return; + } + const children = item[headAttribute]; + const match = [item.id, "-" + item.id, "all", "-all"].find((key) => key in filter); + const childFilter = match ? filter[match] : false; + // safe to modify in-place because we got this result back from + // identifyHighlights, which inherits from its input + item[headAttribute] = identifyHighlightsRecursive(children, childFilter, nextAttribute, ...tailAttributes); + }); + return highlightList; + } + eleventyConfig.addFilter("identifyHighlightsRecursive", identifyHighlightsRecursive); + + // Checks if there are any items with a truthy highlight property in itemList. + function hasHighlights(itemList) { + if (!Array.isArray(itemList)) { + return false; + } + return itemList.some(function(item) { + return item.highlight; + }); + } + eleventyConfig.addFilter("hasHighlights", hasHighlights); + + // Checks if there are any items with a falsy highlight property in itemList. + function hasLowlights(itemList) { + if (!Array.isArray(itemList)) { + return false; + } + return itemList.some(function(item) { + return !item.highlight; + }); + } + eleventyConfig.addFilter("hasLowlights", hasLowlights); + + // Checks if there are any items within this list or its children with a + // truthy highlight property. + function hasHighlightsRecursive(itemList, headAttribute, nextAttribute, tailAttributes) { + if (!Array.isArray(itemList)) { + return false; + } + return hasHighlights(itemList) || itemList.some( + (child) => headAttribute in child && child.hasHighlightsRecursive( + child[headAttribute], nextAttribute, ...tailAttributes)); + } + eleventyConfig.addFilter("hasHighlightsRecursive", hasHighlightsRecursive); + + // Checks if there are any items within this list or its children with a + // falsy highlight property. + function hasLowlightsRecursive(itemList, headAttribute, nextAttribute, tailAttributes) { + if (!Array.isArray(itemList)) { + return false; + } + return hasLowlights(itemList) || itemList.some( + (child) => headAttribute in child && child.hasLowlightsRecursive( + child[headAttribute], nextAttribute, ...tailAttributes)); + } + eleventyConfig.addFilter("hasLowlightsRecursive", hasLowlightsRecursive); + + eleventyConfig.addFilter("md", function(content) { + return markdownIt.render(content); + }); + eleventyConfig.addTransform("minifyHTML", function(html, path) { if(path && path.endsWith(".html")) { return HTMLMinifier.minify(html, { @@ -28,8 +208,14 @@ module.exports = function(eleventyConfig) { return html; }); - eleventyConfig.addFilter("minifyCSS", function(code) { - return new CleanCSS({}).minify(code).styles; + eleventyConfig.addNunjucksAsyncFilter("minifyCSS", function(code, callback) { + return new CleanCSS({ level: 2, inline: ['all'] }).minify(code, (err, result) => { + if (err) { + callback(err, null); + } else { + callback(null, result.styles); + } + }); }); eleventyConfig.addFilter("minifyJS", function(code) { @@ -41,6 +227,8 @@ module.exports = function(eleventyConfig) { return minified.code; }); + eleventyConfig.addDataExtension("yaml", contents => JSYaml.safeLoad(contents)); + return { templateFormats: [ "html", diff --git a/_data/awards.yaml b/_data/awards.yaml new file mode 100644 index 0000000..cb41020 --- /dev/null +++ b/_data/awards.yaml @@ -0,0 +1,17 @@ +--- +awards: + - id: perfy + image: jobs/google/bazel.png + role: Google (Bazel) + name: Bronze Perfy + description: Part of tooling team for Google-wide migration + - id: python-readability + image: jobs/google/google.png + role: Google + name: py-readability + description: High-quality, well-structured Python code + - id: deans-list + image: education/rpi.jpg + role: RPI + name: Dean's List + description: Had consistently high GPA for each semester diff --git a/_data/contact.yaml b/_data/contact.yaml new file mode 100644 index 0000000..1121fa4 --- /dev/null +++ b/_data/contact.yaml @@ -0,0 +1,27 @@ +--- +methods: +- id: us-phone + name: US phone number + text: "+1-000-000-0000" + link: tel:+01- + img: contacts/us.svg +- id: jp-phone + name: JP phone number + text: "+81-00-0000-0000" + link: tel:+81- + img: contacts/japan.svg +- id: address + name: Permanent address + text: Manhattan, NY, USA + link: https://goo.gl/maps/vPM5FrX9ut7fjQ1MA + img: contacts/home.svg +- id: resume + name: Full resume website + text: resume.reya.zone + link: https://resume.reya.zone + img: contacts/www.svg +- id: github + name: Github username + text: programmablereya + link: https://github.com/programmablereya + img: contacts/github.png diff --git a/_data/education.yaml b/_data/education.yaml new file mode 100644 index 0000000..bd75cfe --- /dev/null +++ b/_data/education.yaml @@ -0,0 +1,20 @@ +--- +programs: + - id: rpi + startDate: 2007-08-15 # approximate date, I don't remember that far back + endDate: 2011-05-15 # approximate date, who knows + name: Dual B.S. (Computer & Systems Engineering, Computer Science) + institution: Rensselaer Polytechnic Institute + image: education/rpi.jpg + - id: tefl_ita + startDate: 2019-08-12 + endDate: 2019-10-21 + name: Teaching English as a Foreign Language (partial) + institution: International TEFL Academy + image: education/tefl_ita.png + - id: regis + startDate: 2003-09-15 # again how the heck should I know + endDate: 2007-06-15 # this was like ages and ages ago + name: high school diploma + institution: Regis High School + image: education/regis.jpeg diff --git a/_data/experience.yaml b/_data/experience.yaml new file mode 100644 index 0000000..e432f8a --- /dev/null +++ b/_data/experience.yaml @@ -0,0 +1,76 @@ +--- +roles: + - id: bazel-configurability + image: jobs/google/bazel.png + name: Software Engineer # III + team: Bazel Configurability + company: Google + startDate: 2016-07-15 # vague guess - this was around when I would have + # started getting to work on reviewing configurability + # changes and getting up to speed on this team + endDate: 2019-10-04 # dead on, this was my last day at Google + shortDescription: | + Just buckets of trimming. + description: | + Let's see here. + What did I do on Configurability? + Besides _endless_ amounts of **trimming**? + achievements: + - id: trimming + description: | + I did _endless_ amounts of **trimming**. + - id: other + description: | + I did other stuff, **too**. + - id: bazel-release + image: jobs/google/bazel-old.png + name: Software Engineer in Test # II + team: Bazel Release Process + company: Google + startDate: 2013-09-15 # rough guess, since I was still working on Wallet in + # Q3 2013, but had fully transitioned to Bazel by + # Q3 2014 - but it hadn't gotten cold yet + endDate: 2017-06-15 # did I truly ever stop working on the release process? + # however, this is around when it stopped being my job + description: "The long version is, I did so much freaking junk on this thing." + shortDescription: "The short version is, a lot." + achievements: + - id: mentor + description: | + I taught Florian the secrets of releases. + - id: teach + description: | + I taught everyone else how to be sheriff. + - id: bazel-android + image: jobs/google/bazel-old.png + name: Software Engineer # II + team: Bazel Android Support + company: Google + startDate: 2013-09-15 # same as Bazel Release Process + endDate: 2016-11-15 # vague guess - this is around when my focus shifted to + # configurability full-time, since before that I was + # doing configurability as a side job and Android as a + # primary job + description: null + - id: google-tooling + image: jobs/google/google.png + name: Software Engineer in Test # II + team: Internal Tooling + company: Google + startDate: 2013-02-15 # rough guess, since Jon mentioned my work on the tool + # in Q3 2013 + # which was after I started the UI work in Summer + # which was after I'd been invited to start working on + # the project around midway through Q1 + endDate: 2017-12-18 # dead on, this is the day I got a peer bonus for + # helping with turning this down + description: null + - id: wallet-testing + image: jobs/google/wallet.jpg + name: Software Engineer in Test # II + team: Wallet Web Frontend + company: Google + startDate: 2011-07-18 # dead on, this was my start date + endDate: 2013-09-15 # same as with the Bazel Release Process start date, + # since they're the same day + description: null diff --git a/_data/metadata.json b/_data/metadata.json deleted file mode 100644 index fe0eaa7..0000000 --- a/_data/metadata.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "title": "Marissa Staib | Resume", - "description": "Skills, education, and experience for Marissa Staib in software." - "url": "https://resume.reya.zone", - "cardimage_path": "/img/edupatilla-mari-image.png", - "contact": { - "email": "mari.soft@reya.zone", - "twitter": "GossipyReya" - } -} diff --git a/_data/metadata.yaml b/_data/metadata.yaml new file mode 100644 index 0000000..7bb5a4c --- /dev/null +++ b/_data/metadata.yaml @@ -0,0 +1,6 @@ +--- +title: Marissa Staib +description: Skills, education, and experience for Marissa Staib in software. +url: https://resume.reya.zone +cardimage_path: "/img/snaximation-mari.png" +twitter: GossipyReya diff --git a/_data/skills.yaml b/_data/skills.yaml new file mode 100644 index 0000000..fef47f6 --- /dev/null +++ b/_data/skills.yaml @@ -0,0 +1,66 @@ +--- +proficiency: +- label: Beginner (0 of 5) + image: proficiency/0_beginner.svg +- label: Novice (1 of 5) + image: proficiency/1_novice.svg +- label: Intermediate (2 of 5) + image: proficiency/2_intermediate.svg +- label: Experienced (3 of 5) + image: proficiency/3_experienced.svg +- label: Adept (4 of 5) + image: proficiency/4_adept.svg +- label: Advanced (5 of 5) + image: proficiency/5_advanced.svg +- label: Expert (6 of 5) + image: proficiency/6_expert.svg +categories: +- id: code + title: Code Languages + skills: + - id: python + proficiency: 6 + name: Python + img: skills/code/python.svg + - id: java + proficiency: 6 + name: Java + img: skills/code/java.svg + - id: javascript + proficiency: 5 + name: JavaScript + img: skills/code/js.svg + - id: typescript + proficiency: 4 + name: TypeScript + img: skills/code/typescript.png + - id: html5 + proficiency: 3 + name: HTML5+CSS3 + img: skills/code/html5.svg + - id: kotlin + proficiency: 1 + name: Kotlin + img: skills/code/kotlin.svg + - id: golang + proficiency: 0 + name: Go + img: skills/code/golang.svg +- id: libraries + title: Libraries/Tools + skills: + - id: react + proficiency: 2 + name: React + img: skills/libraries/react.svg +- id: languages + title: Languages + skills: + - id: english + proficiency: 6 + name: US English + img: skills/languages/us.svg + - id: japanese + proficiency: 2 + name: Japanese + img: skills/languages/japan.svg diff --git a/_includes/assets/css/main.css b/_includes/assets/css/main.css index e69de29..166bafd 100644 --- a/_includes/assets/css/main.css +++ b/_includes/assets/css/main.css @@ -0,0 +1,447 @@ +@import url('https://fonts.googleapis.com/css?family=Cinzel:700|Montserrat:700|Noto+Sans+JP:300|Nunito+Sans:400,800&display=swap'); + +body { + margin: 0; +} + +* { + box-sizing: border-box; +} + +:root { + font-size: 13px; + line-height: 1.3; +} + +header { + white-space: nowrap; + text-overflow: clip; +} + +p, h1, h2, h3, ul { + margin: 0; + font-size: inherit; + list-style: none; + padding: 0; + margin: 0; +} + +body { + font-family: 'Nunito Sans', 'Arial', sans-serif; +} + +header { + position: relative; + display: flex; + flex-flow: column nowrap; + align-items: flex-start; + text-shadow: white 1px 1px 2px, white -1px 1px 2px, white 1px -1px 2px, white -1px -1px 2px; + background-color: white; + background-image: linear-gradient(to right, white 40%, transparent 60%), linear-gradient(to bottom, transparent 80%, white), url("/img/edupatilla-mari.png"); + background-size: auto, auto, auto 300%; + background-position: center center, center center, right 30%; + background-repeat: no-repeat, no-repeat, no-repeat; +} + +header h1 { + display: flex; + flex-flow: row nowrap; + align-items: baseline; + font-family: 'Montserrat', 'Noto Sans JP', 'Verdana', sans-serif; + font-weight: bold; + font-size: 2.5rem; + letter-spacing: 0.05em; + order: 2; +} + +header h2 { + background-image: linear-gradient(to bottom, white, transparent 10%); + font-weight: bold; + letter-spacing: 0.1em; + position: relative; + font-size: 1rem; + width: 12rem; + left: 1rem; + border-top: 1px solid black; + order: 3; +} + +section h2 { + font-family: 'Cinzel', serif; + font-weight: bold; + font-size: 1.375rem; + font-variant: small-caps; +} + +section h3 { + font-family: 'Cinzel', serif; + font-weight: bold; + font-size: 1.2rem; + font-variant: small-caps; +} + +header rt { + /* font-family: 'Noto Sans JP', sans-serif; */ + font-weight: bold; + font-size: 1rem; +} + +.section-header { + display: flex; + flex-flow: row wrap; + justify-content: space-between; + align-items: baseline; +} + +#content { + position: relative; + overflow: hidden; + margin-top: 10px; + border-top: 1px solid black; + padding-top: 10px; +} + +#content > .divider { + position: absolute; + left: calc(12.25rem - 1px); + top: 0; + bottom: 0; + width: 1px; + border-right: 1px solid black; +} + +#content > .left { + width: 12rem; + float: left; + clear: left; + padding-right: 0.625rem; +} + +#content > .right { + width: calc(100% - 12rem); + float: right; + clear: right; + padding-left: 0.625rem; +} + +.contacts { + padding-left: 0.3rem; + display: flex; + flex-flow: row wrap; + justify-content: space-around; +} + +.contact { + display: block; + margin-left: 0.75rem; +} + +.contacts .container { + display: block; + font-size: 0.9rem; + position: relative; + line-height: 1.6rem; + height: 1.6rem; + text-align: left; + width: 10.5rem; + padding-left: 2rem; + color: inherit; + text-decoration: none; + overflow: hidden; +} + +.contact { + margin-top: 0.25rem; +} + +.contact .icon { + position: absolute; + height: 1.5rem; + width: 1.5rem; + left: 0.1rem; + top: 0.05rem; +} + +.skill-category, .skills { + padding-left: 0.5rem; +} + +.skills { + display: flex; + flex-flow: row wrap; + justify-content: space-around; +} + +.skill { + display: block; + position: relative; + line-height: 1.4rem; + padding-top: 0.1rem; + padding-bottom: 0.1rem; + padding-left: 1.7rem; + padding-right: 1.7rem; + font-size: 0.9rem; + width: 10rem; + overflow: hidden; + margin-left: 0.25rem; + margin-top: 0.05rem; +} + +.skill .icon { + position: absolute; + height: 1.4rem; + width: 1.4rem; + top: 0.1rem; + left: 0.1rem; +} + +.skill .proficiency { + position: absolute; + height: 1.4rem; + width: 7rem; + top: 0; + left: 2.7rem; +} + +.programs { + padding-left: 1.25rem; + display: flex; + flex-flow: column wrap; + align-items: stretch; +} + +.program { + display: flex; + flex-flow: column; + font-size: 0.8rem; + position: relative; + padding-left: 2.7rem; + min-height: 2.4rem; + color: inherit; + text-decoration: none; + overflow: hidden; + align-content: stretch; +} +.program:not(.first-child) { + margin-top: 0.25rem; +} +.program .institution { + font-size: 1rem; + font-weight: bold; + flex: none; +} +.program .date { + display: block; + position: absolute; + top: 0; + right: 0; + width: auto; + text-align: right; +} +.program .name { + font-style: italic; + flex: none; +} +.program .notes { + flex: none; +} + +.program .icon { + position: absolute; + height: 2.4rem; + width: 2.4rem; + left: 0; + top: 0; +} + +.roles { + padding-left: 1.25rem; +} + +.role { + display: flex; + flex-flow: column; + justify-content: center; + margin-bottom: 0.5rem; + position: relative; + padding-left: 3.1rem; + min-height: 3rem; +} + +.role .firstline { + /* display: flex; + flex-flow: row wrap; + justify-content: space-between; + align-items: baseline; */ + flex: 1 1 100%; +} + +.role .firstline .name { + display: inline; +} + +#page:not(.showing-all) .role.minimized:not(.showing-all) .header { + display: flex; + flex-flow: row wrap; + justify-content: flex-start; + align-items: baseline; +} + +.role .icon { + position: absolute; + left: 0; + top: 0; + width: 3rem; + height: 3rem; +} + +#page:not(.showing-all) .role.minimized:not(.showing-all) .icon { + margin-right: 0.25rem; +} + +#page:not(.showing-all) .role.minimized:not(.showing-all) .name { + font-size: 1rem; +} + +#page:not(.showing-all) .role.minimized:not(.showing-all) .description, +#page:not(.showing-all) .role.minimized:not(.showing-all) .achievement { + font-size: 0.9rem; +} + +.role .details, .role .details .date { + display: flex; + flex-flow: row wrap; + align-items: baseline; + font-family: 'Nunito Sans', 'Arial', sans-serif; + font-size: 0.8rem; + font-style: italic; + font-variant: normal; + font-weight: normal; + flex: 1 0 auto; + max-width: 100%; +} + +.role .details .date { + justify-content: flex-end; + padding-left: 0.1rem; + padding-right: 0.1rem; +} + +.role .details .team, .role .details .company, .role .details .date .start, .role .details .date .end { + display: inline-block; + flex: none; +} + +.role .achievements { + list-style: disc; + padding-left: 1.5em; +} + +.awards { + padding-left: 0.625rem; +} + +.award { + position: relative; + padding-left: 2.1rem; + display: flex; + flex-flow: column; + font-size: 0.8rem; +} + +.award { + margin-top: 0.25rem; +} + +.award .icon { + position: absolute; + height: 2rem; + width: 2rem; + left: 0; + top: 0; +} + +.award .name { + font-weight: bold; + font-size: 1rem; +} + +.award .team { + font-style: italic; + font-size: 0.7rem; +} + +/* + * .highlight-container: marker for an element which can have its children + * shown or hidden. Should never be nested more than two deep (#page and one + * more element between #page and any elements affected by this) - could be + * modified to support such a thing, but no need yet + * + * .highlight: a highlight-only view of some element, typically a shorter + * version of a full-length text containing only the highlights + * .show-all: button to make the current highlight container show its + * contained lowlights and hide its highlights + * + * elements with these classes are visible only when neither #page nor their + * surrounding container is showing all, thus hidden if either #page or their + * surrounding container is showing all: + * visible = not(#page.showing-all or surrounding-container.showing-all) + * visible = not(#page.showing-all) and not(surrounding-container.showing-all) + * hidden = not visible + * hidden = not(not(#page.showing-all or surrounding-container.showing-all)) + * hidden = #page.showing-all or surrounding-container.showing-all + * + * As #page is itself a highlight container which surrounds everything, this + * is simplified to just ".highlight-container.showing-all". + * + * .lowlight: an element or view of an element which will likely be + * uninteresting to whoever the current highlighted version is for + * + * elements with this class are visible only when either #page or their + * surrounding container is showing all, thus hidden if both #page and their + * surrounding container are _not_ showing all: + * visible = #page.showing-all or surrounding-container.showing-all + * hidden = not visible + * hidden = not(#page.showing-all or surrounding-container.showing-all) + * hidden = not(#page.showing-all) and not(surrounding-container.showing-all) + * + * .show-highlights: button to make the current highlight container hide its + * contained lowlights and show its highlights + * + * elements with this class are visible only when their surrounding container + * and _not_ #page is showing all. This is because when #page is showing all, + * the .show-highlights for individual sections have no effect. Thus they are + * hidden if the page is showing all or if the surrounding container is not + * showing all: + * visible = not(#page.showing-all) and surrouding-container.showing-all + * hidden = not visible + * hidden = not(not(#page.showing-all) and surrounding-container.showing-all) + * hidden = #page.showing-all or not(surrounding-container.showing-all) + * + * Since the buttons are not inside an inner container, we add an alternative + * for the buttons which only consults whether #page is not showing all. + */ +.highlight-container.showing-all .highlight, +.highlight-container.showing-all .show-all, +#page.highlight-container:not(.showing-all) .highlight-container:not(.showing-all) .lowlight, +#page.highlight-container:not(.showing-all) header .buttons .lowlight, +#page.highlight-container:not(.showing-all) header .buttons .show-highlights, +#page.highlight-container:not(.showing-all) .highlight-container:not(.showing-all) .show-highlights, +#page.highlight-container.showing-all .highlight-container .show-highlights { + display: none; +} + +.highlight-icon { + float: right; + opacity: 0.6; + height: 1rem; + width: 1rem; +} + +.highlight-icon:hover { + opacity: 1.0; +} + +.highlight-container.showing-all .highlight-icon { + display: none; +} diff --git a/_includes/assets/css/print.css b/_includes/assets/css/print.css new file mode 100644 index 0000000..c342197 --- /dev/null +++ b/_includes/assets/css/print.css @@ -0,0 +1,5 @@ +@media only print { + footer, .buttons, .show-all, .show-highlights, #print, .highlight-icon { + display: none; + } +} diff --git a/_includes/assets/css/resizing.css b/_includes/assets/css/resizing.css new file mode 100644 index 0000000..fe6d41e --- /dev/null +++ b/_includes/assets/css/resizing.css @@ -0,0 +1,109 @@ +/* Too small for big margins */ +@media only screen and (max-width: 700px) and (min-width: 571px) { + main { + padding: 0 calc((100% - 550px) / 2) 72px calc((100vw - 550px) / 2); + } +} + +@media only screen and (max-width: 570px) { + main { + padding: 0 10px 72px 10px; + } + #print { + display: none; + } +} + +/* Too small to display the full name, so hide last name and put the + * dates in the education and experience sections on their own lines */ +@media only screen and (max-width: 550px) { + .lastname { + display: none; + } + + .program .date { + position: static; + text-align: inherit; + } +} + +/* Too small to display both names, so shorten first name to "Mari" + * Also, please get a new phone, or resize the window */ +@media only screen and (max-width: 400px) { + .fullname { + display: none; + } +} + +/* Large desktop only - full size columns and empty space */ +@media only screen and (min-width: 1120px) { + main, footer { + width: 1120px; + margin-left: auto; + margin-right: auto; + } +} + +@media only screen and (min-width: 1100px) { + :root { + font-size: 20px; + } +} + +@media only screen and (min-width: 900px) and (max-width:1099px) { + :root { + font-size: calc(13px + (100vw - 900px) * 7 / 200) + } +} + +/* Not large desktop - no empty space on the sides */ +@media only screen and (max-width: 1119px) { + main { + width: 100%; + } +} + +/* Smaller than desktop - no columns */ +@media only screen and (max-width: 815px) { + #content .divider { + display: none; + } + + #content > .left { + width: auto; + float: none; + clear: none; + padding-right: 0; + } + + #content > .right { + width: auto; + float: none; + clear: none; + padding-left: 0; + } +} + +/* Phone or tablet only - single column, no empty space */ +@media only screen and (max-width: 960px) { +} + +/* Tablet or desktop only */ +@media only screen and (min-width: 700px) { +} + +/* Phone only */ +@media only screen and (max-width: 699px) { +} + +/* Large phone only */ +@media only screen and (min-width: 500px) and (max-width: 699px) { +} + +/* Large phone, tablet, or desktop only */ +@media only screen and (min-width: 500px) { +} + +/* Small phone only */ +@media only screen and (max-width: 499px) { +} diff --git a/_includes/assets/css/screen.css b/_includes/assets/css/screen.css new file mode 100644 index 0000000..202239c --- /dev/null +++ b/_includes/assets/css/screen.css @@ -0,0 +1,109 @@ +@media only screen { + body { + background-color: #5e5e5e; + margin: 0; + } + + main { + padding: 0 72px 72px 72px; + background-color: white; + margin: 0; + border: 1px solid gray; + box-shadow: 2px 5px 3px rgba(0, 0, 0, 0.3); + } + + footer { + display: block; + font-size: smaller; + color: white; + padding: 10px; + text-shadow: black 1px 1px 1px, black -1px 1px 1px, black 1px -1px 1px, black -1px -1px 1px; + } + + footer a:link, footer a:visited { + color: #4ec6f5; + font-weight: bold; + text-decoration: none; + } + + footer a:hover, footer a:focus { + color: #87deff; + } + + footer a:active { + color: #3d86fc; + } + + header .buttons { + order: 1; + width: 40%; + margin-bottom: 0.5rem; + display: flex; + flex-flow: row; + justify-content: space-between; + } + + header .buttons * { + background-color: transparent; + background-size: contain; + border: 0; + padding: 0; + margin: 0; + flex: 1 0 0; + font-size: 1rem; + line-height: 2; + } + + header .buttons #print { + flex: 5 0 0; + } + + header .buttons .show-highlights, header .buttons .show-all { + flex: 10 0 0; + } + + .show-all, .show-highlights, #print { + border: 0; + padding: 0; + margin: 0; + background-color: transparent; + background-image: linear-gradient(to right, transparent 0%, rgba(0, 0, 0, 0.05) 20%, rgba(0, 0, 0, 0.1) 30%, rgba(0, 0, 0, 0.1) 70%, rgba(0, 0, 0, 0.05) 80%, transparent 100%); + cursor: pointer; + line-height: 2; + } + + .show-all:hover, .show-highlights:hover, #print:hover, + .show-all:focus, .show-highlights:focus, #print:focus { + background-image: linear-gradient(to right, transparent 0%, rgba(0, 0, 100, 0.1) 20%, rgba(0, 0, 100, 0.2) 30%, rgba(0, 0, 100, 0.2) 70%, rgba(0, 0, 100, 0.1) 80%, transparent 100%); + } + + .show-all:active, .show-highlights:active, #print:active { + background-image: linear-gradient(to right, transparent 0%, rgba(0, 100, 200, 0.1) 20%, rgba(0, 100, 200, 0.2) 30%, rgba(0, 100, 200, 0.2) 70%, rgba(0, 100, 200, 0.1) 80%, transparent 100%); + } + + section .highlight-container .show-all, section .highlight-container .show-highlights { + margin-top: 0.25rem; + display: block; + width: 100%; + font-size: 0.7rem; + height: 1.5rem; + transition: margin-top 0.25s step-start, height 0.25s step-start, opacity 0.25s ease 0.1s, transform 0.25s ease 0.1s; + } + + section .highlight-container:not(:hover) .show-all:not(:focus), section .highlight-container:not(:hover) .show-highlights:not(:focus) { + margin-top: 0; + height: 0; + opacity: 0; + transform: scaleY(0); + transition: margin-top 0.25s step-end, height 0.25s step-end, opacity 0.25s ease, transform 0.25s ease; + } + + .lowlight:not(.lowlight-no-gradient) { + background-image: linear-gradient(to left top, rgba(0, 0, 0, 0.4) 0%, rgba(0, 0, 0, 0.3) 10%, rgba(0, 0, 0, 0.1) 50%, transparent 90%); + } + + .show-highlights img, .show-all img, #print img { + height: 1em; + width: 1em; + } +} diff --git a/_includes/assets/js/main.js b/_includes/assets/js/main.js index e69de29..b8a9806 100644 --- a/_includes/assets/js/main.js +++ b/_includes/assets/js/main.js @@ -0,0 +1,43 @@ +(function(window, document) { + function findClosestParentMatching(child, selector) { + if (!child) { + return null; + } else if (child.matches(selector)) { + return child; + } else { + return findClosestParentMatching(child.parentElement, selector); + } + } + + function showAll(button) { + parent = findClosestParentMatching(button, ".highlight-container"); + if (!parent) { + return; + } + + parent.classList.add("showing-all"); + } + + function showHighlights(button) { + parent = findClosestParentMatching(button, ".highlight-container"); + if (!parent) { + return; + } + + parent.classList.remove("showing-all"); + } + + function print() { + window.print(); + } + + document.addEventListener("click", function(event) { + if (event.target.matches(".show-all, .show-all *")) { + showAll(event.target); + } else if (event.target.matches(".show-highlights, .show-highlights *")) { + showHighlights(event.target); + } else if (event.target.matches("#print, #print *")) { + print(); + } + }); +})(window, document); diff --git a/_includes/components/footer.njk b/_includes/components/footer.njk new file mode 100644 index 0000000..be4465e --- /dev/null +++ b/_includes/components/footer.njk @@ -0,0 +1,8 @@ +Built with Eleventy and served from +Github via +Netlify. +Favicon by @snaximation. +Banner image by @edupatilla. +Printer, Spotlight, Home, US flag, Japanese flag, and WWW icons made by +Freepik +from www.flaticon.com diff --git a/_includes/components/head.njk b/_includes/components/head.njk index f311c6e..83a0527 100644 --- a/_includes/components/head.njk +++ b/_includes/components/head.njk @@ -4,6 +4,7 @@ {{ metadata.title }} + {% include "components/favicon.njk" %} {% include "components/card.njk" %} @@ -11,11 +12,14 @@ {% set css %} {% include "assets/css/main.css" %} + {% include "assets/css/print.css" %} + {% include "assets/css/screen.css" %} + {% include "assets/css/resizing.css" %} {% endset %} - + {% set js %} {% include "assets/js/main.js" %} {% endset %} - + diff --git a/_includes/components/resume/award-section.njk b/_includes/components/resume/award-section.njk new file mode 100644 index 0000000..2e40821 --- /dev/null +++ b/_includes/components/resume/award-section.njk @@ -0,0 +1,18 @@ +{# Uses page variable: filter.awards #} +{# Uses data store: awards.awards #} +{% set awardsFilter = filter.awards if filter and filter.awards else "all" %} +{% set awardsFiltered = awards.awards | identifyHighlights(awardsFilter) %} + +
+
+

Awards

+ {% if awardsFiltered | hasLowlights %} + {% include "components/resume/highlight-icon.njk" %} + {% endif %} +
+ +
diff --git a/_includes/components/resume/award.njk b/_includes/components/resume/award.njk new file mode 100644 index 0000000..a107721 --- /dev/null +++ b/_includes/components/resume/award.njk @@ -0,0 +1,10 @@ +
  • + {% if award.image %} + + {% endif %} + {{ award.role }} + {{ award.name }} + {% if award.description %} + {{ award.description }} + {% endif %} +
  • diff --git a/_includes/components/resume/contact-section.njk b/_includes/components/resume/contact-section.njk new file mode 100644 index 0000000..6d51efb --- /dev/null +++ b/_includes/components/resume/contact-section.njk @@ -0,0 +1,18 @@ +{# Uses page variable: filter.contact #} +{# Uses data store: contact.methods #} +{% set contactFilter = filter.contact if filter and filter.contact else "all" %} +{% set contactsFiltered = contact.methods | identifyHighlights(contactFilter) %} + +
    +
    +

    Contact

    + {% if contactsFiltered | hasLowlights %} + {% include "components/resume/highlight-icon.njk" %} + {% endif %} +
    + +
    diff --git a/_includes/components/resume/contact.njk b/_includes/components/resume/contact.njk new file mode 100644 index 0000000..770be27 --- /dev/null +++ b/_includes/components/resume/contact.njk @@ -0,0 +1,12 @@ +{# Uses loop variable: contact #} + + diff --git a/_includes/components/resume/education-section.njk b/_includes/components/resume/education-section.njk new file mode 100644 index 0000000..98d36ba --- /dev/null +++ b/_includes/components/resume/education-section.njk @@ -0,0 +1,18 @@ +{# Uses page variable: filter.education #} +{# Uses data store: education.programs #} +{% set educationFilter = filter.education if filter and filter.education else "all" %} +{% set educationFiltered = education.programs | identifyHighlights(educationFilter) %} + +
    +
    +

    Education

    + {% if educationFiltered | hasLowlights %} + {% include "components/resume/highlight-icon.njk" %} + {% endif %} +
    + +
    diff --git a/_includes/components/resume/education.njk b/_includes/components/resume/education.njk new file mode 100644 index 0000000..35f74bb --- /dev/null +++ b/_includes/components/resume/education.njk @@ -0,0 +1,13 @@ +{# Uses loop variable: program #} + +
  • + {% if program.image %} + + {% endif %} + {{ program.institution }} + {{ program.name }} + {% if program.notes %} + {{ program.notes }} + {% endif %} + {{ program.endDate | monthAndYear }} +
  • diff --git a/_includes/components/resume/experience-role.njk b/_includes/components/resume/experience-role.njk new file mode 100644 index 0000000..92c108a --- /dev/null +++ b/_includes/components/resume/experience-role.njk @@ -0,0 +1,40 @@ +{# uses loop variable role #} + +
    +
    + {% if role.image %}{% endif %} +
    +

    + {{ role.name }}  +

    + {% if ((not role.highlight) and role.shortDescription) or role.achievements | hasLowlights %} + {% include "components/resume/highlight-icon.njk" %} + {% endif %} +
    + + {% if role.team %}on {{ role.team }} {% endif %} + {% if role.company %}at {{ role.company }} {% endif %} + + {% if role.startDate %} from {{ role.startDate | monthAndYear }}{% endif %} + {% if role.endDate %} until {{ role.endDate | monthAndYear }}{% endif %} + + +
    + {% if role.description %} +
    + {{ role.description | md | safe }} +
    + {% endif %} + {% if (not role.highlight) and role.shortDescription %} +
    + {{ role.shortDescription | md | safe }} +
    + {% endif %} + {% if role.achievements %} + + {% endif %} +
    diff --git a/_includes/components/resume/experience-section.njk b/_includes/components/resume/experience-section.njk new file mode 100644 index 0000000..2163ee4 --- /dev/null +++ b/_includes/components/resume/experience-section.njk @@ -0,0 +1,13 @@ +{# uses page variable filter.experience #} +{# uses data store experience.roles #} +{% set experienceFilter = filter.experience if filter and filter.experience else "all" %} +{% set experienceRolesFiltered = experience.roles | identifyHighlightsRecursive(experienceFilter, "achievements") %} + +
    +

    Experience

    +
    +
    + {% for role in experienceRolesFiltered %} + {% include "components/resume/experience-role.njk" %} + {% endfor %} +
    diff --git a/_includes/components/resume/header.njk b/_includes/components/resume/header.njk new file mode 100644 index 0000000..ea4ef3f --- /dev/null +++ b/_includes/components/resume/header.njk @@ -0,0 +1,23 @@ +

    + + Mari + マリ + + + ssa + ッサ + +   + + Staib + ステーブ + +

    +

    software engineer

    +
    + + {% include "components/resume/show-hide-toggle.njk" %} +
    diff --git a/_includes/components/resume/highlight-icon.njk b/_includes/components/resume/highlight-icon.njk new file mode 100644 index 0000000..46b0135 --- /dev/null +++ b/_includes/components/resume/highlight-icon.njk @@ -0,0 +1,5 @@ +Showing highlights only. Click Show All (in the header) to show additional (but likely irrelevant) data. diff --git a/_includes/components/resume/show-hide-toggle.njk b/_includes/components/resume/show-hide-toggle.njk new file mode 100644 index 0000000..0f9a710 --- /dev/null +++ b/_includes/components/resume/show-hide-toggle.njk @@ -0,0 +1,12 @@ + + diff --git a/_includes/components/resume/skill-section.njk b/_includes/components/resume/skill-section.njk new file mode 100644 index 0000000..e54ba3f --- /dev/null +++ b/_includes/components/resume/skill-section.njk @@ -0,0 +1,16 @@ +{# Uses page variable: filter.skills #} +{# Uses data store: skills.categories #} +{% set skillFilter = filter.skills if filter and filter.skills else "all" %} +{% set skillCategoriesFiltered = skills.categories | identifyHighlightsRecursive(skillFilter, "skills") %} + +
    +
    +

    Skills

    + {% if skillCategoriesFiltered | hasLowlightsRecursive("skills") %} + {% include "components/resume/highlight-icon.njk" %} + {% endif %} +
    + {% for category in skillCategoriesFiltered %} + {% include "components/resume/skill-subcategory.njk" %} + {% endfor %} +
    diff --git a/_includes/components/resume/skill-subcategory.njk b/_includes/components/resume/skill-subcategory.njk new file mode 100644 index 0000000..1f34be5 --- /dev/null +++ b/_includes/components/resume/skill-subcategory.njk @@ -0,0 +1,10 @@ +{# Uses loop variable: category #} + +
    + {{ category.title }} + +
    diff --git a/_includes/components/resume/skill.njk b/_includes/components/resume/skill.njk new file mode 100644 index 0000000..44ae348 --- /dev/null +++ b/_includes/components/resume/skill.njk @@ -0,0 +1,12 @@ +{# Uses loop variable: skill #} +{# Uses data store: skills.proficiency #} + +
  • + {% if skill.img %} + + {% endif %} + + {{ skill.name }} +
  • diff --git a/_includes/components/twitter-card.njk b/_includes/components/twitter-card.njk index 8c55f7e..7e6cedc 100644 --- a/_includes/components/twitter-card.njk +++ b/_includes/components/twitter-card.njk @@ -1,5 +1,5 @@ - + diff --git a/_includes/layouts/base.njk b/_includes/layouts/base.njk index a7082c6..259e461 100644 --- a/_includes/layouts/base.njk +++ b/_includes/layouts/base.njk @@ -2,8 +2,11 @@ {% include "components/head.njk" %} -
    +
    {{ layoutContent | safe }}
    + diff --git a/_includes/layouts/resume.njk b/_includes/layouts/resume.njk new file mode 100644 index 0000000..078cfed --- /dev/null +++ b/_includes/layouts/resume.njk @@ -0,0 +1,37 @@ +--- +layout: layouts/base.njk +--- + +
    +
    + {% include "components/resume/header.njk" %} +
    + +
    +
    +
    + {% include "components/resume/contact-section.njk" %} +
    + +
    + {% include "components/resume/education-section.njk" %} +
    + +
    +

    About

    + {{ layoutContent | safe }} +
    + +
    + {% include "components/resume/skill-section.njk" %} +
    + +
    + {% include "components/resume/experience-section.njk" %} +
    + +
    + {% include "components/resume/award-section.njk" %} +
    +
    +
    diff --git a/index.md b/index.md new file mode 100644 index 0000000..c0ee7f2 --- /dev/null +++ b/index.md @@ -0,0 +1,21 @@ +--- +layout: layouts/resume.njk +filter: + contact: + - us-phone + education: + - rpi + skills: + code: + - all + - "-python" + languages: all + experience: + "-all": false + "bazel-configurability": + - other + awards: + - perfy +--- + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Amet aliquam id diam maecenas ultricies mi. Ut porttitor leo a diam. Lorem dolor sed viverra ipsum nunc aliquet bibendum. Leo vel orci porta non pulvinar. Enim nunc faucibus a pellentesque sit amet porttitor eget. Nunc mi ipsum faucibus vitae aliquet nec ullamcorper. Amet volutpat consequat mauris nunc congue. Quam adipiscing vitae proin sagittis nisl. Faucibus et molestie ac feugiat sed lectus vestibulum mattis ullamcorper. Aliquam nulla facilisi cras fermentum odio eu feugiat. Sed adipiscing diam donec adipiscing tristique. Sed odio morbi quis commodo odio. diff --git a/package-lock.json b/package-lock.json index 6b32008..7e525cd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "reyasume", - "version": "0.0.0", + "version": "0.5.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -2061,6 +2061,14 @@ } } }, + "full-icu": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/full-icu/-/full-icu-1.3.0.tgz", + "integrity": "sha512-LGLpSsbkHUT0T+EKrIJltYoejYzUqg1eW+n6wm/FTte1pDiYjeKTxO0uJvrE3jgv6V9eBzMAjF6A8jH16C0+eQ==", + "requires": { + "icu4c-data": "^0.64.2" + } + }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -2303,6 +2311,11 @@ "safer-buffer": ">= 2.1.2 < 3" } }, + "icu4c-data": { + "version": "0.64.2", + "resolved": "https://registry.npmjs.org/icu4c-data/-/icu4c-data-0.64.2.tgz", + "integrity": "sha512-BPuTfkRTkplmK1pNrqgyOLJ0qB2UcQ12EotVLwiWh4ErtZR1tEYoRZk/LBLmlDfK5v574/lQYLB4jT9vApBiBQ==" + }, "immutable": { "version": "3.8.2", "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", @@ -2332,6 +2345,11 @@ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" }, + "intl": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/intl/-/intl-1.2.5.tgz", + "integrity": "sha1-giRKIZDE5Bn4Nx9ao02qNCDiq94=" + }, "invert-kv": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", diff --git a/package.json b/package.json index 24a1f3d..9f4af91 100644 --- a/package.json +++ b/package.json @@ -1,14 +1,14 @@ { "name": "reyasume", - "version": "0.0.0", + "version": "0.5.0", "description": "Mari's Eleventy resume site on Netlify", "scripts": { "clean": "rm -rf _site", - "build": "npx eleventy", - "watch": "npx eleventy --watch", - "serve": "npx eleventy --serve", - "debug": "npx cross-env DEBUG=* npx eleventy", - "debug-serve": "npx cross-env DEBUG=* npx eleventy --serve" + "build": "npx cross-env NODE_ICU_DATA=node_modules/full-icu npx eleventy", + "watch": "npx cross-env NODE_ICU_DATA=node_modules/full-icu npx eleventy --watch", + "serve": "npx cross-env NODE_ICU_DATA=node_modules/full-icu npx eleventy --serve", + "debug": "npx cross-env NODE_ICU_DATA=node_modules/full-icu DEBUG=* npx eleventy", + "debug-serve": "npx cross-env NODE_ICU_DATA=node_modules/full-icu DEBUG=* npx eleventy --serve" }, "repository": { "type": "git", @@ -24,7 +24,10 @@ "@11ty/eleventy": "^0.10.0", "clean-css": "^4.2.1", "cross-env": "^6.0.3", + "full-icu": "^1.3.0", "html-minifier": "^4.0.0", + "intl": "^1.2.5", + "js-yaml": "^3.13.1", "markdown-it": "^10.0.0", "npx": "^10.2.0", "uglify-es": "^3.3.9" diff --git a/static/img/contacts/github.png b/static/img/contacts/github.png new file mode 100644 index 0000000..ea6ff54 Binary files /dev/null and b/static/img/contacts/github.png differ diff --git a/static/img/contacts/home.svg b/static/img/contacts/home.svg new file mode 100644 index 0000000..8887e02 --- /dev/null +++ b/static/img/contacts/home.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/img/contacts/japan.svg b/static/img/contacts/japan.svg new file mode 100644 index 0000000..2de7026 --- /dev/null +++ b/static/img/contacts/japan.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/img/contacts/us.svg b/static/img/contacts/us.svg new file mode 100644 index 0000000..841eeba --- /dev/null +++ b/static/img/contacts/us.svg @@ -0,0 +1,176 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/img/contacts/www.svg b/static/img/contacts/www.svg new file mode 100644 index 0000000..4bb7032 --- /dev/null +++ b/static/img/contacts/www.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/img/education/regis.jpeg b/static/img/education/regis.jpeg new file mode 100644 index 0000000..75fdde1 Binary files /dev/null and b/static/img/education/regis.jpeg differ diff --git a/static/img/education/rpi.jpg b/static/img/education/rpi.jpg new file mode 100644 index 0000000..8cc7695 Binary files /dev/null and b/static/img/education/rpi.jpg differ diff --git a/static/img/education/tefl_ita.png b/static/img/education/tefl_ita.png new file mode 100644 index 0000000..67dc0b0 Binary files /dev/null and b/static/img/education/tefl_ita.png differ diff --git a/static/img/edupatilla-mari-image.png b/static/img/edupatilla-mari.png similarity index 100% rename from static/img/edupatilla-mari-image.png rename to static/img/edupatilla-mari.png diff --git a/static/img/jobs/google/bazel-old.png b/static/img/jobs/google/bazel-old.png new file mode 100644 index 0000000..5e27ea9 Binary files /dev/null and b/static/img/jobs/google/bazel-old.png differ diff --git a/static/img/jobs/google/bazel.png b/static/img/jobs/google/bazel.png new file mode 100644 index 0000000..b083373 Binary files /dev/null and b/static/img/jobs/google/bazel.png differ diff --git a/static/img/jobs/google/google.png b/static/img/jobs/google/google.png new file mode 100644 index 0000000..84668e7 Binary files /dev/null and b/static/img/jobs/google/google.png differ diff --git a/static/img/jobs/google/wallet.jpg b/static/img/jobs/google/wallet.jpg new file mode 100644 index 0000000..dc3807e Binary files /dev/null and b/static/img/jobs/google/wallet.jpg differ diff --git a/static/img/print.svg b/static/img/print.svg new file mode 100644 index 0000000..c6fccb3 --- /dev/null +++ b/static/img/print.svg @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/img/proficiency/0_beginner.svg b/static/img/proficiency/0_beginner.svg new file mode 100644 index 0000000..e7f568f --- /dev/null +++ b/static/img/proficiency/0_beginner.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/static/img/proficiency/1_novice.svg b/static/img/proficiency/1_novice.svg new file mode 100644 index 0000000..9cf9d19 --- /dev/null +++ b/static/img/proficiency/1_novice.svg @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/static/img/proficiency/2_intermediate.svg b/static/img/proficiency/2_intermediate.svg new file mode 100644 index 0000000..6502164 --- /dev/null +++ b/static/img/proficiency/2_intermediate.svg @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/static/img/proficiency/3_experienced.svg b/static/img/proficiency/3_experienced.svg new file mode 100644 index 0000000..794706f --- /dev/null +++ b/static/img/proficiency/3_experienced.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/static/img/proficiency/4_adept.svg b/static/img/proficiency/4_adept.svg new file mode 100644 index 0000000..48aa682 --- /dev/null +++ b/static/img/proficiency/4_adept.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/static/img/proficiency/5_advanced.svg b/static/img/proficiency/5_advanced.svg new file mode 100644 index 0000000..e6310b3 --- /dev/null +++ b/static/img/proficiency/5_advanced.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/static/img/proficiency/6_expert.svg b/static/img/proficiency/6_expert.svg new file mode 100644 index 0000000..a807039 --- /dev/null +++ b/static/img/proficiency/6_expert.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/static/img/proficiency/x_template.svg b/static/img/proficiency/x_template.svg new file mode 100644 index 0000000..d43443b --- /dev/null +++ b/static/img/proficiency/x_template.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/static/img/skills/code/golang.svg b/static/img/skills/code/golang.svg new file mode 100644 index 0000000..bccf226 --- /dev/null +++ b/static/img/skills/code/golang.svg @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/img/skills/code/html5.svg b/static/img/skills/code/html5.svg new file mode 100644 index 0000000..65d77ba --- /dev/null +++ b/static/img/skills/code/html5.svg @@ -0,0 +1,14 @@ + + HTML5 Logo + + + + + + + + + + + + \ No newline at end of file diff --git a/static/img/skills/code/java.svg b/static/img/skills/code/java.svg new file mode 100644 index 0000000..a244eef --- /dev/null +++ b/static/img/skills/code/java.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/static/img/skills/code/js.svg b/static/img/skills/code/js.svg new file mode 100644 index 0000000..64b2440 --- /dev/null +++ b/static/img/skills/code/js.svg @@ -0,0 +1,31 @@ + + + + diff --git a/static/img/skills/code/kotlin.svg b/static/img/skills/code/kotlin.svg new file mode 100644 index 0000000..3480717 --- /dev/null +++ b/static/img/skills/code/kotlin.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/img/skills/code/python.svg b/static/img/skills/code/python.svg new file mode 100644 index 0000000..4cd55b5 --- /dev/null +++ b/static/img/skills/code/python.svg @@ -0,0 +1,55 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/img/skills/code/typescript.png b/static/img/skills/code/typescript.png new file mode 100644 index 0000000..1f0b9c8 Binary files /dev/null and b/static/img/skills/code/typescript.png differ diff --git a/static/img/skills/languages/japan.svg b/static/img/skills/languages/japan.svg new file mode 100644 index 0000000..2de7026 --- /dev/null +++ b/static/img/skills/languages/japan.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/img/skills/languages/us.svg b/static/img/skills/languages/us.svg new file mode 100644 index 0000000..841eeba --- /dev/null +++ b/static/img/skills/languages/us.svg @@ -0,0 +1,176 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/img/skills/libraries/react.svg b/static/img/skills/libraries/react.svg new file mode 100644 index 0000000..e07b101 --- /dev/null +++ b/static/img/skills/libraries/react.svg @@ -0,0 +1,9 @@ + + React Logo + + + + + + + \ No newline at end of file diff --git a/static/img/snaximation-mari-image.png b/static/img/snaximation-mari.png similarity index 100% rename from static/img/snaximation-mari-image.png rename to static/img/snaximation-mari.png diff --git a/static/img/spotlights-dark.svg b/static/img/spotlights-dark.svg new file mode 100644 index 0000000..4200cb9 --- /dev/null +++ b/static/img/spotlights-dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/img/spotlights.svg b/static/img/spotlights.svg new file mode 100644 index 0000000..e582c12 --- /dev/null +++ b/static/img/spotlights.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/test.md b/test.md new file mode 100644 index 0000000..c28b707 --- /dev/null +++ b/test.md @@ -0,0 +1,29 @@ +--- +layout: layouts/resume.njk +filter: + contact: + - us-phone + - address + - github + education: + - rpi + - tefl_ita + skills: + code: + - java + - javascript + - typescript + - html5 + languages: all + experience: + "-all": false + "bazel-configurability": + - other + awards: + - perfy + - deans-list +--- + +This is where my description of the highlights for this role would go. If I had one! + +This is just a test resume to work out some last kinks in the accessibility parts of the design.