# TODO

## App

- [ ] Display `last_sale_date` attribute from `owners.rds` somewhere in the UI
      so users know how current the ownership data is

## Data

- [ ] Verify SCPA Public.xlsx column structure is stable across downloads
- [ ] Delete app from shinyapps.io (account: rob-wiederstein, appId: 14173710)
- [x] Add cron job to run `update_owners.R` weekly inside the rstudio container:
      Runs every Sunday at 11pm via crontab; restarts standrews_shiny after; logs to ~/standrews_update.log
      Tested end-to-end 2026-03-09 — 388 owners written, options(timeout=300) required for 87.5 MB download

## Features

- [x] Download owner names and addresses for mailing labels
      - Two buttons: Download Filtered, Download All (388)
      - Uses SCPA mailing address fields directly (same data used for tax bills)

- [ ] Add RentCast active listings tab
      - Pull active listings via RentCast API (see veniceProp/sarco for prior work)
      - Spatially filter to St. Andrews subdivision boundaries (`data/plats/plats.shp`)
      - Display on map + table (similar to Owners tab)
      - Store API key as environment variable, not in code
      - Consider caching results (API has rate limits)

## Performance

- [ ] Optimize CI build time: create a pre-built base image with R packages
      already installed so renv restore is skipped on redeploy. Cold builds
      currently take ~10 minutes due to geo stack (sf, gdal) compilation.

## Deployment

- [x] Create Dockerfile, docker-compose.yml, .gitea/workflows/deploy.yaml
- [x] Push to Gitea — act_runner deploys on push to main
- [x] App live at apps.robwiederstein.org/stAndrews/

Notes:
- Gateway route is hardcoded in ~/docker/gateway/Caddyfile (import pattern failed)
- Volume mounts: only ./data and ./www — app code baked into image to avoid renv conflict
- act_runner registered at user level, not repo level
