<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Malik Chohra</title>
    <description>The latest articles on DEV Community by Malik Chohra (@malik_chohra).</description>
    <link>https://dev.to/malik_chohra</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1343661%2F5a5ed7f3-f672-4bd4-b592-b57036da4c95.jpg</url>
      <title>DEV Community: Malik Chohra</title>
      <link>https://dev.to/malik_chohra</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/malik_chohra"/>
    <language>en</language>
    <item>
      <title>How I wire Claude into my React Native workflow (skills, projects, Cowork)</title>
      <dc:creator>Malik Chohra</dc:creator>
      <pubDate>Wed, 13 May 2026 08:01:35 +0000</pubDate>
      <link>https://dev.to/malik_chohra/how-i-wire-claude-into-my-react-native-workflow-skills-projects-cowork-4pk3</link>
      <guid>https://dev.to/malik_chohra/how-i-wire-claude-into-my-react-native-workflow-skills-projects-cowork-4pk3</guid>
      <description>&lt;p&gt;Claude isn't a chat app anymore. It's a runtime. The interface is still text, but the architecture underneath is execution: load context, pick tools, call APIs, write files, schedule work. Most people are still typing at it like ChatGPT in 2023 and wondering why their workflow hasn't changed.&lt;/p&gt;

&lt;p&gt;The shift happened quietly, across four primitives. Each one shipped without much fanfare. Together they're what "advanced" means in 2026: not a longer prompt, but a better-wired one.&lt;/p&gt;

&lt;p&gt;This piece is the primer. The four things to understand before you can use Claude well.&lt;/p&gt;

&lt;h2&gt;
  
  
  The mental model
&lt;/h2&gt;

&lt;p&gt;The outdated framing: &lt;em&gt;Claude is good at writing, explaining, coding.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The 2026 framing: &lt;em&gt;Claude is a runtime that loads skills, scopes memory in projects, calls external systems through MCP, and executes multi-step work in Cowork.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Same model file, completely different surface. The question used to be "what can Claude do?" The question now is "what can I wire into Claude?"&lt;/p&gt;

&lt;p&gt;That reframe is the whole article. Everything below is the four primitives that make the reframe real.&lt;/p&gt;

&lt;h2&gt;
  
  
  1/ Skills (the tool layer)
&lt;/h2&gt;

&lt;p&gt;A skill is a folder with a &lt;code&gt;SKILL.md&lt;/code&gt; file. YAML frontmatter at the top with &lt;code&gt;name&lt;/code&gt; and &lt;code&gt;description&lt;/code&gt;. Markdown body underneath with the instructions Claude follows. That's the entire format.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6g6xzmdciesrrrkpi166.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6g6xzmdciesrrrkpi166.png" alt="SKILL.md folder structure diagram. Source: Anthropic documentation at docs.claude.com" width="800" height="584"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The mechanism is the part most people miss. The description is what Claude sees in its skill list before responding. The body only loads when the skill triggers. So you can have 50 skills sitting available and pay context cost on only the one that fires.&lt;/p&gt;

&lt;p&gt;This changes what you'd put in a skill. A skill isn't a system prompt by another name. It's a tool you teach Claude once and reach for whenever the task fits.&lt;/p&gt;

&lt;p&gt;Things skills are good at:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Domain procedures: how your team does code review, how your brand voice works, what your component library calls things&lt;/li&gt;
&lt;li&gt;Multi-step workflows: write article → format for Medium → cross-post to Dev.to → generate carousel&lt;/li&gt;
&lt;li&gt;Technical conventions: your API's auth quirks, your codebase's folder structure, your testing harness&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Two patterns I've seen work in production.&lt;/p&gt;

&lt;p&gt;A context skill holds your domain knowledge once. Other skills reference it. Don't repeat your brand voice in every generator. Keep it in a &lt;code&gt;*-context&lt;/code&gt; skill and have the generators read it.&lt;/p&gt;

&lt;p&gt;A generator skill does one job. It writes a thing, or transforms a thing, or validates a thing. Single-purpose, composable, chains cleanly.&lt;/p&gt;

&lt;p&gt;The mistake is making one giant skill that does everything. Anthropic's own open-source skills repo has separate &lt;code&gt;pdf&lt;/code&gt;, &lt;code&gt;docx&lt;/code&gt;, &lt;code&gt;xlsx&lt;/code&gt;, and &lt;code&gt;pptx&lt;/code&gt; skills, not one mega "documents" skill, for a reason. Generators that do too much fail in too many ways and get triggered by too many prompts.&lt;/p&gt;

&lt;p&gt;The other thing nobody tells you: the description &lt;em&gt;is&lt;/em&gt; the trigger. I spent two weeks getting one of my skills to fire when I asked for the right thing. The body was fine. The description was vague. Claude under-triggers skills by default, and Anthropic's own guidance is to be slightly &lt;em&gt;pushy&lt;/em&gt; in descriptions. Specific verbs, specific phrases, specific contexts.&lt;/p&gt;

&lt;p&gt;Custom skills are available on Pro, Max, Team, and Enterprise. You can create them directly in Claude.ai (Settings → Capabilities), via the API, or as folders in Claude Code.&lt;/p&gt;

&lt;h2&gt;
  
  
  2/ Projects (scoped memory)
&lt;/h2&gt;

&lt;p&gt;A Project is a workspace with its own files, instructions, and memory. Memory accumulated in one project doesn't bleed into another. Same Claude account, effectively different "instances" of context.&lt;/p&gt;

&lt;p&gt;Why it matters: chat memory was useful but contaminating. A single global memory pool meant Claude pulled context from a personal conversation into a work answer, or surfaced last week's product strategy when you asked about something unrelated. Project-scoped memory fixes that without forcing you to start cold every session.&lt;/p&gt;

&lt;p&gt;What to use it for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;One project per product or work stream, to keep the contexts clean&lt;/li&gt;
&lt;li&gt;Long-running threads where context compounds (research projects, ongoing client engagements, multi-week investigations)&lt;/li&gt;
&lt;li&gt;Anywhere you want Claude to remember but not leak&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The pattern: every project gets its own files (a PRD, a brand voice doc, a technical spec) and its own memory. The skills you've installed are still available across all projects, but the &lt;em&gt;context&lt;/em&gt; is scoped.&lt;/p&gt;

&lt;p&gt;A consequence worth noticing. If you're not using Projects, your default chat is becoming a leaky bucket. Memory accumulates. Some of it conflicts. After three months it's a soup. Projects are how you stop that.&lt;/p&gt;

&lt;h2&gt;
  
  
  3/ Connectors (the integration layer over MCP)
&lt;/h2&gt;

&lt;p&gt;Connectors are Model Context Protocol-based integrations that let Claude read from and write to external services. Google Drive, Gmail, Notion, GitHub, Slack, Linear, Asana, Jira, Stripe, Figma, Canva, HubSpot, Apple Health. 50+ in the directory as of early 2026, with new ones added weekly.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3sbfiojeioixw7lgbona.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3sbfiojeioixw7lgbona.png" alt="MCP architecture diagram. Source: modelcontextprotocol.io" width="680" height="1206"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Why they matter: pasting screenshots and copy-pasting JSON is the manual work AI was supposed to remove. Connectors remove it. Instead of "here's the email I got," it's "the email from Sarah yesterday." Claude pulls it. Instead of pasting an issue body, it's "the bug filed in expo_boilerplate." Claude pulls it.&lt;/p&gt;

&lt;p&gt;When to use them:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tools already in your daily workflow. Connectors only earn their place if they're already part of how you work.&lt;/li&gt;
&lt;li&gt;Workflows that span tools (calendar + email + Slack = daily briefing)&lt;/li&gt;
&lt;li&gt;Anywhere you find yourself screenshot-pasting more than twice in one session&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The custom MCP escape hatch (Pro plan and above): if your tool isn't in the directory, you can add any MCP server URL via Settings → Connectors → Add custom connector. Notion's hosted MCP at &lt;code&gt;https://mcp.notion.com/mcp&lt;/code&gt; is the canonical example. Anyone publishing an MCP server can be wired into Claude in 30 seconds.&lt;/p&gt;

&lt;p&gt;The trap is over-connecting. Each connector adds surface area for Claude to get confused. Multiple integrations claiming to handle "messages" or "tasks" leads to wrong-tool-picked failures. The honest take: pick three to five that match your real flow. Connect more only when you hit a specific gap.&lt;/p&gt;

&lt;h2&gt;
  
  
  4/ Cowork (the agentic execution layer)
&lt;/h2&gt;

&lt;p&gt;Cowork is the same agentic architecture as Claude Code, but for non-coding tasks, in the desktop app. (If you haven't installed Claude Code yet, the &lt;a href="https://aimeetcode.substack.com/p/claude-code-for-beginners-what-it" rel="noopener noreferrer"&gt;Claude Code for beginners guide&lt;/a&gt; on the Code Meet AI newsletter walks through the install and your first project.) It reads and writes local files, schedules recurring tasks, and uses connectors first, the browser second, and computer use (driving your screen) only as a last resort. Available on Pro, Max, Team, and Enterprise. Desktop only.&lt;/p&gt;

&lt;p&gt;This is where Claude shifts from assistant to colleague. You give it a goal, walk away, come back to a result. The desktop has to be awake while it runs. That's the catch.&lt;/p&gt;

&lt;p&gt;What Cowork is good at:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Repetitive multi-step work like file organization, daily briefings, weekly reviews&lt;/li&gt;
&lt;li&gt;Tasks that span tools and need orchestration (calendar + email + Slack synthesis)&lt;/li&gt;
&lt;li&gt;Work that's too boring to do reliably but too important to skip&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What it's not for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Time-sensitive tasks. Your desktop has to be open and awake.&lt;/li&gt;
&lt;li&gt;Sensitive data (financial, health, anything regulated). Prompt injection risk is real, and Cowork activity isn't covered by ZDR.&lt;/li&gt;
&lt;li&gt;Work where you want to think alongside Claude. That's chat. Cowork is delegation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The realest test: if you'd skip the task because it's boring, Cowork is the right tool. If you'd want to watch Claude do it step by step, chat is.&lt;/p&gt;

&lt;h2&gt;
  
  
  The multiplier: Dispatch + Computer Use
&lt;/h2&gt;

&lt;p&gt;Two extensions on Cowork worth knowing about, because together they're what makes the rest worth setting up.&lt;/p&gt;

&lt;p&gt;Computer Use lets Claude drive your screen. Clicking, typing, navigating apps that don't have connectors. Slower than a connector. More fragile. But it works for the long tail of tools that haven't published an MCP server. Research preview on Pro and Max.&lt;/p&gt;

&lt;p&gt;Dispatch lets you assign tasks from your mobile app to your desktop. You're on the train; you tell Claude on your phone to summarize three articles you drafted this week. By the time you're at your desk, the answer is in chat.&lt;/p&gt;

&lt;p&gt;Both are research previews as of May 2026. Both work. Use sparingly until they harden, but understand they exist. They're the difference between Claude as a desktop tool and Claude as something you can hand work to from anywhere.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this means for builders
&lt;/h2&gt;

&lt;p&gt;For mobile builders specifically, the implications are sharper than they look from the outside. The web AI dev community has been on this trajectory longer (Cursor, Claude Code in CLI, MCP servers for every database, custom skills for every framework). Mobile dev has stayed a step behind partly because the canonical workflows assume backend or web context.&lt;/p&gt;

&lt;p&gt;Skills, Projects, and Connectors don't care what stack you ship to. The runtime is platform-agnostic. The gain compounds the moment you treat Claude as something to wire, not something to type at.&lt;/p&gt;

&lt;p&gt;The honest version: most "I'm not getting much out of AI" complaints I hear from devs in 2026 trace to one of three things. They're still on the chat surface. They haven't built a single skill. Or they're treating connectors like a novelty. None of those are model problems. They're setup problems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where to start
&lt;/h2&gt;

&lt;p&gt;Pick one primitive, build something, ship it. Add the next one when the simpler setup hits a wall.&lt;/p&gt;

&lt;p&gt;For most people, the order is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;One Project per major work stream. Stop polluting the default chat.&lt;/li&gt;
&lt;li&gt;One custom skill for your domain context. Brand voice, codebase conventions, whatever your work depends on.&lt;/li&gt;
&lt;li&gt;Three connectors. The ones already in your daily flow. Not ten.&lt;/li&gt;
&lt;li&gt;One Cowork recurring task. A morning briefing is a good first one.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Stop there for a month. Notice what's still manual. Build the next thing for that.&lt;/p&gt;

&lt;p&gt;The advanced version of Claude isn't a longer prompt. It's the four primitives, wired into how you really work. You're writing code now. It just happens to look like English.&lt;/p&gt;




&lt;h2&gt;
  
  
  If you're shipping mobile-AI
&lt;/h2&gt;

&lt;p&gt;The four primitives apply to every stack, but the wiring for React Native and Expo is its own problem. Web AI dev has a year head start on patterns; mobile is still figuring out what a Claude Code memory bank looks like for a Metro bundler, what skills make sense for an Expo build pipeline, and which connectors actually plug into a mobile workflow.&lt;/p&gt;

&lt;p&gt;That's the gap &lt;strong&gt;AI Mobile Launcher&lt;/strong&gt; fills. It ships the U-AMOS memory system, RN-specific Claude Code rules, and the Skills folder structure pre-configured for Expo and the mobile stack, so you're not figuring out the wiring on a Tuesday night with a build failure on the line.&lt;/p&gt;

&lt;p&gt;The Lite version is free on GitHub. The full system with the rule packs, generators, and U-AMOS 2.0 memory bank is in the Starter tier.&lt;/p&gt;

&lt;p&gt;→ &lt;a href="https://aimobilelauncher.com" rel="noopener noreferrer"&gt;Get AI Mobile Launcher&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Malik Chohra · AI-first mobile engineer · &lt;a href="https://getwireai.com" rel="noopener noreferrer"&gt;WireAI&lt;/a&gt; · &lt;a href="https://aimobilelauncher.com" rel="noopener noreferrer"&gt;AI Mobile Launcher&lt;/a&gt; · &lt;a href="https://aimeetcode.substack.com" rel="noopener noreferrer"&gt;Code Meet AI newsletter&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>reactnative</category>
      <category>ai</category>
      <category>claudecode</category>
      <category>mobile</category>
    </item>
    <item>
      <title>From React to React Native: what web devs get wrong on day one</title>
      <dc:creator>Malik Chohra</dc:creator>
      <pubDate>Thu, 07 May 2026 19:46:01 +0000</pubDate>
      <link>https://dev.to/malik_chohra/from-react-to-react-native-what-web-devs-get-wrong-on-day-one-46i5</link>
      <guid>https://dev.to/malik_chohra/from-react-to-react-native-what-web-devs-get-wrong-on-day-one-46i5</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwrdm53yq1s7uos140fcp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwrdm53yq1s7uos140fcp.png" alt="From React to React Native: what web devs get wrong on day one" width="800" height="336"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I built three React Native apps before I really understood it.&lt;/p&gt;

&lt;p&gt;The first took me three weeks to ship something that should have taken three days. The second, I shipped fast by ignoring half the platform constraints and paying for it later. The third was the boilerplate I wish I'd had on day one.&lt;/p&gt;

&lt;p&gt;This was by 2019, when React Native was new, and I always thought that jumping from React Native to ReactJS for websites would be smooth. Actually, it was.&lt;/p&gt;

&lt;p&gt;Since then, i saw so many Web developers, they jump into mobile apps, and it is not the same. So much dependency to manage, just to think about the performance, it is a whole new topic, or to manage packages. Here, we are not talking about Native integration or creating native code from scratch. There is so many mistakes when it comes to that, and i will try to simplify life for you.&lt;/p&gt;

&lt;p&gt;If you're a React developer planning to build a mobile app, this is the piece I'd hand you on day zero. What actually transfers from the web? What absolutely doesn't. Where Expo fits in. What to learn first? What to skip. And, because most "React to React Native" guides are written like AI is still 2022, what shipping AI features inside a mobile app actually looks like.&lt;/p&gt;

&lt;h2&gt;
  
  
  "It's just React, right?"
&lt;/h2&gt;

&lt;p&gt;Yes, it's JSX. Yes, it's hooks. Yes, your component model carries over. That's about a third of what makes up "shipping a working app."&lt;/p&gt;

&lt;p&gt;The other things are layout, navigation, storage, build, debugging, and deployment, which are different enough that pretending they aren't is the single biggest reason web devs give up on RN in week two.&lt;/p&gt;

&lt;p&gt;So let me split it cleanly.&lt;/p&gt;

&lt;h2&gt;
  
  
  What transfers from React (the good news)
&lt;/h2&gt;

&lt;p&gt;If you've shipped React on the web, these all carry over more or less untouched:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;JSX and the component model.&lt;/strong&gt; Same mental model. &lt;code&gt;&amp;lt;MyComponent prop={value} /&amp;gt;&lt;/code&gt; is &lt;code&gt;&amp;lt;MyComponent prop={value} /&amp;gt;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hooks.&lt;/strong&gt; &lt;code&gt;useState&lt;/code&gt;, &lt;code&gt;useEffect&lt;/code&gt;, &lt;code&gt;useMemo&lt;/code&gt;, &lt;code&gt;useCallback&lt;/code&gt;, &lt;code&gt;useReducer&lt;/code&gt;, &lt;code&gt;useContext&lt;/code&gt;, custom hooks all work the same.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TypeScript.&lt;/strong&gt; Same setup, same &lt;code&gt;tsconfig.json&lt;/code&gt; (almost). Expo gives you a working TS template by default.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;State management.&lt;/strong&gt; Zustand, Redux, Jotai. All work in RN. TanStack Query works. (If you're choosing between them, I broke down the trade-offs in &lt;a href="https://medium.com/stackademic/redux-vs-zustand-vs-mobx-in-react-native-the-good-and-the-bad-for-each-one-ec4ce2341e0e" rel="noopener noreferrer"&gt;Redux vs Zustand vs MobX in React Native&lt;/a&gt;.)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Most utility libraries.&lt;/strong&gt; &lt;code&gt;zod&lt;/code&gt;, &lt;code&gt;date-fns&lt;/code&gt;, &lt;code&gt;lodash&lt;/code&gt;, &lt;code&gt;dayjs&lt;/code&gt;, &lt;code&gt;uuid&lt;/code&gt;, all fine. Anything with no DOM dependency.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Patterns.&lt;/strong&gt; Composition, lifting state up, container/presentational, render props if you're into that. All the same.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's the part that lulls you into thinking "this is going to be smooth."&lt;/p&gt;

&lt;h2&gt;
  
  
  What doesn't transfer (the painful part)
&lt;/h2&gt;

