Files changed (11) hide show
  1. .gitignore +41 -0
  2. .replit +74 -0
  3. app.json +46 -0
  4. babel.config.js +6 -0
  5. drizzle.config.ts +14 -0
  6. eslint.config.js +9 -0
  7. expo-env.d.ts +3 -0
  8. metro.config.js +5 -0
  9. package-lock.json +0 -0
  10. package.json +81 -0
  11. tsconfig.json +21 -0
.gitignore ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Learn more https://docs.github.com/en/get-started/getting-started-with-git/ignoring-files
2
+
3
+ # dependencies
4
+ node_modules/
5
+
6
+ # Expo
7
+ .expo/
8
+ dist/
9
+ web-build/
10
+ expo-env.d.ts
11
+
12
+ # Native
13
+ ios/
14
+ android/
15
+ *.orig.*
16
+ *.jks
17
+ *.p8
18
+ *.p12
19
+ *.key
20
+ *.mobileprovision
21
+
22
+ # Metro
23
+ .metro-health-check*
24
+
25
+ # debug
26
+ npm-debug.*
27
+ yarn-debug.*
28
+ yarn-error.*
29
+
30
+ # macOS
31
+ .DS_Store
32
+ *.pem
33
+
34
+ # local env files
35
+ .env*.local
36
+
37
+ # typescript
38
+ *.tsbuildinfo
39
+ .vercel
40
+
41
+ .env
.replit ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ entrypoint = "README.md"
2
+ modules = ["nodejs-22"]
3
+
4
+ [nix]
5
+ channel = "stable-24_05"
6
+
7
+ [deployment]
8
+ deploymentTarget = "cloudrun"
9
+ build = ["sh", "-c", "npm run expo:static:build && npm run server:build"]
10
+ run = ["npm", "run", "server:prod"]
11
+
12
+ [[ports]]
13
+ localPort = 5000
14
+ externalPort = 5000
15
+
16
+ [[ports]]
17
+ localPort = 8081
18
+ externalPort = 80
19
+
20
+ [[ports]]
21
+ localPort = 8082
22
+ externalPort = 3000
23
+
24
+ [env]
25
+ PORT = "5000"
26
+
27
+ [agent]
28
+ stack = "EXPO"
29
+
30
+ [workflows]
31
+ runButton = "Project"
32
+
33
+ [[workflows.workflow]]
34
+ name = "Project"
35
+ mode = "parallel"
36
+ author = "agent"
37
+
38
+ [[workflows.workflow.tasks]]
39
+ task = "workflow.run"
40
+ args = "Start App"
41
+
42
+ [[workflows.workflow]]
43
+ name = "Start App"
44
+ author = "agent"
45
+ mode = "parallel"
46
+
47
+ [[workflows.workflow.tasks]]
48
+ task = "workflow.run"
49
+ args = "Start Backend"
50
+
51
+ [[workflows.workflow.tasks]]
52
+ task = "workflow.run"
53
+ args = "Start Frontend"
54
+
55
+ [[workflows.workflow]]
56
+ name = "Start Backend"
57
+ author = "agent"
58
+ mode = "sequential"
59
+
60
+ [[workflows.workflow.tasks]]
61
+ task = "shell.exec"
62
+ args = "npm run server:dev"
63
+ waitForPort = 5000
64
+
65
+ [[workflows.workflow]]
66
+ name = "Start Frontend"
67
+ author = "agent"
68
+ mode = "sequential"
69
+
70
+ [[workflows.workflow.tasks]]
71
+ task = "shell.exec"
72
+ args = "npm run expo:dev"
73
+ waitForPort = 8081
74
+ ensurePreviewReachable = "/status"
app.json ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "expo": {
3
+ "name": "VocalClean AI",
4
+ "slug": "vocalclean-ai",
5
+ "version": "1.0.0",
6
+ "orientation": "portrait",
7
+ "icon": "./assets/images/icon.png",
8
+ "scheme": "vocalclean",
9
+ "userInterfaceStyle": "automatic",
10
+ "newArchEnabled": true,
11
+ "splash": {
12
+ "image": "./assets/images/splash-icon.png",
13
+ "resizeMode": "contain",
14
+ "backgroundColor": "#F8FAFC"
15
+ },
16
+ "ios": {
17
+ "supportsTablet": false,
18
+ "bundleIdentifier": "com.vocalclean.ai"
19
+ },
20
+ "android": {
21
+ "package": "com.vocalclean.ai",
22
+ "adaptiveIcon": {
23
+ "backgroundColor": "#F8FAFC",
24
+ "foregroundImage": "./assets/images/icon.png"
25
+ }
26
+ },
27
+ "web": {
28
+ "favicon": "./assets/images/favicon.png"
29
+ },
30
+ "plugins": [
31
+ [
32
+ "expo-router",
33
+ {
34
+ "origin": "https://replit.com/"
35
+ }
36
+ ],
37
+ "expo-font",
38
+ "expo-web-browser",
39
+ "expo-localization"
40
+ ],
41
+ "experiments": {
42
+ "typedRoutes": true,
43
+ "reactCompiler": true
44
+ }
45
+ }
46
+ }
babel.config.js ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ module.exports = function (api) {
2
+ api.cache(true);
3
+ return {
4
+ presets: [["babel-preset-expo", { unstable_transformImportMeta: true }]],
5
+ };
6
+ };
drizzle.config.ts ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { defineConfig } from "drizzle-kit";
2
+
3
+ if (!process.env.DATABASE_URL) {
4
+ throw new Error("DATABASE_URL, ensure the database is provisioned");
5
+ }
6
+
7
+ export default defineConfig({
8
+ out: "./migrations",
9
+ schema: "./shared/schema.ts",
10
+ dialect: "postgresql",
11
+ dbCredentials: {
12
+ url: process.env.DATABASE_URL,
13
+ },
14
+ });
eslint.config.js ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ const { defineConfig } = require('eslint/config');
2
+ const expoConfig = require('eslint-config-expo/flat');
3
+
4
+ module.exports = defineConfig([
5
+ expoConfig,
6
+ {
7
+ ignores: ["dist/*"],
8
+ }
9
+ ]);
expo-env.d.ts ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ /// <reference types="expo/types" />
2
+
3
+ // NOTE: This file should not be edited and should be in your git ignore
metro.config.js ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ const { getDefaultConfig } = require("expo/metro-config");
2
+
3
+ const config = getDefaultConfig(__dirname);
4
+
5
+ module.exports = config;
package-lock.json ADDED
The diff for this file is too large to render. See raw diff
 
