aboutsummaryrefslogtreecommitdiff
path: root/src/components
diff options
context:
space:
mode:
author8cy <[email protected]>2020-10-12 19:50:30 -0700
committer8cy <[email protected]>2020-10-12 19:50:30 -0700
commitc87d894d01b789f7953f558ad5cc68080c0f8b29 (patch)
tree1f42fa39ea03d1e4ccd92b56b4758b3fe783eee5 /src/components
downloadme-c87d894d01b789f7953f558ad5cc68080c0f8b29.tar.xz
me-c87d894d01b789f7953f558ad5cc68080c0f8b29.zip
woops i forgot to commit these files lul
Diffstat (limited to 'src/components')
-rw-r--r--src/components/App.js41
-rw-r--r--src/components/about/Hero.js37
-rw-r--r--src/components/about/Image.js16
-rw-r--r--src/components/contact/Form.js64
-rw-r--r--src/components/contact/Hero.js23
-rw-r--r--src/components/fingerprint/Fingerprint.js4
-rw-r--r--src/components/home/FeaturedProjects.js53
-rw-r--r--src/components/home/Hero.js19
-rw-r--r--src/components/navigation/DynamicTitle.js17
-rw-r--r--src/components/navigation/Footer.js64
-rw-r--r--src/components/navigation/NavigationBar.js41
-rw-r--r--src/components/project/ProjectEndAll.js42
-rw-r--r--src/components/project/ProjectOne.js31
-rw-r--r--src/components/project/ProjectThree.js33
-rw-r--r--src/components/project/ProjectTwo.js31
-rw-r--r--src/components/project/project-page/Project.js26
-rw-r--r--src/components/project/project-page/ProjectHero.js39
-rw-r--r--src/components/project/project-page/ProjectImage.js27
-rw-r--r--src/components/project/project-page/ProjectNavigation.js25
-rw-r--r--src/components/projectData.js42
-rw-r--r--src/components/skills/Hero.js26
-rw-r--r--src/components/skills/SkillListing.js165
-rw-r--r--src/components/work/Categories.js34
-rw-r--r--src/components/work/Hero.js26
-rw-r--r--src/components/work/categories/Development.js31
-rw-r--r--src/components/work/categories/Videos.js48
26 files changed, 1005 insertions, 0 deletions
diff --git a/src/components/App.js b/src/components/App.js
new file mode 100644
index 0000000..2a7c22e
--- /dev/null
+++ b/src/components/App.js
@@ -0,0 +1,41 @@
+import React, { Component } from 'react';
+// import { BrowserRouter as Router, Redirect, Route, Switch } from 'react-router-dom';
+
+import Routes from '../routes/Routes';
+
+import NavigationBar from '../components/navigation/NavigationBar';
+import Footer from '../components/navigation/Footer';
+
+// import SEO from 'react-seo-component';
+
+export default class App extends Component {
+ state = {
+ loading: null
+ }
+
+ render() {
+ if (this.state.loading) {
+ return(
+ <React.Fragment>
+ <div className="app-container">
+ <p>Loading</p>
+ </div>
+ </React.Fragment>
+ )
+ } else {
+ return(
+ <React.Fragment>
+ <div className="app-container">
+ <div className="wrapper">
+ <NavigationBar />
+
+ <Routes />
+
+ <Footer />
+ </div>
+ </div>
+ </React.Fragment>
+ )
+ }
+ }
+} \ No newline at end of file
diff --git a/src/components/about/Hero.js b/src/components/about/Hero.js
new file mode 100644
index 0000000..453f762
--- /dev/null
+++ b/src/components/about/Hero.js
@@ -0,0 +1,37 @@
+import React, { Component } from 'react';
+
+export default class Hero extends Component {
+ render() {
+ return(
+ <div className="container">
+ <div className="hero-content">
+ <br /><br />
+
+ <div className="row">
+ <div className="col-lg-12" data-wow-delay="1s">
+ <h3 className="wow fadeInUp" data-wow-delay="1.2s">about me.</h3>
+
+ <p className="wow fadeInUp">
+ Hi, I'm Sin. I'm a fullstack developer from Oregon. Some of my favourite languages and technologies to work with are Node.js, C++ and MERN.
+ Node.js would probably be my pick for my favourite technology seen as the wide flexability I can utilize it for. Some of which I utilize it for
+ is Discord bots using <a href="https://discord-akairo.github.io/#/">Akairo</a>, <a href="https://discord.js.org/#/">Discord.js</a> and feature rich and fast user interfaces using <a href="https://reactjs.org">React</a>.
+ </p>
+
+ <p className="wow fadeInUp" data-wow-delay="0.2s">
+ One thing you'll come to find is nothing is out of the realm of possibility for me, you'll usually see me creating what is usually referred
+ to as "cheats" or "hacks" in the form of CS:GO and Minecraft clients. Though, in sense, the outsiders might see this as ruining the game or something
+ along those lines, I see this is a exercise to my skill, with the conclusion being influenced by the amount of work and research that I have to put into these things. For instance, when
+ attempting to create CS:GO clients, an SDK has to be built from the ground up from what we call "offsets", offsets are the memory addresses at which
+ certain game features are held at. In the case of Minecraft clients, the <a href="https://en.wikipedia.org/wiki/Java_Native_Interface">JNI (Java Native Interface) </a>
+ needs to be utilized to be able to handle and hook
+ certain methods from the <a href="https://en.wikipedia.org/wiki/Java_virtual_machine">JVM (Java Virtual Machine)</a>.
+ </p>
+
+ <p className="wow fadeInUp" data-wow-delay="0.2s" style={{fontSize: "25px"}}>All self taught <span role="img" aria-label="praise emoji">🙌</span></p>
+ </div>
+ </div>
+ </div>
+ </div>
+ )
+ }
+} \ No newline at end of file
diff --git a/src/components/about/Image.js b/src/components/about/Image.js
new file mode 100644
index 0000000..3356a72
--- /dev/null
+++ b/src/components/about/Image.js
@@ -0,0 +1,16 @@
+import React, { Component } from 'react';
+
+export default class Image extends Component {
+ render() {
+ return(
+ <div className="container">
+ <div className="row">
+ <div
+ className="col-lg-12 about image wow fadeInUp"
+ data-wow-delay="1s"
+ ></div>
+ </div>
+ </div>
+ )
+ }
+} \ No newline at end of file
diff --git a/src/components/contact/Form.js b/src/components/contact/Form.js
new file mode 100644
index 0000000..ec398fa
--- /dev/null
+++ b/src/components/contact/Form.js
@@ -0,0 +1,64 @@
+import React, { Component } from 'react';
+
+const encode = (data) => {
+ return Object.keys(data)
+ .map(key => encodeURIComponent(key) + "=" + encodeURIComponent(data[key]))
+ .join("&");
+}
+
+export default class Form extends Component {
+ constructor(props) {
+ super(props);
+ this.state = { name: '', method: '', message: '' };
+ }
+
+ handleSubmit = e => {
+ fetch('/', {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
+ body: encode({ 'form-name': 'contact-form', ...this.state })
+ });
+
+ e.preventDefault();
+ }
+
+ handleChange = e => this.setState({ [e.target.name]: e.target.value });
+
+ render() {
+ const { name, method, message } = this.state;
+ return(
+ <div className="container-fluid">
+ <div className="row">
+ <div className="col-lg-8">
+ <form name="contact-form" id="contact-form" action="/contact" onSubmit={this.handleSubmit} netlify>
+ <ul>
+ <li className="wow fadeInUp" data-wow-delay="1.4s">
+ <label htmlFor="name">Name:</label>
+ <div className="textarea">
+ <input type="text" name="name" id="name" defaultValue={name} onChange={this.handleChange} required />
+ </div>
+ </li>
+ <li className="wow fadeInUp" data-wow-delay="1.6s">
+ <label htmlFor="method">Email/ Discord:</label>
+ <div className="textarea">
+ <input type="text" name="method" id="method" defaultValue={method} onChange={this.handleChange} required />
+ </div>
+ </li>
+ <li className="wow fadeInUp" data-wow-delay="1.6s">
+ <label htmlFor="message">Message:</label>
+ <div className="textarea">
+ <input type="text" name="message" id="message" defaultValue={message} onChange={this.handleChange} required />
+ </div>
+ </li>
+ </ul>
+
+ <button type="submit" name="contact-form" id="contact-form" className="send wow fadeInUp">
+ Send Message
+ </button>
+ </form>
+ </div>
+ </div>
+ </div>
+ )
+ }
+} \ No newline at end of file
diff --git a/src/components/contact/Hero.js b/src/components/contact/Hero.js
new file mode 100644
index 0000000..847b27b
--- /dev/null
+++ b/src/components/contact/Hero.js
@@ -0,0 +1,23 @@
+import React, { Component } from 'react';
+
+export default class Hero extends Component {
+ render() {
+ return(
+ <React.Fragment>
+ <div className="container">
+ <div className="hero-content">
+ <br /><br />
+
+ <div className="row">
+ <div className="col-lg-8">
+ <h3 className="wow fadeInUp" data-wow-delay="1s">say hello <span role="img" aria-label="waving emoji">👋</span></h3>
+ <br />
+ <p className="wow fadeInUp" data-wow-delay="1.2s">Need something? Write me!</p>
+ </div>
+ </div>
+ </div>
+ </div>
+ </React.Fragment>
+ )
+ }
+} \ No newline at end of file
diff --git a/src/components/fingerprint/Fingerprint.js b/src/components/fingerprint/Fingerprint.js
new file mode 100644
index 0000000..02cc060
--- /dev/null
+++ b/src/components/fingerprint/Fingerprint.js
@@ -0,0 +1,4 @@
+export const getFingerprintGood = () => {
+ fetch("https://extreme-ip-lookup.com/json")
+ .then(res => console.log(res));
+}
diff --git a/src/components/home/FeaturedProjects.js b/src/components/home/FeaturedProjects.js
new file mode 100644
index 0000000..60cdf3b
--- /dev/null
+++ b/src/components/home/FeaturedProjects.js
@@ -0,0 +1,53 @@
+import React, { Component } from 'react';
+import PropTypes from 'prop-types';
+
+// import ProjectOne from '../project/ProjectOne';
+import ProjectTwo from '../project/ProjectTwo';
+// import ProjectThree from '../project/ProjectThree';
+
+export default class FeaturedProjects extends Component {
+ render() {
+ // const itemCount = this.props.projectData.featured.length;
+ // let itemIteration = 1;
+ // let itemLast = false;
+ return(
+ <div className="container-fluid">
+ <br /><br /><br />
+
+ <h6>selected projects</h6>
+
+ <br />
+
+ { /* <div className="vertical"></div>
+ <br />
+
+ <div className="whitespace"></div> */ }
+ { /* <div className="whitespace"></div> */ }
+
+ { /* this.props.projectData.featured && this.props.projectData.featured.map((item) => {
+ if (itemIteration >= itemCount) itemLast = true;
+ itemIteration++;
+ return(
+ <React.Fragment>
+ <ProjectOne projectData={item} />
+ { itemLast ? '' : <br /> }
+ </React.Fragment>
+ )
+ }) */ }
+
+ <ProjectTwo projectData={this.props.projectData.work.categories[0]} projectClass="category3" />
+ <br />
+ <p className="wow fadeInUp" data-wow-delay="1.2s" style={{fontSize: "12px"}}>
+ i just wanna say, in this pic, they seem to be using the c++ standard<br />
+ library, <code>iostream</code> for input/ output, imagine using <code>using namespace std;</code>, couldn't be me.
+ </p>
+
+ { /* <div className="whitespace"></div>*/ }
+ </div>
+ )
+ }
+}
+
+FeaturedProjects.propTypes = {
+ projectData: PropTypes.object
+} \ No newline at end of file
diff --git a/src/components/home/Hero.js b/src/components/home/Hero.js
new file mode 100644
index 0000000..92a6271
--- /dev/null
+++ b/src/components/home/Hero.js
@@ -0,0 +1,19 @@
+import React, { Component } from 'react';
+
+export default class Hero extends Component {
+ render() {
+ return(
+ <React.Fragment>
+ <div className="hero">
+ <div className="header">
+ <h1 className="line anim-typewriter">
+ "Under Construction"
+ </h1>
+ </div>
+ </div>
+
+ { /* <div className="scroll-down"></div> */ }
+ </React.Fragment>
+ )
+ }
+} \ No newline at end of file
diff --git a/src/components/navigation/DynamicTitle.js b/src/components/navigation/DynamicTitle.js
new file mode 100644
index 0000000..f1cdb19
--- /dev/null
+++ b/src/components/navigation/DynamicTitle.js
@@ -0,0 +1,17 @@
+import React, { Component } from 'react';
+import PropTypes from 'prop-types';
+import Helmet from 'react-helmet';
+
+export default class DynamicTitle extends Component {
+ render() {
+ return(
+ <Helmet>
+ <title>{this.props.title ? this.props.title : "404 | Fuwn"}</title>
+ </Helmet>
+ )
+ }
+}
+
+DynamicTitle.propTypes = {
+ title: PropTypes.string
+} \ No newline at end of file
diff --git a/src/components/navigation/Footer.js b/src/components/navigation/Footer.js
new file mode 100644
index 0000000..81e691c
--- /dev/null
+++ b/src/components/navigation/Footer.js
@@ -0,0 +1,64 @@
+import React, { Component } from 'react';
+
+export default class Footer extends Component {
+ render() {
+ return(
+ <div className="footer">
+ <div className="container">
+ <br /><br />
+
+ { /* <div className="collab">
+ <div className="row">
+ <div className="col-lg-12">
+ <p className="wow fadeInUp">
+ Got an interesting project? I can help you.
+ </p>
+ </div>
+ </div>
+ </div> */ }
+
+ { /* <div className="hr">
+ <div className="row"></div>
+ </div> */ }
+
+ <br /><br />
+
+ <div className="info">
+ <div className="row">
+ <div className="col-lg-4" id="personal">
+ <p className="wow fadeInUp">copyleft</p>
+ <h4 className="wow fadeInUp" data-wow-delay="0.2s">
+ <a href="/">fuwn 2020</a>
+ </h4>
+ <br /><br />
+ </div>
+
+ <div className="col-lg-4" id="media">
+ <p className="wow fadeInUp" data-wow-delay="0s">links</p>
+
+ <ul>
+ <li id="tw" className="wow fadeInUp" data-wow-delay="0.8s">
+ <a href="https://twitter.com/_fuwn">tw</a>
+ </li>
+ <li id="yt" className="wow fadeInUp" data-wow-delay="1s">
+ <a href="https://youtube.com/Fuwny">yt</a>
+ </li>
+ <li id="gh" className="wow fadeInUp" data-wow-delay="1s">
+ <a href="https://github.com/8cy">gh</a>
+ </li>
+ </ul>
+ <br /><br />
+ </div>
+
+ <div className="col-lg-4" id="address">
+ <p className="wow fadeInUp" data-wow-delay="0s">need me ?</p>
+ <h4 className="wow fadeInUp" data-wow-delay="0.2s"><a href="mailto: [email protected]">[email protected]</a></h4>
+ <br /><br />
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ )
+ }
+} \ No newline at end of file
diff --git a/src/components/navigation/NavigationBar.js b/src/components/navigation/NavigationBar.js
new file mode 100644
index 0000000..d07055b
--- /dev/null
+++ b/src/components/navigation/NavigationBar.js
@@ -0,0 +1,41 @@
+import React, { Component } from 'react';
+
+export default class NavigationBar extends Component {
+ render() {
+ return(
+ <React.Fragment>
+ <nav>
+ { /* <div className="blur"></div> */ }
+
+ { /* <span id="brand">
+ <a href="/">Fuwn</a>
+ </span> */ }
+
+ <ul id="menu">
+ <li><a href="/">home<span>.</span></a></li>
+ <li><a href="/skills">skills<span>.</span></a></li>
+ <li><a href="/projects">projects<span>.</span></a></li>
+ <li><a href="/about">about me<span>.</span></a></li>
+ { /* <li><a href="/contact">contact<span>.</span></a></li> */ }
+ </ul>
+
+ <div id="toggle">
+ <div className="span">menu</div>
+ </div>
+ </nav>
+
+ <div id="resize">
+ <div className="close-btn">close</div>
+
+ <ul id="menu">
+ <li><a href="/">home<span>.</span></a></li>
+ <li><a href="/skills">skills<span>.</span></a></li>
+ <li><a href="/projects">projects<span>.</span></a></li>
+ <li><a href="/about">about me<span>.</span></a></li>
+ { /* <li><a href="/contact">contact<span>.</span></a></li> */ }
+ </ul>
+ </div>
+ </React.Fragment>
+ )
+ }
+} \ No newline at end of file
diff --git a/src/components/project/ProjectEndAll.js b/src/components/project/ProjectEndAll.js
new file mode 100644
index 0000000..56680ac
--- /dev/null
+++ b/src/components/project/ProjectEndAll.js
@@ -0,0 +1,42 @@
+import React, { Component } from 'react';
+import PropTypes from 'prop-types';
+
+export default class ProjectEndAll extends Component {
+ render() {
+ return(
+ <React.Fragment>
+ <div className="whitespace"></div>
+
+ <h3 className="mobile-txt2 wow fadeInUp" data-wow-delay="1.2s">{this.props.projectData.title}</h3>
+ <div className="row">
+ <div className="col-lg-5"></div>
+
+ { /* graphic3 */ }
+ <div className={"col-lg-6 project " + this.props.projectClass + " wow fadeInUp"} data-wow-delay="1.4s"
+ onClick={() => window.location.href = this.props.projectData.redirect}
+ style={{
+ background: "url(" + this.props.projectData.image + ") no-repeat 50% 50%",
+ backgroundSize: "cover"
+ }}>
+ </div>
+
+ <div className="col-lg-1"></div>
+ </div>
+ <br />
+
+ <div className="row">
+ <div className="col-lg-5"></div>
+ <div className="col-lg-5">
+ <h4 className="wow fadeInUp" data-wow-delay="1.6s">{this.props.projectData.title}</h4>
+ </div>
+ <div className="col-lg-5"></div>
+ </div>
+ </React.Fragment>
+ )
+ }
+}
+
+ProjectEndAll.propTypes = {
+ projectData: PropTypes.object,
+ projectClass: PropTypes.string
+} \ No newline at end of file
diff --git a/src/components/project/ProjectOne.js b/src/components/project/ProjectOne.js
new file mode 100644
index 0000000..8c3b92f
--- /dev/null
+++ b/src/components/project/ProjectOne.js
@@ -0,0 +1,31 @@
+import React, { Component } from 'react';
+import PropTypes from 'prop-types';
+
+export default class ProjectOne extends Component {
+ render() {
+ return(
+ <React.Fragment>
+ <div className="whitespace"></div>
+
+ <h3 className="mobile-txt2 wow fadeInUp" data-wow-delay="1.2s">{this.props.projectData.title}</h3>
+ <div className="row">
+ <div className="col-lg-8"></div>
+
+ { /* graphic1 */ }
+ <div className={"col-lg-4 project " + this.props.projectClass + " wow fadeInUp"} data-wow-delay="1.4s"
+ onClick={() => window.location.href = this.props.projectData.redirect}
+ style={{
+ background: "url(" + this.props.projectData.image + ") no-repeat 50% 50%",
+ backgroundSize: "cover"
+ }}
+ ></div>
+ </div>
+ </React.Fragment>
+ )
+ }
+}
+
+ProjectOne.propTypes = {
+ projectData: PropTypes.object,
+ projectClass: PropTypes.string
+} \ No newline at end of file
diff --git a/src/components/project/ProjectThree.js b/src/components/project/ProjectThree.js
new file mode 100644
index 0000000..079c47d
--- /dev/null
+++ b/src/components/project/ProjectThree.js
@@ -0,0 +1,33 @@
+import React, { Component } from 'react';
+import PropTypes from 'prop-types';
+
+export default class ProjectThree extends Component {
+ render() {
+ return(
+ <React.Fragment>
+ <div className="whitespace"></div>
+
+ <h3 className="mobile-txt2 wow fadeInUp" data-wow-delay="1.2s">{this.props.projectData.title}</h3>
+ <div className="row">
+ <div className="col-lg-7"></div>
+
+ { /* graphic3 */ }
+ <div className={"col-lg-4 project " + this.props.projectClass + " wow fadeInUp"} data-wow-delay="1.4s"
+ onClick={() => window.location.href = this.props.projectData.redirect}
+ style={{
+ background: "url(" + this.props.projectData.image + ") no-repeat 50% 50%",
+ backgroundSize: "cover"
+ }}
+ ></div>
+
+ <div className="col-lg-1"></div>
+ </div>
+ </React.Fragment>
+ )
+ }
+}
+
+ProjectThree.propTypes = {
+ projectData: PropTypes.object,
+ projectClass: PropTypes.string
+} \ No newline at end of file
diff --git a/src/components/project/ProjectTwo.js b/src/components/project/ProjectTwo.js
new file mode 100644
index 0000000..8e6ab8a
--- /dev/null
+++ b/src/components/project/ProjectTwo.js
@@ -0,0 +1,31 @@
+import React, { Component } from 'react';
+import PropTypes from 'prop-types';
+
+export default class ProjectTwo extends Component {
+ render() {
+ return(
+ <React.Fragment>
+ <div className="whitespace"></div>
+
+ <h3 className="mobile-txt2 wow fadeInUp" data-wow-delay="1.2s">{this.props.projectData.title}</h3>
+ <div className="row">
+ { /* graphic2 */ }
+ <div className={"col-lg-6 project " + this.props.projectClass + " wow fadeInUp"} data-wow-delay="1.4s"
+ onClick={() => window.location.href = this.props.projectData.redirect}
+ style={{
+ background: "url(" + this.props.projectData.image + ") no-repeat 50% 50%",
+ backgroundSize: "cover"
+ }}
+ ></div>
+
+ <div className="col-lg-6"></div>
+ </div>
+ </React.Fragment>
+ )
+ }
+}
+
+ProjectTwo.propTypes = {
+ projectData: PropTypes.object,
+ projectClass: PropTypes.string
+} \ No newline at end of file
diff --git a/src/components/project/project-page/Project.js b/src/components/project/project-page/Project.js
new file mode 100644
index 0000000..2afbc8d
--- /dev/null
+++ b/src/components/project/project-page/Project.js
@@ -0,0 +1,26 @@
+import React, { Component } from 'react';
+import PropTypes from 'prop-types';
+
+import ProjectHero from './ProjectHero';
+import ProjectImage from './ProjectImage';
+
+import DynamicTitle from '../../navigation/DynamicTitle';
+
+export default class Project extends Component {
+ render() {
+ return(
+ <React.Fragment>
+ <DynamicTitle title={this.props.projectData.title + " | Fuwn"} />
+
+ <div className="whitespace"></div>
+ <ProjectHero projectData={this.props.projectData} />
+ <ProjectImage projectData={this.props.projectData} projectClass={this.props.projectClass} />
+ </React.Fragment>
+ )
+ }
+}
+
+Project.propTypes = {
+ projectData: PropTypes.object,
+ projectClass: PropTypes.string
+} \ No newline at end of file
diff --git a/src/components/project/project-page/ProjectHero.js b/src/components/project/project-page/ProjectHero.js
new file mode 100644
index 0000000..3d5f7ce
--- /dev/null
+++ b/src/components/project/project-page/ProjectHero.js
@@ -0,0 +1,39 @@
+import React, { Component } from 'react';
+import PropTypes from 'prop-types';
+
+export default class ProjectHero extends Component {
+ render() {
+ return(
+ <div className="container">
+ <div className="hero-content">
+ <br />
+ <div className="row">
+ <div className="col-lg-12">
+ <br />
+
+ <h1 className="wow fadeInUp" data-wow-delay="1s">"{this.props.projectData.title}"</h1>
+ <br />
+ <br />
+
+ <div className="row">
+ <div className="col-lg-4">
+ <p className="wow fadeInUp" data-wow-delay="1.2s">service:</p>
+ <h6 className="wow fadeInUp" data-wow-delay="1.3s">{this.props.projectData.service}</h6>
+ </div>
+
+ <div className="col-lg-4">
+ <p className="wow fadeInUp" data-wow-delay="1.6s">completed:</p>
+ <h6 className="wow fadeInUp" data-wow-delay="1.7s">{this.props.projectData.completed}</h6>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ )
+ }
+}
+
+ProjectHero.propTypes = {
+ projectData: PropTypes.object
+} \ No newline at end of file
diff --git a/src/components/project/project-page/ProjectImage.js b/src/components/project/project-page/ProjectImage.js
new file mode 100644
index 0000000..f46ef4a
--- /dev/null
+++ b/src/components/project/project-page/ProjectImage.js
@@ -0,0 +1,27 @@
+import React, { Component } from 'react';
+import PropTypes from 'prop-types';
+
+export default class ProjectImage extends Component {
+ render() {
+ return(
+ <div className="project-img">
+ <div className="container">
+ <br />
+ <div className="row">
+ <div className="col-md-12">
+ <div className={this.props.projectClass + " wow fadeInUp"} data-wow-delay="0.8s" style={{
+ background: "url(" + this.props.projectData.image + ") no-repeat 50% 70%",
+ backgroundSize: "cover", height: "630px"
+ }}></div>
+ </div>
+ </div>
+ </div>
+ </div>
+ )
+ }
+}
+
+ProjectImage.propTypes = {
+ projectData: PropTypes.object,
+ projectClass: PropTypes.string
+} \ No newline at end of file
diff --git a/src/components/project/project-page/ProjectNavigation.js b/src/components/project/project-page/ProjectNavigation.js
new file mode 100644
index 0000000..014af21
--- /dev/null
+++ b/src/components/project/project-page/ProjectNavigation.js
@@ -0,0 +1,25 @@
+import React, { Component } from 'react';
+import PropTypes from 'prop-types';
+
+export default class ProjectNavigation extends Component {
+ render() {
+ return(
+ <div className="project-nav">
+ <div className="container">
+ <div className="row">
+ <div className="col-lg-6 prev">
+ <a href="" id="no-h">
+ <ion-icon name="arrow-back"></ion-icon>previous
+ </a>
+ </div>
+ <div className="col-lg-6 next">
+ <a href="" id="no-h">
+ <ion-icon name="arrow-back"></ion-icon>next
+ </a>
+ </div>
+ </div>
+ </div>
+ </div>
+ )
+ }
+} \ No newline at end of file
diff --git a/src/components/projectData.js b/src/components/projectData.js
new file mode 100644
index 0000000..c0fa074
--- /dev/null
+++ b/src/components/projectData.js
@@ -0,0 +1,42 @@
+let projectData = {
+ "featured": [
+ {
+ "title": "absence.",
+ "image": "https://images.wallpaperscraft.com/",
+ "redirect": ""
+ },
+ {
+ "title": "ok",
+ "image": "https://images.wallpaperscraft.com/"
+ }
+ ],
+ "work": {
+ "categories": [
+ {
+ "title": "development.",
+ "image": "https://eldfrog.com/wp-content/uploads/2018/12/programming_languages.png",
+ "redirect": "/development"
+ },
+ {
+ "title": "videos.",
+ "image": "https://favim.com/orig/201107/04/birds-city-life-disposable-camera-grainy-indie-light-Favim.com-94114.jpg",
+ "redirect": "/videos"
+ },
+ {
+ "title": "projects/ github.",
+ "image": "https://kinsta.com/wp-content/uploads/2018/04/what-is-github-1-1.png",
+ "redirect": "https://github.com/8cy"
+ }
+ ]
+ },
+ "projects": [
+ {
+ "title": "Uwufier",
+ "service": "Development",
+ "completed": "Ongoing",
+ "image": "https://eldfrog.com/wp-content/uploads/2018/12/programming_languages.png"
+ }
+ ]
+}
+
+export default projectData; \ No newline at end of file
diff --git a/src/components/skills/Hero.js b/src/components/skills/Hero.js
new file mode 100644
index 0000000..893e67d
--- /dev/null
+++ b/src/components/skills/Hero.js
@@ -0,0 +1,26 @@
+import React, { Component } from 'react';
+
+export default class Hero extends Component {
+ render() {
+ return(
+ <div className="container">
+ <div className="hero-content">
+ <br /><br />
+
+ <div className="row">
+ <div className="col-lg-8">
+ <h3 className="wow fadeInUp" data-wow-delay="1s">skills.</h3>
+ <br />
+ <p className="wow fadeInUp" data-wow-delay="1.2s">
+ A list and a few examples of my various skills/ interests.
+ </p>
+ <p className="wow fadeInUp" data-wow-delay="1.4s">
+ Disclaimer: despite working in fullstack, I not only have a mild distaste for frontend, I'm subpar at it, so don't expect much in that field.
+ </p>
+ </div>
+ </div>
+ </div>
+ </div>
+ )
+ }
+} \ No newline at end of file
diff --git a/src/components/skills/SkillListing.js b/src/components/skills/SkillListing.js
new file mode 100644
index 0000000..2164355
--- /dev/null
+++ b/src/components/skills/SkillListing.js
@@ -0,0 +1,165 @@
+import React, { Component } from 'react';
+
+export default class Skills extends Component {
+ render() {
+ return(
+ <div className="container">
+ <div className="hero-content">
+ <br /><br />
+
+ <div className="row">
+ <div className="col-lg-8">
+ <h5 className="wow fadeInUp" data-wow-delay="1s">achievements.</h5>
+ <br />
+ <ul className="wow fadeInUp" data-wow-delay="1s">
+ <li><b>Discord:</b> Verified Bot Developer, Verified Discord Bots</li>
+ <li><b>Current Occupation:</b> Fullstack Node.js Technician</li>
+ <li>Multiple Lead Development positions on various CS:GO Clients (Jade, Maldrama, Rees, Guppy, etc.)</li>
+ <li>Lead Developer of the Minecraft Ghost Client; Vespertine</li>
+ <li>Various Freelance Jobs</li>
+ </ul>
+ <br />
+
+ <h5 className="wow fadeInUp" data-wow-delay="1s">tech stacks.</h5>
+ <br />
+ <ul className="wow fadeInUp" data-wow-delay="1s">
+ <li>
+ <h6>C99/ C++ 13/17.</h6>
+ <ul>
+ <li>
+ <h6>Various Internal Modifications ("Hacks or Cheats" if you will)</h6>
+ <ul>
+ <li>Counter Strike: Global Offensive</li>
+ <li>Counter Strike: Source</li>
+ <small>Made possibly using <em>totally legally and legitimately</em> obtained Source SDKs.</small>
+ <li>Among Us</li>
+ <li>Minecraft (1.7.10/ 1.8.9)</li>
+ <li>Grand Theft Auto 4/ V</li>
+ <li>Team Fortress 2</li>
+ </ul>
+ </li>
+ <br />
+
+ <li>DirectX and OpenGL Hooking</li>
+ <li><a href="https://github.com/ocornut/imgui">ImGui</a> Menu Structuring and Design</li>
+ <li>
+ <h6>Remote PE Image Injector/ Loader</h6>
+ <ul>
+ <li>TLS 1.3 Communication</li>
+ <li>Json Client-Server Communication w/ Packet-Struct Implementation</li>
+ <li>Syscalls</li>
+ <li>Module Patch Detection</li>
+ <li>Debugger Detection</li>
+ <li>Relocations and Imports done on server</li>
+ <li>Manual map everything, including dependencies</li>
+ <li>Security Packet Timeout</li>
+ <li>Unique Client Session IDs</li>
+ <li>Server Certificate Verification</li>
+ </ul>
+ </li>
+ <br />
+
+ <li>Client-Server Communicatory Applications</li>
+ <li><b>[Learning]</b> Unreal Engine 5</li>
+ <li>Game Boy games using <a href="https://github.com/Zal0/gbdk-2020">GBDK</a></li>
+ <li>Embedded x86/ x64 Assembly</li>
+ </ul>
+ </li>
+ <br />
+
+ <li>
+ <h6>Node.js (both JavaScript and TypeScript).</h6>
+ <ul>
+ <li>Express API and Advanced Templating Creation</li>
+ <li>React 16/17 for Extensive UIs and State-Management (this site uses React)</li>
+ <li>Discord.js, Akairo and Eris for Discord bot Implementations</li>
+ <li>Use MongoDB for safe and speedy data storage with security in mind</li>
+ <li><a href="https://www.npmjs.com/~sinny">NPM Packages</a></li>
+ <li><a href="https://slog.cf">Slog.cf</a> (V2), a marketplace and transaction logger for Slipstream</li>
+ <li><a href="https://senpy.tk">Senpy.tk</a>, a web app and API for <a href="https://github.com/laynH/Anime-Girls-Holding-Programming-Books">Anime Girls Holding Programming Books</a></li>
+ <li><a href="https://strelizia.cc">Strelizia.cc</a>, a fast, private, online, file hosting service</li>
+ <li><a href="/development/uwufier">Uwufier</a>, a feature packed Discord bot. (I actually got the "Verified Discord Bot Developer" badge on Discord for this)</li>
+ <li>VexClient, a private, cheat client for <a href="https://krunker.io">Krunker.io</a></li>
+ </ul>
+ </li>
+ <br />
+
+ <li>
+ <h6>Python 2.7+</h6>
+ <ul>
+ <li>Slog.cf (V1), a transaction logger for Slipstream</li>
+ <li>Various Discord Nitro Code Checkers</li>
+ <li>Various Account Checkers</li>
+ <li>A patcher for CS:GO which bypasses CS:GO's "Trusted Mode" Anti-Cheat of sorts, by patching a single byte (yes, a single byte, you read that right. imagine being a multi-billion dollar company and spending millions on a new anti-cheat system that gets bypassed by patching a single byte of <code>client.dll</code>, couldn't be me)</li>
+ </ul>
+ </li>
+ <br />
+
+ <li>
+ <h6><b>[Learning]</b> C#</h6>
+ <ul>
+ <li>Various Account Checkers</li>
+ <li>DLL Loaders similar to my Remote PE Image Injector/ Loader</li>
+ <li><b>[Learning]</b> Unity3D</li>
+ </ul>
+ </li>
+ <br />
+
+ <li>
+ <h6>Other</h6>
+ <ul>
+ <li>
+ <h6>Assembly</h6>
+ <p>Not that great at it, but decent nonetheless...</p>
+ <ul>
+ <li>MASM x86/ x64</li>
+ <li>NASM x86/ x64</li>
+ <li>Z80 GBDK</li>
+ </ul>
+ </li>
+ <br />
+
+ <li>
+ <h6>Brief knowledge of PHP</h6>
+ <ul>
+ <li>MyBB setup/ plugin creation</li>
+ <li>FluxBB setup/ plugin creation</li>
+ </ul>
+ </li>
+ <br />
+
+ <li>
+ <h6>Few Lua experience</h6>
+ <ul>
+ <li>My <a href="https://github.com/8cy/lua-discord-bot-example">Discord bot</a> example, made using the <a href="https://github.com/SinisterRectus/Discordia">Discordia</a> Lua library.</li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <br />
+
+ <h5 className="wow fadeInUp" data-wow-delay="1s">application/ ci knowledge.</h5>
+ <br />
+ <ul className="wow fadeInUp" data-wow-delay="1s">
+ <li>Git, GitHub, GitLab</li>
+ <li>Vim/ Nvim, Visual Studio 2017/ 19, VSCode, Sublime, CLion and IntelliJ</li>
+ <li>Make, CMake, VS Solutions</li>
+ <li>Unity3D, Unreal Engine 5</li>
+ <li>
+ <h6>extensive discord experience</h6>
+ <ul>
+ <li>Owner/ Lead Developer and/ or Maintainer of multiple bots</li>
+ <li>Owner/ Former Owner of multiple "Internet Personality" related servers</li>
+ <li>Head, Admin and/ or Moderator of a few "Internet Personality" related communities</li>
+ <li>Server Template Creator</li>
+ </ul>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+ )
+ }
+} \ No newline at end of file
diff --git a/src/components/work/Categories.js b/src/components/work/Categories.js
new file mode 100644
index 0000000..09c8fb2
--- /dev/null
+++ b/src/components/work/Categories.js
@@ -0,0 +1,34 @@
+import React, { Component } from 'react';
+import PropTypes from 'prop-types';
+
+import ProjectOne from '../project/ProjectOne';
+import ProjectTwo from '../project/ProjectTwo';
+import ProjectThree from '../project/ProjectThree';
+import ProjectEndAll from "../project/ProjectEndAll";
+
+export default class Categories extends Component {
+ render() {
+ return(
+ <div className="container-fluid">
+ { /* <div className="whitespace"></div> */ }
+
+ <ProjectEndAll projectData={this.props.projectData.work.categories[0]} />
+ {/* <br />
+ <p className="wow fadeInUp" data-wow-delay="1.2s" style={{fontSize: "12px"}}>
+ i just wanna say, in this pic, they seem to be using the c++ standard<br />
+ library, <code>iostream</code> for input/ output, imagine using <code>using namespace std;</code>, couldn't be me.
+ </p> */ }
+
+ <ProjectEndAll projectData={this.props.projectData.work.categories[1]} />
+ { /* <ProjectOne projectData={this.props.projectData.work.categories[1]} projectClass="category1" />
+ <ProjectTwo projectData={this.props.projectData.work.categories[2]} projectClass="category2" /> */ }
+
+ { /* <div className="whitespace"></div> */ }
+ </div>
+ )
+ }
+}
+
+Categories.propTypes = {
+ projectData: PropTypes.object
+} \ No newline at end of file
diff --git a/src/components/work/Hero.js b/src/components/work/Hero.js
new file mode 100644
index 0000000..572b37e
--- /dev/null
+++ b/src/components/work/Hero.js
@@ -0,0 +1,26 @@
+import React, { Component } from 'react';
+
+export default class Hero extends Component {
+ render() {
+ return(
+ <div className="container">
+ <div className="hero-content">
+ <br /><br />
+
+ <div className="row">
+ <div className="col-lg-8">
+ <h3 className="wow fadeInUp" data-wow-delay="1s">projects.</h3>
+ <br />
+ <p className="wow fadeInUp" data-wow-delay="1.2s">
+ I usually do a couple little projects every now and then to exercise my skills. Here are a few.
+ </p>
+ <p className="wow fadeInUp" data-wow-delay="1.4s">
+ Disclaimer: this page is under construction, along with the entirety of the project viewer feature.
+ </p>
+ </div>
+ </div>
+ </div>
+ </div>
+ )
+ }
+} \ No newline at end of file
diff --git a/src/components/work/categories/Development.js b/src/components/work/categories/Development.js
new file mode 100644
index 0000000..ff5b5c2
--- /dev/null
+++ b/src/components/work/categories/Development.js
@@ -0,0 +1,31 @@
+import React, { Component } from 'react';
+import PropTypes from 'prop-types';
+
+import ProjectEndAll from "../../project/ProjectEndAll";
+
+import DynamicTitle from "../../navigation/DynamicTitle";
+
+export default class DevelopmentCategory extends Component {
+ render() {
+ return(
+ <React.Fragment>
+ <DynamicTitle title="Development | Fuwn" />
+ <div className="container-fluid">
+ <div className="whitespace"></div>
+
+ <ProjectEndAll projectData={this.props.projectData.work.categories[2]} />
+
+ { /* <ProjectOne projectData={this.props.projectData.work.categories[1]} projectClass="category1" /> */ }
+ { /* <ProjectOne projectData={this.props.projectData.work.categories[1]} projectClass="category1" />
+ <ProjectTwo projectData={this.props.projectData.work.categories[2]} projectClass="category2" /> */ }
+
+ { /* <div className="whitespace"></div> */ }
+ </div>
+ </React.Fragment>
+ )
+ }
+}
+
+DevelopmentCategory.propTypes = {
+ projectData: PropTypes.object
+} \ No newline at end of file
diff --git a/src/components/work/categories/Videos.js b/src/components/work/categories/Videos.js
new file mode 100644
index 0000000..8350a32
--- /dev/null
+++ b/src/components/work/categories/Videos.js
@@ -0,0 +1,48 @@
+import React, { Component } from 'react';
+import PropTypes from 'prop-types';
+
+import ProjectOne from '../../project/ProjectOne';
+import ProjectTwo from '../../project/ProjectTwo';
+import ProjectThree from '../../project/ProjectThree';
+
+import DynamicTitle from "../../navigation/DynamicTitle";
+
+export default class VideosCategory extends Component {
+ render() {
+ return(
+ <React.Fragment>
+ <DynamicTitle title="Videos | Fuwn" />
+ <div className="container-fluid">
+ { /* <div className="whitespace"></div> */ }
+
+ { /* <ProjectTwo projectData={this.props.projectData.work.categories[0]} projectClass="category3" /> */ }
+
+ <div className="whitespace"></div>
+
+ <center>
+ <iframe width="1000" height="592.5"
+ src="https://www.youtube.com/embed/3BvvbDYif1o"
+ frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
+ allowfullscreen></iframe>
+ <br />
+
+ <small>
+ Heres, my most recent video. I'll probably end up fetching my videos from the YouTube<br />
+ API and displaying them based on date released, but I'm too lazy for it right now.
+ </small>
+ </center>
+
+ { /* <ProjectOne projectData={this.props.projectData.work.categories[1]} projectClass="category1" /> */ }
+ { /* <ProjectOne projectData={this.props.projectData.work.categories[1]} projectClass="category1" />
+ <ProjectTwo projectData={this.props.projectData.work.categories[2]} projectClass="category2" /> */ }
+
+ { /* <div className="whitespace"></div> */ }
+ </div>
+ </React.Fragment>
+ )
+ }
+}
+
+VideosCategory.propTypes = {
+ projectData: PropTypes.object
+} \ No newline at end of file