merge experimental #1

Merged
jlobbes merged 25 commits from experimental into master 2023-08-17 15:16:51 +01:00
72 changed files with 4482 additions and 63 deletions
Showing only changes of commit 6cda35d900 - Show all commits

2
.gitignore vendored
View File

@ -3,6 +3,7 @@
# Locally installed environments
/app/.venv/
/node_modules/
# Local development database
/.postgres/
@ -11,6 +12,7 @@
**/*.pyc
**/__pycache__/
/.parcel-cache/
/app/static/dist/
# Latex compiled files
**/*.aux

5
.postcssrc Normal file
View File

@ -0,0 +1,5 @@
{
"plugins": {
"tailwindcss": {},
}
}

View File

@ -45,6 +45,14 @@ To start the development compose-stack, run the following command:
sudo docker-compose -f development.docker-compose.yml up --force-recreate --build --remove-orphans
```
To start the frontend asset bundler, run:
```bash
npm run start
```
## Backend
To run commands inside the backend container, run the following:
```bash
sudo docker exec -it medwings-django <command>

View File

@ -9,10 +9,11 @@
<meta name="description" content="{% block description %}An early warning system for medical deterioration.{% endblock description %}">
<meta name="author" content="{% block author %}Julian Lobbes{% endblock author %}">
<link rel="stylesheet" href="{% static 'general/css/style.css' %}">
<link rel="stylesheet" href="{% static 'dist/main.css' %}">
</head>
<body>
{% block content %}
{% endblock content %}
<script src="{% static 'dist/main.js' %}"></script>
</body>
</html>

View File

@ -1,109 +1,109 @@
/* Kanit */
@font-face {
font-family: 'Kanit';
src: url('/static/general/fonts/kanit/kanit-thin.ttf') format('truetype');
src: url('/assets/fonts/kanit/kanit-thin.ttf') format('truetype');
font-weight: 100;
font-style: normal;
}
@font-face {
font-family: 'Kanit';
src: url('/static/general/fonts/kanit/kanit-thin-italic.ttf') format('truetype');
src: url('/assets/fonts/kanit/kanit-thin-italic.ttf') format('truetype');
font-weight: 100;
font-style: italic;
}
@font-face {
font-family: 'Kanit';
src: url('/static/general/fonts/kanit/kanit-extralight.ttf') format('truetype');
src: url('/assets/fonts/kanit/kanit-extralight.ttf') format('truetype');
font-weight: 200;
font-style: normal;
}
@font-face {
font-family: 'Kanit';
src: url('/static/general/fonts/kanit/kanit-extralight-italic.ttf') format('truetype');
src: url('/assets/fonts/kanit/kanit-extralight-italic.ttf') format('truetype');
font-weight: 200;
font-style: italic;
}
@font-face {
font-family: 'Kanit';
src: url('/static/general/fonts/kanit/kanit-light.ttf') format('truetype');
src: url('/assets/fonts/kanit/kanit-light.ttf') format('truetype');
font-weight: 300;
font-style: normal;
}
@font-face {
font-family: 'Kanit';
src: url('/static/general/fonts/kanit/kanit-light-italic.ttf') format('truetype');
src: url('/assets/fonts/kanit/kanit-light-italic.ttf') format('truetype');
font-weight: 300;
font-style: italic;
}
@font-face {
font-family: 'Kanit';
src: url('/static/general/fonts/kanit/kanit-regular.ttf') format('truetype');
src: url('/assets/fonts/kanit/kanit-regular.ttf') format('truetype');
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: 'Kanit';
src: url('/static/general/fonts/kanit/kanit-regular-italic.ttf') format('truetype');
src: url('/assets/fonts/kanit/kanit-regular-italic.ttf') format('truetype');
font-weight: 400;
font-style: italic;
}
@font-face {
font-family: 'Kanit';
src: url('/static/general/fonts/kanit/kanit-medium.ttf') format('truetype');
src: url('/assets/fonts/kanit/kanit-medium.ttf') format('truetype');
font-weight: 500;
font-style: normal;
}
@font-face {
font-family: 'Kanit';
src: url('/static/general/fonts/kanit/kanit-medium-italic.ttf') format('truetype');
src: url('/assets/fonts/kanit/kanit-medium-italic.ttf') format('truetype');
font-weight: 500;
font-style: italic;
}
@font-face {
font-family: 'Kanit';
src: url('/static/general/fonts/kanit/kanit-semibold.ttf') format('truetype');
src: url('/assets/fonts/kanit/kanit-semibold.ttf') format('truetype');
font-weight: 600;
font-style: normal;
}
@font-face {
font-family: 'Kanit';
src: url('/static/general/fonts/kanit/kanit-semibold-italic.ttf') format('truetype');
src: url('/assets/fonts/kanit/kanit-semibold-italic.ttf') format('truetype');
font-weight: 600;
font-style: italic;
}
@font-face {
font-family: 'Kanit';
src: url('/static/general/fonts/kanit/kanit-bold.ttf') format('truetype');
src: url('/assets/fonts/kanit/kanit-bold.ttf') format('truetype');
font-weight: 700;
font-style: normal;
}
@font-face {
font-family: 'Kanit';
src: url('/static/general/fonts/kanit/kanit-bold-italic.ttf') format('truetype');
src: url('/assets/fonts/kanit/kanit-bold-italic.ttf') format('truetype');
font-weight: 700;
font-style: italic;
}
@font-face {
font-family: 'Kanit';
src: url('/static/general/fonts/kanit/kanit-extrabold.ttf') format('truetype');
src: url('/assets/fonts/kanit/kanit-extrabold.ttf') format('truetype');
font-weight: 800;
font-style: normal;
}
@font-face {
font-family: 'Kanit';
src: url('/static/general/fonts/kanit/kanit-extrabold-italic.ttf') format('truetype');
src: url('/assets/fonts/kanit/kanit-extrabold-italic.ttf') format('truetype');
font-weight: 800;
font-style: italic;
}
@font-face {
font-family: 'Kanit';
src: url('/static/general/fonts/kanit/kanit-black.ttf') format('truetype');
src: url('/assets/fonts/kanit/kanit-black.ttf') format('truetype');
font-weight: 900;
font-style: normal;
}
@font-face {
font-family: 'Kanit';
src: url('/static/general/fonts/kanit/kanit-black-italic.ttf') format('truetype');
src: url('/assets/fonts/kanit/kanit-black-italic.ttf') format('truetype');
font-weight: 900;
font-style: italic;
}
@ -112,109 +112,109 @@
/* Montserrat */
@font-face {
font-family: 'Montserrat';
src: url('/static/general/fonts/montserrat/montserrat-thin.ttf') format('truetype');
src: url('/assets/fonts/montserrat/montserrat-thin.ttf') format('truetype');
font-weight: 100;
font-style: normal;
}
@font-face {
font-family: 'Montserrat';
src: url('/static/general/fonts/montserrat/montserrat-thin-italic.ttf') format('truetype');
src: url('/assets/fonts/montserrat/montserrat-thin-italic.ttf') format('truetype');
font-weight: 100;
font-style: italic;
}
@font-face {
font-family: 'Montserrat';
src: url('/static/general/fonts/montserrat/montserrat-extralight.ttf') format('truetype');
src: url('/assets/fonts/montserrat/montserrat-extralight.ttf') format('truetype');
font-weight: 200;
font-style: normal;
}
@font-face {
font-family: 'Montserrat';
src: url('/static/general/fonts/montserrat/montserrat-extralight-italic.ttf') format('truetype');
src: url('/assets/fonts/montserrat/montserrat-extralight-italic.ttf') format('truetype');
font-weight: 200;
font-style: italic;
}
@font-face {
font-family: 'Montserrat';
src: url('/static/general/fonts/montserrat/montserrat-light.ttf') format('truetype');
src: url('/assets/fonts/montserrat/montserrat-light.ttf') format('truetype');
font-weight: 300;
font-style: normal;
}
@font-face {
font-family: 'Montserrat';
src: url('/static/general/fonts/montserrat/montserrat-light-italic.ttf') format('truetype');
src: url('/assets/fonts/montserrat/montserrat-light-italic.ttf') format('truetype');
font-weight: 300;
font-style: italic;
}
@font-face {
font-family: 'Montserrat';
src: url('/static/general/fonts/montserrat/montserrat-regular.ttf') format('truetype');
src: url('/assets/fonts/montserrat/montserrat-regular.ttf') format('truetype');
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: 'Montserrat';
src: url('/static/general/fonts/montserrat/montserrat-regular-italic.ttf') format('truetype');
src: url('/assets/fonts/montserrat/montserrat-regular-italic.ttf') format('truetype');
font-weight: 400;
font-style: italic;
}
@font-face {
font-family: 'Montserrat';
src: url('/static/general/fonts/montserrat/montserrat-medium.ttf') format('truetype');
src: url('/assets/fonts/montserrat/montserrat-medium.ttf') format('truetype');
font-weight: 500;
font-style: normal;
}
@font-face {
font-family: 'Montserrat';
src: url('/static/general/fonts/montserrat/montserrat-medium-italic.ttf') format('truetype');
src: url('/assets/fonts/montserrat/montserrat-medium-italic.ttf') format('truetype');
font-weight: 500;
font-style: italic;
}
@font-face {
font-family: 'Montserrat';
src: url('/static/general/fonts/montserrat/montserrat-semibold.ttf') format('truetype');
src: url('/assets/fonts/montserrat/montserrat-semibold.ttf') format('truetype');
font-weight: 600;
font-style: normal;
}
@font-face {
font-family: 'Montserrat';
src: url('/static/general/fonts/montserrat/montserrat-semibold-italic.ttf') format('truetype');
src: url('/assets/fonts/montserrat/montserrat-semibold-italic.ttf') format('truetype');
font-weight: 600;
font-style: italic;
}
@font-face {
font-family: 'Montserrat';
src: url('/static/general/fonts/montserrat/montserrat-bold.ttf') format('truetype');
src: url('/assets/fonts/montserrat/montserrat-bold.ttf') format('truetype');
font-weight: 700;
font-style: normal;
}
@font-face {
font-family: 'Montserrat';
src: url('/static/general/fonts/montserrat/montserrat-bold-italic.ttf') format('truetype');
src: url('/assets/fonts/montserrat/montserrat-bold-italic.ttf') format('truetype');
font-weight: 700;
font-style: italic;
}
@font-face {
font-family: 'Montserrat';
src: url('/static/general/fonts/montserrat/montserrat-extrabold.ttf') format('truetype');
src: url('/assets/fonts/montserrat/montserrat-extrabold.ttf') format('truetype');
font-weight: 800;
font-style: normal;
}
@font-face {
font-family: 'Montserrat';
src: url('/static/general/fonts/montserrat/montserrat-extrabold-italic.ttf') format('truetype');
src: url('/assets/fonts/montserrat/montserrat-extrabold-italic.ttf') format('truetype');
font-weight: 800;
font-style: italic;
}
@font-face {
font-family: 'Montserrat';
src: url('/static/general/fonts/montserrat/montserrat-black.ttf') format('truetype');
src: url('/assets/fonts/montserrat/montserrat-black.ttf') format('truetype');
font-weight: 900;
font-style: normal;
}
@font-face {
font-family: 'Montserrat';
src: url('/static/general/fonts/montserrat/montserrat-black-italic.ttf') format('truetype');
src: url('/assets/fonts/montserrat/montserrat-black-italic.ttf') format('truetype');
font-weight: 900;
font-style: italic;
}
@ -223,97 +223,97 @@
/* SourceCodePro */
@font-face {
font-family: 'SourceCodePro';
src: url('/static/general/fonts/sourcecodepro/sourcecodepro-extralight.ttf') format('truetype');
src: url('/assets/fonts/sourcecodepro/sourcecodepro-extralight.ttf') format('truetype');
font-weight: 200;
font-style: normal;
}
@font-face {
font-family: 'SourceCodePro';
src: url('/static/general/fonts/sourcecodepro/sourcecodepro-extralight-italic.ttf') format('truetype');
src: url('/assets/fonts/sourcecodepro/sourcecodepro-extralight-italic.ttf') format('truetype');
font-weight: 200;
font-style: italic;
}
@font-face {
font-family: 'SourceCodePro';
src: url('/static/general/fonts/sourcecodepro/sourcecodepro-light.ttf') format('truetype');
src: url('/assets/fonts/sourcecodepro/sourcecodepro-light.ttf') format('truetype');
font-weight: 300;
font-style: normal;
}
@font-face {
font-family: 'SourceCodePro';
src: url('/static/general/fonts/sourcecodepro/sourcecodepro-light-italic.ttf') format('truetype');
src: url('/assets/fonts/sourcecodepro/sourcecodepro-light-italic.ttf') format('truetype');
font-weight: 300;
font-style: italic;
}
@font-face {
font-family: 'SourceCodePro';
src: url('/static/general/fonts/sourcecodepro/sourcecodepro-regular.ttf') format('truetype');
src: url('/assets/fonts/sourcecodepro/sourcecodepro-regular.ttf') format('truetype');
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: 'SourceCodePro';
src: url('/static/general/fonts/sourcecodepro/sourcecodepro-regular-italic.ttf') format('truetype');
src: url('/assets/fonts/sourcecodepro/sourcecodepro-regular-italic.ttf') format('truetype');
font-weight: 400;
font-style: italic;
}
@font-face {
font-family: 'SourceCodePro';
src: url('/static/general/fonts/sourcecodepro/sourcecodepro-medium.ttf') format('truetype');
src: url('/assets/fonts/sourcecodepro/sourcecodepro-medium.ttf') format('truetype');
font-weight: 500;
font-style: normal;
}
@font-face {
font-family: 'SourceCodePro';
src: url('/static/general/fonts/sourcecodepro/sourcecodepro-medium-italic.ttf') format('truetype');
src: url('/assets/fonts/sourcecodepro/sourcecodepro-medium-italic.ttf') format('truetype');
font-weight: 500;
font-style: italic;
}
@font-face {
font-family: 'SourceCodePro';
src: url('/static/general/fonts/sourcecodepro/sourcecodepro-semibold.ttf') format('truetype');
src: url('/assets/fonts/sourcecodepro/sourcecodepro-semibold.ttf') format('truetype');
font-weight: 600;
font-style: normal;
}
@font-face {
font-family: 'SourceCodePro';
src: url('/static/general/fonts/sourcecodepro/sourcecodepro-semibold-italic.ttf') format('truetype');
src: url('/assets/fonts/sourcecodepro/sourcecodepro-semibold-italic.ttf') format('truetype');
font-weight: 600;
font-style: italic;
}
@font-face {
font-family: 'SourceCodePro';
src: url('/static/general/fonts/sourcecodepro/sourcecodepro-bold.ttf') format('truetype');
src: url('/assets/fonts/sourcecodepro/sourcecodepro-bold.ttf') format('truetype');
font-weight: 700;
font-style: normal;
}
@font-face {
font-family: 'SourceCodePro';
src: url('/static/general/fonts/sourcecodepro/sourcecodepro-bold-italic.ttf') format('truetype');
src: url('/assets/fonts/sourcecodepro/sourcecodepro-bold-italic.ttf') format('truetype');
font-weight: 700;
font-style: italic;
}
@font-face {
font-family: 'SourceCodePro';
src: url('/static/general/fonts/sourcecodepro/sourcecodepro-extrabold.ttf') format('truetype');
src: url('/assets/fonts/sourcecodepro/sourcecodepro-extrabold.ttf') format('truetype');
font-weight: 800;
font-style: normal;
}
@font-face {
font-family: 'SourceCodePro';
src: url('/static/general/fonts/sourcecodepro/sourcecodepro-extrabold-italic.ttf') format('truetype');
src: url('/assets/fonts/sourcecodepro/sourcecodepro-extrabold-italic.ttf') format('truetype');
font-weight: 800;
font-style: italic;
}
@font-face {
font-family: 'SourceCodePro';
src: url('/static/general/fonts/sourcecodepro/sourcecodepro-black.ttf') format('truetype');
src: url('/assets/fonts/sourcecodepro/sourcecodepro-black.ttf') format('truetype');
font-weight: 900;
font-style: normal;
}
@font-face {
font-family: 'SourceCodePro';
src: url('/static/general/fonts/sourcecodepro/sourcecodepro-black-italic.ttf') format('truetype');
src: url('/assets/fonts/sourcecodepro/sourcecodepro-black-italic.ttf') format('truetype');
font-weight: 900;
font-style: italic;
}
@ -322,49 +322,49 @@
/* Lora */
@font-face {
font-family: 'Lora';
src: url('/static/general/fonts/lora/lora-regular.ttf') format('truetype');
src: url('/assets/fonts/lora/lora-regular.ttf') format('truetype');
font-weight: 400;
font-style: normal;
}
@font-face {
font-family: 'Lora';
src: url('/static/general/fonts/lora/lora-regular-italic.ttf') format('truetype');
src: url('/assets/fonts/lora/lora-regular-italic.ttf') format('truetype');
font-weight: 400;
font-style: italic;
}
@font-face {
font-family: 'Lora';
src: url('/static/general/fonts/lora/lora-medium.ttf') format('truetype');
src: url('/assets/fonts/lora/lora-medium.ttf') format('truetype');
font-weight: 500;
font-style: normal;
}
@font-face {
font-family: 'Lora';
src: url('/static/general/fonts/lora/lora-medium-italic.ttf') format('truetype');
src: url('/assets/fonts/lora/lora-medium-italic.ttf') format('truetype');
font-weight: 500;
font-style: italic;
}
@font-face {
font-family: 'Lora';
src: url('/static/general/fonts/lora/lora-semibold.ttf') format('truetype');
src: url('/assets/fonts/lora/lora-semibold.ttf') format('truetype');
font-weight: 600;
font-style: normal;
}
@font-face {
font-family: 'Lora';
src: url('/static/general/fonts/lora/lora-semibold-italic.ttf') format('truetype');
src: url('/assets/fonts/lora/lora-semibold-italic.ttf') format('truetype');
font-weight: 600;
font-style: italic;
}
@font-face {
font-family: 'Lora';
src: url('/static/general/fonts/lora/lora-bold.ttf') format('truetype');
src: url('/assets/fonts/lora/lora-bold.ttf') format('truetype');
font-weight: 700;
font-style: normal;
}
@font-face {
font-family: 'Lora';
src: url('/static/general/fonts/lora/lora-bold-italic.ttf') format('truetype');
src: url('/assets/fonts/lora/lora-bold-italic.ttf') format('truetype');
font-weight: 700;
font-style: italic;
}
@ -373,7 +373,7 @@
/* NotoColorEmoji */
@font-face {
font-family: 'NotoColorEmoji';
src: url('/static/general/fonts/notocoloremoji/notocoloremoji-regular.ttf') format('truetype');
src: url('/assets/fonts/notocoloremoji/notocoloremoji-regular.ttf') format('truetype');
font-weight: 400;
font-style: normal;
}

