-
#git
#typescript
#middleware
#refactoring
#express
#mongodb
▸TL;DR
- Story 2382 lived on an old branch, now 1000+ changes behind because of our React Native JSI migration.
- 16 merge conflicts, mostly
gitignore and yarn.lock, resolved by accepting incoming changes that kept types intact.
- A hardcoded 404 in
app.ts surfaced during what should have been a README change.
getDecodedJotToken existed in other services but was missing from this branch — redundancy from divergent merges.
- Functions that never call a service aren’t service methods; moved them to shared utilities.
Read it →
-
#next-js
#typescript
#webpack
#esmodules
#config
#debugging
#monorepo
▸TL;DR
- The admin app failed on load parsing an
index.ts from a shared library — ES module vs CommonJS export syntax.
yarn type check passed, which ruled out the TypeScript config and pointed at bundling instead.
- The fix was adding the shared library to
transpilePackages in next.config.js.
- Verified through a real staging deploy and app tests on both Android and iOS.
Read it →
-
#railway
#remix
#vite
#docker
#gitlab
#ci
#environment
#deployment
▸TL;DR
- The Remix app 500’d on Railway with a hydration error and an undefined URL variable.
VITE_SERVER_PROXY_URL was duplicating protocol and port, and import.meta wasn’t pulling the expected values.
- SSH’d into the Railway container to test connectivity, which confirmed the network was fine.
- The real answer: Vite bakes client env vars at build time, so setting them at runtime does nothing.
- They have to be
ARG/ENV in the Dockerfile and declared in .gitlab-ci.yml to reach the build.
Read it →
-
#react-native
#theming
#darkmode
#ios
#android
#bugfix
#debugging
▸TL;DR
- Dark mode contrast broke in the date picker’s month selector on iOS after upgrading 5.02 to 5.13.
- Android inherits system text colour automatically; iOS needs it assigned explicitly, and ours wasn’t.
- Separately, logging out caused a UI flicker as the theme reverted to default blue mid-transition.
- Cause: a successful logout resets state booleans and takes the theme palette to undefined with them.
- Fixed by hardcoding the onboarding screens’ theme so transitions have something stable to land on.
Read it →
-
#react-native
#ios
#lottie
#animation
#reanimated
#bugfix
#debugging
▸TL;DR
- Animated icons rendered small and at the wrong angle on iOS only; Android was perfect.
- Ruled out the tooltip container, the Reanimated wrapper, and the
style prop one at a time.
- The culprit was
transform: rotation values apply twice on iOS, so 24 degrees renders as 48.
- Using
LottieView directly fixed the animation; a scale transform and resizeMode fixed the sizing.
- It’s a workaround, not a fix. A proper repro for the Lottie team is still owed.
Read it →
-
#android
#ios
#hotspot
#connectivity
#mobile
#how-to
▸TL;DR
- Wrote hotspot instructions for my Sterling Mill teammates on both platforms.
- iOS is uniform: Settings, Personal Hotspot, set a password, allow others to join.
- Android varies by manufacturer, so the guide has to describe the shape of the menus rather than exact taps.
- Both platforms signal an active hotspot with a colour change in the status bar.
- Recording screen and voice while doing it, then cleaning up after, handled the device variation well.
Read it →
-
#deployment
#docker
#remix
#go
#postgres
#railway
▸TL;DR
- Deployed the site to Railway and got a 500 plus a hydration mismatch at
angus.ryer.io.
- The hydration error was downstream of the real problem:
VITE_SERVER_PROXY_URL was undefined.
- Railway wasn’t interpolating a placeholder like
$server_port, so the variable arrived as a literal.
- The server was running fine the whole time, which is what made this confusing.
Read it →
-
#auth0
#react-native
#debugging
#mobile
#backend
#ios
▸TL;DR
- A 404 “cohort not found” from the surveys endpoint traced back to a cohort that genuinely doesn’t exist.
- The client was holding a stale Auth0 token that logout never cleared.
- Failing devices don’t sort by iOS version: 15.7 worked, 16.7.11 hung, 18.5 was fine.
- Auth0 logs show no user ID on failed attempts, so it’s breaking early in the exchange.
- Prime suspects are our old react-native-auth0 (2.17.4) against RN 0.80, and leftover refresh token rotation settings.
Read it →
-
#react-native
#touch-events
#modals
#event-driven-architecture
#ui-performance
▸TL;DR
- Layered views capture touches before they reach the view underneath, and modals sit outside React’s hierarchy entirely.
- Putting modals inside the hierarchy to get context access caused hierarchy-wide re-renders and unacceptable performance.
- We moved to an event-driven architecture with a single unified context, passing data imperatively.
- This year extends the same model to carry both program and user data into cards that each launch their own modal.
Read it →
-
#auth0
#rate-limiting
#api-integration
#dashboard-development
#authentication
▸TL;DR
- Auth0 caps queries at 4096 characters and roughly two requests per second.
- Direct user retrieval died at a few dozen users.
- Querying by role instead got us to 60-70 before data reassembly became the bottleneck.
- A rate-limiting wrapper that queues and deduplicates calls handles a couple of hundred users, slowly.
- It works for our current volume and will not survive growth.
Read it →