Skip to content

Commit d7481f7

Browse files
authored
Desktop MVP (#23)
* chore: logging + transcription improvements * chore: add ax context call on rec start * chore: amical assets * chore: qol setup changes * chore: add sidebar * chore: transcriptions tab * chore: transcriptions ui * chore: frame improvements * chore: ui rework * chore logger fixes * chore: whisper model download func * chore: update model downloading * chore: transcription updates * chore: improved logging * chore: log whisper metrics + raw pcm proc * chore: ste up libsql * chore: layout fixes * chore: clean up ipcs * chore: integrate trpc * chore: formatting fixes * chroe: fix pnpm lock file * chore: clean up
1 parent 17fdb72 commit d7481f7

79 files changed

Lines changed: 8301 additions & 935 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.gitignore

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ yarn-error.log*
3636
# Misc
3737
.DS_Store
3838
*.pem
39+
CLAUDE.md
40+
.serena
3941

4042
# Temp files
41-
/tmp
43+
/tmp

apps/electron/.eslintrc.json

Lines changed: 0 additions & 24 deletions
This file was deleted.

apps/electron/.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,3 +94,6 @@ out/
9494
# Swift Build
9595
.build/
9696
bin/
97+
98+
# VSCode
99+
.vscode/

apps/electron/assets/logo.svg

Lines changed: 9 additions & 0 deletions
Loading

apps/electron/drizzle.config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,6 @@ export default {
55
out: './src/db/migrations',
66
dialect: 'sqlite',
77
dbCredentials: {
8-
url: 'file:./db.sqlite',
8+
url: 'file:./amical.db',
99
},
1010
} satisfies Config;

apps/electron/eslint.config.mjs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
import { config } from "@amical/eslint-config/base";
2+
3+
/** @type {import("eslint").Linter.Config} */
4+
export default config;

apps/electron/forge.config.ts

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,26 +3,24 @@ import { MakerSquirrel } from '@electron-forge/maker-squirrel';
33
import { MakerZIP } from '@electron-forge/maker-zip';
44
import { MakerDeb } from '@electron-forge/maker-deb';
55
import { MakerRpm } from '@electron-forge/maker-rpm';
6-
import { MakerDMG } from '@electron-forge/maker-dmg';
76
import { VitePlugin } from '@electron-forge/plugin-vite';
87
import { FusesPlugin } from '@electron-forge/plugin-fuses';
98
import { FuseV1Options, FuseVersion } from '@electron/fuses';
109

1110
const config: ForgeConfig = {
1211
packagerConfig: {
1312
asar: true,
13+
name: 'Amical',
14+
executableName: 'Amical',
15+
icon: './assets/logo', // Path to your icon file (without extension)
1416
extraResource: ['../../packages/native-helpers/swift-helper/bin'],
1517
extendInfo: {
16-
NSMicrophoneUsageDescription: "This app needs access to your microphone to record audio for transcription.",
18+
NSMicrophoneUsageDescription:
19+
'This app needs access to your microphone to record audio for transcription.',
1720
},
1821
},
1922
rebuildConfig: {},
20-
makers: [
21-
new MakerSquirrel({}),
22-
new MakerZIP({}, ['darwin']),
23-
new MakerRpm({}),
24-
new MakerDeb({}),
25-
],
23+
makers: [new MakerSquirrel({}), new MakerZIP({}, ['darwin']), new MakerRpm({}), new MakerDeb({})],
2624
plugins: [
2725
new VitePlugin({
2826
// `build` can specify multiple entry builds, which can be Main process, Preload scripts, Worker process, etc.

apps/electron/package.json

Lines changed: 39 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -3,26 +3,23 @@
33
"version": "1.0.0",
44
"description": "Amical Electron application",
55
"main": ".vite/build/main.js",
6+
"productName": "Amical",
67
"scripts": {
78
"start": "pnpm build:swift-helper && electron-forge start",
89
"package": "pnpm build:swift-helper && electron-forge package",
910
"make": "pnpm build:swift-helper && electron-forge make",
1011
"publish": "electron-forge publish",
1112
"lint": "eslint --ext .ts,.tsx .",
1213
"format": "prettier --write \"**/*.{js,jsx,ts,tsx,json,md}\"",
13-
"db:generate": "drizzle-kit generate:sqlite",
14-
"db:push": "drizzle-kit push:sqlite",
14+
"ts:check": "tsc --noEmit",
15+
"db:generate": "drizzle-kit generate",
16+
"db:push": "drizzle-kit push",
17+
"db:migrate": "drizzle-kit migrate",
1518
"build:swift-helper": "pnpm --filter @amical/swift-helper build",
1619
"dev": "pnpm start"
1720
},
1821
"keywords": [],
1922
"license": "MIT",
20-
"pnpm": {
21-
"onlyBuiltDependencies": [
22-
"electron",
23-
"electron-winstaller"
24-
]
25-
},
2623
"devDependencies": {
2724
"@electron-forge/cli": "^7.8.1",
2825
"@electron-forge/maker-deb": "^7.8.1",
@@ -33,11 +30,10 @@
3330
"@electron-forge/plugin-fuses": "^7.8.1",
3431
"@electron-forge/plugin-vite": "^7.8.1",
3532
"@electron/fuses": "^1.8.0",
33+
"@rollup/plugin-commonjs": "^28.0.6",
3634
"@tailwindcss/vite": "^4.1.6",
3735
"@types/react": "^19.1.3",
3836
"@types/react-dom": "^19.1.3",
39-
"@typescript-eslint/eslint-plugin": "^5.62.0",
40-
"@typescript-eslint/parser": "^5.62.0",
4137
"electron": "36.2.0",
4238
"eslint": "^9.26.0",
4339
"eslint-config-prettier": "^9.1.0",
@@ -50,53 +46,67 @@
5046
"vite": "^5.4.19"
5147
},
5248
"dependencies": {
49+
"@ai-sdk/openai": "^1.3.22",
50+
"@amical/eslint-config": "workspace:*",
5351
"@amical/types": "workspace:*",
52+
"@dnd-kit/core": "^6.3.1",
53+
"@dnd-kit/modifiers": "^9.0.0",
54+
"@dnd-kit/sortable": "^10.0.0",
55+
"@dnd-kit/utilities": "^3.2.2",
5456
"@hookform/resolvers": "^5.0.1",
57+
"@libsql/client": "^0.15.9",
5558
"@radix-ui/react-accordion": "^1.2.10",
5659
"@radix-ui/react-alert-dialog": "^1.1.13",
5760
"@radix-ui/react-aspect-ratio": "^1.1.6",
58-
"@radix-ui/react-avatar": "^1.1.9",
59-
"@radix-ui/react-checkbox": "^1.3.1",
61+
"@radix-ui/react-avatar": "^1.1.10",
62+
"@radix-ui/react-checkbox": "^1.3.2",
6063
"@radix-ui/react-collapsible": "^1.1.10",
6164
"@radix-ui/react-context-menu": "^2.2.14",
62-
"@radix-ui/react-dialog": "^1.1.13",
63-
"@radix-ui/react-dropdown-menu": "^2.1.14",
65+
"@radix-ui/react-dialog": "^1.1.14",
66+
"@radix-ui/react-dropdown-menu": "^2.1.15",
6467
"@radix-ui/react-hover-card": "^1.1.13",
65-
"@radix-ui/react-label": "^2.1.6",
68+
"@radix-ui/react-label": "^2.1.7",
6669
"@radix-ui/react-menubar": "^1.1.14",
6770
"@radix-ui/react-navigation-menu": "^1.2.12",
6871
"@radix-ui/react-popover": "^1.1.13",
6972
"@radix-ui/react-progress": "^1.1.6",
7073
"@radix-ui/react-radio-group": "^1.3.6",
7174
"@radix-ui/react-scroll-area": "^1.2.8",
72-
"@radix-ui/react-select": "^2.2.4",
73-
"@radix-ui/react-separator": "^1.1.6",
75+
"@radix-ui/react-select": "^2.2.5",
76+
"@radix-ui/react-separator": "^1.1.7",
7477
"@radix-ui/react-slider": "^1.3.4",
75-
"@radix-ui/react-slot": "^1.2.2",
78+
"@radix-ui/react-slot": "^1.2.3",
7679
"@radix-ui/react-switch": "^1.2.4",
77-
"@radix-ui/react-tabs": "^1.1.11",
78-
"@radix-ui/react-toggle": "^1.1.8",
79-
"@radix-ui/react-toggle-group": "^1.1.9",
80-
"@radix-ui/react-tooltip": "^1.2.6",
80+
"@radix-ui/react-tabs": "^1.1.12",
81+
"@radix-ui/react-toggle": "^1.1.9",
82+
"@radix-ui/react-toggle-group": "^1.1.10",
83+
"@radix-ui/react-tooltip": "^1.2.7",
8184
"@ricky0123/vad-web": "^0.0.24",
82-
"@types/better-sqlite3": "^7.6.13",
85+
"@tabler/icons-react": "^3.34.0",
86+
"@tanstack/react-query": "^5.81.2",
87+
"@tanstack/react-table": "^8.21.3",
88+
"@trpc/client": "^11.4.2",
89+
"@trpc/react-query": "^11.4.2",
90+
"@trpc/server": "^11.4.2",
8391
"@types/split2": "^4.2.3",
8492
"@types/uuid": "^10.0.0",
93+
"ai": "^4.3.16",
8594
"async-mutex": "^0.5.0",
86-
"better-sqlite3": "^11.10.0",
8795
"class-variance-authority": "^0.7.1",
8896
"clsx": "^2.1.1",
8997
"cmdk": "^1.1.1",
9098
"date-fns": "^4.1.0",
9199
"dotenv": "^16.5.0",
92100
"drizzle-kit": "^0.31.1",
93101
"drizzle-orm": "^0.43.1",
102+
"electron-log": "^5.4.0",
94103
"electron-squirrel-startup": "^1.0.1",
95-
"electron-store": "^10.0.1",
104+
"electron-trpc-experimental": "1.0.0-alpha.1",
96105
"embla-carousel-react": "^8.6.0",
97106
"framer-motion": "^12.10.5",
98107
"input-otp": "^1.4.2",
99108
"keytar": "^7.9.0",
109+
"libsql": "^0.5.13",
100110
"lucide-react": "^0.510.0",
101111
"next-themes": "^0.4.6",
102112
"openai": "^4.98.0",
@@ -106,11 +116,14 @@
106116
"react-hook-form": "^7.56.3",
107117
"react-resizable-panels": "^3.0.2",
108118
"recharts": "^2.15.3",
119+
"smart-whisper": "0.2.0",
109120
"sonner": "^2.0.3",
110121
"split2": "^4.2.0",
122+
"superjson": "^2.2.2",
111123
"tailwind-merge": "^3.3.0",
112124
"tw-animate-css": "^1.2.9",
113125
"uuid": "^11.1.0",
114-
"vaul": "^1.1.2"
126+
"vaul": "^1.1.2",
127+
"zod": "^3.25.24"
115128
}
116129
}
Lines changed: 6 additions & 0 deletions
Loading

apps/electron/public/assets/logo.svg

Lines changed: 38 additions & 0 deletions
Loading

0 commit comments

Comments
 (0)