Skip to content

deglebe/maristmaps

Repository files navigation

maristmaps

google maps for marist.

Maristmaps pairs a MapLibre frontend with a Flask backend. Campus data flows through PostGIS and osm2pgsql into Martin for vector tiles, with a LangChain-powered agent for conversational routing on top.

Best Overall Project — Marist Hackathon, Spring 2026.

Demo

Demo Video

Problem statement

The current Marist campus map only shows you where buildings are and google maps is unable to provde specific building to building navigation. maristmaps focuses on a campus-first experience with a dedicated tile pipeline and structured indoor location data so users can get from point to point with clear context.

Primary users include:

  • Blind or low-vision individuals who need better navigation support.
  • People unfamiliar with Marist (guests, speakers, parents, new students).
  • Students and staff who need fast room/building lookup and routing.

Quick start (local dev)

Prereqs: docker (with compose v2 plugin), Python 3.11+, and a working pip. The stack itself runs in docker; the Flask dev server runs on the host so you get autoreload.

git clone https://github.com/YOUR-FORK/maristmaps.git
cd maristmaps

python -m venv .venv && . .venv/bin/activate
pip install -r requirements.txt

cp .env.example .env
# edit .env: at minimum set OPENAI_API_KEY for the agent

./scripts/init.sh            # db + martin up, osm2pgsql + CSVs loaded
python run.py                # http://127.0.0.1:5000

scripts/init.sh is idempotent: re-run it any time you add a new PBF or edit db/buildings/*.csv. Pass --reload-osm to force an osm2pgsql re-import.

Deploy (VPS, HTTPS, subdomain)

./scripts/init.sh --prod

Full walkthrough — DNS, Caddy auto-TLS, day-two ops, troubleshooting — is in deploy/deploy.md.

Layout

app/               Flask app (routes, models, templates, static)
agent/             Langchain agent (tools, prompts, service)
db/                init-postgis.sql, buildings/*.csv, load_data.py
docker/            Dockerfiles, Caddyfile, gunicorn.conf.py
martin/            martin tile server config
pbf/               OSM PBF extracts (mounted into the init container)
scripts/           init.sh (unified bootstrap), load-osm.sh (legacy)
docker-compose.yml base stack (db + martin + init + web)
deploy/            deployment overlay compose + deployment walkthrough
run.py             Flask dev server entrypoint (host-side)
wsgi.py            Gunicorn entrypoint (in the web container)

Configuration

Everything lives in .env. See .env.example for the full annotated list. In short:

var purpose
SECRET_KEY Flask session signing
OPENAI_API_KEY langchain agent
DATABASE_URL postgres conn string (SQLAlchemy form)
MARTIN_PUBLIC_URL tile server URL as the BROWSER sees it
DOMAIN (prod) subdomain for Caddy TLS
ACME_EMAIL (prod) Let's Encrypt registration email

Services

service port (dev) role
db 5432 postgis: osm2pgsql tables + locations
martin 3000 vector tile server over planetosm*
init one-shot: osm2pgsql + db/load_data.py
web 8000 gunicorn + Flask (prod only; dev uses run.py)
caddy 80/443 prod only: TLS + reverse proxy

Tools

Two internal tools for building out the indoor dataset. Not linked from the public header — reachable by direct URL only, so drop them into your browser when you need them.

tool route role
survey (GeoLog) /tools/survey mobile GPS logger for field surveying
edit (csv viz) /tools/edit desktop CSV editor for cleanup + hallway graphs

Typical workflow: walk a building with /tools/survey on your phone, logging rooms / entrances / stairs / elevators against live GPS. It exports a CSV matching db/buildings/*.csv exactly. Drop that CSV into /tools/edit on a laptop to fix up positions, draw hallway graphs (the hallway mode), and verify routes (route mode) before committing. Both tools read the same map_config blob as the main map page, so the Martin URL, campus center, and zoom stay in sync.

Once the CSV looks right, save it into db/buildings/ and re-run ./scripts/init.sh (or --prod) to reload the locations table.

Future ideas

  • Add schedule-aware routing (for example via CalDAV or a student schedule feed).
  • Add agent workflows for class-to-class route planning and timing suggestions.

Related references:

About

google maps for marist

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors