# Recipe: character tracking

Public character pages, no player login required — admins import and keep the data fresh.

## What you get

- A canonical URL per imported character: `/wow/character/{region}/{realm}/{name}`.
- Base stats (level, class, race, ilvl, achievement points) rendered out of the box.
- Progressive enhancement from every extra module you enable: achievements strip, collection mosaic, etc.

## Minimum modules

```
wow
wow_realm
wow_playable_class
wow_playable_race
wow_playable_specialization
wow_power_type
wow_character
```

All four reference-data modules are listed here because characters reference class, race, and specialization directly, and specialization entities reference power types. Skipping one means some character fields stay blank.

## Setup

1. [Install the suite](../../getting-started/installation.md) and [configure Battle.net credentials](../../getting-started/configuration.md).
2. Sync reference data:
   ```
   drush wow:sync-realms --force
   drush wow:sync-classes --force
   drush wow:sync-races --force
   drush wow:sync-specializations --force
   drush wow:sync-power-types --force
   ```
3. Import the characters you want to track:
   ```
   drush wow:character-lookup stormrage khadgar
   drush wow:character-lookup stormrage jaina
   ```
4. Visit `/wow/character/eu/stormrage/khadgar` to confirm.

## Adding progressive enhancements

Enable collection modules one at a time to decorate the character page:

```
drush en wow_achievement wow_mount wow_pet wow_title wow_toy wow_reputation -y
drush wow:sync-achi-categories
drush wow:sync-achievements
drush wow:sync-mounts
drush wow:sync-pets
drush wow:sync-titles
drush wow:sync-toys
drush wow:sync-reputation-factions
```

Each module's `CharacterDataProvider` kicks in automatically on the next character refresh. Re-run:

```
drush wow:character-lookup stormrage khadgar
```

The character page now shows the recent-achievements strip, collection counts, active title ribbon, etc.

## Keeping data fresh

There is no built-in bulk-refresh drush command. For a small site (dozens of characters) you can schedule per-character lookups:

```
0 3 * * *  cd /path/to/site && drush wow:character-lookup stormrage khadgar
```

For a larger site, write a custom drush command (or module cron) that loops over stored characters and calls `CharacterSync::refresh()` — this is deliberately left to the operator so you can pick your own pacing and scope. Stale characters that never get refreshed are eventually deleted by the [TTL sweeper](../../operations/syncing.md#data-freshness-and-the-30-day-rule).

## What this recipe doesn't need

- `wow_battlenet_login` — no Battle.net SSO
- `wow_user` — no ownership mapping between Drupal users and characters
- `wow_guild` — no guild pages

Add those later if the site grows in that direction. None of them are required for public character pages.

## See also

- [Usage: characters](../characters.md) — full field list and refresh contract
- [Character data providers](../../development/character-data-providers.md) — add your own page section via `buildPageSections()`
