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 StoreEen 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.
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.
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 StoreNative 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 StoreVoor 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.
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
CR-WEST · free day · cached
NW 8 mph · 34°F · baro falling · moon 28%
Een 12-uurs weerblob. De hele ochtend zitten “just in case.”
Elk uur heeft een score voor die pin. Cole zit 07:00–08:30 en vertrekt.
Telefoonweer toonde Des Moines of de county seat — niet de farm 40 minuten verderop.
Temp, wind, barometer, regen en maan worden gescoord voor de opgeslagen pin (CR-WEST), niet de dichtstbijzijnde stad.
Jachtplan in de ene app, kaart in een andere, wind in een derde.
Pins, food plots, windcheck, radar en gewashistorie zitten in dezelfde native kaart.
Raad het bloedspoor uit een groepsapp.
Markeer de treffer op een anatomisch model; wait/search-begeleiding zit op dezelfde telefoon.
Spinner. Daarna een screenshot van gisteravond.
Laatste voorspelling + kaartobjecten cachen op het device. Sync als LTE terug is.
Ze herinnerden zich het checken bij de lunch. Het venster was 07:00.
Optionele push als het Prime-uur van morgen op een opgeslagen pin landt.
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.
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.
Bron van waarheid voor identiteit en jachtassets. Node.js praat ermee via een connection pool. iOS/Android openen de database nooit — alleen de API.
Document store voor alles wat binnenkomt als geneste uur-array of radarblob. Geïndexeerd op locationId + date.
{
"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"
}
Node.js-workers halen lokaal weer en maan voor elke actieve pin in PostgreSQL. Ruwe frames landen in MongoDB.
De bewegingsengine schrijft een 24-uursdocument. Prime / Good / Slow wordt per uur opgeslagen, niet als dagelijkse slogan.
iOS en Android GET de dag voor hun pins. Vandaag is gratis. Entitlement voor 14-daags bereik wordt in Postgres gecontroleerd.
Op de ridge leest de telefoon de cache. Optionele push is al afgegaan als het Prime-uur van morgen matchte met een opgeslagen pin.
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.
Native voorspelling, kaarten, track, push, offline wachtrij. Hetzelfde API-contract in beide stores.
Auth, entitlements, forecast read, map CRUD, weather jobs, push fan-out.
Users, devices, App Store / Play receipts, hunt pins, waypoints, food plots, parcels.
Hour-by-hour forecast documents, weather ingest, radar, track sessions, feed posts.
Jagers plannen rond Prime-uren op een benoemde pin. Vakantiedagen stoppen “van donker tot 11 zitten omdat AccuWeather cloudy zei.”
Voorspelling, wind, percelen en track delen een native schil. Geen shuffle van drie apps met handschoenen aan.
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.
We leveren native iOS en Android tegen een Node.js API, met PostgreSQL voor accounts en MongoDB voor tijdreeksdocumenten — dezelfde split als op DeerCast.