diff --git a/app/config.py.example b/app/config.py.example index 45a791b..29379df 100644 --- a/app/config.py.example +++ b/app/config.py.example @@ -8,14 +8,13 @@ class Config: 'sqlite:///' + os.path.join(basedir, '../instance/registration.db') SQLALCHEMY_TRACK_MODIFICATIONS = False - # Email Settings (Update these!) - MAIL_SERVER = - MAIL_PORT = + MAIL_SERVER = 'mail.your-server.de' + MAIL_PORT = 587 MAIL_USE_TLS = True MAIL_USERNAME = os.environ.get('EMAIL_USER') MAIL_PASSWORD = os.environ.get('EMAIL_PASS') MAIL_DEFAULT_SENDER = os.environ.get('EMAIL_USER') - MAX_SPOTS = + MAX_SPOTS = 84 TUM_DOMAIN = "tum.de" - DISCORD_LINK = + DISCORD_LINK = os.environ.get('DISCORD_LINK') diff --git a/app/routes.py b/app/routes.py index 4355f53..b8184dc 100644 --- a/app/routes.py +++ b/app/routes.py @@ -13,10 +13,11 @@ def send_verification_email(user_email): s = URLSafeTimedSerializer(current_app.config['SECRET_KEY']) token = s.dumps(user_email, salt='email-confirm-h4tum-ctf-2025') link = url_for('main.verify_email', token=token, _external=True) + logo = url_for('static', filename='h4tum_white.png', _external=True) - #msg = Message('Verify your CTF Registration', recipients=["fdohq9ipugtc@mockmail.io"]) - #msg.body = f'Click here to confirm your spot: {link}\nThanks for registering {user_email}' - print(link) + msg = Message('Verify your CTF Registration', recipients=[user_email]) + msg.html = render_template("email.html", user_email=user_email, link=link, logo_url=logo) + mail.send(msg) @bp.route('/', methods=['GET', 'POST']) def index(): diff --git a/app/static/h4tum_white.png b/app/static/h4tum_white.png new file mode 100644 index 0000000..674c206 Binary files /dev/null and b/app/static/h4tum_white.png differ diff --git a/app/static/timeline.css b/app/static/timeline.css new file mode 100644 index 0000000..4871a5a --- /dev/null +++ b/app/static/timeline.css @@ -0,0 +1,81 @@ +.timeline-container { + position: relative; + padding: 0 20px; +} + +/* The actual horizontal line */ +.line { + position: absolute; + top: 50%; + left: 0; + right: 0; + height: 4px; + background: #dfe6e9; + transform: translateY(-50%); + z-index: 1; +} + +.items-wrapper { + display: flex; + justify-content: space-between; + position: relative; + z-index: 2; +} + +.item { + width: 120px; + text-align: center; + position: relative; + /* This height ensures the time is above and label is below the line */ + height: 120px; +} + +/* The Dot - centered perfectly on the line */ +.dot { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); /* Centers the dot exactly */ + width: 16px; + height: 16px; + background: #00ff00; + border: 2px solid #1a1a1a; + border-radius: 50%; + box-shadow: 0 0 8px #00ff00; +} + +/* Time - positioned above the dot */ +.time { + position: absolute; + bottom: 65%; /* Push above the center line */ + left: 0; + right: 0; + font-weight: bold; + color: #ffffff; +} + +/* Label - positioned below the dot */ +.label { + position: absolute; + top: 65%; /* Push below the center line */ + left: 0; + right: 0; + font-size: 0.9rem; + color: #ffffff; +} + +.label span { + display: block; + font-size: 0.75rem; + color: #dddddd; + margin-top: 4px; +} + +/* Mobile: Stack vertically */ +@media (max-width: 700px) { + .line { display: none; } + .items-wrapper { flex-direction: column; gap: 10px; align-items: flex-start; } + .item { height: auto; text-align: center; width: 100%; } + .dot { display: none;} + .time, .label { position: static; } +} diff --git a/app/templates/email.html b/app/templates/email.html new file mode 100644 index 0000000..bce7d06 --- /dev/null +++ b/app/templates/email.html @@ -0,0 +1,53 @@ + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Club Logo +
+

Registration Received

+
+ Thanks for registering
+ {{ user_email }}

+ To secure your spot at the event, please confirm your attendance by clicking the button below. +
+ + + + +
+ + CONFIRM MY SPOT + +
+
+ If you didn't request this, you can safely ignore this email. +
+
+ + diff --git a/app/templates/index.html b/app/templates/index.html index d38c092..a9c16a3 100644 --- a/app/templates/index.html +++ b/app/templates/index.html @@ -1,7 +1,9 @@ {% extends "base.html" %} {% block content %} -
+ + +

> Info


- Rules and further information +

> Timeline

+
+
+ +
+
+
12:00
+
+
EntrySetup & find team
+
+ +
+
13:00
+
+
Start of Event
+
+ +
+
~18:30
+
+
Pizza TimeBring cash. Menu
+
+ +
+
21:00
+
+
End of Event
+
+ +
+
21:15
+
+
Awards
+
+
+
+
+

Rules and Code of Conduct