A modern web application for managing personal location markers on an interactive map, with KML import capability, custom folders/categories, and rich marker metadata.
- Interactive Mapbox Map: Full-screen map with multiple style options (Dark, Light, Streets, Satellite, Outdoors)
- KML Import: Upload and parse KML files with folder hierarchy and custom fields
- Marker Management: Add markers by clicking on the map, view marker details
- Folder System: Create custom folders, toggle visibility, organize markers
- Local Storage: All data stored in IndexedDB using Dexie.js
- Dark Theme: Modern dark UI matching the design requirements
- Mobile Responsive: Touch-friendly interface with mobile-first design
- Supabase Integration: Cloud sync and authentication
- Image Support: Upload and manage marker images
- Custom Fields: Dynamic field types (text, select, date, number)
- PWA Features: Offline support and installability
- Advanced Search: Filter markers by various criteria
- Export Functionality: Export to KML, GeoJSON, CSV
- Framework: Next.js 14 (App Router)
- Styling: Tailwind CSS
- Map: Mapbox GL JS v3 with react-map-gl
- Database: IndexedDB with Dexie.js
- State Management: Zustand
- Icons: Lucide React
- XML Parsing: xml2js
- Node.js 18+
- npm or yarn
- Mapbox account and access token
-
Clone the repository
git clone <repository-url> cd markermap
-
Install dependencies
npm install
-
Set up environment variables
cp env.example .env.local
Edit
.env.localand add your Mapbox token:NEXT_PUBLIC_MAPBOX_TOKEN=your_mapbox_token_here -
Get a Mapbox token
- Go to Mapbox
- Sign up for a free account
- Go to your account page and create a new access token
- Copy the token and paste it in your
.env.localfile
-
Run the development server
npm run dev
-
Open your browser Navigate to http://localhost:3000
- Click the + button in the top-right corner
- Click anywhere on the map to place a marker
- Click on a marker to view its details
- Open the sidebar (hamburger menu on mobile)
- Click the + button next to "Folders" to create a new folder
- Use the eye icon to toggle folder visibility on the map
- Open the sidebar
- Click "Import KML"
- Select a KML file from your computer
- The app will parse and import all markers and folders
- Layer Switcher: Change map style (top-right)
- Add Marker: Place new markers (top-right)
- Current Location: Center map on your GPS location (top-right)
- Zoom Controls: Zoom in/out (bottom-right)
/app
/page.tsx # Main application page
/layout.tsx # Root layout with dark theme
/components
/MapboxMap.tsx # Main map component
/Sidebar.tsx # Sidebar with folders and import
/lib
/db.ts # IndexedDB schema and setup
/kml-parser.ts # KML file parsing utility
/store
/mapStore.ts # Zustand state management
The app uses IndexedDB with the following structure:
- Folders: Organize markers into categories
- Markers: Individual location points with metadata
- MarkerImages: Associated images (future feature)
- CustomFields: Dynamic field definitions (future feature)
- MarkerCustomValues: Custom field values (future feature)
npm run dev- Start development servernpm run build- Build for productionnpm run start- Start production servernpm run lint- Run ESLint
react-map-gl- React wrapper for Mapbox GL JSmapbox-gl- Mapbox GL JS librarydexie- IndexedDB wrapperzustand- State managementxml2js- XML/KML parsinglucide-react- Icon library
- Fork the repository
- Create a feature branch
- Make your changes
- Test thoroughly
- Submit a pull request
This project is licensed under the MIT License.
For issues and questions:
- Check the existing issues
- Create a new issue with detailed description
- Include steps to reproduce any bugs
Note: This is Phase 1 MVP. Future phases will add cloud sync, authentication, image support, and PWA features.