Three dependency decisions came out of one week. A file-based router had to go because it no longer coexists with the navigator already in the project. An SDK version scare turned out to be an outdated app on my own phone. And a command flag became a reflex I stopped reading, which is the only part that still worries me.
Indie DevReact NativeExpoThe tab that broke the launch
LittleStory turns a photo, a few seconds of your own voice and one sentence into an illustrated bedtime story, and I was halfway through adding a second tab to the shelf screen when the project stopped launching at all. I had reached for a file-based router because it looked tidier than the stack I already had.
Then nothing would boot: As of SDK 56, expo-router is no longer compatible with react-navigation. The project already navigated with react-navigation, and the two could not share a home. Uninstall the router, keep the stack, clear `node_modules` — three minutes of work, preceded by an hour of reading.
The version rumour that was just a stale phone
For most of a week the forums insisted Expo Go only supported SDK 54 while my project sat on 57. I read threads, changed nothing, and lost an evening to a number someone had typed. The project page lists 57 as current, and the real answer was duller than any thread: the Expo Go on my phone had never been updated. One tap in the app store settled a question I had spent hours treating as an architecture problem.
What I keep from it is smaller than a lesson. Check the tool in your hand before you redesign around a version you only ever read about.
The flag I stopped reading
Every install and uninstall in that stretch ended the same way — a peer-dependency flag appended to the command. On its own it reads like a warning: force the resolution, ignore the graph that could not be untangled. Split across two ecosystems that disagree about how versions should work, it is closer to a receipt.
By the end I typed it without looking, and that is the part worth admitting. A flag you stop reading is a flag that will one day hide the single conflict that actually mattered.
What gets reinstated once there is a real build
What stayed is short: the image picker, and the renderer that draws the story icons, both because the sandbox already ships them. What left is the honest list — audio, camera and on-device storage all came out, replaced by a demo and a memory map that forgets everything the moment the app closes.
The deletions were not waste. They became the checklist for the first real build: real recording, camera, storage that survives a restart, sign-in. Everything written after that week runs against a stack I can actually explain.