DeerCast
Prep. Predict. Pursue

Een native jachtapp — geen website met een dunne wrapper. Jagers openen iOS of Android in het donker, zien de gratis whitetailvoorspelling van vandaag voor hun pin, en beslissen of 06:40 of 16:10 het uur is om te zitten.

Wat we live zetten: native iOS (App Store) en native Android (Play Store). Same Node.js API. PostgreSQL voor accounts, pins, kaarten en receipts. MongoDB voor de uur-voor-uur-voorspellingsdocumenten en weather-ingest. Geen Super Admin-webconsole op dit product — de telefoon is het product.

iOS Android PostgreSQL · MongoDB
Whitetailbok in een Midwest-food plot bij dageraad, hout en een ladderstand aan de rand
07:10 Prime
NW 8 mph
Offline cache
Cedar Ridge, Iowa · CR-WEST pin
Hout · food plot · stand — het gebied waarvoor de voorspelling wordt gescoord
iOS · Android
iOS Native · App Store
Android Native · Play Store
PostgreSQL Users, pins, maps, IAP
MongoDB Hourly forecast documents

Mobile only. iOS en Android.

Beide stores krijgen dezelfde Node.js API. Er is geen staff-webapp in dit traject. Als het niet werkt met handschoenen, één streepje LTE en een batterij om 5 uur ’s ochtends, gaat het niet live.

iOS · App Store

Native Swift-app: de gratis voorspelling van vandaag, opgeslagen jachtpins, kaarten, windcheck en track. Achtergrondlocatie alleen als de jager dat voor een sit aanzet. Storelisting: DeerCast — Prep. Predict. Pursue.

App Store

Android · Play Store

Native Kotlin-app met dezelfde voorspelling, kaartobjecten en trackflow. Offline kaartedits schrijven lokaal, daarna sync als de ridge weer signaal heeft — hetzelfde contract als iOS.

Play Store

Een weerapp is geen jachtplan.

Voor deze bouw stapelde een jager met twee vrije dagen een nationaal weericoon, een maankalender-screenshot en een kaartapp die het bronstvenster niet kende. “Koud en bewolkt” is geen uur. Van 05:30–11:00 zitten omdat het icoon er goed uitzag, verspilde de enige doordeweekse dag die ze hadden.

  • Geen uuroplossingGenerieke voorspellingen zeiden “good morning.” Ze zeiden niet 07:10–08:40 op this ridge na 0.4" nachtregen.
  • Maps lived in another appWaypoints, wind en perceelgrenzen zaten niet naast de bewegingsscore. Van app wisselen in een stand is hoe telefoons vallen.
  • Geen bergingspadEen treffer bij laatste licht betekende een forumthread, geen gestructureerde track op dezelfde telefoon die de sit had ingeroepen.
Whitetail at a field edge at last light

Cole H. · Cedar Ridge, Iowa · pin CR-WEST

  1. 21:12 Mon — Opent de iPhone in de keuken. Gratis vandaag + morgen voor CR-WEST. Dinsdag 07:00–08:30 getagd Prime na nachtregen en een dalende barometer. Hij zet een sit-alarm. Niets om te printen.
  2. 05:48 Tue — Loopt binnen op Android (werktelefoon). Voorspelling nog in de on-device cache — ridge heeft geen LTE. Windcheck: NW 8. Hij houdt de west-side pin; east-side food plot zou een swirl zijn.
  3. 07:22 — Bewegingsvenster waarvoor hij zat. Twee hinden, daarna een volwassen bok aan de veldrand. Het uur matchte wat MongoDB de avond ervoor scoorde, geen generiek “cloudy and cool.”
  4. 16:40 — Optionele avondsit is Slow. Hij verbrandt de tweede vakantiedag niet. Track blijft ongebruikt. Dat is nog steeds een win.

Hour-by-hour movement — voor die pin

De engine scoort elk uur op lokale temperatuur, wind, barometertrend, bewolking, neerslag, maanvoedingsvensters en seizoen (pre-rut / rut / laat). De voorspelling van vandaag is gratis. Langere horizonten zitten achter IAP, net als in de stores.

Today · Cedar Ridge

Whitetail forecast

CR-WEST · free day · cached

05:00
Slow
06:00
Bouwen
07:00
Prime
08:00
Prime
09:00
Good
10:00
Slow

NW 8 mph · 34°F · baro falling · moon 28%

Jager checkt een telefoon vanuit een boomstand bij eerste licht
On stand Voorspelling al op het apparaat

Wat de jager echt doet in de app

01 · Predict

Hour-by-hour forecast

Voorheen

Een 12-uurs weerblob. De hele ochtend zitten “just in case.”

Daarna

Elk uur heeft een score voor die pin. Cole zit 07:00–08:30 en vertrekt.

02 · Weather

Weer op de jachtpin

Voorheen

Telefoonweer toonde Des Moines of de county seat — niet de farm 40 minuten verderop.

Daarna

Temp, wind, barometer, regen en maan worden gescoord voor de opgeslagen pin (CR-WEST), niet de dichtstbijzijnde stad.

03 · Map

Waypoints, parcels, wind, plots

Voorheen

Jachtplan in de ene app, kaart in een andere, wind in een derde.

Daarna

Pins, food plots, windcheck, radar en gewashistorie zitten in dezelfde native kaart.

04 · Track

Hit location → recovery

Voorheen

Raad het bloedspoor uit een groepsapp.

Daarna

Markeer de treffer op een anatomisch model; wait/search-begeleiding zit op dezelfde telefoon.

05 · Offline

Ridge zonder streepjes

Voorheen

Spinner. Daarna een screenshot van gisteravond.

Daarna

Laatste voorspelling + kaartobjecten cachen op het device. Sync als LTE terug is.

