diff --git a/.env.sample b/.env.sample
index 7ab0b11d7..44c7d187e 100644
--- a/.env.sample
+++ b/.env.sample
@@ -2,3 +2,5 @@ API_URL=
VAR_NUMBER=
VAR_BOOL=
SECRET_KEY=
+WEBSITE_URL=
+TERMS_OF_SERVICE_URL=
diff --git a/env.js b/env.js
index fb55db37b..29bea2ec5 100644
--- a/env.js
+++ b/env.js
@@ -30,7 +30,7 @@ const LOCAL_BUILD_SCRIPT_PATTERNS = [
'expo export',
];
const isLocalBuild = LOCAL_BUILD_SCRIPT_PATTERNS.some((pattern) =>
- process.env.npm_lifecycle_script?.includes(pattern)
+ process.env.npm_lifecycle_script?.includes(pattern),
);
const EXPO_RUN_COMMANDS = ['expo start', 'expo run'];
@@ -44,13 +44,13 @@ const ENVIRONMENT_DEPENDANT_SCRIPTS = [
];
const scriptIsEnvironmentDependant = ENVIRONMENT_DEPENDANT_SCRIPTS.some(
- (script) => process.env.npm_lifecycle_script?.includes(script)
+ (script) => process.env.npm_lifecycle_script?.includes(script),
);
// Check if the environment file has to be validated for the current running script and build method
const isBuilding = isEASBuild || isLocalBuild;
const isRunning = EXPO_RUN_COMMANDS.some((script) =>
- process.env.npm_lifecycle_script?.includes(script)
+ process.env.npm_lifecycle_script?.includes(script),
);
const shouldValidateEnv =
(isBuilding && scriptIsEnvironmentDependant) || isRunning;
@@ -138,6 +138,8 @@ const clientEnvSchema = z.object({
API_URL: z.string(),
VAR_NUMBER: z.number(),
VAR_BOOL: z.boolean(),
+ TERMS_OF_SERVICE_URL: z.string(),
+ WEBSITE_URL: z.string(),
});
const buildTimeEnvSchema = z.object({
@@ -162,6 +164,8 @@ const _clientEnv = {
API_URL: parseString(process.env.API_URL),
VAR_NUMBER: parseNumber(process.env.VAR_NUMBER),
VAR_BOOL: parseBoolean(process.env.VAR_BOOL),
+ WEBSITE_URL: parseString(process.env.WEBSITE_URL),
+ TERMS_OF_SERVICE_URL: parseString(process.env.TERMS_OF_SERVICE_URL),
};
/**
@@ -212,19 +216,19 @@ if (shouldValidateEnv) {
if (isLocalBuild) {
messages.push(
- `\nš” Tip: If you recently updated the \x1b[1m\x1b[4m\x1b[31m${envFile}\x1b[0m file and the error still persists, try restarting the server with the -cc flag to clear the cache.`
+ `\nš” Tip: If you recently updated the \x1b[1m\x1b[4m\x1b[31m${envFile}\x1b[0m file and the error still persists, try restarting the server with the -cc flag to clear the cache.`,
);
}
if (isEASBuild) {
messages.push(
- `\nāļø For \x1b[1m\x1b[32mEAS Build\x1b[0m deployments, ensure the secret\x1b[1m\x1b[4m\x1b[31m${environmentFiles[APP_ENV]} \x1b[0m is defined in Project Secrets and has the proper environment file attached.`
+ `\nāļø For \x1b[1m\x1b[32mEAS Build\x1b[0m deployments, ensure the secret\x1b[1m\x1b[4m\x1b[31m${environmentFiles[APP_ENV]} \x1b[0m is defined in Project Secrets and has the proper environment file attached.`,
);
}
console.error(...messages);
throw new Error(
- 'Invalid environment variables, Check terminal for more details '
+ 'Invalid environment variables, Check terminal for more details ',
);
}
diff --git a/package.json b/package.json
index 0611459da..a33534a76 100644
--- a/package.json
+++ b/package.json
@@ -103,6 +103,7 @@
"react-native-screens": "~3.31.1",
"react-native-svg": "~15.2.0",
"react-native-web": "~0.19.12",
+ "react-native-webview": "13.8.6",
"react-query-kit": "^3.3.0",
"tailwind-variants": "^0.2.1",
"zod": "^3.23.8",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index ad36a838d..41bca8f4b 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -128,6 +128,9 @@ importers:
react-native-web:
specifier: ~0.19.12
version: 0.19.12(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
+ react-native-webview:
+ specifier: 13.8.6
+ version: 13.8.6(react-native@0.74.5(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.2.79)(react@18.2.0))(react@18.2.0)
react-query-kit:
specifier: ^3.3.0
version: 3.3.0(@tanstack/react-query@5.52.2(react@18.2.0))
@@ -6430,6 +6433,12 @@ packages:
react: ^18.0.0
react-dom: ^18.0.0
+ react-native-webview@13.8.6:
+ resolution: {integrity: sha512-jtZ9OgB2AN6rhDwto6dNL3PtOtl/SI4VN93pZEPbMLvRjqHfxiUrilGllL5fKAXq5Ry5FJyfUi82A4Ii8olZ7A==}
+ peerDependencies:
+ react: '*'
+ react-native: '*'
+
react-native@0.74.5:
resolution: {integrity: sha512-Bgg2WvxaGODukJMTZFTZBNMKVaROHLwSb8VAGEdrlvKwfb1hHg/3aXTUICYk7dwgAnb+INbGMwnF8yeAgIUmqw==}
engines: {node: '>=18'}
@@ -15912,6 +15921,13 @@ snapshots:
transitivePeerDependencies:
- encoding
+ react-native-webview@13.8.6(react-native@0.74.5(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.2.79)(react@18.2.0))(react@18.2.0):
+ dependencies:
+ escape-string-regexp: 2.0.0
+ invariant: 2.2.4
+ react: 18.2.0
+ react-native: 0.74.5(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.2.79)(react@18.2.0)
+
react-native@0.74.5(@babel/core@7.25.2)(@babel/preset-env@7.25.4(@babel/core@7.25.2))(@types/react@18.2.79)(react@18.2.0):
dependencies:
'@jest/create-cache-key-function': 29.7.0
diff --git a/src/app/(app)/settings.tsx b/src/app/(app)/settings.tsx
index 857e45a4a..6ad56e825 100644
--- a/src/app/(app)/settings.tsx
+++ b/src/app/(app)/settings.tsx
@@ -1,5 +1,7 @@
import { Env } from '@env';
+import { Link } from 'expo-router';
import { useColorScheme } from 'nativewind';
+import React from 'react';
import { Item } from '@/components/settings/item';
import { ItemsContainer } from '@/components/settings/items-container';
@@ -7,7 +9,7 @@ import { LanguageItem } from '@/components/settings/language-item';
import { ThemeItem } from '@/components/settings/theme-item';
import { translate, useAuth } from '@/core';
import { colors, FocusAwareStatusBar, ScrollView, Text, View } from '@/ui';
-import { Github, Rate, Share, Support, Website } from '@/ui/icons';
+import { Website } from '@/ui/icons';
export default function Settings() {
const signOut = useAuth.use.signOut();
@@ -29,42 +31,38 @@ export default function Settings() {
-
-
-
-
-
-
- }
- onPress={() => {}}
- />
- }
- onPress={() => {}}
- />
- }
- onPress={() => {}}
- />
+
+
+
+
+
+ }
+ />
+
-
- - {}} />
-
- {}} />
-
}
- onPress={() => {}}
- />
- }
- onPress={() => {}}
- />
+
+
diff --git a/src/app/(app)/style.tsx b/src/app/(app)/style.tsx
index 0a85afa6f..fbc2d3679 100644
--- a/src/app/(app)/style.tsx
+++ b/src/app/(app)/style.tsx
@@ -1,3 +1,5 @@
+import React from 'react';
+
import { Buttons } from '@/components/buttons';
import { Colors } from '@/components/colors';
import { Inputs } from '@/components/inputs';
diff --git a/src/app/_layout.tsx b/src/app/_layout.tsx
index 9fafc0531..391f68efd 100644
--- a/src/app/_layout.tsx
+++ b/src/app/_layout.tsx
@@ -35,6 +35,13 @@ export default function RootLayout() {
+
);
diff --git a/src/app/onboarding.tsx b/src/app/onboarding.tsx
index 4be554745..08fb63f1a 100644
--- a/src/app/onboarding.tsx
+++ b/src/app/onboarding.tsx
@@ -1,41 +1,44 @@
import { useRouter } from 'expo-router';
import { Cover } from '@/components/cover';
+import { translate } from '@/core';
import { useIsFirstTime } from '@/core/hooks';
import { Button, FocusAwareStatusBar, SafeAreaView, Text, View } from '@/ui';
+
export default function Onboarding() {
const [, setIsFirstTime] = useIsFirstTime();
const router = useRouter();
+
return (
-
+
-
+
- React Native Template
+ {translate('onboarding.title')}
- The right way to build your mobile app
+ {translate('onboarding.subtitle')}
- š Production-ready{' '}
+ {translate('onboarding.features.production_ready')}
- š„· Developer experience + Productivity
+ {translate('onboarding.features.developer_experience')}
- š§© Minimal code and dependencies
+ {translate('onboarding.features.minimal_code')}
- šŖ well maintained third-party libraries
+ {translate('onboarding.features.well_maintained_libraries')}