+
+
+
+ Technical specs
+
+
+ -
+ •
+ UI built with React Native
+
+ -
+ •
+
+ SSH core powered by
+
+ Russh
+
+ (Rust-based SSH library)
+
+
+ -
+ •
+ Planned to be open source
+
+
+
diff --git a/docs/ui-overhaul.md b/docs/ui-overhaul.md
new file mode 100644
index 0000000..c672d48
--- /dev/null
+++ b/docs/ui-overhaul.md
@@ -0,0 +1,32 @@
+Right now the styling for my app is very bad. @apps/mobile/src/app/\_layout.tsx
+@apps/mobile/src/app/index.tsx @apps/mobile/src/app/ shell.tsx First off, on IOS
+if I do not use the SafeAreaView, the app header title renders underneath the
+notch. https:// docs.expo.dev/develop/user-interface/safe-areas/ and underneath
+the system bars https://docs.expo.dev/develop/user-interface/system- bars/ I
+tried to implement it but I am not sure if the safearea should go above the
+scrollview or below? I see no examples of using safe area with a scroll view in
+the docs. Right now if I like over drage in either direction, there is a white
+background around everything. EI my chosen background color is not edge to edge
+when overscrolling. I was kind of hoping to use liquid glass like described the
+images show in this guide https://docs.expo.dev/router/advanced/native-tabs/ but
+the ones that show up on my ios simulator are not liquid glass. Maybe I need an
+ios simulator with a different IOS version? (mine is 18) maybe I need to enable
+it somewhere? https://docs.expo.dev/versions/latest/sdk/glass-effect/ Also I
+eventually want users to pick their own theme. That will live in the settings
+page but all the colors should come from a single theme file (currently doesn't
+exist). Also when I did the layout for the index screen, I was not planning on
+having a bottom tab bar, now that I do it should probably change. I really hate
+everything about the private key modal, I would rather it be its own shared
+route https://docs.expo.dev/router/advanced/shared- routes/ or maybe it should
+be a modal? https://docs.expo.dev/router/advanced/modals/? not sure but I know I
+want to be able to bring up the same private key management Ui from the settings
+screen and the index screen. I imagine they should be pushed to the top of the
+stack of whatever bottom tab you are currently on. We will also need the shell
+screen to start out on a list shell screen. The shell detail (what is currently
+shell.tsx) will need to be renamed and moved. The placeholder text in the
+command input box is truncated on the shell screen. I do not think we should put
+the execute button on the same line as the command input text. It makes the
+command input textbox too small. We also need to add a disconnect button to the
+screen for ios users because they do not have a back button. (Maybe we do this
+in the header bar?)
+https://docs.expo.dev/router/advanced/stack/#configure-header-bar
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 12f5188..20dab69 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -94,6 +94,9 @@ importers:
expo-font:
specifier: ~14.0.8
version: 14.0.8(expo@54.0.7)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0)
+ expo-glass-effect:
+ specifier: ^0.1.3
+ version: 0.1.3(expo@54.0.7)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0)
expo-haptics:
specifier: ~15.0.7
version: 15.0.7(expo@54.0.7)
@@ -4734,6 +4737,13 @@ packages:
react: '*'
react-native: '*'
+ expo-glass-effect@0.1.3:
+ resolution: {integrity: sha512-wGWS8DdenyqwBHpVKwFCishtB08HD4SW6SZjIx9BXw92q/9b9fiygBypFob9dT0Mct6d05g7XRBRZ8Ryw5rYIg==}
+ peerDependencies:
+ expo: '*'
+ react: '*'
+ react-native: '*'
+
expo-haptics@15.0.7:
resolution: {integrity: sha512-7flWsYPrwjJxZ8x82RiJtzsnk1Xp9ahnbd9PhCy3NnsemyMApoWIEUr4waPqFr80DtiLZfhD9VMLL1CKa8AImQ==}
peerDependencies:
@@ -14192,6 +14202,12 @@ snapshots:
react: 19.1.0
react-native: 0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0)
+ expo-glass-effect@0.1.3(expo@54.0.7)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0):
+ dependencies:
+ expo: 54.0.7(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.4)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0)
+ react: 19.1.0
+ react-native: 0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0)
+
expo-haptics@15.0.7(expo@54.0.7):
dependencies:
expo: 54.0.7(@babel/core@7.28.3)(@expo/metro-runtime@6.1.1)(expo-router@6.0.4)(react-native@0.81.4(@babel/core@7.28.3)(@react-native-community/cli@20.0.2(typescript@5.9.2))(@types/react@19.1.12)(react@19.1.0))(react@19.1.0)