diff --git a/.gitignore b/.gitignore
index 5afbeb2..e4a8dae 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,3 +10,4 @@ urls.sqlite
 .env
 cookie*
 .idea/
+.DS_Store
diff --git a/README.md b/README.md
index 5e74d0d..8fc7f8e 100644
--- a/README.md
+++ b/README.md
@@ -154,6 +154,20 @@ to send your desired headers. It must be a comma separated list of valid
 you can set it to `no-cache, private` to disable caching. It might help during testing if
 served through a proxy.
 
+## Deploying in your Kubernetes cluster with Helm
+The helm values are very sparse to keep it simple. If you need more values to be variable, feel free to adjust.
+
+The PVC allocates 100Mi and the PV is using a host path volume.
+
+The helm chart assumes you have [cert manager](https://github.com/jetstack/cert-manager) deployed to have TLS certificates managed easily in your cluster. Feel free to remove the issuer and adjust the ingress if you're on AWS with EKS for example.
+
+To get started, `cp helm-chart/values.yaml helm-chart/my-values.yaml` and adjust `password`, `fqdn` and `letsencryptmail` in your new `my-values.yaml`, then just run
+
+``` bash
+cd helm-chart
+helm upgrade --install chhoto-url -n chhoto-url --create-namespace -f my-values.yaml
+```
+
 ## Instructions for CLI usage
 The application can be used from the terminal using something like `curl`. In all the examples
 below, replace `http://localhost:4567` with where your instance of `chhoto-url` is accessible.
diff --git a/helm-chart/Chart.yaml b/helm-chart/Chart.yaml
new file mode 100644
index 0000000..a98014f
--- /dev/null
+++ b/helm-chart/Chart.yaml
@@ -0,0 +1,24 @@
+apiVersion: v2
+name: chhoto-url
+description: A Helm chart for Kubernetes
+
+# A chart can be either an 'application' or a 'library' chart.
+#
+# Application charts are a collection of templates that can be packaged into versioned archives
+# to be deployed.
+#
+# Library charts provide useful utilities or functions for the chart developer. They're included as
+# a dependency of application charts to inject those utilities and functions into the rendering
+# pipeline. Library charts do not define any templates and therefore cannot be deployed.
+type: application
+
+# This is the chart version. This version number should be incremented each time you make changes
+# to the chart and its templates, including the app version.
+# Versions are expected to follow Semantic Versioning (https://semver.org/)
+version: 0.1.0
+
+# This is the version number of the application being deployed. This version number should be
+# incremented each time you make changes to the application. Versions are not expected to
+# follow Semantic Versioning. They should reflect the version the application is using.
+# It is recommended to use it with quotes.
+appVersion: "1.16.0"
diff --git a/helm-chart/templates/ingress.yml b/helm-chart/templates/ingress.yml
new file mode 100644
index 0000000..c57207d
--- /dev/null
+++ b/helm-chart/templates/ingress.yml
@@ -0,0 +1,23 @@
+apiVersion: networking.k8s.io/v1
+kind: Ingress
+metadata:
+  name: chhoto-url
+  annotations:
+    cert-manager.io/issuer: "letsencrypt"
+    acme.cert-manager.io/http01-edit-in-place: "true"
+spec:
+  tls:
+    - hosts:
+      - {{ .Values.fqdn }}
+      secretName: my-tls
+  rules:
+  - host: {{ .Values.fqdn }}
+    http:
+      paths:
+      - path: /
+        pathType: Prefix
+        backend:
+          service:
+            name: chhoto-url
+            port:
+              number: 80
diff --git a/helm-chart/templates/issuer.yml b/helm-chart/templates/issuer.yml
new file mode 100644
index 0000000..43a74c5
--- /dev/null
+++ b/helm-chart/templates/issuer.yml
@@ -0,0 +1,18 @@
+apiVersion: cert-manager.io/v1
+kind: Issuer
+metadata:
+  name: letsencrypt
+spec:
+  acme:
+    # The ACME server URL
+    server: https://acme-v02.api.letsencrypt.org/directory
+    # Email address used for ACME registration
+    email: {{ .Values.letsencryptmail }}
+    # Name of a secret used to store the ACME account private key
+    privateKeySecretRef:
+      name: letsencrypt
+    # Enable the HTTP-01 challenge provider
+    solvers:
+      - http01:
+          ingress:
+            ingressClassName: nginx
\ No newline at end of file
diff --git a/helm-chart/templates/pv.yml b/helm-chart/templates/pv.yml
new file mode 100644
index 0000000..6bd7e99
--- /dev/null
+++ b/helm-chart/templates/pv.yml
@@ -0,0 +1,13 @@
+apiVersion: v1
+kind: PersistentVolume
+metadata:
+  name: chhoto-pv
+  labels:
+    app: chhoto-url
+spec:
+  capacity:
+    storage: 100Mi
+  accessModes:
+    - ReadWriteOnce
+  hostPath:
+    path: /mnt/data/chhoto-data
diff --git a/helm-chart/templates/secret.yml b/helm-chart/templates/secret.yml
new file mode 100644
index 0000000..9d09d33
--- /dev/null
+++ b/helm-chart/templates/secret.yml
@@ -0,0 +1,7 @@
+apiVersion: v1
+kind: Secret
+metadata:
+  name: secret
+type: Opaque
+data:
+  password: {{ .Values.password }}
diff --git a/helm-chart/templates/sts.yml b/helm-chart/templates/sts.yml
new file mode 100644
index 0000000..db787cf
--- /dev/null
+++ b/helm-chart/templates/sts.yml
@@ -0,0 +1,38 @@
+apiVersion: apps/v1
+kind: StatefulSet
+metadata:
+  name: chhoto-url
+spec:
+  replicas: 1
+  selector:
+    matchLabels:
+      app: chhoto-url
+  template:
+    metadata:
+      labels:
+        app: chhoto-url
+    spec:
+      containers:
+        - name: chhoto-url
+          image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
+          ports:
+            - containerPort: 4567
+          env:
+            - name: password
+              valueFrom:
+                secretKeyRef:
+                  name: secret
+                  key: password
+            - name: db_url
+              value: /db/urls.sqlite
+          volumeMounts:
+            - name: data
+              mountPath: /db
+  volumeClaimTemplates:
+    - metadata:
+        name: data
+      spec:
+        accessModes: [ "ReadWriteOnce" ]
+        resources:
+          requests:
+            storage: 100Mi
diff --git a/helm-chart/templates/svc.yml b/helm-chart/templates/svc.yml
new file mode 100644
index 0000000..a14f91c
--- /dev/null
+++ b/helm-chart/templates/svc.yml
@@ -0,0 +1,14 @@
+apiVersion: v1
+kind: Service
+metadata:
+  name: chhoto-url
+  labels:
+    app: chhoto-url
+spec:
+  type: ClusterIP
+  ports:
+    - port: 80
+      targetPort: 4567
+      protocol: TCP
+  selector:
+    app: chhoto-url
diff --git a/helm-chart/values.yaml b/helm-chart/values.yaml
new file mode 100644
index 0000000..97749e3
--- /dev/null
+++ b/helm-chart/values.yaml
@@ -0,0 +1,14 @@
+# Default values for chhoto-url.
+# This is a YAML-formatted file.
+# Declare variables to be passed into your templates.
+
+image:
+  repository: sintan1729/chhoto-url
+  pullPolicy: IfNotPresent
+  tag: "5.4.6"
+
+# please use a better password in your values and base64 encode it
+password: cGFzc3dvcmQ=
+
+fqdn: your.short.link.url.com
+letsencryptmail: your.mail@address.com