# Rustelo Resource Library

Base resources for all Rustelo implementations. These are the framework-level
schemas, contracts, translations, and templates that any site built on Rustelo
can import and override.

## Structure

```
resources/
├── nickel/          NCL schemas and contracts (validation layer)
├── i18n/            Base FTL translations (framework-level only)
└── templates/       Base templates for email and build tooling
```

## nickel/ — Nickel Schemas

Type contracts and default values for every configuration area. Implementations
import these to validate their `site/config/` files at compile time.

| Directory           | Validates                                      |
|---------------------|------------------------------------------------|
| `site/`             | `site/config/index.ncl` — full site config     |
| `rbac/`             | `site/rbac.ncl` — access policy                |
| `routes/`           | Route definitions and menu entries             |
| `themes/`           | Theme configuration                            |
| `content/`          | Content types and post metadata                |
| `security/`         | Security headers and CSP                       |
| `server/`           | HTTP server configuration                      |
| `features/`         | Feature flags                                  |
| `menus/`            | Navigation menu entries                        |
| `footer/`           | Footer configuration                           |
| `email/`            | Email provider configuration                  |
| `pipelines/`        | CI/CD and NATS pipeline configuration         |
| `external-services/`| Third-party service integration               |
| `deps/`             | Dependency version constraints                |

`nickel/rbac/rbac-starter.ncl` is a minimal starter policy to copy into a new
implementation's `site/rbac.ncl`.

## i18n/ — Base Translations

Framework-level FTL strings covering authentication, common UI, navigation,
cookie consent, generic page messages, and admin tooling.

Implementations override individual keys by providing the same key in their
own FTL files — the registration system applies implementation strings with
higher priority than framework defaults.

### Naming convention

All keys are prefixed by their domain to avoid collisions across plugins:

```
auth-sign-in          auth-*
nav-home              nav-*
footer-copyright      footer-*
cookie-accept         cookie-*
content-read-more     content-*
form-submit           form-*
```

### What is NOT here

Site-specific page strings (home page, about, contact, services, etc.) live
in the implementation's `site/i18n/locales/` and are never part of the
framework resource library.

## templates/ — Base Templates

| Directory       | Contents                                         |
|-----------------|--------------------------------------------------|
| `email/`        | OTP code emails, form submission notifications   |
| `build-tools/`  | Tera templates for build-time documentation      |

## Usage in implementations

```nickel
# site/config/index.ncl
let C = import "path/to/rustelo/resources/nickel/site/contracts.ncl" in

{
  site = { name = "My Site", ... },
  ...
} | C.SiteConfig
```

```nickel
# site/rbac.ncl — start from the starter template
# cp rustelo/resources/nickel/rbac/rbac-starter.ncl site/rbac.ncl
```

FTL strings are loaded automatically at startup via `ResourceContributor` —
no manual import required. Implementation strings override framework defaults.
