2025-10-12 13:56:29 +02:00
2025-10-12 13:56:29 +02:00
2025-10-12 12:38:35 +02:00
2025-10-12 13:56:29 +02:00
2025-10-12 13:56:29 +02:00
2025-10-11 20:09:05 +02:00
2025-10-12 12:38:35 +02:00
2025-10-12 12:38:35 +02:00

Points of Interest

Backend Quality Backend Tests Frontend Quality


This repository hosts a proof-of-concept "points of interest" application composed of a Symfony API and a React client. Users can submit nearby signals and explore aggregated heatmaps that visualise recent activity.

Screenshot

Project structure

  • server/ Symfony 7 API that stores and broadcasts signal submissions.
  • client/ React (Vite) front-end that renders the map interface and live statistics.

Prerequisites

  • Node.js 20+
  • PHP 8.4+
  • Docker

Running the API server

cd server
composer install

docker compose up

# Prepare the database schema
php bin/console doctrine:database:create --if-not-exists
php bin/console doctrine:migrations:migrate --no-interaction
php bin/console doctrine:fixtures:load

# Start the Symfony development server
symfony serve --no-tls

The API listens on http://127.0.0.1:8000 by default. Adjust the Mercure hub and other environment variables in .env as needed.

Running the client

cd client
npm install
npm run dev

The client starts on http://localhost:5173. Set the VITE_API_BASE, VITE_MERCURE_HUB, and VITE_MERCURE_TOPIC environment variables (see client/.env.example if available) to point to the API and Mercure hub instances.

Testing

  • API: cd server && ./vendor/bin/phpunit
  • Client: cd client && npm run build (ensures the TypeScript build succeeds)

Additional notes

  • The API uses Mercure for real-time updates. Ensure a Mercure hub is running and reachable by the client when testing streaming features.
  • The default DATABASE_URL now targets the bundled PostgreSQL/PostGIS container. Update it if you run the database elsewhere, and rerun migrations after switching databases.
  • Review the individual README.md files inside client/ and server/ for more detailed configuration guidance.
S
Description
Points of Interest: collaborative hotspot mapping through anonymous crowdsourcing
Readme 3.9 MiB
Languages
TypeScript 69.2%
PHP 25.5%
CSS 3.4%
JavaScript 1.6%
HTML 0.3%