
taxibros
Resolved an issue where the chart failed to update correctly when adjusting the time slider. The previous implementation passed the calculation directly to the callback before updating the local state, leading to inconsistent rendering. This refactor ensures the minutes are calculated and assigned to the local scope consistently before triggering the chart update. 
Updated the heatmap configuration to allow for a broader 1-week data window instead of the previous 1-day limit. This change provides users with a more comprehensive view of historical data trends within the visualization interface.
Updated the heatmap intensity control panel in the template to better distinguish the slider label and function. This change helps users understand how to manipulate heatmap intensity more effectively within the interface.
Tuned the margin-top property for the .pac-container element to correct UI overlap issues with the autocomplete menu, resolving issue #83. This small CSS tweak improves visual alignment within the interface. 
This change adds practical PostgreSQL setup instructions to the README, including manual data directory initialization, starting the server, and creating the application user and database. It also documents a migration path from SQLite to PostgreSQL and calls out a subtle Django startup issue where converting QuerySets to lists too early can break migrations against an empty database. The result is clearer onboarding and fewer gotchas when switching the project to Postgres.
This change tightens the visualize page’s itinerary table so the visible headers match the actual user-facing fields, instead of showing an extra "Delete" column header. It also renames the per-row action from "Delete row" to the simpler "Delete," which makes the controls a bit cleaner without changing behavior. The practical effect is a more polished table layout and slightly clearer UI for editing itineraries.
This change updates the frontend table code so the pickup action uses showPickup consistently in the button class, click handler, and function name, and shortens the button label to “Show.” The behavior stays the same, but the naming now better matches what the action actually does when rendering pickup details and route context. There’s also a small no-op comment block change in the download daemon, so the practical effect is a clearer, slightly cleaner pickup workflow in the UI.
The visualizePickup functionality has been updated to automatically calculate and render the path to the arrival position on the map using calcRoute. This improvement builds on existing coordinate data to provide clearer visual feedback, showing exactly how a pickup route will unfold alongside other location details. It's a small but helpful enhancement for users interacting with the visualization UI 🗺️.
The map's autocomplete initialization has been refactored to distinguish properly between pickup and arrival events. This commit fixes issue #107 by ensuring that route calculation is automatically triggered as soon as both a pickup and an arrival location are added to the table. Additionally, location caching logic and codebase documentation were polished. These changes lead to a much smoother user experience when generating routes on the interactive map.
The itinerary table in the visualization frontend has been updated to accept and store the arrivalPos parameter. This data is kept in a newly added hidden cell with the rest of the journey details, making the arrival coordinates easily accessible when triggering an action like visualizing a pickup. It partially addresses issue #107 by ensuring destination coordinate data is retained in the UI.
The map autocomplete setup no longer binds search results to the current viewport in templates/visualize/map.js. Since componentRestrictions: country already narrows results sufficiently, this avoids over-biasing suggestions toward whatever area the map happens to be showing. In practice, users should get more relevant place matches across the allowed country instead of being unintentionally constrained by the visible map region.
This change extracts the recurring pattern of parsing a lat,lng string and wrapping it in google.maps.LatLng into a new parseLatLngMaps() helper. Both the map autocomplete flow and itinerary table visualization now use the shared function instead of open-coding the conversion in multiple places, reducing duplication and making coordinate handling more consistent. The behavior stays the same, but the code is easier to maintain and less error-prone the next time map-related logic changes.
In a previous update, the genLoc function signature was updated with a new isCreate parameter, but unfortunately one of the function calls wasn't updated to match. This caused all 14 subsequent arguments to be offset by one, passing the wrong values to the function and silently breaking location generation. We've added the missing boolean argument to the visualizePickup function call, restoring the correct argument mapping and behavior for pickup rendering.
This change fixes a UI issue in templates/visualize/index.html where the import button was placed inside the table structure and could end up hidden or not rendered as intended. The import caption, label, and file input were moved to sit after the closing </table>, preserving the control while making it consistently visible to users. Practically, importing data from CSV should now be discoverable and usable again.
The map location logic was updated to exclusively use the place_changed event and fetch a single PlaceResult at a time. This change simplifies location handling, removes the need for multiple marker clearance and iteration, and fixes bug #106. Consequently, users must now explicitly select an autocompleted place from the dropdown instead of pressing Enter.
This change renames genLocHandleData to updateStats in templates/visualize/stats.js and updates the corresponding calls from map.js. The behavior stays the same, but the new name better reflects that the function is responsible for rendering and refreshing the stats panel rather than handling generic location data. It’s a small cleanup, but it improves readability and makes the map/stats split in the frontend code more obvious for future edits.
The get_timestamp endpoint was occasionally returning nothing because it was querying within a narrow 1-minute interval. Since timestamps are actually sparsed to every 5 minutes in the backend, a 1-minute window could easily miss the recorded data. The query interval has now been increased to 6 minutes, ensuring reliable retrieval of the latest timestamp data without returning empty results.
Fixed an issue in the conversion daemon where querying the KDTree with an empty list of coordinates could lead to failures. We've added a conditional check to ensure kdtree.query is only called when there are actually coordinates to process. This ensures the daemon gracefully handles empty batches by returning an empty mapping without crashing.