&lt;p&gt;Here's where week two starts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No DOM elements.&lt;/strong&gt; &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; doesn't exist. Neither does &lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;button&amp;gt;&lt;/code&gt;, or &lt;code&gt;&amp;lt;input&amp;gt;&lt;/code&gt;. You get &lt;code&gt;&amp;lt;View&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;Text&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;Pressable&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;TextInput&amp;gt;&lt;/code&gt;. And every piece of text on the screen has to be inside a &lt;code&gt;&amp;lt;Text&amp;gt;&lt;/code&gt; putting a string, directly in a &lt;code&gt;&amp;lt;View&amp;gt;&lt;/code&gt; crashes the app at runtime. And by the way, if you use lazy loading for screens, and you don't check that screen, the deployment will crash heavily, as the deployment pipeline is so different. Well, you can use Over The Air update (OTA), but…&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No CSS.&lt;/strong&gt; No stylesheets, no media queries, no cascading, no &lt;code&gt;:hover&lt;/code&gt; (there's no hover on mobile). You write style objects in JS, or you use a Tailwind equivalent like NativeWind, which I strongly recommend keeping you on familiar ground.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No React Router.&lt;/strong&gt; Use Expo Router. It's file-based, feels closest to Next.js's app router, and is now the default for new Expo projects.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No browser APIs.&lt;/strong&gt; No &lt;code&gt;localStorage&lt;/code&gt;, no &lt;code&gt;window&lt;/code&gt;, no &lt;code&gt;document&lt;/code&gt;. You'll use &lt;code&gt;AsyncStorage&lt;/code&gt; (or &lt;code&gt;MMKV&lt;/code&gt; for performance), and &lt;code&gt;react-native-reanimated&lt;/code&gt; for anything animated. There's no &lt;code&gt;&amp;lt;a href&amp;gt;&lt;/code&gt;. There's no scroll event the same way. There's no &lt;code&gt;getElementById&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Forms work differently.&lt;/strong&gt; &lt;code&gt;&amp;lt;TextInput&amp;gt;&lt;/code&gt; doesn't auto-handle the keyboard. You manage focus, dismissal, keyboard-avoiding behavior, autocorrect, and autocapitalize. Keyboard handling on mobile is a small engineering problem in itself.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Images load asynchronously.&lt;/strong&gt; You don't &lt;code&gt;&amp;lt;img src=...&amp;gt;&lt;/code&gt; and forget. You think about caching, placeholders, error states, and image sizes. &lt;code&gt;expo-image&lt;/code&gt; handles most of this.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Animations are different.&lt;/strong&gt; CSS transitions don't exist. Reanimated library is the standard, and it runs animations on the UI thread (separate from your JS), which is actually better than the web, but you have to learn worklets. The idea is we have JS and UI threads in React Native. Animation should run on UI threads to keep the app performance. (For high-performance graphics specifically, &lt;a href="https://medium.com/stackademic/rn-skia-a-better-option-for-high-performance-graphics-fad03da5883e" rel="noopener noreferrer"&gt;RN Skia&lt;/a&gt; is worth knowing too.)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Build and deploy aren't Vercel.&lt;/strong&gt; No &lt;code&gt;git push&lt;/code&gt; and you're live. You use EAS Build for cloud builds, EAS Submit to push to the App Store and Play Store, and you wait for app review. EAS Update lets you ship JS-only patches over the air without going through review again. That's the closest thing to "deploy on push."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Debugging is different.&lt;/strong&gt; Flipper is deprecated. React Native DevTools is the new standard, and it's actually decent now. But native crashes (the kind that surface as a stack trace from Java or Objective-C) require different muscle memory.&lt;/p&gt;

&lt;p&gt;That's the surface area you didn't know you didn't know.&lt;/p&gt;

&lt;h2&gt;
  
  
  Expo vs bare React Native
&lt;/h2&gt;

&lt;p&gt;This is the first real fork in the road.&lt;/p&gt;

&lt;p&gt;Bare React Native means you have a native iOS project and a native Android project sitting next to your JS code. You can install any native module, customize anything, and you'll probably spend Saturday afternoons fighting CocoaPods, Gradle, and Xcode signing certificates.&lt;/p&gt;

&lt;p&gt;Expo (managed) means you write JS only, install Expo-compatible native modules, and let EAS handle native builds in the cloud. You get OTA updates, a working dev client, and you're shipping to TestFlight in a day instead of a week.&lt;/p&gt;

&lt;p&gt;If you're a web developer starting out: use Expo. Don't believe people who tell you it's "for prototypes." It's not 2020 anymore. Expo's ecosystem covers nearly everything you'll actually need (camera, notifications, biometrics, in-app purchases, deep linking, file system). The workflow management in Expo is the best for RN right now.&lt;/p&gt;

&lt;p&gt;I tried the bare RN route on app two. I lost a weekend to an Xcode signing error that turned out to be a typo in &lt;code&gt;app.json&lt;/code&gt;. I went back to Expo for app three and have not looked back.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to learn first (the priority list)
&lt;/h2&gt;

&lt;p&gt;If you have one week to come up to speed before starting, here's the order:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Expo Router.&lt;/strong&gt; File-based routing, layouts, and dynamic routes. Read the &lt;a href="https://docs.expo.dev/router/introduction/" rel="noopener noreferrer"&gt;Expo Router docs&lt;/a&gt;, they're short.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;NativeWind.&lt;/strong&gt; Tailwind for RN. Lets you keep your CSS muscle memory and skip writing &lt;code&gt;StyleSheet.create({ ... })&lt;/code&gt; for every component.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The core RN primitives.&lt;/strong&gt; &lt;code&gt;View&lt;/code&gt;, &lt;code&gt;Text&lt;/code&gt;, &lt;code&gt;Pressable&lt;/code&gt;, &lt;code&gt;ScrollView&lt;/code&gt;, &lt;code&gt;FlatList&lt;/code&gt;, &lt;code&gt;TextInput&lt;/code&gt;, &lt;code&gt;Image&lt;/code&gt;. Know what each is for and when to use which.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AsyncStorage (or MMKV).&lt;/strong&gt; Your localStorage replacement. MMKV is faster but adds native code; AsyncStorage is fine for most cases.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reanimated basics.&lt;/strong&gt; &lt;code&gt;useSharedValue&lt;/code&gt;, &lt;code&gt;useAnimatedStyle&lt;/code&gt;, &lt;code&gt;withTiming&lt;/code&gt;, &lt;code&gt;withSpring&lt;/code&gt;. You don't need to master worklets on day one, but you do need this for any real interaction.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;EAS Build and EAS Update.&lt;/strong&gt; Your build and deploy story. Ten minutes of reading saves you hours.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That's enough to ship a real app. Everything else, learn when you need it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to avoid (the trap list)
&lt;/h2&gt;

&lt;p&gt;These are the things that cost me time. Don't repeat them.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Don't try to make React Router work.&lt;/strong&gt; Expo Router exists. Use it. I still use React Navigation for my projects, as I'm more familiar with. Expo Router now is king.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Don't write &lt;code&gt;StyleSheet.create&lt;/code&gt; from scratch&lt;/strong&gt; when NativeWind solves it for you. You'll be slower, your code will read worse, and you'll resist refactoring. You can have a design system library and use it. Faster and easier.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Don't disable Hermes.&lt;/strong&gt; It's the default RN engine now: faster startup, smaller bundle, better debugging. You shouldn't need to touch this.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Don't use &lt;code&gt;setInterval&lt;/code&gt; for animations.&lt;/strong&gt; Use Reanimated. The frame drops will tell you why.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Don't ignore the keyboard.&lt;/strong&gt; Test every screen with the keyboard open. &lt;code&gt;KeyboardAvoidingView&lt;/code&gt; is the minimum; &lt;code&gt;react-native-keyboard-controller&lt;/code&gt; is what I actually use in production now.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Don't ship without offline handling.&lt;/strong&gt; Phones lose signal in elevators, on planes, on the subway. Check &lt;code&gt;NetInfo&lt;/code&gt; and have a fallback. If you want a deeper pattern, I wrote about &lt;a href="https://medium.com/@malikchohra/offline-support-and-caching-in-expo-with-custom-queuing-70af28a18e44" rel="noopener noreferrer"&gt;offline support and caching in Expo with custom queuing&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Don't assume iOS and Android behave the same.&lt;/strong&gt; Safe-area insets, permissions UX, file system paths, system gestures, they diverge in places that matter. Test both.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Don't ship API keys in your app.&lt;/strong&gt; This is the single biggest mistake I see web devs make moving over. Your &lt;code&gt;.env&lt;/code&gt; ships in your bundle. Anyone can decompile it. You need a backend proxy for any third-party API call that requires a secret key. I wrote a longer piece on &lt;a href="https://medium.com/stackademic/secure-your-react-native-app-with-secure-storage-expo-edition-a899dbbe3b8f" rel="noopener noreferrer"&gt;secure storage patterns in Expo&lt;/a&gt; that covers what to do with the secrets you do need on-device.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last one matters more than ever now, because of the AI part.&lt;/p&gt;

&lt;h2&gt;
  
  
  The AI part nobody talks about
&lt;/h2&gt;

&lt;p&gt;If you're building a mobile app today and there's no AI feature on your roadmap, you're either underestimating where the market is or you have a very specific reason. Most web devs come into RN with an LLM feature already on the spec.&lt;/p&gt;

&lt;p&gt;Here's the honest version of what changes when you ship AI inside a mobile app.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Streaming LLM responses without dropping frames.&lt;/strong&gt; On the web, you stream tokens into a &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; and let the browser paint. On mobile, your JS thread renders into a &lt;code&gt;&amp;lt;Text&amp;gt;&lt;/code&gt;, and if you re-render too aggressively you drop frames. The pattern is to batch tokens before pushing them into React state, not to call &lt;code&gt;setState&lt;/code&gt; for every chunk that comes off the stream.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;API key management.&lt;/strong&gt; I said it above and I'll say it again, because this is where most first-AI-mobile-app projects ship something insecure. You cannot put your OpenAI / Anthropic / whoever-else API key in your app. It will be extracted within minutes if anyone cares. You need a backend proxy, even a tiny one. A Cloudflare Worker or a Vercel function fronting the AI provider, with rate limiting per device, is the minimum.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Generative UI on mobile.&lt;/strong&gt; This is the gap. On the web, &lt;a href="https://tambo.co/" rel="noopener noreferrer"&gt;Tambo&lt;/a&gt; and Vercel AI SDK UI let you have an LLM render React components on the fly. On mobile, there's nothing equivalent that's stable yet. (Aside: I'm building one, open source. More on that another time.)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;On-device inference is possible, barely.&lt;/strong&gt; &lt;code&gt;llama.rn&lt;/code&gt;, Core ML, MLKit can run small models locally for specific use cases (transcription, classification, simple chat). But for anything resembling Claude or GPT-4 quality, you're still calling an API. Plan for that.&lt;/p&gt;

&lt;p&gt;Here's a representative snippet, a streaming chat hook the way I'd write it for a mobile app, with the buffer pattern that keeps frames smooth:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// useStreamingChat.ts: pattern from the AI Mobile Launcher boilerplate&lt;/span&gt;
&lt;span class="c1"&gt;// Note: streaming fetch in RN needs expo/fetch (Expo SDK 52+) or a polyfill.&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;useRef&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;useCallback&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;fetch&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;expoFetch&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;expo/fetch&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;Message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;user&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;assistant&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;useStreamingChat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;apiUrl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setMessages&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Message&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;([]);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;bufferRef&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useRef&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;flushTimerRef&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useRef&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;NodeJS&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Timeout&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;flush&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useCallback&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;bufferRef&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;current&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;chunk&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;bufferRef&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;current&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;bufferRef&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;current&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nf"&gt;setMessages&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;prev&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;last&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;prev&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;prev&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
      &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;last&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;role&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;assistant&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;prev&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;prev&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;last&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;last&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;chunk&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;];&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;[]);&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;send&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useCallback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nf"&gt;setMessages&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;prev&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;prev&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;user&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;input&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;assistant&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;]);&lt;/span&gt;

      &lt;span class="c1"&gt;// Hit your backend proxy. Never the AI API directly from the device.&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;expoFetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;apiUrl&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/chat`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;input&lt;/span&gt; &lt;span class="p"&gt;}),&lt;/span&gt;
      &lt;span class="p"&gt;});&lt;/span&gt;

      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;reader&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getReader&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;decoder&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;TextDecoder&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

      &lt;span class="k"&gt;while &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;done&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;reader&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;done&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nx"&gt;bufferRef&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;current&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nx"&gt;decoder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="c1"&gt;// Batch UI updates at ~60fps instead of every token.&lt;/span&gt;
        &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;flushTimerRef&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;current&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="nx"&gt;flushTimerRef&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;current&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nf"&gt;flush&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
            &lt;span class="nx"&gt;flushTimerRef&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;current&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
          &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="nf"&gt;flush&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;apiUrl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;flush&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;send&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;That pattern alone, buffering tokens and flushing at ~60fps instead of on every chunk, fixes most of the dropped-frames issues new RN devs hit when they first try streaming.&lt;/p&gt;
&lt;h2&gt;
  
  
  The shortcut
&lt;/h2&gt;

&lt;p&gt;If you're at day zero with React Native and you want to ship an AI-powered mobile app, here's the boring truth: the first two weeks are setup. Routing, styling system, secure API proxy, streaming UI, auth, EAS pipeline, build configs, app icons, splash screens. You'll do all of this before you write your first feature.&lt;/p&gt;

&lt;p&gt;I built &lt;a href="https://aimobilelauncher.com" rel="noopener noreferrer"&gt;AI Mobile Launcher&lt;/a&gt; because I'd done that two-week setup three times in a row. It's an Expo + React Native boilerplate with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React Navigation with auth screens scaffolded&lt;/li&gt;
&lt;li&gt;Reanimated patterns ready&lt;/li&gt;
&lt;li&gt;Backend proxy for OpenAI / Anthropic / OpenRouter (deploy to Cloudflare Workers in one command)&lt;/li&gt;
&lt;li&gt;Streaming chat UI with the frame-safe pattern from the snippet above&lt;/li&gt;
&lt;li&gt;EAS Build and EAS Update preconfigured&lt;/li&gt;
&lt;li&gt;App icon, splash screen, and store metadata templated&lt;/li&gt;
&lt;li&gt;Revenue Cat, Authentication, Onboarding skills, Design system with react native restyle, High Performance architecture, that is scalable, included with UAMOS system., read it here 
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://codemeetai.substack.com/p/i-spent-6-months-losing-fights-with" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21Ca-X%21%2Cw_1200%2Ch_675%2Cc_fill%2Cf_jpg%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Cg_auto%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F8bb96400-bd56-4f7a-a511-337017c990ee_1456x816.png" height="450" class="m-0" width="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://codemeetai.substack.com/p/i-spent-6-months-losing-fights-with" rel="noopener noreferrer" class="c-link"&gt;
            I spent 6 months losing fights with AI in React Native. Then I built U-AMOS.
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            The memory system that cut hallucinations 93% and token costs 91% across my own projects — and why the broader ecosystem is converging on the same pattern.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fsubstackcdn.com%2Fimage%2Ffetch%2F%24s_%21p5MU%21%2Cf_auto%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Fhttps%253A%252F%252Fsubstack-post-media.s3.amazonaws.com%252Fpublic%252Fimages%252F00b0edef-2187-4de8-9be9-039365cff6dc%252Ffavicon.ico" width="64" height="64"&gt;
          codemeetai.substack.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;It's the boilerplate I'd hand my past self on day zero. If you're a web dev planning your first AI mobile app, it cuts the setup phase from two weeks to an afternoon.&lt;/p&gt;

&lt;p&gt;Use it, fork it, ignore it. The goal is to not lose two weeks to plumbing.&lt;/p&gt;

&lt;h2&gt;
  
  
  One last thing
&lt;/h2&gt;

&lt;p&gt;If you're a web dev planning to build a mobile app: stop reading the "React Native vs Flutter" arguments. The framework isn't your bottleneck. The surface area you don't know yet, keyboard handling, native builds, store submissions, AI key management, is.&lt;/p&gt;

&lt;p&gt;Pick Expo. Ship something small. Hit a wall. Read the docs for that wall. Repeat.&lt;/p&gt;

&lt;p&gt;That's the whole path.&lt;/p&gt;

</description>
      <category>reactnative</category>
      <category>expo</category>
      <category>ai</category>
      <category>mobile</category>
    </item>
    <item>
      <title>How I stopped Claude Code from hallucinating 42% of my React Code</title>
      <dc:creator>Malik Chohra</dc:creator>
      <pubDate>Wed, 06 May 2026 08:52:13 +0000</pubDate>
      <link>https://dev.to/malik_chohra/how-i-stopped-claude-code-from-hallucinating-42-of-my-react-code-41ki</link>
      <guid>https://dev.to/malik_chohra/how-i-stopped-claude-code-from-hallucinating-42-of-my-react-code-41ki</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;I tracked 6 months of my own AI coding sessions in React Native. In my logs, 42% of AI-generated diffs contained at least one hallucinated import, fake API, or duplicate component.&lt;/li&gt;
&lt;li&gt;Token costs were the second tax. Re-loading project context every session cost roughly $135/month per developer at the model pricing I was using.&lt;/li&gt;
&lt;li&gt;Better prompts didn’t fix either problem. The AI didn’t need smarter instructions : it needed memory and a map.&lt;/li&gt;
&lt;li&gt;I built U-AMOS (Universal AI Memory Operating System): a 3-tier memory bank, a context map, a rule priority system that splits “what to do” from “how to do it,” a 7-point anti-hallucination checklist, and a plan/act workflow that runs before any code is generated.&lt;/li&gt;
&lt;li&gt;After deploying U-AMOS across my own projects over a 3-month tracking period: hallucinations dropped from 42% to 3%. Token costs dropped from $180/month to $18/month. Feature velocity increased roughly 5x. These are my internal numbers: I’ll note where external research reports similar magnitudes.&lt;/li&gt;
&lt;li&gt;The framework is open and documented. U-AMOS 2.0 also ships pre-configured inside AI Mobile Launcher for anyone who doesn’t want to build it from scratch.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  A note on the numbers
&lt;/h2&gt;

&lt;p&gt;Everything in this article that is quantified — the 42%, the $135/month, the 91% reduction — comes from 6 months of my own session logs across my React Native projects. I tracked hallucinations manually, counted tokens via API usage dashboards, and measured debugging time against my own estimates. These are not controlled experiments.&lt;/p&gt;

&lt;p&gt;What I can say is that the direction of the results matches what external research is starting to report. Memory-system papers are showing 40–60% accuracy improvements and 60–90% token reductions when you introduce structured memory into LLM workflows. Mem0’s Claude Code integration reports roughly 90% lower token usage with persistent memory vs full-context prompting. The order of magnitude is consistent. The exact numbers are mine.&lt;/p&gt;

&lt;h2&gt;
  
  
  The moment I stopped pretending it was working
&lt;/h2&gt;

&lt;p&gt;It was a Tuesday in October. I was building a functionality for my app. I asked Claude Code to add a Redux toolkit usage to manage user accounts. It generated something that looked correct. I committed it.&lt;/p&gt;

&lt;p&gt;Twenty minutes later, the build failed.&lt;/p&gt;

