How I Set Up the Codename Cosy Reader Project

Before writing a single line of app code, I spent time on the foundation.

The stack: React Native with Expo, TypeScript, Expo Router for navigation, and expo-sqlite for local storage. The database choice matters more than it might seem — codename Cosy Reader has a relational data model (blogs contain posts, posts have reading states, reading states link to bookmarks) and a key-value store would have made that messy fast.

I also set up i18n from day one. Every user-visible string goes through a translation key. No hardcoded text anywhere in the codebase. This is cheap to do at the start and expensive to retrofit later.

Five foundation files before any screen code:

The TypeScript types. The database schema. The i18n locale file. The theme constants. The ESLint and Prettier config.

Then I ran npx expo start, opened Expo Go on my Nothing Phone 3a, scanned the QR code, and saw “Cosy Reader is alive.” on the screen.

That was Stage 1 done.

The packages did not all install cleanly the first time. There were peer dependency conflicts, missing modules, and files invisible in Finder because they start with a dot. All fixable. None of it dramatic.

The honest lesson: the tooling is powerful and the error messages are terrible. Push through. It works.

Leave a comment