A web application for creating custom map prints with real-time preview, PDF export, and print fulfillment integration.
- Real Map Integration: Uses MapLibre GL JS with OpenStreetMap tiles
- Location Search: Geocoding with autocomplete using Nominatim (OpenStreetMap)
- Map Styles:
- Minimal line-art street map
- Contour topographic map
- Terrain elevation relief
- Customization:
- Multiple print sizes (5x7 to 24x36)
- Portrait/landscape orientation
- Border styles (none, single, double)
- Color themes (black on white, warm grey, dark mode)
- Custom title, subtitle, and coordinates
- PDF Export: Generate print-ready 300 DPI PDFs
- Print Fulfillment: Integration with Printful API for order processing
npm installnpm run devnpm run buildnpm run previewCreate a .env file in the root directory (see .env.example):
# Optional: Mapbox API Token (MapLibre works without it using OpenStreetMap)VITE_MAPBOX_TOKEN=# Printful API credentials (for print fulfillment)VITE_PRINTFUL_API_KEY=VITE_PRINTFUL_STORE_ID=# Gelato API credentials (alternative print provider)VITE_GELATO_API_KEY=src/
components/
MapView.tsx # MapLibre GL map component
LocationSearch.tsx # Geocoding search with autocomplete
CheckoutModal.tsx # Order checkout flow
utils/
geocoding.ts # Geocoding API integration
mapStyles.ts # Map style configurations
pdfExport.ts # PDF generation utilities
printful.ts # Printful API integration
config.ts # Configuration and environment variables
types.ts # TypeScript type definitions
CustomMapPrintMaker.tsx # Main component
App.tsx # App entry point
main.tsx # React DOM root
index.css # Global styles
- Search for a location: Type in the search bar to find places worldwide
- Customize your map:
- Select print size and orientation
- Choose map style and color theme
- Add borders
- Edit title, subtitle, and coordinates
- Preview: See real-time preview with text overlay
- Export: Download as PDF or order a framed print
Clean vector roads with minimal styling, perfect for modern decor.
Elevation contour lines showing terrain features.
Gradient-based terrain visualization with artistic appeal.
- 5×7 inches
- 8×10 inches
- 12×16 inches
- 16×20 inches
- 18×24 inches
- 24×36 inches
- React 18 - UI framework
- TypeScript - Type safety
- Vite - Build tool and dev server
- Tailwind CSS - Styling
- MapLibre GL JS - Map rendering
- jsPDF - PDF generation
- html2canvas - Canvas rendering for PDF export
Uses Nominatim (OpenStreetMap) for free geocoding. No API key required.
- Printful: Primary print-on-demand provider
- Gelato: Alternative provider for international fulfillment
- MapLibre GL uses OpenStreetMap tiles by default (free, no API key needed)
- For production, consider using Mapbox tiles for better performance (requires API key)
- PDF export uses html2canvas which may have limitations with WebGL content
- For production PDF generation, consider server-side rendering with Puppeteer
MIT