&lt;p&gt;The AI had been imported &lt;code&gt;useRouter&lt;/code&gt; from &lt;code&gt;next/router&lt;/code&gt;. In a React Native project. That hook doesn’t exist on mobile. It was a 30-second fix, but it wasn’t the first time. It was the fourth time that week.&lt;/p&gt;

&lt;p&gt;I started keeping a log. Every wrong thing the AI generated, I wrote down. After a month, I had the data from my own sessions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;42% of AI-generated diffs had at least one hallucinated import, function, or component&lt;/li&gt;
&lt;li&gt;25% of the components it created already existed in the codebase under a different name&lt;/li&gt;
&lt;li&gt;I was spending roughly 4 hours a week debugging things the AI had invented&lt;/li&gt;
&lt;li&gt;I was using Cursor much more than Claude that time, so with Cursor, I had analytics dashboard, an d confirm some of my thesis&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The frustrating part was that I knew the AI wasn’t getting worse. I was paying for the best models. The prompts were detailed. The context windows were huge.&lt;/p&gt;

&lt;p&gt;The problem wasn’t the model. The problem was that I was treating it like a senior developer when it was behaving like a junior with no memory of the project, and no map of the codebase.&lt;/p&gt;

&lt;p&gt;I have played before by adding rules, memory bank,.. but there were always issues in grasping the whole context, and i need to remind him much more often.&lt;/p&gt;

&lt;h2&gt;
  
  
  The token tax nobody talks about
&lt;/h2&gt;

&lt;p&gt;While I was tracking hallucinations, I also started tracking token usage. The numbers were uncomfortable.&lt;/p&gt;

&lt;p&gt;Every session, I was loading the same context: project structure, architecture decisions, naming conventions, what components already existed. The AI had no memory between sessions, so I kept reexplaining everything. Worse, when I didn’t re-explain, the AI would explore : running directory listings, opening files at random, building up its own picture of the codebase by trial and error.&lt;/p&gt;

&lt;p&gt;That exploration is where the worst of the token bleeding happens. Asking “where is the authentication logic?” can trigger 25,000 tokens of blind navigation through folders before the AI finds it.&lt;/p&gt;

&lt;p&gt;The math, at the model pricing I was using at the time:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Session 1: Re-load + explore project structure → 50,000 tokens&lt;/li&gt;
&lt;li&gt;Session 2: Re-load + explore project structure → 50,000 tokens&lt;/li&gt;
&lt;li&gt;Session 3: Re-load + explore project structure → 50,000 tokens&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Daily total:&lt;/strong&gt; 150,000 tokens&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monthly cost:&lt;/strong&gt; ~$135/month per developer&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;(based on ~$30 per million tokens, prompt + completion)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That’s the invisible tax. Even when the AI was generating correct code, I was paying to give it the same context every time, plus paying for it to wander around the repo finding things it should already know about.&lt;/p&gt;

&lt;p&gt;I do remember creating one file, that has architecture.md, where i put this type of context that i give each time, and then i created review_best_practices.md, to have the rules for the mistakes that he was repeating.&lt;/p&gt;

&lt;p&gt;Then it comes the Claude Code best practices usage, I tried the obvious approaches first. Longer CLAUDE.md files. More detailed system prompts. Better instructions on what to remember.&lt;/p&gt;

&lt;p&gt;None of it worked sustainably. The AI would hold context for a session or two, then drift. Because the problem wasn’t the prompt. It was the architecture.&lt;/p&gt;

&lt;h2&gt;
  
  
  The reframe that changed everything
&lt;/h2&gt;

&lt;p&gt;The shift came when I stopped thinking of AI as a developer and started thinking of it as a system that needed memory built for it, and a map handed to it. I do remember watching an intreview by Thomas Dohmke, and he asked one of the best practices is to look at it as a colleague, not a tool.&lt;/p&gt;

&lt;p&gt;A junior dev with no memory of your project would also generate hallucinated imports. Would also recreate components that already existed. Would also waste hours wandering through unfamiliar code looking for the right file. The AI wasn’t broken. The relationship was broken. I was asking it to behave like it had context it didn’t have.&lt;/p&gt;

&lt;p&gt;A lot of content I’ve seen treats this as a prompting problem. Write a better system prompt. Use a longer context window. Be more specific in your instructions.&lt;/p&gt;

&lt;p&gt;My experience, and increasingly what I see from teams who’ve shipped real production AI-assisted codebases, is that prompts plateau. Durable context compounds. The teams getting consistent AI output aren’t writing better prompts : they’re building memory systems that load the right context at the right time and update automatically when something changes.&lt;/p&gt;

&lt;p&gt;you can read this article about best prompt engineering approach here:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Essential guide of Prompt Engineering for Software Engineers&lt;/strong&gt;&lt;br&gt;
Malik CHOHRA · 17 November 2025&lt;br&gt;
Read full story&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That’s what I built. I called it U-AMOS.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc46qkgfqop62anikshkw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc46qkgfqop62anikshkw.png" alt="UAMOS schema"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What U-AMOS actually is
&lt;/h2&gt;

&lt;p&gt;U-AMOS : Universal AI Memory Operating System, is a framework for managing AI-assisted development. It has five components, each solving a specific failure mode I’d logged.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
┌──────────────────────┐
                  │     Memory Bank      │
                  │ (Cold / Warm / Hot)  │
                  └─────────┬────────────┘
                            ↓
                  ┌──────────────────────┐
                  │     Context Map      │
                  │   (Index / Lookup)   │
                  └─────────┬────────────┘
                            ↓
                  ┌──────────────────────┐
                  │     Plan Mode        │
                  │  (before execution)  │
                  └─────────┬────────────┘
                            ↓
                  ┌──────────────────────┐
                  │ Validation Layer     │
                  │ (7-point checklist)  │
                  └─────────┬────────────┘
                            ↓
                  ┌──────────────────────┐
                  │   Code Generation    │
                  └─────────┬────────────┘
                            ↓
                  ┌──────────────────────┐
                  │  Progress Logging    │
                  │   (.memory updates)  │
                  └─────────┬────────────┘
                            ↓
                  └──────→ FEEDBACK LOOP ──────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  1. The Memory Bank — three tiers, loaded on demand
&lt;/h2&gt;

&lt;p&gt;Not all context is equally important for every task. So I tiered it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cold tier (project identity — loads rarely, ~10% of sessions):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;00-description.md&lt;/code&gt; — what we’re building, in 500 words&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;01-brief.md&lt;/code&gt; — non-negotiable constraints&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;10-product.md&lt;/code&gt; — feature specs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Warm tier (architecture — loads on demand, ~30% of sessions):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;20-system.md&lt;/code&gt; — how the system works&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;30-tech.md&lt;/code&gt; — stack and dependencies&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;60-decisions.md&lt;/code&gt; — why we chose what we chose&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;70-knowledge.md&lt;/code&gt; — lessons learned&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Hot tier (current state — loads every session, 100%):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;40-active.md&lt;/code&gt; — what we’re working on right now (max 500 words)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;50-progress.md&lt;/code&gt; — what shipped recently&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The hot tier is small (~2,000 tokens) and always loads. The warm tier loads when the task touches architecture (~5,000 tokens). The cold tier almost never loads during development — it’s the onboarding layer. A new developer (or a new AI agent starting a session) reads the cold tier once and understands the project without hunting through the entire repo.&lt;/p&gt;

&lt;p&gt;The result: 2,000–10,000 tokens per session instead of 50,000. That assumes you’re maintaining the files actively — see the hygiene section below.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. The Context Map — the exploration killer
&lt;/h2&gt;

&lt;p&gt;This is the piece that does the most work for the lowest cost.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;context_map.md&lt;/code&gt; is a single 500-token lookup file at the root of the project. It indexes everything: every feature, every service, every core UI component, with the entry path next to each one.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Context Map&lt;/span&gt;
&lt;span class="gu"&gt;## Features (14)&lt;/span&gt;
| Feature        | Entry Point                      | Purpose            |
|----------------|----------------------------------|--------------------|
| auth           | src/features/auth/index.ts       | Authentication     |
| onboarding     | src/features/onboarding/index.ts | User onboarding    |
| todos          | src/features/todos/index.ts      | Todo management    |

&lt;span class="gu"&gt;## Services (15)&lt;/span&gt;
| Service        | Path                             | Responsibility     |
|----------------|----------------------------------|--------------------|
| logger         | src/services/logging/logger.ts   | Centralized logs   |
| analytics      | src/services/analytics/...       | Firebase analytics |

&lt;span class="gu"&gt;## UI Components (40+)&lt;/span&gt;
| Category       | Components                       |
|----------------|----------------------------------|
| Buttons        | Button, IconButton, FAB          |
| Forms          | Input, ControlledInput, Switch   |
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When the AI starts a session and needs to know “where does authentication live?”, it reads one 500-token file instead of running directory listings, opening five files to compare them, and burning 25,000 tokens building its own mental model of the repo.&lt;/p&gt;

&lt;p&gt;In my own logs, this single file removed roughly 60% of the per-session token consumption that wasn’t already covered by the memory bank. The math: 500 tokens replaces 25,000. That’s a 50x reduction on the most expensive part of every session : discovery.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. The Rule Priority System — three tiers, with generators separate from rules
&lt;/h2&gt;

&lt;p&gt;The same logic applies to coding rules.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Critical rules (always load, ~4,000 tokens):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Meta-rules and session protocol&lt;/li&gt;
&lt;li&gt;Anti-hallucination checklist&lt;/li&gt;
&lt;li&gt;Common violations (no inline styles, no &lt;code&gt;console.log&lt;/code&gt;, no hardcoded strings, no API keys)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Important rules (task-specific, ~2,000 tokens each):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Design system patterns: loads if working on UI&lt;/li&gt;
&lt;li&gt;State management rules: loads if working on the state&lt;/li&gt;
&lt;li&gt;i18n patterns : loads if adding translations&lt;/li&gt;
&lt;li&gt;Navigation patterns: loads if adding routes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Recommended rules (load if relevant):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Performance optimizations&lt;/li&gt;
&lt;li&gt;Testing patterns&lt;/li&gt;
&lt;li&gt;Security and platform-specific privacy rules&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The other architectural distinction that mattered: I separated generators from rules. They look similar but they solve different problems.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Generators answer what to do.&lt;/strong&gt; Step-by-step implementation guides for recurring tasks: “add a new language,” “add a new screen,” “add a paywall.” They’re workflow documents — copy this template, register here, run this script.&lt;br&gt;
This one i include in my Ai react native boilerplate:&lt;br&gt;
&lt;a href="https://aimobilelauncher.com/" rel="noopener noreferrer"&gt;https://aimobilelauncher.com/&lt;/a&gt;, and i explained them there, you can check the code about different generators.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Rules answer how to do it well.&lt;/strong&gt; Code quality patterns and constraints: this is what good styling looks like; this is what the wrong import path looks like.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;When you mix the two, when your “how to add a language” doc also tries to explain every i18n best practice, the AI gets overwhelmed and follows neither cleanly. Splitting them means the AI reads the generator to know the steps, then reads the matching rule pack to write the code correctly. Two clean reads. No drift.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Concrete examples beat abstract rules
&lt;/h2&gt;

&lt;p&gt;This is a philosophical point but it’s the reason U-AMOS rules actually work.&lt;/p&gt;

&lt;p&gt;Most rule documents read like this: “Use proper styling conventions. Avoid inline styles where possible.”&lt;/p&gt;

&lt;p&gt;Rules in U-AMOS read like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gu"&gt;## Styling&lt;/span&gt;

&lt;span class="gu"&gt;### ❌ WRONG — inline styles&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;View&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;{{&lt;/span&gt; &lt;span class="na"&gt;marginTop:&lt;/span&gt; &lt;span class="err"&gt;20,&lt;/span&gt; &lt;span class="na"&gt;padding:&lt;/span&gt; &lt;span class="err"&gt;16&lt;/span&gt; &lt;span class="err"&gt;}}&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="gu"&gt;### ✅ CORRECT — Restyle props&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;Box&lt;/span&gt; &lt;span class="na"&gt;marginTop=&lt;/span&gt;&lt;span class="s"&gt;"xl"&lt;/span&gt; &lt;span class="na"&gt;padding=&lt;/span&gt;&lt;span class="s"&gt;"lg"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

&lt;span class="gu"&gt;### Exception: unsupported properties&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;Box&lt;/span&gt; &lt;span class="na"&gt;marginTop=&lt;/span&gt;&lt;span class="s"&gt;"xl"&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;{{&lt;/span&gt; &lt;span class="na"&gt;opacity:&lt;/span&gt; &lt;span class="err"&gt;0.5&lt;/span&gt; &lt;span class="err"&gt;}}&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
(opacity is not a Restyle prop, inline is acceptable here)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;LLMs don’t generalize abstract principles well. They pattern-match. If you show them what wrong looks like next to what right looks like, they reliably produce the right pattern. If you tell them to “follow good practices,” they produce whatever the training data nudged them toward last time.&lt;/p&gt;

&lt;p&gt;Every rule pack in U-AMOS is built this way. ❌ wrong → ✅ correct → exception (if any). No paragraphs of theory. No abstract guidelines. Just visual diffs. This is the single biggest determinant of whether a rule actually changes the AI’s output or gets ignored.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. The 7-Point Anti-Hallucination Checklist
&lt;/h2&gt;

&lt;p&gt;Before any code is generated, the AI verifies:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Does the file I’m editing exist?&lt;/li&gt;
&lt;li&gt;Did I check the component inventory before creating something new?&lt;/li&gt;
&lt;li&gt;Did I check the service registry?&lt;/li&gt;
&lt;li&gt;Is the import path correct?&lt;/li&gt;
&lt;li&gt;Does the function I’m calling actually exist in that file?&lt;/li&gt;
&lt;li&gt;Am I using the project’s i18n pattern, not hardcoded strings?&lt;/li&gt;
&lt;li&gt;Am I using the project’s logger, not &lt;code&gt;console.log&lt;/code&gt;?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If any answer is no, the AI stops and verifies before continuing.&lt;/p&gt;

&lt;p&gt;The first week I deployed this, my hallucination rate in my own sessions dropped from 42% to under 5%. Not because the model improved. Because I made verification mandatory before generation.&lt;/p&gt;

&lt;p&gt;Each of these rules is manually crafted.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Plan/Act Mode — no code without a plan
&lt;/h2&gt;

&lt;p&gt;This is the piece I added after the initial U-AMOS deployment, and it might be the highest-leverage addition.&lt;/p&gt;

&lt;p&gt;Before touching more than one file, the AI must:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Read &lt;code&gt;.memory/40-active.md&lt;/code&gt; (current focus)&lt;/li&gt;
&lt;li&gt;Draft an implementation plan in plain markdown&lt;/li&gt;
&lt;li&gt;Wait for my confirmation&lt;/li&gt;
&lt;li&gt;Execute only after approval&lt;/li&gt;
&lt;li&gt;Log what it actually shipped back into &lt;code&gt;.memory/50-progress.md&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This sounds slow. It’s actually faster because you catch architectural mistakes at the plan stage instead of the debugging stage. Tweag’s Agentic Coding Handbook and Lullabot’s memory bank guide both document the same pattern. It’s becoming standard practice in teams using agentic coding seriously.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changed after U-AMOS
&lt;/h2&gt;

&lt;p&gt;I tracked the same metrics for 3 months after deploying U-AMOS across my own projects.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hallucinations&lt;/strong&gt; (from my logs): 42% → 3% (93% reduction)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tokens per session&lt;/strong&gt; (average): 48,000 → 4,200 (91% reduction)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Token cost&lt;/strong&gt; (at my model tier): ~$180/month → ~$18/month&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Time debugging AI errors:&lt;/strong&gt; 4 hours/week → 20 minutes/week&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Duplicate components created:&lt;/strong&gt; 23 in the 3 months before → 0 in the 3 months after&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Feature velocity:&lt;/strong&gt; roughly 5x faster on features I tracked end-to-end&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I also started tracking which rule packs loaded most often and which hallucination types were still slipping through. That observability layer  is what tells you where the system needs a new rule file vs where the AI needs better examples.&lt;/p&gt;

&lt;h2&gt;
  
  
  Memory hygiene: pruning, plus living rules
&lt;/h2&gt;

&lt;p&gt;The mistake I see in most memory bank setups is treating the files as append-only. They’re not. They need pruning.&lt;/p&gt;

&lt;p&gt;My current hygiene routine:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;40-active.md&lt;/code&gt; updates at the start of every work session (what’s the actual focus today)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;50-progress.md&lt;/code&gt; gets a new entry after every shipped feature : old entries archive monthly&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;70-knowledge.md&lt;/code&gt; gets pruned weekly : if a lesson is now in a rule file, it gets removed from the knowledge doc&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;20-system.md&lt;/code&gt; only updates when architecture actually changes&lt;/li&gt;
&lt;li&gt;If the AI proposes changes to any memory file, it does it as a plan diff I review : it never writes to memory silently&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There’s one more file that prevents documentation rot: &lt;code&gt;updated_rules.md&lt;/code&gt;. It’s a changelog for rule exceptions.&lt;/p&gt;

&lt;p&gt;When the team makes a real exception to a rule : for example, “we never use inline styles, EXCEPT for the opacity prop because Restyle doesn’t support it” : that exception goes in &lt;code&gt;updated_rules.md&lt;/code&gt; with a date and a reason. Not into the main rule file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Updated Rules (Living Document)&lt;/span&gt;
&lt;span class="gu"&gt;## 2025-12-20 — Inline styles exception&lt;/span&gt;

&lt;span class="gs"&gt;**Original rule**&lt;/span&gt;: NO inline styles ever
&lt;span class="gs"&gt;**Updated rule**&lt;/span&gt;: NO inline styles EXCEPT for single properties not supported by Restyle (opacity)
&lt;span class="gs"&gt;**Why**&lt;/span&gt;: Restyle doesn’t support opacity prop
&lt;span class="gs"&gt;**Example**&lt;/span&gt;: ✅ &lt;span class="nt"&gt;&amp;lt;Box&lt;/span&gt; &lt;span class="na"&gt;marginTop=&lt;/span&gt;&lt;span class="s"&gt;"xl"&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;{{&lt;/span&gt; &lt;span class="na"&gt;opacity:&lt;/span&gt; &lt;span class="err"&gt;0.5&lt;/span&gt; &lt;span class="err"&gt;}}&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Why this matters: rules become outdated quickly, and rewriting them every time creates drift. The living rules file lets the AI always check the latest guidance without losing the original logic. Exceptions are explicit and dated. Historical context is preserved. The main rule files stay clean.&lt;/p&gt;

&lt;p&gt;The 2,000–10,000 token figure holds only if you maintain all of this. If you let the files grow unchecked, you’ll hit 50,000 tokens again within two months. The context window isn’t the bottleneck : your maintenance habits are.&lt;/p&gt;

&lt;h2&gt;
  
  
  What still doesn’t work, and what’s on the roadmap
&lt;/h2&gt;

