|
| 1 | +{:topics |
| 2 | + [{:id :core |
| 3 | + :desc "Fundamental language concepts" |
| 4 | + :color "#E2F0CB" |
| 5 | + :direction 0} |
| 6 | + {:id :core/syntax |
| 7 | + :desc "Data structures, special forms, and syntax"} |
| 8 | + {:id :core/fp |
| 9 | + :desc "Functional programming patterns"} |
| 10 | + {:id :core/async |
| 11 | + :desc "Concurrency and core.async"} |
| 12 | + {:id :core/macros |
| 13 | + :desc "Macros and metaprogramming"} |
| 14 | + |
| 15 | + {:id :web |
| 16 | + :desc "Web development" |
| 17 | + :color "#B5EAD7" |
| 18 | + :direction 1} |
| 19 | + {:id :web/frontend |
| 20 | + :desc "Browser-based applications"} |
| 21 | + {:id :web/backend |
| 22 | + :desc "Server-side development"} |
| 23 | + |
| 24 | + {:id :data |
| 25 | + :desc "Data processing and analysis" |
| 26 | + :color "#C7CEEA" |
| 27 | + :direction 2} |
| 28 | + {:id :data/analysis |
| 29 | + :desc "Data transformation and ML"} |
| 30 | + {:id :data/viz |
| 31 | + :desc "Data visualization"} |
| 32 | + |
| 33 | + {:id :systems |
| 34 | + :desc "System architecture and patterns" |
| 35 | + :color "#FF9AA2" |
| 36 | + :direction 3} |
| 37 | + {:id :systems/observability |
| 38 | + :desc "Monitoring and debugging"} |
| 39 | + {:id :systems/performance |
| 40 | + :desc "Performance optimization"} |
| 41 | + {:id :systems/databases |
| 42 | + :desc "Database interactions"} |
| 43 | + |
| 44 | + {:id :tooling |
| 45 | + :desc "Development tools and workflow" |
| 46 | + :color "#FFB7B2" |
| 47 | + :direction 4} |
| 48 | + {:id :tooling/repl |
| 49 | + :desc "REPL tooling and workflows"} |
| 50 | + {:id :tooling/build |
| 51 | + :desc "Build systems and dependency management"} |
| 52 | + {:id :tooling/testing |
| 53 | + :desc "Testing methodologies"} |
| 54 | + |
| 55 | + {:id :community |
| 56 | + :desc "Ecosystem and learning resources" |
| 57 | + :color "#FFDAC1" |
| 58 | + :direction 5} |
| 59 | + {:id :community/events |
| 60 | + :desc "Conferences and meetups"}] |
| 61 | + |
| 62 | + :notebooks |
| 63 | + [ |
| 64 | + ;; ===== CORE ===== |
| 65 | + {:id "clj-docs" |
| 66 | + :title "Official Clojure Documentation" |
| 67 | + :url "https://clojure.org/guides/getting_started" |
| 68 | + :format :reference |
| 69 | + :topics [:core] |
| 70 | + :level 0} |
| 71 | + |
| 72 | + {:id "brave-clojure" |
| 73 | + :title "Clojure for the Brave and True" |
| 74 | + :url "https://www.braveclojure.com/" |
| 75 | + :format :interactive-book |
| 76 | + :topics [:core :core/fp] |
| 77 | + :level 1} |
| 78 | + |
| 79 | + {:id "transducers" |
| 80 | + :title "Transducers Explained" |
| 81 | + :url "https://www.youtube.com/watch?v=6mTbuzafcII" |
| 82 | + :format :video |
| 83 | + :topics [:core :core/fp] |
| 84 | + :level 2 |
| 85 | + :depends-on ["clj-docs"]} |
| 86 | + |
| 87 | + ;; ===== WEB ===== |
| 88 | + {:id "reagent-docs" |
| 89 | + :title "Reagent Documentation" |
| 90 | + :url "https://reagent-project.github.io/" |
| 91 | + :format :library-docs |
| 92 | + :topics [:web :web/frontend] |
| 93 | + :level 1} |
| 94 | + |
| 95 | + {:id "re-frame" |
| 96 | + :title "re-frame: A React Framework" |
| 97 | + :url "https://day8.github.io/re-frame/" |
| 98 | + :format :library-docs |
| 99 | + :topics [:web :web/frontend] |
| 100 | + :level 2 |
| 101 | + :depends-on ["reagent-docs"]} |
| 102 | + |
| 103 | + {:id "luminus" |
| 104 | + :title "Luminus Web Framework" |
| 105 | + :url "https://luminusweb.com/" |
| 106 | + :format :framework |
| 107 | + :topics [:web :web/backend] |
| 108 | + :level 2} |
| 109 | + |
| 110 | + ;; ===== DATA ===== |
| 111 | + {:id "tablecloth" |
| 112 | + :title "Tablecloth: Dataframe Library" |
| 113 | + :url "https://github.com/scicloj/tablecloth" |
| 114 | + :format :library-docs |
| 115 | + :topics [:data :data/analysis] |
| 116 | + :level 1} |
| 117 | + |
| 118 | + {:id "notespace" |
| 119 | + :title "Notespace Live Notebooks" |
| 120 | + :url "https://github.com/scicloj/notespace" |
| 121 | + :format :interactive-tool |
| 122 | + :topics [:data :data/viz] |
| 123 | + :level 2} |
| 124 | + |
| 125 | + {:id "tech.ml" |
| 126 | + :title "tech.ml Machine Learning" |
| 127 | + :url "https://github.com/techascent/tech.ml" |
| 128 | + :format :library-docs |
| 129 | + :topics [:data :data/ml] |
| 130 | + :level 3} |
| 131 | + |
| 132 | + ;; ===== TOOLING ===== |
| 133 | + {:id "deps-edn" |
| 134 | + :title "deps.edn Reference" |
| 135 | + :url "https://clojure.org/reference/deps_and_cli" |
| 136 | + :format :reference |
| 137 | + :topics [:tooling] |
| 138 | + :level 0} |
| 139 | + |
| 140 | + {:id "cider" |
| 141 | + :title "CIDER for Emacs" |
| 142 | + :url "https://docs.cider.mx/" |
| 143 | + :format :tool-docs |
| 144 | + :topics [:tooling :tooling/repl] |
| 145 | + :level 1} |
| 146 | + |
| 147 | + {:id "shadow-cljs" |
| 148 | + :title "shadow-cljs Build Tool" |
| 149 | + :url "https://shadow-cljs.github.io/docs/UsersGuide.html" |
| 150 | + :format :tool-docs |
| 151 | + :topics [:tooling :tooling/build] |
| 152 | + :level 2} |
| 153 | + |
| 154 | + ;; ===== COMMUNITY ===== |
| 155 | + {:id "scicloj" |
| 156 | + :title "SciCloj Community" |
| 157 | + :url "https://scicloj.github.io/" |
| 158 | + :format :community |
| 159 | + :topics [:community :community/orgs] |
| 160 | + :level 0} |
| 161 | + |
| 162 | + {:id "clojure-camp" |
| 163 | + :title "ClojureCamp Events" |
| 164 | + :url "https://clojurecamp.berlin/" |
| 165 | + :format :community |
| 166 | + :topics [:community :community/events] |
| 167 | + :level 1} |
| 168 | + |
| 169 | + {:id "clojure-tv" |
| 170 | + :title "ClojureTV YouTube" |
| 171 | + :url "https://www.youtube.com/user/ClojureTV" |
| 172 | + :format :video-channel |
| 173 | + :topics [:community :community/learning] |
| 174 | + :level 0} |
| 175 | + |
| 176 | + {:id "clojurians" |
| 177 | + :title "Clojurians Slack" |
| 178 | + :url "https://clojurians.net/" |
| 179 | + :format :community |
| 180 | + :topics [:community :community/chat] |
| 181 | + :level 0} |
| 182 | + |
| 183 | + {:id "practicalli" |
| 184 | + :title "Practicalli Tutorials" |
| 185 | + :url "https://practical.li/" |
| 186 | + :format :tutorials |
| 187 | + :topics [:community :community/learning] |
| 188 | + :level 1} |
| 189 | + |
| 190 | + ;; ===== SYSTEMS ===== |
| 191 | + {:id "jvm-tuning" |
| 192 | + :title "JVM Performance Guide" |
| 193 | + :url "https://clojure.org/reference/jvm_programming" |
| 194 | + :format :guide |
| 195 | + :topics [:systems :systems/production] |
| 196 | + :level 3} |
| 197 | + |
| 198 | + {:id "component" |
| 199 | + :title "Component Library" |
| 200 | + :url "https://github.com/stuartsierra/component" |
| 201 | + :format :library-docs |
| 202 | + :topics [:systems :systems/design] |
| 203 | + :level 2} |
| 204 | + |
| 205 | + {:id "nrepl" |
| 206 | + :title "nREPL Protocol" |
| 207 | + :url "https://nrepl.org/" |
| 208 | + :format :protocol |
| 209 | + :topics [:systems :systems/tooling] |
| 210 | + :level 2} |
| 211 | + |
| 212 | + {:id "datomic" |
| 213 | + :title "Datomic Database" |
| 214 | + :url "https://docs.datomic.com/cloud/" |
| 215 | + :format :database |
| 216 | + :topics [:systems :systems/data :data/db] |
| 217 | + :level 3} |
| 218 | + |
| 219 | + ;; ===== CROSS-CATEGORY ===== |
| 220 | + {:id "clojurescript" |
| 221 | + :title "ClojureScript Guide" |
| 222 | + :url "https://clojurescript.org/" |
| 223 | + :format :reference |
| 224 | + :topics [:core :web :tooling] |
| 225 | + :level 1} |
| 226 | + |
| 227 | + {:id "kaocha" |
| 228 | + :title "Kaocha Test Runner" |
| 229 | + :url "https://github.com/lambdaisland/kaocha" |
| 230 | + :format :tool-docs |
| 231 | + :topics [:tooling :tooling/testing] |
| 232 | + :level 2} |
| 233 | + |
| 234 | + {:id "xtdb" |
| 235 | + :title "XTDB Documentation" |
| 236 | + :url "https://xtdb.com/" |
| 237 | + :format :database |
| 238 | + :topics [:systems :systems/data :data/db] |
| 239 | + :level 3} |
| 240 | + ]} |
0 commit comments