added stuff
17
Dockerfile
Normal file
@ -0,0 +1,17 @@
|
||||
# Use an official Python runtime as a parent image
|
||||
FROM python:3.9-slim
|
||||
|
||||
# Set the working directory
|
||||
WORKDIR /app
|
||||
|
||||
# Copy the application files
|
||||
COPY app/ /app
|
||||
|
||||
# Install dependencies
|
||||
RUN pip install -r requirements.txt
|
||||
|
||||
# Expose the port the app runs on
|
||||
EXPOSE 5000
|
||||
|
||||
# Run the application
|
||||
CMD ["python", "app.py"]
|
42
app/app.py
Normal file
@ -0,0 +1,42 @@
|
||||
from flask import Flask, render_template, send_from_directory
|
||||
|
||||
|
||||
app = Flask(__name__, static_url_path='', static_folder='static')
|
||||
|
||||
# Define individual routes for each file
|
||||
@app.route('/static/Compialer.png')
|
||||
def serve_compialer():
|
||||
return send_from_directory('static/images', 'Compialer.png')
|
||||
|
||||
@app.route('/static/cpu-emulator.png')
|
||||
def serve_cpu_emulator():
|
||||
return send_from_directory('static/images', 'cpu-emulator.png')
|
||||
|
||||
@app.route('/static/dll-extractor.png')
|
||||
def serve_dll_extractor():
|
||||
return send_from_directory('static/images', 'dll-extractor.png')
|
||||
|
||||
@app.route('/static/game-engine.png')
|
||||
def serve_game_engine():
|
||||
return send_from_directory('static/images', 'game-engine.png')
|
||||
|
||||
@app.route('/static/gcml.png')
|
||||
def serve_gcml():
|
||||
return send_from_directory('static/images', 'gcml.png')
|
||||
|
||||
@app.route('/static/net-scanner.png')
|
||||
def serve_net_scanner():
|
||||
return send_from_directory('static/images', 'net-scanner.png')
|
||||
|
||||
@app.route('/static/wictra-website.png')
|
||||
def serve_wictra_website():
|
||||
return send_from_directory('static/images', 'wictra-website.png')
|
||||
|
||||
|
||||
@app.route('/')
|
||||
def serve_index():
|
||||
return render_template('index.html')
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
app.run(host='0.0.0.0', port=80)
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 646 KiB After Width: | Height: | Size: 646 KiB |
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 74 KiB |
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 54 KiB |
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 62 KiB |
@ -1,325 +1,455 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Spencer Conlon | Portfolio</title>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap" rel="stylesheet">
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/js/bootstrap.bundle.min.js"></script>
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Roboto', sans-serif;
|
||||
background-color: #f8f9fa;
|
||||
color: #212529;
|
||||
}
|
||||
|
||||
header {
|
||||
background-color: #343a40;
|
||||
color: #fff;
|
||||
text-align: center;
|
||||
padding: 60px 20px;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
header h1 {
|
||||
font-size: 3rem;
|
||||
font-weight: bold;
|
||||
margin: 0;
|
||||
position: relative;
|
||||
z-index: 10;
|
||||
}
|
||||
|
||||
header p {
|
||||
font-size: 1.2rem;
|
||||
margin-top: 10px;
|
||||
position: relative;
|
||||
z-index: 10;
|
||||
}
|
||||
|
||||
header .abstract-pattern {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: linear-gradient(135deg, rgba(0, 123, 255, 0.5), rgba(40, 167, 69, 0.5));
|
||||
clip-path: polygon(0 0, 100% 0, 75% 100%, 25% 100%);
|
||||
z-index: 1;
|
||||
opacity: 0.8;
|
||||
}
|
||||
|
||||
header::after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: -50px;
|
||||
left: -50px;
|
||||
width: 300px;
|
||||
height: 300px;
|
||||
background: rgba(255, 255, 255, 0.1);
|
||||
border-radius: 50%;
|
||||
z-index: 2;
|
||||
animation: float 6s ease-in-out infinite;
|
||||
}
|
||||
|
||||
header::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
bottom: -50px;
|
||||
right: -50px;
|
||||
width: 400px;
|
||||
height: 400px;
|
||||
background: rgba(255, 255, 255, 0.1);
|
||||
border-radius: 50%;
|
||||
z-index: 2;
|
||||
animation: float 8s ease-in-out infinite;
|
||||
}
|
||||
|
||||
@keyframes float {
|
||||
0%, 100% {
|
||||
transform: translateY(0);
|
||||
}
|
||||
50% {
|
||||
transform: translateY(15px);
|
||||
}
|
||||
}
|
||||
|
||||
nav {
|
||||
background-color: #495057;
|
||||
box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
nav a {
|
||||
color: #fff;
|
||||
font-weight: bold;
|
||||
text-decoration: none;
|
||||
margin: 0 15px;
|
||||
padding: 10px 15px;
|
||||
transition: background-color 0.3s;
|
||||
}
|
||||
|
||||
nav a:hover {
|
||||
background-color: #343a40;
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
.section-title {
|
||||
font-size: 2.5rem;
|
||||
font-weight: bold;
|
||||
margin-bottom: 40px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.section-title::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
bottom: -10px;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
width: 80px;
|
||||
height: 4px;
|
||||
background-color: #007bff;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<div class="abstract-pattern"></div>
|
||||
<h1>Spencer Conlon</h1>
|
||||
<p>Innovative Software Developer & Systems Administrator</p>
|
||||
</header>
|
||||
|
||||
|
||||
|
||||
|
||||
<section id="projects" class="container my-5">
|
||||
<h2 class="section-title text-center">Projects</h2>
|
||||
<div class="row">
|
||||
<div class="col-md-6 mb-4">
|
||||
<div class="project">
|
||||
<div class="project-image" style="background-image: url('images/game-engine.png');"></div>
|
||||
<h3>Custom 3D Game Engine</h3>
|
||||
<p><strong>Technologies:</strong> C++, Lua</p>
|
||||
<p>Developed a high-performance 3D game engine with a Lua scripting API for customizable and efficient game development.</p>
|
||||
<p><a href="https://dock-it.dev/Bit-By-Byte/Tesseract-Engine" target="_blank" class="btn btn-primary">View Source Code</a></p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 mb-4">
|
||||
<div class="project">
|
||||
<div class="project-image" style="background-image: url('images/cpu-emulator.png');"></div>
|
||||
|
||||
<h3>C Compiler and ASM Assembler</h3>
|
||||
<p><strong>Technologies:</strong> C, ASM</p>
|
||||
<p>Created a custom compiler and assembler for low-level software development and optimization.</p>
|
||||
<p><a href="https://dock-it.dev/GigabiteStudios/Python-Cpu-Emulator" target="_blank" class="btn btn-primary">View Source Code</a></p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 mb-4">
|
||||
<div class="project">
|
||||
<div class="project-image" style="background-image: url('images/net-scanner.png');"></div>
|
||||
<h3>Network Crawler</h3>
|
||||
<p><strong>Technologies:</strong> Python</p>
|
||||
<p>Built a tool to scan local networks, identify devices, gather details, and log in to analyze running software.</p>
|
||||
<p><a href="https://dock-it.dev/GigabiteStudios/network-crawler" target="_blank" class="btn btn-primary">View Source Code</a></p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 mb-4">
|
||||
<div class="project">
|
||||
<div class="project-image" style="background-image: url('images/wictra-website.png');"></div>
|
||||
<h3>WICTRA Website</h3>
|
||||
<p><strong>Technologies:</strong> HTML, CSS, JavaScript, PHP</p>
|
||||
<p>
|
||||
Developed a secure website featuring advanced bot protection, a user management system, forms, ticketing system,
|
||||
jobs board, and content library.
|
||||
</p>
|
||||
<p><a href="https://dock-it.dev/Wictra" target="_blank" class="btn btn-primary">View Source Code</a></p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 mb-4">
|
||||
<div class="project">
|
||||
<div class="project-image" style="background-image: url('images/dll-extractor.png');"></div>
|
||||
<h3>Dynamic DLL Tool</h3>
|
||||
<p><strong>Technologies:</strong> C++</p>
|
||||
<p>Created a utility to identify and package required DLLs for an executable, simplifying application distribution.</p>
|
||||
<p><a href="/Bit-By-Byte/DLL-Extractor" target="_blank" class="btn btn-primary">View Source Code</a></p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 mb-4">
|
||||
<div class="project">
|
||||
<div class="project-image" style="background-image: url('images/gcml.png');"></div>
|
||||
<h3>GCML: C/C++ Utility Macros</h3>
|
||||
<p><strong>Technologies:</strong> C, C++</p>
|
||||
<p>A comprehensive library of macros for debugging, logging, memory management, and bit manipulation, enhancing workflow efficiency.</p>
|
||||
<p><a href="https://dock-it.dev/GigabiteStudios/gcml" target="_blank" class="btn btn-primary">View Source Code</a></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="contact" class="container text-center my-5">
|
||||
<h2 class="section-title">Contact</h2>
|
||||
<p><strong>Email:</strong> <a href="mailto:spencer.conlon3@gmail.com">spencer.conlon3@gmail.com</a></p>
|
||||
<p><strong>Phone:</strong> +1 (920) 891-6655</p>
|
||||
<p><strong>Location:</strong> Ripon, WI</p>
|
||||
<div class="contact-info">
|
||||
<a href="https://dock-it.dev/GigabiteStudios" class="btn btn-outline-dark mx-2">Git</a>
|
||||
<a href="https://www.linkedin.com/in/spencer-conlon-059293344/" class="btn btn-outline-dark mx-2">LinkedIn</a>
|
||||
<a href="#" class="btn btn-outline-dark mx-2">Resume</a>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Poppins', sans-serif;
|
||||
background: linear-gradient(to bottom, #f8f9fa, #e9ecef);
|
||||
color: #343a40;
|
||||
}
|
||||
|
||||
.section-title {
|
||||
font-size: 3rem;
|
||||
font-weight: 800;
|
||||
margin-bottom: 3rem;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 2px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.section-title::after {
|
||||
content: '';
|
||||
width: 60px;
|
||||
height: 4px;
|
||||
background-color: #007bff;
|
||||
display: block;
|
||||
margin: 10px auto 0;
|
||||
}
|
||||
|
||||
.project {
|
||||
background: rgba(255, 255, 255, 0.85);
|
||||
border-radius: 16px;
|
||||
padding: 20px;
|
||||
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.2);
|
||||
transition: transform 0.5s, box-shadow 0.5s;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.project:hover {
|
||||
transform: translateY(-15px);
|
||||
box-shadow: 0 15px 40px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
.project-image {
|
||||
background-size: cover;
|
||||
background-position: center;
|
||||
height: 250px;
|
||||
border-radius: 12px;
|
||||
margin-bottom: 20px;
|
||||
transition: transform 0.3s;
|
||||
}
|
||||
|
||||
.project:hover .project-image {
|
||||
transform: scale(1.1);
|
||||
}
|
||||
|
||||
.project-placeholder {
|
||||
height: 250px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
border: 2px dashed #ccc;
|
||||
border-radius: 12px;
|
||||
margin-bottom: 20px;
|
||||
font-style: italic;
|
||||
color: #999;
|
||||
background-color: #f8f9fa;
|
||||
}
|
||||
|
||||
.btn {
|
||||
padding: 12px 25px;
|
||||
border-radius: 30px;
|
||||
font-weight: 600;
|
||||
text-transform: uppercase;
|
||||
transition: background-color 0.4s, transform 0.3s;
|
||||
}
|
||||
|
||||
.btn-primary {
|
||||
background-color: #007bff;
|
||||
color: #fff;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.btn-primary:hover {
|
||||
background-color: #0056b3;
|
||||
transform: translateY(-3px);
|
||||
}
|
||||
|
||||
.btn-outline-dark {
|
||||
color: #343a40;
|
||||
border: 2px solid #343a40;
|
||||
}
|
||||
|
||||
.btn-outline-dark:hover {
|
||||
background-color: #343a40;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.contact-info a {
|
||||
display: inline-block;
|
||||
margin: 0 10px;
|
||||
font-size: 1.2rem;
|
||||
transition: transform 0.3s;
|
||||
}
|
||||
|
||||
.contact-info a:hover {
|
||||
transform: scale(1.1);
|
||||
}
|
||||
</style>
|
||||
|
||||
<nav class="text-center py-3">
|
||||
<a href="#about">About Me</a>
|
||||
<a href="#projects">Projects</a>
|
||||
<a href="#contact">Contact</a>
|
||||
</nav>
|
||||
</body>
|
||||
</html>
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Spencer Conlon | Portfolio</title>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap" rel="stylesheet">
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/js/bootstrap.bundle.min.js"></script>
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Roboto', sans-serif;
|
||||
background-color: #f8f9fa;
|
||||
color: #212529;
|
||||
}
|
||||
|
||||
header {
|
||||
background-color: #343a40;
|
||||
color: #fff;
|
||||
text-align: center;
|
||||
padding: 60px 20px;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
header h1 {
|
||||
font-size: 3rem;
|
||||
font-weight: bold;
|
||||
margin: 0;
|
||||
position: relative;
|
||||
z-index: 10;
|
||||
}
|
||||
|
||||
header p {
|
||||
font-size: 1.2rem;
|
||||
margin-top: 10px;
|
||||
position: relative;
|
||||
z-index: 10;
|
||||
}
|
||||
|
||||
header .abstract-pattern {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: linear-gradient(135deg, rgba(0, 123, 255, 0.5), rgba(40, 167, 69, 0.5));
|
||||
clip-path: polygon(0 0, 100% 0, 75% 100%, 25% 100%);
|
||||
z-index: 1;
|
||||
opacity: 0.8;
|
||||
}
|
||||
|
||||
header::after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: -50px;
|
||||
left: -50px;
|
||||
width: 300px;
|
||||
height: 300px;
|
||||
background: rgba(255, 255, 255, 0.1);
|
||||
border-radius: 50%;
|
||||
z-index: 2;
|
||||
animation: float 6s ease-in-out infinite;
|
||||
}
|
||||
|
||||
header::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
bottom: -50px;
|
||||
right: -50px;
|
||||
width: 400px;
|
||||
height: 400px;
|
||||
background: rgba(255, 255, 255, 0.1);
|
||||
border-radius: 50%;
|
||||
z-index: 2;
|
||||
animation: float 8s ease-in-out infinite;
|
||||
}
|
||||
|
||||
@keyframes float {
|
||||
0%, 100% {
|
||||
transform: translateY(0);
|
||||
}
|
||||
50% {
|
||||
transform: translateY(15px);
|
||||
}
|
||||
}
|
||||
|
||||
nav {
|
||||
background-color: #495057;
|
||||
box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
nav a {
|
||||
color: #fff;
|
||||
font-weight: bold;
|
||||
text-decoration: none;
|
||||
margin: 0 15px;
|
||||
padding: 10px 15px;
|
||||
transition: background-color 0.3s;
|
||||
}
|
||||
|
||||
nav a:hover {
|
||||
background-color: #343a40;
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
.section-title {
|
||||
font-size: 2.5rem;
|
||||
font-weight: bold;
|
||||
margin-bottom: 40px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.section-title::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
bottom: -10px;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
width: 80px;
|
||||
height: 4px;
|
||||
background-color: #007bff;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<div class="abstract-pattern"></div>
|
||||
<h1>Spencer Conlon</h1>
|
||||
<p>Innovative Software Developer & Systems Administrator</p>
|
||||
</header>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<section id="projects" class="container my-5">
|
||||
<h2 class="section-title text-center">Projects</h2>
|
||||
<div class="row">
|
||||
<div class="col-md-6 mb-4">
|
||||
<div class="project">
|
||||
<div class="project-image" style="background-image: url('images/game-engine.png');"></div>
|
||||
<h3>Custom 3D Game Engine</h3>
|
||||
<p><strong>Technologies:</strong> C++, Lua</p>
|
||||
<p>Developed a high-performance 3D game engine with a Lua scripting API for customizable and efficient game development.</p>
|
||||
<p><a href="https://dock-it.dev/Bit-By-Byte/Tesseract-Engine" target="_blank" class="btn btn-primary">View Source Code</a></p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 mb-4">
|
||||
<div class="project">
|
||||
<div class="project-image" style="background-image: url('images/cpu-emulator.png');"></div>
|
||||
|
||||
<h3>C Compiler and ASM Assembler</h3>
|
||||
<p><strong>Technologies:</strong> C, ASM</p>
|
||||
<p>Created a custom compiler and assembler for low-level software development and optimization.</p>
|
||||
<p><a href="https://dock-it.dev/GigabiteStudios/Python-Cpu-Emulator" target="_blank" class="btn btn-primary">View Source Code</a></p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 mb-4">
|
||||
<div class="project">
|
||||
<div class="project-image" style="background-image: url('images/net-scanner.png');"></div>
|
||||
<h3>Network Crawler</h3>
|
||||
<p><strong>Technologies:</strong> Python</p>
|
||||
<p>Built a tool to scan local networks, identify devices, gather details, and log in to analyze running software.</p>
|
||||
<p><a href="https://dock-it.dev/GigabiteStudios/network-crawler" target="_blank" class="btn btn-primary">View Source Code</a></p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 mb-4">
|
||||
<div class="project">
|
||||
<div class="project-image" style="background-image: url('images/wictra-website.png');"></div>
|
||||
<h3>WICTRA Website</h3>
|
||||
<p><strong>Technologies:</strong> HTML, CSS, JavaScript, PHP</p>
|
||||
<p>
|
||||
Developed a secure website featuring advanced bot protection, a user management system, forms, ticketing system,
|
||||
jobs board, and content library.
|
||||
</p>
|
||||
<p><a href="https://dock-it.dev/Wictra" target="_blank" class="btn btn-primary">View Source Code</a></p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 mb-4">
|
||||
<div class="project">
|
||||
<div class="project-image" style="background-image: url('images/dll-extractor.png');"></div>
|
||||
<h3>Dynamic DLL Tool</h3>
|
||||
<p><strong>Technologies:</strong> C++</p>
|
||||
<p>Created a utility to identify and package required DLLs for an executable, simplifying application distribution.</p>
|
||||
<p><a href="/Bit-By-Byte/DLL-Extractor" target="_blank" class="btn btn-primary">View Source Code</a></p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6 mb-4">
|
||||
<div class="project">
|
||||
<div class="project-image" style="background-image: url('images/gcml.png');"></div>
|
||||
<h3>GCML: C/C++ Utility Macros</h3>
|
||||
<p><strong>Technologies:</strong> C, C++</p>
|
||||
<p>A comprehensive library of macros for debugging, logging, memory management, and bit manipulation, enhancing workflow efficiency.</p>
|
||||
<p><a href="https://dock-it.dev/GigabiteStudios/gcml" target="_blank" class="btn btn-primary">View Source Code</a></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="resume" class="container my-5">
|
||||
<h2 class="section-title text-center">Resume</h2>
|
||||
<div class="resume-content">
|
||||
<div class="text-center mb-4">
|
||||
<h3>Spencer Conlon</h3>
|
||||
<p>Ripon, WI 54971 | <a href="tel:+19208916655">+1 (920) 891-6655</a> | <a href="mailto:spencer.conlon3@gmail.com">spencer.conlon3@gmail.com</a></p>
|
||||
</div>
|
||||
|
||||
<h4 class="resume-section-title">
|
||||
<i class="fas fa-user"></i> Summary
|
||||
</h4>
|
||||
<p class="resume-summary">Innovative software developer and systems administrator with expertise in creating advanced tools, systems, and high-performance applications. Notable projects include a custom 3D game engine with a Lua scripting API, a C compiler, an ASM assembler, and a CPU emulator. Adept at building secure, scalable web solutions, designing efficient development tools, and solving complex technical challenges. Committed to delivering fast, optimized solutions and streamlining workflows.</p>
|
||||
|
||||
<h4 class="resume-section-title">
|
||||
<i class="fas fa-briefcase"></i> Work Experience
|
||||
</h4>
|
||||
<div class="resume-work">
|
||||
<div class="resume-job">
|
||||
<strong>Developer/System Administrator</strong> | Wisconsin Cyber Threat Response Alliance (WICTRA)
|
||||
<span class="resume-dates">2023 – Present</span>
|
||||
<ul class="resume-list">
|
||||
<li>Designed and developed a secure website with advanced bot protection, including CAPTCHA, 2FA, and JavaScript challenges.</li>
|
||||
<li>Built a comprehensive forms system, user management system, ticketing system, jobs board, and content library.</li>
|
||||
<li>Developed a network crawling tool to identify devices and gather detailed information for analysis.</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="resume-job">
|
||||
<strong>Mechanic</strong> | PC Power Center – Ripon, WI
|
||||
<span class="resume-dates">2020 – Present</span>
|
||||
<ul class="resume-list">
|
||||
<li>Assisted with mechanical repairs and maintenance tasks, enhancing problem-solving skills.</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h4 class="resume-section-title">
|
||||
<i class="fas fa-graduation-cap"></i> Education
|
||||
</h4>
|
||||
<p>Junior High School Education | Ripon High School – Ripon, WI<br><span class="resume-dates">September 2022 – Present</span></p>
|
||||
|
||||
<h4 class="resume-section-title">
|
||||
<i class="fas fa-project-diagram"></i> Key Projects
|
||||
</h4>
|
||||
<ul class="resume-list">
|
||||
<li><strong>Custom 3D Game Engine:</strong> Developed in C++ with a Lua scripting API for high-performance rendering.</li>
|
||||
<li><strong>C Compiler and ASM Assembler:</strong> Created a custom compiler and assembler for low-level software development.</li>
|
||||
<li><strong>CPU Emulator:</strong> Built a CPU emulator for educational purposes and testing hardware behavior.</li>
|
||||
<li><strong>Dynamic DLL Tool:</strong> Utility to identify and package required DLLs for distribution.</li>
|
||||
<li><strong>Network Crawler:</strong> Tool for scanning local networks and analyzing running software.</li>
|
||||
</ul>
|
||||
|
||||
<h4 class="resume-section-title">
|
||||
<i class="fas fa-tools"></i> Skills
|
||||
</h4>
|
||||
<ul class="resume-list">
|
||||
<li>Software Development (4 years): C/C++, Python, C#, ASM, Lua</li>
|
||||
<li>Web Development: HTML, CSS, JavaScript</li>
|
||||
<li>Cybersecurity Tools and Protocols, Git, MySQL</li>
|
||||
<li>Embedded Software (2 years), Leadership, Multi-OS Deployment Expertise</li>
|
||||
</ul>
|
||||
|
||||
<h4 class="resume-section-title">
|
||||
<i class="fas fa-trophy"></i> Awards
|
||||
</h4>
|
||||
<p>BSA Arrow of Light | <span class="resume-dates">2019</span></p>
|
||||
|
||||
<h4 class="resume-section-title">
|
||||
<i class="fas fa-certificate"></i> Certifications and Licenses
|
||||
</h4>
|
||||
<p>Driver’s License</p>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
@import url('https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css');
|
||||
|
||||
.resume-content {
|
||||
background: #f8f9fa;
|
||||
padding: 30px;
|
||||
border-radius: 16px;
|
||||
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
|
||||
font-size: 1rem;
|
||||
line-height: 1.8;
|
||||
color: #343a40;
|
||||
}
|
||||
|
||||
.resume-section-title {
|
||||
margin-top: 30px;
|
||||
font-size: 1.5rem;
|
||||
color: #007bff;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.resume-section-title i {
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.resume-summary {
|
||||
margin-bottom: 20px;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.resume-work {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.resume-job {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.resume-dates {
|
||||
display: block;
|
||||
font-size: 0.9rem;
|
||||
color: #6c757d;
|
||||
}
|
||||
|
||||
.resume-list {
|
||||
margin-top: 10px;
|
||||
padding-left: 20px;
|
||||
list-style-type: disc;
|
||||
}
|
||||
</style>
|
||||
</section>
|
||||
|
||||
|
||||
|
||||
|
||||
<section id="contact" class="container text-center my-5">
|
||||
<h2 class="section-title">Contact</h2>
|
||||
<p><strong>Email:</strong> <a href="mailto:spencer.conlon3@gmail.com">spencer.conlon3@gmail.com</a></p>
|
||||
<p><strong>Phone:</strong> +1 (920) 891-6655</p>
|
||||
<p><strong>Location:</strong> Ripon, WI</p>
|
||||
<div class="contact-info">
|
||||
<a href="https://dock-it.dev/GigabiteStudios" class="btn btn-outline-dark mx-2">Git</a>
|
||||
<a href="https://www.linkedin.com/in/spencer-conlon-059293344/" class="btn btn-outline-dark mx-2">LinkedIn</a>
|
||||
<a href="#" class="btn btn-outline-dark mx-2">Resume</a>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Poppins', sans-serif;
|
||||
background: linear-gradient(to bottom, #f8f9fa, #e9ecef);
|
||||
color: #343a40;
|
||||
}
|
||||
|
||||
.section-title {
|
||||
font-size: 3rem;
|
||||
font-weight: 800;
|
||||
margin-bottom: 3rem;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 2px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.section-title::after {
|
||||
content: '';
|
||||
width: 60px;
|
||||
height: 4px;
|
||||
background-color: #007bff;
|
||||
display: block;
|
||||
margin: 10px auto 0;
|
||||
}
|
||||
|
||||
.project {
|
||||
background: rgba(255, 255, 255, 0.85);
|
||||
border-radius: 16px;
|
||||
padding: 20px;
|
||||
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.2);
|
||||
transition: transform 0.5s, box-shadow 0.5s;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.project:hover {
|
||||
transform: translateY(-15px);
|
||||
box-shadow: 0 15px 40px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
.project-image {
|
||||
background-size: cover;
|
||||
background-position: center;
|
||||
height: 250px;
|
||||
border-radius: 12px;
|
||||
margin-bottom: 20px;
|
||||
transition: transform 0.3s;
|
||||
}
|
||||
|
||||
.project:hover .project-image {
|
||||
transform: scale(1.1);
|
||||
}
|
||||
|
||||
.project-placeholder {
|
||||
height: 250px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
border: 2px dashed #ccc;
|
||||
border-radius: 12px;
|
||||
margin-bottom: 20px;
|
||||
font-style: italic;
|
||||
color: #999;
|
||||
background-color: #f8f9fa;
|
||||
}
|
||||
|
||||
.btn {
|
||||
padding: 12px 25px;
|
||||
border-radius: 30px;
|
||||
font-weight: 600;
|
||||
text-transform: uppercase;
|
||||
transition: background-color 0.4s, transform 0.3s;
|
||||
}
|
||||
|
||||
.btn-primary {
|
||||
background-color: #007bff;
|
||||
color: #fff;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.btn-primary:hover {
|
||||
background-color: #0056b3;
|
||||
transform: translateY(-3px);
|
||||
}
|
||||
|
||||
.btn-outline-dark {
|
||||
color: #343a40;
|
||||
border: 2px solid #343a40;
|
||||
}
|
||||
|
||||
.btn-outline-dark:hover {
|
||||
background-color: #343a40;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.contact-info a {
|
||||
display: inline-block;
|
||||
margin: 0 10px;
|
||||
font-size: 1.2rem;
|
||||
transition: transform 0.3s;
|
||||
}
|
||||
|
||||
.contact-info a:hover {
|
||||
transform: scale(1.1);
|
||||
}
|
||||
</style>
|
||||
|
||||
<nav class="text-center py-3">
|
||||
<a href="#about">About Me</a>
|
||||
<a href="#projects">Projects</a>
|
||||
<a href="#contact">Contact</a>
|
||||
</nav>
|
||||
</body>
|
||||
</html>
|
1
requirements.txt
Normal file
@ -0,0 +1 @@
|
||||
flask
|