www.metalisp.dev/index.lisp

105 lines
3.4 KiB
Common Lisp

;;; -*- mode: lisp; coding: utf-8; -*-
;;; Generate the index.html file
(ql:quickload '(:dev.metalisp.sbt :3bmd))
(defpackage :website
(:use :cl #:ml-sbt)
(:import-from #:ml-sbt/section
#:define-section-type
#:with-section
#:with-section-row
#:with-section-col
#:with-title-bar)
(:import-from #:ml-sbt/navbar
#:with-navbar)
(:import-from #:ml-sbt/list-group
#:list-group
#:with-list-group
#:with-list-group*)
(:import-from #:ml-sbt/card
#:with-card*)
(:import-from #:ml-sbt/utility
#:make-grid-class)
(:import-from #:ml-sbt/btn
#:btn))
(in-package :website)
(defvar *lang* "en")
(define-section-type with-section-projects (make-grid-class :row 1 :sm 2 :md 3 :g 3) nil)
(defparameter *active-projects*
'(("metalisp.sbt"
("Library of Common Lisp Macros to generate HTML." "In Active Development" "Common Lisp")
"https://code.metalisp.dev/marcuskammer/dev.metalisp.sbt")
("metalisp.survey"
("Create questionnaires and analyze the results." "In Active Development" "Common Lisp")
"https://code.metalisp.dev/marcuskammer/dev.metalisp.survey")
("metalisp.qmetrics"
("Calculation engine for questionnaires." "In Active Development" "Common Lisp")
"https://code.metalisp.dev/marcuskammer/dev.metalisp.qmetrics")
("metalisp.activitystreams"
("ActivityStreams 2 library" "In Active Development" "Common Lisp")
"https://code.metalisp.dev/marcuskammer/dev.metalisp.activitystreams")
("emacs dot files"
("Personal emacs dot files." "In Active Development" "Emacs Lisp")
"https://code.metalisp.dev/marcuskammer/emacs.d")))
(unless (uiop:directory-exists-p #P"public/")
(uiop:ensure-all-directories-exist '(#P"public/")))
(defparameter *brand-name* "metalisp")
(defparameter *brand-url* "/")
(defparameter *main-headline* "Crafting Software with the Power of Lisp")
(defparameter *index-html*
(with-page (:title "metalisp.dev projects")
;; --
;; Body Head
;; --
(with-body-header nil *main-headline* *lang*
(with-navbar nil *brand-name* *brand-url* nil nil))
;; --
;; Body Main
;; --
(with-body-main nil
;; --
;; Introduction
;; --
(with-section
(with-title-bar "About metalisp")
(:raw (md-file-to-html-string "introduction.md")))
;; --
;; News
;; --
(with-section
(with-title-bar "News")
(:raw (md-file-to-html-string "news.md")))
;; --
;; Active Projects
;; --
(with-section
(with-title-bar "Active Projects")
(with-section-projects
(dolist (project *active-projects*)
(destructuring-bind (cheader citems curl) project
(with-card*
:card-header cheader
:card-items citems
:card-body (btn (:url curl) (t9n "view-details" *lang*)))))))
;; --
;; Contact
;; --
(with-section
(with-title-bar "Contact")
(with-list-group nil
"email: post at metalisp.dev"
"jabber chatgroup: metalisp@conference.mailbox.org"
(:a :rel "me" :href "https://fosstodon.org/@metalisp" "Mastodon"))))))
(with-open-file (ofile "public/index.html" :direction :output :if-exists :supersede)
(princ *index-html* ofile))