🎙️ Part of the oeradio.at open source ham radio tool collection. Browse all tools → oeradio.at/werkzeuge
Interactive web map displaying all amateur radio repeaters in Austria.
- Interactive map with all Austrian amateur radio repeaters
- Filter by band (2m, 70cm, 23cm, etc.)
- Filter by type (FM, DMR, D-STAR, C4FM, etc.)
- Filter by federal state (Bundesland)
- Search by callsign or location
- Detail view with frequencies, CTCSS, DMR IDs, etc.
- Responsive design for desktop and mobile
- Automatic weekly data updates
# Install dependencies
npm install
# Start development server
npm run devOpen http://localhost:5173 in your browser.
docker compose -f docker-compose.dev.yml updocker compose up -dThe application will be available at http://localhost:80.
relaisblick/
├── src/
│ ├── components/
│ │ ├── Map/ # Map components (Leaflet)
│ │ ├── Sidebar/ # Filters, search, repeater list
│ │ └── UI/ # General UI components
│ ├── hooks/ # React hooks
│ ├── types/ # TypeScript type definitions
│ └── utils/ # Utility functions
├── scripts/ # Python scraper
│ └── sources/ # Data sources (OEVSV, Repeaterbook)
├── data/ # Repeater data (JSON)
├── docker/ # Docker configuration
└── .github/workflows/ # CI/CD pipelines
- React 18 with TypeScript
- Vite (Build tool)
- Leaflet / React-Leaflet (Maps)
- Tailwind CSS (Styling)
- Python 3.12
- BeautifulSoup4 (Web scraping)
- Requests (HTTP client)
- Docker (Multi-stage builds)
- Nginx (Production server)
- GitHub Actions (CI/CD)
Repeater data is aggregated from the following sources:
- OEVSV - Austrian Amateur Radio Association (Österreichischer Versuchssenderverband)
- Repeaterbook - International repeater database
Updates are performed automatically every week via GitHub Actions.
# With Python directly
cd scripts
pip install -r requirements.txt
python update_relais.py
# With Docker
docker compose run --rm updaterFor local customizations:
cp docker-compose.override.yml.example docker-compose.override.yml
# Edit file as needed| Variable | Description | Default |
|---|---|---|
OUTPUT_DIR |
Output directory for JSON | /data |
SCHEDULE |
Cron schedule for updates | 0 3 * * 0 (Sunday 03:00) |
ONE_SHOT |
Single run without cron | false |
- Node.js 20+
- npm 9+
- Python 3.12+ (for scraper)
- Docker & Docker Compose (optional)
npm run dev # Development server
npm run build # Production build
npm run preview # Production preview
npm run lint # ESLint- TypeScript with strict types
- ESLint for code quality
- Prettier for formatting (recommended)
Docker images are automatically built and pushed to GHCR:
docker pull ghcr.io/OWNER/relaisblick:latest
docker pull ghcr.io/OWNER/relaisblick-updater:latest- Clone repository
- Create
docker-compose.override.yml - Run
docker compose up -d
For automatic deployments, see .github/workflows/deploy.yml.
MIT License - see LICENSE file.
Contributions are welcome! Please create an issue or pull request.
For questions or issues, please create a GitHub issue.
73 de OE8YML