diff --git a/apps/mobile/.claude/settings.json b/apps/mobile/.claude/settings.json
deleted file mode 100644
index 176e6a5..0000000
--- a/apps/mobile/.claude/settings.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "enabledPlugins": {
- "expo@claude-plugins-official": true
- }
-}
diff --git a/apps/mobile/.gitignore b/apps/mobile/.gitignore
deleted file mode 100644
index f8c6c2e..0000000
--- a/apps/mobile/.gitignore
+++ /dev/null
@@ -1,43 +0,0 @@
-# Learn more https://docs.github.com/en/get-started/getting-started-with-git/ignoring-files
-
-# dependencies
-node_modules/
-
-# Expo
-.expo/
-dist/
-web-build/
-expo-env.d.ts
-
-# Native
-.kotlin/
-*.orig.*
-*.jks
-*.p8
-*.p12
-*.key
-*.mobileprovision
-
-# Metro
-.metro-health-check*
-
-# debug
-npm-debug.*
-yarn-debug.*
-yarn-error.*
-
-# macOS
-.DS_Store
-*.pem
-
-# local env files
-.env*.local
-
-# typescript
-*.tsbuildinfo
-
-app-example
-
-# generated native folders
-/ios
-/android
diff --git a/apps/mobile/.vscode/extensions.json b/apps/mobile/.vscode/extensions.json
deleted file mode 100644
index b7ed837..0000000
--- a/apps/mobile/.vscode/extensions.json
+++ /dev/null
@@ -1 +0,0 @@
-{ "recommendations": ["expo.vscode-expo-tools"] }
diff --git a/apps/mobile/.vscode/settings.json b/apps/mobile/.vscode/settings.json
deleted file mode 100644
index e2798e4..0000000
--- a/apps/mobile/.vscode/settings.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "editor.codeActionsOnSave": {
- "source.fixAll": "explicit",
- "source.organizeImports": "explicit",
- "source.sortMembers": "explicit"
- }
-}
diff --git a/apps/mobile/AGENTS.md b/apps/mobile/AGENTS.md
deleted file mode 100644
index a62f7ed..0000000
--- a/apps/mobile/AGENTS.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Expo HAS CHANGED
-
-Read the exact versioned docs at https://docs.expo.dev/versions/v55.0.0/ before writing any code.
diff --git a/apps/mobile/CLAUDE.md b/apps/mobile/CLAUDE.md
deleted file mode 100644
index 43c994c..0000000
--- a/apps/mobile/CLAUDE.md
+++ /dev/null
@@ -1 +0,0 @@
-@AGENTS.md
diff --git a/apps/mobile/README.md b/apps/mobile/README.md
deleted file mode 100644
index 4d67aec..0000000
--- a/apps/mobile/README.md
+++ /dev/null
@@ -1,56 +0,0 @@
-# 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.
-
-### Other setup steps
-
-- To set up ESLint for linting, run `npx expo lint`, or follow our guide on ["Using ESLint and Prettier"](https://docs.expo.dev/guides/using-eslint/)
-- If you'd like to set up unit testing, follow our guide on ["Unit Testing with Jest"](https://docs.expo.dev/develop/unit-testing/)
-- Learn more about the TypeScript setup in this template in our guide on ["Using TypeScript"](https://docs.expo.dev/guides/typescript/)
-
-## 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/apps/mobile/app.json b/apps/mobile/app.json
deleted file mode 100644
index 765ecc8..0000000
--- a/apps/mobile/app.json
+++ /dev/null
@@ -1,53 +0,0 @@
-{
- "expo": {
- "name": "mobile",
- "slug": "mobile",
- "version": "1.0.0",
- "orientation": "portrait",
- "icon": "./assets/images/icon.png",
- "scheme": "mobile",
- "userInterfaceStyle": "automatic",
- "ios": {
- "icon": "./assets/expo.icon"
- },
- "android": {
- "adaptiveIcon": {
- "backgroundColor": "#E6F4FE",
- "foregroundImage": "./assets/images/android-icon-foreground.png",
- "backgroundImage": "./assets/images/android-icon-background.png",
- "monochromeImage": "./assets/images/android-icon-monochrome.png"
- },
- "predictiveBackGestureEnabled": false
- },
- "web": {
- "output": "static",
- "favicon": "./assets/images/favicon.png"
- },
- "plugins": [
- "expo-router",
- [
- "expo-splash-screen",
- {
- "backgroundColor": "#208AEF",
- "android": {
- "image": "./assets/images/splash-icon.png",
- "imageWidth": 76
- }
- }
- ],
- "expo-secure-store",
- "expo-web-browser"
- ],
- "experiments": {
- "typedRoutes": true,
- "reactCompiler": true
- },
- "extra": {
- "router": {},
- "eas": {
- "projectId": "00d6ac0f-2366-4d7e-843c-20cf79f4ea7d"
- }
- },
- "owner": "refrakts"
- }
-}
diff --git a/apps/mobile/assets/expo.icon/Assets/expo-symbol 2.svg b/apps/mobile/assets/expo.icon/Assets/expo-symbol 2.svg
deleted file mode 100644
index 51d3676..0000000
--- a/apps/mobile/assets/expo.icon/Assets/expo-symbol 2.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/apps/mobile/assets/expo.icon/Assets/grid.png b/apps/mobile/assets/expo.icon/Assets/grid.png
deleted file mode 100644
index eefea24..0000000
Binary files a/apps/mobile/assets/expo.icon/Assets/grid.png and /dev/null differ
diff --git a/apps/mobile/assets/expo.icon/icon.json b/apps/mobile/assets/expo.icon/icon.json
deleted file mode 100644
index 7a2c33c..0000000
--- a/apps/mobile/assets/expo.icon/icon.json
+++ /dev/null
@@ -1,40 +0,0 @@
-{
- "fill" : {
- "automatic-gradient" : "extended-srgb:0.00000,0.47843,1.00000,1.00000"
- },
- "groups" : [
- {
- "layers" : [
- {
- "image-name" : "expo-symbol 2.svg",
- "name" : "expo-symbol 2",
- "position" : {
- "scale" : 1,
- "translation-in-points" : [
- 1.1008400065293245e-05,
- -16.046875
- ]
- }
- },
- {
- "image-name" : "grid.png",
- "name" : "grid"
- }
- ],
- "shadow" : {
- "kind" : "neutral",
- "opacity" : 0.5
- },
- "translucency" : {
- "enabled" : true,
- "value" : 0.5
- }
- }
- ],
- "supported-platforms" : {
- "circles" : [
- "watchOS"
- ],
- "squares" : "shared"
- }
-}
\ No newline at end of file
diff --git a/apps/mobile/assets/images/android-icon-background.png b/apps/mobile/assets/images/android-icon-background.png
deleted file mode 100644
index 5ffefc5..0000000
Binary files a/apps/mobile/assets/images/android-icon-background.png and /dev/null differ
diff --git a/apps/mobile/assets/images/android-icon-foreground.png b/apps/mobile/assets/images/android-icon-foreground.png
deleted file mode 100644
index 3a9e501..0000000
Binary files a/apps/mobile/assets/images/android-icon-foreground.png and /dev/null differ
diff --git a/apps/mobile/assets/images/android-icon-monochrome.png b/apps/mobile/assets/images/android-icon-monochrome.png
deleted file mode 100644
index 77484eb..0000000
Binary files a/apps/mobile/assets/images/android-icon-monochrome.png and /dev/null differ
diff --git a/apps/mobile/assets/images/expo-badge-white.png b/apps/mobile/assets/images/expo-badge-white.png
deleted file mode 100644
index 2863067..0000000
Binary files a/apps/mobile/assets/images/expo-badge-white.png and /dev/null differ
diff --git a/apps/mobile/assets/images/expo-badge.png b/apps/mobile/assets/images/expo-badge.png
deleted file mode 100644
index 5d5c5bb..0000000
Binary files a/apps/mobile/assets/images/expo-badge.png and /dev/null differ
diff --git a/apps/mobile/assets/images/expo-logo.png b/apps/mobile/assets/images/expo-logo.png
deleted file mode 100644
index 6b1642a..0000000
Binary files a/apps/mobile/assets/images/expo-logo.png and /dev/null differ
diff --git a/apps/mobile/assets/images/favicon.png b/apps/mobile/assets/images/favicon.png
deleted file mode 100644
index 408bd74..0000000
Binary files a/apps/mobile/assets/images/favicon.png and /dev/null differ
diff --git a/apps/mobile/assets/images/icon.png b/apps/mobile/assets/images/icon.png
deleted file mode 100644
index 67c777a..0000000
Binary files a/apps/mobile/assets/images/icon.png and /dev/null differ
diff --git a/apps/mobile/assets/images/logo-glow.png b/apps/mobile/assets/images/logo-glow.png
deleted file mode 100644
index edc99be..0000000
Binary files a/apps/mobile/assets/images/logo-glow.png and /dev/null differ
diff --git a/apps/mobile/assets/images/react-logo.png b/apps/mobile/assets/images/react-logo.png
deleted file mode 100644
index 9d72a9f..0000000
Binary files a/apps/mobile/assets/images/react-logo.png and /dev/null differ
diff --git a/apps/mobile/assets/images/react-logo@2x.png b/apps/mobile/assets/images/react-logo@2x.png
deleted file mode 100644
index 2229b13..0000000
Binary files a/apps/mobile/assets/images/react-logo@2x.png and /dev/null differ
diff --git a/apps/mobile/assets/images/react-logo@3x.png b/apps/mobile/assets/images/react-logo@3x.png
deleted file mode 100644
index a99b203..0000000
Binary files a/apps/mobile/assets/images/react-logo@3x.png and /dev/null differ
diff --git a/apps/mobile/assets/images/splash-icon.png b/apps/mobile/assets/images/splash-icon.png
deleted file mode 100644
index 6b1642a..0000000
Binary files a/apps/mobile/assets/images/splash-icon.png and /dev/null differ
diff --git a/apps/mobile/assets/images/tabIcons/explore.png b/apps/mobile/assets/images/tabIcons/explore.png
deleted file mode 100644
index 73d8258..0000000
Binary files a/apps/mobile/assets/images/tabIcons/explore.png and /dev/null differ
diff --git a/apps/mobile/assets/images/tabIcons/explore@2x.png b/apps/mobile/assets/images/tabIcons/explore@2x.png
deleted file mode 100644
index 21b9bd2..0000000
Binary files a/apps/mobile/assets/images/tabIcons/explore@2x.png and /dev/null differ
diff --git a/apps/mobile/assets/images/tabIcons/explore@3x.png b/apps/mobile/assets/images/tabIcons/explore@3x.png
deleted file mode 100644
index 422202d..0000000
Binary files a/apps/mobile/assets/images/tabIcons/explore@3x.png and /dev/null differ
diff --git a/apps/mobile/assets/images/tabIcons/home.png b/apps/mobile/assets/images/tabIcons/home.png
deleted file mode 100644
index ad5699c..0000000
Binary files a/apps/mobile/assets/images/tabIcons/home.png and /dev/null differ
diff --git a/apps/mobile/assets/images/tabIcons/home@2x.png b/apps/mobile/assets/images/tabIcons/home@2x.png
deleted file mode 100644
index 22a1f2c..0000000
Binary files a/apps/mobile/assets/images/tabIcons/home@2x.png and /dev/null differ
diff --git a/apps/mobile/assets/images/tabIcons/home@3x.png b/apps/mobile/assets/images/tabIcons/home@3x.png
deleted file mode 100644
index f5d1f9a..0000000
Binary files a/apps/mobile/assets/images/tabIcons/home@3x.png and /dev/null differ
diff --git a/apps/mobile/assets/images/tutorial-web.png b/apps/mobile/assets/images/tutorial-web.png
deleted file mode 100644
index e4a8c58..0000000
Binary files a/apps/mobile/assets/images/tutorial-web.png and /dev/null differ
diff --git a/apps/mobile/metro.config.js b/apps/mobile/metro.config.js
deleted file mode 100644
index 73cd076..0000000
--- a/apps/mobile/metro.config.js
+++ /dev/null
@@ -1,12 +0,0 @@
-const { getDefaultConfig } = require("expo/metro-config");
-const path = require("path");
-const projectRoot = __dirname;
-const workspaceRoot = path.resolve(projectRoot, "../..");
-const config = getDefaultConfig(projectRoot);
-config.watchFolders = [workspaceRoot];
-config.resolver.nodeModulesPaths = [
- path.resolve(projectRoot, "node_modules"),
- path.resolve(workspaceRoot, "node_modules"),
-];
-config.resolver.disableHierarchicalLookup = true;
-module.exports = config;
diff --git a/apps/mobile/package.json b/apps/mobile/package.json
deleted file mode 100644
index a41ac7b..0000000
--- a/apps/mobile/package.json
+++ /dev/null
@@ -1,53 +0,0 @@
-{
- "name": "mobile",
- "main": "expo-router/entry",
- "version": "1.0.0",
- "scripts": {
- "start": "expo start",
- "reset-project": "node ./scripts/reset-project.js",
- "android": "expo start --android",
- "ios": "expo start --ios",
- "web": "expo start --web",
- "lint": "expo lint"
- },
- "dependencies": {
- "@expo/ui": "~55.0.16",
- "@react-navigation/bottom-tabs": "^7.15.5",
- "@react-navigation/elements": "^2.9.10",
- "@react-navigation/native": "^7.1.33",
- "@shopify/flash-list": "2.0.2",
- "@tanstack/react-query": "^5.100.10",
- "expo": "~55.0.24",
- "expo-auth-session": "~55.0.16",
- "expo-constants": "~55.0.16",
- "expo-crypto": "~55.0.15",
- "expo-device": "~55.0.17",
- "expo-font": "~55.0.7",
- "expo-glass-effect": "~55.0.11",
- "expo-image": "~55.0.10",
- "expo-linking": "~55.0.15",
- "expo-notifications": "~55.0.23",
- "expo-router": "~55.0.14",
- "expo-secure-store": "~55.0.14",
- "expo-splash-screen": "~55.0.21",
- "expo-status-bar": "~55.0.6",
- "expo-symbols": "~55.0.8",
- "expo-system-ui": "~55.0.18",
- "expo-web-browser": "~55.0.16",
- "react": "19.2.0",
- "react-dom": "19.2.0",
- "react-native": "0.83.6",
- "react-native-gesture-handler": "~2.30.0",
- "react-native-markdown-display": "^7.0.2",
- "react-native-reanimated": "4.2.1",
- "react-native-safe-area-context": "~5.6.2",
- "react-native-screens": "~4.23.0",
- "react-native-web": "~0.21.0",
- "react-native-worklets": "0.7.4"
- },
- "devDependencies": {
- "@types/react": "~19.2.2",
- "typescript": "~5.9.2"
- },
- "private": true
-}
diff --git a/apps/mobile/scripts/reset-project.js b/apps/mobile/scripts/reset-project.js
deleted file mode 100755
index 055d15b..0000000
--- a/apps/mobile/scripts/reset-project.js
+++ /dev/null
@@ -1,114 +0,0 @@
-#!/usr/bin/env node
-
-/**
- * This script is used to reset the project to a blank state.
- * It deletes or moves the /src and /scripts directories to /example based on user input and creates a new /src/app directory with an index.tsx and _layout.tsx file.
- * You can remove the `reset-project` script from package.json and safely delete this file after running it.
- */
-
-const fs = require("fs");
-const path = require("path");
-const readline = require("readline");
-
-const root = process.cwd();
-const oldDirs = ["src", "scripts"];
-const exampleDir = "example";
-const newAppDir = "src/app";
-const exampleDirPath = path.join(root, exampleDir);
-
-const indexContent = `import { Text, View, StyleSheet } from "react-native";
-
-export default function Index() {
- return (
-
- Edit src/app/index.tsx to edit this screen.
-
- );
-}
-
-const styles = StyleSheet.create({
- container: {
- flex: 1,
- alignItems: "center",
- justifyContent: "center",
- },
-});
-`;
-
-const layoutContent = `import { Stack } from "expo-router";
-
-export default function RootLayout() {
- return ;
-}
-`;
-
-const rl = readline.createInterface({
- input: process.stdin,
- output: process.stdout,
-});
-
-const moveDirectories = async (userInput) => {
- try {
- if (userInput === "y") {
- // Create the app-example directory
- await fs.promises.mkdir(exampleDirPath, { recursive: true });
- console.log(`š /${exampleDir} directory created.`);
- }
-
- // Move old directories to new app-example directory or delete them
- for (const dir of oldDirs) {
- const oldDirPath = path.join(root, dir);
- if (fs.existsSync(oldDirPath)) {
- if (userInput === "y") {
- const newDirPath = path.join(root, exampleDir, dir);
- await fs.promises.rename(oldDirPath, newDirPath);
- console.log(`ā”ļø /${dir} moved to /${exampleDir}/${dir}.`);
- } else {
- await fs.promises.rm(oldDirPath, { recursive: true, force: true });
- console.log(`ā /${dir} deleted.`);
- }
- } else {
- console.log(`ā”ļø /${dir} does not exist, skipping.`);
- }
- }
-
- // Create new /src/app directory
- const newAppDirPath = path.join(root, newAppDir);
- await fs.promises.mkdir(newAppDirPath, { recursive: true });
- console.log("\nš New /src/app directory created.");
-
- // Create index.tsx
- const indexPath = path.join(newAppDirPath, "index.tsx");
- await fs.promises.writeFile(indexPath, indexContent);
- console.log("š src/app/index.tsx created.");
-
- // Create _layout.tsx
- const layoutPath = path.join(newAppDirPath, "_layout.tsx");
- await fs.promises.writeFile(layoutPath, layoutContent);
- console.log("š src/app/_layout.tsx created.");
-
- console.log("\nā
Project reset complete. Next steps:");
- console.log(
- `1. Run \`npx expo start\` to start a development server.\n2. Edit src/app/index.tsx to edit the main screen.\n3. Put all your application code in /src, only screens and layout files should be in /src/app.${
- userInput === "y"
- ? `\n4. Delete the /${exampleDir} directory when you're done referencing it.`
- : ""
- }`
- );
- } catch (error) {
- console.error(`ā Error during script execution: ${error.message}`);
- }
-};
-
-rl.question(
- "Do you want to move existing files to /example instead of deleting them? (Y/n): ",
- (answer) => {
- const userInput = answer.trim().toLowerCase() || "y";
- if (userInput === "y" || userInput === "n") {
- moveDirectories(userInput).finally(() => rl.close());
- } else {
- console.log("ā Invalid input. Please enter 'Y' or 'N'.");
- rl.close();
- }
- }
-);
diff --git a/apps/mobile/src/app/_layout.tsx b/apps/mobile/src/app/_layout.tsx
deleted file mode 100644
index b04d0a8..0000000
--- a/apps/mobile/src/app/_layout.tsx
+++ /dev/null
@@ -1,16 +0,0 @@
-import { DarkTheme, DefaultTheme, ThemeProvider } from '@react-navigation/native';
-import React from 'react';
-import { useColorScheme } from 'react-native';
-
-import { AnimatedSplashOverlay } from '@/components/animated-icon';
-import AppTabs from '@/components/app-tabs';
-
-export default function TabLayout() {
- const colorScheme = useColorScheme();
- return (
-
-
-
-
- );
-}
diff --git a/apps/mobile/src/app/explore.tsx b/apps/mobile/src/app/explore.tsx
deleted file mode 100644
index f08c5d3..0000000
--- a/apps/mobile/src/app/explore.tsx
+++ /dev/null
@@ -1,181 +0,0 @@
-import { Image } from 'expo-image';
-import { SymbolView } from 'expo-symbols';
-import React from 'react';
-import { Platform, Pressable, ScrollView, StyleSheet } from 'react-native';
-import { useSafeAreaInsets } from 'react-native-safe-area-context';
-
-import { ExternalLink } from '@/components/external-link';
-import { ThemedText } from '@/components/themed-text';
-import { ThemedView } from '@/components/themed-view';
-import { Collapsible } from '@/components/ui/collapsible';
-import { WebBadge } from '@/components/web-badge';
-import { BottomTabInset, MaxContentWidth, Spacing } from '@/constants/theme';
-import { useTheme } from '@/hooks/use-theme';
-
-export default function TabTwoScreen() {
- const safeAreaInsets = useSafeAreaInsets();
- const insets = {
- ...safeAreaInsets,
- bottom: safeAreaInsets.bottom + BottomTabInset + Spacing.three,
- };
- const theme = useTheme();
-
- const contentPlatformStyle = Platform.select({
- android: {
- paddingTop: insets.top,
- paddingLeft: insets.left,
- paddingRight: insets.right,
- paddingBottom: insets.bottom,
- },
- web: {
- paddingTop: Spacing.six,
- paddingBottom: Spacing.four,
- },
- });
-
- return (
-
-
-
- Explore
-
- This starter app includes example{'\n'}code to help you get started.
-
-
-
- pressed && styles.pressed}>
-
- Expo documentation
-
-
-
-
-
-
-
-
-
- This app has two screens: src/app/index.tsx and{' '}
- src/app/explore.tsx
-
-
- The layout file in src/app/_layout.tsx sets up
- the tab navigator.
-
-
- Learn more
-
-
-
-
-
-
- You can open this project on Android, iOS, and the web. To open the web version,
- press w in the terminal running this
- project.
-
-
-
-
-
-
-
- For static images, you can use the @2x and{' '}
- @3x suffixes to provide files for different
- screen densities.
-
-
-
- Learn more
-
-
-
-
-
- This template has light and dark mode support. The{' '}
- useColorScheme() hook lets you inspect what the
- user's current color scheme is, and so you can adjust UI colors accordingly.
-
-
- Learn more
-
-
-
-
-
- This template includes an example of an animated component. The{' '}
- src/components/ui/collapsible.tsx component uses
- the powerful react-native-reanimated library to
- animate opening this hint.
-
-
-
- {Platform.OS === 'web' && }
-
-
- );
-}
-
-const styles = StyleSheet.create({
- scrollView: {
- flex: 1,
- },
- contentContainer: {
- flexDirection: 'row',
- justifyContent: 'center',
- },
- container: {
- maxWidth: MaxContentWidth,
- flexGrow: 1,
- },
- titleContainer: {
- gap: Spacing.three,
- alignItems: 'center',
- paddingHorizontal: Spacing.four,
- paddingVertical: Spacing.six,
- },
- centerText: {
- textAlign: 'center',
- },
- pressed: {
- opacity: 0.7,
- },
- linkButton: {
- flexDirection: 'row',
- paddingHorizontal: Spacing.four,
- paddingVertical: Spacing.two,
- borderRadius: Spacing.five,
- justifyContent: 'center',
- gap: Spacing.one,
- alignItems: 'center',
- },
- sectionsWrapper: {
- gap: Spacing.five,
- paddingHorizontal: Spacing.four,
- paddingTop: Spacing.three,
- },
- collapsibleContent: {
- alignItems: 'center',
- },
- imageTutorial: {
- width: '100%',
- aspectRatio: 296 / 171,
- borderRadius: Spacing.three,
- marginTop: Spacing.two,
- },
- imageReact: {
- width: 100,
- height: 100,
- alignSelf: 'center',
- },
-});
diff --git a/apps/mobile/src/app/index.tsx b/apps/mobile/src/app/index.tsx
deleted file mode 100644
index 8ec3e6f..0000000
--- a/apps/mobile/src/app/index.tsx
+++ /dev/null
@@ -1,98 +0,0 @@
-import * as Device from 'expo-device';
-import { Platform, StyleSheet } from 'react-native';
-import { SafeAreaView } from 'react-native-safe-area-context';
-
-import { AnimatedIcon } from '@/components/animated-icon';
-import { HintRow } from '@/components/hint-row';
-import { ThemedText } from '@/components/themed-text';
-import { ThemedView } from '@/components/themed-view';
-import { WebBadge } from '@/components/web-badge';
-import { BottomTabInset, MaxContentWidth, Spacing } from '@/constants/theme';
-
-function getDevMenuHint() {
- if (Platform.OS === 'web') {
- return use browser devtools;
- }
- if (Device.isDevice) {
- return (
-
- shake device or press m in terminal
-
- );
- }
- const shortcut = Platform.OS === 'android' ? 'cmd+m (or ctrl+m)' : 'cmd+d';
- return (
-
- press {shortcut}
-
- );
-}
-
-export default function HomeScreen() {
- return (
-
-
-
-
-
- Welcome to Expo
-
-
-
-
- get started
-
-
-
- src/app/index.tsx}
- />
-
- npm run reset-project}
- />
-
-
- {Platform.OS === 'web' && }
-
-
- );
-}
-
-const styles = StyleSheet.create({
- container: {
- flex: 1,
- justifyContent: 'center',
- flexDirection: 'row',
- },
- safeArea: {
- flex: 1,
- paddingHorizontal: Spacing.four,
- alignItems: 'center',
- gap: Spacing.three,
- paddingBottom: BottomTabInset + Spacing.three,
- maxWidth: MaxContentWidth,
- },
- heroSection: {
- alignItems: 'center',
- justifyContent: 'center',
- flex: 1,
- paddingHorizontal: Spacing.four,
- gap: Spacing.four,
- },
- title: {
- textAlign: 'center',
- },
- code: {
- textTransform: 'uppercase',
- },
- stepContainer: {
- gap: Spacing.three,
- alignSelf: 'stretch',
- paddingHorizontal: Spacing.three,
- paddingVertical: Spacing.four,
- borderRadius: Spacing.four,
- },
-});
diff --git a/apps/mobile/src/components/animated-icon.module.css b/apps/mobile/src/components/animated-icon.module.css
deleted file mode 100644
index f8156fe..0000000
--- a/apps/mobile/src/components/animated-icon.module.css
+++ /dev/null
@@ -1,6 +0,0 @@
-.expoLogoBackground {
- background-image: linear-gradient(180deg, #3c9ffe, #0274df);
- border-radius: 40px;
- width: 128px;
- height: 128px;
-}
diff --git a/apps/mobile/src/components/animated-icon.tsx b/apps/mobile/src/components/animated-icon.tsx
deleted file mode 100644
index 91a480f..0000000
--- a/apps/mobile/src/components/animated-icon.tsx
+++ /dev/null
@@ -1,132 +0,0 @@
-import { Image } from 'expo-image';
-import { useState } from 'react';
-import { Dimensions, StyleSheet, View } from 'react-native';
-import Animated, { Easing, Keyframe } from 'react-native-reanimated';
-import { scheduleOnRN } from 'react-native-worklets';
-
-const INITIAL_SCALE_FACTOR = Dimensions.get('screen').height / 90;
-const DURATION = 600;
-
-export function AnimatedSplashOverlay() {
- const [visible, setVisible] = useState(true);
-
- if (!visible) return null;
-
- const splashKeyframe = new Keyframe({
- 0: {
- transform: [{ scale: INITIAL_SCALE_FACTOR }],
- opacity: 1,
- },
- 20: {
- opacity: 1,
- },
- 70: {
- opacity: 0,
- easing: Easing.elastic(0.7),
- },
- 100: {
- opacity: 0,
- transform: [{ scale: 1 }],
- easing: Easing.elastic(0.7),
- },
- });
-
- return (
- {
- 'worklet';
- if (finished) {
- scheduleOnRN(setVisible, false);
- }
- })}
- style={styles.backgroundSolidColor}
- />
- );
-}
-
-const keyframe = new Keyframe({
- 0: {
- transform: [{ scale: INITIAL_SCALE_FACTOR }],
- },
- 100: {
- transform: [{ scale: 1 }],
- easing: Easing.elastic(0.7),
- },
-});
-
-const logoKeyframe = new Keyframe({
- 0: {
- transform: [{ scale: 1.3 }],
- opacity: 0,
- },
- 40: {
- transform: [{ scale: 1.3 }],
- opacity: 0,
- easing: Easing.elastic(0.7),
- },
- 100: {
- opacity: 1,
- transform: [{ scale: 1 }],
- easing: Easing.elastic(0.7),
- },
-});
-
-const glowKeyframe = new Keyframe({
- 0: {
- transform: [{ rotateZ: '0deg' }],
- },
- 100: {
- transform: [{ rotateZ: '7200deg' }],
- },
-});
-
-export function AnimatedIcon() {
- return (
-
-
-
-
-
-
-
-
-
-
- );
-}
-
-const styles = StyleSheet.create({
- imageContainer: {
- justifyContent: 'center',
- alignItems: 'center',
- },
- glow: {
- width: 201,
- height: 201,
- position: 'absolute',
- },
- iconContainer: {
- justifyContent: 'center',
- alignItems: 'center',
- width: 128,
- height: 128,
- zIndex: 100,
- },
- image: {
- position: 'absolute',
- width: 76,
- height: 71,
- },
- background: {
- borderRadius: 40,
- experimental_backgroundImage: `linear-gradient(180deg, #3C9FFE, #0274DF)`,
- width: 128,
- height: 128,
- position: 'absolute',
- },
- backgroundSolidColor: {
- ...StyleSheet.absoluteFillObject,
- backgroundColor: '#208AEF',
- zIndex: 1000,
- },
-});
diff --git a/apps/mobile/src/components/animated-icon.web.tsx b/apps/mobile/src/components/animated-icon.web.tsx
deleted file mode 100644
index dfbb1fd..0000000
--- a/apps/mobile/src/components/animated-icon.web.tsx
+++ /dev/null
@@ -1,108 +0,0 @@
-import { Image } from 'expo-image';
-import { StyleSheet, View } from 'react-native';
-import Animated, { Keyframe, Easing } from 'react-native-reanimated';
-
-import classes from './animated-icon.module.css';
-const DURATION = 300;
-
-export function AnimatedSplashOverlay() {
- return null;
-}
-
-const keyframe = new Keyframe({
- 0: {
- transform: [{ scale: 0 }],
- },
- 60: {
- transform: [{ scale: 1.2 }],
- easing: Easing.elastic(1.2),
- },
- 100: {
- transform: [{ scale: 1 }],
- easing: Easing.elastic(1.2),
- },
-});
-
-const logoKeyframe = new Keyframe({
- 0: {
- opacity: 0,
- },
- 60: {
- transform: [{ scale: 1.2 }],
- opacity: 0,
- easing: Easing.elastic(1.2),
- },
- 100: {
- transform: [{ scale: 1 }],
- opacity: 1,
- easing: Easing.elastic(1.2),
- },
-});
-
-const glowKeyframe = new Keyframe({
- 0: {
- transform: [{ rotateZ: '-180deg' }, { scale: 0.8 }],
- opacity: 0,
- },
- [DURATION / 1000]: {
- transform: [{ rotateZ: '0deg' }, { scale: 1 }],
- opacity: 1,
- easing: Easing.elastic(0.7),
- },
- 100: {
- transform: [{ rotateZ: '7200deg' }],
- },
-});
-
-export function AnimatedIcon() {
- return (
-
-
-
-
-
-
-
-
-
-
-
-
-
- );
-}
-
-const styles = StyleSheet.create({
- container: {
- alignItems: 'center',
- width: '100%',
- zIndex: 1000,
- position: 'absolute',
- top: 128 / 2 + 138,
- },
- imageContainer: {
- justifyContent: 'center',
- alignItems: 'center',
- },
- glow: {
- width: 201,
- height: 201,
- position: 'absolute',
- },
- iconContainer: {
- justifyContent: 'center',
- alignItems: 'center',
- width: 128,
- height: 128,
- },
- image: {
- position: 'absolute',
- width: 76,
- height: 71,
- },
- background: {
- width: 128,
- height: 128,
- position: 'absolute',
- },
-});
diff --git a/apps/mobile/src/components/app-tabs.tsx b/apps/mobile/src/components/app-tabs.tsx
deleted file mode 100644
index 0e1bc23..0000000
--- a/apps/mobile/src/components/app-tabs.tsx
+++ /dev/null
@@ -1,33 +0,0 @@
-import { NativeTabs } from 'expo-router/unstable-native-tabs';
-import React from 'react';
-import { useColorScheme } from 'react-native';
-
-import { Colors } from '@/constants/theme';
-
-export default function AppTabs() {
- const scheme = useColorScheme();
- const colors = Colors[scheme === 'unspecified' ? 'light' : scheme];
-
- return (
-
-
- Home
-
-
-
-
- Explore
-
-
-
- );
-}
diff --git a/apps/mobile/src/components/app-tabs.web.tsx b/apps/mobile/src/components/app-tabs.web.tsx
deleted file mode 100644
index 6542e46..0000000
--- a/apps/mobile/src/components/app-tabs.web.tsx
+++ /dev/null
@@ -1,116 +0,0 @@
-import {
- Tabs,
- TabList,
- TabTrigger,
- TabSlot,
- TabTriggerSlotProps,
- TabListProps,
-} from 'expo-router/ui';
-import { SymbolView } from 'expo-symbols';
-import React from 'react';
-import { Pressable, useColorScheme, View, StyleSheet } from 'react-native';
-
-import { ExternalLink } from './external-link';
-import { ThemedText } from './themed-text';
-import { ThemedView } from './themed-view';
-
-import { Colors, MaxContentWidth, Spacing } from '@/constants/theme';
-
-export default function AppTabs() {
- return (
-
-
-
-
-
- Home
-
-
- Explore
-
-
-
-
- );
-}
-
-export function TabButton({ children, isFocused, ...props }: TabTriggerSlotProps) {
- return (
- pressed && styles.pressed}>
-
-
- {children}
-
-
-
- );
-}
-
-export function CustomTabList(props: TabListProps) {
- const scheme = useColorScheme();
- const colors = Colors[scheme === 'unspecified' ? 'light' : scheme];
-
- return (
-
-
-
- Expo Starter
-
-
- {props.children}
-
-
-
- Docs
-
-
-
-
-
- );
-}
-
-const styles = StyleSheet.create({
- tabListContainer: {
- position: 'absolute',
- width: '100%',
- padding: Spacing.three,
- justifyContent: 'center',
- alignItems: 'center',
- flexDirection: 'row',
- },
- innerContainer: {
- paddingVertical: Spacing.two,
- paddingHorizontal: Spacing.five,
- borderRadius: Spacing.five,
- flexDirection: 'row',
- alignItems: 'center',
- flexGrow: 1,
- gap: Spacing.two,
- maxWidth: MaxContentWidth,
- },
- brandText: {
- marginRight: 'auto',
- },
- pressed: {
- opacity: 0.7,
- },
- tabButtonView: {
- paddingVertical: Spacing.one,
- paddingHorizontal: Spacing.three,
- borderRadius: Spacing.three,
- },
- externalPressable: {
- flexDirection: 'row',
- justifyContent: 'center',
- alignItems: 'center',
- gap: Spacing.one,
- marginLeft: Spacing.three,
- },
-});
diff --git a/apps/mobile/src/components/external-link.tsx b/apps/mobile/src/components/external-link.tsx
deleted file mode 100644
index 883e515..0000000
--- a/apps/mobile/src/components/external-link.tsx
+++ /dev/null
@@ -1,25 +0,0 @@
-import { Href, Link } from 'expo-router';
-import { openBrowserAsync, WebBrowserPresentationStyle } from 'expo-web-browser';
-import { type ComponentProps } from 'react';
-
-type Props = Omit, 'href'> & { href: Href & string };
-
-export function ExternalLink({ href, ...rest }: Props) {
- return (
- {
- if (process.env.EXPO_OS !== 'web') {
- // Prevent the default behavior of linking to the default browser on native.
- event.preventDefault();
- // Open the link in an in-app browser.
- await openBrowserAsync(href, {
- presentationStyle: WebBrowserPresentationStyle.AUTOMATIC,
- });
- }
- }}
- />
- );
-}
diff --git a/apps/mobile/src/components/hint-row.tsx b/apps/mobile/src/components/hint-row.tsx
deleted file mode 100644
index a66062b..0000000
--- a/apps/mobile/src/components/hint-row.tsx
+++ /dev/null
@@ -1,35 +0,0 @@
-import React, { type ReactNode } from 'react';
-import { View, StyleSheet } from 'react-native';
-
-import { ThemedText } from './themed-text';
-import { ThemedView } from './themed-view';
-
-import { Spacing } from '@/constants/theme';
-
-type HintRowProps = {
- title?: string;
- hint?: ReactNode;
-};
-
-export function HintRow({ title = 'Try editing', hint = 'app/index.tsx' }: HintRowProps) {
- return (
-
- {title}
-
- {hint}
-
-
- );
-}
-
-const styles = StyleSheet.create({
- stepRow: {
- flexDirection: 'row',
- justifyContent: 'space-between',
- },
- codeSnippet: {
- borderRadius: Spacing.two,
- paddingVertical: Spacing.half,
- paddingHorizontal: Spacing.two,
- },
-});
diff --git a/apps/mobile/src/components/themed-text.tsx b/apps/mobile/src/components/themed-text.tsx
deleted file mode 100644
index 799c8b1..0000000
--- a/apps/mobile/src/components/themed-text.tsx
+++ /dev/null
@@ -1,73 +0,0 @@
-import { Platform, StyleSheet, Text, type TextProps } from 'react-native';
-
-import { Fonts, ThemeColor } from '@/constants/theme';
-import { useTheme } from '@/hooks/use-theme';
-
-export type ThemedTextProps = TextProps & {
- type?: 'default' | 'title' | 'small' | 'smallBold' | 'subtitle' | 'link' | 'linkPrimary' | 'code';
- themeColor?: ThemeColor;
-};
-
-export function ThemedText({ style, type = 'default', themeColor, ...rest }: ThemedTextProps) {
- const theme = useTheme();
-
- return (
-
- );
-}
-
-const styles = StyleSheet.create({
- small: {
- fontSize: 14,
- lineHeight: 20,
- fontWeight: 500,
- },
- smallBold: {
- fontSize: 14,
- lineHeight: 20,
- fontWeight: 700,
- },
- default: {
- fontSize: 16,
- lineHeight: 24,
- fontWeight: 500,
- },
- title: {
- fontSize: 48,
- fontWeight: 600,
- lineHeight: 52,
- },
- subtitle: {
- fontSize: 32,
- lineHeight: 44,
- fontWeight: 600,
- },
- link: {
- lineHeight: 30,
- fontSize: 14,
- },
- linkPrimary: {
- lineHeight: 30,
- fontSize: 14,
- color: '#3c87f7',
- },
- code: {
- fontFamily: Fonts.mono,
- fontWeight: Platform.select({ android: 700 }) ?? 500,
- fontSize: 12,
- },
-});
diff --git a/apps/mobile/src/components/themed-view.tsx b/apps/mobile/src/components/themed-view.tsx
deleted file mode 100644
index c710df9..0000000
--- a/apps/mobile/src/components/themed-view.tsx
+++ /dev/null
@@ -1,16 +0,0 @@
-import { View, type ViewProps } from 'react-native';
-
-import { ThemeColor } from '@/constants/theme';
-import { useTheme } from '@/hooks/use-theme';
-
-export type ThemedViewProps = ViewProps & {
- lightColor?: string;
- darkColor?: string;
- type?: ThemeColor;
-};
-
-export function ThemedView({ style, lightColor, darkColor, type, ...otherProps }: ThemedViewProps) {
- const theme = useTheme();
-
- return ;
-}
diff --git a/apps/mobile/src/components/ui/collapsible.tsx b/apps/mobile/src/components/ui/collapsible.tsx
deleted file mode 100644
index d0d745b..0000000
--- a/apps/mobile/src/components/ui/collapsible.tsx
+++ /dev/null
@@ -1,65 +0,0 @@
-import { SymbolView } from 'expo-symbols';
-import { PropsWithChildren, useState } from 'react';
-import { Pressable, StyleSheet } from 'react-native';
-import Animated, { FadeIn } from 'react-native-reanimated';
-
-import { ThemedText } from '@/components/themed-text';
-import { ThemedView } from '@/components/themed-view';
-import { Spacing } from '@/constants/theme';
-import { useTheme } from '@/hooks/use-theme';
-
-export function Collapsible({ children, title }: PropsWithChildren & { title: string }) {
- const [isOpen, setIsOpen] = useState(false);
- const theme = useTheme();
-
- return (
-
- [styles.heading, pressed && styles.pressedHeading]}
- onPress={() => setIsOpen((value) => !value)}>
-
-
-
-
- {title}
-
- {isOpen && (
-
-
- {children}
-
-
- )}
-
- );
-}
-
-const styles = StyleSheet.create({
- heading: {
- flexDirection: 'row',
- alignItems: 'center',
- gap: Spacing.two,
- },
- pressedHeading: {
- opacity: 0.7,
- },
- button: {
- width: Spacing.four,
- height: Spacing.four,
- borderRadius: 12,
- justifyContent: 'center',
- alignItems: 'center',
- },
- content: {
- marginTop: Spacing.three,
- borderRadius: Spacing.three,
- marginLeft: Spacing.four,
- padding: Spacing.four,
- },
-});
diff --git a/apps/mobile/src/components/web-badge.tsx b/apps/mobile/src/components/web-badge.tsx
deleted file mode 100644
index 23933d2..0000000
--- a/apps/mobile/src/components/web-badge.tsx
+++ /dev/null
@@ -1,44 +0,0 @@
-import { version } from 'expo/package.json';
-import { Image } from 'expo-image';
-import React from 'react';
-import { useColorScheme, StyleSheet } from 'react-native';
-
-import { ThemedText } from './themed-text';
-import { ThemedView } from './themed-view';
-
-import { Spacing } from '@/constants/theme';
-
-export function WebBadge() {
- const scheme = useColorScheme();
-
- return (
-
-
- v{version}
-
-
-
- );
-}
-
-const styles = StyleSheet.create({
- container: {
- padding: Spacing.five,
- alignItems: 'center',
- gap: Spacing.two,
- },
- versionText: {
- textAlign: 'center',
- },
- badgeImage: {
- width: 123,
- aspectRatio: 123 / 24,
- },
-});
diff --git a/apps/mobile/src/constants/theme.ts b/apps/mobile/src/constants/theme.ts
deleted file mode 100644
index c10ed27..0000000
--- a/apps/mobile/src/constants/theme.ts
+++ /dev/null
@@ -1,65 +0,0 @@
-/**
- * Below are the colors that are used in the app. The colors are defined in the light and dark mode.
- * There are many other ways to style your app. For example, [Nativewind](https://www.nativewind.dev/), [Tamagui](https://tamagui.dev/), [unistyles](https://reactnativeunistyles.vercel.app), etc.
- */
-
-import '@/global.css';
-
-import { Platform } from 'react-native';
-
-export const Colors = {
- light: {
- text: '#000000',
- background: '#ffffff',
- backgroundElement: '#F0F0F3',
- backgroundSelected: '#E0E1E6',
- textSecondary: '#60646C',
- },
- dark: {
- text: '#ffffff',
- background: '#000000',
- backgroundElement: '#212225',
- backgroundSelected: '#2E3135',
- textSecondary: '#B0B4BA',
- },
-} as const;
-
-export type ThemeColor = keyof typeof Colors.light & keyof typeof Colors.dark;
-
-export const Fonts = Platform.select({
- ios: {
- /** iOS `UIFontDescriptorSystemDesignDefault` */
- sans: 'system-ui',
- /** iOS `UIFontDescriptorSystemDesignSerif` */
- serif: 'ui-serif',
- /** iOS `UIFontDescriptorSystemDesignRounded` */
- rounded: 'ui-rounded',
- /** iOS `UIFontDescriptorSystemDesignMonospaced` */
- mono: 'ui-monospace',
- },
- default: {
- sans: 'normal',
- serif: 'serif',
- rounded: 'normal',
- mono: 'monospace',
- },
- web: {
- sans: 'var(--font-display)',
- serif: 'var(--font-serif)',
- rounded: 'var(--font-rounded)',
- mono: 'var(--font-mono)',
- },
-});
-
-export const Spacing = {
- half: 2,
- one: 4,
- two: 8,
- three: 16,
- four: 24,
- five: 32,
- six: 64,
-} as const;
-
-export const BottomTabInset = Platform.select({ ios: 50, android: 80 }) ?? 0;
-export const MaxContentWidth = 800;
diff --git a/apps/mobile/src/global.css b/apps/mobile/src/global.css
deleted file mode 100644
index c8fe503..0000000
--- a/apps/mobile/src/global.css
+++ /dev/null
@@ -1,9 +0,0 @@
-:root {
- --font-display:
- Spline Sans, Inter, ui-sans-serif, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji,
- Segoe UI Symbol, Noto Color Emoji;
- --font-mono:
- ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace;
- --font-rounded: 'SF Pro Rounded', 'Hiragino Maru Gothic ProN', Meiryo, 'MS PGothic', sans-serif;
- --font-serif: Georgia, 'Times New Roman', serif;
-}
diff --git a/apps/mobile/src/hooks/use-color-scheme.ts b/apps/mobile/src/hooks/use-color-scheme.ts
deleted file mode 100644
index 17e3c63..0000000
--- a/apps/mobile/src/hooks/use-color-scheme.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { useColorScheme } from 'react-native';
diff --git a/apps/mobile/src/hooks/use-color-scheme.web.ts b/apps/mobile/src/hooks/use-color-scheme.web.ts
deleted file mode 100644
index 7eb1c1b..0000000
--- a/apps/mobile/src/hooks/use-color-scheme.web.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-import { useEffect, useState } from 'react';
-import { useColorScheme as useRNColorScheme } from 'react-native';
-
-/**
- * To support static rendering, this value needs to be re-calculated on the client side for web
- */
-export function useColorScheme() {
- const [hasHydrated, setHasHydrated] = useState(false);
-
- useEffect(() => {
- setHasHydrated(true);
- }, []);
-
- const colorScheme = useRNColorScheme();
-
- if (hasHydrated) {
- return colorScheme;
- }
-
- return 'light';
-}
diff --git a/apps/mobile/src/hooks/use-theme.ts b/apps/mobile/src/hooks/use-theme.ts
deleted file mode 100644
index 677e015..0000000
--- a/apps/mobile/src/hooks/use-theme.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-/**
- * Learn more about light and dark modes:
- * https://docs.expo.dev/guides/color-schemes/
- */
-
-import { Colors } from '@/constants/theme';
-import { useColorScheme } from '@/hooks/use-color-scheme';
-
-export function useTheme() {
- const scheme = useColorScheme();
- const theme = scheme === 'unspecified' ? 'light' : scheme;
-
- return Colors[theme];
-}
diff --git a/apps/mobile/tsconfig.json b/apps/mobile/tsconfig.json
deleted file mode 100644
index 2e9a669..0000000
--- a/apps/mobile/tsconfig.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "extends": "expo/tsconfig.base",
- "compilerOptions": {
- "strict": true,
- "paths": {
- "@/*": [
- "./src/*"
- ],
- "@/assets/*": [
- "./assets/*"
- ]
- }
- },
- "include": [
- "**/*.ts",
- "**/*.tsx",
- ".expo/types/**/*.ts",
- "expo-env.d.ts"
- ]
-}
diff --git a/packages/protocol/package.json b/packages/protocol/package.json
deleted file mode 100644
index 443bdbf..0000000
--- a/packages/protocol/package.json
+++ /dev/null
@@ -1 +0,0 @@
-{"name":"@constructor/protocol","private":true,"version":"0.0.0","main":"src/index.ts","types":"src/index.ts"}