From e3fa784a54a867b3eba543ae9ca0b11c5f50a7c9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Cl=C3=A9ment?= <cpartiot@gmail.com>
Date: Wed, 31 Oct 2018 10:38:41 +0100
Subject: [PATCH] ui: style member, job, group

---
 .babelrc                      |   2 +-
 server.js                     |   4 +-
 src/config.sample.pug         |   3 +-
 src/error.log                 | 368 ++++++++++++++++++++++++++++++++++
 src/index.pug                 |   2 +
 src/menu.pug                  |   1 +
 src/page-group-create.pug     |   1 +
 src/page-group-edit.pug       |   1 +
 src/page-group-profile.pug    |  50 ++++-
 src/page-group.pug            |   5 +-
 src/page-job-offer-create.pug |   9 +
 src/page-job-offers.pug       |  12 +-
 src/page-member-profile.pug   |  10 +-
 src/page-member.pug           |   2 +-
 src/page-members.pug          |  25 ++-
 src/page-project-chat.pug     |   2 +-
 src/page-project-create.pug   |  17 +-
 src/page-project-edit.pug     |  25 ++-
 src/page-project-profile.pug  |  18 +-
 src/page-project.pug          |  12 +-
 src/scripts/hd-widgets.js     |  50 +++++
 src/styles/content.scss       | 176 +++++++++++++---
 src/styles/form.scss          |  18 +-
 src/styles/icons.scss         |   4 +-
 src/styles/main.scss          |  18 +-
 src/styles/members.scss       | 220 --------------------
 www/lib/sib-core              |   2 +-
 www/test.html                 |   5 +-
 28 files changed, 738 insertions(+), 324 deletions(-)
 create mode 100644 src/error.log
 create mode 100644 src/page-job-offer-create.pug
 delete mode 100644 src/styles/members.scss

diff --git a/.babelrc b/.babelrc
index 9ae1f158..f085829a 100644
--- a/.babelrc
+++ b/.babelrc
@@ -4,7 +4,7 @@
       "@babel/preset-env",
       {
         "targets": {
-          "browsers": [">2.75%"]
+          "browsers": ["last 1 years"]
         }
       }
     ]
diff --git a/server.js b/server.js
index eafd12af..f2a118c2 100644
--- a/server.js
+++ b/server.js
@@ -1,4 +1,5 @@
 const port = 9000;
+const browsersyncPort = 3000;
 const distPath = 'www';
 // express server
 const { join } = require('path');
@@ -18,5 +19,6 @@ bs.init({
   proxy: `http://localhost:${port}`,
   open: false,
   notify: false,
-  //tunnel: true,
+  port: browsersyncPort,
+  tunnel: true,
 });
diff --git a/src/config.sample.pug b/src/config.sample.pug
index dd28afea..8cc01c16 100644
--- a/src/config.sample.pug
+++ b/src/config.sample.pug
@@ -1,2 +1,3 @@
 - var sdn = process.env.SDN || 'http://127.0.0.1:8000'
