diff --git a/mobile/.editorconfig b/mobile/.editorconfig new file mode 100644 index 00000000..64d3d6a0 --- /dev/null +++ b/mobile/.editorconfig @@ -0,0 +1,12 @@ +# EditorConfig is awesome: https://EditorConfig.org + +# top-most EditorConfig file +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true \ No newline at end of file diff --git a/mobile/.env.example b/mobile/.env.example new file mode 100644 index 00000000..e038d55c --- /dev/null +++ b/mobile/.env.example @@ -0,0 +1 @@ +API_KEY diff --git a/mobile/.eslintignore b/mobile/.eslintignore new file mode 100644 index 00000000..0e796c3f --- /dev/null +++ b/mobile/.eslintignore @@ -0,0 +1,3 @@ +node_modules +dist +build \ No newline at end of file diff --git a/mobile/.eslintrc.json b/mobile/.eslintrc.json new file mode 100644 index 00000000..23f4ee3c --- /dev/null +++ b/mobile/.eslintrc.json @@ -0,0 +1,33 @@ +{ + "env": { + "browser": true, + "es2021": true + }, + "settings": { + "react": { + "version": "detect" + } + }, + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + "plugin:react/recommended", + "plugin:react-hooks/recommended", + "plugin:prettier/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": "latest", + "sourceType": "module" + }, + "plugins": [ + "@typescript-eslint", + "react", + "prettier" + ], + "rules": { + "react/prop-types": "off", + "react/react-in-jsx-scope": "off", + "@typescript-eslint/explicit-module-boundary-types": "off" + } +} \ No newline at end of file diff --git a/mobile/.gitignore b/mobile/.gitignore new file mode 100644 index 00000000..20664757 --- /dev/null +++ b/mobile/.gitignore @@ -0,0 +1,21 @@ +node_modules/ +.expo/ +dist/ +npm-debug.* +*.jks +*.p8 +*.p12 +*.key +*.mobileprovision +*.orig.* +web-build/ +.env + +# macOS +.DS_Store + +# @generated expo-cli sync-2b81b286409207a5da26e14c78851eb30d8ccbdb +# The following patterns were generated by expo-cli + +expo-env.d.ts +# @end expo-cli diff --git a/mobile/.prettierignore b/mobile/.prettierignore new file mode 100644 index 00000000..e13c8ee0 --- /dev/null +++ b/mobile/.prettierignore @@ -0,0 +1,3 @@ +node_modules +build +dist \ No newline at end of file diff --git a/mobile/.prettierrc.json b/mobile/.prettierrc.json new file mode 100644 index 00000000..414f76d2 --- /dev/null +++ b/mobile/.prettierrc.json @@ -0,0 +1,21 @@ +{ + "semi": true, + "trailingComma": "all", + "singleQuote": true, + "printWidth": 80, + "arrowParens": "avoid", + "overrides": [ + { + "files": "*.ts", + "options": { + "parser": "typescript" + } + }, + { + "files": "*.tsx", + "options": { + "parser": "typescript" + } + } + ] +} \ No newline at end of file diff --git a/mobile/README.md b/mobile/README.md new file mode 100644 index 00000000..cd4feb8a --- /dev/null +++ b/mobile/README.md @@ -0,0 +1,50 @@ +# Welcome to your Expo app 👋 + +This is an [Expo](https://expo.dev) project created with [`create-expo-app`](https://www.npmjs.com/package/create-expo-app). + +## Get started + +1. Install dependencies + + ```bash + npm install + ``` + +2. Start the app + + ```bash + npx expo start + ``` + +In the output, you'll find options to open the app in a + +- [development build](https://docs.expo.dev/develop/development-builds/introduction/) +- [Android emulator](https://docs.expo.dev/workflow/android-studio-emulator/) +- [iOS simulator](https://docs.expo.dev/workflow/ios-simulator/) +- [Expo Go](https://expo.dev/go), a limited sandbox for trying out app development with Expo + +You can start developing by editing the files inside the **app** directory. This project uses [file-based routing](https://docs.expo.dev/router/introduction). + +## Get a fresh project + +When you're ready, run: + +```bash +npm run reset-project +``` + +This command will move the starter code to the **app-example** directory and create a blank **app** directory where you can start developing. + +## Learn more + +To learn more about developing your project with Expo, look at the following resources: + +- [Expo documentation](https://docs.expo.dev/): Learn fundamentals, or go into advanced topics with our [guides](https://docs.expo.dev/guides). +- [Learn Expo tutorial](https://docs.expo.dev/tutorial/introduction/): Follow a step-by-step tutorial where you'll create a project that runs on Android, iOS, and the web. + +## Join the community + +Join our community of developers creating universal apps. + +- [Expo on GitHub](https://github.com/expo/expo): View our open source platform and contribute. +- [Discord community](https://chat.expo.dev): Chat with Expo users and ask questions. diff --git a/mobile/app.json b/mobile/app.json new file mode 100644 index 00000000..2a4322dd --- /dev/null +++ b/mobile/app.json @@ -0,0 +1,36 @@ +{ + "expo": { + "name": "mobile", + "slug": "mobile", + "version": "1.0.0", + "orientation": "portrait", + "icon": "./assets/images/icon.png", + "scheme": "myapp", + "userInterfaceStyle": "automatic", + "splash": { + "image": "./assets/images/splash.png", + "resizeMode": "contain", + "backgroundColor": "#ffffff" + }, + "ios": { + "supportsTablet": true + }, + "android": { + "adaptiveIcon": { + "foregroundImage": "./assets/images/adaptive-icon.png", + "backgroundColor": "#ffffff" + } + }, + "web": { + "bundler": "metro", + "output": "static", + "favicon": "./assets/images/favicon.png" + }, + "plugins": [ + "expo-router" + ], + "experiments": { + "typedRoutes": true + } + } +} diff --git a/mobile/app/+html.tsx b/mobile/app/+html.tsx new file mode 100644 index 00000000..849f2263 --- /dev/null +++ b/mobile/app/+html.tsx @@ -0,0 +1,42 @@ +import { ScrollViewStyleReset } from 'expo-router/html'; +import { type PropsWithChildren } from 'react'; + +/** + * This file is web-only and used to configure the root HTML for every web page during static rendering. + * The contents of this function only run in Node.js environments and do not have access to the DOM or browser APIs. + */ +export default function Root({ children }: PropsWithChildren) { + return ( + + + + + + + {/* + Disable body scrolling on web. This makes ScrollView components work closer to how they do on native. + However, body scrolling is often nice to have for mobile web. If you want to enable it, remove this line. + */} + + + {/* Using raw CSS styles as an escape-hatch to ensure the background color never flickers in dark-mode. */} +