diff --git a/app/components/chat/ToolCall.tsx b/app/components/chat/ToolCall.tsx
index 711f5edff..0cf9a7537 100644
--- a/app/components/chat/ToolCall.tsx
+++ b/app/components/chat/ToolCall.tsx
@@ -416,8 +416,12 @@ function toolTitle(invocation: ConvexToolInvocation): React.ReactNode {
);
} else if (invocation.result?.startsWith('Error:')) {
- // This is a hack, but `npx convex dev` prints this out when the typecheck fails
- if (invocation.result.includes('To ignore failing typecheck')) {
+ if (
+ // This is a hack, but `npx convex dev` prints this out when the typecheck fails
+ invocation.result.includes('To ignore failing typecheck') ||
+ // this is a bigger hack! TypeScript fails with error codes like TS
+ invocation.result.includes('Error TS')
+ ) {
return (

diff --git a/app/lib/runtime/action-runner.ts b/app/lib/runtime/action-runner.ts
index c6dff0ab4..2351bf6ae 100644
--- a/app/lib/runtime/action-runner.ts
+++ b/app/lib/runtime/action-runner.ts
@@ -372,7 +372,10 @@ export class ActionRunner {
case 'deploy': {
const container = await this.#webcontainer;
await waitForContainerBootState(ContainerBootState.READY);
- const convexProc = await container.spawn('npx', ['convex', 'dev', '--once']);
+ const convexProc = await container.spawn('sh', [
+ '-c',
+ 'convex dev --once && tsc --noEmit -p tsconfig.app.json',
+ ]);
action.abortSignal.addEventListener('abort', () => {
convexProc.kill();
});
diff --git a/app/lib/stores/startup/useContainerSetup.ts b/app/lib/stores/startup/useContainerSetup.ts
index 68fca51ab..1b963cd89 100644
--- a/app/lib/stores/startup/useContainerSetup.ts
+++ b/app/lib/stores/startup/useContainerSetup.ts
@@ -12,7 +12,7 @@ import { toast } from 'sonner';
import { waitForConvexProjectConnection, type ConvexProject } from '~/lib/stores/convexProject';
import type { WebContainer } from '@webcontainer/api';
-const TEMPLATE_URL = '/template-snapshot-ba3672ee.bin';
+const TEMPLATE_URL = '/template-snapshot-cb4ccf96.bin';
export function useNewChatContainerSetup() {
useEffect(() => {
diff --git a/public/template-snapshot-cb4ccf96.bin b/public/template-snapshot-cb4ccf96.bin
new file mode 100644
index 000000000..d031fc442
Binary files /dev/null and b/public/template-snapshot-cb4ccf96.bin differ
diff --git a/template/tsconfig.app.json b/template/tsconfig.app.json
index 8267e1fb8..1055250d5 100644
--- a/template/tsconfig.app.json
+++ b/template/tsconfig.app.json
@@ -17,8 +17,6 @@
/* Linting */
"strict": true,
- "noUnusedLocals": true,
- "noUnusedParameters": true,
"noFallthroughCasesInSwitch": true,
"noUncheckedSideEffectImports": true,
diff --git a/template/tsconfig.node.json b/template/tsconfig.node.json
index db0becc8b..85b71dc03 100644
--- a/template/tsconfig.node.json
+++ b/template/tsconfig.node.json
@@ -15,8 +15,6 @@
/* Linting */
"strict": true,
- "noUnusedLocals": true,
- "noUnusedParameters": true,
"noFallthroughCasesInSwitch": true,
"noUncheckedSideEffectImports": true
},