 ")
 
 (defvar leetcode--check-mark "✓")
-(defvar leetcode--problem-buffer-name "*leetcode:problem*")
+(defconst leetcode--buffer-name "*leetcode*")
+(defconst leetcode--description-buffer-name "*leetcode-description*")
+(defconst leetcode--submit-buffer-name "*leetcode-submit*")
 
 ;;; Login
 ;; URL
 (defconst leetcode--domain "leetcode.com")
 (defconst leetcode--base-url "https://leetcode.com")
 (defconst leetcode--url-login (concat leetcode--base-url "/accounts/login"))
+(defconst leetcode--problems-submission (concat leetcode--base-url "/problems/%s/submissions/"))
+(defconst leetcode--submission (concat leetcode--base-url "/submissions/detail/%s/check/"))
 
 ;; Cookie
 (defconst leetcode--csrftoken "csrftoken")
 (defconst leetcode--cookie-localpart-separator "/")
 
 ;; Header
-(defconst leetcode--Referer          `("Referer" . ,leetcode--url-login))
 (defconst leetcode--User-Agent       '("User-Agent" . "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:66.0) Gecko/20100101 Firefox/66.0"))
 (defconst leetcode--X-Requested-With '("X-Requested-With" . "XMLHttpRequest"))
 (defconst leetcode--X-CSRFToken      "X-CSRFToken")

        (re-search-forward "dislikes: .*" nil t)
        (insert (make-string 4 ?\s))
        (insert-text-button "solve it"
                            'action (lambda (btn) (leetcode-start-coding title (append snippets nil)))
                            'help-echo "solve the problem."))
      (rename-buffer buf-name)
      (leetcode-problem-description-mode)

                           (if (string-equal (plist-get p :status) "ac")
                               leetcode--check-mark
                             " ")
                           (number-to-string (plist-get p :pos))
                           (plist-get p :title)
                           (plist-get p :acceptance)
                           (cond
