added content

This commit is contained in:
Jay Robson 2024-03-05 14:42:40 +11:00
parent 53f06bd0c5
commit f1a70a2abc
30 changed files with 348 additions and 3951 deletions

View File

@ -4,19 +4,56 @@
#include <fstream>
#include <iostream>
#include <string>
#include <format>
std::string data_index = Files::load("../static/index.html");
std::string data_projects = Files::load("../static/public/html/projects.html");
std::string data_contact = Files::load("../static/public/html/contact.html");
std::string data_about = Files::load("../static/public/html/about.html");
std::string data_resume = Files::load("../static/public/html/resume.html");
std::string data_404 = Files::load("../static/public/html/error.html");
httplib::Server svr;
auto page_handler(std::string data_content)
{
return [data_content](const httplib::Request& req, httplib::Response& res)
{
std::string data = std::vformat(data_index, std::make_format_args(data_content));
res.set_content(data, "text/html");
};
}
void post_contact(const httplib::Request& req, httplib::Response& res)
{
std::cout << "Contact form submitted\n";
std::cout << "Name: " << req.get_param_value("name") << "\n";
std::cout << "Email: " << req.get_param_value("email") << "\n";
std::cout << "Message: " << req.get_param_value("message") << "\n";
res.set_content("<p>Message sent. Thanks!</p>", "text/html");
}
void error_handler(const httplib::Request& req, httplib::Response& res)
{
std::string data = std::vformat(data_index, std::make_format_args(data_404));
res.set_content(data, "text/html");
}
int main()
{
svr.set_mount_point("/static", "../static/public/");
svr.Get("/", [](const httplib::Request& req, httplib::Response& res)
{
res.set_content(data_index, "text/html");
});
svr.Get("/", page_handler(data_projects));
svr.Get("/projects", page_handler(data_projects));
svr.Get("/contact", page_handler(data_contact));
svr.Get("/about", page_handler(data_about));
svr.Get("/resume", page_handler(data_resume));
svr.Post("/contact", post_contact);
svr.set_error_handler(error_handler);
std::cout << "Listening on port 8080\n";
svr.listen("0.0.0.0", 8080);

View File

@ -1,48 +1,24 @@
<!DOCTYPE html>
<html>
<head>
<title>Jays Portfolio</title>
<link rel="stylesheet" href="/static/style.css" />
<script src="/static/htmx.min.js"></script>
<script src="/static/js/htmx.min.js"></script>
</head>
<body>
<h1>Welcome to my portfolio website :)</h1>
<p>
Here you can see the (more notable) projects I have created and/or worked on.
</p>
<h2>Fast Nuclear Sim</h2>
<p>
The project was named this way after I built a command-line based nuclear reaction simulator
in C++ which simulated random events leading to decay chains and the radioactive isotopes themselves
(as whole integer amounts) in each simulated sample. Whilst I ended up with semi-realistic results,
with each sample containing radioactive isotopes known to be fission products, my simulation was
also far too slow and inprecise for it to actually be used in a nuclear power plant simulation.
</p>
<p>
Fast Nuclear Sim was created to be a faster, floating point based nuclear reaction simulator.
It doesn't try to approximate the isotopes themselves, but it instead approximates some of the
more key ones, such as both the uranium-235 and uranium-238 components of the fuel,
the waste products of nuclear fission, and the reduction in reactor power from xenon-135.
</p>
<img
src="/static/image/Fast-Nuclear-Sim.png"
alt="An in-game screenshot of Fast Nuclear Sim, showing the reactor core, displays for pumps, valves, the turbine, a synchroscope, as well as the plants controls."
/>
<p>
This project was created in C++ and is rendered using GLFW and OpenGL. The project is incomplete,
but still being worked on. The project is, and consists fully of, open source software.
</p>
<h3>Links</h3>
<ul>
<li><a href="https://github.com/jsrobson10/fast-nuclear-sim" target="_blank">Fast Nuclear Sim (GitHub)</a></li>
<li><a href="https://github.com/jsrobson10/nuclear-sim" target="_blank">Nuclear Sim (GitHub)</a></li>
<div id="root-head">
<ul class="navbar">
<li class="visually-hidden"><a href="#main-content">Skip to main content</a></li>
<li><button hx-get="/static/html/projects.html" hx-target="#main-content" hx-push-url="/">Projects</button></li>
<li><button hx-get="/static/html/contact.html" hx-target="#main-content" hx-push-url="/contact">Contact</button></li>
<li><button hx-get="/static/html/about.html" hx-target="#main-content" hx-push-url="/about">About</button></li>
<li><button hx-get="/static/html/resume.html" hx-target="#main-content" hx-push-url="/resume">Resume</button></li>
</ul>
<div id="root-body">
<div id="main-content">
{}
</div>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,5 @@
<title>Jays Portfolio - About</title>
<h1>About</h1>

View File

