From 848eb0370f06e879812815f6d8fc490d5c36d65f Mon Sep 17 00:00:00 2001 From: craisin Date: Sun, 23 Nov 2025 18:38:01 -0800 Subject: [PATCH] Initial commit --- Dockerfile | 12 ++++++++ source/app.py | 11 ++++++++ source/requirements.txt | 10 +++++++ source/static/pfp.png | Bin 0 -> 15086 bytes source/static/style.css | 54 ++++++++++++++++++++++++++++++++++++ source/templates/index.html | 33 ++++++++++++++++++++++ 6 files changed, 120 insertions(+) create mode 100644 Dockerfile create mode 100644 source/app.py create mode 100644 source/requirements.txt create mode 100644 source/static/pfp.png create mode 100644 source/static/style.css create mode 100644 source/templates/index.html diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..2236d22 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,12 @@ +FROM python:3.11 + +COPY ./source /source +RUN pip install --no-cache-dir -r /source/requirements.txt + +EXPOSE 8000 + +RUN useradd app +USER app + +WORKDIR /source +CMD ["gunicorn", "-b", "0.0.0.0:8000", "app:app"] diff --git a/source/app.py b/source/app.py new file mode 100644 index 0000000..b089404 --- /dev/null +++ b/source/app.py @@ -0,0 +1,11 @@ +from flask import Flask, redirect, render_template + +app = Flask(__name__) +PORT = 8080 + +@app.route("/") +def home(): + return render_template("index.html") + +if __name__ == "__main__": + app.run(port=PORT) \ No newline at end of file diff --git a/source/requirements.txt b/source/requirements.txt new file mode 100644 index 0000000..acc455a --- /dev/null +++ b/source/requirements.txt @@ -0,0 +1,10 @@ +blinker +click +Flask +gunicorn +itsdangerous +Jinja2 +MarkupSafe +packaging +setuptools +Werkzeug diff --git a/source/static/pfp.png b/source/static/pfp.png new file mode 100644 index 0000000000000000000000000000000000000000..b2f4292488b6e572d8659746b9d8549dfc1b406f GIT binary patch literal 15086 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 z * { + + margin: 10px; + +} + +#content { + + margin: 0px; + padding: 5vw; + +} + +#pfp{ + + width: 6vh; + height: 6vh; + border-radius: 3vh; + + float: left; + +} \ No newline at end of file diff --git a/source/templates/index.html b/source/templates/index.html new file mode 100644 index 0000000..ce9dbe6 --- /dev/null +++ b/source/templates/index.html @@ -0,0 +1,33 @@ + + + + Craisin Cove + + + + + + + +
+ +

@Craisin


+

Saber Fencer | Script Kiddie | Math Nerd

+

Bio

+

Just a normal guy who likes fencing and STEM. Give it a few years maybe something will be here

+

Resources

+ +

Mini Resume (as of 4/21/25)

+
    +
  • C24 saber fencer
  • +
  • 92 on AMC 10
  • +
  • USACO Silver
  • +
  • Specialist Codeforces
  • +
+
+ +