diff --git a/src/config/env.lisp b/src/config/env.lisp
index 4af77ac..12f4026 100644
--- a/src/config/env.lisp
+++ b/src/config/env.lisp
@@ -5,12 +5,19 @@
            #:*port*))
 (in-package #:hp/config/env)
 
-(defparameter *env* (or (uiop:getenv "HP_ENV") "dev"))
+(defmacro defenv (name env &key default parser)
+  (let ((env-val (gensym "val")))
+    `(defparameter ,name
+       (let ((,env-val (uiop:getenv ,env)))
+         (if ,env-val
+             (funcall ,(or parser '#'identity) ,env-val)
+             ,default)))))
+
+(defenv *env*  "HP_ENV"  :default "dev")
+(defenv *port* "HP_PORT" :default 3000 :parser #'parse-integer)
 
 (defun dev-mode-p ()
   (string= *env* "dev"))
 
 (defun prod-mode-p ()
   (string= *env* "prod"))
-
-(defparameter *port* (parse-integer (or (uiop:getenv "HP_PORT") "3000")))