What's Changed
0.12.1
- perf: drop aws service/s3 SDK, use signer/v4 directly (22 MB → 16 MB)
0.12.0
- feat: add Firebase Analytics for web and Flutter
- docs: remove stale brainstorm design.md from drsmedchoice and flutter-migration PRDs
0.11.4
- docs: add Caddyfile old-entry cleanup step to rename runbook
0.11.3
- chore: rename medtrade to drsmedchoice
0.11.2
- fix: usability improvements from UI critique
0.11.1
- fix: disable payment gate on web and mobile
0.11.0
- feat: redesign search bar and add 'or' divider in location popup
- feat: add page indicator to photo carousel when multiple images
- fix: include seller name in listing detail API response
- feat: format all currency displays as USD with dollar sign and commas
0.10.0
- fix: seed zipcode field with current value in location dialog
- feat: rename bottom nav to Listings and fix radius slider in location sheet
- style: remove used medical equipment label from header
- fix: resolve image URLs in listing detail photoUrls
- refactor: move zipcode entry to bottom sheet popup with GPS option
- fix: add missing colorScheme variable in _buildManualEntryView
0.9.0
- refactor: remove redundant button style overrides in PermissionRationale
- feat: add shimmer animation to skeleton loading widgets
- fix: use value instead of initialValue on DropdownButtonFormField
- refactor: make photo thumbnails responsive with LayoutBuilder
- refactor: replace hard-coded fontSize 12 with context.textTokens.overline
- fix: replace Colors.white with semantic color tokens (cs.onPrimary, cs.onError)
- refactor: replace hard-coded SizedBox/EdgeInsets with AppSpacing constants
- refactor: replace ref.invalidate() with delta-fetch and notifier refresh methods
- feat: add Semantics wrappers to ListingCard, ThreadItem, StepIndicator, _PricingCard
0.8.0
- feat: add IP geolocation fallback for mobile search, matching web app scheme
- fix: use push instead of go for listing detail navigation
- fix: allow unauthenticated listing detail and resolve image URLs in mobile app
0.7.2
- fix: allow unauthenticated access to listings search API
- fix: downgrade Gradle to 8.13 to resolve classpath-snapshot build failure
- chore: upgrade Flutter dependencies
0.7.1
- fix: use ref.watch for _isAuthed/_isOwner reactivity in listing detail
- fix: update Flutter tests to match current production design
- docs: add todo.txt with pre-existing test failures to investigate
- chore: upgrade Flutter dependencies to latest major versions
0.7.0
- feat: add changelog API and mobile changelog screen
- feat: add PUT /api/users/me/name and mobile edit-name UI
- feat: add condition filter to search API and mobile UI
0.6.0
- feat: unify on Stripe hosted Checkout for web and mobile
- docs: add navigation section and code-map.md reference to AGENTS.md
- docs: add code map for AI agent semantic navigation
- docs: full audit fix — OCR stack, JWT spec, Go version, pricing, remove docker/frontend-mvp
- feat: edit listing API and mobile screen, remove interactive map
- feat: search UX with ZIP lookup, map toggle, and responsive listing card
- feat: listing creation step indicator and token typography
- feat: adopt shared loading/error/empty states in screens
- feat: guest browsing with auth gate and routing
- feat: design system tokens and shared widgets
- chore: add Android network security config and run-android target
- refactor: replace google_maps_flutter with flutter_map (OpenStreetMap)
- fix: wire camera permission state and add Semantics labels for accessibility
- refactor: unify brand color and replace hard-coded condition colors with theme tokens
- chore: gitignore kotlin sessions and untrack flutter metadata
- refactor: replace on-device ML Kit OCR with server-side AI extraction
0.5.0
- chore: track internal/data/changelog.go
- chore: gitignore internal/data/changelog.json
- feat: hide listings nav link when logged out, add back-to-listings on detail page
0.4.0
- refactor: move photo upload above text fields in create listing form
- refactor: replace tesseract OCR fallback with Anthropic vision client, add title extraction
- style: increase web listing thumbnail previews to w-36 h-36 (144px)
- fix: register /listings/new routes before /listings/:id to prevent route shadowing
- feat: increase thumbnail preview size in create listing flow
0.3.0
- fix: interpolate Go values into Alpine x-data attributes in chat and listing detail templates
- fix: auto-scroll chat to bottom on load and after sending message
- fix: security audit — 9 critical, 19 medium, 5 low findings
- fix: redirect to listings on logout, redirect to login for unauthed protected pages
- feat: make listings and detail pages public, 404 protected pages when logged out
0.2.0
- fix: skip empty/garbage fields in OCR description prefill
- feat: add OCR status feedback and per-route auth middleware
- fix: enable session auth for OCR endpoint used by web UI
- feat: improve OCR parser for equipment labels and fix endpoint path
- chore: update changelog with releases 0.1.0 and 0.1.1
0.1.1
- fix: make release script survive grep no-match on HEAD tag check
0.1.0
- feat: delete existing photos when editing listing
- fix: evaluate Go expressions in Alpine x-data for edit listing form
- fix(web): hide file input and remove count text in listing forms
- fix: replace native file input label with reactive x-text for accurate file count
- fix: dispatch change event on file input after removal to update label
- fix: use data URLs for image previews to avoid dark boxes from blob URLs
- feat: client-side image resize before upload
- feat: add image preview thumbnails on create listing form
- feat: resize uploaded listing images to 1600px max + JPEG q85
- refactor: move changelog links into info icon next to app name
- fix: make ps to use HEAD instead of main for branch agnostic push
- chore: update changelog with release 0.0.13
0.0.13
- chore: inline commit lists into release body at creation time
- chore: include fetch-releases in make dev target
- chore: disable major version bump in create-release during pre-production
- feat: use conventional commits for semantic version bumping in create-release
- refactor: add reconstruct-releases script with idempotent semver releases
- feat: add changelog page with embedded GH releases
0.0.12
- feat: add storage abstraction with S3/local fallback
- feat: add local FS storage backend so uploaded images render in dev
- fix: resolve create listing form rendering by stripping Alpine x-model bindings
- fix: remove stripe gating from web create listing flow, skip pricing step
- feat: add 33312 seed listings with multiple images, spread across test users
0.0.11
- feat: add light/dark mode toggle to login screen
- fix: resolve private IPs via public IP fallback, add geolocation logging
- fix: dark mode text color on login screen title
- fix: sync tempZip after IP/browser geo resolve so location button updates
- fix: swap automatic browser geo prompt for silent IP geolocation
- feat: location resolution priority for listings search
- fix: update footer text color to gray-600, expand AGENTS.md commands
- fix: add title attrs on truncated text, landscape tweaks, remove accent stripe
- fix: add root route redirect to /listings
- fix: demo env deployment — static assets, DB readonly, CGO-free migrations
- feat: add deployment scripts for demo and production environments
- fix: consolidate geocoding into LookupAddress with two-step resolution for accurate city names
- feat: add zip geocode endpoint and auto city resolution for search
0.0.10
- feat: redesign search UI with location modal, idempotent seed upserts, chat back-link, SSE guard
- fix: add quarter field to Nominatim address parsing for accurate neighborhood names like Long Island City
- fix: prefer suburb/neighbourhood over city in Nominatim geocode for accurate neighborhood names
- polish: my listings page interaction states, hover shadows, focus rings, a11y
- fix: UI clarify and harden across web app pages
0.0.9
- feat: add compliance enforcement for Class III device filter, disclaimers, listing reporting, and seller self-certification
- feat: expand seed listing images to 5 each with unique picsum URLs
- polish: touch targets, preconnect CDN, aria-hidden on decorative SVGs
- fix: memory leaks, alt text, aria-live, a11y hardening
- refactor: remove SSE real-time chat from messages page
- fix: CSP compliance for inline scripts, improve color contrast across templates
- polish: detail page interaction states, touch targets, focus rings, dark mode contrast
- docs: update env vars, add simplified-pricing, revise OCR requirements
- fix: update OCR to extract make/model/serial/year into description, fix proposal inconsistencies
- feat: real medical equipment images from Wikimedia Commons + dedup listings on re-seed
- docs: clarify web app refers to Go templ SSR not Flutter
- refactor: remove web target code from flutter app
0.0.8
- feat: preserve search params in URL for bookmarking
- fix: search location button trigger and zip-only initial load
- fix: add comma grouping to formatPrice, use templ.JSONScript for JSON-LD
- chore: add default Flutter widget test
- feat: add US zip regex to forward geocode, clean up geocode
- docs: update README and AGENTS.md for web stack, seed command
- feat: add seed data command for dev environments
0.0.7
- refactor: remove make/model/year/serial_number from listings
- feat: persist sessions to SQLite
- chore: add *_templ.go and todo.txt to .gitignore
- refactor: extract inline Alpine x-data to app.js, polish lazy loading, login bg, flash dismiss
- style: responsive images, auto-fit grids, spacing rhythm, semantic z-index
- style: replace hardcoded spacing with tokens, add visual hierarchy and section rhythm
- style: add strategic color — dark condition badges, brand tokens, tinted neutrals
- fix: harden server templates for production edge cases
- feat: add RepaintBoundary around map, Semantics labels for photo carousel and search field
0.0.6
- feat: add text scaling support, scroll view, and MediaQuery.sizeOf for accessibility
- fix: add color-blind accessible condition badges, fix pricing card radio logic
- feat: replace Colors.blue seed with branded teal, add TextTokens theme extension
- feat: add responsive breakpoints, NavigationRail for tablets, fluid map/carousel heights
- feat: add dark mode toggle button to nav
- chore: update todo.txt
- docs: add auto-commit convention to AGENTS.md
- refactor: remove make/model/year/serial fields from listing forms
- feat: add forward geocoding and zip-based search; remove make/model/year/serial fields
- feat: add dark mode class support across all templates
- chore: add Go and Flutter build artifacts to .gitignore
- feat: add theme switcher in profile screen
- feat: add dark mode support across app
0.0.5
- feat: add listing location reverse geocoding, dev login, account pages, per-listing payments, and OCR pipeline
- chore: add tailwindcss dependency and ignore node_modules
- feat: per-listing payment verification and Stripe subscription sync
0.0.4
- feat: simplified pricing, drop user_type, add per-listing payment + Stripe subscription checkout
- fix: eliminate modulo bias in randomString and guard production API_URL
- feat: add refresh token rotation with 15min access / 30d refresh
0.0.3
- feat: complete flutter migration — chat, profile, FCM, permissions; remove React Native client
- feat: flutter migration phase 2-3 — listings, search, detail, create listing wizard, OCR, payment, offline queue
- feat: add web app with server-side templates, session auth, and SSE chat
- chore: add Go binary, IDE, and OS entries to gitignore
- feat: add makefile frontend targets, google oauth env vars, and expo auth config
0.0.2
- feat: add frontend-mvp with expo client and backend api gaps
- refactor: replace google vision with openai-compatible llm for ocr extraction
- feat: initial go backend with sqlc, golang-migrate, and s3-compatible storage
- docs: use haversine in go with performance logging, spatiaLite migration path
- docs: replace websocket chat with fcm push notifications
0.0.1
- docs: add medtrade design doc