diff --git a/app/core/settings.py b/app/core/settings.py index 4d2b858..a1effae 100644 --- a/app/core/settings.py +++ b/app/core/settings.py @@ -29,10 +29,8 @@ ALLOWED_HOSTS = [ '*' ] # Force HttpRequest.build_absolute_uri() to generate HTTPS links in production # This is necessary when running behind a reverse proxy -#USE_X_FORWARDED_HOST = False if DEBUG else True -#SECURE_PROXY_SSL_HEADER = () if DEBUG else ('HTTP_X_FORWARDED_PROTO', 'https') -USE_X_FORWARDED_HOST = True -SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https') +USE_X_FORWARDED_HOST = False if DEBUG else True +SECURE_PROXY_SSL_HEADER = () if DEBUG else ('HTTP_X_FORWARDED_PROTO', 'https') # Application definition diff --git a/app/core/templates/core/footer.html b/app/core/templates/core/footer.html index ea7ad65..10a0d70 100644 --- a/app/core/templates/core/footer.html +++ b/app/core/templates/core/footer.html @@ -1,3 +1,5 @@

© 2023 Julian Lobbes

+ Imprint + Privacy Policy
diff --git a/app/core/templates/core/navbar.html b/app/core/templates/core/navbar.html index bcb1cd3..d0a4427 100644 --- a/app/core/templates/core/navbar.html +++ b/app/core/templates/core/navbar.html @@ -2,7 +2,7 @@
- +
diff --git a/app/gotify/migrations/0001_initial.py b/app/gotify/migrations/0001_initial.py index caaa452..ea1335f 100644 --- a/app/gotify/migrations/0001_initial.py +++ b/app/gotify/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 4.2.3 on 2023-07-30 21:15 +# Generated by Django 4.2.3 on 2023-08-24 13:02 from django.conf import settings from django.db import migrations, models diff --git a/app/medwings/migrations/0001_initial.py b/app/medwings/migrations/0001_initial.py index 5711d5c..30227c3 100644 --- a/app/medwings/migrations/0001_initial.py +++ b/app/medwings/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 4.2.3 on 2023-07-30 21:15 +# Generated by Django 4.2.3 on 2023-08-24 13:02 from django.conf import settings from django.db import migrations, models @@ -11,8 +11,8 @@ class Migration(migrations.Migration): initial = True dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), ('auth', '0012_alter_user_first_name_max_length'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] operations = [ @@ -31,7 +31,7 @@ class Migration(migrations.Migration): fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('recorded', models.DateTimeField(unique=True, validators=[medwings.validators.AbstractRecordValidator.recorded], verbose_name='Time at which measurement was taken')), - ('value_celsius', models.DecimalField(decimal_places=2, max_digits=5, unique=True, validators=[medwings.validators.BodyTempRecordValidator.value_celsius], verbose_name='Body Temperature (°C)')), + ('value_celsius', models.DecimalField(decimal_places=2, max_digits=5, validators=[medwings.validators.BodyTempRecordValidator.value_celsius], verbose_name='Body Temperature (°C)')), ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), ], ), diff --git a/app/medwings/models.py b/app/medwings/models.py index b362247..4e787ab 100644 --- a/app/medwings/models.py +++ b/app/medwings/models.py @@ -27,7 +27,7 @@ class BloodPressureRecord(models.Model): class BodyTempRecord(models.Model): user = models.ForeignKey(User, on_delete=models.CASCADE) recorded = models.DateTimeField(validators=[validators.BodyTempRecordValidator.recorded], unique=True, verbose_name="Time at which measurement was taken") - value_celsius = models.DecimalField(max_digits=5, decimal_places=2, validators=[validators.BodyTempRecordValidator.value_celsius], unique=True, verbose_name="Body Temperature (\u00B0C)") + value_celsius = models.DecimalField(max_digits=5, decimal_places=2, validators=[validators.BodyTempRecordValidator.value_celsius], verbose_name="Body Temperature (\u00B0C)") class HeartRateRecord(models.Model): diff --git a/app/medwings/templates/medwings/index.html b/app/medwings/templates/medwings/index.html index 155dafd..f5248e8 100644 --- a/app/medwings/templates/medwings/index.html +++ b/app/medwings/templates/medwings/index.html @@ -5,23 +5,21 @@ {% endblock title %} {% block content %} -
-
- -
-

