@idealyst/cli 1.0.83 → 1.0.85

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -55,7 +55,7 @@ export const HelloWorld = ({
55
55
  <Screen style={{ flex: 1, padding: 20 }}>
56
56
  <View style={{ maxWidth: 600, alignSelf: "center" }}>
57
57
  <Text
58
- size="xlarge"
58
+ size="xl"
59
59
  weight="bold"
60
60
  style={{
61
61
  marginBottom: 16,
@@ -67,7 +67,7 @@ export const HelloWorld = ({
67
67
  </Text>
68
68
 
69
69
  <Text
70
- size="large"
70
+ size="lg"
71
71
  style={{
72
72
  marginBottom: 32,
73
73
  textAlign: "center",
@@ -79,18 +79,18 @@ export const HelloWorld = ({
79
79
  {platformText}
80
80
  </Text>
81
81
  {/* Framework Branding Card */}
82
- <Card variant="elevated" padding="large" intent="primary">
82
+ <Card variant="elevated" padding="lg" intent="primary">
83
83
  <View style={{ alignItems: "center" }}>
84
84
  <Text style={{ fontSize: 32, marginBottom: 16 }}>🚀</Text>
85
85
  <Text
86
- size="xlarge"
86
+ size="xl"
87
87
  weight="bold"
88
88
  style={{ marginBottom: 8, textAlign: "center" }}
89
89
  >
90
90
  Idealyst Framework
91
91
  </Text>
92
92
  <Text
93
- size="medium"
93
+ size="md"
94
94
  style={{ marginBottom: 16, textAlign: "center" }}
95
95
  >
96
96
  Hello, {name}! Welcome to your cross-platform workspace.
@@ -107,28 +107,28 @@ export const HelloWorld = ({
107
107
  >
108
108
  <Card
109
109
  variant="filled"
110
- padding="small"
110
+ padding="sm"
111
111
  style={{ backgroundColor: "rgba(255, 255, 255, 0.2)" }}
112
112
  >
113
- <Text size="small" weight="semibold">
113
+ <Text size="sm" weight="semibold">
114
114
  React
115
115
  </Text>
116
116
  </Card>
117
117
  <Card
118
118
  variant="filled"
119
- padding="small"
119
+ padding="sm"
120
120
  style={{ backgroundColor: "rgba(255, 255, 255, 0.2)" }}
121
121
  >
122
- <Text size="small" weight="semibold">
122
+ <Text size="sm" weight="semibold">
123
123
  TypeScript
124
124
  </Text>
125
125
  </Card>
126
126
  <Card
127
127
  variant="filled"
128
- padding="small"
128
+ padding="sm"
129
129
  style={{ backgroundColor: "rgba(255, 255, 255, 0.2)" }}
130
130
  >
131
- <Text size="small" weight="semibold">
131
+ <Text size="sm" weight="semibold">
132
132
  Cross-Platform
133
133
  </Text>
134
134
  </Card>
@@ -137,56 +137,56 @@ export const HelloWorld = ({
137
137
  </Card>
138
138
 
139
139
  {/* Quick Start Guide Card */}
140
- <Card variant="outlined" padding="large" style={{ marginTop: 16 }}>
141
- <Text size="large" weight="bold" style={{ marginBottom: 16 }}>
140
+ <Card variant="outlined" padding="lg" style={{ marginTop: 16 }}>
141
+ <Text size="lg" weight="bold" style={{ marginBottom: 16 }}>
142
142
  🎯 Quick Start Guide
143
143
  </Text>
144
144
 
145
145
  <View style={{ marginBottom: 16 }}>
146
- <Text size="medium" weight="semibold" style={{ marginBottom: 8 }}>
146
+ <Text size="md" weight="semibold" style={{ marginBottom: 8 }}>
147
147
  Your Workspace Overview:
148
148
  </Text>
149
- <Text size="small" style={{ marginBottom: 4 }}>
149
+ <Text size="sm" style={{ marginBottom: 4 }}>
150
150
  • <Text weight="semibold">packages/web/</Text> - React web
151
151
  application
152
152
  </Text>
153
- <Text size="small" style={{ marginBottom: 4 }}>
153
+ <Text size="sm" style={{ marginBottom: 4 }}>
154
154
  • <Text weight="semibold">packages/mobile/</Text> - React Native
155
155
  mobile app
156
156
  </Text>
157
- <Text size="small" style={{ marginBottom: 4 }}>
157
+ <Text size="sm" style={{ marginBottom: 4 }}>
158
158
  • <Text weight="semibold">packages/shared/</Text> - Cross-platform
159
159
  components
160
160
  </Text>
161
- <Text size="small" style={{ marginBottom: 4 }}>
161
+ <Text size="sm" style={{ marginBottom: 4 }}>
162
162
  • <Text weight="semibold">packages/api/</Text> - tRPC API server
163
163
  </Text>
164
164
  </View>
165
165
 
166
166
  <View style={{ marginBottom: 16 }}>
167
- <Text size="medium" weight="semibold" style={{ marginBottom: 8 }}>
167
+ <Text size="md" weight="semibold" style={{ marginBottom: 8 }}>
168
168
  Try Editing:
169
169
  </Text>
170
- <Text size="small" style={{ marginBottom: 4 }}>
170
+ <Text size="sm" style={{ marginBottom: 4 }}>
171
171
  1. Edit this component in{" "}
172
172
  <Text weight="semibold">
173
173
  packages/shared/src/components/HelloWorld.tsx
174
174
  </Text>
175
175
  </Text>
176
- <Text size="small" style={{ marginBottom: 4 }}>
176
+ <Text size="sm" style={{ marginBottom: 4 }}>
177
177
  2. Watch changes appear in both web and mobile apps instantly!
178
178
  </Text>
179
- <Text size="small" style={{ marginBottom: 4 }}>
179
+ <Text size="sm" style={{ marginBottom: 4 }}>
180
180
  3. Run <Text weight="semibold">yarn dev</Text> to start all
181
181
  development servers
182
182
  </Text>
183
183
  </View>
184
184
 
185
- <Card variant="filled" intent="success" padding="medium">
186
- <Text size="small" weight="semibold" style={{ marginBottom: 4 }}>
185
+ <Card variant="filled" intent="success" padding="md">
186
+ <Text size="sm" weight="semibold" style={{ marginBottom: 4 }}>
187
187
  ✨ Framework Features:
188
188
  </Text>
189
- <Text size="small">
189
+ <Text size="sm">
190
190
  Shared components • Type safety • Hot reload • Cross-platform
191
191
  compatibility
192
192
  </Text>
@@ -194,11 +194,11 @@ export const HelloWorld = ({
194
194
  </Card>
195
195
 
196
196
  {/* API Testing Section */}
197
- <Card variant="outlined" padding="large" style={{ marginTop: 16 }}>
198
- <Text size="large" weight="bold" style={{ marginBottom: 16 }}>
197
+ <Card variant="outlined" padding="lg" style={{ marginTop: 16 }}>
198
+ <Text size="lg" weight="bold" style={{ marginBottom: 16 }}>
199
199
  🚀 API Demo - Database Integration
200
200
  </Text>
201
- <Text size="medium" style={{ marginBottom: 16, color: "#64748b" }}>
201
+ <Text size="md" style={{ marginBottom: 16, color: "#64748b" }}>
202
202
  Test your full-stack integration! This section demonstrates
203
203
  real-time database operations.
204
204
  </Text>
@@ -206,10 +206,10 @@ export const HelloWorld = ({
206
206
  {/* Create New Test Form */}
207
207
  <Card
208
208
  variant="filled"
209
- padding="medium"
209
+ padding="md"
210
210
  style={{ marginBottom: 16, backgroundColor: "#f8fafc" }}
211
211
  >
212
- <Text size="medium" weight="semibold" style={{ marginBottom: 12 }}>
212
+ <Text size="md" weight="semibold" style={{ marginBottom: 12 }}>
213
213
  Create New Test Entry
214
214
  </Text>
215
215
 
@@ -240,26 +240,26 @@ export const HelloWorld = ({
240
240
 
241
241
  {/* Tests List */}
242
242
  <View>
243
- <Text size="medium" weight="semibold" style={{ marginBottom: 12 }}>
243
+ <Text size="md" weight="semibold" style={{ marginBottom: 12 }}>
244
244
  Database Records ({tests.data?.length || 0})
245
245
  </Text>
246
246
 
247
247
  {tests.isLoading ? (
248
- <Card variant="outlined" padding="medium">
249
- <Text size="small" style={{ color: "#64748b" }}>
248
+ <Card variant="outlined" padding="md">
249
+ <Text size="sm" style={{ color: "#64748b" }}>
250
250
  Loading tests...
251
251
  </Text>
252
252
  </Card>
253
253
  ) : tests.data?.length === 0 ? (
254
- <Card variant="outlined" padding="medium">
255
- <Text size="small" style={{ color: "#64748b" }}>
254
+ <Card variant="outlined" padding="md">
255
+ <Text size="sm" style={{ color: "#64748b" }}>
256
256
  No tests found. Create one above!
257
257
  </Text>
258
258
  </Card>
259
259
  ) : (
260
260
  <View style={{ gap: 8 }}>
261
261
  {tests.data?.map((test: any) => (
262
- <Card key={test.id} variant="outlined" padding="medium">
262
+ <Card key={test.id} variant="outlined" padding="md">
263
263
  <View
264
264
  style={{
265
265
  flexDirection: "row",
@@ -269,26 +269,26 @@ export const HelloWorld = ({
269
269
  >
270
270
  <View style={{ flex: 1 }}>
271
271
  <Text
272
- size="small"
272
+ size="sm"
273
273
  weight="semibold"
274
274
  style={{ marginBottom: 4 }}
275
275
  >
276
276
  {test.name}
277
277
  </Text>
278
278
  <Text
279
- size="small"
279
+ size="sm"
280
280
  style={{ color: "#64748b", marginBottom: 4 }}
281
281
  >
282
282
  {test.message}
283
283
  </Text>
284
- <Text size="small" style={{ color: "#10b981" }}>
284
+ <Text size="sm" style={{ color: "#10b981" }}>
285
285
  Status: {test.status} •{" "}
286
286
  {new Date(test.createdAt).toLocaleDateString()}
287
287
  </Text>
288
288
  </View>
289
289
  <Button
290
290
  variant="destructive"
291
- size="small"
291
+ size="sm"
292
292
  onPress={() => handleDeleteTest(test.id)}
293
293
  disabled={deleteTestMutation.isLoading}
294
294
  >
@@ -6,17 +6,17 @@ import { HelloWorld } from '../components/HelloWorld';
6
6
  const HomeScreen = () => (
7
7
  <Screen>
8
8
  <View spacing="lg">
9
- <Text size="xlarge" weight="bold">Home</Text>
10
- <Text size="medium">Welcome to your {{projectName}} app!</Text>
9
+ <Text size="xl" weight="bold">Home</Text>
10
+ <Text size="md">Welcome to your {{projectName}} app!</Text>
11
11
  <View spacing="md" style={{ marginTop: 24 }}>
12
- <Text size="small">
12
+ <Text size="sm">
13
13
  This app uses tab navigation. Navigate between tabs using the bottom bar on mobile or the top tabs on web.
14
14
  </Text>
15
15
  </View>
16
16
 
17
17
  {/* API Testing Component */}
18
18
  <View spacing="md" style={{ marginTop: 32 }}>
19
- <Text size="medium" weight="semibold">API Test</Text>
19
+ <Text size="md" weight="semibold">API Test</Text>
20
20
  <HelloWorld name="{{projectName}}" />
21
21
  </View>
22
22
  </View>
@@ -26,10 +26,10 @@ const HomeScreen = () => (
26
26
  const ProfileScreen = () => (
27
27
  <Screen>
28
28
  <View spacing="lg">
29
- <Text size="xlarge" weight="bold">Profile</Text>
30
- <Text size="medium">User profile and account settings</Text>
29
+ <Text size="xl" weight="bold">Profile</Text>
30
+ <Text size="md">User profile and account settings</Text>
31
31
  <View spacing="md" style={{ marginTop: 24 }}>
32
- <Text size="small">
32
+ <Text size="sm">
33
33
  Manage your account details and preferences here.
34
34
  </Text>
35
35
  </View>
@@ -40,10 +40,10 @@ const ProfileScreen = () => (
40
40
  const SettingsScreen = () => (
41
41
  <Screen>
42
42
  <View spacing="lg">
43
- <Text size="xlarge" weight="bold">Settings</Text>
44
- <Text size="medium">App configuration and preferences</Text>
43
+ <Text size="xl" weight="bold">Settings</Text>
44
+ <Text size="md">App configuration and preferences</Text>
45
45
  <View spacing="md" style={{ marginTop: 24 }}>
46
- <Text size="small">
46
+ <Text size="sm">
47
47
  Customize your app experience with various settings and options.
48
48
  </Text>
49
49
  </View>
@@ -122,22 +122,6 @@ The app uses the Idealyst Framework for consistent UI and navigation that works
122
122
 
123
123
  Edit `src/App.tsx` to start building your application.
124
124
 
125
- ### Styling
126
-
127
- The app uses Unistyles for cross-platform styling. You can create styles that work on both web and mobile:
128
-
129
- ```tsx
130
- import { createStyleSheet } from 'react-native-unistyles';
131
-
132
- const styles = createStyleSheet({
133
- container: {
134
- flex: 1,
135
- justifyContent: 'center',
136
- alignItems: 'center'
137
- }
138
- });
139
- ```
140
-
141
125
  ### Learn More
142
126
 
143
127
  - [Idealyst Framework Documentation](https://github.com/your-username/idealyst-framework)
@@ -30,7 +30,7 @@
30
30
  "react-dom": "^19.1.0",
31
31
  "react-native": "^0.80.1",
32
32
  "react-native-edge-to-edge": "^1.6.2",
33
- "react-native-nitro-modules": "0.28.0",
33
+ "react-native-nitro-modules": "0.30.0",
34
34
  "react-native-unistyles": "^3.0.10",
35
35
  "react-native-web": "^0.20.0",
36
36
  "react-router": "^7.6.3",
@@ -37,8 +37,8 @@ export const TestDemo: React.FC = () => {
37
37
 
38
38
  if (isLoading) {
39
39
  return (
40
- <Card variant="outlined" padding="large">
41
- <Text size="medium">Loading tests...</Text>
40
+ <Card variant="outlined" padding="lg">
41
+ <Text size="md">Loading tests...</Text>
42
42
  </Card>
43
43
  );
44
44
  }
@@ -46,21 +46,21 @@ export const TestDemo: React.FC = () => {
46
46
  return (
47
47
  <View style={{ gap: 16 }}>
48
48
  {/* Header */}
49
- <Card variant="elevated" padding="large" intent="primary">
49
+ <Card variant="elevated" padding="lg" intent="primary">
50
50
  <View style={{ alignItems: 'center' }}>
51
51
  <Text style={{ fontSize: 24, marginBottom: 8 }}>🧪</Text>
52
- <Text size="large" weight="bold" style={{ marginBottom: 8, textAlign: 'center' }}>
52
+ <Text size="lg" weight="bold" style={{ marginBottom: 8, textAlign: 'center' }}>
53
53
  tRPC + Database Test
54
54
  </Text>
55
- <Text size="medium" style={{ textAlign: 'center' }}>
55
+ <Text size="md" style={{ textAlign: 'center' }}>
56
56
  This demonstrates end-to-end type-safe API calls from the web app to the database.
57
57
  </Text>
58
58
  </View>
59
59
  </Card>
60
60
 
61
61
  {/* Create Test Form */}
62
- <Card variant="outlined" padding="large">
63
- <Text size="medium" weight="bold" style={{ marginBottom: 16 }}>
62
+ <Card variant="outlined" padding="lg">
63
+ <Text size="md" weight="bold" style={{ marginBottom: 16 }}>
64
64
  Create New Test
65
65
  </Text>
66
66
 
@@ -90,15 +90,15 @@ export const TestDemo: React.FC = () => {
90
90
  </Card>
91
91
 
92
92
  {/* Test Results */}
93
- <Card variant="outlined" padding="large">
94
- <Text size="medium" weight="bold" style={{ marginBottom: 16 }}>
93
+ <Card variant="outlined" padding="lg">
94
+ <Text size="md" weight="bold" style={{ marginBottom: 16 }}>
95
95
  Test Entries ({tests?.count || 0})
96
96
  </Text>
97
97
 
98
98
  {tests?.data && tests.data.length > 0 ? (
99
99
  <View style={{ gap: 12 }}>
100
100
  {tests.data.map((test) => (
101
- <Card key={test.id} variant="filled" padding="medium">
101
+ <Card key={test.id} variant="filled" padding="md">
102
102
  <View style={{
103
103
  flexDirection: 'row',
104
104
  justifyContent: 'space-between',
@@ -106,23 +106,23 @@ export const TestDemo: React.FC = () => {
106
106
  gap: 12
107
107
  }}>
108
108
  <View style={{ flex: 1 }}>
109
- <Text size="medium" weight="semibold" style={{ marginBottom: 4 }}>
109
+ <Text size="md" weight="semibold" style={{ marginBottom: 4 }}>
110
110
  {test.name}
111
111
  </Text>
112
- <Text size="small" style={{ marginBottom: 8, opacity: 0.8 }}>
112
+ <Text size="sm" style={{ marginBottom: 8, opacity: 0.8 }}>
113
113
  {test.message}
114
114
  </Text>
115
115
  <View style={{ flexDirection: 'row', alignItems: 'center', gap: 8 }}>
116
116
  <Card
117
117
  variant="filled"
118
- padding="small"
118
+ padding="sm"
119
119
  intent={test.status === 'active' ? 'success' : 'neutral'}
120
120
  >
121
- <Text size="small" weight="semibold">
121
+ <Text size="sm" weight="semibold">
122
122
  {test.status}
123
123
  </Text>
124
124
  </Card>
125
- <Text size="small" style={{ opacity: 0.6 }}>
125
+ <Text size="sm" style={{ opacity: 0.6 }}>
126
126
  {new Date(test.createdAt).toLocaleDateString()}
127
127
  </Text>
128
128
  </View>
@@ -130,7 +130,7 @@ export const TestDemo: React.FC = () => {
130
130
  <Button
131
131
  variant="outlined"
132
132
  intent="error"
133
- size="small"
133
+ size="sm"
134
134
  onPress={() => handleDeleteTest(test.id)}
135
135
  disabled={deleteTestMutation.isPending}
136
136
  >
@@ -141,8 +141,8 @@ export const TestDemo: React.FC = () => {
141
141
  ))}
142
142
  </View>
143
143
  ) : (
144
- <Card variant="filled" padding="medium" style={{ opacity: 0.6 }}>
145
- <Text size="small" style={{ textAlign: 'center' }}>
144
+ <Card variant="filled" padding="md" style={{ opacity: 0.6 }}>
145
+ <Text size="sm" style={{ textAlign: 'center' }}>
146
146
  No tests found. Create one above to get started!
147
147
  </Text>
148
148
  </Card>
@@ -150,11 +150,11 @@ export const TestDemo: React.FC = () => {
150
150
  </Card>
151
151
 
152
152
  {/* Type Safety Info */}
153
- <Card variant="filled" intent="success" padding="medium">
154
- <Text size="small" weight="semibold" style={{ marginBottom: 4 }}>
153
+ <Card variant="filled" intent="success" padding="md">
154
+ <Text size="sm" weight="semibold" style={{ marginBottom: 4 }}>
155
155
  ✨ Type Safety Features:
156
156
  </Text>
157
- <Text size="small">
157
+ <Text size="sm">
158
158
  • Full TypeScript types from database to frontend • tRPC ensures API type safety •
159
159
  Prisma provides database schema validation • Real-time type checking across the stack
160
160
  </Text>
@@ -1,28 +1,43 @@
1
- import { defineConfig } from 'vite'
2
- import react from '@vitejs/plugin-react'
3
- import babel from 'vite-plugin-babel'
4
- import path from 'path'
1
+ import react from "@vitejs/plugin-react";
2
+ import path from "path";
3
+ import { defineConfig } from "vite";
4
+ import babel from "vite-plugin-babel";
5
5
 
6
6
  // https://vitejs.dev/config/
7
7
  export default defineConfig({
8
8
  plugins: [
9
9
  babel({
10
- filter: (id) => id.includes("node_modules/@idealyst/") || id.includes("/packages/"),
10
+ filter: (id) =>
11
+ id.includes("node_modules/@idealyst/") ||
12
+ (id.includes("/packages/") &&
13
+ !id.includes("/packages/web/") &&
14
+ /\.(tsx?|jsx?)$/.test(id)),
11
15
  babelConfig: {
12
16
  presets: [
13
- ['@babel/preset-typescript', {
14
- isTSX: true,
15
- allExtensions: true,
16
- }]
17
+ ["@babel/preset-react", { runtime: "automatic" }],
18
+ [
19
+ "@babel/preset-typescript",
20
+ {
21
+ isTSX: true,
22
+ allExtensions: true,
23
+ },
24
+ ],
17
25
  ],
18
26
  plugins: [
19
- ['react-native-unistyles/plugin', {
20
- root: 'src',
21
- autoProcessPaths: ['@idealyst/components', '@idealyst/navigation', '@idealyst/theme'],
22
- }],
23
- ['@idealyst/components/plugin/web', { root: 'src' }]
24
- ]
25
- }
27
+ [
28
+ "react-native-unistyles/plugin",
29
+ {
30
+ root: "src",
31
+ autoProcessPaths: [
32
+ "@idealyst/components",
33
+ "@idealyst/navigation",
34
+ "@idealyst/theme",
35
+ ],
36
+ },
37
+ ],
38
+ ["@idealyst/components/plugin/web", { root: "src" }],
39
+ ],
40
+ },
26
41
  }),
27
42
  // Then process everything else with React plugin
28
43
  react(),
@@ -30,48 +45,54 @@ export default defineConfig({
30
45
  resolve: {
31
46
  alias: {
32
47
  // Use absolute path to resolve react-native-web properly
33
- 'react-native': path.resolve(__dirname, 'node_modules/react-native-web'),
34
- '@react-native/normalize-colors': path.resolve(__dirname, 'node_modules/@react-native/normalize-colors'),
48
+ "react-native": path.resolve(__dirname, "node_modules/react-native-web"),
49
+ "@react-native/normalize-colors": path.resolve(
50
+ __dirname,
51
+ "../../node_modules/@react-native/normalize-colors"
52
+ ),
35
53
  },
36
54
  // Platform-specific file resolution
37
- extensions: ['.web.tsx', '.web.ts', '.tsx', '.ts', '.js', '.jsx'],
55
+ extensions: [".web.tsx", ".web.ts", ".tsx", ".ts", ".js", ".jsx"],
38
56
  // Ensure proper resolution of package exports
39
- conditions: ['browser', 'import', 'module', 'default'],
57
+ conditions: ["browser", "import", "module", "default"],
40
58
  // Ensure workspace dependencies resolve properly
41
- preserveSymlinks: false
59
+ preserveSymlinks: false,
42
60
  },
43
61
  define: {
44
- global: 'globalThis',
62
+ global: "globalThis",
45
63
  __DEV__: JSON.stringify(true),
46
64
  },
47
65
  optimizeDeps: {
48
66
  include: [
49
- 'react-native-web',
50
- '@react-native/normalize-colors',
51
- 'react-native-unistyles',
52
- 'react-native-unistyles/web',
53
- '@mdi/react',
54
- '@mdi/js',
67
+ "react-native-web",
68
+ "react-native-unistyles",
69
+ "react-native-unistyles/web",
70
+ "@mdi/react",
71
+ "@mdi/js",
55
72
  ],
56
73
  exclude: [
57
- 'react-native-edge-to-edge',
58
- 'react-native-nitro-modules',
59
- '@idealyst/components',
60
- '@idealyst/navigation',
61
- '@idealyst/theme',
62
- '@{{workspaceScope}}/shared',
74
+ "react-native-edge-to-edge",
75
+ "react-native-nitro-modules",
76
+ "@idealyst/components",
77
+ "@idealyst/navigation",
78
+ "@idealyst/theme",
79
+ "@test/shared",
63
80
  ],
64
81
  esbuildOptions: {
65
82
  loader: {
66
- '.tsx': 'tsx',
67
- '.ts': 'ts',
68
- '.jsx': 'jsx',
69
- '.js': 'jsx' // Important: treat .js files as JSX for React Native compatibility
70
- }
71
- }
83
+ ".tsx": "tsx",
84
+ ".ts": "ts",
85
+ ".jsx": "jsx",
86
+ ".js": "jsx", // Important: treat .js files as JSX for React Native compatibility
87
+ },
88
+ alias: {
89
+ "react-native": path.resolve(__dirname, "node_modules/react-native-web"),
90
+ "@react-native/normalize-colors": path.resolve(__dirname, "../../node_modules/@react-native/normalize-colors"),
91
+ },
92
+ },
72
93
  },
73
94
  server: {
74
- host: '0.0.0.0',
95
+ host: "0.0.0.0",
75
96
  port: 5173,
76
97
  },
77
- })
98
+ });
@@ -1,6 +1,6 @@
1
1
  FROM node:20-bullseye
2
2
 
3
- # Install additional tools
3
+ # Install additional tools including gosu for proper user switching
4
4
  RUN apt-get update && apt-get install -y \
5
5
  git \
6
6
  postgresql-client \
@@ -18,6 +18,9 @@ RUN git config --global init.defaultBranch main
18
18
  # Create workspace directory
19
19
  RUN mkdir -p /workspace
20
20
  WORKDIR /workspace
21
+ RUN chown -R node:node /workspace
21
22
 
22
- # Keep container running
23
- CMD ["sleep", "infinity"]
23
+ # Note: We don't switch to node user here anymore - entrypoint.sh will do it
24
+ # This allows the entrypoint to fix permissions as root first
25
+
26
+ USER node
@@ -106,6 +106,7 @@
106
106
  }
107
107
  }
108
108
  },
109
+ "remoteUser": "node",
109
110
 
110
111
  // Post-create command to set up the development environment
111
112
  "postCreateCommand": "bash .devcontainer/setup.sh"
@@ -2,10 +2,6 @@
2
2
 
3
3
  echo "🚀 Setting up Idealyst development environment..."
4
4
 
5
- # Install dependencies
6
- echo "📦 Installing dependencies..."
7
- yarn install
8
-
9
5
  # Create environment file if it doesn't exist
10
6
  if [ ! -f ".env" ]; then
11
7
  echo "📝 Creating .env file..."
@@ -42,24 +38,6 @@ until pg_isready -h postgres -p 5432 -U postgres; do
42
38
  sleep 1
43
39
  done
44
40
 
45
- echo "✅ Database is ready!"
46
-
47
- # Run database migrations if they exist
48
- if [ -d "packages" ]; then
49
- echo "🗄️ Setting up database..."
50
-
51
- # Check if any package has prisma
52
- for package_dir in packages/*/; do
53
- if [ -f "${package_dir}prisma/schema.prisma" ]; then
54
- echo "Running Prisma setup for $(basename "$package_dir")..."
55
- cd "$package_dir"
56
- npx prisma generate
57
- npx prisma db push
58
- cd /workspace
59
- fi
60
- done
61
- fi
62
-
63
41
  echo "Add Figma MCP to Claude Code"
64
42
  claude mcp add -t sse figma-mcp http://figma-mcp:3333/sse
65
43