From 8211c503e1e5c545f7a7dab7a21896b98fd5b8be Mon Sep 17 00:00:00 2001 From: xbl Date: Sat, 19 Jul 2025 11:21:15 +0200 Subject: [PATCH] init --- app.py | 31 ++++ static/ccl.png | Bin 0 -> 35246 bytes static/favicon.png | Bin 0 -> 20807 bytes static/style.css | 319 ++++++++++++++++++++++++++++++++++++++++ templates/profiles.html | 82 +++++++++++ templates/quiz.html | 57 +++++++ templates/result.html | 152 +++++++++++++++++++ 7 files changed, 641 insertions(+) create mode 100755 app.py create mode 100755 static/ccl.png create mode 100755 static/favicon.png create mode 100644 static/style.css create mode 100755 templates/profiles.html create mode 100755 templates/quiz.html create mode 100755 templates/result.html diff --git a/app.py b/app.py new file mode 100755 index 0000000..2d35cab --- /dev/null +++ b/app.py @@ -0,0 +1,31 @@ +from flask import Flask, render_template, request +import math +from profiles import profiles + +app = Flask(__name__) + +def euclidean_distance(a, b): + return math.sqrt(sum((x - y) ** 2 for x, y in zip(a, b))) + +@app.route("/", methods=["GET", "POST"]) +def index(): + if request.method == "POST": + user_values = [int(request.form.get(f"point{i}", 2)) for i in range(1, 7)] + + # Find 3 best matches sorted by distance ascending + sorted_matches = sorted(profiles.items(), key=lambda p: euclidean_distance(user_values, p[1]['values'])) + top_matches = sorted_matches[:3] # top 3 matches + + return render_template( + "result.html", + user=user_values, + top_matches=top_matches, + ) + return render_template("quiz.html") + +@app.route("/profiles") +def profiles_page(): + return render_template("profiles.html", profiles=profiles) + +if __name__ == "__main__": + app.run(host='0.0.0.0', port=1337, debug=True) diff --git a/static/ccl.png b/static/ccl.png new file mode 100755 index 0000000000000000000000000000000000000000..90e1bb4890873585c856b05e1727d68928d5116d GIT binary patch literal 35246 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 EFJPn7#sB~S literal 0 HcmV?d00001 diff --git a/static/style.css b/static/style.css new file mode 100644 index 0000000..e7f6716 --- /dev/null +++ b/static/style.css @@ -0,0 +1,319 @@ +/* === Reset & Base Styles === */ +html, body { + margin: 0; + padding: 0; + height: 100%; + width: 100%; + font-family: Arial, sans-serif; + box-sizing: border-box; + color: #222; +} + +h1 { + font-size: 2.75rem; + font-weight: bold; + margin: 0 0 0.5em 0; + line-height: 1.2; +} + +h2 { + font-size: 1.75rem; + font-weight: bold; + margin: 0 0 0.75em 0; + line-height: 1.3; + text-align: center; +} + +h3 { + margin-bottom: 10px; + font-size: 1.3em; +} + +p { + font-size: 1rem; + line-height: 1.5; + margin: 0 0 1em 0; + color: #333; +} + +input[type="hidden"] { + display: none; +} + +/* === Layout Containers === */ +body.profiles-page { + overflow-y: auto; + background: linear-gradient(69deg, #39ff14, #00ffcc, #adff2f); + background-size: 400% 400%; + animation: gradientMove 39s ease infinite; +} + +.logo-container { + display: flex; + justify-content: center; + align-items: center; + padding: 20px 0; + background-color: transparent; +} + +.logo { + width: 100%; + height: auto; +} + +.grid { + max-width: 2000px; + margin: 0 auto; + padding: 20px; + display: grid; + grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); + gap: 15px; + overflow-x: hidden; + overflow-y: auto; +} + +/* === Cards === */ +.profile-card { + background: rgba(255, 255, 255, 0.39); + padding: 15px; + border-radius: 8px; + box-shadow: 0 2px 6px rgba(0,0,0,0.1); + word-wrap: break-word; + overflow-wrap: break-word; + display: flex; + flex-direction: column; + align-items: center; + width: 90%; + max-width: 320px; + min-height: 320px; + margin: 0 auto; +} + +.profile-card canvas { + width: 100% !important; + height: auto !important; + max-height: 250px; +} + +.radar-container { + background: rgba(255, 255, 255, 0.39); + border-radius: 8px; + box-shadow: 0 2px 4px rgba(0,0,0,0.1); + display: flex; + flex-direction: column; + align-items: center; + width: 100%; + text-align: center; + box-sizing: border-box; +} + +.radar-container h2, +.radar-container h3 { + margin: 8px 0 10px 0; +} + +.radar-container canvas { + width: 100% !important; + max-width: 320px; + height: 320px !important; + max-height: 320px; + object-fit: contain; + margin-bottom: 10px; +} + +.radar-container p.info-text, +.profile-card p.info-text { + text-align: center; + margin: 6px 10px 0; + font-size: 1rem; + color: #222; +} + +/* === Category Cards === */ +.cards-container { + display: grid; + gap: 15px; + padding: 20px; + width: 90%; + max-width: 1000px; + margin: 0 auto; +} + +.category-card { + background: rgba(255, 255, 255, 0.8); + border-radius: 10px; + padding: 20px; + text-align: center; + cursor: pointer; + border: 3px solid transparent; + transition: all 0.3s ease; + user-select: none; + position: relative; +} + +.category-card.active { + border-color: #00aaff; + background: rgba(0, 170, 255, 0.2); +} + +.category-card .checkmark { + position: absolute; + top: 8px; + right: 8px; + font-size: 18px; + color: green; + display: none; +} + +.category-card.active .checkmark { + display: block; +} + +/* === Matches === */ +.matches-container { + display: flex; + flex-direction: column; + gap: 15px; + align-items: center; +} + +.matches-row { + display: flex; + gap: 15px; + flex-wrap: wrap; + justify-content: center; + align-items: center; + width: 100%; +} + +.best-card { + border: 2px solid gold; + box-shadow: 0 4px 20px rgba(0,0,0,0.2); +} + +.others-row { + justify-content: center; + align-items: center; + margin-left: auto; + padding-bottom: 15px; +} + +.others-row .profile-card { + margin: 0; +} + +/* === Buttons === */ +button[type="submit"], +button.magenta-button { + display: block; + margin: 30px 0; + padding: 15px 40px; + font-size: 1.2em; + font-weight: bold; + color: white; + border: none; + border-radius: 8px; + cursor: pointer; + box-shadow: 0 4px 10px rgba(0,0,0,0.2); + transition: background-color 0.3s ease, transform 0.2s ease; +} + +button[type="submit"] { + background-color: #00aaff; +} + +button[type="submit"]:hover { + background-color: #0088cc; + transform: translateY(2px); +} + +button[type="submit"]:active { + background-color: #006699; + transform: translateY(0); +} + +button.magenta-button { + background-color: #ff00aa; +} + +button.magenta-button:hover { + background-color: #cc0088; + transform: translateY(2px); +} + +button.magenta-button:active { + background-color: #990066; + transform: translateY(0); +} + +.button-row { + display: flex; + justify-content: center; + align-items: center; + gap: 15px; + flex-wrap: wrap; + margin: 30px auto; + min-height: 5%; + width: 100%; + padding-bottom: 25px; +} + +.button-row button { + margin: 0; +} + +/* === Animations === */ +@keyframes gradientMove { + 0% { background-position: 0% 50%; } + 50% { background-position: 100% 50%; } + 100% { background-position: 0% 50%; } +} + +/* === Media Queries === */ +@media (max-width: 600px) { + .radar-container { + width: 90vw !important; + max-width: none !important; + padding-bottom: 10px; + height: auto; + } + .radar-container canvas { + width: 90vw !important; + max-width: none; + height: 90vw !important; + max-height: none; + } + .logo { + max-width: 90vw; + } +} + +@media (min-width: 900px) { + body.profiles-page { + background-size: 400% 1600%; + } + .cards-container { + grid-template-columns: repeat(3, 1fr); + align-items: center; + } +} + +@media (max-width: 899px) and (min-width: 600px) { + body.profiles-page { + background-size: 400% 1600%; + } + .cards-container { + grid-template-columns: repeat(2, 1fr); + align-items: center; + } +} + +@media (max-width: 599px) { + body.profiles-page { + background-size: 400% 1600%; + } + .cards-container { + grid-template-columns: 1fr; + align-items: center; + } +} diff --git a/templates/profiles.html b/templates/profiles.html new file mode 100755 index 0000000..58efd6d --- /dev/null +++ b/templates/profiles.html @@ -0,0 +1,82 @@ + + + + + + canculator profiles + + + + + +

