@ -1,2 +1,212 @@ |
||||
node_modules |
||||
build |
||||
# |
||||
# Linux |
||||
# |
||||
|
||||
*~ |
||||
|
||||
# temporary files which can be created if a process still has a handle open of a deleted file |
||||
.fuse_hidden* |
||||
|
||||
# KDE directory preferences |
||||
.directory |
||||
|
||||
# Linux trash folder which might appear on any partition or disk |
||||
.Trash-* |
||||
|
||||
# .nfs files are created when an open file is removed but is still being accessed |
||||
.nfs* |
||||
|
||||
# |
||||
# Windows |
||||
# |
||||
|
||||
# Windows thumbnail cache files |
||||
Thumbs.db |
||||
Thumbs.db:encryptable |
||||
ehthumbs.db |
||||
ehthumbs_vista.db |
||||
|
||||
# Dump file |
||||
*.stackdump |
||||
|
||||
# Folder config file |
||||
[Dd]esktop.ini |
||||
|
||||
# Recycle Bin used on file shares |
||||
$RECYCLE.BIN/ |
||||
|
||||
# Windows Installer files |
||||
*.cab |
||||
*.msi |
||||
*.msix |
||||
*.msm |
||||
*.msp |
||||
|
||||
# Windows shortcuts |
||||
*.lnk |
||||
|
||||
# |
||||
# macOS |
||||
# |
||||
|
||||
# General |
||||
.DS_Store |
||||
.AppleDouble |
||||
.LSOverride |
||||
|
||||
# Icon must end with two \r |
||||
Icon |
||||
|
||||
# Thumbnails |
||||
._* |
||||
|
||||
# Files that might appear in the root of a volume |
||||
.DocumentRevisions-V100 |
||||
.fseventsd |
||||
.Spotlight-V100 |
||||
.TemporaryItems |
||||
.Trashes |
||||
.VolumeIcon.icns |
||||
.com.apple.timemachine.donotpresent |
||||
|
||||
# Directories potentially created on remote AFP share |
||||
.AppleDB |
||||
.AppleDesktop |
||||
Network Trash Folder |
||||
Temporary Items |
||||
.apdisk |
||||
|
||||
# |
||||
# Node |
||||
# |
||||
|
||||
# Logs |
||||
logs |
||||
*.log |
||||
npm-debug.log* |
||||
yarn-debug.log* |
||||
yarn-error.log* |
||||
lerna-debug.log* |
||||
.pnpm-debug.log* |
||||
|
||||
# Diagnostic reports (https://nodejs.org/api/report.html) |
||||
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json |
||||
|
||||
# Runtime data |
||||
pids |
||||
*.pid |
||||
*.seed |
||||
*.pid.lock |
||||
|
||||
# Directory for instrumented libs generated by jscoverage/JSCover |
||||
lib-cov |
||||
|
||||
# Coverage directory used by tools like istanbul |
||||
coverage |
||||
*.lcov |
||||
|
||||
# nyc test coverage |
||||
.nyc_output |
||||
|
||||
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) |
||||
.grunt |
||||
|
||||
# Bower dependency directory (https://bower.io/) |
||||
bower_components |
||||
|
||||
# node-waf configuration |
||||
.lock-wscript |
||||
|
||||
# Compiled binary addons (https://nodejs.org/api/addons.html) |
||||
build/Release |
||||
|
||||
# Dependency directories |
||||
node_modules/ |
||||
jspm_packages/ |
||||
|
||||
# Snowpack dependency directory (https://snowpack.dev/) |
||||
web_modules/ |
||||
|
||||
# TypeScript cache |
||||
*.tsbuildinfo |
||||
|
||||
# Optional npm cache directory |
||||
.npm |
||||
|
||||
# Optional eslint cache |
||||
.eslintcache |
||||
|
||||
# Optional stylelint cache |
||||
.stylelintcache |
||||
|
||||
# Microbundle cache |
||||
.rpt2_cache/ |
||||
.rts2_cache_cjs/ |
||||
.rts2_cache_es/ |
||||
.rts2_cache_umd/ |
||||
|
||||
# Optional REPL history |
||||
.node_repl_history |
||||
|
||||
# Output of 'npm pack' |
||||
*.tgz |
||||
|
||||
# Yarn Integrity file |
||||
.yarn-integrity |
||||
|
||||
# dotenv environment variable files |
||||
.env |
||||
.env.development.local |
||||
.env.test.local |
||||
.env.production.local |
||||
.env.local |
||||
|
||||
# parcel-bundler cache (https://parceljs.org/) |
||||
.cache |
||||
.parcel-cache |
||||
|
||||
# Next.js build output |
||||
.next |
||||
out |
||||
|
||||
# Nuxt.js build / generate output |
||||
.nuxt |
||||
dist |
||||
|
||||
# Gatsby files |
||||
.cache/ |
||||
# Comment in the public line in if your project uses Gatsby and not Next.js |
||||
# https://nextjs.org/blog/next-9-1#public-directory-support |
||||
# public |
||||
|
||||
# vuepress build output |
||||
.vuepress/dist |
||||
|
||||
# vuepress v2.x temp and cache directory |
||||
.temp |
||||
.cache |
||||
|
||||
# Docusaurus cache and generated files |
||||
.docusaurus |
||||
|
||||
# Serverless directories |
||||
.serverless/ |
||||
|
||||
# FuseBox cache |
||||
.fusebox/ |
||||
|
||||
# DynamoDB Local files |
||||
.dynamodb/ |
||||
|
||||
# TernJS port file |
||||
.tern-port |
||||
|
||||
# Stores VSCode versions used for testing VSCode extensions |
||||
.vscode-test |
||||
|
||||
# yarn v2 |
||||
.yarn/cache |
||||
.yarn/unplugged |
||||
.yarn/build-state.yml |
||||
.yarn/install-state.gz |
||||
.pnp.* |
||||
|
@ -1,13 +0,0 @@ |
||||
Copyright (c) 2021 Nichole Mattera |
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any |
||||
purpose with or without fee is hereby granted, provided that the above |
||||
copyright notice and this permission notice appear in all copies. |
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
||||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
||||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
||||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
||||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
||||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
||||
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
@ -1,9 +0,0 @@ |
||||
# Background video clip |
||||
**Source:** https://videohive.net/item/blue-and-red-bokeh/23451163 |
||||
|
||||
**Licensed under:** [Video Media (Single Use) License](https://videohive.net/licenses/terms/video_media_single/1.0) |
||||
|
||||
# Pride background video clip |
||||
Source: https://videohive.net/item/gay-pride-flag-/8597894 |
||||
|
||||
**Licensed under:** [Video Media (Single Use) License](https://videohive.net/licenses/terms/video_media_single/1.0) |
@ -1,16 +0,0 @@ |
||||
package cmd |
||||
|
||||
import ( |
||||
"log" |
||||
"net/http" |
||||
|
||||
"git.nicholemattera.com/NicholeMattera/NicholeMattera.com/internal/routes" |
||||
) |
||||
|
||||
// Init initializes the HTTP Server
|
||||
func Init() { |
||||
http.Handle("/", routes.MakeHomeHandler()) |
||||
// http.Handle("/mer", routes.MakeGaymerHandler())
|
||||
|
||||
log.Fatal(http.ListenAndServe(":8082", nil)) |
||||
} |
@ -1,8 +0,0 @@ |
||||
module git.nicholemattera.com/NicholeMattera/NicholeMattera.com |
||||
|
||||
go 1.17 |
||||
|
||||
require ( |
||||
golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 // indirect |
||||
golang.org/x/tools v0.1.8 // indirect |
||||
) |
@ -1,15 +0,0 @@ |
||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= |
||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= |
||||
golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 h1:VLliZ0d+/avPrXXH+OakdXhpJuEoBZuwh1m2j7U6Iug= |
||||
golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= |
||||
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= |
||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= |
||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= |
||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= |
||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= |
||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= |
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= |
||||
golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= |
||||
golang.org/x/tools v0.1.8 h1:P1HhGGuLW4aAclzjtmJdf0mJOjVUZUzOTqkAkWL+l6w= |
||||
golang.org/x/tools v0.1.8/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= |
||||
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= |
@ -1,13 +0,0 @@ |
||||
[Unit] |
||||
Description=Nichole Mattera |
||||
|
||||
[Service] |
||||
Type=simple |
||||
Restart=always |
||||
RestartSec=5s |
||||
User=nicholemattera |
||||
WorkingDirectory=/path/to/nichole-mattera/ |
||||
ExecStart=/path/to/nichole-mattera/app |
||||
|
||||
[Install] |
||||
WantedBy=multi-user.target |
@ -1,4 +0,0 @@ |
||||
package models |
||||
|
||||
// GaymerData is the data to be passed to the Gaymer template
|
||||
type GaymerData struct{} |
@ -1,6 +0,0 @@ |
||||
package models |
||||
|
||||
// HomeData is the data to be passed to the Home template
|
||||
type HomeData struct { |
||||
Pride bool |
||||
} |
@ -1,29 +0,0 @@ |
||||
package routes |
||||
|
||||
import ( |
||||
"log" |
||||
"net/http" |
||||
"strings" |
||||
"text/template" |
||||
|
||||
"git.nicholemattera.com/NicholeMattera/NicholeMattera.com/internal/models" |
||||
) |
||||
|
||||
// MakeGaymerHandler make the route handler for the Gaymer endpoint
|
||||
func MakeGaymerHandler() http.Handler { |
||||
template, err := template.ParseFiles("./templates/gaymer.gohtml") |
||||
if err != nil { |
||||
log.Fatal("Error: Unable to parse the template file. (Gaymer)") |
||||
return nil |
||||
} |
||||
|
||||
return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { |
||||
if !strings.HasSuffix(req.Host, "gay") { |
||||
http.Redirect(w, req, "https://nicholemattera.gay/mer", http.StatusPermanentRedirect) |
||||
return |
||||
} |
||||
|
||||
data := models.GaymerData{} |
||||
template.Execute(w, data) |
||||
}) |
||||
} |
@ -1,49 +0,0 @@ |
||||
package routes |
||||
|
||||
import ( |
||||
"log" |
||||
"math/rand" |
||||
"net/http" |
||||
"strings" |
||||
"text/template" |
||||
"time" |
||||
|
||||
"git.nicholemattera.com/NicholeMattera/NicholeMattera.com/internal/models" |
||||
) |
||||
|
||||
func shouldRedirect() bool { |
||||
// Month of June (Pride Month) and October (LGBTQ+ History Month)
|
||||
return time.Now().Month() == 6 || time.Now().Month() == 10 |
||||
} |
||||
|
||||
func randomizeTLD() string { |
||||
rand.Seed(time.Now().UnixNano()) |
||||
|
||||
if rand.Intn(2) == 1 { |
||||
return "gay" |
||||
} |
||||
|
||||
return "lgbt" |
||||
} |
||||
|
||||
// MakeHomeHandler make the route handler for the Home endpoint
|
||||
func MakeHomeHandler() http.Handler { |
||||
template, err := template.ParseFiles("./templates/home.gohtml") |
||||
if err != nil { |
||||
log.Fatal("Error: Unable to parse the template file. (Home)") |
||||
return nil |
||||
} |
||||
|
||||
return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { |
||||
data := models.HomeData{ |
||||
Pride: strings.HasSuffix(req.Host, "lgbt") || strings.HasSuffix(req.Host, "gay"), |
||||
} |
||||
|
||||
if shouldRedirect() && !data.Pride { |
||||
http.Redirect(w, req, "https://nicholemattera."+randomizeTLD()+"/", http.StatusTemporaryRedirect) |
||||
return |
||||
} |
||||
|
||||
template.Execute(w, data) |
||||
}) |
||||
} |
@ -1,7 +0,0 @@ |
||||
package main |
||||
|
||||
import "git.nicholemattera.com/NicholeMattera/NicholeMattera.com/cmd" |
||||
|
||||
func main() { |
||||
cmd.Init() |
||||
} |
@ -1,27 +1,19 @@ |
||||
{ |
||||
"name": "nichole-mattera", |
||||
"version": "1.0.0", |
||||
"description": "I'm a programmer making cool things.", |
||||
"private": true, |
||||
"scripts": { |
||||
"build": "scripts/build.sh" |
||||
"author": "Nichole Mattera", |
||||
"description": "Résumé for Nichole Mattera", |
||||
"devDependencies": { |
||||
"vite": "^4.0.4", |
||||
"vite-plugin-minify": "^1.5.2" |
||||
}, |
||||
"license": "ISC", |
||||
"name": "nicholemattera.gay", |
||||
"repository": { |
||||
"type": "git", |
||||
"url": "git@git.nicholemattera.com:NicholeMattera/NicholeMattera.com.git" |
||||
"url": "git@git.nicholemattera.com:NicholeMattera/NicholeMattera.git" |
||||
}, |
||||
"author": { |
||||
"name": "Nichole Mattera", |
||||
"email": "me@nicholemattera.gay", |
||||
"url": "https://nicholemattera.com" |
||||
"scripts": { |
||||
"build": "vite build", |
||||
"serve": "vite" |
||||
}, |
||||
"license": "ISC", |
||||
"devDependencies": { |
||||
"css-loader": "^6.5.1", |
||||
"mini-css-extract-plugin": "^2.4.5", |
||||
"node-sass": "^6.0.1", |
||||
"sass-loader": "^12.4.0", |
||||
"webpack": "^5.65.0", |
||||
"webpack-cli": "^4.9.1" |
||||
} |
||||
"version": "1.0.0" |
||||
} |
||||
|
After Width: | Height: | Size: 451 B |
After Width: | Height: | Size: 369 B |
After Width: | Height: | Size: 787 B |
After Width: | Height: | Size: 451 B |
After Width: | Height: | Size: 408 B |
After Width: | Height: | Size: 692 B |
After Width: | Height: | Size: 975 B |
After Width: | Height: | Size: 517 B |
@ -0,0 +1,22 @@ |
||||
{ |
||||
"background_color": "#212121", |
||||
"display": "minimal-ui", |
||||
"icons": [ |
||||
{ |
||||
"src": "/icons/icon-192.png", |
||||
"type": "image/png", |
||||
"sizes": "192x192", |
||||
"purpose": "any maskable" |
||||
}, |
||||
{ |
||||
"src": "/icons/icon-512.png", |
||||
"type": "image/png", |
||||
"sizes": "512x512", |
||||
"purpose": "any maskable" |
||||
} |
||||
], |
||||
"name": "Nichole Mattera: Résumé", |
||||
"short_name": "Nichole Mattera", |
||||
"start_url": "/", |
||||
"theme_color": "#4A148C" |
||||
} |
@ -1,20 +0,0 @@ |
||||
#!/bin/bash |
||||
|
||||
SCRIPT_DIR=$(cd $(dirname "${BASH_SOURCE[0]}") && pwd) |
||||
GREEN=`tput setaf 2` |
||||
RESET=`tput sgr0` |
||||
|
||||
rm -rf ${SCRIPT_DIR}/../build |
||||
mkdir ${SCRIPT_DIR}/../build |
||||
|
||||
echo "${GREEN}- Building Server...${RESET}" |
||||
cd ${SCRIPT_DIR}/.. && go build -o ./build/nicholemattera.com |
||||
|
||||
echo "${GREEN}- Copying Static Files...${RESET}" |
||||
cp -R ${SCRIPT_DIR}/../web/static ${SCRIPT_DIR}/../build/static |
||||
cp -R ${SCRIPT_DIR}/../web/templates ${SCRIPT_DIR}/../build/templates |
||||
|
||||
echo "${GREEN}- Building Web Components...${RESET}" |
||||
cd ${SCRIPT_DIR}/.. && npx webpack --mode=production |
||||
|
||||
echo "${GREEN}Build Complete!${RESET}" |
@ -0,0 +1,67 @@ |
||||
@font-face { |
||||
font-family: "Font Awesome 6 Brands"; |
||||
font-style: normal; |
||||
font-weight: 400; |
||||
font-display: block; |
||||
src: url("./fonts/fa-brands-400.woff2") format("woff2"), url("./fonts/fa-brands-400.ttf") format("truetype"); |
||||
} |
||||
|
||||
@font-face { |
||||
font-family: "Font Awesome 6 Pro"; |
||||
font-style: normal; |
||||
font-weight: 400; |
||||
font-display: block; |
||||
src: url("./fonts/fa-regular-400.woff2") format("woff2"), url("./fonts/fa-regular-400.ttf") format("truetype"); |
||||
} |
||||
|
||||
.fab { |
||||
-moz-osx-font-smoothing: grayscale; |
||||
-webkit-font-smoothing: antialiased; |
||||
display: var(--fa-display, inline-block); |
||||
font-family: 'Font Awesome 6 Brands'; |
||||
font-style: normal; |
||||
font-variant: normal; |
||||
font-weight: 400; |
||||
line-height: 1; |
||||
text-rendering: auto; |
||||
} |
||||
|
||||
.far { |
||||
-moz-osx-font-smoothing: grayscale; |
||||
-webkit-font-smoothing: antialiased; |
||||
display: var(--fa-display, inline-block); |
||||
font-family: 'Font Awesome 6 Pro'; |
||||
font-style: normal; |
||||
font-variant: normal; |
||||
font-weight: 400; |
||||
line-height: 1; |
||||
text-rendering: auto; |
||||
} |
||||
|
||||
.fa-ext::before { |
||||
content: "\f08e"; |
||||
} |
||||
|
||||
.fa-gh::before { |
||||
content: "\f113"; |
||||
} |
||||
|
||||
.fa-li::before { |
||||
content: "\f0e1"; |
||||
} |
||||
|
||||
.fa-merge::before { |
||||
content: "\f387"; |
||||
} |
||||
|
||||
.fa-sr-only { |
||||
position: absolute; |
||||
width: 1px; |
||||
height: 1px; |
||||
padding: 0; |
||||
margin: -1px; |
||||
overflow: hidden; |
||||
clip: rect(0, 0, 0, 0); |
||||
white-space: nowrap; |
||||
border-width: 0; |
||||
} |
@ -0,0 +1,23 @@ |
||||
@font-face { |
||||
font-display: swap; |
||||
font-family: Raleway; |
||||
font-style: normal; |
||||
font-weight: 700; |
||||
src: url("./fonts/raleway-bold.woff2") format("woff2"), url("./fonts/raleway-bold.ttf") format("truetype"); |
||||
} |
||||
|
||||
@font-face { |
||||
font-display: swap; |
||||
font-family: Inter; |
||||
font-style: normal; |
||||
font-weight: 500; |
||||
src: url("./fonts/inter-medium.woff2") format("woff2"), url("./fonts/inter-medium.ttf") format("truetype"); |
||||
} |
||||
|
||||
@font-face { |
||||
font-display: swap; |
||||
font-family: Inter; |
||||
font-style: normal; |
||||
font-weight: 700; |
||||
src: url("./fonts/inter-bold.woff2") format("woff2"), url("./fonts/inter-bold.ttf") format("truetype"); |
||||
} |
@ -0,0 +1,31 @@ |
||||
@media (prefers-color-scheme: light) { |
||||
html, body { |
||||
background: #E8E8E8; |
||||
color: #000; |
||||
} |
||||
|
||||
header { |
||||
background: #DEDEDE; |
||||
} |
||||
|
||||
header .title { |
||||
background-color: #000; |
||||
} |
||||
|
||||
header nav a { |
||||
color: #000; |
||||
} |
||||
|
||||
header nav a:hover, header nav a:focus { |
||||
background-color: #000; |
||||
color: #DEDEDE; |
||||
} |
||||
|
||||
header nav a:focus { |
||||
outline-color: #000; |
||||
} |
||||
|
||||
main section { |
||||
background: #DEDEDE; |
||||
} |
||||
} |
@ -0,0 +1,200 @@ |
||||
html, body { |
||||
background: #171717; |
||||
color: #FFF; |
||||
font-family: Inter, Arial, Helvetica, sans-serif; |
||||
margin: 0; |
||||
padding: 0; |
||||
} |
||||
|
||||
header { |
||||
align-items: center; |
||||
background: #212121; |
||||
box-shadow: 0 3px 3px rgba(0, 0, 0, 0.25); |
||||
box-sizing: border-box; |
||||
display: flex; |
||||
height: 52px; |
||||
left: 0; |
||||
padding: 0 20px; |
||||
position: sticky; |
||||
top: 0; |
||||
width: 100%; |
||||
} |
||||
|
||||
header .title { |
||||
background-clip: text; |
||||
-webkit-background-clip: text; |
||||
background-color: #FFF; |
||||
background-repeat: no-repeat; |
||||
color: transparent; |
||||
font-family: Raleway, Arial, Helvetica, sans-serif; |
||||
font-size: 20px; |
||||
font-weight: 700; |
||||
margin: 0 20px 0 0; |
||||
text-transform: uppercase; |
||||
} |
||||
|
||||
header .title.animating { |
||||
animation: slide-right-title 1s linear forwards; |
||||
background-position: -147px 0; |
||||
} |
||||
|
||||
header p { |
||||
font-size: 14px; |
||||
} |
||||
|
||||
header nav { |
||||
align-items: stretch; |
||||
display: flex; |
||||
flex: 1 1 auto; |
||||
height: 52px; |
||||
justify-content: flex-end; |
||||
text-align: right; |
||||
} |
||||
|
||||
header nav a { |
||||
color: #FFF; |
||||
display: block; |
||||
font-weight: 700; |
||||
line-height: 52px; |
||||
padding: 0 20px; |
||||
text-decoration: none; |
||||
} |
||||
|
||||
header nav a:hover, header nav a:focus { |
||||
background-color: #FFF; |
||||
color: #212121; |
||||
} |
||||
|
||||
header nav a:focus { |
||||
outline-color: #FFF; |
||||
outline-offset: 2px; |
||||
outline-style: solid; |
||||
outline-width: 2px; |
||||
} |
||||
|
||||
header nav .icon { |
||||
font-size: 18px; |
||||
vertical-align: middle; |
||||
} |
||||
|
||||
header nav .new-window-icon { |
||||
font-size: 12px; |
||||
padding-left: 4px; |
||||
vertical-align: middle; |
||||
} |
||||
|
||||
main { |
||||
box-sizing: border-box; |
||||
display: flex; |
||||
gap: 20px; |
||||
margin: 0 auto; |
||||
max-width: 1600px; |
||||
padding: 20px; |
||||
width: 100%; |
||||
} |
||||
|
||||
main div { |
||||
flex: 1 1 50%; |
||||
} |
||||
|
||||
main section { |
||||
background: #212121; |
||||
border-radius: 8px; |
||||
box-shadow: 0 3px 3px rgba(0, 0, 0, 0.25); |
||||
margin-bottom: 20px; |
||||
} |
||||
|
||||
main section h2 { |
||||
font-family: Inter, Arial, Helvetica, sans-serif; |
||||
font-size: 24px; |
||||
font-weight: 700; |
||||
margin: 0; |
||||
padding: 10px; |
||||
} |
||||
|
||||
main section .content { |
||||
padding: 10px 10px 10px; |
||||
} |
||||
|
||||
main section .content.red { |
||||
border-top: 5px solid #E40303; |
||||
} |
||||
|
||||
main section .content.orange { |
||||
border-top: 5px solid #FF8C00; |
||||
} |
||||
|
||||
main section .content.yellow { |
||||
border-top: 5px solid #FFED00; |
||||
} |
||||
|
||||
main section .content.green { |
||||
border-top: 5px solid #008026; |
||||
} |
||||
|
||||
main section .content.blue { |
||||
border-top: 5px solid #24408E; |
||||
} |
||||
|
||||
main section .content.purple { |
||||
border-top: 5px solid #732982; |
||||
} |
||||
|
||||
main section h3 { |
||||
margin: 0 0 15px; |
||||
} |
||||
|
||||
main section dl { |
||||
margin: 0 0 0 20px; |
||||
} |
||||
|
||||
main section dt { |
||||
font-family: Inter, Arial, Helvetica, sans-serif; |
||||
font-size: 16px; |
||||
font-weight: 700; |
||||
margin-bottom: 5px; |
||||
} |
||||
|
||||
main section dd { |
||||
font-size: 14px; |
||||
line-height: 20px; |
||||
margin: 0 0 20px 20px; |
||||
} |
||||
|
||||
main section dd p { |
||||
margin: 0 0 5px; |
||||
} |
||||
|
||||
main section dd p:last-child { |
||||
margin: 0; |
||||
} |
||||
|
||||
@keyframes slide-right-title { |
||||
0% { |
||||
background-position: -147px 0; |
||||
} |
||||
|
||||
100% { |
||||
background-position: 187px 0; |
||||
} |
||||
} |
||||
|
||||
@media screen and (max-width: 1024px) { |
||||
header { |
||||
flex-direction: column; |
||||
height: auto; |
||||
} |
||||
|
||||
header .title { |
||||
margin: 10px 0; |
||||
} |
||||
|
||||
header p { |
||||
margin: 0 0 10px; |
||||
} |
||||
|
||||
main { |
||||
flex-direction: column; |
||||
gap: 0; |
||||
} |
||||
} |
@ -0,0 +1,325 @@ |
||||
<!doctype html> |
||||
<html lang="en"> |
||||
<head> |
||||
<meta charset="UTF-8"> |
||||
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=5"> |
||||
<meta name="description" content="Résumé for Nichole Mattera"> |
||||
<meta name="theme-color" content="#4A148C"/> |
||||
<meta name="theme-color" media="(prefers-color-scheme: light)" content="#E1BEE7"/> |
||||
<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#4A148C"/> |
||||
|
||||
<meta property="og:title" content="I'm a Nickel"> |
||||
<meta property="og:description" content="Social Links for I'm a Nickel"> |
||||
<meta property="og:url" content="https://nicholemattera.gay"> |
||||
|
||||
<link rel="apple-touch-icon" href="/icons/icon-192.png"> |
||||
<link rel="manifest" href="/manifest.json"> |
||||
|
||||
<title>Nichole Mattera</title> |
||||
|
||||
<style> |
||||
@import url('./css/font-awesome.css'); |
||||
@import url('./css/fonts.css'); |
||||
@import url('./css/main.css'); |
||||
@import url('./css/light.css'); |
||||
</style> |
||||
</head> |
||||
<body> |
||||
<header> |
||||
<h1 class="title">Nichole Mattera</h1> |
||||
|
||||
<p>Full-Stack Web, Mobile, & Homebrew Engineer</p> |
||||
|
||||
<nav> |
||||
<a href="https://linkedin.com/in/nicholemattera" target="_blank"> |
||||
<span class="fa-sr-only">LinkedIn Opens in new window</span> |
||||
<span class="fab fa-li icon"></span> |
||||
<span class="far fa-ext new-window-icon"></span> |
||||
</a> |
||||
|
||||
<a href="https://github.com/NicholeMattera" target="_blank"> |
||||
<span class="fa-sr-only">GitHub Opens in new window</span> |
||||
<span class="fab fa-gh icon"></span> |
||||
<span class="far fa-ext new-window-icon"></span> |
||||
</a> |
||||
|
||||
<a href="https://git.nicholemattera.gay" target="_blank"> |
||||
<span class="fa-sr-only">Portfolio Opens in new window</span> |
||||
<span class="far fa-merge icon"></span> |
||||
<span class="far fa-ext new-window-icon"></span> |
||||
</a> |
||||
</nav> |
||||
</header> |
||||
|
||||
<main> |
||||
<div> |
||||
<section class="experience"> |
||||
<h2>Work Experience</h2> |
||||
|
||||
<div class="content red"> |
||||
<h3>Pendo.io</h3> |
||||
|
||||
<dl> |
||||
<dt>Staff Front End Engineer</dt> |
||||
<dd> |
||||
<p><time datetime="2023-01">January 2023</time> - Present</p> |
||||
</dd> |
||||
|
||||
<dt>Staff Front End Engineer, Tech Lead</dt> |
||||
<dd> |
||||
<p><time datetime="2022-02">February 2022</time> - <time datetime="2023-01">January 2023</time> (1 year)</p> |
||||
</dd> |
||||
|
||||
<dt>GSRM Affinity Group Co-Chair</dt> |
||||
<dd> |
||||
<p><time datetime="2021-02">February 2021</time> - <time datetime="2022-04">April 2022</time> (1 year 3 months)</p> |
||||
<p> |
||||
As the co-chair of the GSRM affinity group at Pendo I helped plan out monthly meetings, and events with our community. I also aided in educating Pendozers both in and outside of the group on important GSRM issues, such as daily slack posts for Transgender Awareness Week, Aromantic Spectrum Awareness Week, and much more. Being a co-chair also made me part of Pendo's Diversity Advisory Board, where I would advocate for changes not just for the GSRM group, but for other minority groups as well. |
||||
</p> |
||||
</dd> |
||||
|
||||
<dt>Senior Front End Engineer, Tech Lead</dt> |
||||
<dd> |
||||
<p><time datetime="2021-08">August 2021</time> - <time datetime="2022-02">February 2022</time> (7 months)</p> |
||||
<p> |
||||
I came in as the Tech Lead for a brand new team for Pendo's Adopt product. We were able to deliver all of Workflows in a quarter in time for the release of the Adopt product and the annual Company Kick-Off event. |
||||
</p> |
||||
</dd> |
||||
|
||||
<dt>Senior Front End Engineer</dt> |
||||
<dd> |
||||
<p><time datetime="2020-06">June 2020</time> - <time datetime="2021-08">August 2021</time> (1 year 3 months)</p> |
||||
<p> |
||||
I came in at the tail end of a project to be able to subscribe to account and visitor reports. Even then I was able to help out on the final finishing touches on the email templates to get it ready for release. After that I was apart of the team that worked on Core Events. We were able to introduce a major new feature to the platform, just in time for the companies annual event Pendomonium. |
||||
</p> |
||||
</dd> |
||||
</dl> |
||||
|
||||
<h3>Cision</h3> |
||||
|
||||
<dl> |
||||
<dt>Software Engineer</dt> |
||||
<dd> |
||||
<p><time datetime="2016-09">September 2016</time> - <time datetime="2020-06">June 2020</time> (3 years 10 months)</p> |
||||
</dd> |
||||
</dl> |
||||
|
||||
<h3>Mindtree, Ltd.</h3> |
||||
<dl> |
||||
<dt>Techinical Project Lead</dt> |
||||
<dd> |
||||
<p><time datetime="2015-08">August 2015</time> - <time datetime="2016-09">September 2016</time> (1 years 2 months)</p> |
||||
</dd> |
||||
|
||||
<dt>Module Lead</dt> |
||||
<dd> |
||||
<p><time datetime="2014-01">January 2014</time> - <time datetime="2015-08">August 2015</time> (1 years 8 months)</p> |
||||
</dd> |
||||
</dl> |
||||
|
||||
<h3>Zgraph, Inc.</h3> |
||||
<dl> |
||||
<dt>Lead Internet Engineer</dt> |
||||
<dd> |
||||
<p><time datetime="2013-03">March 2013</time> - <time datetime="2014-01">January 2014</time> (11 months)</p> |
||||
</dd> |
||||
|
||||
<dt>Internet Engineer</dt> |
||||
<dd> |
||||
<p><time datetime="2011-11">November 2011</time> - <time datetime="2013-03">March 2013</time> (1 year 5 months)</p> |
||||
</dd> |
||||
</dl> |
||||
|
||||
<h3>PosiMotion, LLC.</h3> |
||||
<dl> |
||||
<dt>Lead Programmer</dt> |
||||
<dd> |
||||
<p><time datetime="2008-06">June 2008</time> - <time datetime="2011-11">November 2011</time> (3 years 6 months)</p> |
||||
</dd> |
||||
</dl> |
||||
</div> |
||||
</section> |
||||
|
||||
<section class="publication"> |
||||
<h2>Publication</h2> |
||||
|
||||
<div class="content orange"> |
||||
<dl> |
||||
<dt>Creating Delightful Graphs using HTML5 Canvas</dt> |
||||
<dd></dd> |
||||
|
||||
<dt>Chapter 5 - iPhone Games Project</dt> |
||||
<dd></dd> |
||||
</dl> |
||||
</div> |
||||
</section> |
||||
|
||||
<section class="education"> |
||||
<h2>Education</h2> |
||||
|
||||
<div class="content yellow"> |
||||
<dl> |
||||
<dt>A.S. in Computer Programming and Analysis</dt> |
||||
<dd></dd> |
||||
|
||||
<dt>A.S. Certificate in Computer Programming</dt> |
||||
<dd></dd> |
||||
</dl> |
||||
</div> |
||||
</section> |
||||
|
||||
<section class="education"> |
||||
<h2>Certification</h2> |
||||
|
||||
<div class="content green"> |
||||
<dl> |
||||
<dt>Pendo Essentials</dt> |
||||
<dd></dd> |
||||
|
||||
<dt>Orchestra Commerce Platform Technical Training</dt> |
||||
<dd></dd> |
||||
|
||||
<dt>Scaled Agile Framework Practitioner (SP)</dt> |
||||
<dd></dd> |
||||
</dl> |
||||
</div> |
||||
</section> |
||||
</div> |
||||
|
||||
<div> |
||||
<section> |
||||
<h2>Projects</h2> |
||||
|
||||
<div class="content blue"> |
||||
<dl> |
||||
<dt></dt> |
||||
<dd></dd> |
||||
</dl> |
||||
</div> |
||||
</section> |
||||
|
||||
<section> |
||||
<h2>Awards</h2> |
||||
|
||||
<div class="content purple"> |
||||
<h3>Pendo</h3> |
||||
<dl> |
||||
<dt>Win Together</dt> |
||||
<dd></dd> |
||||
</dl> |
||||
|
||||
<h3>Mindtree, Ltd.</h3> |
||||
<dl> |
||||
<dt>A-Team</dt> |
||||
<dd> |
||||
<p>Issued by Manager on <time datetime="2016-09">September 2016</time></p> |
||||
<p>Congratulations to the Mindtree MGIC Team for the outstanding SPORT Delivery. This project was the prime example of AGILE success. The team completed almost twice the amount of Scope for Desktop and Mobile delivery than originally anticipated and Agile implementation as part of the SDLC. The team developed a strong relationship with the client building trust and helped progress the organization towards an Agile transformation while delivering the first MVP 3 weeks before the deadline. Team work, professionalism and dedication is what defines this team and contributed to it's success!</p> |
||||
</dd> |
||||
|
||||
<dt>Bronze Pillar</dt> |
||||
<dd> |
||||
<p>Issued by Manager on <time datetime="2016-09">September 2016</time></p> |
||||
<p>For scoring a 4.5 or higher on my yearly appraisal for the second year in a row.</p> |
||||
</dd> |
||||
|
||||
<dt>A-Team</dt> |
||||
<dd> |
||||
<p>Issued by Project Manager for MSC eVMI App on <time datetime="2016-06">June 2016</time></p> |
||||
<p>For the fantastic Job performed during the phase 1 of eVMI iOS Mobile App</p> |
||||
</dd> |
||||
|
||||
<dt>Partnership</dt> |
||||
<dd> |
||||
<p>Issued by Business Analysis for MGIC SPORT Project on <time datetime="2016-06">June 2016</time></p> |
||||
<p>I have really appreciated your positivity and and teaming spirit on this engagement! I dont think we could do all of this without you. Thanks for all you have done to help our MGIC partners understand agile! and all you have done to get us set up and off to a great start!</p> |
||||
</dd> |
||||
|
||||
<dt>Unstoppable</dt> |
||||
<dd> |
||||
<p>Issued by Head of Delivery for the USA Delivery Center on <time datetime="2016-06">June 2016</time></p> |
||||
<p>During a recent customer visit with MGIC in Milwaukee I met with their CIO, Greg Chi. While he had many positive things to say about the team, he specifically cited the contributions and accomplishments from Nichole. From Greg's comments it became clear Nichole has delivered the perfect trifecta: collaborative spirit, unrelenting dedication and expert thinking to exceed MGIC's expectations to replace a Salesforce application with a mobile solution.</p> |
||||
</dd> |
||||
|
||||
<dt>Unstoppable</dt> |
||||
<dd> |
||||
<p>Issued by Scrum Master for MGIC SPORT Project on <time datetime="2016-06">June 2016</time></p> |
||||
<p>Nichole has been an outstanding contributor for the MGIC project from the outset. She has worked hard to get the initial designs in place to impress the client. Her innovative thinking, technical expertise, and mentoring while putting the team on the ground have made the process streamlined and a lot less stressful for the junior developers.</p> |
||||
</dd> |
||||
|
||||
<dt>A-Team</dt> |
||||
<dd> |
||||
<p>Issued by Manager on <time datetime="2016-04">April 2016</time></p> |
||||
<p>Continuously changing Product Owner and requirements being the blocker team demonstrated dedication and passion to get the MVP release for Agile Assessment tool "Age" which is going to be Mindtree Proprietary tool for Agile Assessments used heavily in Agile Transformation projects. Contribution from Carrie was amazing without which this was nightmare..! Ed and Andrew being fresh graduated from C2IT demonstrated the quick learning and ability to pivot which was fantastic and Nichole helped the team getting technical roadblocks removed..! All in all great work done..!</p> |
||||
</dd> |
||||
|
||||
<dt>A-Team</dt> |
||||
<dd> |
||||
<p>Issued by Manager on <time datetime="2016-04">April 2016</time></p> |
||||
<p>Team has done a great job with MSC project Mobile Client development in Swift making a digital footprint in RCM IG as our first engagement with from GDC. Team has received 7/7 for CSAT score with every individual component being rated as 7. This is unique and inspiring to all of us. Great Job team and Good luck ...!</p> |
||||
</dd> |
||||
|
||||
<dt>A-Team</dt> |
||||
<dd> |
||||
<p>Issued by US VP of Sales for the High Tech Vertical on <time datetime="2016-01">January 2016</time></p> |
||||
<p>For creating and executing an extremely successful and memorable visit for the executives of American Red Cross that involved extensive collaboration together with:</p> |
||||
<ul> |
||||
<li>Attention to every single detail of the visit visible in all planning and preparation</li> |
||||
<li>Creating an agenda that resonated with everyone and showed our understanding of the customer</li> |
||||
<li>Demonstrating Mindtree's expertise and how thorough and passionate everyone is in what we do</li> |
||||
<li>Making them feel comfortable and welcome</li> |
||||
</ul> |
||||
</dd> |
||||
|
||||
<dt>Outstanding Performer</dt> |
||||
<dd> |
||||
<p>Issued by Manager on <time datetime="2015-09">September 2015</time></p> |
||||
<p>For scoring a 4.5 or higher on my yearly appraisal.</p> |
||||
</dd> |
||||
|
||||
<dt>Unstoppable</dt> |
||||
<dd> |
||||
<p>Issued by Manager on <time datetime="2014-12">December 2014</time></p> |
||||
<p>Nichole has been Unstoppable Mind consistently showing a excellence in execution for her Project work at Volvo. She has been recognized by client not just for her iOS expertise but she had been showing her excellence in Android related work, UI libraries and the list goes on. She has been mentoring new developers in Digital team for iOS, knowledge on Git repo, Continuos integration and Jenkins setup. She has built very nice applications like Responder, which showcases her technical excellence and proactive nature. She get things done while we keep thinking about them at times. It's really great to have her part of Digital team and GDC. Keep up the good work...!</p> |
||||
</dd> |
||||
|
||||
<dt>Unstoppable</dt> |
||||
<dd> |
||||
<p>Issued by Manager on <time datetime="2014-08">August 2014</time></p> |
||||
<p>Nichole is a great team player and hard core developer who just keeps coding all the time :) She has successfully implemented the Test Driven Development for Mobile application and showcased it to client within the timeframe. She helped the Marriott team getting geared up for Bootstrap in very short time and helped the team with initial deliverables and bring it to speed. She always contributes to ideas, quick prototyping and educating team with development tools. She is really unstoppable and would like to appreciate her efforts. Keep up the good work.</p> |
||||
</dd> |
||||
</dl> |
||||
</div> |
||||
</section> |
||||
</div> |
||||
</main> |
||||
|
||||
<script type="text/javascript"> |
||||
const animations = [ 'asexual', 'biromantic', 'demigirl', 'nonbinary', 'panromantic', 'pride', 'queer', 'transgender' ] |
||||
let animation = '' |
||||
const title = document.querySelector('.title') |
||||
|
||||
const animate = () => { |
||||
if (animation != '') { |
||||
return |
||||
} |
||||
|
||||
animation = animations[Math.floor(Math.random() * animations.length)] |
||||
|
||||
title.classList.add('animating') |
||||
title.style.backgroundImage = `url(/images/${animation}.svg)` |
||||
} |
||||
|
||||
const titleAnimationEnd = () => { |
||||
title.classList.remove('animating') |
||||
title.style.backgroundImage = '' |
||||
animation = '' |
||||
} |
||||
|
||||
window.addEventListener('load', animate) |
||||
title.addEventListener('mouseover', animate) |
||||
title.addEventListener('touchstart', animate) |
||||
title.addEventListener('animationend', titleAnimationEnd) |
||||
</script> |
||||
</body> |
||||
</html> |
@ -0,0 +1,15 @@ |
||||
import { defineConfig } from 'vite' |
||||
import { ViteMinifyPlugin } from 'vite-plugin-minify' |
||||
|
||||
export default defineConfig({ |
||||
build: { |
||||
copyPublicDir: true, |
||||
emptyOutDir: true, |
||||
outDir: '../dist' |
||||
}, |
||||
plugins: [ |
||||
ViteMinifyPlugin({}) |
||||
], |
||||
publicDir: '../public', |
||||
root: 'src' |
||||
}) |
@ -1,11 +0,0 @@ |
||||
import './main.scss' |
||||
|
||||
window.WebFontConfig = { |
||||
google: { families: [ 'Raleway:700', 'Source+Sans+Pro:400' ] } |
||||
} |
||||
|
||||
const wf = document.createElement('script') |
||||
wf.async = true |
||||
wf.src = 'https://ajax.googleapis.com/ajax/libs/webfont/1/webfont.js' |
||||
wf.type = 'text/javascript' |
||||
document.body.appendChild(wf) |
@ -1,118 +0,0 @@ |
||||
html, body { |
||||
color: #FFF; |
||||
width: 100vw; |
||||
height: 100vh; |
||||
margin: 0; |
||||
padding: 0; |
||||
overflow: hidden; |
||||
font-family: 'Source Sans Pro', Arial, Helvetica, sans-serif; |
||||
text-transform: uppercase; |
||||
} |
||||
|
||||
a { |
||||
display: block; |
||||
border: 2px solid #FFF; |
||||
border-radius: 27px; |
||||
background: transparent; |
||||
color: #FFF; |
||||
height: 50px; |
||||
font-size: 20px; |
||||
line-height: 50px; |
||||
text-align: center; |
||||
text-decoration: none; |
||||
|
||||
&:hover, &:focus { |
||||
background: #FFF; |
||||
color: #000; |
||||
text-shadow: none; |
||||
outline: none; |
||||
} |
||||
|
||||
&.icon { |
||||
display: flex; |
||||
justify-content: center; |
||||
align-items: center; |
||||
|
||||
> svg { |
||||
display: block; |
||||
width: 20px; |
||||
height: 20px; |
||||
} |
||||
} |
||||
} |
||||
|
||||
h1, h2 { |
||||
background-clip: text; |
||||
-webkit-background-clip: text; |
||||
background-color: #FFF; |
||||
color: transparent; |
||||
text-align: center; |
||||
} |
||||
|
||||
h1 { |
||||
font-family: Raleway, Arial, Helvetica, sans-serif; |
||||
font-size: 64px; |
||||
margin: 0; |
||||
} |
||||
|
||||
h2 { |
||||
margin: 0 0 18px; |
||||
} |
||||
|
||||
video, .container, .offline-background { |
||||
position: absolute; |
||||
top: 0; |
||||
left: 0; |
||||
width: 100vw; |
||||
height: 100vh; |
||||
overflow: hidden; |
||||
} |
||||
|
||||
video { |
||||
object-fit: cover; |
||||
} |
||||