&lt;p&gt;This isn’t a finished system. Four things still fail or are incomplete:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Long sessions.&lt;/strong&gt; Context degrades over multi-hour conversations. I re-attach memory bank files every 30–40 messages. A better solution is probably an MCP server that handles re-injection automatically, but I haven’t built it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Performance edge cases.&lt;/strong&gt; The AI generates working code that sometimes re-renders too aggressively. Architecture rules help, but don’t eliminate this. I m fixing this by creating performance rules for expo apps. i m using the official one from Expo, but it is not enough, and with the project architecture, it needs a lot of fixes and improvement.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cross-project memory.&lt;/strong&gt; U-AMOS handles per-project memory. The next layer — preferences and patterns that follow you across every project you touch — is what tools like Mem0’s MCP integration and Claude Code’s own auto-memory system are starting to solve. If you find yourself re-teaching the same conventions in every new repo, cross-project memory is the fix. I’m watching this space closely.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to set up U-AMOS yourself
&lt;/h2&gt;

&lt;p&gt;I have created a Prompt intialization for the system, i test it on some of my projects, and it was succefful. not so many rules though, but you can customize that part&lt;/p&gt;

&lt;p&gt;You can check it here: &lt;a href="https://gist.github.com/chohra-med/129e6ced83805bc712e92978d4fe7f6d" rel="noopener noreferrer"&gt;link&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thanks for reading Code Meet AI: Stay relevant in the AI era! Subscribe for free to receive new posts and support my work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related work worth reading
&lt;/h2&gt;

&lt;p&gt;U-AMOS didn’t emerge from a vacuum. These are the guides I’ve found most aligned with the same pattern:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tweag’s Agentic Coding Handbook:&lt;/strong&gt; memory bank system and plan/act mode, well documented&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mem0’s Claude Code integration:&lt;/strong&gt; if you want cross-project memory on top of U-AMOS, this is the current best path&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Anthropic’s Claude Code best practices:&lt;/strong&gt; the official guidance on CLAUDE.md structure, memory, and tool use&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The pattern is converging across all of these. Structured memory, tiered loading, mandatory verification before generation, plan-before-execute. U-AMOS is my implementation of that pattern for React Native specifically, with the anti-hallucination rules, the context map, and the mobile-specific constraints built in.&lt;/p&gt;

&lt;h2&gt;
  
  
  Or, if you want it pre-configured
&lt;/h2&gt;

&lt;p&gt;I built AI Mobile Launcher as the productized version of U-AMOS for React Native.&lt;/p&gt;

&lt;p&gt;It ships with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The full 9-file memory bank is pre-structured for a new project&lt;/li&gt;
&lt;li&gt;A pre-built context map of every feature, service, and UI component&lt;/li&gt;
&lt;li&gt;All critical, important, and recommended rule packs — written as visual diffs, not paragraphs&lt;/li&gt;
&lt;li&gt;The split between generators (workflows) and rules (patterns) is already in place&lt;/li&gt;
&lt;li&gt;Pre-built component and service inventories&lt;/li&gt;
&lt;li&gt;Cursor and Claude Code entry points configured with plan/act mode&lt;/li&gt;
&lt;li&gt;Generators for common features (onboarding, paywalls, i18n, design system)&lt;/li&gt;
&lt;li&gt;The 7-point anti-hallucination checklist is embedded in every entry point&lt;/li&gt;
&lt;li&gt;A starter &lt;code&gt;updated_rules.md&lt;/code&gt; ready for your first exception&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Lite tier is free on GitHub. U-AMOS 2.0 ships fully configured in the Starter tier. If you’re starting a new React Native project and want the memory system running from day one without the setup work, that’s the fastest path. &lt;a href="https://aimobilelauncher.com/" rel="noopener noreferrer"&gt;aimobilelauncher.com&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;If you’re adding U-AMOS to an existing project, the steps above are enough to get started. The framework isn’t magic — it’s the result of 6 months of failed sessions, logged and analyzed, until the AI stopped fighting me and started shipping with me.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I want you to take from this
&lt;/h2&gt;

&lt;p&gt;The content I see most often on AI coding frames is this as a prompting problem. Use a better system prompt. Be more specific. Add more examples to your instructions.&lt;/p&gt;

&lt;p&gt;My experience over 6 months of tracking my own sessions is that prompts hit a ceiling. Once you’ve written a clear, specific prompt, the next 10 iterations give you marginal gains. Memory and structure compound differently . every lesson added to the memory bank improves every future session. Every entry in the context map saves another exploration loop. Every rule written as a visual diff prevents an entire category of hallucination permanently.&lt;/p&gt;

&lt;p&gt;The AI isn’t a developer you prompt. It’s a system you build context for. Build the memory. Hand it the map. Show it what wrong looks like next to what right looks like. Stop paying to re-explain the same architecture every day.&lt;/p&gt;

&lt;p&gt;U-AMOS is how I did it. The principles work without my specific files. The files work better with the principles. Either way: fix the memory and the map first, then build the product.&lt;/p&gt;

&lt;p&gt;I write Code Meet AI weekly — AI in mobile development, real tradeoffs, what’s actually working in production. Next issue: agent-first mobile architecture and why most “AI features” in apps are just bolted-on chatbots pretending to be product. → &lt;a href="https://codemeetai.substack.com/" rel="noopener noreferrer"&gt;https://codemeetai.substack.com/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>reactnative</category>
      <category>productivity</category>
      <category>llm</category>
    </item>
    <item>
      <title>Claude Code for beginners: what it is, how to set it up, and why people won’t shut up about it</title>
      <dc:creator>Malik Chohra</dc:creator>
      <pubDate>Fri, 20 Mar 2026 10:48:42 +0000</pubDate>
      <link>https://dev.to/malik_chohra/claude-code-for-beginners-what-it-is-how-to-set-it-up-and-why-people-wont-shut-up-about-it-2262</link>
      <guid>https://dev.to/malik_chohra/claude-code-for-beginners-what-it-is-how-to-set-it-up-and-why-people-wont-shut-up-about-it-2262</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Claude Code is Anthropic’s AI coding agent that runs in your terminal, reads your whole project, edits files, and loops until the task is done&lt;/li&gt;
&lt;li&gt;It reached $1B in six months, partly because non-technical users started using it for SEO, file organization, marketing automation, and yes, literally monitoring tomato plants&lt;/li&gt;
&lt;li&gt;Setup takes under 10 minutes: install, authenticate, run &lt;code&gt;claude&lt;/code&gt; in your project folder&lt;/li&gt;
&lt;li&gt;CLAUDE.md is the most important thing to set up — it gives Claude permanent memory about your codebase&lt;/li&gt;
&lt;li&gt;Plan Mode makes Claude think and propose a plan before touching anything — essential before any task that spans multiple files&lt;/li&gt;
&lt;li&gt;Claude Skills are installable, reusable workflows — over 25,000 exist on GitHub right now&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Before we start, a word:
&lt;/h2&gt;

&lt;p&gt;I started working on an AI native Boilerplate for Mobile Development. A solution that has a scalable and clean architecture, with the best approaches to have a great app performance. Adding more AI context and rules, to make the AI hallucinate less, and keep the clean code. You can use it either with Cursor, Antigravity, Claude Code,… and it gives the amazing results as expected. Also, it has most important features that help you launch your app fast &lt;/p&gt;

&lt;p&gt;I m now in the Beta version, where i need people to test it, and gather feedback, you will get access to the code base for free, and i m looking for feedbacks.&lt;/p&gt;

&lt;p&gt;Check it here: &lt;a href="https://aimobilelauncher.com/" rel="noopener noreferrer"&gt;https://aimobilelauncher.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Also, I m working on a newsletter for Tech and non tech people, on how to use AI tools for App development: &lt;a href="https://aimeetcode.substack.com/" rel="noopener noreferrer"&gt;https://aimeetcode.substack.com/&lt;/a&gt;. Subscribe here: &lt;a href="https://aimeetcode.substack.com/" rel="noopener noreferrer"&gt;https://aimeetcode.substack.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you need custom solution, or a mobile development, contact us in :&lt;a href="https://casainnov.com/" rel="noopener noreferrer"&gt;https://casainnov.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction:
&lt;/h2&gt;

&lt;p&gt;Lately, I start to see something cool: Product manager, Designer, CS teams,… and non technical roles have started to use Terminal. I was surprised to see that now most of the people have a terminal open, which at some point was only for tech people who really understand what is going on. Now, the terminal in computers has become the norm&lt;/p&gt;

&lt;p&gt;It is highly attributed that all of them started using  Claude Code to run their project and to assist them in their work, with custom skills for their specific role / organisation. The trend is getting more and more&lt;/p&gt;

&lt;p&gt;I don’t want to talk about combining it with OpenClaw, which took the internet by storm.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why is everyone suddenly talking about this
&lt;/h2&gt;

&lt;p&gt;I started using it at first when it was announced: as a tech person, Anthropic models are the best at coding, and I use most of their models &amp;lt; depends on the tasks in hand, of course&amp;gt;. And I wasn’t that surprised with Claude Code. It has skills and rules, but I kept the same AI architecture for coding &amp;lt; rules, context, memory bank, indexing…&amp;gt;&lt;/p&gt;

&lt;p&gt;I have been using this approach for my aimobilelauncher.com to launch my AI native boilerplate. The plan mode was really helpful, and including skills for it is my roadmap for later&lt;/p&gt;

&lt;p&gt;Then Anthropic confirmed $1 billion in annualized revenue in six months, and Fortune ran the story. I read it expecting the usual: 10x engineer productivity, enterprise contracts, vibe coding demos.&lt;/p&gt;

&lt;p&gt;The use cases they listed were: booking theatre tickets. Filing taxes. Monitoring tomato plants. Combing through museum archives. Automating Slack messages.&lt;/p&gt;

&lt;p&gt;That’s not a developer story. Something else was happening.&lt;/p&gt;

&lt;p&gt;Netflix, Spotify, Uber, and Salesforce had all adopted it. Accenture announced they’re training 30,000 staff on the platform. Not 30,000 engineers. 30,000 staff. Anthropic’s own non-technical marketing team runs it to automate Google Ads creative, App Store metadata, email workflows, and SEO.&lt;/p&gt;

&lt;p&gt;The reason it spread outside engineering is simpler than most people explain: Claude Code doesn’t need you to know how to code. It needs you to know what you want done. The terminal is just a text box. Files are organized information. Claude Code is an agent that can read, edit, and act on both. Also, the community adopted it very fast, and they started creating solutions on top of it: Open source skills is an example.&lt;/p&gt;

&lt;p&gt;## What Claude Code actually is&lt;/p&gt;

&lt;p&gt;Claude Code is a terminal-native AI agent from Anthropic. Not a plugin. Not autocomplete. It runs in your terminal with access to your actual files and your actual command line.&lt;/p&gt;

&lt;p&gt;Give it a task, and it runs this loop:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Reads your files, searches directories, checks configs&lt;/li&gt;
&lt;li&gt;Proposes a plan&lt;/li&gt;
&lt;li&gt;Edits files, runs commands&lt;/li&gt;
&lt;li&gt;Reads the output — test results, build logs, errors&lt;/li&gt;
&lt;li&gt;Fixes what broke and runs again&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Step five is what most AI coding tools skip. Copilot writes a suggestion and stops. Cursor helps you write code per session and stops. Claude Code stays in the loop until the job is done — or until it runs into something it genuinely can’t figure out and asks you.&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  How to install it
&lt;/h2&gt;

&lt;p&gt;You need one of these to start:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A paid Claude subscription (Pro at $20/month minimum)&lt;/li&gt;
&lt;li&gt;Or a Claude Console account with active API billing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No free tier. That’s the only real gate.&lt;/p&gt;

&lt;p&gt;`// macOS / Linux:&lt;br&gt;
curl -fsSL &lt;a href="https://claude.ai/install.sh" rel="noopener noreferrer"&gt;https://claude.ai/install.sh&lt;/a&gt; | bash&lt;/p&gt;

&lt;p&gt;// Via npm (still works, but deprecated by Anthropic):&lt;/p&gt;

&lt;p&gt;npm install -g @anthropic-ai/claude-code`&lt;/p&gt;

&lt;p&gt;After installing:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;cd your-project-folder&lt;br&gt;
claude&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;First run asks you to authenticate with a link. It sends a verification code back to the terminal. About 60 seconds total. Then you’re in.&lt;/p&gt;

&lt;p&gt; ## Set up your workflow: CLAUDE.md&lt;/p&gt;

&lt;p&gt;CLAUDE.md is a Markdown file you create at the root of your project. Claude Code reads it at the start of every session.&lt;/p&gt;

&lt;p&gt;Without it, every session starts from scratch. Claude doesn’t know your stack, your folder structure, your naming conventions, or the three things you told it never to do two sessions ago. It just scans what it can see and makes assumptions.&lt;/p&gt;

&lt;p&gt;That leads to weird architecture suggestions, wrong import paths, and Claude confidently using a pattern that your codebase specifically avoids.&lt;/p&gt;

&lt;p&gt;CLAUDE.md fixes this. You write down the things Claude should always know, and it reads them every time.&lt;/p&gt;

&lt;p&gt;Here’s a real example for a React Native / Expo project:&lt;/p&gt;

&lt;p&gt;`# Project: My App&lt;/p&gt;

&lt;h2&gt;
  
  
  Stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;React Native with Expo SDK 54&lt;/li&gt;
&lt;li&gt;TypeScript (strict mode)&lt;/li&gt;
&lt;li&gt;NativeWind for styling&lt;/li&gt;
&lt;li&gt;Redux for state management&lt;/li&gt;
&lt;li&gt;Supabase for backend&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Coding conventions
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Functional components only — no class components&lt;/li&gt;
&lt;li&gt;TypeScript with explicit return types&lt;/li&gt;
&lt;li&gt;Named exports, not default exports&lt;/li&gt;
&lt;li&gt;Folder structure: screens/, components/, hooks/, utils/, services/&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What never to do
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Do not install new libraries without asking first&lt;/li&gt;
&lt;li&gt;Do not modify .env files&lt;/li&gt;
&lt;li&gt;Do not refactor code unless explicitly asked&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Git
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Always create a branch before making changes&lt;/li&gt;
&lt;li&gt;Conventional commits: feat(), fix(), refactor()&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Expo
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;always using 'npx expo install &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;`&lt;/p&gt;

&lt;p&gt;You can ask Claude to generate a first draft for you:&lt;/p&gt;

&lt;p&gt;Read the project structure and generate a CLAUDE.md file for this codebase.&lt;/p&gt;

&lt;p&gt;Plan Mode — think before you touch anything&lt;/p&gt;

&lt;p&gt;Most people find out about Plan Mode by watching it not be on and regretting it.&lt;/p&gt;

&lt;p&gt;Plan Mode makes Claude read files and ask questions, but it cannot write, edit, or run anything while in this state. It has to think, plan, and explain what it intends to do before execution starts. Then you approve, modify, or cancel.&lt;/p&gt;

&lt;p&gt;To activate: press &lt;strong&gt;Shift + Tab&lt;/strong&gt; twice. The mode indicator in the bottom left of the terminal changes.&lt;/p&gt;

&lt;p&gt;The practical difference is clearest with an example.&lt;/p&gt;

&lt;p&gt;Without Plan Mode, you say:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Add authentication to this React Native app”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Claude starts writing immediately. It picks an auth library, picks a navigation approach, picks a token storage strategy. By the time you see the output, it’s made four foundational decisions you might disagree with and they’re already in the files.&lt;/p&gt;

&lt;p&gt;With Plan Mode:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Add authentication to this React Native app”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Claude asks: “Which auth provider? How is your navigation structured? Where do you store tokens today? Do you want biometric support?” You answer. Claude writes a plan: specific components, a sequence, the libraries it wants to use. You read it. You push back on anything wrong. You approve. Then it executes with a clear, agreed-upon approach.&lt;/p&gt;

&lt;p&gt;I use Plan Mode for anything that touches more than two or three files. It’s not slower — the time you spend reviewing the plan is time you’d spend fixing wrong assumptions later.&lt;/p&gt;

&lt;p&gt;For non-technical users: Plan Mode is honestly the feature that makes this feel safe. Nothing happens without you seeing it first.&lt;/p&gt;

&lt;p&gt; — -&lt;/p&gt;

&lt;h2&gt;
  
  
  Commands worth knowing
&lt;/h2&gt;

&lt;p&gt;These come up in almost every session:&lt;/p&gt;

&lt;p&gt;| Command | What it does |&lt;br&gt;
| — -| — -|&lt;br&gt;
| &lt;code&gt;/clear&lt;/code&gt; | Clears conversation history, keeps CLAUDE.md loaded |&lt;br&gt;
| &lt;code&gt;/compact&lt;/code&gt; | Clears history but keeps a summary in context |&lt;br&gt;
| &lt;code&gt;/cost&lt;/code&gt; | Shows token cost and duration of current session |&lt;br&gt;
| &lt;code&gt;/help&lt;/code&gt; | Lists all available commands |&lt;br&gt;
| &lt;code&gt;/review&lt;/code&gt; | Reviews current changes for quality issues |&lt;br&gt;
| &lt;code&gt;/init&lt;/code&gt; | Generates a CLAUDE.md for your project |&lt;/p&gt;

&lt;p&gt;A note on &lt;code&gt;/clear&lt;/code&gt;: in long sessions, Claude starts to lose track of earlier instructions. Not always &lt;/p&gt;

&lt;p&gt;&lt;code&gt;/clear&lt;/code&gt; and paste a quick summary of where you are. Claude gets back on track fast. Use &lt;code&gt;/compact&lt;/code&gt; if you want to keep a condensed memory of the session.&lt;/p&gt;

&lt;p&gt;I usually do the 10 prompt rules: after 10 prompts, compact.&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;## Claude Skills&lt;/p&gt;

&lt;p&gt;This is the part most people skip when they start. That’s usually where the frustration comes from.&lt;/p&gt;

&lt;p&gt;A Claude Skill is a Markdown-defined workflow packaged as a ZIP or a GitHub repo. It tells Claude exactly how to execute a specific, repeatable task, step by step, with the rules and output format written in.&lt;/p&gt;

&lt;p&gt;Every time you want a repeatable task done without a Skill, you explain the whole process from the start. Every session. Skills replace that. Install once, type one command, and Claude runs the full process the same way every time.&lt;/p&gt;

&lt;p&gt;Think about any process you’ve explained to someone more than twice. A Skill is that explanation written down properly,  so Claude follows it without you having to be there for every run.&lt;/p&gt;

&lt;p&gt;There are over 25,000 community-built Skills on GitHub:&lt;/p&gt;

&lt;p&gt;awesome-claude-skills: &lt;a href="https://github.com/travisvn/awesome-claude-skills" rel="noopener noreferrer"&gt;https://github.com/travisvn/awesome-claude-skills&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;skills.sh:  &lt;a href="https://skills.sh/" rel="noopener noreferrer"&gt;https://skills.sh/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;browsable marketplace: &lt;a href="https://github.com/anthropics/skills" rel="noopener noreferrer"&gt;https://github.com/anthropics/skills&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Skills cover SEO audits, React Native performance checks, documentation generation, DevOps automation, security reviews, data analysis, and a lot more. The ecosystem is growing fast, and most of it is free.&lt;/p&gt;

