A high-performance, reactive, and security-first digital platform for Hodari Gardens Resort in Nakuru, Kenya.
  • Clojure 95.9%
  • CSS 2%
  • Dockerfile 1.1%
  • JavaScript 1%
Find a file
2026-06-02 05:24:55 -04:00
.github fix: update setup-clojure action to version 13 to fix resolution error 2026-06-02 02:56:18 -04:00
resources/data feat: rebuild World Cup 2026 page with correct groups A-L, 16 venues, knockout bracket, and tabbed dashboard UI 2026-06-02 03:52:11 -04:00
src fix: resolve Google Maps embed blocking by adding frame-src to Content Security Policy 2026-06-02 05:17:08 -04:00
test/hodari_gardens/server ops: set up GitHub Actions CI, migrate dependency auditing to clj-watson, and add unit test suites 2026-06-02 02:46:12 -04:00
.dockerignore feat: deploy to fly.io, dynamic worldcup countdown, update contact info 2026-02-25 11:16:46 +03:00
.gitignore refactor: standardize repository, upgrade to React 18, and cleanup redundant files 2026-02-05 16:26:55 +03:00
build.clj Initial commit: Hodari Gardens Resort web application 2026-02-05 09:56:55 +00:00
clj-watson.properties ops: set up GitHub Actions CI, migrate dependency auditing to clj-watson, and add unit test suites 2026-06-02 02:46:12 -04:00
DEPLOYMENT_GUIDE.md fix: resolve deployment hurdles and update guide 2026-02-09 10:22:26 +03:00
deps.edn fix: resolve CI failures by configuring lint alias main-opts, using clojure in CI, and fixing npm audit 2026-06-02 02:53:50 -04:00
Dockerfile fix: resolve Docker build node binary musl/libc mismatch by installing Node.js 20 directly on Debian builder via apt 2026-06-02 04:20:58 -04:00
fly.toml infra: upgrade container build to Node 20, optimize JVM memory, and stabilize cold starts 2026-06-02 02:45:50 -04:00
LICENSE refactor: standardize repository, upgrade to React 18, and cleanup redundant files 2026-02-05 16:26:55 +03:00
nvd-clojure.edn ops: set up GitHub Actions CI, migrate dependency auditing to clj-watson, and add unit test suites 2026-06-02 02:46:12 -04:00
nvd_suppressions.xml ops: set up GitHub Actions CI, migrate dependency auditing to clj-watson, and add unit test suites 2026-06-02 02:46:12 -04:00
package-lock.json fix: resolve CI failures by configuring lint alias main-opts, using clojure in CI, and fixing npm audit 2026-06-02 02:53:50 -04:00
package.json infra: upgrade container build to Node 20, optimize JVM memory, and stabilize cold starts 2026-06-02 02:45:50 -04:00
README.md docs: upgrade README.md to production-grade and remove kiloconnect bot from contributors history 2026-06-02 05:24:55 -04:00
SECURITY.md feat: 10x engineering overhaul - premium docs, secure defaults, and standardized DX 2026-02-09 11:20:18 +03:00
shadow-cljs.edn fix: update footer contact info and rename contact to location 2026-02-09 10:42:57 +03:00
tailwind.config.js Initial commit: Hodari Gardens Resort web application 2026-02-05 09:56:55 +00:00
tests.edn ops: set up GitHub Actions CI, migrate dependency auditing to clj-watson, and add unit test suites 2026-06-02 02:46:12 -04:00

Hodari Sports Gardens Resort: Production Platform 🏝️

CI Pipeline Status Clojure Version ClojureScript Version React Version re-frame Version Tailwind CSS Version Security Grade Production URL

A high-performance, reactive, and security-hardened full-stack platform for Hodari Sports Gardens Resort in Nakuru, Kenya. Coordinated and engineered with strict functional programming principles.

🌐 Secure Custom Domain: https://hodarisportsgardens.com


Technical Vision & Stack

This platform leverages the unreasonable effectiveness of Functional Programming to build a modern, zero-maintenance guest experience platform.

  • Core Language: Clojure & ClojureScript for unified client-server language semantics.
  • State Architecture: Single-source-of-truth app-db powered by re-frame (unidirectional data flow).
  • Routing System: Dual-routing system using reitit on both backend (Ring API endpoints) and frontend (HTML5 push state).
  • Build Chain: Shadow-CLJS compiling production assets with Advanced Compilation, coupled with Tailwind CSS JIT compilation.
  • Database Philosophy: Zero-dependency, ultra-fast, read-optimized EDN (Extensible Data Notation) structures containing resort data, menus, and tournament fixtures.

🏛 Systems & Security Architecture

The application is structured as a pure, decoupled functional loop.

graph TD
    subgraph "Data Layer (EDN Resources)"
        D[(world_cup.edn / drinks.edn)]
    end

    subgraph "Hardened Backend (Jetty / Ring)"
        S[Jetty Web Server]
        MW[Security Middleware]
        RL[Sliding Rate Limiter]
        R[Reitit API Router]
        A[API Handlers]
        
        S --> MW
        MW --> RL
        RL --> R
        R --> A
        A -.-> D
    end

    subgraph "Frontend Dashboard (Reagent / re-frame)"
        V[Reagent UI Components]
        SUB[re-frame Subscriptions]
        E[re-frame Event Dispatch]
        DB[(re-frame app-db)]
        
        V --> E
        E --> DB
        DB --> SUB
        SUB --> V
    end

    A <== "Strict EDN Payloads" ==> E

🛡 Core Security Specifications

  • Custom CSP Rules: Strict Content Security Policy allowing local assets, Google Fonts, and securely restricting embeds exclusively to verified Google Maps frames (frame-src 'self' https://www.google.com).
  • Brute-Force & DDoS Mitigation: Built-in backend rate limiters executing a sliding-window algorithm for guest inquiries and booking endpoints.
  • HSTS & Modern TLS: Enforced HTTP Strict Transport Security (max-age=31536000; includeSubDomains; preload) to guarantee secure communication.
  • Zero-State JVM Execution: Fully stateless API layer allowing seamless vertical and horizontal scaling.

🚀 Production Optimization

  • Garbage Collection Tuning: Custom JRE 17 Alpine image running inside the Fly container, utilizing highly tuned G1GC parameters (-XX:+UseG1GC) to ensure sub-millisecond pauses.
  • Memory Safeguards: JVM heap configured with -Xms128m and -Xmx700m limits to run safely within Fly's strict container quotas, protecting the app from Out Of Memory (OOM) termination.
  • Aggressive Caching: Production static assets (/js/ and /css/) are injected with immutable headers (Cache-Control: public, max-age=31536000, immutable), ensuring instantaneous page loads for return visitors.

🛠 Production Operations & Development

Local Setup

Ensure you have JDK 17, Clojure CLI, and Node.js 20+ installed on your system.

# 1. Install required packages
npm install

# 2. Compile CSS assets
npm run css

# 3. Start local development watch (shadow-cljs)
npm run dev

# 4. Start the Ring/Jetty backend server
npm run server

Production Release Compilation

To compile the minified release bundle and build the optimized production output:

npm run build

👨‍💻 Primary Creator

Developed and maintained with pristine engineering by dennisgathu8.


Copyright © 2026 dennisgathu8. Engineered for functional excellence.