The cloud portion of Nidus
Find a file
2026-01-26 21:11:31 +00:00
api Add more log info on login failure 2026-01-26 20:41:21 +00:00
arcgis-go@09fda12abb Bunch of work around assigning reports to districts 2026-01-22 03:27:32 +00:00
auth Add command to hash password directly 2026-01-26 18:42:30 +00:00
background Add ability to delay text message sending 2026-01-26 16:10:30 +00:00
cmd Add command to hash password directly 2026-01-26 18:42:30 +00:00
comms Make username unique, make is_subscribed nullable 2026-01-26 21:11:31 +00:00
config Begin process of getting text responses from an LLM. 2026-01-26 20:30:06 +00:00
db Make username unique, make is_subscribed nullable 2026-01-26 21:11:31 +00:00
debug Begin work on debugging user behavior in early setup 2026-01-06 14:46:31 +00:00
go-geojson2h3@c2ff1a96ab Add mocks for data entry 2025-12-10 17:06:27 +00:00
h3utils Finish green pool report submission 2026-01-09 19:43:19 +00:00
htmlpage Add map and photo upload to nuisance report page 2026-01-24 19:55:09 +00:00
label-studio WIP migration of API from fieldseeker-sync 2025-12-16 16:37:53 +00:00
llm Begin process of getting text responses from an LLM. 2026-01-26 20:30:06 +00:00
minio WIP migration of API from fieldseeker-sync 2025-12-16 16:37:53 +00:00
notification Rip apart several new packages for inter-dependence 2026-01-07 16:07:51 +00:00
platform Make username unique, make is_subscribed nullable 2026-01-26 21:11:31 +00:00
public-report Redirect root mock to additional mocks 2026-01-26 16:11:00 +00:00
sync Remove some user session logs that we don't need 2026-01-25 21:18:39 +00:00
tools Begin process of getting text responses from an LLM. 2026-01-26 20:30:06 +00:00
userfile Bunch of work around assigning reports to districts 2026-01-22 03:27:32 +00:00
.air.toml Shorten the time waiting for air to kill my webserver 2025-11-07 08:46:26 +00:00
.gitattributes Add a basic main page with login 2025-11-03 22:13:19 +00:00
.gitignore Ignore air's temp building directory 2025-11-05 17:17:21 +00:00
.gitmodules Remove bob submodule, add arcgis.user 2026-01-15 19:20:39 +00:00
default.nix Update vendor hash for recent vendor changes 2026-01-26 20:51:07 +00:00
flake.lock Move to nixos pkg 25.11 base 2026-01-06 14:27:19 +00:00
flake.nix Move to nixos pkg 25.11 base 2026-01-06 14:27:19 +00:00
go.mod Begin process of getting text responses from an LLM. 2026-01-26 20:30:06 +00:00
go.sum Begin process of getting text responses from an LLM. 2026-01-26 20:30:06 +00:00
lefthook.yml Attempt to check if I have an SSH identity before committing 2026-01-23 20:37:55 +00:00
LICENSE Initial commit 2025-11-03 05:12:02 -07:00
main.go Begin process of getting text responses from an LLM. 2026-01-26 20:30:06 +00:00
query.go Add missing query source file 2025-11-24 18:09:28 +00:00
README.md fix up instructions on district import 2026-01-22 04:50:20 +00:00
start-air.sh Read secrets when running air 2026-01-06 14:46:54 +00:00

Nidus Sync

This is the software that powers Nidus Cloud Sync.

Building from source

First, you'll need Nix.

Then:

nix develop
go build .

Running

You'll need a number of environment variables for configuring things;

  • ARCGIS_CLIENT_ID - The client ID for ArcGIS oauth, configured with esri.
  • ARCGIS_CLIENT_SECRET - The client secret for ArcGIS oauth, configured with esri.
  • BASE_URL - The URL the site is hosted at, used for forming callback URLs. Should be complete like 'https://foo.bar'
  • BIND - The address and port to bind to. Use ':9001' for 'any address, port 9001'
  • ENVIRONMENT - either 'PRODUCTION' or 'DEVELOPMENT'. It's used to set things like oauth token length.
  • MAPBOX_TOKEN - The token to use with mapbox which is important for rendering maps.
  • POSTGRES_DSN - The DSN for connecting to the postgres database.
  • FIELDSEEKER_SCHEMA_DIRECTORY - The directory to write fieldseeker schema files for debugging.
  • USER_FILES_DIRECTORY - The directory for writing uploaded user data files (audio, images).
> BASE_URL=https://sync.nidus.cloud ARCGIS_CLIENT_ID=foo ARCGIS_CLIENT_SECRET=bar POSTGRES_DSN='postgresql://?host=/var/run/postgresql&dbname=nidus-sync' ./nidus-sync

Districts

There's a table containing district information in the database, import.district. It was created with:

psql
CREATE SCHEMA import;
shp2pgsql -s 3857 -c -D -I CA_districts.shp import.district | psql -d nidus-sync
psql
ALTER TABLE import.district ADD COLUMN geom_4326 geometry(MultiPolygon,4326) GENERATED ALWAYS AS (ST_Transform(geom, 4326)) STORED;

Hacking

air

This project uses air for fast compile-and-test loops. You can run it with:

> BASE_URL=https://sync.nidus.cloud ARCGIS_CLIENT_ID=foo ARCGIS_CLIENT_SECRET=bar POSTGRES_DSN='postgresql://?host=/var/run/postgresql&dbname=nidus-sync' air

bob

This uses the bob query framework. You can regenerate the models for bob with:

PSQL_DSN="postgresql://dbname?host=/var/run/postgresql&sslmode=disable" go run github.com/stephenafamo/bob/gen/bobgen-psql@latest"
PSQL_DSN="postgresql://?host=/var/run/postgresql&sslmode=disable&dbname=nidus-sync" go run github.com/stephenafamo/bob/gen/bobgen-psql@latest

This will generate a bunch of files. They're already committed, you only need this if you change the database schema in some way.

goose

This uses goose. You can use the goose command line to check status and make changes

> cd migrations
> GOOSE_DRIVER=postgres GOOSE_DBSTRING="dbname=nidus-sync sslmode=disable" goose status
> GOOSE_DRIVER=postgres GOOSE_DBSTRING="dbname=nidus-sync sslmode=disable" goose down
> GOOSE_DRIVER=postgres GOOSE_DBSTRING="dbname=nidus-sync sslmode=disable" goose up