diff --git a/templates/_helpers.tpl b/templates/_helpers.tpl
new file mode 100644
index 0000000000000000000000000000000000000000..a5a01069f5d9e9e577218be5325e1bc6d67b02bd
--- /dev/null
+++ b/templates/_helpers.tpl
@@ -0,0 +1,101 @@
+{{/*
+Expand the name of the chart.
+*/}}
+{{- define "AppCtx.chartName" -}}
+{{- default .Chart.Name | trunc 24 | trimSuffix "-" }}
+{{- end }}
+
+{{/*
+Create chart name and version as used by the chart label.
+*/}}
+{{- define "AppCtx.chartNameVersion" -}}
+{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
+{{- end }}
+
+{{/*
+Create a default fully qualified app name.
+We truncate at 30 chars in order to leave room for suffixes (because some Kubernetes name fields are limited to 63 chars by the DNS naming spec).
+*/}}
+{{- define "AppCtx.name" }}
+{{- $name := default .Chart.Name .Values.nameOverride -}}
+{{- printf "%s" $name | trunc 30 | trimSuffix "-"}}
+{{- end }}
+
+{{/*
+Create the API name
+*/}}
+{{- define "AppCtx.apiName" }}
+{{- printf "%s-api" (include "AppCtx.name" .) | trunc 63  }}
+{{- end }}
+
+{{/*
+Create the Front name
+*/}}
+{{- define "AppCtx.frontName" }}
+{{- printf "%s-front" (include "AppCtx.name" .) | trunc 63  }}
+{{- end }}
+
+{{/*
+Create the DB name
+*/}}
+{{- define "AppCtx.dbName" }}
+{{- printf "%s-db" (include "AppCtx.name" .) | trunc 63 }}
+{{- end }}
+
+{{/*
+Selector labels
+*/}}
+{{- define "AppCtx.selectorLabels" -}}
+app.kubernetes.io/name: {{ include "AppCtx.name" . }}
+app.kubernetes.io/instance: {{ .Release.Name }}
+{{- end }}
+
+{{/*
+Common labels
+*/}}
+{{- define "AppCtx.labels" -}}
+helm.sh/chart: {{ include "AppCtx.chartName" . }}
+{{ include "AppCtx.selectorLabels" . }}
+app.kubernetes.io/part-of: {{ include "AppCtx.chartName" . }}
+app.kubernetes.io/managed-by: {{ .Release.Service }}
+{{- end }}
+
+{{- define "AppCtx.apiSelectorLabels" -}}
+{{ include "AppCtx.selectorLabels" . }}
+app.kubernetes.io/component: api
+{{- end }}
+
+{{- define "AppCtx.apiLabels" -}}
+{{ include "AppCtx.apiSelectorLabels" . }}
+app.kubernetes.io/part-of: {{ include "AppCtx.chartName" . }}
+app.kubernetes.io/managed-by: {{ .Release.Service }}
+app/language: java
+app/version: {{ .Values.api.image.tag }}
+{{- end }}
+
+
+{{- define "AppCtx.frontSelectorLabels" -}}
+{{ include "AppCtx.selectorLabels" . }}
+app.kubernetes.io/component: front
+{{- end }}
+
+{{- define "AppCtx.frontLabels" -}}
+{{ include "AppCtx.frontSelectorLabels" . }}
+app.kubernetes.io/part-of: {{ include "AppCtx.chartName" . }}
+app.kubernetes.io/managed-by: {{ .Release.Service }}
+app/language: javascript
+app/version: {{ .Values.front.image.tag }}
+{{- end }}
+
+{{- define "AppCtx.dbSelectorLabels" -}}
+{{ include "AppCtx.selectorLabels" . }}
+app.kubernetes.io/component: db
+{{- end }}
+
+{{- define "AppCtx.dbLabels" -}}
+{{ include "AppCtx.dbSelectorLabels" . }}
+app.kubernetes.io/part-of: {{ include "AppCtx.chartName" . }}
+app.kubernetes.io/managed-by: {{ .Release.Service }}
+app/language: postgresql
+app/version: {{ .Values.db.image.tag }}
+{{- end }}
diff --git a/templates/api-config.yaml b/templates/api-config.yaml
index 8a1d62f41136e24db7f5f97b6dcea18afbff6c32..39d56d6d86ddfc54a312f671e71af6d04ffd5b19 100644
--- a/templates/api-config.yaml
+++ b/templates/api-config.yaml
@@ -2,8 +2,9 @@
 apiVersion: v1
 kind: ConfigMap
 metadata:
-  name: {{.Values.name }}-api
+  name: {{ template "AppCtx.apiName" . }}
+  labels: {{ include "AppCtx.apiLabels" . | nindent 4 }}
 data:
-  DB_ENDPOINT: "{{ .Values.name }}:5432"
+  DB_ENDPOINT: "{{ template "AppCtx.dbName" . }}:5432"
   DB_NAME: {{ .Values.db.name }}
 {{- end }}
\ No newline at end of file
diff --git a/templates/api-deployment.yaml b/templates/api-deployment.yaml
index 65d2d5983a1735b4b7e4e4ed56494e38c8c622ec..baf0af5ccff3e862142c1531b06a89f7b0741936 100644
--- a/templates/api-deployment.yaml
+++ b/templates/api-deployment.yaml
@@ -2,18 +2,17 @@
 apiVersion: apps/v1
 kind: Deployment
 metadata:
-  name: {{.Values.name }}-api
-  labels:
-    app: api
+  name: {{ template "AppCtx.apiName" . }}
+  labels: {{ include "AppCtx.apiLabels" . | nindent 4 }}
 spec:
   replicas: {{ .Values.api.replicaCount }}
   selector:
-    matchLabels:
-      app: api
+    matchLabels: {{ include "AppCtx.apiSelectorLabels" . | nindent 8 }}
   template:
     metadata:
-      labels:
-        app: api
+      labels: {{ include "AppCtx.apiLabels" . | nindent 10 }}
+      annotations:
+        checksum/config: {{ include (print $.Template.BasePath "/api-config.yaml") . | sha256sum }}
     spec:
       securityContext:
         runAsUser: 1001
@@ -25,19 +24,19 @@ spec:
         image: {{ .Values.api.image.repository }}:{{ .Values.api.image.tag }}
         resources:
           requests:
-            memory: "192M"
-            cpu: "0.2"
+            memory: {{ .Values.api.requests.memory }}
+            cpu: {{ .Values.api.requests.cpu }}
           limits:
-            memory: "256M"
-            cpu: "1"
+            memory: {{ .Values.api.limits.memory }}
+            cpu: {{ .Values.api.limits.cpu }}
         startupProbe:
           httpGet:
             path: /actuator/health
             port: 8080
-          initialDelaySeconds: 15
-          periodSeconds: 3
+          initialDelaySeconds: {{ .Values.api.startupProbe.initialDelaySeconds }}
+          periodSeconds: {{ .Values.api.startupProbe.periodSeconds }}
           successThreshold: 1
-          failureThreshold: 5
+          failureThreshold: {{ .Values.api.startupProbe.failureThreshold }}
         livenessProbe:
           httpGet:
             path: /actuator/health/liveness
@@ -60,21 +59,21 @@ spec:
           - name: DB_ENDPOINT
             valueFrom:
               configMapKeyRef:
-                name: {{.Values.name }}-api
+                name: {{ template "AppCtx.apiName" . }}
                 key: DB_ENDPOINT
           - name: POSTGRES_DB
             valueFrom:
               configMapKeyRef:
-                name: {{.Values.name }}-api
+                name: {{ template "AppCtx.apiName" . }}
                 key: DB_NAME
           - name: POSTGRES_USER
             valueFrom:
               secretKeyRef:
-                name: {{ .Values.name }}-db  # Nom du secret
+                name: {{ template "AppCtx.dbName" . }}-credentials  # Nom du secret
                 key: pg_username     # nom de la clef dans le config map
           - name: POSTGRES_PASSWORD
             valueFrom:
               secretKeyRef:
-                name: {{ .Values.name }}-db  # Nom du secret
+                name: {{ template "AppCtx.dbName" . }}-credentials  # Nom du secret
                 key: pg_password 
 {{- end }}
\ No newline at end of file
diff --git a/templates/api-ingress.yaml b/templates/api-ingress.yaml
index 607b85cd79568c11bafada7cc4d724e0d3933538..c8bb6b2f5ef3270c5e96ee719f139a7eaf46c110 100644
--- a/templates/api-ingress.yaml
+++ b/templates/api-ingress.yaml
@@ -2,7 +2,8 @@
 apiVersion: networking.k8s.io/v1
 kind: Ingress
 metadata:
- name: {{.Values.name }}-api
+ name: {{ template "AppCtx.apiName" . }}
+ labels: {{ include "AppCtx.apiLabels" . | nindent 4 }}
 spec:
   ingressClassName: nginx
   rules:
@@ -11,7 +12,7 @@ spec:
       paths:
       - backend:
           service:
-            name: {{.Values.name }}-api
+            name: {{ template "AppCtx.apiName" . }}
             port:
               number: 80
         path: /
diff --git a/templates/api-service.yaml b/templates/api-service.yaml
index 596b7b30677e398882ad30cc539fb693c022f363..0f55be54a9ab93f72cb838eaf45ffe1766c4f38b 100644
--- a/templates/api-service.yaml
+++ b/templates/api-service.yaml
@@ -2,10 +2,10 @@
 apiVersion: v1
 kind: Service
 metadata:
-  name: {{.Values.name }}-api
+  name: {{ template "AppCtx.apiName" . }}
+  labels: {{ include "AppCtx.apiLabels" . | nindent 8 }}
 spec:
-  selector:
-    app: api
+  selector: {{ include "AppCtx.apiSelectorLabels" . | nindent 4 }}
   ports:
     - protocol: TCP
       port: 80
diff --git a/templates/front-config.yaml b/templates/front-config.yaml
index da89df77a97e1c3bee1c975c1c7dbb9db99547b5..5d5fd459758f9349305b0c94701eed2bdc4d6d31 100644
--- a/templates/front-config.yaml
+++ b/templates/front-config.yaml
@@ -8,7 +8,7 @@
 apiVersion: v1  
 kind: ConfigMap  
 metadata:  
-  name: {{ .Values.name }}-front  
+  name: {{ template "AppCtx.frontName" . }}
 data:  
   API_URL: {{ $apiUrl }}  
 {{- end }}
\ No newline at end of file
diff --git a/templates/front-deployment.yaml b/templates/front-deployment.yaml
index fa7c697c84c6b69bc07da8282ea9a3952024706f..6e98e4b7e2cc3f858c71b60252542f733d10eea1 100644
--- a/templates/front-deployment.yaml
+++ b/templates/front-deployment.yaml
@@ -2,18 +2,17 @@
 apiVersion: apps/v1
 kind: Deployment
 metadata:
-  name: {{ .Values.name }}-front
-  labels:
-    app: front
+  name: {{ template "AppCtx.frontName" . }}
+  labels: {{ include "AppCtx.frontLabels" . | nindent 4 }}
 spec:
   replicas: {{ .Values.front.replicaCount }}
   selector:
-    matchLabels:
-      app: front
+    matchLabels: {{ include "AppCtx.frontSelectorLabels" . | nindent 8 }}
   template:
     metadata:
-      labels:
-        app: front
+      labels: {{ include "AppCtx.frontLabels" . | nindent 10 }}
+      annotations:
+        checksum/config: {{ include (print $.Template.BasePath "/front-config.yaml") . | sha256sum }}
     spec:
       imagePullSecrets:
         - name: takima-school-registry
@@ -63,6 +62,6 @@ spec:
           - name: API_URL
             valueFrom:
               configMapKeyRef:
-                name: {{ .Values.name }}-front
+                name: {{ template "AppCtx.frontName" . }}
                 key: API_URL
 {{- end }}
\ No newline at end of file
diff --git a/templates/front-ingress.yaml b/templates/front-ingress.yaml
index 297d8009a95c0a9e763a5d13ff971c8bd00a678c..9d8648d701433f547ba39108e6ab108ac3344744 100644
--- a/templates/front-ingress.yaml
+++ b/templates/front-ingress.yaml
@@ -2,7 +2,8 @@
 apiVersion: networking.k8s.io/v1
 kind: Ingress
 metadata:
- name: {{ .Values.name }}-front
+ name: {{ template "AppCtx.frontName" . }}
+ labels: {{ include "AppCtx.frontLabels" . | nindent 4 }}
 spec:
   ingressClassName: nginx
   rules:
@@ -11,7 +12,7 @@ spec:
       paths:
       - backend:
           service:
-            name: {{ .Values.name }}-front
+            name: {{ template "AppCtx.frontName" . }}
             port:
               number: 80
         path: /
diff --git a/templates/front-service.yaml b/templates/front-service.yaml
index 8031d1a9e190946393c8359877c954bfb10ec2d5..29c82005e3fc7d556ec263b5c025f9ad8d7aeafb 100644
--- a/templates/front-service.yaml
+++ b/templates/front-service.yaml
@@ -2,10 +2,10 @@
 apiVersion: v1
 kind: Service
 metadata:
-  name: {{ .Values.name }}-front
+  name: {{ template "AppCtx.frontName" . }}
+  labels: {{ include "AppCtx.frontLabels" . | nindent 8 }}
 spec:
-  selector:
-    app: front
+  selector: {{ include "AppCtx.frontSelectorLabels" . | nindent 4 }}
   ports:
     - protocol: TCP
       port: 80
diff --git a/templates/pg-config.yaml b/templates/pg-config.yaml
index c493cdbcd5b7c7287d5f1d8127e7aa85fec8d1b1..9704903ae231c8d0f29831a83f8dc63ad05b9015 100644
--- a/templates/pg-config.yaml
+++ b/templates/pg-config.yaml
@@ -2,7 +2,8 @@
 apiVersion: v1
 kind: ConfigMap
 metadata:
-  name: {{ .Values.name }}-db
+  name: {{ template "AppCtx.dbName" . }}
+  labels: {{ include "AppCtx.dbLabels" . | nindent 4 }}
 data:
   db_name: {{ .Values.db.name }}
   db_path: "/var/lib/postgresql/data/pgdata"
diff --git a/templates/pg-credentials.yaml b/templates/pg-credentials.yaml
index 2c483f5656270d2503ea46b732c1d135a3793386..69b2d6efde5454707816e500c3ba84607df82db3 100644
--- a/templates/pg-credentials.yaml
+++ b/templates/pg-credentials.yaml
@@ -2,7 +2,8 @@
 apiVersion: v1
 kind: Secret
 metadata:
-  name: {{ .Values.name }}-db
+  name: {{ template "AppCtx.dbName" . }}-credentials
+  labels: {{ include "AppCtx.dbLabels" . | nindent 4 }}
 type: Opaque
 data:
   pg_username: YWRtaW4=   # user: admin
diff --git a/templates/pg-deployment.yaml b/templates/pg-deployment.yaml
index e7564bc78ee1f0202359e9ec4559ed6afa76f9fc..c4fd65ae807cc832e2a552bd9bd7e563930a75a4 100644
--- a/templates/pg-deployment.yaml
+++ b/templates/pg-deployment.yaml
@@ -2,18 +2,17 @@
 apiVersion: apps/v1
 kind: Deployment
 metadata:
-  name: {{ .Values.name }}-db
-  labels:
-    app: pg
+  name: {{ template "AppCtx.dbName" . }}
+  labels: {{ include "AppCtx.dbLabels" . | nindent 4 }}
 spec:
   replicas: 1
   selector:
-    matchLabels:
-      app: pg
+    matchLabels: {{ include "AppCtx.dbSelectorLabels" . | nindent 8 }}
   template:
     metadata:
-      labels:
-        app: pg
+      labels: {{ include "AppCtx.dbLabels" . | nindent 10 }}
+      annotations:
+        checksum/config: {{ include (print $.Template.BasePath "/front-config.yaml") . | sha256sum }}
     spec:
       containers:
       - name: postgres
@@ -24,23 +23,30 @@ spec:
           - name: POSTGRES_DB
             valueFrom:
               configMapKeyRef:
-                name: {{ .Values.name }}-db  # Nom du configmap
+                name: {{ template "AppCtx.dbName" . }}  # Nom du configmap
                 key: db_name     # nom de la clef dans le config map contenant le nom de la DB
           - name: PGDATA
             valueFrom:
               configMapKeyRef:
-                name: {{ .Values.name }}-db # Nom du configmap
+                name: {{ template "AppCtx.dbName" . }}  # Nom du configmap
                 key: db_path     # nom de la clef dans le configMap contenant path ou installer la db dans le volume persistant
           - name: POSTGRES_USER
             valueFrom:
               secretKeyRef:
-                name: {{ .Values.name }}-db  # Nom du secret
+                name: {{ template "AppCtx.dbName" . }}-credentials  # Nom du secret
                 key: pg_username     # nom de la clef dans le secret
           - name: POSTGRES_PASSWORD
             valueFrom:
               secretKeyRef:
-                name: {{ .Values.name }}-db  # Nom du secret
+                name: {{ template "AppCtx.dbName" . }}-credentials  # Nom du secret
                 key: pg_password     # nom de la clef dans le secret contenant le password
+        volumeMounts:
+        - mountPath: /var/lib/postgresql/data
+          name: pg-data
       imagePullSecrets:
       - name: takima-school-registry
-{{- end }}
\ No newline at end of file
+      volumes:
+      - name: pg-data
+        persistentVolumeClaim:
+          claimName: {{ template "AppCtx.dbName" . }}
+{{- end }}
diff --git a/templates/pg-pvc.yaml b/templates/pg-pvc.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..1ba729475407bdff493a12e2492e54c3930c4fa1
--- /dev/null
+++ b/templates/pg-pvc.yaml
@@ -0,0 +1,15 @@
+{{- if .Values.db.enabled }}
+apiVersion: v1
+kind: PersistentVolumeClaim
+metadata:
+  name: {{ template "AppCtx.dbName" . }}
+  labels: {{ include "AppCtx.dbLabels" . | nindent 4 }}
+spec:
+  accessModes:
+    - ReadWriteOnce
+  volumeMode: Filesystem
+  resources:
+    requests:
+      storage: {{ .Values.db.pvc.size }}
+  storageClassName: {{ .Values.db.pvc.storageClass }}
+{{- end }}
diff --git a/templates/pg-service.yaml b/templates/pg-service.yaml
index eb3a81cdb08b9f0a2a6169f3f8e434105d1655cf..547fd0c01f9db942d9b287c0ae7c279c616c5194 100644
--- a/templates/pg-service.yaml
+++ b/templates/pg-service.yaml
@@ -2,13 +2,11 @@
 apiVersion: v1
 kind: Service
 metadata:
-  name: {{ .Values.name }}-db
-  labels:
-    app: pg
+  name: {{ template "AppCtx.dbName" . }}
+  labels: {{ include "AppCtx.dbLabels" . | nindent 4 }}
 spec:
+  selector: {{ include "AppCtx.dbSelectorLabels" . | nindent 4 }}
   type: ClusterIP
   ports:
    - port: 5432
-  selector:
-   app: pg
 {{- end}}
diff --git a/values.prod.yaml b/values.prod.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..933c6a0eda4cf276504e8436550c9abdbf6f7564
--- /dev/null
+++ b/values.prod.yaml
@@ -0,0 +1,40 @@
+# Default values for CDB app.
+# This is a YAML-formatted file.
+# Declare variables to be passed into your templates.
+nameOverride: mycdb-prod
+
+api:
+  image:
+    tag: latest
+  replicaCount: 2
+  requests:
+    memory: "192M"
+    cpu: "0.2"
+  limits:
+    memory: "256M"
+    cpu: "1"
+  startupProbe:
+    initialDelaySeconds: 20
+    periodSeconds: 3
+    failureThreshold: 5
+  ingress:
+    tlsEnabled: true
+    host: api.esouvannavong.takima.school
+
+front:
+  image:
+    tag: latest
+  replicaCount: 1
+  ingress:
+    tlsEnabled: true
+    host: www.esouvannavong.takima.school
+
+db:
+  image:
+    tag: latest
+  pvc:
+    storageClass: gp2
+    size: 512Mi
+  credentials:
+    user: cdb
+    pwd: cdb123
\ No newline at end of file
diff --git a/values.staging.yaml b/values.staging.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..9beddb6dc2bc81f6fa5598dfbf6dc846d5c49a30
--- /dev/null
+++ b/values.staging.yaml
@@ -0,0 +1,40 @@
+# Default values for CDB app.
+# This is a YAML-formatted file.
+# Declare variables to be passed into your templates.
+nameOverride: mycdb-staging
+
+api:
+  image:
+    tag: latest
+  replicaCount: 1
+  requests:
+    memory: "128M"
+    cpu: "0.1"
+  limits:
+    memory: "256M"
+    cpu: "1"
+  startupProbe:
+    initialDelaySeconds: 20
+    periodSeconds: 3
+    failureThreshold: 5
+  ingress:
+    tlsEnabled: true
+    host: api-staging.esouvannavong.takima.school
+
+front:
+  image:
+    tag: latest
+  replicaCount: 1
+  ingress:
+    tlsEnabled: true
+    host: www-staging.esouvannavong.takima.school
+
+db:
+  image:
+    tag: latest
+  pvc:
+    storageClass: gp2
+    size: 512Mi
+  credentials:
+    user: cdb
+    pwd: cdb123
diff --git a/values.yaml b/values.yaml
index 888cb0659212e5f61d914355d569d51881872530..a2e66702cbb0dab355aa553be8e219bb76ed5204 100644
--- a/values.yaml
+++ b/values.yaml
@@ -1,8 +1,7 @@
 # Default values for CDB app.
 # This is a YAML-formatted file.
 # Declare variables to be passed into your templates.
-# We have only done front for now
-name: cdb
+nameOverride: mycdb
 
 api:
   enabled: true
@@ -10,9 +9,19 @@ api:
     repository: registry.gitlab.com/takima-school/images/cdb/api
     tag: latest
   replicaCount: 1
+  requests:
+    memory: "192M"
+    cpu: "0.2"
+  limits:
+    memory: "256M"
+    cpu: "1"
+  startupProbe:
+    initialDelaySeconds: 30
+    periodSeconds: 3
+    failureThreshold: 5
   ingress:
-    tlsEnabled: true
-    host: api.esouvannavong.takima.school
+    tlsEnabled: false
+    host: api.jlebloas.takima.school
 
 front:
   enabled: true
@@ -21,12 +30,19 @@ front:
     tag: latest
   replicaCount: 1
   ingress:
-    tlsEnabled: true
-    host: www.esouvannavong.takima.school
+    tlsEnabled: false
+    host: www.jlebloas.takima.school
 
 db:
   enabled: true
   name: cdb-db
   image:
     repository: registry.takima.io/school/proxy/postgres
-    tag: latest
\ No newline at end of file
+    tag: latest
+  pvc:
+    storageClass: gp2
+    size: 512Mi
+  credentials:
+    user: cdb
+    pwd: cdb123
+