1. there are lots of solutions. I have most of my macros is a separate library called parenscript-extensions. If it is a "local" macro, I just define it in the file it is used.
(defun compile-site-paren-file (name &optional check-date)
(let ((inf (merge-pathnames (make-pathname :name name :type "paren")
*parenscript-dir*))
(outf (merge-pathnames (make-pathname :name name :type "js")
*static-local-dir*)))
(when (and (fad:file-exists-p inf)
(or (not check-date)
(not (fad:file-exists-p outf))
(> (file-write-date inf) (file-write-date outf))))
(with-open-file (in inf :direction :input)
(with-open-file (out outf :direction :output
:if-exists :supersede
:if-does-not-exist :create)
(let ((*parenscript-stream* out))
(ps:ps-compile-stream in))
outf)))))