All checks were successful
Deploy ${{ gitea.repository }} / build (push) Successful in 1s
59 lines
1.8 KiB
Markdown
59 lines
1.8 KiB
Markdown
# CLAUDE.md
|
|
|
|
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
|
|
## Project Overview
|
|
|
|
This is a simple Clojure web application serving a personal dashboard at ajet.fyi. It uses Ring, Compojure, and Hiccup to generate and serve a static HTML page with links to various services.
|
|
|
|
## Development Commands
|
|
|
|
**Start the server (development):**
|
|
```bash
|
|
clj -M:repl
|
|
```
|
|
Then in the REPL:
|
|
```clojure
|
|
(require 'user)
|
|
(in-ns 'user)
|
|
server ; inspect the server
|
|
(. server stop) ; stop server
|
|
(. server start) ; start server
|
|
```
|
|
|
|
**Start the server (production):**
|
|
```bash
|
|
./start.sh
|
|
# or directly:
|
|
clj -M -m ajet.www.core
|
|
```
|
|
|
|
**Restart systemd service:**
|
|
```bash
|
|
./restart.sh
|
|
```
|
|
|
|
## Architecture
|
|
|
|
- **Entry point**: `src/ajet/www/core.clj` - defines the web app, routes, and server
|
|
- **Development REPL**: `src/dev/user.clj` - provides a convenient REPL environment with server control
|
|
- **Static resources**: `resources/public/` - CSS and other static files served via Ring's `wrap-resource`
|
|
- **Dependencies**: `deps.edn` - uses Clojure CLI tools (deps.edn)
|
|
|
|
The application:
|
|
1. Generates HTML using Hiccup (in-memory, not template files)
|
|
2. Serves on port 80 in production, random port in development
|
|
3. Serves static resources from `resources/public/`
|
|
4. Uses Ring middleware for content-type and not-modified headers
|
|
|
|
## Deployment
|
|
|
|
Deployment is automated via Gitea Actions (`.gitea/workflows/deploy.yaml`). On push to `main`, it triggers a service restart via curl to the service-manager endpoint.
|
|
|
|
## Code Organization
|
|
|
|
- The entire app logic is in `src/ajet/www/core.clj`
|
|
- The HTML content is defined as a Hiccup data structure in the `index` var
|
|
- Routes are minimal: just a single GET "/" endpoint
|
|
- The app is wrapped with Ring middleware for serving static files and proper headers
|