Initial Kit project with PostgreSQL, HTMX, Hiccup, and Tailwind

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-14 11:45:09 +01:00
co-authored by Claude Opus 4.6
commit c1f386ef44
37 changed files with 1920 additions and 0 deletions
+5
View File
@@ -0,0 +1,5 @@
(ns pmagnus.elprice.dev-middleware)
(defn wrap-dev [handler _opts]
(-> handler
))
+14
View File
@@ -0,0 +1,14 @@
(ns pmagnus.elprice.env
(:require
[clojure.tools.logging :as log]
[pmagnus.elprice.dev-middleware :refer [wrap-dev]]))
(def defaults
{:init (fn []
(log/info "\n-=[elprice starting using the development or test profile]=-"))
:start (fn []
(log/info "\n-=[elprice started successfully using the development or test profile]=-"))
:stop (fn []
(log/info "\n-=[elprice has shut down successfully]=-"))
:middleware wrap-dev
:opts {:profile :dev}})
+59
View File
@@ -0,0 +1,59 @@
(ns user
"Userspace functions you can run by default in your local REPL."
(:require
[clojure.pprint]
[clojure.spec.alpha :as s]
[clojure.tools.namespace.repl :as repl]
[criterium.core :as c] ;; benchmarking
[expound.alpha :as expound]
[integrant.core :as ig]
[integrant.repl :refer [clear go halt prep init reset reset-all]]
[integrant.repl.state :as state]
[kit.api :as kit]
[lambdaisland.classpath.watch-deps :as watch-deps] ;; hot loading for deps
[pmagnus.elprice.core :refer [start-app]]))
;; uncomment to enable hot loading for deps
(watch-deps/start! {:aliases [:dev :test]})
(alter-var-root #'s/*explain-out* (constantly expound/printer))
(add-tap (bound-fn* clojure.pprint/pprint))
(defn dev-prep!
[]
(integrant.repl/set-prep! (fn []
(-> (pmagnus.elprice.config/system-config {:profile :dev})
(ig/expand)))))
(defn test-prep!
[]
(integrant.repl/set-prep! (fn []
(-> (pmagnus.elprice.config/system-config {:profile :test})
(ig/expand)))))
;; Can change this to test-prep! if want to run tests as the test profile in your repl
;; You can run tests in the dev profile, too, but there are some differences between
;; the two profiles.
(dev-prep!)
(repl/set-refresh-dirs "src/clj")
(def refresh repl/refresh)
(defn reset-db []
(migratus.core/reset (:db.sql/migrations state/system)))
(defn rollback []
(migratus.core/rollback (:db.sql/migrations state/system)))
(defn migrate []
(migratus.core/migrate (:db.sql/migrations state/system)))
(def query-fn (:db.sql/query-fn state/system))
(comment
(go)
(reset))
+38
View File
@@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="10 seconds">
<statusListener class="ch.qos.logback.core.status.NopStatusListener" />
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoders are assigned the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
<encoder>
<charset>UTF-8</charset>
<pattern>%date{ISO8601} [%thread] %-5level %logger{36} - %msg %n</pattern>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>log/pmagnus.elprice.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>log/pmagnus.elprice.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!-- keep 30 days of history -->
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<charset>UTF-8</charset>
<pattern>%date{ISO8601} [%thread] %-5level %logger{36} - %msg %n</pattern>
</encoder>
</appender>
<logger name="org.eclipse.aether" level="warn" />
<logger name="io.methvin.watcher" level="warn" />
<logger name="org.eclipse.jgit" level="warn" />
<logger name="com.zaxxer.hikari" level="warn" />
<logger name="org.apache.http" level="warn" />
<logger name="org.xnio.nio" level="warn" />
<logger name="io.undertow" level="warn" />
<root level="DEBUG">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>
</configuration>
+12
View File
@@ -0,0 +1,12 @@
(ns pmagnus.elprice.env
(:require [clojure.tools.logging :as log]))
(def defaults
{:init (fn []
(log/info "\n-=[elprice starting]=-"))
:start (fn []
(log/info "\n-=[elprice started successfully]=-"))
:stop (fn []
(log/info "\n-=[elprice has shut down successfully]=-"))
:middleware (fn [handler _] handler)
:opts {:profile :prod}})
+16
View File
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<statusListener class="ch.qos.logback.core.status.NopStatusListener" />
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%-5relative %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender>
<logger name="com.zaxxer.hikari" level="error" />
<logger name="org.apache.http" level="error" />
<logger name="org.xnio.nio" level="error" />
<logger name="io.undertow" level="error" />
<root level="INFO">
<appender-ref ref="STDOUT" />
</root>
</configuration>
+16
View File
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<statusListener class="ch.qos.logback.core.status.NopStatusListener" />
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%-5relative %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender>
<logger name="com.zaxxer.hikari" level="error" />
<logger name="org.apache.http" level="error" />
<logger name="org.xnio.nio" level="error" />
<logger name="io.undertow" level="error" />
<root level="INFO">
<appender-ref ref="STDOUT" />
</root>
</configuration>