vitrine

main.go

// Command repoview is a tiny read-only web viewer for local source trees.
//
// Each configured root is served under its name as a URL prefix,
// e.g. "/moonshot-1/crates/iri/filetests/verify-errors.md".
// The default view is rendered (markdown becomes HTML, directories become listings);
// appending "?fmt=raw" serves the file bytes directly.
package main

import (
	"flag"
	"log"
	"net/http"
)

// roots maps a mount name to a filesystem directory.
// Mount names may contain slashes: the tree is then served under that
// deeper URL path, and the intermediate path levels serve synthetic
// listings that reveal only the mounted subtrees.
// Hardcoded for now; lift into a config file when this grows tiresome.
var roots = map[string]string{
	"moonshot-1":     "/home/exedev/fusion/moonshot-1",
	"moonshot-1-mem": "/home/exedev/fusion/moonshot-1-mem",
	"moonshot.meta/research/2026-07-24--language-design": "/home/exedev/fusion/moonshot.meta/research/2026-07-24--language-design",
	"moonshot.meta/research/2026-07-24--syntax-sketch":   "/home/exedev/fusion/moonshot.meta/research/2026-07-24--syntax-sketch",
}

func main() {
	addr := flag.String("addr", ":8000", "listen address")
	flag.Parse()

	srv, err := newServer(roots)
	if err != nil {
		log.Fatal(err)
	}
	log.Printf("repoview listening on %s", *addr)
	log.Fatal(http.ListenAndServe(*addr, srv))
}

main.go · 1.3 KiB · 1a3eccc323