package.json ADDED
@@ -0,0 +1,81 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "expo-app",
3
+ "main": "expo-router/entry",
4
+ "version": "1.0.0",
5
+ "scripts": {
6
+ "postinstall": "patch-package",
7
+ "expo:dev": "EXPO_PACKAGER_PROXY_URL=https://$REPLIT_DEV_DOMAIN REACT_NATIVE_PACKAGER_HOSTNAME=$REPLIT_DEV_DOMAIN EXPO_PUBLIC_DOMAIN=$REPLIT_DEV_DOMAIN:5000 npx expo start --localhost",
8
+ "server:dev": "NODE_ENV=development tsx server/index.ts",
9
+ "expo:start:static:build": "npx expo start --no-dev --minify --localhost",
10
+ "expo:static:build": "node scripts/build.js",
11
+ "server:build": "esbuild server/index.ts --platform=node --packages=external --bundle --format=esm --outdir=server_dist",
12
+ "server:prod": "NODE_ENV=production node server_dist/index.js",
13
+ "db:push": "drizzle-kit push",
14
+ "start": "npx expo start",
15
+ "lint": "npx expo lint",
16
+ "lint:fix": "npx expo lint --fix"
17
+ },
18
+ "dependencies": {
19
+ "@expo-google-fonts/inter": "^0.4.2",
20
+ "@expo/vector-icons": "^15.0.3",
21
+ "@react-native-async-storage/async-storage": "2.2.0",
22
+ "@stardazed/streams-text-encoding": "^1.0.2",
23
+ "@tanstack/react-query": "^5.83.0",
24
+ "@ungap/structured-clone": "^1.3.0",
25
+ "drizzle-orm": "^0.39.3",
26
+ "drizzle-zod": "^0.7.0",
27
+ "expo": "~54.0.27",
28
+ "expo-av": "^16.0.8",
29
+ "expo-blur": "~15.0.8",
30
+ "expo-constants": "~18.0.11",
31
+ "expo-crypto": "^15.0.8",
32
+ "expo-document-picker": "^14.0.8",
33
+ "expo-file-system": "^19.0.21",
34
+ "expo-font": "~14.0.10",
35
+ "expo-glass-effect": "~0.1.4",
36
+ "expo-haptics": "~15.0.8",
37
+ "expo-image": "~3.0.11",
38
+ "expo-image-picker": "~17.0.9",
39
+ "expo-linear-gradient": "~15.0.8",
40
+ "expo-linking": "~8.0.10",
41
+ "expo-localization": "^17.0.8",
42
+ "expo-location": "~19.0.8",
43
+ "expo-router": "~6.0.17",
44
+ "expo-splash-screen": "~31.0.12",
45
+ "expo-status-bar": "~3.0.9",
46
+ "expo-symbols": "~1.0.8",
47
+ "expo-system-ui": "~6.0.9",
48
+ "expo-web-browser": "~15.0.10",
49
+ "express": "^5.0.1",
50
+ "http-proxy-middleware": "^3.0.5",
51
+ "pg": "^8.16.3",
52
+ "react": "19.1.0",
53
+ "react-dom": "19.1.0",
54
+ "react-native": "0.81.5",
55
+ "react-native-gesture-handler": "~2.28.0",
56
+ "react-native-keyboard-controller": "^1.20.6",
57
+ "react-native-reanimated": "~4.1.1",
58
+ "react-native-safe-area-context": "~5.6.0",
59
+ "react-native-screens": "~4.16.0",
60
+ "react-native-svg": "15.12.1",
61
+ "react-native-web": "^0.21.0",
62
+ "react-native-worklets": "0.5.1",
63
+ "tsx": "^4.20.6",
64
+ "ws": "^8.18.0",
65
+ "zod": "^3.24.2",
66
+ "zod-validation-error": "^3.4.0"
67
+ },
68
+ "devDependencies": {
69
+ "@babel/core": "^7.25.2",
70
+ "@expo/ngrok": "^4.1.0",
71
+ "@types/express": "^5.0.0",
72
+ "@types/react": "~19.1.10",
73
+ "babel-plugin-react-compiler": "^19.0.0-beta-e993439-20250117",
74
+ "drizzle-kit": "^0.31.4",
75
+ "eslint": "^9.31.0",
76
+ "eslint-config-expo": "~10.0.0",
77
+ "patch-package": "^8.0.0",
78
+ "typescript": "~5.9.2"
79
+ },
80
+ "private": true
81
+ }
tsconfig.json ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "extends": "expo/tsconfig.base",
3
+ "compilerOptions": {
4
+ "baseUrl": ".",
5
+ "strict": true,
6
+ "paths": {
7
+ "@/*": [
8
+ "./*"
9
+ ],
10
+ "@shared/*": [
11
+ "./shared/*"
12
+ ]
13
+ }
14
+ },
15
+ "include": [
16
+ "**/*.ts",
17
+ "**/*.tsx",
18
+ ".expo/types/**/*.ts",
19
+ "expo-env.d.ts"
20
+ ]
21
+ }