# Configuration Guide

## Site Presentation (`config.json`)

- `name`, `title`, `description`, `url`, `accentColor`
- `author`: `{ name, url, avatar }`
- `social`: `{ github?, twitter? }`
- `feed`: optional `folo.challenge.feedId` and `userId`
- `map`: e.g. `["maplibre"]`
- `mapStyle`: `builtin` or provider style
- `mapProjection`: `globe` or `mercator`

`config.json` merges into `site.config.ts` and is used by both SPA and SSR.

## Builder Config (`builder.config.ts`)

Use `defineBuilderConfig` from `@afilmory/builder`. Recommended structure (see `builder.config.default.ts`):

- **storage**: provider (`s3`, `b2`, `github`, `local`, `eagle`), credentials, prefix, custom domain, `excludeRegex`, concurrency.
- **system.processing**: `defaultConcurrency`, `enableLivePhotoDetection`, `digestSuffixLength`.
- **system.observability**: progress/stats toggles, logging level/output, worker settings (`workerCount`, `timeout`, `useClusterMode`, `workerConcurrency`).
- **plugins**: e.g. `githubRepoSyncPlugin` for pulling/pushing thumbnails + manifest cache.
- Outputs: `apps/web/public/thumbnails`, `apps/web/src/data/photos-manifest.json`.

## Environment Variables (`.env`)

- Storage: `S3_REGION`, `S3_ENDPOINT`, `S3_BUCKET_NAME`, `S3_ACCESS_KEY_ID`, `S3_SECRET_ACCESS_KEY`, `S3_PREFIX`, `S3_CUSTOM_DOMAIN`, `S3_EXCLUDE_REGEX`
- Repo sync (optional): `GIT_TOKEN`, `BUILDER_REPO_URL`, `BUILDER_REPO_BRANCH`
- Database (backend): `PG_CONNECTION_STRING` (see backend docs for more)

## App Commands (common)

```bash
pnpm dev                # SPA + SSR
pnpm --filter web dev   # SPA only
pnpm --filter @afilmory/ssr dev # SSR only
pnpm run build:manifest          # Build manifest + thumbnails (incremental)
pnpm run build:manifest -- --force # Full rebuild
pnpm build              # Production build
pnpm --filter web type-check
pnpm lint && pnpm format
```
