diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..e43b0f9
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+.DS_Store
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..d965fe8
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,3 @@
+FROM nginx
+
+COPY nginx/matthewtran.com/html /usr/share/nginx/html
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..5aca3de
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,10 @@
+# temporary until I can figure out the rest
+
+all:
+ docker build -t matthewtran .
+
+run:
+ docker run --name matt -d --rm -p 80:80 matthewtran
+
+kill:
+ docker kill matt
diff --git a/README.md b/README.md
index 05d1967..b16a5b6 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,8 @@
# matthewtran.com
-Stuff that's deployed on matthewtran.com
+
+Stuff that's deployed on matthewtran.com.
+
+```
+make
+make run
+```
diff --git a/nginx/matthewtran.com/html/bg.js b/nginx/matthewtran.com/html/bg.js
new file mode 100644
index 0000000..13bd630
--- /dev/null
+++ b/nginx/matthewtran.com/html/bg.js
@@ -0,0 +1,33 @@
+function randint(min, max) {
+ return Math.random();
+}
+
+NUM_PICS = 14;
+
+if (typeof(Storage) !== "undefined") {
+ if (localStorage.bgs) {
+ console.log("Welcome back!");
+ var bgs = JSON.parse(localStorage.bgs);
+ } else {
+ console.log("First time here?");
+ var bgs = [];
+ for (var k = 0; k < NUM_PICS; k++) {
+ bgs.push(k);
+ }
+ }
+
+ var j = bgs[Math.floor(Math.random() * bgs.length)];
+ bgs.splice(bgs.indexOf(j), 1);
+
+ localStorage.bgs = JSON.stringify(bgs);
+ if (bgs.length == 0) {
+ localStorage.removeItem("bgs");
+ }
+
+ console.log("Pics left: " + bgs);
+} else {
+ console.log("No localStorage support!");
+ var j = Math.floor(Math.random() * NUM_PICS);
+}
+
+$("#bg").css({"background-image": `linear-gradient(rgba(0,0,0,0.56), rgba(0,0,0,0.56)), url('imgs/bg${j}.jpg')`});
diff --git a/nginx/matthewtran.com/html/fade.js b/nginx/matthewtran.com/html/fade.js
new file mode 100644
index 0000000..a8b4e1f
--- /dev/null
+++ b/nginx/matthewtran.com/html/fade.js
@@ -0,0 +1,10 @@
+$(window).on("load", function() {
+ IN_DELAY = 250;
+
+ $('body').animate({"opacity": "1"}, IN_DELAY);
+
+ $(".main").delay(IN_DELAY).animate({"opacity": "1"}, 750);
+ //for (var i = 7; i >= 1; i--) {
+ // $(`.main> :nth-child(${i})`).delay(IN_DELAY + 125*i).animate({"opacity": "1"}, 500);
+ //}
+});
diff --git a/nginx/matthewtran.com/html/imgs/bg0.jpg b/nginx/matthewtran.com/html/imgs/bg0.jpg
new file mode 100644
index 0000000..3fbe9e6
Binary files /dev/null and b/nginx/matthewtran.com/html/imgs/bg0.jpg differ
diff --git a/nginx/matthewtran.com/html/imgs/bg1.jpg b/nginx/matthewtran.com/html/imgs/bg1.jpg
new file mode 100644
index 0000000..c2daa1c
Binary files /dev/null and b/nginx/matthewtran.com/html/imgs/bg1.jpg differ
diff --git a/nginx/matthewtran.com/html/imgs/bg10.jpg b/nginx/matthewtran.com/html/imgs/bg10.jpg
new file mode 100644
index 0000000..e8412c4
Binary files /dev/null and b/nginx/matthewtran.com/html/imgs/bg10.jpg differ
diff --git a/nginx/matthewtran.com/html/imgs/bg11.jpg b/nginx/matthewtran.com/html/imgs/bg11.jpg
new file mode 100644
index 0000000..e5cadb2
Binary files /dev/null and b/nginx/matthewtran.com/html/imgs/bg11.jpg differ
diff --git a/nginx/matthewtran.com/html/imgs/bg12.jpg b/nginx/matthewtran.com/html/imgs/bg12.jpg
new file mode 100644
index 0000000..de8c5f4
Binary files /dev/null and b/nginx/matthewtran.com/html/imgs/bg12.jpg differ
diff --git a/nginx/matthewtran.com/html/imgs/bg13.jpg b/nginx/matthewtran.com/html/imgs/bg13.jpg
new file mode 100644
index 0000000..5511345
Binary files /dev/null and b/nginx/matthewtran.com/html/imgs/bg13.jpg differ
diff --git a/nginx/matthewtran.com/html/imgs/bg2.jpg b/nginx/matthewtran.com/html/imgs/bg2.jpg
new file mode 100644
index 0000000..3fd3f56
Binary files /dev/null and b/nginx/matthewtran.com/html/imgs/bg2.jpg differ
diff --git a/nginx/matthewtran.com/html/imgs/bg3.jpg b/nginx/matthewtran.com/html/imgs/bg3.jpg
new file mode 100644
index 0000000..e350672
Binary files /dev/null and b/nginx/matthewtran.com/html/imgs/bg3.jpg differ
diff --git a/nginx/matthewtran.com/html/imgs/bg4.jpg b/nginx/matthewtran.com/html/imgs/bg4.jpg
new file mode 100644
index 0000000..aee7c62
Binary files /dev/null and b/nginx/matthewtran.com/html/imgs/bg4.jpg differ
diff --git a/nginx/matthewtran.com/html/imgs/bg5.jpg b/nginx/matthewtran.com/html/imgs/bg5.jpg
new file mode 100644
index 0000000..9c28976
Binary files /dev/null and b/nginx/matthewtran.com/html/imgs/bg5.jpg differ
diff --git a/nginx/matthewtran.com/html/imgs/bg6.jpg b/nginx/matthewtran.com/html/imgs/bg6.jpg
new file mode 100644
index 0000000..bf82a06
Binary files /dev/null and b/nginx/matthewtran.com/html/imgs/bg6.jpg differ
diff --git a/nginx/matthewtran.com/html/imgs/bg7.jpg b/nginx/matthewtran.com/html/imgs/bg7.jpg
new file mode 100644
index 0000000..0644cc1
Binary files /dev/null and b/nginx/matthewtran.com/html/imgs/bg7.jpg differ
diff --git a/nginx/matthewtran.com/html/imgs/bg8.jpg b/nginx/matthewtran.com/html/imgs/bg8.jpg
new file mode 100644
index 0000000..31b253f
Binary files /dev/null and b/nginx/matthewtran.com/html/imgs/bg8.jpg differ
diff --git a/nginx/matthewtran.com/html/imgs/bg9.jpg b/nginx/matthewtran.com/html/imgs/bg9.jpg
new file mode 100644
index 0000000..5c85703
Binary files /dev/null and b/nginx/matthewtran.com/html/imgs/bg9.jpg differ
diff --git a/nginx/matthewtran.com/html/imgs/favicons/android-chrome-192x192.png b/nginx/matthewtran.com/html/imgs/favicons/android-chrome-192x192.png
new file mode 100644
index 0000000..834098c
Binary files /dev/null and b/nginx/matthewtran.com/html/imgs/favicons/android-chrome-192x192.png differ
diff --git a/nginx/matthewtran.com/html/imgs/favicons/android-chrome-512x512.png b/nginx/matthewtran.com/html/imgs/favicons/android-chrome-512x512.png
new file mode 100644
index 0000000..2900b5c
Binary files /dev/null and b/nginx/matthewtran.com/html/imgs/favicons/android-chrome-512x512.png differ
diff --git a/nginx/matthewtran.com/html/imgs/favicons/apple-touch-icon.png b/nginx/matthewtran.com/html/imgs/favicons/apple-touch-icon.png
new file mode 100644
index 0000000..59ccbc0
Binary files /dev/null and b/nginx/matthewtran.com/html/imgs/favicons/apple-touch-icon.png differ
diff --git a/nginx/matthewtran.com/html/imgs/favicons/browserconfig.xml b/nginx/matthewtran.com/html/imgs/favicons/browserconfig.xml
new file mode 100644
index 0000000..925b512
--- /dev/null
+++ b/nginx/matthewtran.com/html/imgs/favicons/browserconfig.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+ #2b5797
+
+
+
diff --git a/nginx/matthewtran.com/html/imgs/favicons/favicon-16x16.png b/nginx/matthewtran.com/html/imgs/favicons/favicon-16x16.png
new file mode 100644
index 0000000..d1f3aa4
Binary files /dev/null and b/nginx/matthewtran.com/html/imgs/favicons/favicon-16x16.png differ
diff --git a/nginx/matthewtran.com/html/imgs/favicons/favicon-32x32.png b/nginx/matthewtran.com/html/imgs/favicons/favicon-32x32.png
new file mode 100644
index 0000000..ff59eff
Binary files /dev/null and b/nginx/matthewtran.com/html/imgs/favicons/favicon-32x32.png differ
diff --git a/nginx/matthewtran.com/html/imgs/favicons/favicon.ico b/nginx/matthewtran.com/html/imgs/favicons/favicon.ico
new file mode 100644
index 0000000..9976ddd
Binary files /dev/null and b/nginx/matthewtran.com/html/imgs/favicons/favicon.ico differ
diff --git a/nginx/matthewtran.com/html/imgs/favicons/mstile-150x150.png b/nginx/matthewtran.com/html/imgs/favicons/mstile-150x150.png
new file mode 100644
index 0000000..668f868
Binary files /dev/null and b/nginx/matthewtran.com/html/imgs/favicons/mstile-150x150.png differ
diff --git a/nginx/matthewtran.com/html/imgs/favicons/safari-pinned-tab.svg b/nginx/matthewtran.com/html/imgs/favicons/safari-pinned-tab.svg
new file mode 100644
index 0000000..c01085c
--- /dev/null
+++ b/nginx/matthewtran.com/html/imgs/favicons/safari-pinned-tab.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/nginx/matthewtran.com/html/imgs/favicons/site.webmanifest b/nginx/matthewtran.com/html/imgs/favicons/site.webmanifest
new file mode 100644
index 0000000..1edcfef
--- /dev/null
+++ b/nginx/matthewtran.com/html/imgs/favicons/site.webmanifest
@@ -0,0 +1,19 @@
+{
+ "name": "",
+ "short_name": "",
+ "icons": [
+ {
+ "src": "android-chrome-192x192.png",
+ "sizes": "192x192",
+ "type": "image/png"
+ },
+ {
+ "src": "android-chrome-512x512.png",
+ "sizes": "512x512",
+ "type": "image/png"
+ }
+ ],
+ "theme_color": "#ffffff",
+ "background_color": "#ffffff",
+ "display": "standalone"
+}
diff --git a/nginx/matthewtran.com/html/imgs/social.jpg b/nginx/matthewtran.com/html/imgs/social.jpg
new file mode 100644
index 0000000..ba3cd77
Binary files /dev/null and b/nginx/matthewtran.com/html/imgs/social.jpg differ
diff --git a/nginx/matthewtran.com/html/index.html b/nginx/matthewtran.com/html/index.html
new file mode 100644
index 0000000..a2059a3
--- /dev/null
+++ b/nginx/matthewtran.com/html/index.html
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+
+ Matthew Tran's Site!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Hi, I'm
+
Matthew Tran!
+
EECS, UC Berkeley 2022
+
+
I'm a human being passionate about the intersection of electrical engineering and computer science. I've had a lifelong interest in making things that interact with the world, which so far has led me to focus on embedded systems and digital design. In my free time, I enjoy challenging myself to tackle yet another project on my seemingly endless list of ideas.
+
+
+
+
+
+
+
diff --git a/nginx/matthewtran.com/html/sitemap.xml b/nginx/matthewtran.com/html/sitemap.xml
new file mode 100644
index 0000000..9c85359
--- /dev/null
+++ b/nginx/matthewtran.com/html/sitemap.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+ https://matthewtran.com/
+ 2019-12-16T18:42:28+00:00
+ 1.00
+
+
+ https://matthewtran.com/resume.pdf
+ 2019-12-16T18:42:28+00:00
+ 0.80
+
+
+
+
diff --git a/nginx/matthewtran.com/html/style.css b/nginx/matthewtran.com/html/style.css
new file mode 100644
index 0000000..a4e3abc
--- /dev/null
+++ b/nginx/matthewtran.com/html/style.css
@@ -0,0 +1,249 @@
+*, *:before, *:after {
+ box-sizing: border-box;
+ margin: 0;
+ padding: 0;
+ border: 0;
+}
+
+body {
+ opacity: 0;
+ background-color: #000000;
+}
+
+#bg {
+ content: '';
+ position: fixed;
+ width: 100vw;
+ height: 100vh;
+ background-repeat: no-repeat;
+ background-size: cover;
+ background-position: center;
+ background-color: #000000;
+}
+
+body, #bg {
+ z-index: 0;
+ min-width: 240px;
+ width: 100vw;
+ min-height: 100vh;
+
+ overflow-x: hidden;
+
+ -ms-overflow-style: none;
+ scrollbar-width: none;
+}
+
+#bg::-webkit-scrollbar {
+ display: none;
+}
+
+.main {
+ z-index: 1;
+ color: #FFFFFF;
+
+ display: flex;
+ position: relative;
+ flex-direction: column;
+ justify-content: center;
+ text-align: left;
+
+ max-width: 100%;
+ min-height: 100vh;
+ padding: 5rem 5rem;
+ width: 45rem;
+
+ opacity: 0;
+}
+
+.main>* {
+ opacity: 1;
+}
+
+.tagline {
+ font-family: "Montserrat", Times;
+ margin-top: 0;
+ margin-bottom: 0.75rem;
+ letter-spacing: 0.3rem;
+ width: calc(100% + 0.5rem);
+ font-size: 3.5rem;
+ line-height: 1.5;
+ font-weight: 200;
+}
+
+.tl1 {
+ margin-bottom: -0.2rem;
+}
+
+.major {
+ font-family: "Montserrat", Times;
+ margin-top: 0;
+ margin-bottom: 2rem;
+ font-size: 1.25rem;
+ line-height: 1.375;
+ font-weight: 300;
+}
+
+.divider {
+ width: 19%;
+ margin-top: 0;
+ margin-left: 0;
+ margin-bottom: 2rem;
+ border: solid 1px;
+}
+
+.about {
+ font-family: "Source Code Pro", Times;
+ margin-top: 0;
+ margin-bottom: 1.5rem;
+ font-size: 1rem;
+ line-height: 1.625;
+}
+
+.buttons {
+ font-family: "Source Code Pro", Times;
+ margin-top: 0;
+ margin-bottom: 1.5rem;
+ width: calc(100% + 0.75rem);
+ margin-left: -0.375rem;
+ margin-right: -0.375rem;
+ list-style: none;
+}
+
+.buttons li {
+ display: inline-block;
+ max-width: calc(100% - 0.75rem);
+ margin-left: 0.375rem;
+}
+
+.buttons li a {
+ border: solid 1px;
+ display: flex;
+ padding: 0 1.2rem;
+ border-radius: 0.5rem;
+ height: 2.5rem;
+ line-height: 2.5rem;
+ vertical-align: middle;
+ font-size: 1rem;
+ align-items: center;
+ justify-content: center;
+}
+
+.icons {
+ margin-top: 0;
+ margin-bottom: 0;
+ width: calc(100% + 1rem);
+ margin-left: -0.5rem;
+ list-style: none;
+}
+
+.icons li {
+ display: inline-block;
+ margin: 0.75rem;
+ vertical-align: middle;
+}
+
+.icons li a {
+ border-radius: 100%;
+ width: 1.6rem;
+ height: 1.6rem;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+
+a:link, a:visited {
+ color: #FFFFFF;
+ border-color: #FFFFFF;
+ text-decoration: none;
+ transition: 0.32s;
+}
+
+a:hover, a:active {
+ color: #5AD1E5 !important;
+ border-color: #5AD1E5 !important;
+ text-decoration: none;
+ transition: 0.32s;
+}
+
+html {
+ font-size: 18pt;
+}
+
+@media (max-width: 1680px) {
+ html {
+ font-size: 13pt;
+ }
+}
+
+@media (max-width: 980px) {
+ html {
+ font-size: 11pt;
+ }
+}
+
+@media (max-width: 736px) {
+ .main {
+ padding: 0.375rem 2rem;
+ }
+
+ .tagline {
+ margin-bottom: 0.75rem;
+ letter-spacing: 0.4375rem;
+ width: calc(100% + 0.4375rem);
+ font-size: 2.125rem;
+ line-height: 1.5;
+ }
+}
+
+@media (max-width: 480px) {
+ .main {
+ text-align: center;
+ padding: 0.375rem 2rem;
+ align-items: center;
+ align-content: center;
+ }
+
+ .tagline {
+ margin-left: 0.8rem;
+ margin-bottom: 0.65625rem;
+ }
+
+ .major {
+ margin-bottom: 1.75rem;
+ }
+
+ .divider {
+ margin-bottom: 1.75rem;
+ }
+
+ .about {
+ text-align: justify;
+ }
+
+ .buttons li {
+ display: block;
+ padding: 0.4rem 0;
+ }
+}
+
+@media (max-width: 360px) {
+ .main {
+ padding: 0.28125rem 1.5rem;
+ }
+
+ .tagline {
+ margin-bottom: 0.5625rem;
+ }
+
+ .major {
+ margin-bottom: 1.5rem;
+ }
+
+ .divider {
+ margin-bottom: 1.5rem;
+ }
+
+ .buttons li {
+ padding: 0.27rem 0;
+ }
+}