Use this page when something isn’t working — run these commands in order to identify the problem. Each step narrows down the root cause so you can jump directly to the relevant fix in the common issues guide.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/danizd/geoviable/llms.txt
Use this file to discover all available pages before exploring further.
Check container status
Run All containers —
docker compose ps to confirm all three services are running:geoviable-api, geoviable-db, and geoviable-web — should show status Up. Any service in Restarting or Exited state is the likely source of the problem.Check API logs
Stream the most recent API log lines and look for Common error patterns to look for:
ERROR entries:exec ./entrypoint.sh: no such file or directory→ CRLF line ending issue (see Issue 1)relation "..." does not exist→ missing database tables (see Issue 3)could not connect to server→ database connectivity problem (see Issue 5)
Health check endpoint
Verify that the API is up and connected to the database:Expected response when everything is healthy:
The health endpoint returns HTTP 503 (not 200) when the database is unreachable. A 503 here means the API process started successfully but cannot talk to
geoviable-db — check your .env DATABASE_URL and confirm the database container is running.Verify PostGIS extension
Confirm that the PostGIS extension is installed in the You should see one row with
geoviable database:extname = postgis and a version of 3.4 or higher. An empty result set means the extension was never installed — re-run init_db.sql as described in Issue 3.Verify tables exist
List all tables in the database:You should see 8 tables: the 7 environmental layer tables plus
layer_update_log. If any are missing, the schema initialisation did not complete — follow the fix in Issue 3.Check layer record counts
Confirm that every environmental layer table contains data:All counts should be greater than 0. Any table with 0 rows will cause the analysis to return no overlaps for that layer. Follow the data-loading steps in Issue 4 to populate empty tables.
Test the analyze endpoint
Send a sample polygon that falls within Galicia to confirm the spatial analysis pipeline works end-to-end:A successful response is a JSON object containing layer overlap results. An error response will include an error code — consult the API error codes table below for the meaning.
Check layer update status
Query the layer status endpoint to see when each layer was last updated and how many records it holds:The response includes
last_updated and records_count per layer. Layers that have never been loaded will show null for last_updated.Log Locations
| Log | How to access |
|---|---|
| API application logs | docker compose logs -f geoviable-api |
| Nginx access/error logs | docker compose logs -f geoviable-web |
| Database logs | docker compose logs -f geoviable-db |
| Layer update cron log | docker compose exec geoviable-api tail -f /var/log/geoviable_update.log |
API Error Codes Reference
| Code | HTTP | Meaning |
|---|---|---|
INVALID_JSON | 400 | Request body is not valid JSON |
INVALID_GEOJSON | 400 | Body is not a valid GeoJSON Feature |
INVALID_GEOMETRY_TYPE | 400 | Geometry must be Polygon or MultiPolygon |
MULTIPLE_FEATURES | 400 | Only 1 polygon allowed per request |
INVALID_TOPOLOGY | 400 | Polygon is self-intersecting |
OUT_OF_BOUNDS | 400 | Polygon is outside the Galicia bounding box |
AREA_TOO_LARGE | 400 | Polygon area exceeds 100 km² |
TOO_MANY_VERTICES | 400 | Polygon has more than 10,000 vertices |
QUERY_TIMEOUT | 504 | PostGIS spatial query exceeded the 30-second timeout |
ANALYSIS_FAILED | 500 | Internal spatial analysis error |
MISSING_PROJECT_NAME | 422 | project.name is required in the request body |
PROJECT_NAME_TOO_LONG | 422 | project.name exceeds 100 characters |
MISSING_GEOJSON | 422 | geojson field is absent from the request body |
PDF_GENERICATION_FAILED | 500 | WeasyPrint PDF generation error |