Add http-port override, login UI improvements, and dev tooling

This commit is contained in:
2026-05-27 14:13:43 -07:00
parent e5a2d0bbba
commit 17eebe5628
12 changed files with 392 additions and 13 deletions

View File

@@ -62,7 +62,9 @@
(.setHandler server stats-handler))
(.setStopAtShutdown server true))
(mount/defstate port :start (Integer/parseInt (str (or (env :port) "3000"))))
(def ^:dynamic *http-port-override* nil)
(mount/defstate port :start (Integer/parseInt (str (or *http-port-override* (env :port) "3000"))))
(mount/defstate jetty
:start (run-jetty app {:port port
@@ -82,7 +84,7 @@
(statsd/gauge "requests.5xx" (double (.getResponses5xx (.getHandler jetty))))
(.statsReset (.getHandler jetty))
(catch Exception e
(alog/warn ::cant-collect-stats :error e))))
(alog/warn ::cant-collect-stats :error e))))
#_{:clj-kondo/ignore [:clojure-lsp/unused-public-var]}
(mount/defstate jetty-stats

View File

@@ -15,7 +15,7 @@
:session {}})
(defn impersonate [request]
{:status 200
{:status 200
:session {:identity (dissoc (jwt/unsign (get-in request [:query-params "jwt"])
(:jwt-secret env)
{:alg :hs512})
@@ -88,13 +88,14 @@
[:p "To see error details, " [:a.underline.cursor-pointer {"@click" "expandError=true"} "click here"] "."]
[:pre#error-details.text-xs {:x-show "expandError" :x-text "errorDetails"}]]]]]]
[:div.p-4.flex.flex-row.justify-center.items-center.h-screen
(com/card {:class "animate-slideUp"}
[:div.p-4
[:img {:src "/img/logo-big.png"}]
(com/card {:class "animate-slideUp w-full max-w-md"}
[:div.p-8
[:div.flex.justify-center.mb-6
[:img {:src "/img/logo-big.png" :class "max-w-[200px]"}]]
[:div
[:a.button.is-large.is-primary {:href (login-url (get (:query-params request) "redirect-to"))} "Login with Google"]]
"HELLO"])]]]])
[:a {:href (login-url (get (:query-params request) "redirect-to"))
:class "inline-flex items-center justify-center w-full px-8 py-3 text-base font-medium text-white bg-blue-600 hover:bg-blue-700 rounded-lg transition-colors duration-200 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2"}
"Login with Google"]]])]]]])
(defn login [request]
(base-page

32
src/clj/dev_mcp.clj Normal file
View File

@@ -0,0 +1,32 @@
(ns dev-mcp
"Leiningen task: start nREPL + web server on random ports."
(:require [clojure.java.io :as io]
[nrepl.server :as nrepl])
(:import [java.net ServerSocket]))
(defn available-port []
"Pick a random available TCP port."
(with-open [s (ServerSocket. 0)]
(.getLocalPort s)))
(defn- mcp-repl-task [& _args]
"Start nREPL server and HTTP server on random ports.
Writes ports to nrepl-port and .http-port files.
Connect with: clj-nrepl-eval -p $(cat nrepl-port)"
(let [nrepl-port (available-port)
http-port (available-port)]
(spit "nrepl-port" (str nrepl-port))
(spit ".http-port" (str http-port))
(println (format "nREPL port: %d (nrepl-port)" nrepl-port))
(println (format "HTTP port: %d (.http-port)" http-port))
(nrepl/start-server :port nrepl-port)
(require 'user)
(user/start-dev http-port)
(println "Ready.")
@(promise)))
(defn -main
"Entry point for: lein trampoline run -m dev-mcp"
[& args]
(apply mcp-repl-task args))

View File

@@ -347,15 +347,17 @@
(hawk.core/watch! [{:paths ["src/" "test/"]
:handler auto-reset-handler}]))
(defn start-http []
(defn start-http [& [http-port]]
(when http-port
(alter-var-root #'auto-ap.server/*http-port-override* (constantly http-port)))
(mount.core/start (mount.core/only #{#'auto-ap.server/port #'auto-ap.server/jetty})))
(defn start-dev []
(defn start-dev [& [http-port]]
(set-refresh-dirs "src")
#_(clojure.tools.namespace.repl/disable-reload! (find-ns 'auto-ap.server))
#_(clojure.tools.namespace.repl/disable-reload! (find-ns 'auto-ap.time))
(start-db)
(start-http)
(start-http http-port)
(auto-reset))
#_(defn start-search []