&lt;p&gt;Anthropic also shipped organization-level Skills deployment in December 2025. Admins can now push Skills workspace-wide with automatic updates. Teams can standardize processes the same way they standardize code.&lt;/p&gt;

&lt;p&gt;How a Skill actually works&lt;/p&gt;

&lt;p&gt;Each Skill has a &lt;code&gt;SKILL.md&lt;/code&gt; file. YAML frontmatter at the top tells Claude when and how to invoke it. The Markdown below is what Claude follows when it runs.&lt;/p&gt;

&lt;p&gt; — -&lt;br&gt;
name: rn-performance-audit&lt;br&gt;
description: Audits a React Native screen for performance issues.&lt;br&gt;
Use when reviewing a screen component or when the user asks&lt;br&gt;
about performance, re-renders, or slow UI.&lt;br&gt;
 — -&lt;br&gt;
When auditing a React Native screen for performance:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Check for unnecessary re-renders (missing useMemo, useCallback)&lt;/li&gt;
&lt;li&gt;Identify heavy computations inside render&lt;/li&gt;
&lt;li&gt;Check FlatList vs ScrollView usage&lt;/li&gt;
&lt;li&gt;Look for images without proper caching or resizing&lt;/li&gt;
&lt;li&gt;Flag synchronous operations on the main thread&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Output: a prioritized list of issues with code-level fix suggestions.&lt;/p&gt;

&lt;p&gt;Once installed, Claude auto-loads this Skill when you ask about performance, or you invoke it directly with &lt;code&gt;/rn-performance-audit&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt; — -&lt;/p&gt;

&lt;p&gt;Example of A skill that I use: Claude SEO skill&lt;/p&gt;

&lt;p&gt;I have started lately using seo skill:  &lt;a href="https://github.com/AgriciDaniel/claude-seo" rel="noopener noreferrer"&gt;https://github.com/AgriciDaniel/claude-seo&lt;/a&gt;. It is really helpful for website SEo audit, and then adding fixes&lt;/p&gt;

&lt;p&gt;Check how to install it there, and then you do / to call it, and do /seo  so it gives you the whole report&lt;/p&gt;

&lt;p&gt;I like after that to ask to create a fix plan, using Plan mode for that. and then i ask it to implement it&lt;/p&gt;

&lt;h2&gt;
  
  
  Things that will catch you off guard
&lt;/h2&gt;

&lt;p&gt;I learned these the hard way, so you don’t have to.&lt;/p&gt;

&lt;p&gt;Commit before every Claude session:&lt;/p&gt;

&lt;p&gt;Claude can introduce regressions. It fixes one thing and occasionally breaks something in a different file. Not often, but enough. A clean Git commit before you start means rollback is one command. I’ve needed it more than once.&lt;/p&gt;

&lt;p&gt;Auto-accept is a trap.&lt;/p&gt;

&lt;p&gt;*There’s a &lt;code&gt; — dangerously-skip-permissions&lt;/code&gt; flag that lets Claude apply all changes without asking. Don’t use it until you’ve run a task type several times and understand its output well. I let it “tidy up some type definitions” once and got 40 renamed interfaces back. All of them logical. None of them what I wanted. I rolled back with Git and never used that flag on unfamiliar tasks again.&lt;/p&gt;

&lt;p&gt;Token costs sneak up on you:&lt;/p&gt;

&lt;p&gt;Long sessions, large repos, parallel agents — these burn tokens faster than a focused single-task session. Run &lt;code&gt;/cost&lt;/code&gt; inside any session to check where you are. Monitor the Anthropic console when you’re starting out. You want to know what a typical session costs before you schedule one as a weekly routine.&lt;/p&gt;

&lt;p&gt;Messy codebases produce messy results:&lt;/p&gt;

&lt;p&gt;Claude Code’s ability to understand your project depends entirely on how coherent that project is. Scattered configs, inconsistent patterns, no CLAUDE.md — it still runs, but the suggestions start to drift in weird directions. The architecture discipline makes it more useful. Chaos amplifies chaos.&lt;/p&gt;

&lt;p&gt;Rate limits reset on a rolling 5-hour window, not daily:&lt;/p&gt;

&lt;p&gt;If you hit your limit at 2 pm, you get a fresh allocation around 7 pm. Once I understood this, I stopped fighting the limits and started working in focused sessions instead. Honestly, a better habit anyway. &lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;FAQ&lt;/p&gt;

&lt;p&gt;Do I need to know how to code to use Claude Code?&lt;br&gt;
No. The VS Code extension and Claude Desktop both work without the terminal. You describe what you want in plain language and Claude Code executes. Non-technical users are currently using it for SEO, marketing workflows, file management, and data processing.&lt;/p&gt;

&lt;p&gt;What is CLAUDE.md and why does it matter?&lt;br&gt;
It’s a Markdown file in your project root that Claude Code reads at the start of every session. It stores your stack, coding conventions, and what Claude should never do. Without it, every session starts from scratch. It’s the single biggest difference between a good and a bad Claude Code experience.&lt;/p&gt;

&lt;p&gt;What is Plan Mode?&lt;br&gt;
A state where Claude can read files and ask questions, but cannot write or run anything. It proposes a full plan first. You review and approve before a single file is touched. Activate with Shift + Tab twice.&lt;/p&gt;

&lt;p&gt;What are Claude Skills?&lt;br&gt;
Reusable workflow instructions packaged as Markdown files in a ZIP or GitHub repo. Install once, run on demand. Claude follows the workflow consistently every time without re-explanation.&lt;/p&gt;

&lt;p&gt;Where do I find Skills?&lt;/p&gt;

&lt;p&gt;awesome-claude-skills on GitHub: &lt;a href="https://github.com/travisvn/awesome-claude-skills" rel="noopener noreferrer"&gt;https://github.com/travisvn/awesome-claude-skills&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;How much does Claude Code cost?&lt;br&gt;
It requires a paid Anthropic subscription. Pro is $20/month with roughly 45 messages per 5-hour window. Max 5x is $100/month. No free tier access.&lt;/p&gt;

&lt;p&gt;Can I use this for React Native development?&lt;br&gt;
Yes. Claude Code works with any file-based project. For React Native and Expo, the main thing is setting up CLAUDE.md with your stack details and conventions. Once that’s in place, Claude can refactor screens, add features, debug issues, and run Expo CLI commands the same way it does for any other project.&lt;/p&gt;

</description>
      <category>vibecoding</category>
      <category>ai</category>
      <category>anthropic</category>
      <category>claude</category>
    </item>
    <item>
      <title>Optimizing animations for 60 FPS with React Native Reanimated</title>
      <dc:creator>Malik Chohra</dc:creator>
      <pubDate>Thu, 19 Mar 2026 07:47:09 +0000</pubDate>
      <link>https://dev.to/malik_chohra/optimizing-animations-for-60-fps-with-react-native-reanimatedoptimizing-animations-for-60-fps-with-1beh</link>
      <guid>https://dev.to/malik_chohra/optimizing-animations-for-60-fps-with-react-native-reanimatedoptimizing-animations-for-60-fps-with-1beh</guid>
      <description>&lt;h2&gt;
  
  
  Before we start, a word:
&lt;/h2&gt;

&lt;p&gt;I started working on an AI native Boilerplate for Mobile Development. A solution that has a scalable and clean architecture, with the best approaches to have a great app performance. Adding more AI context and rules, to make the AI hallucinate less, and keep the clean code. You can use it either with Cursor, Antigravity, Claude Code,… and it gives the amazing results as expected. Also, it has most important features that help you launch your app fast &lt;br&gt;
I m now in the Beta version, where i need people to test it, and gather feedback, you will get access to the code base for free, and i m looking for feedbacks.&lt;/p&gt;

&lt;p&gt;Check it here: &lt;a href="https://aimobilelauncher.com/" rel="noopener noreferrer"&gt;https://aimobilelauncher.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Also, I m working on a newsletter for Tech and non tech people, on how to use AI tools for App development: &lt;a href="https://aimeetcode.substack.com/" rel="noopener noreferrer"&gt;https://aimeetcode.substack.com/&lt;/a&gt;. Subscribe here: &lt;a href="https://aimeetcode.substack.com/" rel="noopener noreferrer"&gt;https://aimeetcode.substack.com/&lt;/a&gt;&lt;br&gt;
If you need custom solution, or a mobile development, contact us in :&lt;a href="https://casainnov.com/" rel="noopener noreferrer"&gt;https://casainnov.com/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Smooth animations aren't a "nice-to-have." When users say "this app feels slow," they almost always mean animations are dropping frames - even if they'd never describe it that way.&lt;br&gt;
After shipping features on apps with millions of active users, I've learned that animation performance is one of the first things that breaks at scale and one of the hardest to debug if you haven't seen the failure modes before. Here's what actually holds up in production.&lt;/p&gt;

&lt;p&gt;Speaking of scale: in Mobile apps, I mean by scale is a bigger team, a lot of users who each person have a different devices, operating system, slow and old devices, or different sizes. In this part, you need to architect your app way better before&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;60 FPS means keeping animations off the JS thread&lt;br&gt;
Use shared values, not React state&lt;br&gt;
Animate transform + opacity; avoid layout properties&lt;br&gt;
Batch animations and keep logic simple&lt;br&gt;
Test on real devices, not simulators&lt;/p&gt;

&lt;p&gt;Why it matters&lt;/p&gt;

&lt;p&gt;Dropped frames make an app feel slow. Janky gestures make it feel cheap. And inconsistent motion is hard to explain to a product manager but immediately obvious to users. Beyond UX, smoother animations also mean better battery life, better behavior on low-end devices, and less competition with your business logic.&lt;br&gt;
The one rule that matters most&lt;/p&gt;

&lt;p&gt;If your animation depends on the JS thread, you've already lost.&lt;br&gt;
Reanimated runs animations on the UI thread, independent from JS. Everything else in this article is just ways to not break that.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Animate only what the native driver supports
&lt;/h3&gt;

&lt;p&gt;Safe: transform, opacity. Slow: width, height, backgroundColor, anything layout-driven.&lt;br&gt;
`&lt;br&gt;
// Good&lt;br&gt;
const style = useAnimatedStyle(() =&amp;gt; ({&lt;br&gt;
  opacity: opacity.value,&lt;br&gt;
  transform: [{ translateY: y.value }, { scale: scale.value }],&lt;br&gt;
}));&lt;/p&gt;

&lt;p&gt;// Bad&lt;br&gt;
const style = useAnimatedStyle(() =&amp;gt; ({&lt;br&gt;
  width: width.value,&lt;br&gt;
  height: height.value,&lt;br&gt;
}));`&lt;/p&gt;

&lt;p&gt;If you feel like you need to animate the layout, stop and rethink the design. The animation is probably covering for a structural problem.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. One shared value, not five
&lt;/h3&gt;

&lt;p&gt;I still see this in senior-level code:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;// Too many values&lt;br&gt;
const opacity = useSharedValue(0);&lt;br&gt;
const scale = useSharedValue(0);&lt;br&gt;
const translateY = useSharedValue(0);&lt;br&gt;
Collapse them:&lt;br&gt;
const progress = useSharedValue(0);&lt;br&gt;
const style = useAnimatedStyle(() =&amp;gt; ({&lt;br&gt;
  opacity: progress.value,&lt;br&gt;
  transform: [&lt;br&gt;
    { scale: progress.value },&lt;br&gt;
    { translateY: (1 - progress.value) * 20 },&lt;br&gt;
  ],&lt;br&gt;
}));&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;One value, fewer calculations, smoother frames. The math is trivial on the UI thread.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Batch your animations
&lt;/h3&gt;

&lt;p&gt;Starting animations at different times means the thread is doing more work than it needs to. A single withTiming can drive opacity, scale, and translation at once:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;useEffect(() =&amp;gt; {&lt;br&gt;
  progress.value = withTiming(1, { duration: 300 });&lt;br&gt;
}, []);&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Obvious in hindsight, but easy to miss when you're wiring up components quickly.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Springs for gestures
&lt;/h3&gt;

&lt;p&gt;Timing functions work fine for entrances and exits. For gestures, springs are better - they feel more physical, and they put less pressure on the frame budget:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;translateX.value = withSpring(0, {&lt;br&gt;
  damping: 15,&lt;br&gt;
  stiffness: 150,&lt;br&gt;
});&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This matters most for drag, swipe, and scroll interactions, where any stiffness or lag is immediately noticeable.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Keep gesture handlers dumb
&lt;/h3&gt;

&lt;p&gt;No conditionals. No calculations. No JS calls inside gesture handlers.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;onActive: (event) =&amp;gt; {&lt;br&gt;
  x.value = event.translationX;&lt;br&gt;
  y.value = event.translationY;&lt;br&gt;
}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The UI thread moves pixel. Anything else belongs else where.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Clean up animations
&lt;/h3&gt;

&lt;p&gt;Animations that outlive their components create memory pressure. Easy to overlook, adds up on apps with deep navigation:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;useEffect(() =&amp;gt; {&lt;br&gt;
  return () =&amp;gt; {&lt;br&gt;
    progress.value = 0;&lt;br&gt;
  };&lt;br&gt;
}, []);&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  7. How to test
&lt;/h3&gt;

&lt;p&gt;Simulators will lie to you. A simulator doesn't have thermal throttling, doesn't run on 3GB of RAM, and doesn't have fifteen background apps fighting for CPU. Test on low-end Android, older iPhones, and devices that have been warm for a while.&lt;br&gt;
If it holds up there, you're fine.&lt;/p&gt;

&lt;p&gt;Always go with an old device, &lt;/p&gt;

&lt;h3&gt;
  
  
  What I actually see in code reviews
&lt;/h3&gt;

&lt;p&gt;Animating every component entry - motion should mean something; overuse kills that&lt;br&gt;
Animations tied to React state - state updates and animation updates are not the same thing&lt;br&gt;
Durations over 500ms - they feel slow and block frames; tighten them&lt;br&gt;
Elaborate easing curves - usually not worth it; keep it consistent&lt;/p&gt;

&lt;h4&gt;
  
  
  Before you ship
&lt;/h4&gt;

&lt;p&gt;Ask yourself: Is this running on the UI thread? Can one shared value drive it? Did I test it on real hardware? If yes across the board, you're done.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;Does Reanimated always guarantee 60 FPS?&lt;br&gt;
 No. It gives you the right architecture. You still have to use it correctly.&lt;/p&gt;

&lt;p&gt;Should I use Reanimated for every animation?&lt;br&gt;
 Not necessarily. Simple layout animations are fine with LayoutAnimation. Reanimated earns its complexity with gestures and anything UI-thread-sensitive.&lt;/p&gt;

&lt;p&gt;Are springs always better than timing?&lt;br&gt;
 For interactions, yes. For entrances and exits, timing is usually fine and easier to control.&lt;/p&gt;

&lt;p&gt;Is performance worse with Expo?&lt;br&gt;
 No. Expo and Reanimated together are production-proven&lt;/p&gt;

&lt;h2&gt;
  
  
  Example from the AI Mobile Launcher
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs39dcd753zkk84vs1t2v.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs39dcd753zkk84vs1t2v.gif" alt=" " width="295" height="640"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>reactnative</category>
      <category>mobile</category>
      <category>animation</category>
      <category>vibecoding</category>
    </item>
    <item>
      <title>Integrate DeepSeek AI into React Native app: Full guide for Generative AI in React Native</title>
      <dc:creator>Malik Chohra</dc:creator>
      <pubDate>Sat, 08 Mar 2025 10:06:35 +0000</pubDate>
      <link>https://dev.to/malik_chohra/integrate-deepseek-ai-into-react-native-app-full-guide-for-generative-ai-in-react-native-397k</link>
      <guid>https://dev.to/malik_chohra/integrate-deepseek-ai-into-react-native-app-full-guide-for-generative-ai-in-react-native-397k</guid>
      <description>&lt;p&gt;Integrate DeepSeek AI into React Native appIntegrate DeepSeek AI into React Native app: Full guide for Generative AI in React Native&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;React Native has revolutionized mobile app development by enabling developers to build native applications using JavaScript and React. Since its introduction by Facebook (now Meta) in 2015, it has become one of the most popular frameworks for cross-platform mobile development, powering thousands of apps across iOS and Android platforms.&lt;/p&gt;

&lt;p&gt;We've witnessed an unprecedented race in generative AI development in the last year. While OpenAI's GPT series and Anthropic's Claude have dominated headlines, open-source alternatives like Meta's Llama and DeepSeek are rapidly gaining traction. These open-source models are particularly interesting because they offer comparable performance while providing more flexibility and control over deployment.&lt;/p&gt;

&lt;p&gt;Companies are racing to create an AGI that can solve all the humans problems, although the road is still far for that in my opinion, but we are getting closer each time, and billions of dollars are spent on that. For example the 500 billions projects in USA and the 50 billions AI investment from UAE in France.&lt;/p&gt;

&lt;p&gt;DeepSeek, in particular, has shown impressive results in recent benchmarks. According to their technical report, DeepSeek has demonstrated superior performance in coding tasks and mathematical reasoning compared to other open-source models. Their 67B parameter model has achieved competitive results against GPT-4 in several benchmarks, making it an attractive option for developers looking for powerful AI capabilities in their applications.&lt;/p&gt;

&lt;p&gt;DeepSeek's impressive performance in benchmarks suggests a promising future for open-source AI models. As these models continue to improve, developers will have more options for implementing AI capabilities in their applications without being locked into proprietary solutions.&lt;br&gt;
The ability to self-host these models or use them through APIs provides flexibility in deployment options, which is particularly important for applications with specific privacy or regulatory requirements.&lt;/p&gt;

&lt;p&gt;In this article, I will explain to you how to use it inside a React and React Native app, although the funny part is that they use Open ai SDK package to integrate their solution, which is a clever move from the company to make the switch easy, as the price/performance quote is much better if you use Deepseek that using Open AI models&lt;/p&gt;
&lt;h2&gt;
  
  
  Integrating DeepSeek AI in React Native
&lt;/h2&gt;

&lt;p&gt;Let's walk through the process of integrating DeepSeek AI into a React Native application to create an AI chat interface.&lt;br&gt;
&lt;strong&gt;1. Setting Up the Project&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;First, ensure you have the necessary dependencies installed:&lt;br&gt;
context&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm install react-native-gifted-chat axios react-native-paper react-native-safe-area-context&lt;br&gt;
// or if you are using Yarn&lt;br&gt;
yarn install react-native-gifted-chat axios react-native-paper react-native-safe-area-context&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Creating the Chat Interface&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The implementation uses react-native-gifted-chat, a popular library for building chat interfaces in React Native. Here's how to structure your component:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;import React, {useState, useCallback, useEffect} from 'react';&lt;br&gt;
import {GiftedChat, IMessage} from 'react-native-gifted-chat';&lt;br&gt;
import axios from 'axios';&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Configuration&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Set up your DeepSeek API credentials:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;const DEEPSEEK_API_URL = 'https://api.deepseek.com/v1/chat/completions';&lt;br&gt;
const DEEPSEEK_API_KEY = 'Your_API_Key_Here';&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Implementing the Chat Logic&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The core functionality revolves around two main parts:&lt;br&gt;
Message Management&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const [messages, setMessages] = useState&amp;lt;IMessage[]&amp;gt;([]);
const [loading, setIsLoading] = useState(false);