06 · Push

Window alerts

Voorheen

Ze herinnerden zich het checken bij de lunch. Het venster was 07:00.

Daarna

Optionele push als het Prime-uur van morgen op een opgeslagen pin landt.

Jager plant een sit met een telefoon en een papieren kaart bij dageraad

Scout vanaf de tailgate. Bergen na het schot.

Native kaartlagen: perceelinformatie, jachtgrond, eigen waypoints, windcheck, food plots, live Doppler, virtuele regenmeters, luchtfoto en gewashistorie. Offline edits staan lokaal in de wachtrij zodat een jager een pin kan zetten zonder bereik.

Track is een aparte flow: tik de treffer op het model, log tijd en weer dat al op de pin staat, volg daarna wait-vs-search-begeleiding. Sessiedocumenten landen in MongoDB; de jageridentiteit blijft in PostgreSQL.

PostgreSQL voor de jager. MongoDB voor de uren.

Twee stores met opzet. Relationele data die niet mag drift (wie betaalde, welke pin, welk perceel) leeft in Postgres. High-write, nested, in tijdbakken gezet weer en scores leven in MongoDB zodat een uurdokument kan worden vervangen zonder een update van 24 kolommen.

PostgreSQL

Bron van waarheid voor identiteit en jachtassets. Node.js praat ermee via een connection pool. iOS/Android openen de database nooit — alleen de API.

  • users / devicesApple- en Google-accountkoppelingen, pushtokens, laatste appversie.
  • subscriptions / receiptsApp Store- en Play-IAP, Elite / Pro / Unlimited-entitlements, trialvensters.
  • hunt_locationsBenoemde pins (CR-WEST), lat/lng, tijdzone — de sleutel waarop de forecast-job joint.
  • waypoints, food_plots, parcel_savesGestructureerde kaartobjecten met hunter_id-foreign keys.

MongoDB

Document store voor alles wat binnenkomt als geneste uur-array of radarblob. Geïndexeerd op locationId + date.

  • forecast_daysOne document per pin per civil day: 24 hour scores, wind, temp, baro, moon, rut phase.
  • weather_ingestRuwe vendor/NWS-observaties die de scorer consumeerde — bewaard voor audit als een jager zegt “this hour was wrong.”
  • radar_frames / rain_gaugesKortlevende tiles die de map overlay leest.
  • track_sessions / community_postsTrefferdiagrammen, foto’s, feeditems — schema varieert; Postgres bewaart alleen de owner id.
MongoDB · forecast_days · CR-WEST · 2026-11-18 Scored
{
  "locationId": "loc_cr_west",   // FK in PostgreSQL hunt_locations
  "date": "2026-11-18",
  "hours": [
    { "h": 7, "score": 92, "label": "Prime", "wind": "NW 8", "tempF": 34, "baro": "falling" },
    { "h": 8, "score": 86, "label": "Prime", "wind": "NW 8", "tempF": 35, "baro": "falling" }
  ],
  "moonPct": 28,
  "season": "rut",
  "precipInOvernight": 0.41,
  "engine": "v3.4"
}
MongoDB document locationId is een PostgreSQL hunt_locations-rij

Van weather-ingest naar een Prime-uur op de telefoon

01

Ingest

Node.js-workers halen lokaal weer en maan voor elke actieve pin in PostgreSQL. Ruwe frames landen in MongoDB.

02

Score

De bewegingsengine schrijft een 24-uursdocument. Prime / Good / Slow wordt per uur opgeslagen, niet als dagelijkse slogan.

03

Sync

iOS en Android GET de dag voor hun pins. Vandaag is gratis. Entitlement voor 14-daags bereik wordt in Postgres gecontroleerd.

04

Sit

Op de ridge leest de telefoon de cache. Optionele push is al afgegaan als het Prime-uur van morgen matchte met een opgeslagen pin.

Native phones. Postgres + MongoDB behind Node.js.

Deze case study is alleen mobile. Native iOS en Android praten REST (en een lichte sync-kanaal) naar een Node.js API. PostgreSQL houdt jagers, devices, IAP-bonnen, pins en kaartgeometrie. MongoDB houdt voorspellingsdocumenten, weerinname, radar, tracksessies en de communityfeed.

Stores zijn niet inwisselbaar. Je stopt geen 24 geneste uurobjecten in een Postgres-rij voor elke pin elke nacht, en je stopt geen IAP-entitlements in een Mongo-document dat een jager kan forken.

iOS native Android native Node.js API PostgreSQL MongoDB Offline cache
iOS & Android

Native voorspelling, kaarten, track, push, offline wachtrij. Hetzelfde API-contract in beide stores.

Node.js API

Auth, entitlements, forecast read, map CRUD, weather jobs, push fan-out.

PostgreSQL

Users, devices, App Store / Play receipts, hunt pins, waypoints, food plots, parcels.

MongoDB

Hour-by-hour forecast documents, weather ingest, radar, track sessions, feed posts.

Wat veranderde after go-live

Hours, not slogans

Jagers plannen rond Prime-uren op een benoemde pin. Vakantiedagen stoppen “van donker tot 11 zitten omdat AccuWeather cloudy zei.”

Eén app in de stand

Voorspelling, wind, percelen en track delen een native schil. Geen shuffle van drie apps met handschoenen aan.

Data die je kunt auditen

Als een dinsdagscores er verkeerd uitziet, bestaan weather_ingest in MongoDB en de pin in PostgreSQL nog. Het model kan opnieuw getraind worden; het receipt kun je niet raden.

Need a forecast-class mobile app?

We leveren native iOS en Android tegen een Node.js API, met PostgreSQL voor accounts en MongoDB voor tijdreeksdocumenten — dezelfde split als op DeerCast.