@ -0,0 +1,26 @@
<title>Jays Portfolio - Contact</title>
<h1>Contact</h1>
<div id="contact-response">
<p>
You can contact me via this form or by emailing me at <a href="mailto:jsrobson10@gmail.com">jsrobson10@gmail.com</a>.
<form hx-post="/contact", hx-target="#contact-response">
<label for="contact-name">Name</label>
<input type="text" name="name" id="contact-name" required />
<label for="contact-email">Email</label>
<input type="email" name="email" id="contact-email" required />
<label for="contact-message">Message</label>
<textarea name="message" id="contact-message" required></textarea>
<button hx-disabled-elt="this">Send</button>
</form>
</p>
</div>
<h1>Other Links</h1>
<ul>
<li><a href="https://www.github.com/jsrobson10" target="_blank">GitHub</a></li>
<li><a href="https://www.linkedin.com/in/jay-robson-6a53312b3/" target="_blank">LinkedIn</a></li>
<li><a href="https://git.onewaycoding.com/jay" target="_blank">Gitea</a></li>
</ul>

View File

@ -0,0 +1,9 @@
<title>Jays Portfolio - 404</title>
<h1>404</h1>
<p>
Looks like you've stumbled upon a page that doesn't exist. Sorry about that.
</p>

View File

@ -0,0 +1,15 @@
<title>Jays Portfolio</title>
<h1>Welcome to my portfolio website :)</h1>
<p>
Here you can see the (more notable) projects I have created and/or worked on.
</p>
<ul>
<li><button hx-get="/static/html/projects/fast_nuclear_sim.html" class="button-link" hx-target="#projects">Fast Nuclear Sim</button></li>
<li><button hx-get="/static/html/projects/goulds_webstore.html" class="button-link" hx-target="#projects">Goulds Webstore</button></li>
<li><button hx-get="/static/html/projects/project_zombie.html" class="button-link" hx-target="#projects">Project Zombie</button></li>
<li><button hx-get="/static/html/projects/this_portfolio_website.html" class="button-link" hx-target="#projects">This Portfolio Website</button></li>
</ul>
<div id="projects"></div>

View File

@ -0,0 +1,2 @@
<h2>Ant Simulator</h2>

View File

@ -0,0 +1,15 @@
<h2>Binary Data Format</h2>
<p>
This project was created to be something similar in structure to JSON,
but also more compact. I wrote a version of this in C++ and another in Java.
The format was designed to be able to be both parsed and written to a binary blob,
while also being able to be read and written to a human-readable text format similar to JSON.
The difference between this and JSON is this one is statically typed, and natively
supports comments in the human readable version.
</p>
<h2>Links</h2>
<ul>
<li><a href="https://github.com/jsrobson10/binary-data-format" target="_blank">Binary Data Format (Java) (GitHub)</a></li>
<li><a href="https://github.com/jsrobson10/BdfCpp" target="_blank">Binary Data Format (C++) (GitHub)</a></li>
</ul>

View File

@ -0,0 +1,37 @@
<h2>Fast Nuclear Sim</h2>
<p>
The project was named this way after I built a command-line based nuclear reaction simulator
in C++ which simulated random events leading to decay chains and the radioactive isotopes themselves
(as whole integer amounts) in each simulated sample. Whilst I ended up with semi-realistic results,
with each sample containing radioactive isotopes known to be fission products, my simulation was
also far too slow and imprecise for it to actually be used in a nuclear power plant simulation.
</p>
<p>
Fast Nuclear Sim was created to be a faster, floating point based nuclear reaction simulator.
It doesn't try to approximate the isotopes themselves, but it instead approximates some of the
more key ones, such as both the uranium-235 and uranium-238 components of the fuel,
the waste products of nuclear fission, and the reduction in reactor power from xenon-135.
</p>
<p>
This project was created in C++ and is rendered using GLFW and OpenGL. The project is incomplete,
but still being worked on. The project is, and consists fully of, open source software.
</p>
<img src="/static/image/fast_nuclear_sim_control_room.png" alt="Fast Nuclear Sim control room" />
<p>
This is the control room of the nuclear power plant.
</p>
<img src="/static/image/fast_nuclear_sim_dials.png" alt="Fast Nuclear Sim dials" />
<p>
These are the dials for the electrical grid connection part of the nuclear power plant.
This shows the power output of the generator onto the grid, the synchroscope, and the
generator and grid frequency.
</p>
<img src="/static/image/fast_nuclear_sim_containment_building.png" alt="Fast Nuclear Sim containment building" />
<p>
This is the containment building of the nuclear power plant.
This room is currently very incomplete, as I was much more focused on core mechanics in the control room.
<h2>Links</h2>
<ul>
<li><a href="https://github.com/jsrobson10/fast-nuclear-sim" target="_blank">Fast Nuclear Sim (GitHub)</a></li>
<li><a href="https://github.com/jsrobson10/nuclear-sim" target="_blank">Nuclear Sim (GitHub)</a></li>
</ul>

View File

