This is a single monorepo hosting two separate sites:
- poe.re — Path of Exile 1 regex tool
- poe2.re — Path of Exile 2 regex tool
The poe/ and poe2/ directories are independent Vite apps. Reusable
components, utilities, core helpers, styles and types live in shared/.
Game-specific generated data stays with its app. Each app builds to its own
output and deploys to its own domain.
A tool for generating vendor search strings. With no false positives matches and with query shortening, so you can fit more stuff in to your search!
- Vendor
- Map mods
- Boat (Lake of Kalandra)
- Items (inc. flasks)
- Expedition
- Heist
- Bestiary
- Scarabs
- Tattoos
- Runegrafts
- Jewels
- Vendor
- Waystones
- Tablets
- Relics
- Items (rare item crafting)
If you encounter a bug or have a suggestion:
- Go to the Issues tab.
- Open a "New Issue".
- Describe the problem and provide steps to reproduce it.
Contributions are always welcome. To keep things organized:
- Join the discord server: https://discord.gg/T8BzKnatY6
- Discuss first: It's best to discuss ideas or planned changes on discord before starting the work.
- Check Issues: Take a look at the open issues to see what needs help or to make sure a topic isn't already being worked on.
- Fork and PR: Once everything is ready, fork the project and submit a pull request.
This project uses pnpm and Vite.
# Clone the repo
git clone git@github.com:veiset/poe.re.git
cd poe.re
# Install dependencies
pnpm install
# Develop poe.re (Path of Exile 1)
pnpm dev
# Develop poe2.re (Path of Exile 2)
pnpm dev:poe2
# Run tests
pnpm test
# Type-check
pnpm typecheck
# Build BOTH apps -> dist/poe and dist/poe2
pnpm build
# Build a single app
pnpm build:poe # -> dist/poe
pnpm build:poe2 # -> dist/poe2The two apps link to each other externally. Override the target domains with env vars if you run a staging setup:
VITE_POE1_URL=https://poe.re
VITE_POE2_URL=https://poe2.reTrade search buttons rely on stat-ID mappings against the official trade APIs. To refresh them, run:
pnpm run fetch-trade-statsThis updates:
poe/src/generated/mapmods/trade/TradeStatIdMatching.json(PoE1)poe2/public/generated/trade/WaystoneTradeStatIds.json(PoE2)poe2/public/generated/trade/TabletTradeStatIds.json(PoE2)
The apps deploy through Cloudflare Pages native Git integration, one Pages project per domain. Deployment does not use GitHub Actions. A scheduled Cloudflare Worker refreshes economy and league data into a public R2 bucket every hour.
| Project | Build command | Publish directory | Domain |
|---|---|---|---|
| poe-re | pnpm build:poe |
dist/poe |
poe.re |
| poe2-re | pnpm build:poe2 |
dist/poe2 |
poe2.re |
Configure both Pages projects against this repository with the build commands
and publish directories above. Set VITE_POE1_URL, VITE_POE2_URL, and
VITE_ECONOMY_URL in each Pages project's environment when overriding the
defaults.
Deploy the scheduled economy refresher:
cd workers/economy-fetcher && npm run deployThe worker writes the filtered PoE1 and PoE2 league lists to leagues.txt and
poe2-leagues.txt in the R2 bucket. The frontend reads those files through
the CDN-backed VITE_ECONOMY_URL endpoint.
Ads on poe2.re are served by NitroPay; the code lives in
shared/components/ads/, shared/core/nitroAds* and poe2/index.html.
See the privacy page for what is collected and by
whom.
The R2 bucket, economy.poe.re custom domain, CORS policy, and CDN cache rule
are managed in infra/cloudflare/.