// Initialize with a welcome message
useEffect(() =&amp;gt; {
  setMessages([
    {
      _id: 0,
      text: 'Type your question or share what's on your mind…',
      createdAt: new Date(),
      user: {
        _id: 0,
        name: 'DeepSeek',
        // url for deepseek logo
        avatar: 'https://cdn.deepseek.com/platform/favicon.png', 
      },
    },
  ]);
}, []);

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;6. API Integration&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const sendMessageToDeepSeek = async (userMessage: IMessage) =&amp;gt; {
  setIsLoading(true);
  try {
    const response = await axios.post(
      DEEPSEEK_API_URL,
      {
        model: 'deepseek-chat',
        messages: [{role: 'user', content: userMessage}],
      },
      {
        headers: {
          Authorization: `Bearer ${DEEPSEEK_API_KEY}`,
          'Content-Type': 'application/json',
        },
      },
    );
    // Process response and update chat
  } catch (error) {
    console.error('DeepSeek API Error:', error);
  } finally {
    setIsLoading(false);
  }

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;7. UI Customization&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const renderInputToolbar = (props: InputToolbarProps&amp;lt;IMessage&amp;gt;) =&amp;gt; (
  &amp;lt;InputToolbar {...props} containerStyle={{backgroundColor: '#f0f0f0'}} /&amp;gt;
);

const renderSend = (props: SendProps&amp;lt;IMessage&amp;gt;) =&amp;gt; (
  &amp;lt;Send {...props}&amp;gt;
    &amp;lt;View style={styles.sendButton}&amp;gt;
      &amp;lt;Icon source="send" color="blue" size={30} /&amp;gt;
    &amp;lt;/View&amp;gt;
  &amp;lt;/Send&amp;gt;
);

return (
&amp;lt;GiftedChat
        messages={messages}
        onSend={messages =&amp;gt; onSend(messages)}
        onInputTextChanged={setText}
        bottomOffset={insets.bottom}
        renderSend={renderSend}
        renderInputToolbar={renderInputToolbar}
        renderChatFooter={renderFooter}
        scrollToBottomComponent={renderScrollToBottom}
        user={{
          _id: '1',
          name: 'Malik',
          avatar: PROFILE_IMAGE,
        }}
      /&amp;gt;
)

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The interface can be customized using custom renderers:&lt;/p&gt;

&lt;p&gt;Check the full projects &lt;a href="https://reactnativetemplates.com/screensCode/19" rel="noopener noreferrer"&gt;and code here&lt;/a&gt;: &lt;a href="https://reactnativetemplates.com/screensCode/19" rel="noopener noreferrer"&gt;https://reactnativetemplates.com/screensCode/19&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  React Native Template
&lt;/h2&gt;

&lt;p&gt;React Native Template, contains beaultifully designed, expert crafted React Native components and screens. To Help you…r&lt;/p&gt;

&lt;p&gt;&lt;a href="https://reactnativetemplates.com/" rel="noopener noreferrer"&gt;https://reactnativetemplates.com/&lt;/a&gt; &lt;a href="https://reactnativetemplates.com/" rel="noopener noreferrer"&gt;react native links&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Best Practices and Considerations
&lt;/h2&gt;

&lt;p&gt;API Key Security: Never expose your API key in the client-side code. Use environment variables or a backend service to secure your credentials.&lt;br&gt;
Error Handling: Implement robust error handling for API calls and network issues.&lt;br&gt;
Loading States: Provide visual feedback during API calls using loading indicators.&lt;br&gt;
Message Persistence: Consider implementing local storage to persist chat history.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Integrating DeepSeek AI into a React Native application is straightforward and opens up possibilities for creating sophisticated AI-powered chat interfaces. As the AI landscape continues to evolve, having knowledge of implementing these integrations becomes increasingly valuable for modern mobile developers.&lt;br&gt;
 - -&lt;br&gt;
This article provides a comprehensive overview of integrating DeepSeek AI with React Native, from the technical implementation details to the broader industry context. You may want to add specific benchmark numbers and more recent comparisons as they become available, as well as any additional implementation details specific to your use case.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get the Best React Native Templates in 2025: Community work
&lt;/h2&gt;

&lt;p&gt;Jumpstart your app development with high-quality React Native templates! Discover a variety of pre-designed screens and code examples at &lt;a href="https://reactnativetemplates.com" rel="noopener noreferrer"&gt;React Native Templates&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://reactnativetemplates.com/" rel="noopener noreferrer"&gt;https://reactnativetemplates.com/&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Want to contribute and showcase your React Native expertise? You can easily add your own templates to share with the community and gain valuable exposure. Browse our diverse collection of React Native screens to find the ideal foundation for your next project.&lt;br&gt;
If you need to integrate Advanced functionalities in your Mobile app, create one from scratch, or need consulting in react native. Visit the casainnov.com, and check their mobile app page, and contact them there.&lt;/p&gt;

&lt;p&gt;I share insights about React Native, React, and Typescript. Follow me on Linkedin or Medium.&lt;/p&gt;

&lt;h1&gt;
  
  
  ReactNative #WebSockets #RealTime #MobileDevelopment #AppDevelopment #TechInnovation #Coding #JavaScript #MobileApps #DevCommunity #SocketProgramming #RealTimeCommunication #TechNavy #TurboModule #nativeModule
&lt;/h1&gt;

</description>
      <category>reactnative</category>
      <category>deepseek</category>
      <category>ai</category>
      <category>mobile</category>
    </item>
    <item>
      <title>Use Generative AI in React Native: Create Mistral AI Mobile app</title>
      <dc:creator>Malik Chohra</dc:creator>
      <pubDate>Sat, 23 Nov 2024 12:32:03 +0000</pubDate>
      <link>https://dev.to/malik_chohra/use-generative-ai-in-react-native-create-mistral-ai-mobile-app-3nkg</link>
      <guid>https://dev.to/malik_chohra/use-generative-ai-in-react-native-create-mistral-ai-mobile-app-3nkg</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Generative AI tools have been leading the headlines for quite some time now, with each new release promising to reshape the way we live, work, and interact with technology. These emerging tools have plainly caused a spark of innovation from automating creative processes to enabling human-like conversations. Every few months, we hear about a new generative AI tool that claims to be a game-changer, fueling the hype and setting expectations sky-high.&lt;/p&gt;

&lt;p&gt;While much of this development has centered around the web, recent advancements have started to shift attention to the desktop. Tools are now incorporating AI features directly into operating systems or productivity software, increasing convenience and functionality for users on the desktop. Still, one major market remains under-served: mobile applications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mobile applications&lt;/strong&gt; are at the heart of our lifestyles today and hold a host of opportunities for integrating generative AI into them. The global mobile application market size was valued at USD 252.89 billion in 2023 and is projected to grow at a compound annual growth rate (CAGR) of 14.3%&lt;/p&gt;

&lt;p&gt;From 2024 to 2030 From AI-powered chatbots that can be embedded in messaging applications, and personalized content creators used through social media platforms, to productivity applications that can compose emails or summarize documents on the go, the potential of mobile applications to deploy generative AI is immense; a space where very few tools have dared to venture.&lt;br&gt;
**&lt;br&gt;
Read full article here: &lt;a href="https://casainnov.com/use-generative-ai-in-react-native-create-mistral-ai-mobile-app" rel="noopener noreferrer"&gt;https://casainnov.com/use-generative-ai-in-react-native-create-mistral-ai-mobile-app&lt;/a&gt;&lt;br&gt;
**&lt;br&gt;
Generative AI Tools: A Snapshot&lt;br&gt;
Generative AI is not a vertically oriented market. Several big names lead the charge in this crowded field. Quick overview:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ChatGPT&lt;/strong&gt;, courtesy of OpenAI, perhaps is the most well-known. It has become synonymous with generative AI. From casual conversations to deep problem-solving, it is in wide usage. By leading the charge, it has smoothened the way for developers to integrate AI into their web apps via APIs.: &lt;a href="https://openai.com/" rel="noopener noreferrer"&gt;https://openai.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gemini by Google DeepMind&lt;/strong&gt;: This exciting new entrant in the generative AI space introduces multimodal capabilities to handle both text and image processing. Positioning itself firmly as a hard competitor to ChatGPT on both performance and versatility.: &lt;a href="https://gemini.google.com/" rel="noopener noreferrer"&gt;https://gemini.google.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Claude by Anthropic&lt;/strong&gt;: Designed for safety and reliability, Claude aims at helpful and less biased outputs. It’s gaining traction for applications where quality of content and ethics in AI use are a priority.: &lt;a href="https://claude.ai/" rel="noopener noreferrer"&gt;https://claude.ai/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mistral AI&lt;/strong&gt;: A European player, Mistral AI offers high-performance and scalable, developer-friendly tools. It might not have the same brand recognition in the market today as ChatGPT or Claude, but its underlying APIs have much potential in certain use cases.: &lt;a href="https://mistral.ai/" rel="noopener noreferrer"&gt;https://mistral.ai/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ai Tools comparaison&lt;/strong&gt;&lt;br&gt;
Mistral AI: Lagging Behind in Adoption&lt;br&gt;
Despite the fact that Mistral AI has all the makings of a promising player in the generative AI ecosystem, it is still struggling to break into the mainstream. Unlike OpenAI, which enjoys great publicity and overall exposure in every big platform, Mistral AI is still carving its niche. Contributing reasons include:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Insufficient Marketing&lt;/strong&gt;: Mistral AI has failed to enjoy the buzz in marketing like its other competitors, especially in non-European markets.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Developer-Centric&lt;/strong&gt;: While this makes Mistral AI an excellent choice for more technical users, the wide consumer market has yet to be captured.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Neglecting Mobile&lt;/strong&gt;: Similar to many generative AI tools out there, Mistral AI has placed most of its efforts into web-based solutions, leaving a large gap in its mobile integration and adoption.&lt;/p&gt;

&lt;p&gt;This, however, is an exciting gap. The idea is to bring Mistral AI into the mobile domain, not only realizing its potential but also showcasing the generative AI capabilities beyond traditional markets. This is what I tried to achieve in my project: using Mistral AI’s generative API within a React Native app, showing how such generative AI could add value to mobile apps and expand the effect of generative AI into everyday mobile experiences&lt;/p&gt;

&lt;h2&gt;
  
  
  React native and Generative AI tools
&lt;/h2&gt;

&lt;p&gt;The best part about React Native is the usage of Typescript, which includes the usage of Typescript API tools, the same that is used in React for example. most of the apps that have a Web presence, can be integrated into a Mobile app to offer the same service.&lt;/p&gt;

&lt;p&gt;Also, it will generate an app that works for both Android and iOS, which makes it easier to attract more users. and with the latest performance updates ( the new architecture), businesses are shipping a native feeling Apps in React native, with half the time of development and half the effort.&lt;/p&gt;

&lt;p&gt;Of course, there is a difference when it comes to that, but usually the same approach.&lt;/p&gt;

&lt;p&gt;Step by step to implement Generative AI API in React Native&lt;br&gt;
In this tutorial, I create a Mistral AI Mobile app in React native, I will walk you through the tutorial step by step in order to do that:&lt;/p&gt;

&lt;p&gt;The GitHub link: &lt;a href="https://github.com/chohra-med/mistralAIRN" rel="noopener noreferrer"&gt;https://github.com/chohra-med/mistralAIRN&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;The app contains the following,&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
— The app was developed using My boilerplate: &lt;a href="https://blog.stackademic.com/architect-your-react-native-app-to-handle-millions-of-users-and-large-development-teams-cfc566ea8bf0" rel="noopener noreferrer"&gt;https://blog.stackademic.com/architect-your-react-native-app-to-handle-millions-of-users-and-large-development-teams-cfc566ea8bf0&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Dark and Light Mode: &lt;a href="https://medium.com/@malikchohra/build-for-scale-use-a-design-system-in-your-react-native-app-0224797da39b" rel="noopener noreferrer"&gt;https://medium.com/@malikchohra/build-for-scale-use-a-design-system-in-your-react-native-app-0224797da39b&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Hide keys in React native using the config: &lt;a href="https://casainnov.com/securing-sensitive-keys-in-react-native-with-react-native-config" rel="noopener noreferrer"&gt;https://casainnov.com/securing-sensitive-keys-in-react-native-with-react-native-config&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Internalization: &lt;a href="https://medium.com/@malikchohra/build-for-scale-use-internalization-for-react-native-6fb9f5c06dd2" rel="noopener noreferrer"&gt;https://medium.com/@malikchohra/build-for-scale-use-internalization-for-react-native-6fb9f5c06dd2&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Redux for state management and API calls: &lt;a href="https://casainnov.com/build-for-scale-infinite-scroll-using-react-query-with-redux-toolkit-in-react-and-react-native" rel="noopener noreferrer"&gt;https://casainnov.com/build-for-scale-infinite-scroll-using-react-query-with-redux-toolkit-in-react-and-react-native&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;E2e and Unit testing: &lt;a href="https://medium.com/@malikchohra/guide-to-testing-in-react-native-end-to-end-test-using-detox-f29fd1344180" rel="noopener noreferrer"&gt;https://medium.com/@malikchohra/guide-to-testing-in-react-native-end-to-end-test-using-detox-f29fd1344180&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Animation Handling: &lt;a href="https://casainnov.com/learn-animation-in-react-native-using-reanimated-library" rel="noopener noreferrer"&gt;https://casainnov.com/learn-animation-in-react-native-using-reanimated-library&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fastlane for CI-CD: &lt;a href="https://medium.com/@malikchohra/ci-cd-pipeline-for-react-native-apps-use-fastlane-and-github-actions-40f9ad2036d0" rel="noopener noreferrer"&gt;https://medium.com/@malikchohra/ci-cd-pipeline-for-react-native-apps-use-fastlane-and-github-actions-40f9ad2036d0&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;React Navigation: &lt;a href="https://medium.com/@malikchohra/build-for-scale-best-approach-on-how-to-use-react-navigation-in-react-native-d3eb7362c80e" rel="noopener noreferrer"&gt;https://medium.com/@malikchohra/build-for-scale-best-approach-on-how-to-use-react-navigation-in-react-native-d3eb7362c80e&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It uses Gifted Chat: &lt;a href="https://github.com/FaridSafi/react-native-gifted-chat" rel="noopener noreferrer"&gt;https://github.com/FaridSafi/react-native-gifted-chat&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Integrating Mistral AI
&lt;/h2&gt;

&lt;p&gt;**step 1: Do as any Developer: Read the documentation&lt;br&gt;
**If you want to learn more about the API calls that they offer and how you can use them, read this first: &lt;a href="https://docs.mistral.ai/getting-started/quickstart/" rel="noopener noreferrer"&gt;https://docs.mistral.ai/getting-started/quickstart/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;**step 2: Get An API Key and put it inside your config file&lt;br&gt;
**To use Mistral Ai in your app, you need to get an API key from them, just go to their portal and it is easy to get one.&lt;br&gt;
add that to your .env file, as explained in this article : &lt;a href="https://casainnov.com/securing-sensitive-keys-in-react-native-with-react-native-config" rel="noopener noreferrer"&gt;https://casainnov.com/securing-sensitive-keys-in-react-native-with-react-native-config&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;//.env&lt;br&gt;
MISTRAL_API_KEY=your_api_key_here&lt;br&gt;
MISTRAL_API_URL=https://api.mistral.ai/v1/chat/completions&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;step 3: do the API call and integrate that to Redux&lt;/strong&gt;&lt;br&gt;
As explained in the Redux article, create your API call to get the answers from Mistral AI, add that to redux and create your store and reducer&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;step 4&lt;/strong&gt;: create your UI&lt;br&gt;
we are using Gifted Chat to display answers. read more here in their package: &lt;a href="https://github.com/FaridSafi/react-native-gifted-chat/" rel="noopener noreferrer"&gt;https://github.com/FaridSafi/react-native-gifted-chat/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;**step 5: Create Custom Input component&lt;br&gt;
**For this tutorial, to include the custom theme, and add functionalities, I created a custom Input, check the code here: &lt;a href="https://github.com/chohra-med/mistralAIRN/blob/main/src/screens/HomeScreen/components/CustomizedInputProps.tsx" rel="noopener noreferrer"&gt;https://github.com/chohra-med/mistralAIRN/blob/main/src/screens/HomeScreen/components/CustomizedInputProps.tsx&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;**Step 6: finalize and test&lt;br&gt;
**Do the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add your navigation&lt;/li&gt;
&lt;li&gt;add your color theme&lt;/li&gt;
&lt;li&gt;add container for dark mode handling&lt;/li&gt;
&lt;li&gt;add different languages that you use&lt;/li&gt;
&lt;li&gt;add your tests: Unit and E2E&lt;/li&gt;
&lt;li&gt;add your Fastlane for CI CD&lt;/li&gt;
&lt;li&gt;The output of the app:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Mistral ai app usig React Native&lt;br&gt;
**What can be added:&lt;br&gt;
**You can add the following to make the app even better:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Persist conversation to save them for later&lt;/li&gt;
&lt;li&gt;Add Lazy Loading for the screens&lt;/li&gt;
&lt;li&gt;Debounce Input: Prevent rapid API calls by debouncing user inputs&lt;/li&gt;
&lt;li&gt;Error Handling: Provide user-friendly error messages for failed API calls.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Generative AI is going to change the way we interact with technology. The integration of this into mobile applications opens the world for endless possibilities. A lot of tools, like ChatGPT, Gemini, and Claude, are reigning supreme on the web and desktop spaces, but there is an untapped opportunity to bring this powerhouse into our pocket. This article demonstrated how one can harness the power of Mistral AI in a React Native app by showing exactly how to merge bleeding-edge technology with mobile platforms.&lt;/p&gt;

&lt;p&gt;By walking through a practical use case — from defining the purpose to implementing API calls and building an intuitive UI — we’ve shown that integrating generative AI into mobile apps is not only achievable but also a step toward shaping the next generation of mobile experiences. Mistral AI, despite its lower adoption compared to its competitors, provides developers with robust tools that can redefine mobile app functionality.&lt;/p&gt;

&lt;p&gt;As generative AI continues to evolve, developers have the chance to drive this technology beyond hype and into practical, everyday solutions. Whether it’s crafting personalized experiences, automating workflows, or building smarter apps, the possibilities are endless. Now, it’s your turn to experiment and innovate — because the future of AI is mobile, and it’s waiting to be built.&lt;/p&gt;

&lt;p&gt;If you need to integrate Advanced functionalities in your Mobile app, create one from scratch, or need consulting in react native. Visit the casainnov.com, and check their mobile app page, and contact them there.&lt;/p&gt;

&lt;p&gt;I share insights about React Native, React, and Typescript. Follow me on Linkedin or Medium.&lt;/p&gt;

&lt;h1&gt;
  
  
  ReactNative #WebSockets #RealTime #MobileDevelopment #AppDevelopment #TechInnovation #Coding #JavaScript #MobileApps #DevCommunity #SocketProgramming #RealTimeCommunication #TechNavy #generativeAI #mistralAI
&lt;/h1&gt;

</description>
      <category>reactnative</category>
      <category>genai</category>
      <category>mistral</category>
      <category>mobile</category>
    </item>
    <item>
      <title>Architect Your React Native app to handle Millions of Users and Large Development Teams</title>
      <dc:creator>Malik Chohra</dc:creator>
      <pubDate>Sun, 20 Oct 2024 14:51:23 +0000</pubDate>
      <link>https://dev.to/malik_chohra/architect-your-react-native-app-to-handle-millions-of-users-and-large-development-teams-184a</link>
      <guid>https://dev.to/malik_chohra/architect-your-react-native-app-to-handle-millions-of-users-and-large-development-teams-184a</guid>
      <description>&lt;p&gt;**&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;**&lt;/p&gt;

&lt;p&gt;When building a React Native app, poor structure and architecture can lead to significant pain points that affect the development process and user experience. Without a solid foundation, scaling your app can become a daunting task. Here are some common pain points you may encounter with a poorly structured React Native codebase:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Difficulty in Scaling&lt;/strong&gt;: Adding new features becomes increasingly complex as the codebase grows, often leading to tangled code and duplicated logic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reduced Maintainability&lt;/strong&gt;: A disorganized architecture makes it harder to debug, extend, or refactor the code, resulting in higher maintenance costs over time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Performance Issues&lt;/strong&gt;: Inefficient code structures, unoptimized asset management, or excessive re-renders can degrade the app's performance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Developer Onboarding Challenges&lt;/strong&gt;: New team members struggle to understand and contribute to the project if the folder structure and code organization lack clarity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Testing Complexity&lt;/strong&gt;: Without a clear separation of concerns, writing unit and integration tests becomes cumbersome, leading to low test coverage and less reliable software.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tech Debt Accumulation&lt;/strong&gt;: As the project evolves, quick fixes and shortcuts add up, leading to a large amount of technical debt that slows down development.&lt;/p&gt;

&lt;p&gt;A well-structured codebase can prevent these issues by fostering a modular and scalable approach to organizing your app. In this article, we'll dive into best practices for architecting a React Native application that scales seamlessly as your project grows. We'll discuss a boilerplate setup with a configuration that provides a solid starting point for structuring your app, helping you avoid common pitfalls and ensuring long-term maintainability and performance. Whether you're setting up a new project or refactoring an existing one, following these guidelines will give your app the robust foundation it needs to thrive.&lt;/p&gt;

&lt;h2&gt;
  
  
  What should you take into account when creating your React Native app?
&lt;/h2&gt;

&lt;h2&gt;
  
  
  1. Learn the Clean Code principles:
&lt;/h2&gt;

&lt;p&gt;When it comes to having a robust architecture, you need to take into account different clean code principles, a summary of that is here: &lt;a href="https://gist.github.com/wojteklu/73c6914cc446146b8b533c0988cf8d29" rel="noopener noreferrer"&gt;https://gist.github.com/wojteklu/73c6914cc446146b8b533c0988cf8d29&lt;/a&gt;&lt;br&gt;
But when it comes to using that in React or React Native app, we need to use a React approach, I wrote this article a time ago here: &lt;a href="https://medium.com/@malikchohra/structure-your-react-native-app-for-scale-part-1-patterns-and-principles-to-master-a3b24b6acf97.%C2%A0" rel="noopener noreferrer"&gt;https://medium.com/@malikchohra/structure-your-react-native-app-for-scale-part-1-patterns-and-principles-to-master-a3b24b6acf97. &lt;/a&gt;&lt;br&gt;
Where I talked about which principles and code patterns that you need to take into account when working with React or React Native.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. What are the things that are specific for a React or a React Native app:
&lt;/h2&gt;

&lt;p&gt;In this section, I will talk about what needs to be taken into account when working with React or a React native app, how to solve it, and which articles or resources you can learn from. &lt;/p&gt;

&lt;h2&gt;
  
  
  Modular Code Organization:
&lt;/h2&gt;

&lt;p&gt;Structure your codebase into meaningful folders and modules (e.g., Components, Screens, API, Redux, Hooks) to ensure a clear separation of concerns, improve readability, and simplify maintenance.&lt;br&gt;
You can use different Patterns and principles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SOLID principles for example): &lt;a href="https://medium.com/stackademic/use--" rel="noopener noreferrer"&gt;https://medium.com/stackademic/use--&lt;/a&gt; -solid-principles-in-react-react-native-663b8cabfa2b&lt;/li&gt;
&lt;li&gt;Facade pattern: &lt;a href="https://medium.com/@malikchohra/build-to-scale-the-facade-pattern-1f5db01226a9" rel="noopener noreferrer"&gt;https://medium.com/@malikchohra/build-to-scale-the-facade-pattern-1f5db01226a9&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Higher Order component in React: &lt;a href="https://medium.com/@malikchohra/build-for-scale-higher-order-component-hoc-in-react-and-react-nativethis-series-of-build-for-8b9e3dc96317" rel="noopener noreferrer"&gt;https://medium.com/@malikchohra/build-for-scale-higher-order-component-hoc-in-react-and-react-nativethis-series-of-build-for-8b9e3dc96317&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Other principles: But when it comes to using that in React or React Native app, we need to use a React approach, I wrote this article a time ago here: &lt;a href="https://medium.com/@malikchohra/structure-your-react-native-app-for-scale-part-1-patterns-and-principles-to-master-a3b24b6acf97" rel="noopener noreferrer"&gt;https://medium.com/@malikchohra/structure-your-react-native-app-for-scale-part-1-patterns-and-principles-to-master-a3b24b6acf97&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Reusable and Atomic Components:
&lt;/h2&gt;

