seubert-claims/ondeck/SERVER.md
lorentz 8aa20ea751 feat: sync contacts from AMS 360 AFW_PolContact into ClientContact
- Add source, title, mobilePhone fields to ClientContact schema
- Add composite unique constraint for dedup (clientId, name, label, source)
- Add fetchAfwContacts() query with dedup by (CustId, Name, Responsibility)
- Add syncContacts() phase to sync engine with retry logic
- Update contacts UI to show title, mobile phone, AMS badge
- Disable edit/delete on AMS-synced contacts (source='ams')
2026-04-08 02:08:27 +00:00

941 B

Horizon Dev Server

How it runs

The app runs as a systemd service (horizon.service) and will automatically start on boot and restart on crash.

Managing the server

systemctl start horizon      # start
systemctl stop horizon       # stop
systemctl restart horizon    # restart
systemctl status horizon     # check status

Logs

tail -f /var/log/horizon.log

Details

  • Port: 3000 (proxied via Pangolin/Nginx to https://horizon.seubert.cloud)
  • Working directory: /opt/projects/OnDeck/ondeck
  • Mode: npm run dev (Next.js with Turbopack)
  • Service file: /etc/systemd/system/horizon.service

After code changes

Changes hot-reload automatically. If the server gets into a bad state:

systemctl restart horizon

After schema changes

Run these before restarting:

cd /opt/projects/OnDeck/ondeck
npx prisma db push
npx prisma generate
systemctl restart horizon