@ -0,0 +1,27 @@
<h2>Goulds Webstore</h2>
<p>
This is a project I created for a client.
The project is written using TypeScript, React, and MariaDB.
</p>
<img src="/static/image/goulds_webstore_mfa.png" alt="Goulds Webstore authenticator login step" />
<p>
This step uses an authenticator app to log in.
</p>
<img src="/static/image/goulds_webstore_profile.png" alt="Goulds Webstore profile page" />
<p>
This is the profile page.
Cards are stored using stripe for security so that the website does not have to store any credit card information.
Additionally, privacy options are avaliable, as well as options to change name, email, phone, password, and MFA.
All orders can also be seen by the user.
</p>
<img src="/static/image/goulds_webstore_user_admin.png" alt="Goulds Webstore page to edit user accounts" />
<p>
This is the page to edit user accounts.
Products have the option to be visible, hidden, or private. This makes it possible for customers
to be given access to certain products by staff, and to be given their own custom products.
</p>
<h2>Links</h2>
<ul>
<li><a href="https://store.gouldsnaturalmedicine.com.au/" target="_blank">Goulds Webstore Website</a></li>
</ul>

View File

@ -0,0 +1,38 @@
<h2>Project Zombie</h2>
<p>
This was a game I wrote in Java using the LWJGL library. It is a 3D game, and it was the first time I
had wrote one that used the GPU for rendering. At first it used the fixed function pipeline, but I
later rewrote the rendering code to use shaders which made it look much better while also running faster.
The game is a top-down survival game, where the player must craft items and keep warm.
Originally the game was about just fighting zombies, but I decided to focus more on survival.
The game is not finished.
</p>
<img src="/static/image/project_zombie_title_screen.png" alt="Project Zombie title screen." />
<p>
The title screen gradually rotates and moves along to show off the world.
</p>
<img src="/static/image/project_zombie_daytime.png" alt="Project Zombie gameplay during the day. Trees, plants, and rocks are visible." />
<p>
Gameplay during the day phase.
</p>
<img src="/static/image/project_zombie_nighttime.png" alt="Project Zombie gameplay during the night. Everything is pitched black, except near the campfire." />
<p>
Gameplay during the night phase. This phase is especially cold.
A campfire and a light source is essential here.
</p>
<img src="/static/image/project_zombie_crafting.png" alt="Project Zombie crafting menu. There is a large selection of items to choose from." />
<p>
As you can see here, I did not end up adding all of the textures and instead focused on functionality.
This is why some of the textures are purple and black to indicate that they are missing.
</p>
<img src="/static/image/project_zombie_underground.png" alt="Project Zombie underground gameplay." />
<p>
The underground consists of several biomes. The one shown here are the ice caves.
These are extremely cold, and full of zombies.
</p>
<h2>Links</h2>
<ul>
<li><a href="https://www.youtube.com/watch?v=iYD0GUbWbPo" target="_blank">Project Zombie (Unoptimized Version) (YouTube)</a></li>
</ul>

View File

@ -0,0 +1,11 @@
<h2>Portfolio Website</h2>
<p>
This is the website you are currently seeing. It was created using C++, HTML with HTMX, CSS, and JavaScript.
The website is designed to be a single page application, and is designed to be easy to add new projects to.
</p>
<h2>Links</h2>
<ul>
<li><a href="https://git.onewaycoding.com/jay/Portfolio" target="_blank">Portfolio (Gitea)</a></li>
</ul>

View File

@ -0,0 +1,5 @@
<title>Jays Portfolio - Resume</title>
<h1>Resume</h1>

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 720 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 936 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 679 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 521 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 413 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 195 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 994 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 237 KiB

View File

@ -1,4 +1,105 @@
img {
width: 40%;
width: calc(min(100%, 800px));
border-radius: 0.25em;
border-style: none;
}
button {
font: inherit;
cursor: pointer;
text-decoration: none;
color: black;
}
.visually-hidden {
overflow: hidden;
width: 0;
height: 0;
display: block;
left: 50%;
position: absolute;
transform: translateY(-100%);
}
.button-link {
background: none;
border: none;
padding: 0;
font: inherit;
cursor: pointer;
text-decoration: underline;
color: blue;
}
ul.navbar {
list-style-type: none;
background-color: #c0c0c4;
margin: 0;
padding: 0;
display: flex;
}
ul.navbar li {
display: inline;
margin: 0;
padding: 0;
}
ul.navbar button {
background-color: #c0c0c4;
border: none;
padding: 1em 1.5em;
font: inherit;
cursor: pointer;
text-decoration: none;
display: block;
color: black;
}
ul.navbar button:hover {
background-color: #a0a0a4;
}
input[type="text"], input[type="email"], textarea {
display: block;
width: calc(min(100% - 1em, 800px));
}
input[type="text"], input[type="email"], input[type="button"], textarea, button {
border-radius: 0.25em;
border-width: thin;
border-style: solid;
border-color: gray;
padding: 0.25em 0.5em;
}
textarea {
height: 10em;
}
label {
margin-top: 0.5em;
display: block;
}
html, body {
background-color: #404044;
height: 100%;
margin: 0;
padding: 0;
}
#root-head {
margin: 0 auto;
padding: 0;
background-color: #e0e0e0;
display: block;
max-width: calc(max(80%, 800px));
min-height: 100%;
}
#root-body {
padding: 1em;
}

View File

@ -1,2 +0,0 @@
<p>Wowzers!</p>
<p>This thing is powerful! =)</p>