&lt;p&gt;Build components using the atomic design principle (Atoms, Molecules, Organisms) to promote reusability, consistency, and a more structured approach to UI development.&lt;/p&gt;




&lt;h2&gt;
  
  
  Centralized State Management:
&lt;/h2&gt;

&lt;p&gt;Use a state management solution like Redux, MobX, or Context API to handle global states, making it easier to manage complex state changes and share data across the app.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;To learn how to use the Redux toolkit, check this: &lt;br&gt;
&lt;a href="https://medium.com/r?url=https%3A%2F%2Fcasainnov.com%2Fhow-to-use-redux-toolkit-for-your-react-and-react-native-app" rel="noopener noreferrer"&gt;https://medium.com/r?url=https%3A%2F%2Fcasainnov.com%2Fhow-to-use-redux-toolkit-for-your-react-and-react-native-app&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Learn different types of state management here: &lt;a href="https://medium.com/javascript-in-plain-english/build-for-scale-what-is-state-management-in-react-and-react-native-and-what-to-choose-4fc5151e233a" rel="noopener noreferrer"&gt;https://medium.com/javascript-in-plain-english/build-for-scale-what-is-state-management-in-react-and-react-native-and-what-to-choose-4fc5151e233a&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Scalable API Layer:
&lt;/h2&gt;

&lt;p&gt;Consistently organize API-related code, such as using class-based API structures and separate folders for mock data, to easily manage API calls, handle data fetching, and integrate different environments. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;example of using GraphQL: &lt;a href="https://medium.com/javascript-in-plain-english/mastering-graphql-in-react-native-a-step-by-step-guide-with-typescript-and-redux-toolkit-79f3bce1dae7" rel="noopener noreferrer"&gt;https://medium.com/javascript-in-plain-english/mastering-graphql-in-react-native-a-step-by-step-guide-with-typescript-and-redux-toolkit-79f3bce1dae7&lt;/a&gt;
or &lt;/li&gt;
&lt;li&gt;using API facade approach to get data: &lt;a href="https://medium.com/@malikchohra/build-for-scale-from-api-to-ui-using-react-query-to-fetch-and-display-data-in-react-native-and-235428a1db5b" rel="noopener noreferrer"&gt;https://medium.com/@malikchohra/build-for-scale-from-api-to-ui-using-react-query-to-fetch-and-display-data-in-react-native-and-235428a1db5b&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  CI/CD Integration:
&lt;/h2&gt;

&lt;p&gt;Automate building, testing, and deployment using tools like Fastlane for continuous integration and continuous delivery, ensuring a streamlined and error-free release process for both Android and iOS.&lt;br&gt;
You can use Fastlane in your React native app to ship faster to Apple Store and Google Play Store, integrate it with Github action: check these two resources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://medium.com/@malikchohra/ci-cd-pipeline-for-react-native-apps-use-fastlane-and-github-actions-40f9ad2036d0" rel="noopener noreferrer"&gt;https://medium.com/@malikchohra/ci-cd-pipeline-for-react-native-apps-use-fastlane-and-github-actions-40f9ad2036d0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://medium.com/@malikchohra/ci-cd-pipeline-for-react-native-apps-use-fastlane-and-github-actions-dcf101edc423" rel="noopener noreferrer"&gt;https://medium.com/@malikchohra/ci-cd-pipeline-for-react-native-apps-use-fastlane-and-github-actions-dcf101edc423&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Efficient Asset Management:
&lt;/h2&gt;

&lt;p&gt;Keep assets like images, icons, fonts, and other resources well-organized in a dedicated folder structure to avoid clutter and make asset management more straightforward.&lt;br&gt;
If you want:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;use a custom font, check this article: &lt;a href="https://medium.com/@malikchohra/build-for-scale-use-custom-fonts-in-react-native-5cae05ee1a99" rel="noopener noreferrer"&gt;https://medium.com/@malikchohra/build-for-scale-use-custom-fonts-in-react-native-5cae05ee1a99&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;use Fastimage for images: &lt;a href="https://medium.com/@malikchohra/build-for-scale-how-to-use-react-native-fast-image-393a647d60d5" rel="noopener noreferrer"&gt;https://medium.com/@malikchohra/build-for-scale-how-to-use-react-native-fast-image-393a647d60d5&lt;/a&gt;
use custom svg for icons: &lt;a href="https://medium.com/@malikchohra/build-for-scale-how-to-use-svgs-in-react-native-5f49ad4a7715" rel="noopener noreferrer"&gt;https://medium.com/@malikchohra/build-for-scale-how-to-use-svgs-in-react-native-5f49ad4a7715&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Theming and Styling:
&lt;/h2&gt;

&lt;p&gt;Use a consistent theming strategy by centralizing theme-related configurations (e.g., colors, typography, global styling) to maintain a unified look and feel across the app.&lt;br&gt;
To learn more about design systems, how to create your own in react native, and how to use it with react native paper&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;What is a design system for beginners: &lt;a href="https://medium.com/@malikchohra/build-for-scale-use-a-design-system-in-your-react-native-app-59353baec110" rel="noopener noreferrer"&gt;https://medium.com/@malikchohra/build-for-scale-use-a-design-system-in-your-react-native-app-59353baec110&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create your custom Theme: &lt;a href="https://medium.com/@malikchohra/build-for-scale-use-a-design-system-in-your-react-native-app-0224797da39b" rel="noopener noreferrer"&gt;https://medium.com/@malikchohra/build-for-scale-use-a-design-system-in-your-react-native-app-0224797da39b&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;-How to use React Native paper: React native paper &lt;a href="https://medium.com/@malikchohra/build-for-scale-use-a-design-system-in-your-react-native-app-5790982cae7e" rel="noopener noreferrer"&gt;https://medium.com/@malikchohra/build-for-scale-use-a-design-system-in-your-react-native-app-5790982cae7e&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Localization and Internationalization (i18n):
&lt;/h2&gt;

&lt;p&gt;Implement localization support early in development to ensure the app is prepared for multiple languages and regions without significant refactoring.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Learn how to use different languages in your react native app here: &lt;a href="https://medium.com/@malikchohra/build-for-scale-use-internalization-for-react-native-6fb9f5c06dd2" rel="noopener noreferrer"&gt;https://medium.com/@malikchohra/build-for-scale-use-internalization-for-react-native-6fb9f5c06dd2&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Custom Hooks:
&lt;/h2&gt;

&lt;p&gt;Create custom hooks for encapsulating logic related to data fetching, state updates, and other reusable functionalities to avoid code duplication and promote a clean separation of logic.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;You can check a great approach of how to use them for data fetching here: &lt;a href="https://medium.com/javascript-in-plain-english/build-for-scale-infinite-scroll-using-react-query-with-redux-toolkit-in-react-and-react-native-d27dab04df2a" rel="noopener noreferrer"&gt;https://medium.com/javascript-in-plain-english/build-for-scale-infinite-scroll-using-react-query-with-redux-toolkit-in-react-and-react-native-d27dab04df2a&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;or the usage of React query hook: &lt;a href="https://medium.com/javascript-in-plain-english/build-for-scale-infinite-scroll-using-react-query-with-redux-toolkit-in-react-and-react-native-d27dab04df2a" rel="noopener noreferrer"&gt;https://medium.com/javascript-in-plain-english/build-for-scale-infinite-scroll-using-react-query-with-redux-toolkit-in-react-and-react-native-d27dab04df2a&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Robust Testing Strategy:
&lt;/h2&gt;

&lt;p&gt;Set up a comprehensive testing framework (e.g., unit tests, integration tests, E2E tests) to catch bugs early, improve code quality, and ensure the app behaves as expected.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;You can learn more about how to use Detox for e2e testing, and Jest for testing here: &lt;a href="https://medium.com/@malikchohra/guide-to-testing-in-react-native-end-to-end-test-using-detox-f29fd1344180" rel="noopener noreferrer"&gt;https://medium.com/@malikchohra/guide-to-testing-in-react-native-end-to-end-test-using-detox-f29fd1344180&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Unit Testing &lt;a href="https://medium.com/@malikchohra/guide-to-testing-in-react-native-end-to-end-test-using-detox-f29fd1344180" rel="noopener noreferrer"&gt;https://medium.com/@malikchohra/guide-to-testing-in-react-native-end-to-end-test-using-detox-f29fd1344180&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Integration Test: &lt;a href="https://blog.stackademic.com/guide-to-testing-in-react-native-unit-and-integration-test-6cca27dfe293" rel="noopener noreferrer"&gt;https://blog.stackademic.com/guide-to-testing-in-react-native-unit-and-integration-test-6cca27dfe293&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Navigation Management:
&lt;/h2&gt;

&lt;p&gt;Structure navigation, with a dedicated folder for navigation configuration and screens, to keep the navigation flow organized and easy to manage as the app scales.&lt;br&gt;
You can read this article on what react-navigation is. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;to learn how to use it in react native: &lt;a href="https://medium.com/@malikchohra/build-for-scale-best-approach-on-how-to-use-react-navigation-in-react-native-d3eb7362c80e" rel="noopener noreferrer"&gt;https://medium.com/@malikchohra/build-for-scale-best-approach-on-how-to-use-react-navigation-in-react-native-d3eb7362c80e&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Error Handling and Logging:
&lt;/h2&gt;

&lt;p&gt;Implement centralized error handling and logging solutions to manage crashes, trace errors, and monitor app behavior, which will help debug and improve the app's reliability.&lt;br&gt;
Using a class to debug, add performance tools such as Firebase, Sentry or DataDog. &lt;/p&gt;




&lt;h2&gt;
  
  
  Performance and optimization app render:
&lt;/h2&gt;

&lt;p&gt;Performance is an important subject for advanced react native development.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;check how to get rid of console .log in your code base here: &lt;a href="https://medium.com/stackademic/build-for-scale-optimize-app-size-delete-console-log-from-your-app-8fb4ae9470d8" rel="noopener noreferrer"&gt;https://medium.com/stackademic/build-for-scale-optimize-app-size-delete-console-log-from-your-app-8fb4ae9470d8&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;use of Flashlit for big data rendering: &lt;a href="https://medium.com/javascript-in-plain-english/build-for-scale-improve-list-performance-using-flashlist-ec0e02804d15" rel="noopener noreferrer"&gt;https://medium.com/javascript-in-plain-english/build-for-scale-improve-list-performance-using-flashlist-ec0e02804d15&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The best approach to implementing infinite scroll: &lt;a href="https://medium.com/javascript-in-plain-english/build-for-scale-infinite-scroll-using-react-query-with-redux-toolkit-in-react-and-react-native-d27dab04df2a" rel="noopener noreferrer"&gt;https://medium.com/javascript-in-plain-english/build-for-scale-infinite-scroll-using-react-query-with-redux-toolkit-in-react-and-react-native-d27dab04df2a&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid Memory leak: &lt;a href="https://medium.com/stackademic/build-for-scale-avoid-memory-leaks-in-react-native-dc19b84d9958" rel="noopener noreferrer"&gt;https://medium.com/stackademic/build-for-scale-avoid-memory-leaks-in-react-native-dc19b84d9958&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Data and API security:
&lt;/h2&gt;

&lt;p&gt;When creating an app, you need to hide your sensitive keys inside it so you can comply with GDPR rules.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;learn more about how to use react native config to hide your keys here: &lt;a href="https://casainnov.com/securing-sensitive-keys-in-react-native-with-react-native-config" rel="noopener noreferrer"&gt;https://casainnov.com/securing-sensitive-keys-in-react-native-with-react-native-config&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Best User Experience and Animations:
&lt;/h2&gt;

&lt;p&gt;To have an amazing app that users love, and add more live feeling to your app. a great user experience is Mandatory.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;learn more about how to use react native reanimated: &lt;a href="https://casainnov.com/learn-animation-in-react-native-using-reanimated-library" rel="noopener noreferrer"&gt;https://casainnov.com/learn-animation-in-react-native-using-reanimated-library&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;you can skip a bad user experience by following this guideline: &lt;a href="https://medium.com/stackademic/anticipate-bad-user-experience-in-your-react-react-native-app-40af5d9d1334" rel="noopener noreferrer"&gt;https://medium.com/stackademic/anticipate-bad-user-experience-in-your-react-react-native-app-40af5d9d1334&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Developer Experience
&lt;/h2&gt;

&lt;p&gt;You need to take into account how the development team will use your app. You need to set standards on how to use the code base and how collaboration should be done. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;you can check the following:&lt;br&gt;
usage of an absolute path in react native: &lt;a href="https://medium.com/@malikchohra/how-to-use-absolute-path-in-the-latest-react-react-native-version-fe88142a6f7e" rel="noopener noreferrer"&gt;https://medium.com/@malikchohra/how-to-use-absolute-path-in-the-latest-react-react-native-version-fe88142a6f7e&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;implement a static code analysis in your react project: &lt;a href="https://medium.com/@malikchohra/guide-to-static-code-analysis-for-react-and-react-native-c745dfc250bd" rel="noopener noreferrer"&gt;https://medium.com/@malikchohra/guide-to-static-code-analysis-for-react-and-react-native-c745dfc250bd&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Variable naming in Javascript: &lt;a href="https://medium.com/javascript-in-plain-english/best-practices-for-variable-names-in-javascript-and-typescript-7860a84ed80a" rel="noopener noreferrer"&gt;https://medium.com/javascript-in-plain-english/best-practices-for-variable-names-in-javascript-and-typescript-7860a84ed80a&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  **The answer: How to structure your App for scaling to +2 million active users and +150 developers teams
&lt;/h2&gt;

