Files
bookstore/.env.example
T
twooeyandClaude Sonnet 5 71b8065f20 AO3-style tag browsing: taxonomies, display, Hardcover sync (schema unverified)
Four flat taxonomies attached to product (bsc_genre, bsc_mood,
bsc_content_warning, bsc_tag) reuse WordPress's native taxonomy archive
system for the "click a tag, see everything with it" browsing AO3 is known
for — no custom archive templates or query logic needed. Verified: all
four register correctly, render as clickable chips on the product page
(content warnings get a distinct notice instead of just another chip),
and the archive page + term count both work end-to-end with real test
data.

HardcoverAdapter + `wp bookstore sync-hardcover-tags` pull genre/mood/
content-warning/freeform tags from Hardcover's API to populate these.
This part is explicitly NOT verified against a live response — Hardcover's
API is in beta with informal docs, and there was no API token available
to confirm the exact query/response shape. Flagged clearly in the adapter
itself; needs a real token + introspection query before trusting the
field-parsing logic in production. ISBN-first-then-title/author matching
handles both real future ISBNs and the current Gutenberg-synthetic
catalog's fake ones.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-27 13:59:30 -04:00

55 lines
1.9 KiB
Bash

# Copy this to .env.dev / .env.staging / .env.production and fill in real
# values for that environment. The filled-in files are gitignored — never
# commit them. Same code everywhere; only these values differ (see
# design doc §01, Environments & deployment).
#
# CAVEAT for the API keys below (DB_PASSWORD/DB_ROOT_PASSWORD are exempt —
# deploy.sh writes those into secrets/<env>/ files that bypass this
# entirely): docker compose passes these into containers via ${VAR}
# interpolation, which will silently mangle a value containing `$` followed
# by a letter (it tries to resolve it as another variable and blanks it out
# if unset). Avoid `$` in these specific values, or double it ($$) if you
# must use one — this bit us for real with a generated password once.
# --- Site ---
# (WP_ENVIRONMENT_TYPE is NOT set here — it's hardcoded per environment in
# docker-compose.{dev,staging,production}.yml so it can't go stale.)
SITE_DOMAIN=staging.example.com
SITE_URL=https://staging.example.com
SITE_TITLE="Bookstore (staging)"
# --- WordPress admin bootstrap (used only on first install) ---
WP_ADMIN_USER=admin
WP_ADMIN_PASSWORD=changeme
WP_ADMIN_EMAIL=admin@example.com
# --- Database ---
DB_NAME=bookstore
DB_USER=bookstore
DB_PASSWORD=changeme
DB_ROOT_PASSWORD=changeme
WP_TABLE_PREFIX=wp_
# --- Backups (deploy/backup.sh) ---
BACKUP_DIR=./backups
BACKUP_REMOTE=
BACKUP_RETENTION_DAYS=14
# --- Supplier adapters (design doc §04) ---
# staging: gutenberg_test production: booksrun,ingram
ACTIVE_SUPPLIER_ADAPTERS=gutenberg_test
BOOKSRUN_API_KEY=
INGRAM_API_KEY=
INGRAM_ACCOUNT_ID=
# --- Payments (Helcim) ---
HELCIM_API_TOKEN=
HELCIM_ACCOUNT_ID=
# --- Marketing ---
MAILERLITE_API_KEY=
# --- Hardcover (AO3-style tag browsing — genre/mood/content-warning/tag sync) ---
# Get a token: hardcover.app account settings -> Hardcover API -> New API Key
HARDCOVER_API_TOKEN=