AxiomCode
AI 소프트웨어 엔지니어링을 위한 검증 가능한 인텔리전스, 형식화된 코드 그래프 기반
Rivian R1T·R1S·R2용 타이어 비교·필터·리뷰·실제 효율 데이터 제공
Compare, filter, and review Rivian tires for the R1T, R1S, and R2. See real owner ratings and real-world efficiency data to find your perfect set.
플러그인PHP · JavaScriptGitHub @RivianTrackr온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기A comprehensive WordPress plugin that provides an interactive tire catalog for Rivian vehicle owners. Features advanced filtering, side-by-side comparison, user and guest reviews, affiliate link management, analytics, and an efficiency scoring system to help drivers choose the best tires for range and performance.
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
A comprehensive WordPress plugin that provides an interactive tire catalog for Rivian vehicle owners. Features advanced filtering, side-by-side comparison, user and guest reviews, affiliate link management, analytics, and an efficiency scoring system to help drivers choose the best tires for range and performance.README 전문 보기 ↗A comprehensive WordPress plugin that provides an interactive tire catalog for Rivian vehicle owners. Features advanced filtering, side-by-side comparison, user and guest reviews, affiliate link management, analytics, and an efficiency scoring system to help drivers choose the best tires for range and performance.
?brand=Michelin&size=275/65R18), enabling shareable links and browser back/forward navigation.WHATS-NEW.md), with a dot until the newest release has been seen; the same notes live at /tire-guide/whats-new/.shoppingProducts request per tire size, scoped to the configured advertisers. Includes a Test Connection button that runs a real query and reports CJ's own errors.RTG_CJ_PAT constant in wp-config.php when defined (keeping it out of the database), otherwise from a write-only settings field that never renders the saved value back. No credentials are stored in the repository.RTG_Catalog_Source interface and register via the rtg_catalog_sources filter. A JSON-backed source also ships with the plugin as a fallback for retailers with no machine-readable feed.navigator.sendBeacon() with 5-second server-side deduplication.?tire= link shows rich previews with tire name, description, price, and image..min.js and .min.css files with console stripping. Served automatically when SCRIPT_DEBUG is off.fa-solid) rendered by the site's theme; the plugin enqueues no icon font of its own.role, aria-label, aria-checked, aria-expanded, aria-controls, aria-live on all interactive elements..screen-reader-text utility class, status regions for dynamic content.prefers-reduced-motion for animations.GET /wp-json/rtg/v1/tires — Filtered, paginated tire listing.GET /wp-json/rtg/v1/tires/{tire_id} — Single tire with ratings.GET /wp-json/rtg/v1/tires/{tire_id}/reviews — Paginated reviews.GET /wp-json/rtg/v1/feed — Full tire catalog JSON feed with ratings and Roamer real-world efficiency data.GET /wp-json/rtg/v1/whats-new — The parsed release notes the guide's Changelog dialog loads.POST /wp-json/rtg/v1/advise — Help me choose: three picks with reasons and trade-offs.GET /wp-json/rtg/v1/tires/{tire_id}/review-summary — "What owners say" for a tire page.GET /wp-json/rtg/v1/compare-summary?ids=a,b — The compare page's plain-words paragraph.wp-content/plugins/ directory:
wp-content/plugins/rivian-tire-guide/
cd wp-content/plugins/rivian-tire-guide
npm install && npm run build
[rivian_tire_guide] to any page or post.Tire Guide — Place on any page to display the full catalog:
[rivian_tire_guide]
With pre-filter attributes:
[rivian_tire_guide vehicle="R1" brand="Michelin" category="All-Season" size="275/65R20" sort="price-asc" 3pms="yes"]
User Reviews — Display all reviews by a specific user (via ?reviewer=ID URL param). Without the param the page shows the signed-in visitor's own reviews, so a "My reviews" menu item can link the page's bare URL (default /user-reviews/); signed-out visitors are asked to sign in. Member names on a tire page link here. The page is styled like the tire page (breadcrumb, title, one card per review with the tire linked to its page) from its own stylesheet, frontend/css/user-reviews.css.
[rivian_user_reviews]
Saved Tires — A signed-in member's shortlist (the heart on cards and tire pages). The plugin serves it at /saved-tires/ (the slug is a setting) on its own, marked noindex; a published page at that slug with the shortcode takes over, so it can sit in a menu next to My Reviews:
[rivian_saved_tires]
Write a Review — The review page. The plugin serves it at /tire-review/ (the slug is a setting) on its own, marked noindex. To control the page's SEO, create a WordPress page at that same slug with the shortcode in it: a published page at the review slug takes over from the built-in route, and your SEO plugin handles its title, description and indexing like any other page.
[rivian_tire_review]
For bulk operations, use Tire Guide > Tools to import tires via CSV.
Tire Guide > Wheels holds one row per wheel: a name, the stock tire size, alternate sizes, an image, the vehicles it fits, and a sort order. Every vehicle-to-size rule in the plugin is derived from these rows: the vehicle toggle, the size menu, the load-index fitment checks, the advisor's candidates, the discovery qualifier and the review page's vehicle switch. There is no separate size list to maintain.
To list a size Rivian never offered, add a wheel, set Source to Third-party, enter the size it is run with as its stock size (and any others as alternates), tick the vehicle, and write a Fitment note such as "Needs an 8.5-inch or wider wheel around ET35. Some owners report light rubbing at full lock." The note shows under the tire page's third-party notice, in the card's info tooltip, and on the wheel guide card. A size is treated as third-party for a vehicle only when no factory wheel for that vehicle lists it; a factory listing always wins. Add the size to the sizes list and the size-to-diameter map under Settings > Dropdown Options so the tire page can show its overall diameter.
The plugin registers a custom URL at /tire-compare/ (configurable in settings). Users select tires from the guide and compare specs side-by-side with best-value highlighting.
Settings → AI Tire Advisor. Add an Anthropic API key (or define RTG_ANTHROPIC_API_KEY in wp-config.php), pick a model (Claude Opus 5 by default), and set the per-visitor limit. Answers are cached (a day for picks and comparisons, thirty days for review summaries) and keyed on the catalog, so an edit to a tire or a new review refreshes them. With the advisor on and no key, "Help me choose" still works from the guide's rules; the review summaries and the compare paragraph need a key. Routes: POST /wp-json/rtg/v1/advise, GET /wp-json/rtg/v1/tires/{id}/review-summary, GET /wp-json/rtg/v1/compare-summary?ids=a,b.
The plugin registers /tire-guide/whats-new/, rendered inside the theme from WHATS-NEW.md at the plugin root. Write that file for owners, not developers: one ## version - date heading per release, an optional intro line, then bullets that open with a bold lead sentence. Skip releases with nothing visible. It is parsed once per plugin version (or file edit) and also served at GET /wp-json/rtg/v1/whats-new for the guide's Changelog dialog.
Navigate to Tire Guide > Settings to configure:
rivian-tire-guide/
├── rivian-tire-guide.php # Main plugin entry point
├── CHANGELOG.md # Developer record: reasons, file names, tests
├── WHATS-NEW.md # Owner-facing release notes (rendered in the guide)
├── ROADMAP.md # Open items and what has shipped
├── uninstall.php # Cleanup on plugin deletion
├── package.json # Build tools (esbuild) and the Node test script
├── esbuild.config.mjs # Build configuration
├── includes/
│ ├── class-rtg-activator.php # Database creation & numbered migrations
│ ├── class-rtg-deactivator.php # Deactivation cleanup
│ ├── class-rtg-database.php # All database operations, caching, the vehicle and third-party size maps
│ ├── class-rtg-fitment.php # Load-index and third-party wheel fitment rules (JS twin: modules/fitment.js)
│ ├── class-rtg-admin.php # Admin UI, CSV import/export, settings, wheel editor
│ ├── class-rtg-frontend.php # Shortcode rendering & asset enqueue
│ ├── class-rtg-ajax.php # AJAX endpoints (ratings, reviews, analytics, filter options)
│ ├── class-rtg-rest-api.php # REST API endpoints and the cached /feed
│ ├── class-rtg-rate-limiter.php # Shared per-IP limiter for reviews and REST
│ ├── class-rtg-compare.php # Comparison page routing & CSP headers
│ ├── class-rtg-tire-page.php # /tires/{slug}/ landing pages
│ ├── class-rtg-tire-review.php # /tire-review/ page and its shortcode
│ ├── class-rtg-theme-render.php # Renders routed pages inside the theme; ad blocklist
│ ├── class-rtg-schema.php # Schema.org JSON-LD structured data
│ ├── class-rtg-meta.php # Per-tire meta, Open Graph & Twitter Cards
│ ├── class-rtg-whats-new.php # What's new: notes parser, page, REST route
│ ├── class-rtg-advisor.php # AI Tire Advisor: ranking, prompts, Claude client, routes
│ ├── class-rtg-roamer-sync.php # Rivian Roamer efficiency data sync
│ ├── class-rtg-catalog-sync.php # Tire Discovery: the daily catalog check
│ ├── class-rtg-catalog-source.php # Retailer source interface (+ class-rtg-catalog-source-cj.php)
│ ├── class-rtg-tire-qualifier.php # Discovery: spec parsing and qualification rules
│ ├── class-rtg-candidates.php # Discovery: the review queue table
│ ├── class-rtg-catalog-presence.php, class-rtg-coverage.php, class-rtg-health.php
│ ├── class-rtg-price-sync.php, class-rtg-stale-prices.php, class-rtg-retailer.php
│ ├── class-rtg-link-sync.php, class-rtg-link-checker.php, class-rtg-tire-images.php
│ ├── class-rtg-lock.php # Named locks for cron and migrations
│ └── class-rtg-mailer.php # HTML email notifications
├── admin/
│ ├── views/ # Admin page templates (14 views, incl. wheel-list / wheel-edit and tire-discovery)
│ ├── css/ # Admin stylesheet (+ .min)
│ └── js/ # admin-scripts.js, rtg-discovery.js, rtg-roamer.js
├── frontend/
│ ├── templates/ # tire-guide, tire-page-content, compare, tire-review, user-reviews, whats-new
│ ├── css/ # rivian-tires.css (+ .min)
│ └── js/
│ ├── rivian-tires.js # Main entry point (ES modules, bundled)
│ ├── compare.js # Comparison page (bundled, shares the guide's modules)
│ ├── tire-page.js # Tire page interactions
│ ├── tire-review.js # Review page (not bundled)
│ ├── user-reviews.js # User reviews page script
│ ├── rtg-shared.js # Shared URL validation & escaping
│ └── modules/ # Focused ES modules
│ ├── state.js # Global state, incl. the vehicle and third-party size maps
│ ├── helpers.js # DOM utilities, debounce, icons
│ ├── validation.js # Input sanitization & patterns
│ ├── allowed-domains.js # Link domain allowlist
│ ├── analytics.js # Click & search tracking
│ ├── cards.js # Tire card rendering and the fitment slot
│ ├── fitment.js # Load-index and third-party fitment (PHP twin: class-rtg-fitment.php)
│ ├── pricing.js # Set-of-four price and freshness
│ ├── efficiency.js # Efficiency badge helpers
│ ├── vehicle-memory.js # Remembered vehicle toggle
│ ├── compare.js # Compare checkbox & bar
│ ├── filters.js # Filter UI, size menu, sorting, URL state
│ ├── ratings.js # Card ratings: loading, stars, posting
│ ├── search.js # Smart search autocomplete
│ ├── server.js # Server-side pagination
│ ├── tooltips.js # Info (i) notes, in the dialog shell
│ ├── image-modal.js # Photo lightbox, in the dialog shell
│ ├── dialog.js # The dialog shell every dialog is built on
│ ├── whats-new.js # Changelog link + dialog
│ └── advisor.js # Help me choose dialog
├── tests/
│ ├── bootstrap.php # PHPUnit WordPress test bootstrap
│ ├── test-*.php # PHPUnit suites (database, activator, admin, ajax, fitment, advisor, discovery, sync, ...)
│ ├── test-validation.js # Node: input validation
│ ├── test-*.mjs # Node: dropdown options, domain sync, fitment, pricing, efficiency
│ └── contract/ # Plain-PHP contract checks (advisor, CJ lookup, health, what's new)
├── .phpcs.xml # PHP CodeSniffer config (WordPress standards)
└── .github/
└── workflows/ci.yml # CI: JS tests + build check, PHPUnit, PHP lint + contracts, PHPCS
The plugin creates 6 tables (all prefixed with wp_rtg_):
| Table | Purpose |
|---|---|
rtg_tires | Main tire catalog (38 columns) |
rtg_ratings | User and guest reviews with moderation and optional detail ratings |
rtg_wheels | Wheel guide: factory wheels and third-party setups (source, fitment_note), the source of every vehicle-to-size rule |
rtg_click_events | Affiliate link click tracking |
rtg_search_events | Search, filter and advisor analytics |
rtg_tire_candidates | Tire Discovery review queue |
Schema changes are managed via a numbered migration system (rtg_db_version option, currently v27).
npm install
npm run build # One-time production build (minified JS/CSS, console stripped)
npm run build:watch # Watch mode for development
npm test # Six Node suites: validation, dropdown options, domain sync, fitment, pricing, efficiency
php tests/contract/*.php # Plain-PHP contract checks (no WordPress needed)
PHP tests require a WordPress test environment:
phpunit # PHPUnit suites (350+ tests across 23 files)
PHP coding standards:
phpcs --standard=.phpcs.xml # Run WordPress Coding Standards checks
GitHub Actions runs on every push and PR:
This plugin follows WordPress security best practices:
$wpdb->prepare() with parameterized placeholderssanitize_text_field, sanitize_email, sanitize_textarea_field, esc_url_raw, intval, etc.)esc_html, esc_url, esc_attr)manage_options) on all admin actionsfinfortg-shared.js) as single source of truthFor security concerns, see SECURITY.md.
Proprietary. All rights reserved by RivianTrackr.
For issues, feature requests, or questions, please open an issue on this repository.