&lt;p&gt;**&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;1. Organize by Feature or Module&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
Structure the app by organizing code into feature-based or module-based folders. This approach groups related files together, making it easier to maintain and scale the app. Each folder contains all related components, screens, hooks, and utilities.&lt;br&gt;
Example:&lt;br&gt;
Screens/&lt;br&gt;
--&amp;gt; HomeScreen/&lt;br&gt;
--&amp;gt; --&amp;gt; index.tsx&lt;br&gt;
--&amp;gt; --&amp;gt; components/&lt;br&gt;
--&amp;gt; --&amp;gt; --&amp;gt; Header.tsx&lt;br&gt;
--&amp;gt; --&amp;gt; --&amp;gt; HomeList.tsx&lt;br&gt;
--&amp;gt; --&amp;gt; hooks/&lt;br&gt;
--&amp;gt; --&amp;gt; --&amp;gt; useHomeData.ts&lt;br&gt;
--&amp;gt; --&amp;gt; tests/&lt;br&gt;
--&amp;gt; --&amp;gt; --&amp;gt; HomeScreen.test.tsx&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;2. Atomic Design for Components&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
Adopt the Atomic Design principles to structure your components into different levels, which promotes reusability and keeps the codebase modular.&lt;br&gt;
Example:&lt;br&gt;
Components/&lt;br&gt;
--&amp;gt; Atoms/&lt;br&gt;
--&amp;gt; --&amp;gt; Button.tsx&lt;br&gt;
--&amp;gt; --&amp;gt; Text.tsx&lt;br&gt;
--&amp;gt; Molecules/&lt;br&gt;
--&amp;gt; --&amp;gt;Card.tsx&lt;br&gt;
--&amp;gt; --&amp;gt; ListItem.tsx&lt;br&gt;
--&amp;gt; Organisms/&lt;br&gt;
--&amp;gt;--&amp;gt; Header.tsx&lt;br&gt;
--&amp;gt;--&amp;gt; UserProfile.tsx&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;3. Centralized State Management&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
Organize your global state management solution to separate concerns by business feature (actions, reducers, selectors), allowing for scalability as the app grows.&lt;br&gt;
Example:&lt;br&gt;
Redux/&lt;br&gt;
appConfig/&lt;br&gt;
--&amp;gt; --&amp;gt; appcofingReducers.ts&lt;br&gt;
--&amp;gt; --&amp;gt; appConfigModel.ts&lt;br&gt;
--&amp;gt; --&amp;gt; appConfigSelector.ts&lt;br&gt;
--&amp;gt; --&amp;gt; appConfigActions.ts&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;4. Efficient API Layer Organization&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
Separate the API layer into specific folders for different modules or services, each containing its own API calls, mock data, and types.&lt;br&gt;
Example:&lt;br&gt;
API/&lt;br&gt;
customApi/&lt;br&gt;
--&amp;gt; customApi.ts&lt;br&gt;
--&amp;gt; Route.ts&lt;br&gt;
types.ts&lt;br&gt;
mockedData.ts&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;5. Asset Management&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
Organize your assets (e.g., images, fonts, icons) in a clear folder structure for easy access and management.&lt;br&gt;
Example:&lt;br&gt;
Assets/&lt;br&gt;
--&amp;gt; Images/&lt;br&gt;
--&amp;gt; --&amp;gt;logo.png&lt;br&gt;
--&amp;gt; --&amp;gt; background.jpg&lt;br&gt;
--&amp;gt; Icons/&lt;br&gt;
--&amp;gt; --&amp;gt; menu.svg&lt;br&gt;
--&amp;gt; --&amp;gt; profile.svg&lt;br&gt;
--&amp;gt; Fonts/&lt;br&gt;
--&amp;gt; --&amp;gt; Roboto/&lt;br&gt;
--&amp;gt; --&amp;gt; Roboto-Bold.ttf&lt;br&gt;
--&amp;gt; --&amp;gt; Roboto-Regular.ttf&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;6. Custom Hooks for Reusability&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
Create custom hooks for shared functionalities such as data fetching, state handling, or utility functions. This helps keep your components clean and focused on presentation.&lt;br&gt;
Example:&lt;br&gt;
Hooks/ &lt;br&gt;
useFetchData.ts&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;7. Maintain a Consistent Theming and Styling Strategy&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
Centralize theme-related configurations to keep a unified style throughout the app. This includes colors, typography, global styles, and responsive settings.&lt;br&gt;
Example:&lt;br&gt;
Theme/&lt;br&gt;
colors.ts&lt;br&gt;
typography.ts&lt;br&gt;
globalStyling.ts&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;8. Comprehensive Testing Strategy&lt;br&gt;
*&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Separate tests based on their type (e.g., unit, integration, E2E) and organize them within folders that mirror the structure of the app. This helps ensure that all aspects of the app are adequately covered by tests.&lt;br&gt;
Example:&lt;br&gt;
&lt;strong&gt;tests&lt;/strong&gt;/&lt;br&gt;
--&amp;gt;unit/&lt;br&gt;
--&amp;gt; --&amp;gt; Button.test.tsx&lt;br&gt;
--&amp;gt; integration/&lt;br&gt;
--&amp;gt; --&amp;gt; HomeScreen.test.tsx&lt;br&gt;
--&amp;gt; e2e/&lt;br&gt;
--&amp;gt; --&amp;gt; loginFlow.test.ts&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;9. Navigation Management&lt;br&gt;
*&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Use a dedicated folder for navigation configuration, which can be broken down by stacks and tabs to keep the navigation system organized.&lt;br&gt;
Example:&lt;br&gt;
Navigation/&lt;br&gt;
--&amp;gt; AppNavigator.tsx&lt;br&gt;
--&amp;gt; AuthStack.tsx&lt;br&gt;
--&amp;gt;MainStack.tsx&lt;br&gt;
--&amp;gt; BottomTabNavigator.tsx&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;10. Configuration and Environment Management&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
Organize configurations and environment settings in a dedicated folder to manage different build environments (e.g., development, testing, production).&lt;br&gt;
Example:&lt;br&gt;
Config/&lt;br&gt;
appConfig.ts&lt;br&gt;
environment.ts&lt;br&gt;
firebaseConfig.ts&lt;br&gt;
.env&lt;/p&gt;




&lt;h2&gt;
  
  
  **Nothing Speak Better than a real implementation
&lt;/h2&gt;

&lt;p&gt;Real Example: A Boilerplate Open Source to scale your React native app:**&lt;/p&gt;

&lt;p&gt;Using the React Native boilerplate, I generated this app just to explain the best approach to scale your app, and the usage of the boilerplate&lt;/p&gt;

&lt;p&gt;Check the video here: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flzscu29afe13u1yzldjz.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flzscu29afe13u1yzldjz.gif" alt=" " width="800" height="400"&gt;&lt;/a&gt;&lt;br&gt;
usage of react native scalable architecture&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;Application Functionality and Best Practices&lt;br&gt;
*&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The architecture of this React Native application is meticulously designed to prioritize scalability and maintainability. Engineered to handle over one million active users monthly, the app delivers a seamless user experience through a modular and well-organized codebase. Adhering to software architecture best practices, the application embraces clean code principles, ensuring each component, service, and utility is well-defined and easily navigable.&lt;br&gt;
The architecture adheres to SOLID principles, emphasizing single responsibility and open/closed design. This approach allows components to be easily modified and extended without impacting existing functionality. For instance, the Redux Toolkit is utilized for efficient state management, providing a clear structure for actions, reducers, and selectors, which simplifies the management of application state across the codebase.&lt;br&gt;
The app is structured to enhance code reusability and readability. React Navigation is employed to facilitate intuitive navigation patterns, enabling users to move seamlessly between different sections of the application. Components are categorized using atomic design principles, fostering a hierarchy that separates atoms, molecules, and organisms for better organization and scalability.&lt;br&gt;
Testing is crucial for ensuring the reliability of the app. Tools like Jest and Detox are integrated to facilitate both unit and end-to-end testing. This rigorous testing approach helps maintain code quality and catch issues early in the development cycle.&lt;br&gt;
Moreover, the application incorporates Fastlane for CI/CD, automating the build and deployment process to streamline updates and feature releases. Utilizing Axios for API interactions and Luxon for date and time management further enhances the app's robustness and efficiency&lt;/p&gt;

&lt;p&gt;**&lt;/p&gt;

&lt;h2&gt;
  
  
  CODE FOR THE BOILERPLATE
&lt;/h2&gt;

&lt;p&gt;**&lt;/p&gt;

&lt;p&gt;You find the GitHub code here: &lt;a href="https://github.com/chohra-med/scalableReactNativeBoilerplate" rel="noopener noreferrer"&gt;https://github.com/chohra-med/scalableReactNativeBoilerplate&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;**&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;**&lt;/p&gt;

&lt;p&gt;In summary, this article has explored the architectural strategies and best practices employed in building a high-performance React Native application capable of supporting over one million active users and a team of 100 developers. By emphasizing clean code, SOLID principles, and modular design, we create a codebase that is not only scalable but also maintainable and efficient.&lt;br&gt;
As you reflect on the insights shared in this article, consider how you can apply these principles to elevate your own development practices. Embrace the opportunity to learn from these architectural strategies, refine your coding skills, and take your React Native applications to the next level. Remember, the key to successful software development lies in crafting a well-structured and thoughtfully architected application that can adapt and grow alongside your user base.&lt;/p&gt;

&lt;p&gt;If you need to integrate Advanced functionalities in your Mobile app, create one from scratch, or need consulting in react native. Visit the casainnov.com[ &lt;a href="http://casainnov.com/" rel="noopener noreferrer"&gt;http://casainnov.com/&lt;/a&gt;] , check their mobile app page, and contact them there.&lt;/p&gt;

&lt;p&gt;I share insights about React Native, React, and Typescript. Follow me on Linkedin [ &lt;a href="https://www.linkedin.com/in/malik-chohra/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/malik-chohra/&lt;/a&gt;] or Medium.&lt;/p&gt;

&lt;h1&gt;
  
  
  ReactNative #WebSockets #RealTime #MobileDevelopment #AppDevelopment #TechInnovation #Coding #JavaScript #MobileApps #DevCommunity #SocketProgramming #RealTimeCommunication #TechNavy #cleancode
&lt;/h1&gt;

</description>
      <category>reactnative</category>
      <category>react</category>
      <category>cleancode</category>
      <category>mobile</category>
    </item>
    <item>
      <title>Optimizing React Native Performance for a Seamless User Experience</title>
      <dc:creator>Malik Chohra</dc:creator>
      <pubDate>Thu, 10 Oct 2024 15:14:11 +0000</pubDate>
      <link>https://dev.to/malik_chohra/optimizing-react-native-performance-for-a-seamless-user-experience-4d35</link>
      <guid>https://dev.to/malik_chohra/optimizing-react-native-performance-for-a-seamless-user-experience-4d35</guid>
      <description>&lt;p&gt;In the competitive world of mobile app development, delivering a smooth and responsive user experience is paramount. React Native, a powerful framework for building cross-platform apps offers a robust foundation but requires careful optimization to ensure peak performance. This article explores effective strategies to enhance your React Native app's speed and responsiveness.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Image Optimization: A Visual Foundation
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Choose the Right Format:&lt;/strong&gt; Select appropriate image formats based on content. JPEGs are ideal for photographs, while PNGs excel in preserving transparency. Consider WebP for superior compression without compromising quality.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Compress Images&lt;/strong&gt;: Utilize tools like ImageOptim or TinyPNG to reduce image file sizes without sacrificing visual fidelity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lazy Loading&lt;/strong&gt;: Defer loading images until they're about to appear on the screen. Libraries like react-native-fast-image facilitate this technique.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Effective Caching&lt;/strong&gt;: Implement caching to prevent redundant image downloads and improve load times.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Minimizing Re-renders: A Performance Boost
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;PureComponent and React.memo&lt;/strong&gt;: If a component's output remains unchanged for identical props, employ PureComponent or React.memo to avoid unnecessary re-renders.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;useCallback and useMemo&lt;/strong&gt;: Memoize functions and values using these hooks to prevent unnecessary recalculations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;FlatList and SectionList&lt;/strong&gt;: For large lists, opt for FlatList or SectionList over ScrollView. These components render only visible items, improving performance.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Inline Function Optimization: Avoiding Pitfalls
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Avoid Inline Functions&lt;/strong&gt;: Defining functions within JSX can lead to excessive re-renders. Move function definitions outside the render method.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Memoization&lt;/strong&gt;: Use useCallback to memoize functions and prevent unnecessary re-creations.&lt;/p&gt;

&lt;p&gt;`&lt;br&gt;
// Inefficient Inline Function &lt;/p&gt;

&lt;p&gt; handlePress(item.id)} /&amp;gt;&lt;/p&gt;

&lt;p&gt;// Optimal Function Definition with Memoization &lt;/p&gt;

&lt;p&gt;const handlePress = useCallback((id) =&amp;gt; { // Handle press logic here }, []); &lt;/p&gt;

&lt;p&gt;`&lt;/p&gt;

&lt;h2&gt;
  
  
  4. JavaScript Bundle Optimization: Streamlining Startup
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Code-Splitting&lt;/strong&gt;: Divide your code into smaller bundles to load only essential parts initially. Dynamic imports enable code-splitting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Leverage babel-preset-env&lt;/strong&gt;: Target specific environments or browsers to reduce polyfill and helper code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Optimize Third-Party Libraries&lt;/strong&gt;: Import only the necessary components from libraries. For example, use lodash-es and import individual functions:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;import debounce from 'lodash-es/debounce';&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Native Modules for Performance Gains
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Custom Native Modules&lt;/strong&gt;: Write native modules in Swift, Objective-C, Java, or Kotlin for performance-critical tasks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pre-Built Native Modules&lt;/strong&gt;: Utilize existing modules like react-native-reanimated for animations or react-native-fast-image for image handling.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Memory Management: A Crucial Aspect
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Prevent Memory Leaks&lt;/strong&gt;: Clean up listeners and subscriptions in componentWillUnmount or useEffect cleanup functions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Optimize Re-renders&lt;/strong&gt;: Use shouldComponentUpdate or React.memo to minimize unnecessary updates.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Handle Large Data Efficiently&lt;/strong&gt;: Process large datasets in smaller chunks or leverage native modules for performance-intensive operations.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Performance Profiling and Monitoring
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;React Native's Built-in Tools&lt;/strong&gt;: Use React Native's performance monitor and console.time/console.timeEnd to measure code execution times.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Third-Party Tools&lt;/strong&gt;: Explore Flipper and React Native Debugger for in-depth performance analysis.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Navigation Optimization: A Smooth Journey
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;React Navigation's createNativeStackNavigator&lt;/strong&gt;: Utilize this navigator for optimized navigation performance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Minimize Off-Screen Rendering&lt;/strong&gt;: Avoid rendering screens that are not visible to the user.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cautious Use of Optimizations&lt;/strong&gt;: Be mindful of using shouldComponentUpdate or React.memo in navigation, as they might introduce unexpected behavior.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. Animations: A Visual Delight
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;React Native Reanimated&lt;/strong&gt;: Employ this library for native-thread-based animations, ensuring smoothness.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LayoutAnimation API&lt;/strong&gt;: Animate layout changes using this API.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Minimize JavaScript-Driven Animations&lt;/strong&gt;: Prioritize native-driven animations for better performance.&lt;/p&gt;

&lt;h2&gt;
  
  
  10. Hermes for Android: A Performance Boost
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Enable Hermes&lt;/strong&gt;: Add enableHermes: true to your Android/app/build.gradle file.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Benefits&lt;/strong&gt;: Hermes can reduce startup time, and memory usage, and improve overall performance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;By implementing these strategies, you can significantly enhance your React Native app's performance and deliver a superior user experience. Remember, continuous optimization is essential for staying ahead in the competitive mobile app landscape.&lt;/p&gt;

&lt;p&gt;check here how Casainnov helped a &lt;a href="https://casainnov.com/success-story-casainnovs-mobile-app-optimization-with-react-native" rel="noopener noreferrer"&gt;leading property listing in KSA to optimize their app and what the output&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can check one of our blogs here:&lt;/p&gt;

&lt;p&gt;Learn Animation in React Native: &lt;a href="https://casainnov.com/learn-animation-in-react-native-using-reanimated-library" rel="noopener noreferrer"&gt;https://casainnov.com/learn-animation-in-react-native-using-reanimated-library&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;From API to UI: Using React-query to Fetch and Display Data in React Native and React: &lt;a href="https://casainnov.com/from-api-to-ui-using-react-query-to-fetch-and-display-data-in-react-native-and-react" rel="noopener noreferrer"&gt;https://casainnov.com/from-api-to-ui-using-react-query-to-fetch-and-display-data-in-react-native-and-react&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;React Native 0.75 is Out. What is new?: &lt;a href="https://casainnov.com/react-native-075-is-out-what-is-new" rel="noopener noreferrer"&gt;https://casainnov.com/react-native-075-is-out-what-is-new&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;How to a React Native agency for your project: &lt;a href="https://casainnov.com/comprehensive-guide-to-react-native-development-agencies" rel="noopener noreferrer"&gt;https://casainnov.com/comprehensive-guide-to-react-native-development-agencies&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Mastering GraphQL in React Native: A Step-by-Step Guide with TypeScript and Redux Toolkit: &lt;a href="https://casainnov.com/mastering-graphql-in-react-native-a-step-by-step-guide-with-typescript-and-redux-toolkit" rel="noopener noreferrer"&gt;https://casainnov.com/mastering-graphql-in-react-native-a-step-by-step-guide-with-typescript-and-redux-toolkit&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step-by-Step Guide: Using MirageJS to Mock API Calls in a React Native App: &lt;a href="https://casainnov.com/step-by-step-guide-using-miragejs-to-mock-api-calls-in-a-react-native-app" rel="noopener noreferrer"&gt;https://casainnov.com/step-by-step-guide-using-miragejs-to-mock-api-calls-in-a-react-native-app&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  ReactNative #WebSockets #RealTime #MobileDevelopment #AppDevelopment #TechInnovation #Coding #JavaScript #MobileApps #DevCommunity #SocketProgramming #RealTimeCommunication #TechNavy
&lt;/h1&gt;

</description>
      <category>reactnative</category>
      <category>javascript</category>
      <category>performance</category>
      <category>android</category>
    </item>
  </channel>
</rss>
