An interactive visualization platform documenting Jewish-owned businesses in Berlin from 1900 to 1945. This application combines historical data with modern web technologies to preserve memory and provide educational insights into this significant period of history.
- Clustered markers for efficient visualization of hundreds of businesses
- Dynamic marker states based on timeline (active, declining, closed)
- Custom styling inspired by Snazzy Maps
- Smooth animations and transitions
- Interactive timeline slider (1920-1945)
- Real-time updates showing business states through history
- Play/pause animation to watch changes over time
- Searchable and filterable business listings
- Categories: Businesses, Institutions, Residences
- Detailed information cards with historical context
- Synchronized selection between map and list
- Historical photographs and documents
- Expandable detail views with full descriptions
- Modal system with smooth animations
- Node.js 18+
- npm, yarn, or pnpm package manager
- Mapbox account for API token
- Clone the repository:
git clone https://github.com/yourusername/storymaps.git
cd storymaps- Install dependencies:
npm install
# or
yarn install
# or
pnpm install- Set up environment variables:
cp .env.example .env.local- Add your Mapbox token to
.env.local:
NEXT_PUBLIC_MAPBOX_TOKEN=your_mapbox_token_here
- Run the development server:
npm run dev
# or
yarn dev
# or
pnpm devOpen http://localhost:3000 to view the application.
storymaps/
βββ src/
β βββ app/ # Next.js app directory
β β βββ components/ # React components
β β βββ globals.css # Global styles
β β βββ page.tsx # Main page
β βββ hooks/ # Custom React hooks
β βββ utils/ # Utility functions
β βββ types.ts # TypeScript definitions
βββ data/ # Historical data files
βββ public/ # Static assets
β βββ images/ # Historical photographs
βββ IMPLEMENTATION_NOTES.md # Technical documentation
- Next.js 15.4.6 - React framework with SSR/SSG
- React 18 - UI library
- TypeScript - Type safety
- Tailwind CSS - Utility-first styling
- Mapbox GL JS - Interactive maps
- React Map GL - React wrapper for Mapbox
- Supercluster - Marker clustering
- Dynamic imports for code splitting
- React.memo for component optimization
- Throttled/debounced event handlers
- Image optimization with Next.js Image
The historical data comes from various archives and research projects documenting Jewish businesses in Berlin. Each entry includes:
- Business name and type
- Location (address and coordinates)
- Operating dates
- Historical context and descriptions
- Archival photographs when available
npm run dev # Start development server
npm run build # Build for production
npm run start # Start production server
npm run lint # Run ESLint
npm run typecheck # Run TypeScript compiler check- Components use functional React with hooks
- All components wrapped in React.memo when receiving props
- TypeScript strict mode enabled
- No border-radius (sharp edges design choice)
- Consistent color palette (see CLAUDE.md)
See PERFORMANCE_RULES.md for detailed performance optimization guidelines.
The easiest deployment method is using Vercel:
- Build the application:
npm run build-
The build output will be in
.next/directory -
Deploy to your hosting provider (supports Node.js)
NEXT_PUBLIC_MAPBOX_TOKEN=your_production_mapbox_token
- Chrome 90+
- Firefox 88+
- Safari 14+
- Edge 90+
Requires WebGL support for map rendering.
We welcome contributions that help preserve historical memory and improve the educational value of this project.
New collaborators: start with docs/ONBOARDING.md β it covers setup, ground rules, and all contribution tracks (code, research, outreach, translation). See also docs/OUTREACH_TRACKING.md for the memorial plaque outreach workflow, docs/TASK_TRACKING.md for how tasks are organized, and the /collaborate page in the app for a quick overview.
- Fork the repository
- Create a feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
Please read IMPLEMENTATION_NOTES.md for technical details before contributing.
This project documents a difficult period in history. The visualization aims to:
- Preserve the memory of Jewish businesses and their contributions
- Provide educational resources about the impact of historical events
- Present information objectively and respectfully
This project is licensed under the MIT License - see the LICENSE file for details.
- Historical data providers and archives
- Mapbox for mapping infrastructure
- Next.js team for the framework
- Contributors and researchers who helped gather historical information
For questions or issues:
- Open an issue on GitHub
- Check
IMPLEMENTATION_NOTES.mdfor technical documentation - Review
PERFORMANCE_RULES.mdfor optimization guidelines
Note: This project handles sensitive historical data. Please treat all information with appropriate respect and historical accuracy.