Eine Webplattform zur Koordination und Dokumentation von Critical-Mass-Fahrradtouren weltweit.
- Städteverzeichnis: Übersicht aller Städte mit Critical-Mass-Touren
- Tourenkalender: Termine und Details zu allen geplanten Touren
- Wiederkehrende Termine (Cycles): Automatische Generierung von Touren basierend auf Regeln (z.B. "jeden letzten Freitag im Monat")
- Subrides: Unterstützung für Nebentouren und Zubringer
- Regionen: Geografische Gruppierung von Städten
- Teilnahmebestätigung: Nutzer können ihre Teilnahme an Touren ankündigen
- Teilnehmerschätzungen: Crowdsourced Schätzungen der Teilnehmerzahlen
- Diskussionsforen: Boards und Threads für den Austausch
- Benutzerprofile: Persönliche Profile mit Teilnahmehistorie
- Fotogalerie: Upload und Verwaltung von Tourenfotos
- GPS-Tracks: Upload und Visualisierung von GPX-Tracks
- Strava-Integration: Import von Tracks direkt aus Strava
- Wetterdaten: Automatische Wetterdokumentation für Touren
- Timeline: Aktivitätsfeed aller Ereignisse
- Interaktive Karten: Leaflet/MapLibre-basierte Kartenansichten
- Streckendarstellung: Visualisierung von GPS-Tracks auf Karten
- Cluster-Ansicht: Übersichtliche Darstellung vieler Marker
- Social-Network-Profile: Verknüpfung mit Facebook, Twitter, Instagram etc.
- Feed-Integration: Aggregation von Social-Media-Posts
- REST API: Vollständige REST-Schnittstelle unter
/api/ - API-Dokumentation: Interaktive Dokumentation unter
/api/doc
- Monatsstatistiken: Auswertungen nach Zeiträumen
- Top-Listen: Rankings nach verschiedenen Kriterien
- PHP >= 8.5
- MySQL/MariaDB >= 10.9
- Node.js >= 18
- Yarn >= 3.4 oder npm
- Composer >= 2.0
intlsimplexmlfileinfoxmlwriterjsonzippdo_mysql
- Redis: Caching und Sessions
- RabbitMQ: Asynchrone Verarbeitung (View-Counting, Track-Import)
- Memcached: Alternatives Caching
git clone https://github.com/criticalmass-one/criticalmass-in.git
cd criticalmass-inDie Datenbank und weitere Services werden via Docker bereitgestellt:
docker-compose up -dDies startet:
- MariaDB auf Port 8002 (extern) / 3306 (intern)
- Redis für Caching
- Memcached für Caching
- Mailcatcher für E-Mail-Tests (Web-UI auf Port 1080)
cp .env .env.localDie .env.local nach Bedarf anpassen. Die Standardwerte funktionieren mit den Docker-Services.
composer installyarn install
yarn buildFür die Entwicklung mit Hot-Reload:
yarn watch
# oder
yarn dev-server# Datenbank-Schema erstellen
php bin/console doctrine:schema:create
# Optional: Fixtures laden (Testdaten)
php bin/console doctrine:fixtures:loadMit Symfony CLI (empfohlen):
symfony serveOder mit PHP Built-in Server:
php -S localhost:8000 -t public/Die Anwendung ist dann unter http://localhost:8000 erreichbar.
DATABASE_URL=mysql://criticalmass:criticalmass@127.0.0.1:8002/criticalmassFür Social Login müssen entsprechende App-Credentials konfiguriert werden:
FACEBOOK_APP_ID=your_app_id
FACEBOOK_APP_SECRET=your_app_secret
STRAVA_CLIENT_ID=your_client_id
STRAVA_SECRET=your_secretFür asynchrone Verarbeitung:
RABBITMQ_URL=amqp://guest:guest@localhost:5672REDIS_URL=redis://localhost:6379composer testDies führt folgende Schritte aus:
- Test-Datenbank zurücksetzen
- Schema erstellen
- Fixtures laden
- PHPUnit-Tests ausführen
composer test:run
# oder
./vendor/bin/phpunitcomposer test:apicriticalmass-in/
├── assets/ # Frontend-Assets (JS, CSS, Images)
├── bin/ # Konsolenbefehle
├── config/ # Symfony-Konfiguration
│ ├── packages/ # Bundle-Konfigurationen
│ └── routes/ # Routing-Konfiguration
├── docker/ # Docker-Volumes
├── public/ # Web-Root
│ ├── photos/ # Hochgeladene Fotos
│ └── tracks/ # Hochgeladene GPS-Tracks
├── src/
│ ├── Command/ # Konsolenbefehle
│ ├── Controller/ # HTTP-Controller
│ │ └── Api/ # REST-API-Controller
│ ├── Criticalmass/ # Domain-Logik
│ ├── Entity/ # Doctrine-Entities
│ ├── Form/ # Symfony-Formulare
│ ├── Menu/ # Menü-Builder
│ ├── Repository/ # Doctrine-Repositories
│ ├── Serializer/ # Serializer-Komponenten
│ └── Twig/ # Twig-Extensions
├── templates/ # Twig-Templates
├── tests/ # PHPUnit-Tests
├── translations/ # Übersetzungsdateien
└── var/ # Cache und Logs
# Cache leeren
php bin/console cache:clear
# Datenbank-Migrationen
php bin/console doctrine:migrations:migrate
# Routen anzeigen
php bin/console debug:router
# Services anzeigen
php bin/console debug:container
# Assets installieren
php bin/console assets:install publicDie REST-API ist unter /api/ verfügbar. Eine interaktive Dokumentation (Swagger/OpenAPI) findest du unter:
http://localhost:8000/api/doc
| Methode | Endpunkt | Beschreibung |
|---|---|---|
| GET | /api/city |
Liste aller Städte |
| GET | /api/{citySlug} |
Details einer Stadt |
| GET | /api/{citySlug}/{rideIdentifier} |
Details einer Tour |
| GET | /api/ride |
Liste von Touren |
| GET | /api/photo |
Liste von Fotos |
| GET | /api/track |
Liste von Tracks |
| POST | /api/estimate |
Teilnehmerschätzung abgeben |
- Symfony 6 - PHP-Framework
- Doctrine ORM - Datenbank-Abstraktion
- Twig - Template-Engine
- Bootstrap 5 - CSS-Framework
- Webpack Encore - Asset-Bundling
- Stimulus - JavaScript-Framework
- Leaflet/MapLibre - Kartenvisualisierung
- Chart.js - Diagramme
- MariaDB/MySQL - Datenbank
- Redis - Caching
- RabbitMQ - Message Queue
- Docker - Containerisierung
MIT License
Malte Hübner - malte@caldera.cc