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 |
@ -133,6 +133,9 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<section id="projects" class="container my-5">
|
<section id="projects" class="container my-5">
|
||||||
<h2 class="section-title text-center">Projects</h2>
|
<h2 class="section-title text-center">Projects</h2>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
@ -197,6 +200,133 @@
|
|||||||
</div>
|
</div>
|
||||||
</section>
|
</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">
|
<section id="contact" class="container text-center my-5">
|
||||||
<h2 class="section-title">Contact</h2>
|
<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>Email:</strong> <a href="mailto:spencer.conlon3@gmail.com">spencer.conlon3@gmail.com</a></p>
|
1
requirements.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
flask
|