-- var cdn = process.env.CDN || 'https://cdn.happy-dev.fr'
\ No newline at end of file
+- var cdn = process.env.CDN || 'https://cdn.happy-dev.fr'
+- var xmpp = 'https://jabber.happy-dev.fr/http-bind/'
\ No newline at end of file
diff --git a/src/error.log b/src/error.log
new file mode 100644
index 00000000..e6e25d41
--- /dev/null
+++ b/src/error.log
@@ -0,0 +1,368 @@
+ImproperlyConfigured at /members/
+Could not resolve URL for hyperlinked relationship using view name "member-detail". You may have failed to include the related model in your API, or incorrectly configured the `lookup_field` attribute on this field.
+
+Request Method: GET
+Request URL: http://127.0.0.1:8000/members/
+Django Version: 1.11
+Python Executable: /home/ubuntu/dev/test/ldpserverhdparis/env/bin/python
+Python Version: 3.6.6
+Python Path: ['/home/ubuntu/dev/test/ldpserverhdparis', '/home/ubuntu/dev/test/ldpserverhdparis/env/lib/python36.zip', '/home/ubuntu/dev/test/ldpserverhdparis/env/lib/python3.6', '/home/ubuntu/dev/test/ldpserverhdparis/env/lib/python3.6/lib-dynload', '/usr/lib/python3.6', '/home/ubuntu/dev/test/ldpserverhdparis/env/lib/python3.6/site-packages']
+Server time: Tue, 30 Oct 2018 16:22:14 +0000
+Installed Applications:
+['ldpserverhdparis',
+ 'djangoldp',
+ 'django.contrib.admin',
+ 'django.contrib.auth',
+ 'django.contrib.contenttypes',
+ 'django.contrib.sessions',
+ 'django.contrib.messages',
+ 'django.contrib.staticfiles',
+ 'oidc_provider',
+ 'guardian']
+Installed Middleware:
+['django.middleware.security.SecurityMiddleware',
+ 'django.contrib.sessions.middleware.SessionMiddleware',
+ 'django.middleware.common.CommonMiddleware',
+ 'django.middleware.csrf.CsrfViewMiddleware',
+ 'django.contrib.auth.middleware.AuthenticationMiddleware',
+ 'django.contrib.messages.middleware.MessageMiddleware',
+ 'django.middleware.clickjacking.XFrameOptionsMiddleware']
+
+
+Traceback:  
+
+File "/home/ubuntu/dev/test/ldpserverhdparis/env/lib/python3.6/site-packages/rest_framework/relations.py" in to_representation
+  400.             url = self.get_url(value, self.view_name, request, format)
+
+File "/home/ubuntu/dev/test/ldpserverhdparis/env/lib/python3.6/site-packages/rest_framework/relations.py" in get_url
+  338.         return self.reverse(view_name, kwargs=kwargs, request=request, format=format)
+
+File "/home/ubuntu/dev/test/ldpserverhdparis/env/lib/python3.6/site-packages/rest_framework/reverse.py" in reverse
+  50.         url = _reverse(viewname, args, kwargs, request, format, **extra)
+
+File "/home/ubuntu/dev/test/ldpserverhdparis/env/lib/python3.6/site-packages/rest_framework/reverse.py" in _reverse
+  63.     url = django_reverse(viewname, args=args, kwargs=kwargs, **extra)
+
+File "/home/ubuntu/dev/test/ldpserverhdparis/env/lib/python3.6/site-packages/django/urls/base.py" in reverse
+  91.     return force_text(iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs)))
+
+File "/home/ubuntu/dev/test/ldpserverhdparis/env/lib/python3.6/site-packages/django/urls/resolvers.py" in _reverse_with_prefix
+  497.         raise NoReverseMatch(msg)
+  
+    
+      During handling of the above exception (Reverse for 'member-detail' with keyword arguments '{'pseudo': 'alex.bourlier'}' not found. 1 pattern(s) tried: ['members/(?P<pseudo>[\\w-]+)/$']), another exception occurred:
+    
+  
+
+File "/home/ubuntu/dev/test/ldpserverhdparis/env/lib/python3.6/site-packages/django/core/handlers/exception.py" in inner
+  41.             response = get_response(request)
+
+File "/home/ubuntu/dev/test/ldpserverhdparis/env/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
+  187.                 response = self.process_exception_by_middleware(e, request)
+
+File "/home/ubuntu/dev/test/ldpserverhdparis/env/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
+  185.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)
+
+File "/home/ubuntu/dev/test/ldpserverhdparis/env/lib/python3.6/site-packages/django/views/decorators/csrf.py" in wrapped_view
+  58.         return view_func(*args, **kwargs)
+
+File "/home/ubuntu/dev/test/ldpserverhdparis/env/lib/python3.6/site-packages/rest_framework/viewsets.py" in view
+  116.             return self.dispatch(request, *args, **kwargs)
+
+File "/home/ubuntu/dev/test/ldpserverhdparis/env/lib/python3.6/site-packages/djangoldp/views.py" in dispatch
+  126.         response = super(LDPViewSet, self).dispatch(request, *args, **kwargs)
+
+File "/home/ubuntu/dev/test/ldpserverhdparis/env/lib/python3.6/site-packages/rest_framework/views.py" in dispatch
+  495.             response = self.handle_exception(exc)
+
+File "/home/ubuntu/dev/test/ldpserverhdparis/env/lib/python3.6/site-packages/rest_framework/views.py" in handle_exception
+  455.             self.raise_uncaught_exception(exc)
+
+File "/home/ubuntu/dev/test/ldpserverhdparis/env/lib/python3.6/site-packages/rest_framework/views.py" in dispatch
+  492.             response = handler(request, *args, **kwargs)
+
+File "/home/ubuntu/dev/test/ldpserverhdparis/env/lib/python3.6/site-packages/rest_framework/mixins.py" in list
+  48.         return Response(serializer.data)
+
+File "/home/ubuntu/dev/test/ldpserverhdparis/env/lib/python3.6/site-packages/djangoldp/serializers.py" in data
+  16.         return ReturnDict(super(ListSerializer, self).data, serializer=self)
+
+File "/home/ubuntu/dev/test/ldpserverhdparis/env/lib/python3.6/site-packages/rest_framework/serializers.py" in data
+  262.                 self._data = self.to_representation(self.instance)
+
+File "/home/ubuntu/dev/test/ldpserverhdparis/env/lib/python3.6/site-packages/djangoldp/serializers.py" in to_representation
+  13.         return {'@id': '', 'ldp:contains':super(ContainerSerializer, self).to_representation(data)}
+
+File "/home/ubuntu/dev/test/ldpserverhdparis/env/lib/python3.6/site-packages/rest_framework/serializers.py" in to_representation
+  683.             self.child.to_representation(item) for item in iterable
+
+File "/home/ubuntu/dev/test/ldpserverhdparis/env/lib/python3.6/site-packages/rest_framework/serializers.py" in <listcomp>
+  683.             self.child.to_representation(item) for item in iterable
+
+File "/home/ubuntu/dev/test/ldpserverhdparis/env/lib/python3.6/site-packages/djangoldp/serializers.py" in to_representation
+  77.         data = super().to_representation(obj)
+
+File "/home/ubuntu/dev/test/ldpserverhdparis/env/lib/python3.6/site-packages/rest_framework/serializers.py" in to_representation
+  527.                 ret[field.field_name] = field.to_representation(attribute)
+
+File "/home/ubuntu/dev/test/ldpserverhdparis/env/lib/python3.6/site-packages/rest_framework/relations.py" in to_representation
+  415.             raise ImproperlyConfigured(msg % self.view_name)
+
+Exception Type: ImproperlyConfigured at /members/
+Exception Value: Could not resolve URL for hyperlinked relationship using view name "member-detail". You may have failed to include the related model in your API, or incorrectly configured the `lookup_field` attribute on this field.
+Request information:
+USER: clement
+
+GET: No GET data
+
+POST: No POST data
+
+FILES: No FILES data
+
+COOKIES:
+csrftoken = 'rJoY6gBfXiXUzx2vt44C3jpidX61XuS8d33rk6bsGTOwM4qdsTo3YOU21aXLPMbG'
+sessionid = 'a7j0mj6zjnv7i2mko5bs17mynvy12rcc'
+io = 'F3hWNi2N9qwA7YiDAABT'
+
+META:
+CHROME_DESKTOP = 'code-url-handler.desktop'
+CONTENT_LENGTH = ''
+CONTENT_TYPE = 'text/plain'
+CSRF_COOKIE = 'rJoY6gBfXiXUzx2vt44C3jpidX61XuS8d33rk6bsGTOwM4qdsTo3YOU21aXLPMbG'
+DBUS_SESSION_BUS_ADDRESS = 'unix:path=/run/user/1000/bus'
+DEFAULTS_PATH = '/usr/share/gconf/plasma.default.path'
+DESKTOP_SESSION = 'plasma'
+DESKTOP_STARTUP_ID = 'ubuntu-N7x0WU;1540892856;943495;1492_TIME14942764'
+DISPLAY = ':0'
+DJANGO_SETTINGS_MODULE = 'ldpserverhdparis.settings'
+GATEWAY_INTERFACE = 'CGI/1.1'
+GPG_AGENT_INFO = '/run/user/1000/gnupg/S.gpg-agent:0:1'
+GS_LIB = '/home/ubuntu/.fonts'
+GTK_MODULES = 'gail:atk-bridge'
+HOME = '/home/ubuntu'
+HTTP_ACCEPT = 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
+HTTP_ACCEPT_ENCODING = 'gzip, deflate'
+HTTP_ACCEPT_LANGUAGE = 'en-US,en;q=0.8,fr;q=0.5,fr-FR;q=0.3'
+HTTP_CONNECTION = 'keep-alive'
+HTTP_COOKIE = 'csrftoken=rJoY6gBfXiXUzx2vt44C3jpidX61XuS8d33rk6bsGTOwM4qdsTo3YOU21aXLPMbG; sessionid=a7j0mj6zjnv7i2mko5bs17mynvy12rcc; io=F3hWNi2N9qwA7YiDAABT'
+HTTP_DNT = '1'
+HTTP_HOST = '127.0.0.1:8000'
+HTTP_UPGRADE_INSECURE_REQUESTS = '1'
+HTTP_USER_AGENT = 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:63.0) Gecko/20100101 Firefox/63.0'
+KDE_FULL_SESSION = 'true'
+KDE_SESSION_UID = '1000'
+KDE_SESSION_VERSION = '5'
+LANG = 'en_US.UTF-8'
+LANGUAGE = 'fr'
+LOGNAME = 'ubuntu'
+MAKEFLAGS = ''
+MAKELEVEL = '1'
+MAKE_TERMERR = '/dev/pts/4'
+MAKE_TERMOUT = '/dev/pts/4'
+MANDATORY_PATH = '/usr/share/gconf/plasma.mandatory.path'
+MFLAGS = ''
+PATH = '/home/ubuntu/dev/test/ldpserverhdparis/env/bin:.deno/bin/:/home/ubuntu/.deno/bin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games'
+PATH_INFO = '/members/'
+PWD = '/home/ubuntu/dev/test/ldpserverhdparis'
+QT_ACCESSIBILITY = '1'
+QT_AUTO_SCREEN_SCALE_FACTOR = '0'
+QUERY_STRING = ''
+REMOTE_ADDR = '127.0.0.1'
+REMOTE_HOST = ''
+REQUEST_METHOD = 'GET'
+RUN_MAIN = 'true'
+SCRIPT_NAME = ''
+SERVER_NAME = 'localhost'
+SERVER_PORT = '8000'
+SERVER_PROTOCOL = 'HTTP/1.1'
+SERVER_SOFTWARE = 'WSGIServer/0.2'
+SESSION_MANAGER = 'local/ubuntu-N7x0WU:@/tmp/.ICE-unix/1459,unix/ubuntu-N7x0WU:/tmp/.ICE-unix/1459'
+SHELL = '/usr/bin/fish'
+SHLVL = '3'
+SSH_AGENT_PID = '1383'
+SSH_AUTH_SOCK = '/tmp/ssh-RgoHoRBUgMlY/agent.1318'
+TERM = 'xterm-256color'
+TERM_PROGRAM = 'vscode'
+TERM_PROGRAM_VERSION = '1.28.2'
+TZ = 'UTC'
+USER = 'ubuntu'
+VIRTUAL_ENV = '/home/ubuntu/dev/test/ldpserverhdparis/env'
+XAUTHORITY = '/home/ubuntu/.Xauthority'
+XCURSOR_SIZE = '0'
+XCURSOR_THEME = 'ComixCursors-Opaque-Black'
+XDG_CONFIG_DIRS = '/etc/xdg/xdg-plasma:/etc/xdg:/usr/share/kubuntu-default-settings/kf5-settings'
+XDG_CURRENT_DESKTOP = 'KDE'
+XDG_DATA_DIRS = '/usr/share/plasma:/home/ubuntu/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share'
+XDG_RUNTIME_DIR = '/run/user/1000'
+XDG_SEAT = 'seat0'
+XDG_SEAT_PATH = '/org/freedesktop/DisplayManager/Seat0'
+XDG_SESSION_CLASS = 'user'
+XDG_SESSION_DESKTOP = 'KDE'
+XDG_SESSION_ID = '1'
+XDG_SESSION_PATH = '/org/freedesktop/DisplayManager/Session0'
+XDG_SESSION_TYPE = 'x11'
+XDG_VTNR = '1'
+_OLD_FISH_PROMPT_OVERRIDE = '/home/ubuntu/dev/test/ldpserverhdparis/env'
+_OLD_VIRTUAL_PATH = '.deno/bin/\x1e/home/ubuntu/.deno/bin/\x1e/usr/local/sbin\x1e/usr/local/bin\x1e/usr/sbin\x1e/usr/bin\x1e/sbin\x1e/bin\x1e/usr/games\x1e/usr/local/games'
+wsgi.errors = <_io.TextIOWrapper name='<stderr>' mode='w' encoding='UTF-8'>
+wsgi.file_wrapper = ''
+wsgi.input = <_io.BufferedReader name=5>
+wsgi.multiprocess = False
+wsgi.multithread = True
+wsgi.run_once = False
+wsgi.url_scheme = 'http'
+wsgi.version = 
+
+Settings:
+Using settings module ldpserverhdparis.settings
+ABSOLUTE_URL_OVERRIDES = {}
+ADMINS = []
+ALLOWED_HOSTS = ['127.0.0.1', 'test-paris.happy-dev.fr']
+APPEND_SLASH = True
+AUTHENTICATION_BACKENDS = ['django.contrib.auth.backends.ModelBackend', 'guardian.backends.ObjectPermissionBackend']
+AUTH_PASSWORD_VALIDATORS = '********************'
+AUTH_USER_MODEL = 'auth.User'
+BASE_DIR = '/home/ubuntu/dev/test/ldpserverhdparis'
+CACHES = {'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'}}
+CACHE_MIDDLEWARE_ALIAS = 'default'
+CACHE_MIDDLEWARE_KEY_PREFIX = '********************'
+CACHE_MIDDLEWARE_SECONDS = 600
+CSRF_COOKIE_AGE = 31449600
+CSRF_COOKIE_DOMAIN = None
+CSRF_COOKIE_HTTPONLY = False
+CSRF_COOKIE_NAME = 'csrftoken'
+CSRF_COOKIE_PATH = '/'
+CSRF_COOKIE_SECURE = False
+CSRF_FAILURE_VIEW = 'django.views.csrf.csrf_failure'
+CSRF_HEADER_NAME = 'HTTP_X_CSRFTOKEN'
+CSRF_TRUSTED_ORIGINS = []
+CSRF_USE_SESSIONS = False
+DATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3', 'NAME': '/home/ubuntu/dev/test/ldpserverhdparis/db.sqlite3', 'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_MAX_AGE': 0, 'OPTIONS': {}, 'TIME_ZONE': None, 'USER': '', 'PASSWORD': '********************', 'HOST': '', 'PORT': '', 'TEST': {'CHARSET': None, 'COLLATION': None, 'NAME': None, 'MIRROR': None}}}
+DATABASE_ROUTERS = []
+DATA_UPLOAD_MAX_MEMORY_SIZE = 2621440
+DATA_UPLOAD_MAX_NUMBER_FIELDS = 1000
+DATETIME_FORMAT = 'N j, Y, P'
+DATETIME_INPUT_FORMATS = ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f', '%Y-%m-%d %H:%M', '%Y-%m-%d', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%Y', '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M', '%m/%d/%y']
+DATE_FORMAT = 'N j, Y'
+DATE_INPUT_FORMATS = ['%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y', '%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y', '%B %d, %Y', '%d %B %Y', '%d %B, %Y']
+DEBUG = True
+DEBUG_PROPAGATE_EXCEPTIONS = False
+DECIMAL_SEPARATOR = '.'
+DEFAULT_CHARSET = 'utf-8'
+DEFAULT_CONTENT_TYPE = 'text/html'
+DEFAULT_EXCEPTION_REPORTER_FILTER = 'django.views.debug.SafeExceptionReporterFilter'
+DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage'
+DEFAULT_FROM_EMAIL = 'webmaster@localhost'
+DEFAULT_INDEX_TABLESPACE = ''
+DEFAULT_TABLESPACE = ''
+DISALLOWED_USER_AGENTS = []
+EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
+EMAIL_HOST = 'localhost'
+EMAIL_HOST_PASSWORD = '********************'
+EMAIL_HOST_USER = ''
+EMAIL_PORT = 25
+EMAIL_SSL_CERTFILE = None
+EMAIL_SSL_KEYFILE = '********************'
+EMAIL_SUBJECT_PREFIX = '[Django] '
+EMAIL_TIMEOUT = None
+EMAIL_USE_LOCALTIME = False
+EMAIL_USE_SSL = False
+EMAIL_USE_TLS = False
+FILE_CHARSET = 'utf-8'
+FILE_UPLOAD_DIRECTORY_PERMISSIONS = None
+FILE_UPLOAD_HANDLERS = ['django.core.files.uploadhandler.MemoryFileUploadHandler', 'django.core.files.uploadhandler.TemporaryFileUploadHandler']
+FILE_UPLOAD_MAX_MEMORY_SIZE = 2621440
+FILE_UPLOAD_PERMISSIONS = None
+FILE_UPLOAD_TEMP_DIR = None
+FIRST_DAY_OF_WEEK = 0
+FIXTURE_DIRS = []
+FORCE_SCRIPT_NAME = None
+FORMAT_MODULE_PATH = None
+FORM_RENDERER = 'django.forms.renderers.DjangoTemplates'
+IGNORABLE_404_URLS = []
+INSTALLED_APPS = ['ldpserverhdparis', 'djangoldp', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'oidc_provider', 'guardian']
+INTERNAL_IPS = []
+LANGUAGES = [('af', 'Afrikaans'), ('ar', 'Arabic'), ('ast', 'Asturian'), ('az', 'Azerbaijani'), ('bg', 'Bulgarian'), ('be', 'Belarusian'), ('bn', 'Bengali'), ('br', 'Breton'), ('bs', 'Bosnian'), ('ca', 'Catalan'), ('cs', 'Czech'), ('cy', 'Welsh'), ('da', 'Danish'), ('de', 'German'), ('dsb', 'Lower Sorbian'), ('el', 'Greek'), ('en', 'English'), ('en-au', 'Australian English'), ('en-gb', 'British English'), ('eo', 'Esperanto'), ('es', 'Spanish'), ('es-ar', 'Argentinian Spanish'), ('es-co', 'Colombian Spanish'), ('es-mx', 'Mexican Spanish'), ('es-ni', 'Nicaraguan Spanish'), ('es-ve', 'Venezuelan Spanish'), ('et', 'Estonian'), ('eu', 'Basque'), ('fa', 'Persian'), ('fi', 'Finnish'), ('fr', 'French'), ('fy', 'Frisian'), ('ga', 'Irish'), ('gd', 'Scottish Gaelic'), ('gl', 'Galician'), ('he', 'Hebrew'), ('hi', 'Hindi'), ('hr', 'Croatian'), ('hsb', 'Upper Sorbian'), ('hu', 'Hungarian'), ('ia', 'Interlingua'), ('id', 'Indonesian'), ('io', 'Ido'), ('is', 'Icelandic'), ('it', 'Italian'), ('ja', 'Japanese'), ('ka', 'Georgian'), ('kk', 'Kazakh'), ('km', 'Khmer'), ('kn', 'Kannada'), ('ko', 'Korean'), ('lb', 'Luxembourgish'), ('lt', 'Lithuanian'), ('lv', 'Latvian'), ('mk', 'Macedonian'), ('ml', 'Malayalam'), ('mn', 'Mongolian'), ('mr', 'Marathi'), ('my', 'Burmese'), ('nb', 'Norwegian Bokmål'), ('ne', 'Nepali'), ('nl', 'Dutch'), ('nn', 'Norwegian Nynorsk'), ('os', 'Ossetic'), ('pa', 'Punjabi'), ('pl', 'Polish'), ('pt', 'Portuguese'), ('pt-br', 'Brazilian Portuguese'), ('ro', 'Romanian'), ('ru', 'Russian'), ('sk', 'Slovak'), ('sl', 'Slovenian'), ('sq', 'Albanian'), ('sr', 'Serbian'), ('sr-latn', 'Serbian Latin'), ('sv', 'Swedish'), ('sw', 'Swahili'), ('ta', 'Tamil'), ('te', 'Telugu'), ('th', 'Thai'), ('tr', 'Turkish'), ('tt', 'Tatar'), ('udm', 'Udmurt'), ('uk', 'Ukrainian'), ('ur', 'Urdu'), ('vi', 'Vietnamese'), ('zh-hans', 'Simplified Chinese'), ('zh-hant', 'Traditional Chinese')]
+LANGUAGES_BIDI = ['he', 'ar', 'fa', 'ur']
+LANGUAGE_CODE = 'en-us'
+LANGUAGE_COOKIE_AGE = None
+LANGUAGE_COOKIE_DOMAIN = None
+LANGUAGE_COOKIE_NAME = 'django_language'
+LANGUAGE_COOKIE_PATH = '/'
+LDP_RDF_CONTEXT = 'https://cdn.happy-dev.fr/owl/hdcontext.jsonld'
+LOCALE_PATHS = []
+LOGGING = {}
+LOGGING_CONFIG = 'logging.config.dictConfig'
+LOGIN_REDIRECT_URL = '/accounts/profile/'
+LOGIN_URL = '/accounts/login/'
+LOGOUT_REDIRECT_URL = None
+MANAGERS = []
+MEDIA_ROOT = ''
+MEDIA_URL = ''
+MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage'
+MIDDLEWARE = ['django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware']
+MIDDLEWARE_CLASSES = ['django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware']
+MIGRATION_MODULES = {}
+MONTH_DAY_FORMAT = 'F j'
+NUMBER_GROUPING = 0
+OIDC_USERINFO = 'ldpserverhdparis.oidc_provider_settings.userinfo'
+PASSWORD_HASHERS = '********************'
+PASSWORD_RESET_TIMEOUT_DAYS = '********************'
+PREPEND_WWW = False
+ROOT_URLCONF = 'ldpserverhdparis.urls'
+SECRET_KEY = '********************'
+SECURE_BROWSER_XSS_FILTER = False
+SECURE_CONTENT_TYPE_NOSNIFF = False
+SECURE_HSTS_INCLUDE_SUBDOMAINS = False
+SECURE_HSTS_PRELOAD = False
+SECURE_HSTS_SECONDS = 0
+SECURE_PROXY_SSL_HEADER = None
+SECURE_REDIRECT_EXEMPT = []
+SECURE_SSL_HOST = None
+SECURE_SSL_REDIRECT = False
+SERVER_EMAIL = 'root@localhost'
+SESSION_CACHE_ALIAS = 'default'
+SESSION_COOKIE_AGE = 1209600
+SESSION_COOKIE_DOMAIN = None
+SESSION_COOKIE_HTTPONLY = True
+SESSION_COOKIE_NAME = 'sessionid'
+SESSION_COOKIE_PATH = '/'
+SESSION_COOKIE_SECURE = False
+SESSION_ENGINE = 'django.contrib.sessions.backends.db'
+SESSION_EXPIRE_AT_BROWSER_CLOSE = False
+SESSION_FILE_PATH = None
+SESSION_SAVE_EVERY_REQUEST = False
+SESSION_SERIALIZER = 'django.contrib.sessions.serializers.JSONSerializer'
+SETTINGS_MODULE = 'ldpserverhdparis.settings'
+SHORT_DATETIME_FORMAT = 'm/d/Y P'
+SHORT_DATE_FORMAT = 'm/d/Y'
+SIGNING_BACKEND = 'django.core.signing.TimestampSigner'
+SILENCED_SYSTEM_CHECKS = []
+STATICFILES_DIRS = []
+STATICFILES_FINDERS = ['django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder']
+STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'
+STATIC_ROOT = '/home/ubuntu/dev/test/static'
+STATIC_URL = '/static/'
+TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], 'APP_DIRS': True, 'OPTIONS': {'context_processors': ['django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages']}}]
+TEST_NON_SERIALIZED_APPS = []
+TEST_RUNNER = 'django.test.runner.DiscoverRunner'
+THOUSAND_SEPARATOR = ','
+TIME_FORMAT = 'P'
+TIME_INPUT_FORMATS = ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M']
+TIME_ZONE = 'UTC'
+USE_ETAGS = False
+USE_I18N = True
+USE_L10N = True
+USE_THOUSAND_SEPARATOR = False
+USE_TZ = True
+USE_X_FORWARDED_HOST = False
+USE_X_FORWARDED_PORT = False
+WSGI_APPLICATION = 'ldpserverhdparis.wsgi.application'
+X_FRAME_OPTIONS = 'SAMEORIGIN'
+YEAR_MONTH_FORMAT = 'F Y'
+
+
+You're seeing this error because you have DEBUG = True in your
+Django settings file. Change that to False, and Django will
+display a standard page generated by the handler for this status code.
+
diff --git a/src/index.pug b/src/index.pug
index 63ec80d4..55c55828 100644
--- a/src/index.pug
+++ b/src/index.pug
@@ -21,6 +21,8 @@ html(lang="en")
           include page-member.pug
         #job-offers(hidden)
           include page-job-offers.pug
