All notable changes to this project will be documented in this file. This change log follows the conventions of keepachangelog.com.
hooks-users.clj — Implemented before-save hook to handle password lifecycle for user records:
/change/password after first login.:password key is stripped from params before the update, leaving the existing hash in the database untouched.buddy-hashers (bcrypt) before being written to the database.users-entity.edn — Enabled the :hooks {:before-save ...} entry so the password hook is active in every generated project.layout.clj — Replaced the plain logout button in the navbar with a user dropdown. Logged-in users now see a dropdown showing their username (with a bi-person-circle icon) that contains a Change Password link (/change/password) and a Logout item. This makes the password change feature reachable from the authenticated UI for the first time.models-form.clj — Removed the "Change Password" button from the login form. It linked to a wrap-login-protected route (/change/password) making it inaccessible to unauthenticated users and creating a redirect loop. The entry point is now correctly placed in the post-login navbar dropdown.resources/migrations/006-audit_log.sqlite.up.sql — new migration creates the audit_log table for SQLite.resources/migrations/006-audit_log.sqlite.down.sql — drops the audit_log table (SQLite).resources/migrations/006-audit_log.mysql.up.sql — new migration creates the audit_log table for MySQL.resources/migrations/006-audit_log.mysql.down.sql — drops the audit_log table (MySQL).resources/migrations/006-audit_log.postgresql.up.sql — new migration creates the audit_log table for PostgreSQL.resources/migrations/006-audit_log.postgresql.down.sql — drops the audit_log table (PostgreSQL).audit-log-entity.edn — new read-only entity config for the audit_log table. Restricted to ["A" "S"] rights, all create/edit/delete actions disabled, sorted newest-first. Generated to resources/entities/audit_log.edn in every new project.webgen.clj — registered audit-log-entity.edn so it is included in every generated project.README.md — Section 12 (Audit Trail) fully rewritten:
created_by, created_at, modified_by, modified_at) and (2) the audit_log table written on every save/delete when :audit? true.:audit? true — if the four columns exist in the table they are populated automatically.CREATE TABLE SQL for all three databases with correct TEXT/VARCHAR column types matching what the framework actually writes (java.time.Instant serialized as ISO-8601 string).:default connection.README.md — Section 4 (Entity Configuration): Custom UI Renderers section expanded to document all three supported keys (:grid-fn, :form-fn, :dashboard-fn) with correct function signatures and Hiccup examples for each.README.md — Section 23 (Custom Dashboards and Reports): added "Working Example: Contactos Summary Dashboard" subsection with complete, runnable controller/model/view code using the contactos, cars, and siblings demo tables.README.md — All SQL JOIN examples updated to use 3-character table aliases (e.g. pro, cat, ord, cus) matching the convention used by lein scaffold.README.md — FK Field section: added :queries blocks with LEFT JOIN examples to the single-FK, multiple-FK, and cascading-FK examples showing how both :list and :get must join the FK table to populate :grid-only? display columns.README.md — Section 17 (Menu Customization) examples corrected to match the actual menu.clj API:
custom-nav-links now documented as vector-of-vectors ["/path" "Label" "Rights" order] instead of the previously shown map format.custom-dropdowns now includes required :id, :data-id, and :order keys, with items in the correct vector format.get-menu-config reimplementation example; replaced with a note that the function handles merging automatically.README.md — Section 4 Menu Categories table: removed nonexistent :catalog category.README.md — Section 23 "Adding Items to the Menu": replaced invalid bare EDN map literals (using :url, :icon, :category keys) with a correct custom-nav-links / custom-dropdowns example.models-form.clj — single-toggle :checkbox fields (no :options) now render correctly. Previously the build-field function only handled checkboxes as multi-option groups, causing a single checkbox to produce an empty div with no <input> element.
<input value=""> (so the param key is always present when unchecked) followed by the real checkbox input.:checked state is now correctly determined by comparing the current DB value against the configured checked value.engine-render.clj — the :checkbox render path now passes :checked-value (the entity field's configured :value, e.g. "T") separately from :value (the current DB value), so the checked state reflects the actual stored data instead of always being true.README.md — :checkbox field documentation updated to clarify that unchecked submits "", and added a canonical before-save hook pattern for coercing the value at the database layer.docs/TUTORIAL_POS_INVENTORY.md — added new Step 3 — Remove the Example Files instructing readers to delete the generated example migrations (003-contactos, 004-siblings, 005-cars), their entity EDN files, and the example hooks (contactos.clj, cars.clj, siblings.clj) before starting the tutorial. All subsequent steps renumbered (4–17).docs/TUTORIAL_POS_INVENTORY.md — new step-by-step tutorial for junior programmers building a Point of Sale inventory system from scratch. Covers all 16 steps: project creation, database migrations, all entity configs (productos, provedores, inventario, movimientos), hook implementations for image upload and automatic inventory adjustment on save/delete, and the full custom POS register screen (controller/model/view, CSS, JavaScript cart engine, CSRF-safe fetch API, receipt printing).README.md — complete rewrite. All content from CHEATSHEET.md, FRAMEWORK_GUIDE.md, HOOKS_GUIDE.md, DATABASE_MIGRATION_GUIDE.md, QUICK_REFERENCE.md, QUICKSTART.md, and RUN_APP.md consolidated into a single 2,400+ line professional reference covering every entity option, all field types, hooks, validators, computed fields, subgrids, custom queries, access control, audit trail, migrations, scaffolding, custom routes, menu, i18n, auth, themes, deployment, and publishing.resources/leiningen/new/webgen/README.md — rewritten as a practical getting-started guide for generated projects (quick start, project structure, adding entities, database commands, config reference, troubleshooting).resources/i18n/en.edn — added legend at top; all section headers prefixed with [GENERIC] or [DEMO] to distinguish reusable framework keys from real estate demo content.resources/i18n/es.edn — same [GENERIC]/[DEMO] markers applied (legend written in Spanish).CHEATSHEET.md — content merged into root README.md.TEMPLATE_README.md — superseded by the rewritten README.md.CONTRIBUTING.md — removed (content not relevant to template end users).CODE_OF_CONDUCT.md — removed.docs/DEMO.md — removed; demo content covered in tutorial.docs/TUTORIAL_REALSTATE_MEXICO.md — replaced by TUTORIAL_POS_INVENTORY.md.resources/leiningen/new/webgen/FRAMEWORK_GUIDE.md — merged into root README.md.resources/leiningen/new/webgen/HOOKS_GUIDE.md — merged into root README.md.resources/leiningen/new/webgen/DATABASE_MIGRATION_GUIDE.md — merged into root README.md.resources/leiningen/new/webgen/COLLABORATION_GUIDE.md — removed.resources/leiningen/new/webgen/QUICKSTART.md — merged into root README.md.resources/leiningen/new/webgen/RUN_APP.md — merged into root README.md.resources/leiningen/new/webgen/QUICK_REFERENCE.md — merged into root README.md.src/my_project/hooks/ instead of src/rs/hooks/)engine-scaffold.clj: Added get-catalog-from-connection() and normalize-table-name() helper functionsdev.clj: Added dynamic namespace detection for hooks directory monitoringmodels-routes.clj: Added dynamic namespace detection for routes file paths{{sanitized}} instead of hardcoded "rs"{{sanitized}} instead of hardcoded "rs"{{name} in models-routes.clj that was preventing project generation.builder.clj touch utility to trigger wrap-reload after generating grids and related files, improving development workflow.layout.clj.org.clojars.hector/lein-template.lst v0.1.10.org.clojars.hector/lein-template.lst (users run lein new org.clojars.hector/lst <name>):sign-releases false)org.clojars.hector/lein-template.lst and bump version to 0.1.5project.clj now uses dotted namespaces (no stray spaces), allowing generated apps to parse and run testsmake-widget-sync - we're all async, all the time.Can you improve this documentation?Edit on GitHub
cljdoc builds & hosts documentation for Clojure/Script libraries
| Ctrl+k | Jump to recent docs |
| ← | Move to previous article |
| → | Move to next article |
| Ctrl+/ | Jump to the search field |