# blu-site

A static site generator and personal website for [blu.cx](https://blu.cx), written entirely in [Lux](https://github.com/thebrandonlucas/lux).

## Overview

This is not a generic SSG framework -- it's a single Lux program that reads Markdown content with YAML frontmatter, converts it to HTML, and writes a complete static site. It handles:

- Markdown-to-HTML conversion (headings, bold, italic, links, images, code blocks, blockquotes, lists)
- YAML frontmatter parsing (title, date, description, tags)
- Tag page generation
- Section indexes (articles, blog, journal)
- Homepage with snippet cards
- Syntax highlighting via highlight.js
- SEO meta tags (Open Graph, Twitter Cards)

## Prerequisites

- [Lux](https://github.com/thebrandonlucas/lux) compiler/interpreter

## Usage

### Build the site

```bash
lux main.lux
```

This reads content from `content/`, static assets from `static/`, and writes the generated site to `_site/`.

### Serve locally

```bash
lux serve
```

Starts a local file server (default port 8090) serving `_site/`.

### Compile to native binary

```bash
lux compile main.lux
./main
```

## Project Structure

```
blu-site/
  config.json          # Site metadata (title, URL, author, description)
  main.lux             # Site generator source
  content/
    articles/          # Long-form articles (*.md)
    blog/              # Blog posts (*.md)
    journal/           # Monthly journal entries (*.md)
    snippets/          # Homepage card content (*.md)
  static/
    fonts/             # EBGaramond, UnifrakturMaguntia
    images/            # Site images and social card
    highlight/         # highlight.js + theme
    styles.css         # Tailwind CSS v4
    data/              # Static data files
  _site/               # Generated output (gitignored)
```

## Content Format

Posts use Markdown with YAML frontmatter:

```markdown
---
title: "My Post Title"
date: 2025-01-15
description: "A brief description"
tags: bitcoin privacy
---

Post content in Markdown...
```

## Configuration

`config.json`:

```json
{
  "siteTitle": "Brandon Lucas",
  "siteUrl": "https://blu.cx",
  "author": "Brandon Lucas",
  "description": "Personal website of Brandon Lucas...",
  "contentDir": "content",
  "outputDir": "_site",
  "staticDir": "static"
}
```

## Design

- Dark theme (#111 background, #fffff8 text)
- EBGaramond body font, UnifrakturMaguntia for the site title
- Tailwind CSS v4
- Tokyo Night Dark code highlighting
- Responsive grid layout for snippet cards

## License

Copyright (c) 2025 Brandon Lucas. All Rights Reserved.
