Commit graph

11 commits

Author SHA1 Message Date
9eb85faebd
Add 4 new retailer scrapers for broader price coverage
Add True Shot Ammo (Shopify JSON), Palmetto State Armory (Magento HTML),
Bulk Ammo (Magento HTML), and Natchez Shooters Supply (GraphQL API).

Extends scraper infrastructure with HttpClient.post_json/3 and an
optional fetch/2 callback on the Scraper behaviour for scrapers that
need custom HTTP flows (e.g. GraphQL POST requests).
2026-03-12 10:00:59 -05:00
0583bd14cf
Add 16 gauge shotgun caliber 2026-03-12 09:04:00 -05:00
d7c4772ad8
Only show subsonic filter when subsonic products exist for caliber 2026-03-12 09:01:16 -05:00
cd8c080846
Seed retailers and calibers via database migration 2026-03-12 08:55:12 -05:00
56d02cf8cb
Remove icons from category headings on home page 2026-03-12 08:10:06 -05:00
cd731ee22b
Fix executable permissions on release scripts 2026-03-12 07:55:19 -05:00
22c9854afd
Run database migrations on each server startup 2026-03-11 16:54:06 -05:00
324c5c556c
Add Dokku deployment configuration 2026-03-11 16:51:44 -05:00
a24448b2da
Rebrand to AmmoCPR with ammocpr.com domain 2026-03-11 16:34:58 -05:00
16a28ac01c
Add Target Sports USA scraper, product filtering, and subsonic detection
- Add subsonic boolean field to products with composite filter indexes
- Add TextDetector utility for detecting subsonic/casing from product titles
- Wire TextDetector into SgAmmo (casing + subsonic) and LuckyGunner (subsonic + fallback casing)
- Extend latest_prices_for_caliber with casing, grain_weight, and subsonic filter options
- Add distinct_grain_weights_for_caliber and distinct_casings_for_caliber queries
- Add filter UI with toggleable casing, grain weight, and subsonic buttons
- Add grain weight column and subsonic badge to product table
- Refresh filter options on PubSub price updates for real-time UI
- Implement Target Sports USA scraper with 18 caliber mappings
- Display all prices in dollar format ($0.38 instead of 38¢)
2026-03-11 16:28:04 -05:00
bbe5bde145
Initial implementation of ammo price tracker
Phoenix 1.8 app that scrapes ammunition retailers (Lucky Gunner,
SGAmmo) for price data and displays historical price trends.

- Data model: retailers, calibers, products, price snapshots
- Scraper infrastructure with Req, Floki, realistic browser headers
- Oban-scheduled scrape jobs (every 4h with randomized delays)
- LiveView pages: homepage with category cards, caliber detail with
  price table, Chart.js price history, and price stats banner
- 18 seeded calibers across handgun/rifle/rimfire/shotgun categories
- 77 tests
2026-03-11 15:58:12 -05:00