HayMarket · Build history · Most recent first
panel-gait) embeds gaitprint.html in an iframe with "Open in new tab" fallback. Sidebar entry with NEW badge.?video=<url>&listing=<id>.bloodlines.php ships with a curated thesaurus covering the top cutting, reining, western pleasure, and barrel/rodeo sire families (Metallic Cat, Peptoboonsmal, Hollywood Dun It, Zippos Mr Good Bar, Bugs Alive in 75, A Streak of Flame, etc.) plus foundation lines (King, Leo, Doc Bar, Joe Hancock).listings.php q and breed filters now call expand_bloodline_terms() to also match descendants/ancestors. Searching "Bug" returns horses with "Bugs Alive in 75" in bloodlines; searching "Jameson" returns A Streak of Flame lineage.<datalist> populated from GET /listings.php?action=bloodline_suggest&q=X.HM.logout() instead of being non-functional placeholders. Mobile bottom-nav Messages tab now functional.api.php?action=save and is loaded on page init so hearts reflect the signed-in user's watchlist.browse.html?type=auction now pre-selects the correct type tab on load.heroVid.loop = false at every entry point (initial autoplay, post-spots handoff to thismightbetheeasiest.mp4, spots playlist). No more infinite background loop; refresh the page to watch again.GET /listings.php?action=bloodline_suggest&q= — ranked autocomplete over the bloodlines thesaurus.GET /api.php?action=offers_received — every offer placed on the authed user's listings, joined to buyer and horse.GET /api.php?action=bids_received — all bids on the authed user's auctions, with bidder info and high-bid status.POST /api.php?action=update_profile — updates name, phone, location, and bio on the users row; returns the fresh user object.HM and HMLocation are now explicitly assigned to window.HM and window.HMLocation so inline onclick handlers can always resolve them..nav-avatar and .nav-username styles added to the authStyles block injected by auth.js, so the initials circle renders correctly on every page.HMLocation is not defined — root cause was auth.js being loaded after inline scripts that referenced it. Resolved by: (1) moving <script src="auth.js" defer> to <head> on all pages, (2) defining HMLocation and HM at module scope before DOMContentLoaded, (3) exposing both as window.* globals.HM.ready() replaces the old HM.init() pattern. Returns a singleton promise that resolves to the current user after one fetch. Safe to call multiple times — only fetches once. init() kept as alias.contact.php which delivers via PHP mail() to contact@haymarket.app with Reply-To set to the sender. No third-party dependencies.privacy.html. Covers data collection, public listing disclosure, cookies (hm_session only), third-party services, deletion rights, and contact. Linked from footer.localStorage('hm_toolbar_pos'). Dashboard reads and applies it on load — no reload required.api.php?action=dashboard.listings.php (POST to create, PUT to update). Files upload to upload.php after save. Contact fields pre-filled from user profile.listings.php?action=publish. Delete soft-removes and refreshes both overview and listings panel.listings.php with real DB data. Photo/video thumbnail if uploaded, emoji fallback otherwise.auth.js — GPS first (Nominatim reverse geocode to "City, ST"), IP fallback via ipapi.co. Caches result for session. Exposed as window.HMLocation.role VARCHAR(20) DEFAULT 'user' column added to users table. Admin seeds Tommy Lee as role='admin'.HM.login(), HM.register(), HM.logout().users, listings, listing_media, bids, offers, trade_proposals, messages, saved_listings./me endpoints. Bcrypt password hashing.uploads/{listing_id}/, records in listing_media./uploads/, security headers, 52MB upload limit.thismightbetheeasiest.mp4 with sound, looping. Removed cycling behavior.Ifyouridehorses, cowboysusedto, mywifesaid2) with a 1.5s black fade between each, then returns to the hero loop.thismightbetheeasiest.mp4, Ifyouridehorses.mp4, cowboysusedto.mp4, mywifesaid2.mp4.<img> tags.min-width breakpoints (600px tablet, 960px desktop) instead of patching with max-width.<Directory> block which is not valid in .htaccess context. Replaced with RewriteRule.thomasrlee42_haymarket.file_get_contents() with a Chrome user-agent. Strips HTML/JS/CSS noise, sends raw text to Claude API (claude-sonnet-4-20250514) for structured JSON parsing. Returns 19 horse-specific fields plus a confidence score (high/medium/low).horse_name, registered_name, breed, bloodlines, age, height_hands, sex, color, discipline (array), price, listing_type, location, sound, vices, quirks, maintenance, videos_photos, contact, description, confidence. Inference rules for listing_type from price language (asking/obo/firm = sale, bid/reserve = auction, trade/swap/considering = barter).fb_session.json). Routes: POST /scrape, GET /login, GET /session-status, DELETE /session. Blocks images/fonts for speed.http://127.0.0.1:3031 instead of direct HTTP fetch. Checks service status and login state before scraping. Falls back gracefully with actionable error messages.GET /login. User logs in manually; session saved and reused for 30–90 days. Session persists across service restarts.playwright, express), PM2 config for persistent service, setup guide, troubleshooting table.