Polish mobile app for App Store review and expand CRUD.

Default to beenvoice.soconnor.dev with server settings hidden behind Advanced; add Entities tab with clients/businesses, invoice creation, UI fixes for dashboard layout, date fields, FAB position, and card-matched button radius.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-06-17 23:14:58 -04:00
parent 14c880123c
commit 6d2711e36e
41 changed files with 2410 additions and 181 deletions
+21 -19
View File
@@ -1,9 +1,11 @@
import { Image } from "expo-image";
import { StyleSheet, Text, View, type ImageStyle, type ViewStyle } from "react-native";
import { StyleSheet, Text, View, type ViewStyle } from "react-native";
import { useAppTheme } from "@/contexts/ThemeContext";
import { fonts } from "@/constants/theme";
const markSource = require("@/assets/images/icon.png");
type LogoSize = "xs" | "sm" | "md" | "lg";
const widths: Record<LogoSize, number> = {
@@ -42,30 +44,34 @@ export function Logo({ size = "md", style, onDark }: LogoProps) {
);
}
/** Square app icon mark — fixed aspect ratio so flex parents cannot squash it. */
/** Square dollar mark from Icon Composer export (1024×1024 PNG). */
export function LogoMark({
size = 32,
style,
}: {
size?: number;
style?: ImageStyle;
style?: ViewStyle;
}) {
const flat = StyleSheet.flatten(style);
const width =
typeof flat?.width === "number"
? flat.width
: typeof flat?.height === "number"
? flat.height
: size;
const height = typeof flat?.height === "number" ? flat.height : width;
const fromStyle =
typeof style?.width === "number"
? style.width
: typeof style?.height === "number"
? style.height
: undefined;
const dimension = fromStyle ?? size;
return (
<View style={[styles.markBox, { width, height }]}>
<View
style={[
styles.markBox,
{ width: dimension, height: dimension, aspectRatio: 1 },
style,
]}
>
<Image
source={require("@/assets/images/icon.png")}
style={styles.markImage}
source={markSource}
style={{ width: dimension, height: dimension }}
contentFit="contain"
accessibilityLabel="beenvoice"
/>
</View>
);
@@ -98,10 +104,6 @@ const styles = StyleSheet.create({
alignItems: "center",
justifyContent: "center",
},
markImage: {
width: "100%",
height: "100%",
},
heading: {
fontFamily: fonts.heading,
},