View File

@ -1,7 +1,7 @@
@import "./fonts.css";
@import 'tailwindcss/base';
@import 'tailwindcss/components';
@import 'tailwindcss/utilities';
@import "./fonts.css";
h1, h2, h3, h4, h5, h6 {
font-family: Kanit;

2
assets/main.js Normal file
View File

@ -0,0 +1,2 @@
import './css/styles.css';
import './ts/index.ts';

1
assets/ts/index.ts Normal file
View File

@ -0,0 +1 @@

4296
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

24
package.json Normal file
View File

@ -0,0 +1,24 @@
{
"name": "medwings",
"version": "0.0.1",
"description": "Mobile Early Deterioration Warning System.",
"main": "index.js",
"author": "Julian Lobbes",
"license": "AGPL-3.0",
"source": "./assets/js/entry.js",
"targets": {
"default": {
"distDir": "./app/static/dist/"
}
},
"scripts": {
"build": "parcel build --dist-dir app/static/dist assets/main.js",
"start": "parcel --dist-dir app/static/dist --hmr-port 34471 assets/main.js"
},
"devDependencies": {
"autoprefixer": "^10.4.14",
"parcel": "^2.9.3",
"postcss": "^8.4.26",
"tailwindcss": "^3.3.3"
}
}

80
tailwind.config.js Normal file
View File

@ -0,0 +1,80 @@
/** @type {import('tailwindcss').Config} */
export default {
content: ['./app/*/templates/**/*.html'],
theme: {
extend: {
fontFamily: {
sans: ["Montserrat", "NotoColorEmoji"],
serif: ["Lora", "NotoColorEmoji"],
mono: ["SourceCodePro", "NotoColorEmoji"],
accent: ["Kanit", "NotoColorEmoji"],
emoji: ["NotoColorEmoji"],
},
colors: {
transparent: "transparent",
current: "currentColor",
primary: {
50: "#D5E8EC",
100: "#9CCAD3",
200: "#4B9AAA",
300: "#326671",
400: "#1F4047",
500: "#0D1B1E",
DEFAULT: "#0D1B1E",
600: "#0C191C",
700: "#070F11",
800: "#040809",
900: "#000000",
},
secondary: {
50: "#F3F7F5",
100: "#DBE6E2",
200: "#B6CDC5",
300: "#9EBDB2",
400: "#86AC9F",
500: "#6C9A8B",
DEFAULT: "#6C9A8B",
600: "#5B8677",
700: "#4A6D61",
800: "#3A554B",
900: "#192420",
},
accent: {
50: "#FFF9EB",
100: "#FFEDC2",
200: "#FFE7AD",
300: "#FFDA85",
400: "#FFCE5C",
500: "#FFC233",
DEFAULT: "#FFC233",
600: "#FFB60A",
700: "#E09D00",
800: "#A37200",
900: "#523900",
},
background: {
50: "#FFFFFF",
100: "#FFFFFF",
200: "#FFFFFF",
300: "#FFFFFF",
400: "#FFFFFF",
500: "#FCFCFC",
DEFAULT: "#FCFCFC",
600: "#CCCCCC",
700: "#A3A3A3",
800: "#707070",
900: "#333333",
},
success: "#00CC00",
warning: "#EDC000",
failure: "#E40000",
},
screens: {
'3xl': '1920px',
'4xl': '3840px',
}
},
},
plugins: [],
}