> For the complete documentation index, see [llms.txt](https://cryptostream-app.appducks.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://cryptostream-app.appducks.com/built-with.md).

# Built With

The app is built based on [react-native](https://facebook.github.io/react-native/) and [Expo](https://expo.io/) framework. The app is using functional components and [react hooks](https://reactjs.org/docs/hooks-reference.html) (useState, useEffect, useContext, useReducer, useRef , ...etc) & [Context-API](https://reactjs.org/docs/context.html#api) for state management, and [typescript](https://www.typescriptlang.org/) for static type-checking along with the latest ECMAScript features. We used [react-navigation](https://reactnavigation.org/docs/en/getting-started.html) for handling stack navigation, tabs, and top bars. We have also used [native-base ](https://nativebase.io/)for some of our UI components, and we have built our own components such as chart that looks just wonderful for presenting the crypto price changes. We tried to use a minimal number of dependencies to give you a chance, as a developer, to have more control over the code, enhance and make everything better and faster yourself without relying on and getting stuck with too many dependencies that are out of your control.

Check out the app package.json here:&#x20;

{% code title="package.json" %}

```yaml
{
  "main": "node_modules/expo/AppEntry.js",
  "scripts": {
    "start": "expo start",
    "android": "expo start --android",
    "ios": "expo start --ios",
    "web": "expo start --web",
    "eject": "expo eject",
    "lint": "eslint './**/*.{ts,tsx}'"
  },
  "dependencies": {
    "expo": "^35.0.0",
    "expo-sms": "~7.0.0",
    "lodash": "^4.17.14",
    "moment": "^2.24.0",
    "native-base": "^2.13.8",
    "numeral": "^2.0.6",
    "react": "16.8.3",
    "react-native": "https://github.com/expo/react-native/archive/sdk-35.0.0.tar.gz",
    "react-native-flash-message": "^0.1.13",
    "react-native-gesture-handler": "~1.3.0",
    "react-native-reanimated": "~1.2.0",
    "react-native-size-matters": "^0.2.1",
    "react-navigation": "^4.0.10",
    "react-navigation-drawer": "^2.3.3",
    "react-navigation-stack": "^1.10.3",
    "react-navigation-tabs": "^2.6.2",
    "reanimated-bottom-sheet": "^1.0.0-alpha.13",
    "react-native-screens": "~1.0.0-alpha.23",
    "expo-web-browser": "~7.0.1"
  },
  "devDependencies": {
    "@types/react": "^16.8.19",
    "@types/react-native": "^0.57.60",
    "@typescript-eslint/eslint-plugin": "^1.12.0",
    "@typescript-eslint/parser": "^1.12.0",
    "babel-preset-expo": "^5.1.1",
    "eslint": "^6.0.1",
    "eslint-config-prettier": "^6.0.0",
    "eslint-config-react": "^1.1.7",
    "eslint-plugin-prettier": "^3.1.0",
    "eslint-plugin-react": "^7.14.3",
    "prettier": "^1.18.2",
    "typescript": "^3.4.5"
  },
  "private": true
}

```

{% endcode %}

### State Management and Containers&#x20;

You probably have heard too much about [Redux](https://redux.js.org/introduction/getting-started) for state management. Redux is cool! **However**, in our app here, we have sort of recreated redux using [react-hooks](https://reactjs.org/docs/hooks-intro.html) and [Context API](https://reactjs.org/docs/context.html) without actually installing redux and react-redux and all the middleware that redux might need. Here is a diagram of how it works, and I'm pretty confident to say that it works somehow in a similar fashion as redux. So no surprises! :&#x20;

![](/files/-LkE30tFT0R447HmG_d5)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://cryptostream-app.appducks.com/built-with.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