+        #job-offer-create(hidden)
+          include page-job-offer-create.pug
         //-#projects(hidden)
           include page-projects.pug
         #project(hidden)
diff --git a/src/menu.pug b/src/menu.pug
index 7a4c898b..76ff45cc 100644
--- a/src/menu.pug
+++ b/src/menu.pug
@@ -8,6 +8,7 @@ div
         sib-route(hidden, name='member', id-prefix=`${sdn}/members/`)
         sib-route(name='job-offers')
           div.icon-briefcase Job offers
+        sib-route(hidden, name='job-offer-create')
         div
           div.icon-folder-alt Projects
           sib-display(
diff --git a/src/page-group-create.pug b/src/page-group-create.pug
index 8da19e87..585e6737 100644
--- a/src/page-group-create.pug
+++ b/src/page-group-create.pug
@@ -3,6 +3,7 @@
   .form-view
     sib-form.block(
       data-src=`${sdn}/channels/`, 
+      data-fields="name, description, owner, members, jabberID, jabberRoom"
       range-owner=`${sdn}/members/`, 
       widget-members='sib-form-multiple-dropdown', 
       range-members=`${sdn}/members/`
diff --git a/src/page-group-edit.pug b/src/page-group-edit.pug
index 3d421475..c85ee853 100644
--- a/src/page-group-edit.pug
+++ b/src/page-group-edit.pug
@@ -3,6 +3,7 @@
   .form-view
     sib-form.block(
       range-owner=`${sdn}/members/`,
+      data-fields="name, description, owner, members, jabberID, jabberRoom"
       range-members=`${sdn}/members/`,
       widget-members='sib-form-multiple-dropdown',
       bind-resources
diff --git a/src/page-group-profile.pug b/src/page-group-profile.pug
index 71cb0d40..0ecb4dc2 100644
--- a/src/page-group-profile.pug
+++ b/src/page-group-profile.pug
@@ -1,17 +1,49 @@
-
-
-#group-profile
+.frame
   sib-display(
-    data-fields='name, description, owner', 
-    widget-owner='hdapp-member', 
+    data-fields='name, label-description, description',
+    value-label-description="Description:"
     bind-resources
   )
-  h2.section.skills Participants
+  h2.section.skills In group
   sib-display(
     id-suffix='members',
-    data-fields='avatar, user',
-    widget-avatar='sib-display-img',
-    widget-user='hdapp-userinfo',
+    data-fields='user-thumb',
+    set-user-thumb='member.avatar, first_name, last_name',
+    widget-member.avatar='sib-display-img',
     bind-resources
   )
 
+//-
+  sib-display#offers-list.limiter(
+    data-src=`${sdn}/job-offers/`,
+    data-fields='date, user-thumb, title, description, skills',
+    widget-skills='sib-display-lookuplist',
+    set-user-thumb='author.member.avatar, author.first_name, author.last_name'
+    widget-author.member.avatar='sib-display-img',
+    set-date='closingDate, creationDate',
+    widget-closingDate='hdapp-closing-date',
+    set-searchset='title, description, skills',
+    search-fields='searchset'
+  )
+
+  sib-display(
+    data-fields='title, label-description, description, client',
+    set-title='number, client.name, name',
+    set-client='label-client, client.name, client.logo, client.address',
+    value-label-description="Description:"
+    value-label-client="Client:"
+    widget-client.logo='sib-display-img',
+    widget-client='hdapp-client',
+    widget-team='sib-display-lookuplist',
+    bind-resources,
+  )
+
+  h2 Team:
+  sib-display.members-list-condensed(
+    id-suffix='team',
+    data-fields='member.avatar, member.user',
+    widget-member.avatar='sib-display-img',
+    widget-member.user='hdapp-userinfo',
+    next='member',
+    bind-resources,
+  )
\ No newline at end of file
diff --git a/src/page-group.pug b/src/page-group.pug
index 9cf778dc..5ae06dad 100644
--- a/src/page-group.pug
+++ b/src/page-group.pug
@@ -3,8 +3,9 @@ sib-router#group-router(default-route='group-chat')
     div Chat
   sib-route(name='group-profile')
     div Info
-  sib-route(name='group-edit')
-    div Edit
+  sib-ac-checker(permission='change' bind-resources)
+    sib-route(name='group-edit')
+      div Edit
   sib-route(name='group-create')
     div Add new
 #network-views-container
diff --git a/src/page-job-offer-create.pug b/src/page-job-offer-create.pug
new file mode 100644
index 00000000..4bf70f27
--- /dev/null
+++ b/src/page-job-offer-create.pug
@@ -0,0 +1,9 @@
+#job-create
+  h1 New job offer
+  .form-view
+    sib-form.block(
+      data-src=`${sdn}/job-offers/`, 
+      data-fields="author, description, skills",
+      widget-author='sib-form-dropdown',
+      widget-skills='sib-form-multiple-dropdown',
+    )
diff --git a/src/page-job-offers.pug b/src/page-job-offers.pug
index cd5c1609..95877e13 100644
--- a/src/page-job-offers.pug
+++ b/src/page-job-offers.pug
@@ -1,11 +1,15 @@
 div
-  h1 New offers  
+  sib-trigger(next="job-offer-create" class="new-job-offer") Post a new offer
+  h1 New offers
     span Here you can find and post offers
   sib-display#offers-list.limiter(
     data-src=`${sdn}/job-offers/`,
-    data-fields='author, title, description, skills',
-    set-searchset='title, description',
+    data-fields='date, user-thumb, title, description, skills',
     widget-skills='sib-display-lookuplist',
-    widget-author='hdapp-author',
+    set-user-thumb='author.member.avatar, author.first_name, author.last_name'
+    widget-author.member.avatar='sib-display-img',
+    set-date='closingDate, creationDate',
+    widget-closingDate='hdapp-closing-date',
+    set-searchset='title, description, skills',
     search-fields='searchset'
   )
\ No newline at end of file
diff --git a/src/page-member-profile.pug b/src/page-member-profile.pug
index fe211238..47b82a08 100644
--- a/src/page-member-profile.pug
+++ b/src/page-member-profile.pug
@@ -1,11 +1,17 @@
 sib-display#member-info(
-  data-fields='header, cell, role, email, tel, roles, website, skills',
-  set-header='avatar, user, pseudonym, bio',
+  data-fields='available, header, name, pseudonym, infos, skills',
+  set-header='avatar',
+  set-infos='cell, roles, user.email, number, foaf:homepage',
+  set-name='user.first_name, user.last_name',
   set-pseudonym='before-pseudo, pseudo',
+  value-before-pseudo='@',
+  widget-available='hdapp-available',
   widget-avatar='sib-display-img',
   widget-user='hdapp-userinfo',
   widget-cell='hdapp-usercell',
   widget-number='sib-display-tel',
+  widget-foaf:homepage='hdapp-hyperlink',
+  widget-user.email='sib-display-mailto',
   widget-roles='sib-display-lookuplist',
   widget-skills='sib-display-lookuplist',
   bind-resources
diff --git a/src/page-member.pug b/src/page-member.pug
index 77ed6d36..7f4f133e 100644
--- a/src/page-member.pug
+++ b/src/page-member.pug
@@ -12,7 +12,7 @@ sib-router#member-router(default-route='member-chat')
   div
     #member-chat
       include page-member-chat.pug
-    #member-profile.limiter
+    #member-profile
       include page-member-profile.pug
     #member-edit
       include page-member-edit.pug
\ No newline at end of file
diff --git a/src/page-members.pug b/src/page-members.pug
index 3c57e394..79d735d8 100644
--- a/src/page-members.pug
+++ b/src/page-members.pug
@@ -2,17 +2,34 @@ div
   h1 Members
   sib-display#profiles-list(
     data-src=`${sdn}/members/`,
-    data-fields='header, footer'
+    data-fields='header, infos'
     set-header='avatar, user, pseudonym, bio',
-    set-footer='cell, roles, skills',
+    set-infos='cell, roles, user.email, foaf:homepage, skills',
     set-pseudonym='before-pseudo, pseudo',
     value-before-pseudo='@',
     widget-avatar='sib-display-img',
     widget-user='hdapp-userinfo',
+    widget-user.email='sib-display-mailto',
+    widget-foaf:hompage='hdapp-hyperlink',
     widget-cell='hdapp-usercell',
     widget-roles='sib-display-lookuplist',
     widget-skills='sib-display-lookuplist',
     set-searchset='pseudo',
     search-fields='searchset',
-    next='member'
-  )
+    next='member')
+
+  //- sib-display#profiles-list(
+    data-src=`${sdn}/users/`,
+    data-fields='header, footer'
+    set-header='member.avatar, member.user, pseudonym, member.bio',
+    set-footer='member.cell, member.roles, member.skills',
+    set-pseudonym='before-pseudo, pseudo',
+    value-before-pseudo='@',
+    widget-member.avatar='sib-display-img',
+    widget-member.user='hdapp-userinfo',
+    widget-member.cell='hdapp-usercell',
+    widget-member.roles='sib-display-lookuplist',
+    widget-member.skills='sib-display-lookuplist',
+    set-searchset='last_name',
+    search-fields='searchset',
+    next='member')
\ No newline at end of file
diff --git a/src/page-project-chat.pug b/src/page-project-chat.pug
index b209ca74..59730e71 100644
--- a/src/page-project-chat.pug
+++ b/src/page-project-chat.pug
@@ -1,4 +1,4 @@
-#project-chat.chat-view
+.chat-view
   sib-chat(
     data-authentication='login',
     data-auto-login='true',
diff --git a/src/page-project-create.pug b/src/page-project-create.pug
index 4c0a529f..11d7b45e 100644
--- a/src/page-project-create.pug
+++ b/src/page-project-create.pug
@@ -1,9 +1,8 @@
-#project-create
-  h1 New project
-  .form-view
-    sib-form.block(
-      data-src=`${sdn}/projects/`,
-      range-client=`${sdn}/clients/`,
-      widget-team='sib-form-multiple-dropdown',
-      range-team=`${sdn}/members/`
-    )
+h1 New project
+.form-view
+  sib-form.block(
+    data-src=`${sdn}/projects/`,
+    range-client=`${sdn}/clients/`,
+    widget-team='sib-form-multiple-dropdown',
+    range-team=`${sdn}/members/`
+  )
diff --git a/src/page-project-edit.pug b/src/page-project-edit.pug
index 45678830..51d3bd28 100644
--- a/src/page-project-edit.pug
+++ b/src/page-project-edit.pug
@@ -1,13 +1,12 @@
-#project-edit
-  h1 Edit project
-    //- sib-display(data-fields="name" bind-resources)]
-  .form-view
-    sib-form.block(
-      range-client=`${sdn}/clients/`,
-      range-team=`${sdn}/members/`,
-      data-fields=`name, number, client, description, team, jabberRoom, foaf:jabberID`,
-      widget-jabberRoom='sib-form-checkbox',
-      widget-description='sib-form-textarea',
-      widget-team='sib-form-multiple-dropdown',
-      bind-resources
-    )
+h1 Edit project
+  //- sib-display(data-fields="name" bind-resources)]
+.form-view
+  sib-form.block(
+    range-client=`${sdn}/clients/`,
+    range-team=`${sdn}/members/`,
+    data-fields=`name, number, client, description, team, jabberRoom, foaf:jabberID`,
+    widget-jabberRoom='sib-form-checkbox',
+    widget-description='sib-form-textarea',
+    widget-team='sib-form-multiple-dropdown',
+    bind-resources
+  )
diff --git a/src/page-project-profile.pug b/src/page-project-profile.pug
index b272a277..dd9c17b2 100644
--- a/src/page-project-profile.pug
+++ b/src/page-project-profile.pug
@@ -1,18 +1,22 @@
-#project-profile
+.frame
   sib-display(
-    data-fields='title, description, client, team',
-    set-title='number, client, name',
+    data-fields='title, label-description, description, client',
+    set-title='number, client.name, name',
+    set-client='label-client, client.name, client.logo, client.address',
+    value-label-description="Description:"
+    value-label-client="Client:"
+    widget-client.logo='sib-display-img',
     widget-client='hdapp-client',
     widget-team='sib-display-lookuplist',
     bind-resources,
   )
 
-  h3 Team
+  h2 Team:
   sib-display.members-list-condensed(
     id-suffix='team',
-    data-fields='avatar, user',
-    widget-avatar='sib-display-img',
-    widget-user='hdapp-userinfo',
+    data-fields='member.avatar, member.user',
+    widget-member.avatar='sib-display-img',
+    widget-member.user='hdapp-userinfo',
     next='member',
     bind-resources,
   )
\ No newline at end of file
diff --git a/src/page-project.pug b/src/page-project.pug
index abdef021..e2e5e165 100644
--- a/src/page-project.pug
+++ b/src/page-project.pug
@@ -8,7 +8,11 @@ sib-router#project-router(default-route='project-chat')
   sib-route(name='project-create')
     div Add new
 #project-views-container
-  include page-project-chat.pug
-  include page-project-profile.pug
-  include page-project-edit.pug
-  include page-project-create.pug
+  #project-chat
+    include page-project-chat.pug
+  #project-profile
+    include page-project-profile.pug
+  #project-edit
+    include page-project-edit.pug
+  #project-create
+    include page-project-create.pug
diff --git a/src/scripts/hd-widgets.js b/src/scripts/hd-widgets.js
index 2c6c4010..7f0c7848 100644
--- a/src/scripts/hd-widgets.js
+++ b/src/scripts/hd-widgets.js
@@ -90,6 +90,7 @@ document.addEventListener('WebComponentsReady', function(event) {
       return 'div';
     }
     getTemplate(value, index) {
+      return JSON.stringify(value);
       var firstname, lastname;
       if (typeof value == 'object')
         if (Object.keys(value).length > 1) {
@@ -109,4 +110,53 @@ document.addEventListener('WebComponentsReady', function(event) {
     }
   }
   customElements.define('hdapp-author', HDAppAuthor);
+
+  class HDAppClosingDate extends SIBWidget {
+    get template() {
+      return this.value
+        ? `<strong>closed</strong> (${this.value})`
+        : '<strong>open</strong>';
+    }
+
+    render() {
+      console.log(this.value);
+      this.innerHTML = this.template;
+    }
+  }
+
+  customElements.define('hdapp-closing-date', HDAppClosingDate);
+
+  class HDAppAvailable extends SIBWidget {
+    get template() {
+      return this.value
+        ? '<strong>Available</strong>'
+        : '<strong>Not available</strong>';
+    }
+
+    render() {
+      console.log(this.value);
+      this.innerHTML = this.template;
+    }
+  }
+
+  customElements.define('hdapp-available', HDAppAvailable);
+
+  class HDAppHyperlink extends SIBWidget {
+    get template() {
+      const escaped = this.value
+        .replace(/&/g, '&amp;')
+        .replace(/</g, '&lt;')
+        .replace(/>/g, '&gt;')
+        .replace(/"/g, '&quot;')
+        .replace(/'/g, '&#039;');
+      return `<a href="${escaped}">${escaped}</a>`;
+    }
+
+    render() {
+      console.log(this.value);
+      this.innerHTML = this.template;
+    }
+  }
+
+  customElements.define('hdapp-hyperlink', HDAppHyperlink);
 });
diff --git a/src/styles/content.scss b/src/styles/content.scss
index 273603e4..3157c033 100644
--- a/src/styles/content.scss
+++ b/src/styles/content.scss
@@ -1,11 +1,16 @@
 // job offers
+.new-job-offer {
+  @extend %button;
+  text-transform: uppercase;
+  float: right;
+}
 #offers-list {
   > div {
     > sib-display {
       display: block;
       margin: 1em 0;
       @extend %frame;
-      padding: 0.5em 1em;
+      padding: 2em;
       /*&:nth-child(odd) {
         background-color: $color-grey-light;
       }*/
@@ -16,37 +21,73 @@
       label {
         display: none;
       }
-      hdapp-author {
-        ul {
-          @include list-reset();
-        }
-      }
     }
   }
 }
+[name='user-thumb'] {
+  display: flex;
+  align-items: center;
+  margin: -0.25em;
+  > * {
+    margin: 0.25em;
+  }
+  sib-display-img {
+    width: 2.5em;
+    height: 2.5em;
+    overflow: hidden;
+    border-radius: 100%;
+  }
+}
+
+[name='date'] {
+  float: right;
+  display: flex;
+  align-items: center;
+  margin: -0.25em;
+  > * {
+    margin: 0.25em;
+  }
+  strong {
+    @extend %button;
+  }
+}
 
 // skills
-sib-display-lookuplist[name='skills'] {
-  ul,
-  li {
+#member-profile sib-display-lookuplist,
+#profiles-list sib-display-lookuplist,
+sib-display-lookuplist {
+  &[name$='skills'] {
     display: block;
-    margin: 0;
-    padding: 0;
-    list-style: none;
+    ul,
+    li {
+      display: block;
+      margin: 0;
+      padding: 0;
+      list-style: none;
+    }
+    ul {
+      display: flex;
+      flex-wrap: wrap;
+      margin: 1em -0.25em;
+    }
+    li {
+      padding: 0.5em 1em;
+      border: 1px solid;
+      border-radius: 0.25em;
+      margin: 0.25em;
+    }
   }
-  ul {
-    display: flex;
-    flex-wrap: wrap;
-    margin: 0 -0.25em;
+}
+
+// group
+#group-profile {
+  sib-display-div[name='name'] div {
+    @extend h1;
   }
-  li {
-    padding: 0.5em 1em;
-    border: 1px solid;
-    border-radius: 0.25em;
-    margin: 0.25em;
+  sib-display-div[name='label-description'] div {
+    @extend h2;
   }
 }
-
 // chat
 
 .chat-view {
@@ -61,6 +102,7 @@ sib-display-lookuplist[name='skills'] {
   }
 }
 
+// member-profile && members
 .members-list-condensed {
   display: block;
   img {
@@ -74,6 +116,7 @@ sib-display-lookuplist[name='skills'] {
     display: none;
   }
   > div > sib-display > div {
+    margin: 1em 0;
     display: flex;
   }
   ul {
@@ -81,14 +124,15 @@ sib-display-lookuplist[name='skills'] {
   }
 }
 
-// member-profile && member
+#profiles-list > div > sib-display {
+  cursor: pointer;
+}
 sib-display#member-info,
 #profiles-list > div > sib-display {
   display: block;
   position: relative;
   @extend %frame;
   padding: 1em;
-  cursor: pointer;
 
   label {
     display: none;
@@ -113,7 +157,7 @@ sib-display#member-info,
   }
 
   div[name='header'] {
-    border-top: 2em solid $color-grey-light;
+    // border-top: 2em solid $color-grey-light;
     border-bottom: 1px solid $color-grey-light;
     padding-bottom: 1em;
     margin: -0.5em;
@@ -129,11 +173,43 @@ sib-display#member-info,
       display: inline;
     }
   }
-
-  ul{
-    @include list-reset();
+  [name=infos]{
+    margin: 2em 0;
+    >*{
+      display: block;
+      margin: 0.5em 0;
+    }
   }
+  ul[name$='roles'] * {
+    @include icon('user');
+  }
+  ul[name$='cell'] * {
+    @include icon('location-pin');
+  }
+  sib-display-mailto {
+    display: block;
+    @include icon('envelope');
+  }
+  sib-display-tel {
+    display: block;
+    @include icon('phone');
+  }
+  hdapp-hyperlink {
+    display: block;
+    @include icon('link');
+  }  
+  
+  sib-display-div[name$='foaf:homepage'] * {
+    @include icon('link');
+  }
+}
 
+hdapp-available {
+  display: block;
+  text-align: right;
+  strong {
+    @extend %button;
+  }
 }
 
 #profiles-list {
@@ -145,9 +221,44 @@ sib-display#member-info,
     grid-gap: 1em;
   }
 }
+#member-profile,
+#profiles-list {
+  ul {
+    @include list-reset();
+  }
+}
+#member-profile {
+  @include media('width>tablet') {
+    div[name='header'] {
+      float: left;
+      width: 50%;
+    }
+  }
+  div[name='name'] {
+    @extend h1;
+    div {
+      display: inline-block;
+      margin-right: 0.4em;
+    }
+  }
+  div[name='pseudonym'] {
+    margin-top: -1em;
+    margin-bottom: 1em;
+  }
+  #member-info {
+    &:after {
+      content: '';
+      display: block;
+      clear: both;
+    }
+  }
+}
 
 // projects
 #project-profile {
+  div[name^='label-'] {
+    @extend h2;
+  }
   [name='title'] {
     @extend h1;
     > sib-display-div {
@@ -159,6 +270,13 @@ sib-display#member-info,
         content: '#';
       }
     }
+    div[name='name'] {
+      font-weight: normal;
+      &:before {
+        padding: 0 0.5em;
+        content: '/';
+      }
+    }
   }
 }
 /*
@@ -168,4 +286,4 @@ label {
     content: ':';
   }
 }
-*/
\ No newline at end of file
+*/
diff --git a/src/styles/form.scss b/src/styles/form.scss
index b7b92d46..a36b8275 100644
--- a/src/styles/form.scss
+++ b/src/styles/form.scss
@@ -1,11 +1,18 @@
-//button, checkbox, color, date, datetime-local, email, file, hidden, image, month, number, password, radio, range, reset, search, submit, tel, text, time, url, week, datetime
+%button {
+  display: inline-block;
+  padding: 0.5em 1em;
+  border: none;
+  border-radius: 100em;
+  background-color: $color-yellow;
+  color: $color-black;
+  font-weight: normal;
+}
 
 .form-view {
   @extend %frame;
   padding: 1em;
 }