+ + + +
+
+ +
+
+ {% for name, values in profiles.items() %} +
+

{{ name }}

+ +

{{ values.info_text1 }}

+

{{ values.info_text2 }}

+
+ {% endfor %} +
+ + + + diff --git a/templates/quiz.html b/templates/quiz.html new file mode 100755 index 0000000..bb8da16 --- /dev/null +++ b/templates/quiz.html @@ -0,0 +1,57 @@ + + + + + + canculator quiz + + + + +
+ + + +
+
+ +
+

What are you looking for?

+
+
+ {% set categories = [ + {'name': 'Energy', 'desc': 'Boost endurance and alertness.'}, + {'name': 'Calm', 'desc': 'Stay grounded and centered.'}, + {'name': 'Relax', 'desc': 'Ease tension in body and mind.'}, + {'name': 'Sleep', 'desc': 'Support restfulness and recovery.'}, + {'name': 'Focus', 'desc': 'Enhance concentration and clarity.'}, + {'name': 'Inspire', 'desc': 'Spark creativity and new ideas.'} + ] %} + {% for cat in categories %} +
+

{{ cat.name }}

+

{{ cat.desc }}

+ +
+
+ {% endfor %} +
+
+ +
+
+ + + + diff --git a/templates/result.html b/templates/result.html new file mode 100755 index 0000000..f0feea3 --- /dev/null +++ b/templates/result.html @@ -0,0 +1,152 @@ + + + + + + canculator result + + + + + + +
+ + + +
+
+ + +
+

Your Matches:

+
+
+ {% set match_labels = ["Best", "Runner-up", "Maybe..."] %} + {% if top_matches|length > 0 %} + {% set name, match_values = top_matches[0] %} +
+

{{ match_labels[0] }}

+

{{ name }}

+ +

{{ match_values.info_text1 }}

+

{{ match_values.info_text2 }}

+
+ {% endif %} +
+
+ {% for idx in range(1, top_matches|length) %} + {% set name, match_values = top_matches[idx] %} +
+

{{ match_labels[idx] if idx < match_labels|length else 'Match' }}

+

{{ name }}

+ +

{{ match_values.info_text1 }}

+

{{ match_values.info_text2 }}

+
+ {% endfor %} +
+ +
+ + + + +