added stuff

This commit is contained in:
OusmBlueNinja 2024-12-30 17:07:58 -06:00
parent 4ebec051f6
commit 1a51ad2125
12 changed files with 515 additions and 325 deletions

17
Dockerfile Normal file
View 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"]

BIN
app.zip Normal file

Binary file not shown.

42
app/app.py Normal file
View 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)

View File

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 32 KiB

View File

Before

Width:  |  Height:  |  Size: 646 KiB

After

Width:  |  Height:  |  Size: 646 KiB

View File

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 74 KiB

View File

Before

Width:  |  Height:  |  Size: 54 KiB

After

Width:  |  Height:  |  Size: 54 KiB

View File

Before

Width:  |  Height:  |  Size: 62 KiB

After

Width:  |  Height:  |  Size: 62 KiB

View File

@ -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>Drivers 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
View File

@ -0,0 +1 @@
flask