MedwingS

+
+
+
+

Welcome to

+

Medwings

+

The Mobile Early Deterioration Warning System

-

The Mobile Early Deterioration Warning System

- We understand that after receiving medical care, you may still have concerns about your health, particularly if you're at - risk of sudden health changes. - That's where we come in. + Welcome to Medwings, a pioneering research project at the intersection of medical science and technology. + With a focus on data-driven diagnostics, and cutting-edge medical devices, Medwings is committed to shaping the future of healthcare.

Our platform leverages smart medical sensor devices to keep track of your vital signs - such as heart rate, - blood pressure, and body temperature - providing you and your healthcare team with a detailed and continuous - picture of your health status. + blood pressure, and body temperature - providing you with a detailed and continuous picture of your health status.

{% if not request.user.is_authenticated %} @@ -36,21 +34,19 @@ {% endif %}

- Our unique feature is the ability to calculate your Modified Early Warning Score (MEWS) from your vitals data. - This system is used widely in healthcare settings to detect early signs of deterioration. - Now, it is available for you, right in the comfort of your home or on the go. -

-

+ Medwings has the ability to calculate your Modified Early Warning Score (MEWS) from your vitals data. Prompted by periodic reminders, you'll be asked to take measurements which will be sent automatically to our platform. Here, we calculate your MEWS and generate alerts if we detect an increased risk of health deterioration.

-

- While we take care of your monitoring needs, you can enjoy your daily activities with peace of mind, knowing that a - dedicated team has your health in their sights. - Stay in control of your health with us, your personal health guardian. -

+ Stay in control of your health with us, your personal health guardian. Welcome aboard!

