Skip to content

ackerleytng/gowherene

Repository files navigation

gowherene

gowherene is a webapp to help Singaporeans plot food recommendations, such as thesmartlocal's http://thesmartlocal.com/read/cheap-food-orchard, on a map.

These popular blogs do not have a map view for their recommendations, so I built gowherene to help visualise the geographical locations of the recommendations for better decision making.

Some carefully-tested recommendations pages are

gowherene can also plot addresses, not just recommendations! Try:

Prerequisites

You will need at least version 1.10.1.727 of the Clojure CLI installed.

data

While parsing a page to find address information, the code often refers to data or address-info, a map of:

key value
:postal-code-loc The loc (as in point in hickory) where the postal code was found, together with some address information
:header-loc The loc of the heuristically-determined header for this :postal-code-loc
:place The name of this place
:address The address of this place
:latlng The latitude and longitude of this place

Developing

Starting the backend

In emacs, do cider-jack-in, then at the user> prompt, do

user> (def server (start-gowherene))
... elided ...
#'user/server

And then check that the backend is up with curl:

curl -X GET 'http://localhost:3000/parse/?url=http://thesmartlocal.com/read/restaurants-with-no-gst' | jq

Stopping the backend

user> (.stop server)

Starting the figwheel-main dev server (frontend)

Do C-c M-J and when prompted, enter figwheel-main. When asked for build, enter dev

A browser tab should open, pointing to http://localhost:9500.

Production/deployment flow

To build for production

make

This should build both the backend and frontend.

Building in docker manually

DOCKER_BUILDKIT=1 docker build -t test .

Testing out the backend

GOWHERENE_DEBUG=1 java -cp target/gowherene.jar clojure.main -m gowherene.core

The above should start a server on port 3000.

With docker, do

docker run --rm --publish 3000:3000 --env PORT=3000 --env GOOGLE_API_TOKEN=<token> --env GOWHERENE_DEBUG=1 -it test

To query it,

curl -vv -X GET 'http://localhost:3000/parse/?url=http://thesmartlocal.com/read/restaurants-with-no-gst' | jq

Deploying backend

Push to master, render.com will pick it up from GitHub and deploy it.

Deploying frontend

Go to netlify, drag and drop target/dist to upload.

Backend environment variables

In gowherene, I am expecting the following environment variables to be in place.

key value
:google-api-token API token for Google Maps geocoding API
:port The port to run the server at (defaults to 3000)
:gowherene-debug Set to true to prevent auto redirecting to HTTPS on port 443

For development, I use a .lein-env file in the project directory, which looks like

{:google-api-token "xxx"
 :gowherene-debug true}

.lein-env works even without using leiningen because environ looks for that file

License

Copyright © 2022 ackerleytng