-
-sib-form.inline form {
+sib-display sib-form form {
   margin: -0.5em;
   > * {
     margin: 0.5em;
@@ -73,10 +80,7 @@ sib-form {
   input[type='file'],
   input[type='reset'],
   input[type='submit'] {
-    padding: 0.5em 1em;
-    border: none;
-    background-color: $color-yellow;
-    border-radius: 100em;
+    @extend %button;
   }
 
   input[type='reset'] {
diff --git a/src/styles/icons.scss b/src/styles/icons.scss
index ac9c733a..477162d0 100644
--- a/src/styles/icons.scss
+++ b/src/styles/icons.scss
@@ -90,7 +90,7 @@ $icons: (
   fire: '\e01c',
   eyeglass: '\e01d',
   envelope-open: '\e01e',
-  envolope-letter: '\e01f',
+  envelope-letter: '\e01f',
   energy: '\e020',
   emotsmile: '\e021',
   disc: '\e022',
@@ -193,7 +193,7 @@ $icons: (
   cloud-download: '\e083',
   cloud-upload: '\e084',
   doc: '\e085',
-  envolope: '\e086',
+  envelope: '\e086',
   eye: '\e087',
   flag: '\e088',
   folder: '\e089',
diff --git a/src/styles/main.scss b/src/styles/main.scss
index a70bc40e..bc832b2e 100644
--- a/src/styles/main.scss
+++ b/src/styles/main.scss
@@ -4,7 +4,9 @@
   display: none !important;
 }
 
-*,*::before,*::after{
+*,
+*::before,
+*::after {
   box-sizing: inherit;
 }
 
@@ -41,19 +43,27 @@ h6 {
 }
 
 h1 {
-  font-size: 1.23em;
+  font-size: 1.24em;
 }
 h2 {
-  font-size: 1.16em;
+  font-size: 1.04em;
 }
 h3 {
-  font-size: 1.12em;
+  font-size: .84em;
+}
+h4 {
+  font-size: 0.68em;
 }
 
 .debug {
   outline: 2px dotted red;
 }
 
+.frame {
+  @extend %frame;
+  padding: 1em;
+}
+
 #header {
   background-color: $color-white;
   color: $color-black;
diff --git a/src/styles/members.scss b/src/styles/members.scss
deleted file mode 100644
index 9d266db2..00000000
--- a/src/styles/members.scss
+++ /dev/null
@@ -1,220 +0,0 @@
-
-// members
-%img-circle {
-  $width: 55%;
-  display: block;
-  position: relative;
-  width: $width;
-  padding-bottom: $width;
-  height: 0;
-  margin: 2em auto;
-  img {
-    display: block;
-    position: absolute;
-    width: 100%;
-    height: 100%;
-    border-radius: 100%;
-    object-fit: cover;
-    object-position: center;
-  }
-}
-
-%member {
-  sib-display-img {
-    @extend %img-circle;
-  }
-  display: block;
-  position: relative;
-  @extend %frame;
-  padding: 0.5em;
-  cursor: pointer;
-
-  &::before,
-  &::after {
-    position: absolute;
-    top: 0;
-    right: 0;
-    bottom: 0;
-    left: 0;
-    transform: scale3d(0, 0, 1);
-    transition: transform 0.3s ease-out 0s;
-    background: #eac1;
-    content: '';
-    pointer-events: none;
-  }
-
-  &::before {
-    transform-origin: left top;
-  }
-
-  &::after {
-    transform-origin: right bottom;
-
-    background: #ace1;
-  }
-
-  &:hover,
-  &:focus {
-    &::before,
-    &::after {
-      transform: scale3d(1, 1, 1);
-    }
-  }
-}
-
-#profiles-list {
-  display: block;
-  div[name='header'] {
-    border-top: 2em solid $color-grey-light;
-    border-bottom: 1px solid $color-grey-light;
-    padding-bottom: 1em;
-    margin: -0.5em;
-    padding: 0.5em;
-    margin-bottom: 1em;
-    text-align: center;
-  }
-
-  > div {
-    display: grid;
-    margin-top: 1em;
-    grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
-    grid-gap: 1em;
-    label {
-      display: none;
-    }
-
-    > sib-display {
-      @extend %member;
-    }
-  }
-
-  hdapp-userinfo {
-    display: block;
-    color: $color-black;
-    font-size: 1.1em;
-    margin: 0.5em;
-    ul,
-    li {
-      display: block;
-      margin: 0;
-      padding: 0;
-      list-style: none;
-    }
-  }
-
-  div[name='pseudonym'] {
-    font-size: 0.8em;
-    div {
-      display: inline;
-    }
-  }
-}
-
-
-// member
-%detail-section {
-  font-weight: bold;
-  font-size: 18px;
-}
-
-#member-chat {
-  #conversejs {
-    margin: none;
-  }
-}
-#member-info {
-  padding: 1em;
-  @extend %frame;
-}
-
-#profiles-list,
-#member-info {
-  img {
-    display: block;
-  }
-
-  img {
-    width: 100%;
-  }
-
-  div[name='name'] {
-    @extend %detail-section;
-    padding-top: 10px;
-  }
-
-  div[name='name'],
-  div[name='location'] {
-    display: flex;
-  }
-}
-
-#member-detail {
-  #member-info {
-    sib-display-mailto,
-    sib-display-tel {
-      display: block;
-    }
-
-    a[name='email'],
-    a[name='number'] {
-      &::before {
-        font-family: FontAwesome;
-        padding-right: 4px;
-        color: black;
-      }
-    }
-    a[name='email'] {
-      &::before {
-        content: '\f0e0';
-      }
-    }
-    a[name='number'] {
-      &::before {
-        content: '\f10b';
-        font-size: 22px;
-        padding-left: 3px;
-        padding-right: 7px;
-      }
-    }
-  }
-
-  .section {
-    position: relative;
-
-    h2 {
-      @extend %detail-section;
-      margin-top: 40px;
-    }
-  }
-
-  #member-skills {
-    display: flex;
-    flex-wrap: wrap;
-
-    sib-display {
-      display: block;
-      background-color: $color-black;
-      color: $color-white;
-      border-radius: 100px;
-      padding: 3px 10px;
-      margin-bottom: 5px;
-      margin-right: 5px;
-    }
-  }
-}
-
-@include media('width>phone') {
-  #member-detail {
-    #member-info {
-      sib-display-img {
-        display: block;
-        float: right;
-        width: 300px;
-      }
-    }
-  }
-}
-
-#member-info {
-  @extend %member;
-}
diff --git a/www/lib/sib-core b/www/lib/sib-core
index 8d615893..837d45a5 160000
--- a/www/lib/sib-core
+++ b/www/lib/sib-core
@@ -1 +1 @@
-Subproject commit 8d615893e3f888a573e57ab7a67a41db4cd4c81f
+Subproject commit 837d45a5a38c201456220ffe10e1dbc2ff526b55
diff --git a/www/test.html b/www/test.html
index 1f95e273..2b5d36a8 100644
--- a/www/test.html
+++ b/www/test.html
@@ -40,8 +40,9 @@
     <div id="members">
       <h1>Members</h1>
       <sib-display id="profiles-list"
-        data-src="https://test-paris.happy-dev.fr/members/"
-        data-fields="pseudo, user.member.user.member.user.member.bio, ab"
+        data-src="http://127.0.0.1:8000/members/"
+        data-fields="roles, ab"
+        widget-skills="sib-display-lookuplist"
         set-ab="user.first_name, user.last_name"
       ></sib-display>
     </div>
-- 
GitLab