- Citizen Reporting – Photos, descriptions, geolocation
- Interactive Maps – Pinpoint locations, clustering, filtering
- Open311 API – Standard GeoReport v2 integration
- Workflow Management – Track issues from report to resolution
Built for municipalities, public service departments, and civic tech organizations.
┌─────────────────────────────────────────────────────────────┐
│ Frontend (PWA) │
│ Vue 3 · TypeScript · Tailwind · MapLibre │
└─────────────────────────────┬───────────────────────────────┘
│
HTTPS/JSON (REST)
│
┌─────────────────────────────▼───────────────────────────────┐
│ Drupal 11 Backend │
│ │
│ ┌──────────────────────┐ ┌──────────────────────┐ │
│ │ Open311 API │ │ JSON:API │ │
│ │ (GeoReport) │ │ (CRUD) │ │
│ └──────────────────────┘ └──────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
Requires DDEV.
git clone https://github.com/markaspot/mark-a-spot.git
cd mark-a-spot
ddev start
ddev ssh
./scripts/start.sh -y
exitAccess:
- Backend: https://mark-a-spot.ddev.site
- Frontend: https://mark-a-spot.ddev.site:8040
- Admin:
ddev drush uli
| Flag | Description |
|---|---|
-y |
Autopilot mode (defaults: New York, en_US) |
-t |
Import Drupal translation files |
-a |
AI content translation (requires OPENAI_API_KEY) |
Combine flags as needed: ./scripts/start.sh -t -a
Use -t for Drupal translations, -a for AI-powered content translation.
Requires OPENAI_API_KEY. See ./scripts/start.sh --help for details.
Implements the Open311 GeoReport v2 standard.
| Endpoint | Description |
|---|---|
GET /georeport/v2/services.json |
List service categories |
GET /georeport/v2/requests.json |
List service requests |
GET /georeport/v2/requests/{id}.json |
Get single request |
POST /georeport/v2/requests.json |
Create request |
- PHP 8.3+
- Node.js 22+ (LTS)
- MySQL 8.0+ / MariaDB 10.6+
- Composer 2.x