# mapix

![mapix screenshot](./screenshot.png)

A browser-based photo mapping prototype that reads EXIF/GPS data and shows images on OpenStreetMap.

## Features

- Nextcloud public share import through a local proxy
- Client-side EXIF and GPS extraction where possible
- Map markers with thumbnail previews
- Thumbnail-backed photo list with lazy full-size image loading
- Fullscreen photo viewer with loading state
- Zoomable timeline with selectable ranges
- Route line toggle on the map
- Dark and light mode that follows the client OS preference and can be toggled manually
- Local browser dependency bundle for Leaflet and EXIF parsing
- Local brand assets and favicon

## Recent Changes

- Image handling now keeps thumbnails in the browser for markers and the photo list, while full-size images are loaded only on demand.
- The photo viewer now shows a loading indicator before the full image is ready.
- The sidebar header now includes the brand logo, and the logo switches with the active theme.
- The top-right controls include a route visibility toggle and a theme toggle with compact icon-only buttons.
- Browser dependencies and static assets are served locally to avoid CDN-related failures.
- The timeline keeps its selected range visible again during drag selection.
- The photo list now uses compact thumbnail tiles and stable wrapping for large result sets.

## Start

```bash
npm install
npm run build
npm start
```

## Notes

- Photos are not stored on the server.
- The UI and processing run in the browser where possible.
- Browser dependencies are installed through npm and copied into `dist/vendor` during `npm run build`; the runtime serves them locally instead of loading third-party CDNs.
- Static brand assets are copied from `src/assets` into `dist/assets` during the build.
- Future auth can be forwarded by a reverse proxy via HTTP headers.