+ {% endblock content %} diff --git a/app/static/medwings/images/misc/ecg-curve.svg b/app/static/medwings/images/misc/ecg-curve.svg new file mode 100644 index 0000000..888a989 --- /dev/null +++ b/app/static/medwings/images/misc/ecg-curve.svg @@ -0,0 +1,135 @@ + + diff --git a/app/static/medwings/images/misc/hand-landscape.webp b/app/static/medwings/images/misc/hand-landscape.webp new file mode 100644 index 0000000..132232c Binary files /dev/null and b/app/static/medwings/images/misc/hand-landscape.webp differ diff --git a/app/static/medwings/images/misc/hand-portrait.webp b/app/static/medwings/images/misc/hand-portrait.webp new file mode 100644 index 0000000..9be7509 Binary files /dev/null and b/app/static/medwings/images/misc/hand-portrait.webp differ diff --git a/app/withings/migrations/0001_initial.py b/app/withings/migrations/0001_initial.py index c6e8861..4337b58 100644 --- a/app/withings/migrations/0001_initial.py +++ b/app/withings/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 4.2.3 on 2023-07-30 21:15 +# Generated by Django 4.2.3 on 2023-08-24 13:02 from django.conf import settings from django.db import migrations, models diff --git a/assets/css/fonts.css b/assets/css/fonts.css index b145627..02ae1dc 100644 --- a/assets/css/fonts.css +++ b/assets/css/fonts.css @@ -370,40 +370,10 @@ } -/* PlayfairDisplaySC */ +/* Iceland */ @font-face { - font-family: 'PlayfairDisplaySC'; - src: url('/assets/fonts/playfairdisplaysc/playfairdisplaysc-regular.ttf') format('truetype'); + font-family: 'Iceland'; + src: url('/assets/fonts/iceland/iceland-regular.ttf') format('truetype'); font-weight: 400; font-style: normal; } -@font-face { - font-family: 'PlayfairDisplaySC'; - src: url('/assets/fonts/playfairdisplaysc/playfairdisplaysc-regular-italic.ttf') format('truetype'); - font-weight: 400; - font-style: italic; -} -@font-face { - font-family: 'PlayfairDisplaySC'; - src: url('/assets/fonts/playfairdisplaysc/playfairdisplaysc-bold.ttf') format('truetype'); - font-weight: 700; - font-style: normal; -} -@font-face { - font-family: 'PlayfairDisplaySC'; - src: url('/assets/fonts/playfairdisplaysc/playfairdisplaysc-bold-italic.ttf') format('truetype'); - font-weight: 700; - font-style: italic; -} -@font-face { - font-family: 'PlayfairDisplaySC'; - src: url('/assets/fonts/playfairdisplaysc/playfairdisplaysc-black.ttf') format('truetype'); - font-weight: 900; - font-style: normal; -} -@font-face { - font-family: 'PlayfairDisplaySC'; - src: url('/assets/fonts/playfairdisplaysc/playfairdisplaysc-black-italic.ttf') format('truetype'); - font-weight: 900; - font-style: italic; -} diff --git a/assets/css/styles.css b/assets/css/styles.css index 4a58eeb..35b68b6 100644 --- a/assets/css/styles.css +++ b/assets/css/styles.css @@ -17,8 +17,9 @@ h1 { } h1.title { - @apply font-title font-bold; - @apply underline text-primary-200/90; + @apply font-title; + font-weight: 400; + @apply text-accent-400; } h2 { @@ -236,85 +237,46 @@ div.call-to-action-box { } } -#logo-wings { - animation: logowings 2s ease-in-out infinite alternate; -} -#logo-wings--subtle { - animation: logowings-subtle 2s ease-in-out infinite alternate; -} #logo-heart { - animation: logoheart 1s linear infinite; + animation: logoheart 2s linear infinite; transform-origin: center; } #logo-heart--subtle { animation: logoheart-subtle 1s linear infinite; transform-origin: center; } -#logo-blips { - animation: logoblips 6s linear infinite; - transform-origin: bottom; - transform-box: fill-box; -} -#logo-blips--subtle { - animation: logoblips-subtle 6s linear infinite; - transform-origin: bottom; - transform-box: fill-box; -} - -@keyframes logowings { - 0% { - transform: translateY(0%); - } - - 100% { - transform: translateY(5%); - } -} -@keyframes logowings-subtle { - 0% { - transform: translateY(5%); - } - - 100% { - transform: translateY(8%); - } +#logo-signal { + --maxStrokeLength: 2001.85791015625; + --maxStrokeLengthNeg: -2001.85791015625; + stroke-dasharray: var(--maxStrokeLength); + stroke-dashoffset: var(--maxStrokeLength); + animation: logosignal 2s linear infinite; } @keyframes logoheart { - 0%, 25%, 50%, 100% { + 0%, 38%, 55%, 65%, 100% { transform: scale(100%); } - 12%, 37% { - transform: scale(105%); + 48% { + transform: scale(103%); + } + 60% { + transform: scale(101%); } } -@keyframes logoheart-subtle { - 0%, 25%, 50%, 100% { - transform: scale(100%); +@keyframes logosignal { + 0%, 40% { + stroke-dasharray: var(--maxStrokeLength); + stroke-dashoffset: var(--maxStrokeLength); } - - 12%, 37% { - transform: scale(102%); + 50% { + stroke-dasharray: 1000; + stroke-dashoffset: 0; } -} - -@keyframes logoblips { - 0% { - transform: rotateY(0deg) - } - - 5%, 100% { - transform: rotateY(360deg); - } -} -@keyframes logoblips-subtle { - 0% { - transform: rotateY(0deg) - } - - 5%, 100% { - transform: rotateY(360deg); + 80%, 100% { + stroke-dasharray: var(--maxStrokeLength); + stroke-dashoffset: var(--maxStrokeLengthNeg); } } diff --git a/assets/fonts/iceland/iceland-regular.ttf b/assets/fonts/iceland/iceland-regular.ttf new file mode 100644 index 0000000..a7d4d55 Binary files /dev/null and b/assets/fonts/iceland/iceland-regular.ttf differ diff --git a/assets/fonts/playfairdisplaysc/playfairdisplaysc-black-italic.ttf b/assets/fonts/playfairdisplaysc/playfairdisplaysc-black-italic.ttf deleted file mode 100644 index e423fa0..0000000 Binary files a/assets/fonts/playfairdisplaysc/playfairdisplaysc-black-italic.ttf and /dev/null differ diff --git a/assets/fonts/playfairdisplaysc/playfairdisplaysc-black.ttf b/assets/fonts/playfairdisplaysc/playfairdisplaysc-black.ttf deleted file mode 100644 index 7d50fe3..0000000 Binary files a/assets/fonts/playfairdisplaysc/playfairdisplaysc-black.ttf and /dev/null differ diff --git a/assets/fonts/playfairdisplaysc/playfairdisplaysc-bold-italic.ttf b/assets/fonts/playfairdisplaysc/playfairdisplaysc-bold-italic.ttf deleted file mode 100644 index 036c404..0000000 Binary files a/assets/fonts/playfairdisplaysc/playfairdisplaysc-bold-italic.ttf and /dev/null differ diff --git a/assets/fonts/playfairdisplaysc/playfairdisplaysc-bold.ttf b/assets/fonts/playfairdisplaysc/playfairdisplaysc-bold.ttf deleted file mode 100644 index d5a1aff..0000000 Binary files a/assets/fonts/playfairdisplaysc/playfairdisplaysc-bold.ttf and /dev/null differ diff --git a/assets/fonts/playfairdisplaysc/playfairdisplaysc-regular-italic.ttf b/assets/fonts/playfairdisplaysc/playfairdisplaysc-regular-italic.ttf deleted file mode 100644 index 6220854..0000000 Binary files a/assets/fonts/playfairdisplaysc/playfairdisplaysc-regular-italic.ttf and /dev/null differ diff --git a/assets/fonts/playfairdisplaysc/playfairdisplaysc-regular.ttf b/assets/fonts/playfairdisplaysc/playfairdisplaysc-regular.ttf deleted file mode 100644 index f3caa71..0000000 Binary files a/assets/fonts/playfairdisplaysc/playfairdisplaysc-regular.ttf and /dev/null differ diff --git a/development.django.Dockerfile b/development.django.Dockerfile index 31ebed1..fdd4bf1 100644 --- a/development.django.Dockerfile +++ b/development.django.Dockerfile @@ -30,4 +30,4 @@ RUN pip install -r requirements.txt # Run supervisord EXPOSE 8000/tcp -CMD ["/usr/bin/supervisord", "-c", "/etc/supervisord.conf"] +CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"] diff --git a/development.docker-compose.yml b/development.docker-compose.yml index 22f4ab0..bf11435 100644 --- a/development.docker-compose.yml +++ b/development.docker-compose.yml @@ -43,6 +43,8 @@ services: - ./app/withings/:/app/withings:ro environment: TZ: ${TIMEZONE} + DJANGO_DEBUG_MODE: ${DJANGO_DEBUG_MODE} + DJANGO_SECRET_KEY: ${DJANGO_SECRET_KEY} PG_NAME: ${PG_NAME} PG_USER: ${PG_USER} PG_PASSWORD: ${PG_PASSWORD} diff --git a/tailwind.config.js b/tailwind.config.js index 1e320dd..4ad6c91 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -8,7 +8,7 @@ export default { serif: ["Lora"], mono: ["SourceCodePro"], accent: ["Kanit"], - title: ["PlayfairDisplaySC"] + title: ["Iceland"] }, colors: { transparent: "transparent", @@ -121,6 +121,10 @@ export default { screens: { '3xl': '1920px', '4xl': '3840px', + }, + backgroundImage: { + "hand-landscape": "url('../../app/static/medwings/images/misc/hand-landscape.webp')", + "hand-portrait": "url('../../app/static/medwings/images/misc/hand-portrait.webp')", } }, },