Part of #1. Tracer bullet: model -> migration -> action -> route -> test.
- Market + Business + BusinessHour CRUD actions and routes
GET /api/businesses?lat&lng&radius&q&open_now&type- SQL bounding-box prefilter + haversine distance (SQLite has no trig guarantee; compute distance in app code on prefiltered rows), distance sort, open-now computed from BusinessHour in the business timezone- Search engine (text relevance) indexes name/cuisine/description only; geo stays in SQL
- Feature tests: radius correctness, open-now edge cases (overnight hours, holiday override)