mirror of
https://github.com/Cian-H/am-d-model.eu.git
synced 2025-12-22 21:41:57 +00:00
Project format
This commit is contained in:
@@ -27,195 +27,195 @@ services:
|
|||||||
labels:
|
labels:
|
||||||
- "io.containers.autoupdate=registry"
|
- "io.containers.autoupdate=registry"
|
||||||
invenio-rdm:
|
invenio-rdm:
|
||||||
image: ghcr.io/front-matter/invenio-rdm-starter:latest
|
image: ghcr.io/front-matter/invenio-rdm-starter:latest
|
||||||
networks:
|
networks:
|
||||||
- am-d-model-network
|
- am-d-model-network
|
||||||
pull_policy: if_not_present
|
pull_policy: if_not_present
|
||||||
volumes:
|
volumes:
|
||||||
- uploaded_data:/opt/invenio/var/instance/data
|
- uploaded_data:/opt/invenio/var/instance/data
|
||||||
- archived_data:/opt/invenio/var/instance/archive
|
- archived_data:/opt/invenio/var/instance/archive
|
||||||
environment:
|
environment:
|
||||||
# Flask
|
# Flask
|
||||||
- INVENIO_APP_ALLOWED_HOSTS=${INVENIO_APP_ALLOWED_HOSTS:-['0.0.0.0', 'localhost', '127.0.0.1']}
|
- INVENIO_APP_ALLOWED_HOSTS=${INVENIO_APP_ALLOWED_HOSTS:-['0.0.0.0', 'localhost', '127.0.0.1']}
|
||||||
|
|
||||||
# Flask-SQLAlchemy
|
# Flask-SQLAlchemy
|
||||||
- INVENIO_SQLALCHEMY_DATABASE_URI=postgresql+psycopg2://${POSTGRES_USER:-inveniordm}:${POSTGRES_PASSWORD:-inveniordm}@db/${POSTGRES_DB:-inveniordm}
|
- INVENIO_SQLALCHEMY_DATABASE_URI=postgresql+psycopg2://${POSTGRES_USER:-inveniordm}:${POSTGRES_PASSWORD:-inveniordm}@db/${POSTGRES_DB:-inveniordm}
|
||||||
|
|
||||||
# Flask-Babel
|
# Flask-Babel
|
||||||
- INVENIO_BABEL_DEFAULT_LOCALE=${INVENIO_BABEL_DEFAULT_LOCALE:-en}
|
- INVENIO_BABEL_DEFAULT_LOCALE=${INVENIO_BABEL_DEFAULT_LOCALE:-en}
|
||||||
- INVENIO_BABEL_DEFAULT_TIMEZONE=${INVENIO_BABEL_DEFAULT_TIMEZONE:-UTC}
|
- INVENIO_BABEL_DEFAULT_TIMEZONE=${INVENIO_BABEL_DEFAULT_TIMEZONE:-UTC}
|
||||||
|
|
||||||
# Invenio-App
|
# Invenio-App
|
||||||
- INVENIO_CACHE_TYPE=${INVENIO_CACHE_TYPE:-redis}
|
- INVENIO_CACHE_TYPE=${INVENIO_CACHE_TYPE:-redis}
|
||||||
- INVENIO_CACHE_REDIS_URL=${INVENIO_CACHE_REDIS_URL:-redis://cache:6379/0}
|
- INVENIO_CACHE_REDIS_URL=${INVENIO_CACHE_REDIS_URL:-redis://cache:6379/0}
|
||||||
- INVENIO_ACCOUNTS_SESSION_REDIS_URL=${INVENIO_ACCOUNTS_SESSION_REDIS_URL:-redis://cache:6379/1}
|
- INVENIO_ACCOUNTS_SESSION_REDIS_URL=${INVENIO_ACCOUNTS_SESSION_REDIS_URL:-redis://cache:6379/1}
|
||||||
- INVENIO_CELERY_RESULT_BACKEND=${INVENIO_CELERY_RESULT_BACKEND:-redis://cache:6379/2}
|
- INVENIO_CELERY_RESULT_BACKEND=${INVENIO_CELERY_RESULT_BACKEND:-redis://cache:6379/2}
|
||||||
- INVENIO_RATELIMIT_STORAGE_URL=${INVENIO_RATELIMIT_STORAGE_URL:-redis://cache:6379/3}
|
- INVENIO_RATELIMIT_STORAGE_URL=${INVENIO_RATELIMIT_STORAGE_URL:-redis://cache:6379/3}
|
||||||
- INVENIO_COMMUNITIES_IDENTITIES_CACHE_REDIS_URL=${INVENIO_COMMUNITIES_IDENTITIES_CACHE_REDIS_URL:-redis://cache:6379/4}
|
- INVENIO_COMMUNITIES_IDENTITIES_CACHE_REDIS_URL=${INVENIO_COMMUNITIES_IDENTITIES_CACHE_REDIS_URL:-redis://cache:6379/4}
|
||||||
- INVENIO_BROKER_URL=${INVENIO_BROKER_URL:-redis://cache:6379/5}
|
- INVENIO_BROKER_URL=${INVENIO_BROKER_URL:-redis://cache:6379/5}
|
||||||
- INVENIO_CELERY_BROKER_URL=${INVENIO_BROKER_URL:-redis://cache:6379/5}
|
- INVENIO_CELERY_BROKER_URL=${INVENIO_BROKER_URL:-redis://cache:6379/5}
|
||||||
|
|
||||||
- INVENIO_WSGI_PROXIES=4
|
- INVENIO_WSGI_PROXIES=4
|
||||||
- INVENIO_SECRET_KEY=${INVENIO_SECRET_KEY:-changeme}
|
- INVENIO_SECRET_KEY=${INVENIO_SECRET_KEY:-changeme}
|
||||||
|
|
||||||
# Invenio-I18N
|
# Invenio-I18N
|
||||||
# TODO: fix tuple parsing
|
# TODO: fix tuple parsing
|
||||||
# - INVENIO_I18N_LANGUAGES=${INVENIO_I18N_LANGUAGES:-'[("de", _("German"))]'}
|
# - INVENIO_I18N_LANGUAGES=${INVENIO_I18N_LANGUAGES:-'[("de", _("German"))]'}
|
||||||
|
|
||||||
# Invenio-Theme
|
# Invenio-Theme
|
||||||
- INVENIO_THEME_LOGO=${INVENIO_THEME_LOGO:-images/invenio-rdm-white.svg}
|
- INVENIO_THEME_LOGO=${INVENIO_THEME_LOGO:-images/invenio-rdm-white.svg}
|
||||||
- INVENIO_THEME_SITENAME=${INVENIO_THEME_SITENAME:-InvenioRDM Starter}
|
- INVENIO_THEME_SITENAME=${INVENIO_THEME_SITENAME:-InvenioRDM Starter}
|
||||||
- INVENIO_THEME_FRONTPAGE_TITLE=${INVENIO_THEME_FRONTPAGE_TITLE:-InvenioRDM Starter}
|
- INVENIO_THEME_FRONTPAGE_TITLE=${INVENIO_THEME_FRONTPAGE_TITLE:-InvenioRDM Starter}
|
||||||
- INVENIO_THEME_FRONTPAGE_SUBTITLE=${INVENIO_THEME_FRONTPAGE_SUBTITLE:-A starter project for the turn-key research data management repository.}
|
- INVENIO_THEME_FRONTPAGE_SUBTITLE=${INVENIO_THEME_FRONTPAGE_SUBTITLE:-A starter project for the turn-key research data management repository.}
|
||||||
- INVENIO_THEME_SHOW_FRONTPAGE_INTRO_SECTION=False
|
- INVENIO_THEME_SHOW_FRONTPAGE_INTRO_SECTION=False
|
||||||
|
|
||||||
# Invenio-Records-Resources
|
# Invenio-Records-Resources
|
||||||
- INVENIO_SITE_UI_URL=${INVENIO_SITE_UI_URL:-https://localhost}
|
- INVENIO_SITE_UI_URL=${INVENIO_SITE_UI_URL:-https://localhost}
|
||||||
- INVENIO_SITE_API_URL=${INVENIO_SITE_API_URL:-https://localhost/api}
|
- INVENIO_SITE_API_URL=${INVENIO_SITE_API_URL:-https://localhost/api}
|
||||||
|
|
||||||
# Invenio-RDM-Records
|
# Invenio-RDM-Records
|
||||||
- INVENIO_DATACITE_ENABLED=${INVENIO_DATACITE_ENABLED:-False}
|
- INVENIO_DATACITE_ENABLED=${INVENIO_DATACITE_ENABLED:-False}
|
||||||
- INVENIO_DATACITE_USERNAME=${INVENIO_DATACITE_USERNAME:-}
|
- INVENIO_DATACITE_USERNAME=${INVENIO_DATACITE_USERNAME:-}
|
||||||
- INVENIO_DATACITE_PASSWORD=${INVENIO_DATACITE_PASSWORD:-}
|
- INVENIO_DATACITE_PASSWORD=${INVENIO_DATACITE_PASSWORD:-}
|
||||||
- INVENIO_DATACITE_PREFIX=${INVENIO_DATACITE_PREFIX:-}
|
- INVENIO_DATACITE_PREFIX=${INVENIO_DATACITE_PREFIX:-}
|
||||||
- INVENIO_DATACITE_TEST_MODE=${INVENIO_DATACITE_TEST_MODE:-True}
|
- INVENIO_DATACITE_TEST_MODE=${INVENIO_DATACITE_TEST_MODE:-True}
|
||||||
- INVENIO_DATACITE_DATACENTER_SYMBOL=${INVENIO_DATACITE_DATACENTER_SYMBOL:-}
|
- INVENIO_DATACITE_DATACENTER_SYMBOL=${INVENIO_DATACITE_DATACENTER_SYMBOL:-}
|
||||||
|
|
||||||
- INVENIO_RDM_ALLOW_METADATA_ONLY_RECORDS=${INVENIO_RDM_ALLOW_METADATA_ONLY_RECORDS:-True}
|
- INVENIO_RDM_ALLOW_METADATA_ONLY_RECORDS=${INVENIO_RDM_ALLOW_METADATA_ONLY_RECORDS:-True}
|
||||||
- INVENIO_RDM_ALLOW_RESTRICTED_RECORDS=${INVENIO_RDM_ALLOW_RESTRICTED_RECORDS:-True}
|
- INVENIO_RDM_ALLOW_RESTRICTED_RECORDS=${INVENIO_RDM_ALLOW_RESTRICTED_RECORDS:-True}
|
||||||
- INVENIO_RDM_ALLOW_EXTERNAL_DOI_VERSIONING=${INVENIO_RDM_ALLOW_EXTERNAL_DOI_VERSIONING:-True}
|
- INVENIO_RDM_ALLOW_EXTERNAL_DOI_VERSIONING=${INVENIO_RDM_ALLOW_EXTERNAL_DOI_VERSIONING:-True}
|
||||||
|
|
||||||
- INVENIO_RDM_CITATION_STYLES_DEFAULT=${INVENIO_RDM_CITATION_STYLES_DEFAULT:-apa}
|
- INVENIO_RDM_CITATION_STYLES_DEFAULT=${INVENIO_RDM_CITATION_STYLES_DEFAULT:-apa}
|
||||||
- INVENIO_SECURITY_EMAIL_SENDER=${INVENIO_SECURITY_EMAIL_SENDER:-}
|
- INVENIO_SECURITY_EMAIL_SENDER=${INVENIO_SECURITY_EMAIL_SENDER:-}
|
||||||
# TODO: fix tuple parsing
|
# TODO: fix tuple parsing
|
||||||
# - INVENIO_RDM_CITATION_STYLES=${INVENIO_RDM_CITATION_STYLES:-"[('apa', 'APA'), ('chicago-note-bibliography', 'Chicago'), ('harvard-cite-them-right', 'Harvard')]"}
|
# - INVENIO_RDM_CITATION_STYLES=${INVENIO_RDM_CITATION_STYLES:-"[('apa', 'APA'), ('chicago-note-bibliography', 'Chicago'), ('harvard-cite-them-right', 'Harvard')]"}
|
||||||
|
|
||||||
# Invenio-Accounts
|
# Invenio-Accounts
|
||||||
- INVENIO_ACCOUNTS_LOCAL_LOGIN_ENABLED=${INVENIO_ACCOUNTS_LOCAL_LOGIN_ENABLED:-True}
|
- INVENIO_ACCOUNTS_LOCAL_LOGIN_ENABLED=${INVENIO_ACCOUNTS_LOCAL_LOGIN_ENABLED:-True}
|
||||||
- INVENIO_GITHUB_APP_CREDENTIALS=${INVENIO_GITHUB_APP_CREDENTIALS:-}
|
- INVENIO_GITHUB_APP_CREDENTIALS=${INVENIO_GITHUB_APP_CREDENTIALS:-}
|
||||||
|
|
||||||
# OAI-PMH
|
# OAI-PMH
|
||||||
- INVENIO_OAISERVER_ID_PREFIX=${OAISERVER_ID_PREFIX:-invenio-rdm}
|
- INVENIO_OAISERVER_ID_PREFIX=${OAISERVER_ID_PREFIX:-invenio-rdm}
|
||||||
|
|
||||||
# Invenio-Files-REST
|
# Invenio-Files-REST
|
||||||
- INVENIO_FILES_REST_STORAGE_FACTORY=invenio_s3.s3fs_storage_factory
|
- INVENIO_FILES_REST_STORAGE_FACTORY=invenio_s3.s3fs_storage_factory
|
||||||
|
|
||||||
# Invenio-S3
|
# Invenio-S3
|
||||||
- INVENIO_S3_ENDPOINT_URL=${INVENIO_S3_ENDPOINT_URL:-}
|
- INVENIO_S3_ENDPOINT_URL=${INVENIO_S3_ENDPOINT_URL:-}
|
||||||
- INVENIO_S3_ACCESS_KEY_ID=${INVENIO_S3_ACCESS_KEY_ID:-}
|
- INVENIO_S3_ACCESS_KEY_ID=${INVENIO_S3_ACCESS_KEY_ID:-}
|
||||||
- INVENIO_S3_SECRET_ACCESS_KEY=${INVENIO_S3_SECRET_ACCESS_KEY:-}
|
- INVENIO_S3_SECRET_ACCESS_KEY=${INVENIO_S3_SECRET_ACCESS_KEY:-}
|
||||||
- INVENIO_S3_BUCKET_NAME=${INVENIO_S3_BUCKET_NAME:-}
|
- INVENIO_S3_BUCKET_NAME=${INVENIO_S3_BUCKET_NAME:-}
|
||||||
|
|
||||||
# Invenio-Search
|
# Invenio-Search
|
||||||
- INVENIO_SEARCH_HOSTS=${INVENIO_SEARCH_HOSTS:-['search:9200']}
|
- INVENIO_SEARCH_HOSTS=${INVENIO_SEARCH_HOSTS:-['search:9200']}
|
||||||
- INVENIO_SEARCH_INDEX_PREFIX=${INVENIO_SEARCH_INDEX_PREFIX:-invenio-rdm-}
|
- INVENIO_SEARCH_INDEX_PREFIX=${INVENIO_SEARCH_INDEX_PREFIX:-invenio-rdm-}
|
||||||
|
|
||||||
# Logging
|
# Logging
|
||||||
- INVENIO_LOGGING_CONSOLE_LEVEL=${INVENIO_LOGGING_CONSOLE_LEVEL:-WARNING}
|
- INVENIO_LOGGING_CONSOLE_LEVEL=${INVENIO_LOGGING_CONSOLE_LEVEL:-WARNING}
|
||||||
depends_on:
|
depends_on:
|
||||||
search:
|
search:
|
||||||
condition: service_started
|
condition: service_started
|
||||||
cache:
|
cache:
|
||||||
condition: service_started
|
condition: service_started
|
||||||
db:
|
db:
|
||||||
condition: service_started
|
condition: service_started
|
||||||
worker:
|
worker:
|
||||||
command: "celery -A invenio_app.celery worker --beat --events --loglevel=WARNING"
|
command: "celery -A invenio_app.celery worker --beat --events --loglevel=WARNING"
|
||||||
networks:
|
networks:
|
||||||
- am-d-model-network
|
- am-d-model-network
|
||||||
image: ghcr.io/front-matter/invenio-rdm-starter:latest
|
image: ghcr.io/front-matter/invenio-rdm-starter:latest
|
||||||
pull_policy: if_not_present
|
pull_policy: if_not_present
|
||||||
volumes:
|
volumes:
|
||||||
- uploaded_data:/opt/invenio/var/instance/data
|
- uploaded_data:/opt/invenio/var/instance/data
|
||||||
environment:
|
environment:
|
||||||
- INVENIO_SQLALCHEMY_DATABASE_URI=postgresql+psycopg2://${POSTGRES_USER:-inveniordm}:${POSTGRES_PASSWORD:-inveniordm}@db/${POSTGRES_DB:-inveniordm}
|
- INVENIO_SQLALCHEMY_DATABASE_URI=postgresql+psycopg2://${POSTGRES_USER:-inveniordm}:${POSTGRES_PASSWORD:-inveniordm}@db/${POSTGRES_DB:-inveniordm}
|
||||||
- INVENIO_SEARCH_HOSTS=${INVENIO_SEARCH_HOSTS:-['search:9200']}
|
- INVENIO_SEARCH_HOSTS=${INVENIO_SEARCH_HOSTS:-['search:9200']}
|
||||||
- INVENIO_SEARCH_INDEX_PREFIX=${INVENIO_SEARCH_INDEX_PREFIX:-invenio-rdm-}
|
- INVENIO_SEARCH_INDEX_PREFIX=${INVENIO_SEARCH_INDEX_PREFIX:-invenio-rdm-}
|
||||||
|
|
||||||
- INVENIO_CACHE_TYPE=${INVENIO_CACHE_TYPE:-redis}
|
- INVENIO_CACHE_TYPE=${INVENIO_CACHE_TYPE:-redis}
|
||||||
- INVENIO_CACHE_REDIS_URL=${INVENIO_CACHE_REDIS_URL:-redis://cache:6379/0}
|
- INVENIO_CACHE_REDIS_URL=${INVENIO_CACHE_REDIS_URL:-redis://cache:6379/0}
|
||||||
- INVENIO_ACCOUNTS_SESSION_REDIS_URL=${INVENIO_ACCOUNTS_SESSION_REDIS_URL:-redis://cache:6379/1}
|
- INVENIO_ACCOUNTS_SESSION_REDIS_URL=${INVENIO_ACCOUNTS_SESSION_REDIS_URL:-redis://cache:6379/1}
|
||||||
- INVENIO_CELERY_RESULT_BACKEND=${INVENIO_CELERY_RESULT_BACKEND:-redis://cache:6379/2}
|
- INVENIO_CELERY_RESULT_BACKEND=${INVENIO_CELERY_RESULT_BACKEND:-redis://cache:6379/2}
|
||||||
- INVENIO_RATELIMIT_STORAGE_URL=${INVENIO_RATELIMIT_STORAGE_URL:-redis://cache:6379/3}
|
- INVENIO_RATELIMIT_STORAGE_URL=${INVENIO_RATELIMIT_STORAGE_URL:-redis://cache:6379/3}
|
||||||
- INVENIO_COMMUNITIES_IDENTITIES_CACHE_REDIS_URL=${INVENIO_COMMUNITIES_IDENTITIES_CACHE_REDIS_URL:-redis://cache:6379/4}
|
- INVENIO_COMMUNITIES_IDENTITIES_CACHE_REDIS_URL=${INVENIO_COMMUNITIES_IDENTITIES_CACHE_REDIS_URL:-redis://cache:6379/4}
|
||||||
- INVENIO_BROKER_URL=${INVENIO_BROKER_URL:-redis://cache:6379/5}
|
- INVENIO_BROKER_URL=${INVENIO_BROKER_URL:-redis://cache:6379/5}
|
||||||
- INVENIO_CELERY_BROKER_URL=${INVENIO_BROKER_URL:-redis://cache:6379/5}
|
- INVENIO_CELERY_BROKER_URL=${INVENIO_BROKER_URL:-redis://cache:6379/5}
|
||||||
|
|
||||||
- INVENIO_MAIL_SUPPRESS_SEND=${INVENIO_MAIL_SUPPRESS_SEND:-True}
|
- INVENIO_MAIL_SUPPRESS_SEND=${INVENIO_MAIL_SUPPRESS_SEND:-True}
|
||||||
- INVENIO_MAIL_SERVER=${INVENIO_MAIL_SERVER:-smtp.gmail.com}
|
- INVENIO_MAIL_SERVER=${INVENIO_MAIL_SERVER:-smtp.gmail.com}
|
||||||
- INVENIO_MAIL_PORT=${INVENIO_MAIL_PORT:-465}
|
- INVENIO_MAIL_PORT=${INVENIO_MAIL_PORT:-465}
|
||||||
- INVENIO_MAIL_USERNAME=${INVENIO_MAIL_USERNAME:-info}
|
- INVENIO_MAIL_USERNAME=${INVENIO_MAIL_USERNAME:-info}
|
||||||
- INVENIO_MAIL_PASSWORD=${INVENIO_MAIL_PASSWORD:-changeme}
|
- INVENIO_MAIL_PASSWORD=${INVENIO_MAIL_PASSWORD:-changeme}
|
||||||
- INVENIO_MAIL_USE_SSL=${INVENIO_MAIL_USE_SSL:-True}
|
- INVENIO_MAIL_USE_SSL=${INVENIO_MAIL_USE_SSL:-True}
|
||||||
|
|
||||||
# Invenio-Files-REST
|
# Invenio-Files-REST
|
||||||
- INVENIO_FILES_REST_STORAGE_FACTORY=${INVENIO_FILES_REST_STORAGE_FACTORY:-invenio_s3.s3fs_storage_factory}
|
- INVENIO_FILES_REST_STORAGE_FACTORY=${INVENIO_FILES_REST_STORAGE_FACTORY:-invenio_s3.s3fs_storage_factory}
|
||||||
|
|
||||||
# Invenio-S3
|
# Invenio-S3
|
||||||
- INVENIO_S3_ENDPOINT_URL=${INVENIO_S3_ENDPOINT_URL:-}
|
- INVENIO_S3_ENDPOINT_URL=${INVENIO_S3_ENDPOINT_URL:-}
|
||||||
- INVENIO_S3_ACCESS_KEY_ID=${INVENIO_S3_ACCESS_KEY_ID:-}
|
- INVENIO_S3_ACCESS_KEY_ID=${INVENIO_S3_ACCESS_KEY_ID:-}
|
||||||
- INVENIO_S3_SECRET_ACCESS_KEY=${INVENIO_S3_SECRET_ACCESS_KEY:-}
|
- INVENIO_S3_SECRET_ACCESS_KEY=${INVENIO_S3_SECRET_ACCESS_KEY:-}
|
||||||
- INVENIO_S3_BUCKET_NAME=${INVENIO_S3_BUCKET_NAME:-}
|
- INVENIO_S3_BUCKET_NAME=${INVENIO_S3_BUCKET_NAME:-}
|
||||||
depends_on:
|
depends_on:
|
||||||
search:
|
search:
|
||||||
condition: service_started
|
condition: service_started
|
||||||
cache:
|
cache:
|
||||||
condition: service_started
|
condition: service_started
|
||||||
db:
|
db:
|
||||||
condition: service_started
|
condition: service_started
|
||||||
cache:
|
cache:
|
||||||
image: valkey/valkey:7.2.5-bookworm
|
image: valkey/valkey:7.2.5-bookworm
|
||||||
networks:
|
networks:
|
||||||
- am-d-model-network
|
- am-d-model-network
|
||||||
restart: "unless-stopped"
|
restart: "unless-stopped"
|
||||||
volumes:
|
volumes:
|
||||||
- "valkey_data:/data"
|
- "valkey_data:/data"
|
||||||
ports:
|
ports:
|
||||||
- "6379:6379"
|
- "6379:6379"
|
||||||
db:
|
db:
|
||||||
image: postgres:16.4-bookworm
|
image: postgres:16.4-bookworm
|
||||||
networks:
|
networks:
|
||||||
- am-d-model-network
|
- am-d-model-network
|
||||||
restart: "unless-stopped"
|
restart: "unless-stopped"
|
||||||
environment:
|
environment:
|
||||||
- POSTGRES_USER=${POSTGRES_USER:-inveniordm}
|
- POSTGRES_USER=${POSTGRES_USER:-inveniordm}
|
||||||
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-inveniordm}
|
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-inveniordm}
|
||||||
- POSTGRES_DB=${POSTGRES_DB:-inveniordm}
|
- POSTGRES_DB=${POSTGRES_DB:-inveniordm}
|
||||||
volumes:
|
volumes:
|
||||||
- "postgres_data:/var/lib/postgresql/data"
|
- "postgres_data:/var/lib/postgresql/data"
|
||||||
ports:
|
ports:
|
||||||
- 5432:5432
|
- 5432:5432
|
||||||
search:
|
search:
|
||||||
image: opensearchproject/opensearch:2.12.0
|
image: opensearchproject/opensearch:2.12.0
|
||||||
networks:
|
networks:
|
||||||
- am-d-model-network
|
- am-d-model-network
|
||||||
restart: "unless-stopped"
|
restart: "unless-stopped"
|
||||||
environment:
|
environment:
|
||||||
- bootstrap.memory_lock=true
|
- bootstrap.memory_lock=true
|
||||||
- OPENSEARCH_JAVA_OPTS=-Xms256m -Xmx256m
|
- OPENSEARCH_JAVA_OPTS=-Xms256m -Xmx256m
|
||||||
- DISABLE_INSTALL_DEMO_CONFIG=true
|
- DISABLE_INSTALL_DEMO_CONFIG=true
|
||||||
- DISABLE_SECURITY_PLUGIN=true
|
- DISABLE_SECURITY_PLUGIN=true
|
||||||
- discovery.type=single-node
|
- discovery.type=single-node
|
||||||
ulimits:
|
ulimits:
|
||||||
memlock:
|
memlock:
|
||||||
soft: -1
|
soft: -1
|
||||||
hard: -1
|
hard: -1
|
||||||
nofile:
|
nofile:
|
||||||
soft: 65536
|
soft: 65536
|
||||||
hard: 65536
|
hard: 65536
|
||||||
mem_limit: 1g
|
mem_limit: 1g
|
||||||
ports:
|
ports:
|
||||||
- "9200:9200"
|
- "9200:9200"
|
||||||
- "9600:9600"
|
- "9600:9600"
|
||||||
|
|
||||||
networks:
|
networks:
|
||||||
am-d-model-network:
|
am-d-model-network:
|
||||||
name: am-d-model-network
|
name: am-d-model-network
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
app_data:
|
app_data:
|
||||||
uploaded_data:
|
uploaded_data:
|
||||||
archived_data:
|
archived_data:
|
||||||
postgres_data:
|
postgres_data:
|
||||||
valkey_data:
|
valkey_data:
|
||||||
caddy_data:
|
caddy_data:
|
||||||
|
|||||||
@@ -4,11 +4,7 @@
|
|||||||
export let hotkey = "";
|
export let hotkey = "";
|
||||||
|
|
||||||
function handleKeypress(event) {
|
function handleKeypress(event) {
|
||||||
if (
|
if (event.key === hotkey || event.key === "Enter" || event.key === " ") {
|
||||||
event.key === hotkey ||
|
|
||||||
event.key === "Enter" ||
|
|
||||||
event.key === " "
|
|
||||||
) {
|
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
redirectFunc();
|
redirectFunc();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,9 @@ export const navigation = {
|
|||||||
toHome: () => goto("/"),
|
toHome: () => goto("/"),
|
||||||
toAbout: () => goto("/about"),
|
toAbout: () => goto("/about"),
|
||||||
toContact: () => goto("/contact"),
|
toContact: () => goto("/contact"),
|
||||||
toRepository: () => { window.location.href = "https://invenio.am-d-model.eu/" },
|
toRepository: () => {
|
||||||
|
window.location.href = "https://invenio.am-d-model.eu/";
|
||||||
|
},
|
||||||
to404: () => {
|
to404: () => {
|
||||||
throw error(404, "Page not found");
|
throw error(404, "Page not found");
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,96 +1,96 @@
|
|||||||
.navigation-footer {
|
.navigation-footer {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
background: #ffffff;
|
background: #ffffff;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 240px;
|
height: 240px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.navigation-footer-column {
|
.navigation-footer-column {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
position: relative;
|
position: relative;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
width: 33%;
|
width: 33%;
|
||||||
padding: 32px;
|
padding: 32px;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.navigation-footer-logo-link {
|
.navigation-footer-logo-link {
|
||||||
max-width: 180px;
|
max-width: 180px;
|
||||||
padding-left: 24px;
|
padding-left: 24px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.navigation-footer-logo {
|
.navigation-footer-logo {
|
||||||
height: 180px;
|
height: 180px;
|
||||||
max-width: 180px;
|
max-width: 180px;
|
||||||
width: auto;
|
width: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.navigation-footer-column-left {
|
.navigation-footer-column-left {
|
||||||
@extend .navigation-footer-column;
|
@extend .navigation-footer-column;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
}
|
}
|
||||||
|
|
||||||
.navigation-footer-column-mid {
|
.navigation-footer-column-mid {
|
||||||
@extend .navigation-footer-column;
|
@extend .navigation-footer-column;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.navigation-footer-column-right {
|
.navigation-footer-column-right {
|
||||||
@extend .navigation-footer-column;
|
@extend .navigation-footer-column;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.navigation-footer-site-name {
|
.navigation-footer-site-name {
|
||||||
color: #000000;
|
color: #000000;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
font-family: "Assistant", sans-serif;
|
font-family: "Assistant", sans-serif;
|
||||||
font-size: 24px;
|
font-size: 24px;
|
||||||
position: relative;
|
position: relative;
|
||||||
padding: 8px;
|
padding: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.navigation-footer-topic-column {
|
.navigation-footer-topic-column {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
.navigation-footer-topic {
|
.navigation-footer-topic {
|
||||||
color: #000000;
|
color: #000000;
|
||||||
font-family: "Assistant", sans-serif;
|
font-family: "Assistant", sans-serif;
|
||||||
font-size: 28px;
|
font-size: 28px;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
.navigation-footer-link {
|
.navigation-footer-link {
|
||||||
color: #454545;
|
color: #454545;
|
||||||
font-family: "Assistant", sans-serif;
|
font-family: "Assistant", sans-serif;
|
||||||
font-size: 24px;
|
font-size: 24px;
|
||||||
text-decoration: underline;
|
text-decoration: underline;
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
.navigation-footer-social-icon {
|
.navigation-footer-social-icon {
|
||||||
width: 24px;
|
width: 24px;
|
||||||
height: 24px;
|
height: 24px;
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
.navigation-footer-social-media {
|
.navigation-footer-social-media {
|
||||||
// display: flex; # temporarily disable
|
// display: flex; # temporarily disable
|
||||||
display: none;
|
display: none;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
gap: var(--spacing-xs, 8px);
|
gap: var(--spacing-xs, 8px);
|
||||||
align-items: flex-start;
|
align-items: flex-start;
|
||||||
justify-content: flex-start;
|
justify-content: flex-start;
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
.navigation-footer-buttons-icon {
|
.navigation-footer-buttons-icon {
|
||||||
|
|||||||
@@ -1,88 +1,88 @@
|
|||||||
.navigation-header {
|
.navigation-header {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row-reverse;
|
flex-direction: row-reverse;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
}
|
}
|
||||||
|
|
||||||
.navigation-header {
|
.navigation-header {
|
||||||
position: relative;
|
position: relative;
|
||||||
height: 128px;
|
height: 128px;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
padding-bottom: 120px;
|
padding-bottom: 120px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.navigation-header-items {
|
.navigation-header-items {
|
||||||
gap: 48px;
|
gap: 48px;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
position: relative;
|
position: relative;
|
||||||
padding-top: 28px;
|
padding-top: 28px;
|
||||||
padding-right: 96px;
|
padding-right: 96px;
|
||||||
padding-left: 32px;
|
padding-left: 32px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.navigation-header-link {
|
.navigation-header-link {
|
||||||
color: #000000;
|
color: #000000;
|
||||||
font-family: var(--navigation-header-font-family);
|
font-family: var(--navigation-header-font-family);
|
||||||
text-align: left;
|
text-align: left;
|
||||||
font-size: var(--navigation-header-font-size);
|
font-size: var(--navigation-header-font-size);
|
||||||
position: relative;
|
position: relative;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: flex-start;
|
justify-content: flex-start;
|
||||||
}
|
}
|
||||||
|
|
||||||
.navigation-header-button {
|
.navigation-header-button {
|
||||||
background: #000000;
|
background: #000000;
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
padding: 14px 24px 14px 24px;
|
padding: 14px 24px 14px 24px;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
gap: 8px;
|
gap: 8px;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
position: relative;
|
position: relative;
|
||||||
box-shadow: var(--button-shadow-box-shadow, 0px 1px 2px 0px rgba(0, 0, 0, 0.05));
|
box-shadow: var(--button-shadow-box-shadow, 0px 1px 2px 0px rgba(0, 0, 0, 0.05));
|
||||||
}
|
}
|
||||||
|
|
||||||
.navigation-header-button-text {
|
.navigation-header-button-text {
|
||||||
@extend .navigation-header-link;
|
@extend .navigation-header-link;
|
||||||
color: var(--cpalettecomplimentary);
|
color: var(--cpalettecomplimentary);
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.navigation-header-logo-link {
|
.navigation-header-logo-link {
|
||||||
@extend .navigation-header-items;
|
@extend .navigation-header-items;
|
||||||
min-width: 128px;
|
min-width: 128px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.navigation-header-logo {
|
.navigation-header-logo {
|
||||||
height: 128px;
|
height: 128px;
|
||||||
width: auto;
|
width: auto;
|
||||||
max-width: 128px;
|
max-width: 128px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.navigation-header-logo {
|
.navigation-header-logo {
|
||||||
height: 128px;
|
height: 128px;
|
||||||
width: auto;
|
width: auto;
|
||||||
padding-left: 28px;
|
padding-left: 28px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.flexrow-right {
|
.flexrow-right {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
justify-content: flex-end;
|
justify-content: flex-end;
|
||||||
}
|
}
|
||||||
|
|
||||||
.flexrow-left {
|
.flexrow-left {
|
||||||
@extend .flexrow-right;
|
@extend .flexrow-right;
|
||||||
justify-content: flex-start;
|
justify-content: flex-start;
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (max-width: 750px) {
|
@media (max-width: 750px) {
|
||||||
.navigation-header-items {
|
.navigation-header-items {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,11 +25,11 @@ ul {
|
|||||||
list-style-position: inside;
|
list-style-position: inside;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
font-size: 18pt
|
font-size: 18pt;
|
||||||
}
|
}
|
||||||
|
|
||||||
li {
|
li {
|
||||||
padding-bottom: 24px
|
padding-bottom: 24px;
|
||||||
}
|
}
|
||||||
|
|
||||||
h1 {
|
h1 {
|
||||||
@@ -51,7 +51,7 @@ label {
|
|||||||
h3 {
|
h3 {
|
||||||
font-family: "Assistant";
|
font-family: "Assistant";
|
||||||
font-style: italic;
|
font-style: italic;
|
||||||
color: #B6B6B6;
|
color: #b6b6b6;
|
||||||
font-size: 24pt;
|
font-size: 24pt;
|
||||||
padding-bottom: 2px;
|
padding-bottom: 2px;
|
||||||
line-height: 1.5;
|
line-height: 1.5;
|
||||||
|
|||||||
@@ -18,25 +18,22 @@
|
|||||||
<div class="infscr-subcol">
|
<div class="infscr-subcol">
|
||||||
<div class="infscr-subtitle">Experienced Research Teams</div>
|
<div class="infscr-subtitle">Experienced Research Teams</div>
|
||||||
<div class="infscr-body">
|
<div class="infscr-body">
|
||||||
Our collaboration is comprised of expert L-PBF researchers
|
Our collaboration is comprised of expert L-PBF researchers with years of
|
||||||
with years of experience in the field.
|
experience in the field.
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="infscr-subcol">
|
<div class="infscr-subcol">
|
||||||
<div class="infscr-subtitle">International Excellence</div>
|
<div class="infscr-subtitle">International Excellence</div>
|
||||||
<div class="infscr-body">
|
<div class="infscr-body">
|
||||||
AM-D-Model contributors include scientists and engineers
|
AM-D-Model contributors include scientists and engineers from respected research
|
||||||
from respected research institutions across Europe.
|
institutions across Europe.
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="infscr-subcol">
|
<div class="infscr-subcol">
|
||||||
<div class="infscr-subtitle">
|
<div class="infscr-subtitle">Backed by Research Associations</div>
|
||||||
Backed by Research Associations
|
|
||||||
</div>
|
|
||||||
<div class="infscr-body">
|
<div class="infscr-body">
|
||||||
AM-D-Model is supported and funded by ESAFORM, a globally
|
AM-D-Model is supported and funded by ESAFORM, a globally recognized association
|
||||||
recognized association of research leaders in additive
|
of research leaders in additive manufacturing.
|
||||||
manufacturing.
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -54,28 +51,22 @@
|
|||||||
<div class="infscr-subcol">
|
<div class="infscr-subcol">
|
||||||
<div class="infscr-subtitle">Building the Future of L-PBF</div>
|
<div class="infscr-subtitle">Building the Future of L-PBF</div>
|
||||||
<div class="infscr-body">
|
<div class="infscr-body">
|
||||||
AM-D-Model aims to provide a key cornerstone for the future
|
AM-D-Model aims to provide a key cornerstone for the future of L-PBF research: a
|
||||||
of L-PBF research: a universal benchmark for process
|
universal benchmark for process modelling.
|
||||||
modelling.
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="infscr-subcol">
|
<div class="infscr-subcol">
|
||||||
<div class="infscr-subtitle">
|
<div class="infscr-subtitle">Community Focused Data Management</div>
|
||||||
Community Focused Data Management
|
|
||||||
</div>
|
|
||||||
<div class="infscr-body">
|
<div class="infscr-body">
|
||||||
We aim to provide a blueprint for future big data AM
|
We aim to provide a blueprint for future big data AM projects, working with
|
||||||
projects, working with contributors to ensure this
|
contributors to ensure this benchmarking dataset is managed responsibly.
|
||||||
benchmarking dataset is managed responsibly.
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="infscr-subcol">
|
<div class="infscr-subcol">
|
||||||
<div class="infscr-subtitle">
|
<div class="infscr-subtitle">Data Science, as a Core Discipline</div>
|
||||||
Data Science, as a Core Discipline
|
|
||||||
</div>
|
|
||||||
<div class="infscr-body">
|
<div class="infscr-body">
|
||||||
Our team includes expert data scientists, responsible for
|
Our team includes expert data scientists, responsible for managing data
|
||||||
managing data contributions and maximizing data impact.
|
contributions and maximizing data impact.
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -93,28 +84,23 @@
|
|||||||
<div class="infscr-subcol">
|
<div class="infscr-subcol">
|
||||||
<div class="infscr-subtitle">FAIR, Transparent, and Open</div>
|
<div class="infscr-subtitle">FAIR, Transparent, and Open</div>
|
||||||
<div class="infscr-body">
|
<div class="infscr-body">
|
||||||
The AM-D-Model benchmark project is designed with open
|
The AM-D-Model benchmark project is designed with open science in mind,
|
||||||
science in mind, following FAIR principles of transparency
|
following FAIR principles of transparency and openness.
|
||||||
and openness.
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="infscr-subcol">
|
<div class="infscr-subcol">
|
||||||
<div class="infscr-subtitle">
|
<div class="infscr-subtitle">Visibility, Accessibility and Impact</div>
|
||||||
Visibility, Accessibility and Impact
|
|
||||||
</div>
|
|
||||||
<div class="infscr-body">
|
<div class="infscr-body">
|
||||||
By making these results open, we believe that visibility and
|
By making these results open, we believe that visibility and accessibility will
|
||||||
accessibility will maximize their impact on the L-PBF field.
|
maximize their impact on the L-PBF field.
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="infscr-subcol">
|
<div class="infscr-subcol">
|
||||||
<div class="infscr-subtitle">
|
<div class="infscr-subtitle">Serving the Research Community</div>
|
||||||
Serving the Research Community
|
|
||||||
</div>
|
|
||||||
<div class="infscr-body">
|
<div class="infscr-body">
|
||||||
We aim to contribute to the L-PBF research community by
|
We aim to contribute to the L-PBF research community by providing a universally
|
||||||
providing a universally accessible benchmark similar to
|
accessible benchmark similar to those driving other cutting-edge research
|
||||||
those driving other cutting-edge research fields.
|
fields.
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -7,19 +7,15 @@
|
|||||||
|
|
||||||
<div class="splash">
|
<div class="splash">
|
||||||
<div class="splash-copy">
|
<div class="splash-copy">
|
||||||
<div class="splash-title">
|
<div class="splash-title">Benchmarking the future of metal 3d printing</div>
|
||||||
Benchmarking the future of metal 3d printing
|
|
||||||
</div>
|
|
||||||
<div class="splash-body">
|
<div class="splash-body">
|
||||||
AM-D-Model is an ESAFORM benchmark project aiming to create the data
|
AM-D-Model is an ESAFORM benchmark project aiming to create the data that will drive the
|
||||||
that will drive the future of Laser Powder-Bed-Fusion (L-PBF)
|
future of Laser Powder-Bed-Fusion (L-PBF) research and innovation. By connecting an
|
||||||
research and innovation. By connecting an international network of
|
international network of collaborators AM-D-Model will create a comprehensive, open
|
||||||
collaborators AM-D-Model will create a comprehensive, open L-PBF
|
L-PBF benchmark dataset. As part of our commitment to open science, this dataset will be
|
||||||
benchmark dataset. As part of our commitment to open science, this
|
openly shared with the research community. Our goal is to create a universal benchmark
|
||||||
dataset will be openly shared with the research community. Our goal
|
for the L-PBF community, sparking the collaboration and innovation that will build the
|
||||||
is to create a universal benchmark for the L-PBF community, sparking
|
future of this technology.
|
||||||
the collaboration and innovation that will build the future of this
|
|
||||||
technology.
|
|
||||||
</div>
|
</div>
|
||||||
<Button
|
<Button
|
||||||
class="splash-button"
|
class="splash-button"
|
||||||
|
|||||||
@@ -6,8 +6,7 @@
|
|||||||
|
|
||||||
import { CDN } from "$lib/constants";
|
import { CDN } from "$lib/constants";
|
||||||
|
|
||||||
const EMAIL_ENDPOINT =
|
const EMAIL_ENDPOINT = "https://bst564m4ws3ouxg27nqrpfqv5a0jbhxi.lambda-url.eu-west-1.on.aws/";
|
||||||
"https://bst564m4ws3ouxg27nqrpfqv5a0jbhxi.lambda-url.eu-west-1.on.aws/";
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="contact-page">
|
<div class="contact-page">
|
||||||
@@ -17,16 +16,12 @@
|
|||||||
<h1>Contact Us</h1>
|
<h1>Contact Us</h1>
|
||||||
<h2>We look forward to hearing from you!</h2>
|
<h2>We look forward to hearing from you!</h2>
|
||||||
<p>
|
<p>
|
||||||
Interested in contributing, collaborating, or otherwise getting
|
Interested in contributing, collaborating, or otherwise getting in touch with the
|
||||||
in touch with the AM-D-Model team? We are always looking for
|
AM-D-Model team? We are always looking for input on our project from others in the
|
||||||
input on our project from others in the wider L-PBF research
|
wider L-PBF research community. Please use the form below to email our corresponding
|
||||||
community. Please use the form below to email our corresponding
|
|
||||||
researcher and they will reply as soon as they are able.
|
researcher and they will reply as soon as they are able.
|
||||||
</p>
|
</p>
|
||||||
<ContactForm
|
<ContactForm class="contact-form" emailEndpointApi={EMAIL_ENDPOINT} />
|
||||||
class="contact-form"
|
|
||||||
emailEndpointApi={EMAIL_ENDPOINT}
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="contact-image-column">
|
<div class="contact-image-column">
|
||||||
<div class="contact-image-pane hover:bg-blue-200">
|
<div class="contact-image-pane hover:bg-blue-200">
|
||||||
|
|||||||
Reference in New Issue
Block a user