# gallery.badmanners.xyz

Static website built in Astro + Typescript + TailwindCSS.

## Requirements

- Node.js 20+
- (optional) rsync or LFTP, for remote deployment.
- (optional) LibreOffice, for the story export script.

## Development

### Setup

```bash
git clone https://git.badmanners.xyz/badmanners/gallery.badmanners.xyz
cd gallery.badmanners.xyz
npm install
```

### Local development

```bash
npm run dev       # Start development server (quit with Ctrl-C)
npm run sync      # Rebuild types from Astro config and src/content/ files
npm run prettier  # Prettier formatting
```

### Configuration

The following optional environment variables can be set within a `.env` file:

| Name             | Type    | Description                                                                                                                   |
| ---------------- | ------- | ----------------------------------------------------------------------------------------------------------------------------- |
| `PUBLISH_DRAFTS` | boolean | If set to true, includes drafts in the production build. Published drafts still won't be directly indexed by any other pages. |

### Export story for upload

Requires `libreoffice` to be installed and in your path.

```bash
npm run export-story -- -o ~/Documents/TO_UPLOAD slug-for-story-to-export
```

### Build and deploy to remote

```bash
npm run build
```

Then, if you're using rsync, after configuring the `gallerybm` host (or the name of your choosing) in `~/.ssh/config`, you can use a command like:

```bash
rsync --delete-after -acP dist/ gallerybm:/home/public
```

Or if you prefer LFTP, create a `.env` file at the root of the project:

```env
DEPLOY_LFTP_HOST=https://example-webdav-server.com
DEPLOY_LFTP_USER=example_user
DEPLOY_LFTP_PASSWORD=sup3r_s3cr3t_password
DEPLOY_LFTP_TARGETFOLDER=sites/gallery.badmanners.xyz/
```

Then run `npm run deploy-lftp`.
