Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
5ad83d7
feat: refresh UI with new sidebar, header, and improved dialogs
kasvith Jan 18, 2026
e0515d5
chore: upgrade ESLint to v9 with flat config
kasvith Jan 18, 2026
f7ae1e8
feat: redesign dashboard with activity log and modern UI
kasvith Jan 18, 2026
0a13f91
feat: overhaul theme system with 9 themes and bundled fonts
kasvith Jan 18, 2026
17370cb
feat: redesign patient view with sidebar layout
kasvith Jan 18, 2026
5641c21
feat: redesign patient edit form with card-based layout
kasvith Jan 18, 2026
5b12225
feat: redesign patients list with card layout and sorting
kasvith Jan 18, 2026
7fe851d
feat: redesign doctors list with card layout and sorting
kasvith Jan 18, 2026
d9feb1e
feat: redesign surgeries list with card layout and sorting
kasvith Jan 18, 2026
f89047e
feat: redesign surgery form with card layout and prominent shortcut hint
kasvith Jan 18, 2026
d14ebac
feat: make patient name clickable in surgery add/edit pages
kasvith Jan 18, 2026
e754aba
feat: redesign view surgery page and update sheet components
kasvith Jan 18, 2026
82ef503
feat: add quick add surgery workflow with patient lookup
kasvith Jan 18, 2026
47c138d
feat: redesign doctor add/edit pages with two-column layout
kasvith Jan 18, 2026
7789126
feat: redesign patient pages with modern header and two-column layout
kasvith Jan 18, 2026
50766d5
feat: redesign update indicator with polished animations and theme in…
kasvith Jan 18, 2026
958d2c0
feat: replace react-hot-toast with sonner for themed toasts
kasvith Jan 18, 2026
179c4ff
feat: redesign onboarding wizard with split layout and polished UI
kasvith Jan 18, 2026
b24eb3d
feat: enhance retro theme with CRT effects and improved colors
kasvith Jan 18, 2026
9dc4252
feat: add ember, frost, and sakura themes
kasvith Jan 18, 2026
471cbce
feat: move version to sidebar with GitHub release link
kasvith Jan 18, 2026
949d952
feat: add configurable backup frequency with daily/weekly options
kasvith Jan 18, 2026
c2b2bc7
feat: use light WaveZync logo for light themes
kasvith Jan 18, 2026
596ee3e
feat: show Ctrl instead of ⌘ for keyboard shortcuts on Windows/Linux
kasvith Jan 18, 2026
ecbc1ac
feat: add paginated activity log page with filters
kasvith Jan 18, 2026
9a36163
feat: increase default window size and add minimum constraints
kasvith Jan 18, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .claude/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"enabledPlugins": {
"frontend-design@claude-plugins-official": true
}
}
4 changes: 0 additions & 4 deletions .eslintignore

This file was deleted.

30 changes: 0 additions & 30 deletions .eslintrc.cjs

This file was deleted.

3 changes: 2 additions & 1 deletion electron.vite.config.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { resolve } from 'path'
import { defineConfig, externalizeDepsPlugin } from 'electron-vite'
import react from '@vitejs/plugin-react'
import tailwindcss from '@tailwindcss/vite'

export default defineConfig({
main: {
Expand All @@ -17,7 +18,7 @@ export default defineConfig({
'@': resolve(__dirname, 'src/renderer/src')
}
},
plugins: [react()],
plugins: [tailwindcss(), react()],
build: {
rollupOptions: {
input: {
Expand Down
59 changes: 59 additions & 0 deletions eslint.config.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
import js from '@eslint/js'
import globals from 'globals'
import tseslint from 'typescript-eslint'
import reactPlugin from 'eslint-plugin-react'
import reactHooksPlugin from 'eslint-plugin-react-hooks'
import tanstackQuery from '@tanstack/eslint-plugin-query'

export default tseslint.config(
{
ignores: ['dist', 'out', 'node_modules', '*.config.js', '*.config.mjs', '*.config.ts']
},
js.configs.recommended,
...tseslint.configs.recommended,
{
files: ['**/*.{ts,tsx}'],
plugins: {
react: reactPlugin,
'react-hooks': reactHooksPlugin,
'@tanstack/query': tanstackQuery
},
languageOptions: {
globals: {
...globals.browser,
...globals.node
},
parserOptions: {
ecmaFeatures: {
jsx: true
}
}
},
settings: {
react: {
version: 'detect'
}
},
rules: {
...reactPlugin.configs.recommended.rules,
...reactPlugin.configs['jsx-runtime'].rules,
...reactHooksPlugin.configs.recommended.rules,
'react/react-in-jsx-scope': 'off',
'react/prop-types': 'off',
'@typescript-eslint/no-unused-vars': [
'warn',
{
argsIgnorePattern: '^_',
varsIgnorePattern: '^_'
}
],
'@typescript-eslint/explicit-function-return-type': 'off',
'@typescript-eslint/no-explicit-any': 'warn',
'@typescript-eslint/no-require-imports': 'off',
'@typescript-eslint/ban-ts-comment': 'off',
'@typescript-eslint/no-empty-object-type': 'off',
'react-hooks/rules-of-hooks': 'error',
'react-hooks/exhaustive-deps': 'warn'
}
}
)
154 changes: 84 additions & 70 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
},
"scripts": {
"format": "prettier --write .",
"lint": "eslint . --ext .js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix",
"lint": "eslint . --fix",
"typecheck:node": "tsc --noEmit -p tsconfig.node.json --composite false",
"typecheck:web": "tsc --noEmit -p tsconfig.web.json --composite false",
"typecheck": "pnpm typecheck:node && pnpm typecheck:web",
Expand All @@ -28,81 +28,95 @@
"commitlint": "commitlint --edit"
},
"dependencies": {
"@electron-toolkit/preload": "^3.0.0",
"@electron-toolkit/preload": "^3.0.1",
"@electron-toolkit/utils": "^3.0.0",
"@hookform/resolvers": "^3.3.4",
"@fontsource-variable/inter": "^5.2.8",
"@fontsource-variable/jetbrains-mono": "^5.2.8",
"@fontsource-variable/nunito": "^5.2.7",
"@fontsource-variable/source-sans-3": "^5.2.9",
"@fontsource/vt323": "^5.2.7",
"@hookform/resolvers": "^3.9.1",
"@lukemorales/query-key-factory": "^1.3.4",
"@radix-ui/react-accordion": "^1.1.2",
"@radix-ui/react-alert-dialog": "^1.0.5",
"@radix-ui/react-dialog": "^1.0.5",
"@radix-ui/react-dropdown-menu": "^2.0.6",
"@radix-ui/react-icons": "^1.3.0",
"@radix-ui/react-label": "^2.0.2",
"@radix-ui/react-popover": "^1.0.7",
"@radix-ui/react-progress": "^1.0.3",
"@radix-ui/react-select": "^2.0.0",
"@radix-ui/react-slot": "^1.0.2",
"@radix-ui/react-tabs": "^1.1.13",
"@radix-ui/react-toggle": "^1.0.3",
"@tailwindcss/typography": "^0.5.12",
"@tanstack/react-query": "^5.34.1",
"@tanstack/react-query-devtools": "^5.34.1",
"@tanstack/react-table": "^8.16.0",
"@tiptap/extension-color": "^2.3.0",
"@tiptap/extension-placeholder": "^2.3.1",
"@tiptap/extension-text-align": "^2.4.0",
"@tiptap/extension-text-style": "^2.3.0",
"@tiptap/extension-underline": "^2.4.0",
"@tiptap/pm": "^2.3.0",
"@tiptap/react": "^2.3.0",
"@tiptap/starter-kit": "^2.3.0",
"better-sqlite3": "^9.5.0",
"class-variance-authority": "^0.7.0",
"clsx": "^2.1.0",
"cmdk": "^1.0.0",
"date-fns": "^3.6.0",
"dayjs": "^1.11.11",
"electron-log": "^5.1.4",
"electron-updater": "^6.1.8",
"@radix-ui/react-accordion": "^1.2.2",
"@radix-ui/react-alert-dialog": "^1.1.4",
"@radix-ui/react-dialog": "^1.1.4",
"@radix-ui/react-dropdown-menu": "^2.1.4",
"@radix-ui/react-icons": "^1.3.2",
"@radix-ui/react-label": "^2.1.1",
"@radix-ui/react-popover": "^1.1.4",
"@radix-ui/react-progress": "^1.1.1",
"@radix-ui/react-select": "^2.1.4",
"@radix-ui/react-slot": "^1.1.1",
"@radix-ui/react-switch": "^1.2.6",
"@radix-ui/react-tabs": "^1.1.2",
"@radix-ui/react-toggle": "^1.1.1",
"@radix-ui/react-tooltip": "^1.1.6",
"@tanstack/react-query": "^5.62.8",
"@tanstack/react-query-devtools": "^5.62.8",
"@tanstack/react-table": "^8.20.6",
"@tiptap/extension-color": "^2.11.2",
"@tiptap/extension-placeholder": "^2.11.2",
"@tiptap/extension-text-align": "^2.11.2",
"@tiptap/extension-text-style": "^2.11.2",
"@tiptap/extension-underline": "^2.11.2",
"@tiptap/pm": "^2.11.2",
"@tiptap/react": "^2.11.2",
"@tiptap/starter-kit": "^2.11.2",
"better-sqlite3": "^11.7.0",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"cmdk": "^1.0.4",
"date-fns": "^4.1.0",
"dayjs": "^1.11.13",
"electron-log": "^5.2.4",
"electron-updater": "^6.3.9",
"handlebars": "^4.7.8",
"kysely": "^0.27.3",
"lucide-react": "^0.368.0",
"react-day-picker": "^8.10.0",
"react-hook-form": "^7.51.3",
"react-hot-toast": "^2.4.1",
"react-router-dom": "^6.22.3",
"tailwind-merge": "^2.2.2",
"tailwindcss-animate": "^1.0.7",
"zod": "^3.23.5"
"kysely": "^0.27.5",
"lucide-react": "^0.469.0",
"react-day-picker": "^9.4.4",
"react-hook-form": "^7.54.2",
"react-router-dom": "^7.1.1",
"sonner": "^2.0.7",
"tailwind-merge": "^2.6.0",
"zod": "^3.24.1"
},
"pnpm": {
"onlyBuiltDependencies": [
"better-sqlite3",
"electron",
"esbuild"
]
},
"devDependencies": {
"@commitlint/cli": "^19.3.0",
"@commitlint/config-conventional": "^19.2.2",
"@commitlint/cli": "^19.6.1",
"@commitlint/config-conventional": "^19.6.0",
"@electron-toolkit/eslint-config-prettier": "^2.0.0",
"@electron-toolkit/eslint-config-ts": "^1.0.1",
"@electron-toolkit/eslint-config-ts": "^3.1.0",
"@electron-toolkit/tsconfig": "^1.0.1",
"@electron/rebuild": "^3.6.0",
"@tanstack/eslint-plugin-query": "^5.32.1",
"@types/better-sqlite3": "^7.6.10",
"@types/node": "^18.19.9",
"@types/react": "^18.2.48",
"@types/react-dom": "^18.2.18",
"@vitejs/plugin-react": "^4.2.1",
"autoprefixer": "^10.4.19",
"electron": "^28.2.0",
"electron-builder": "^24.9.1",
"electron-vite": "^2.2.0",
"eslint": "^8.56.0",
"eslint-plugin-react": "^7.33.2",
"eslint-plugin-react-hooks": "^4.6.2",
"husky": "^9.0.11",
"postcss": "^8.4.38",
"prettier": "^3.2.4",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"tailwindcss": "^3.4.3",
"typescript": "^5.3.3",
"vite": "^5.0.12",
"vite-plugin-native": "^0.2.0"
"@electron/rebuild": "^3.7.1",
"@eslint/js": "^9.39.2",
"@tailwindcss/typography": "^0.5.16",
"@tailwindcss/vite": "^4.0.0",
"@tanstack/eslint-plugin-query": "^5.62.8",
"@types/better-sqlite3": "^7.6.12",
"@types/node": "^22.10.5",
"@types/react": "^18.3.18",
"@types/react-dom": "^18.3.5",
"@vitejs/plugin-react": "^4.3.4",
"electron": "^33.3.1",
"electron-builder": "^25.1.8",
"electron-vite": "^2.3.0",
"eslint": "^9.39.2",
"eslint-plugin-react": "^7.37.3",
"eslint-plugin-react-hooks": "^5.1.0",
"globals": "^17.0.0",
"husky": "^9.1.7",
"postcss": "^8.4.49",
"prettier": "^3.4.2",
"react": "^18.3.1",
"react-dom": "^18.3.1",
"tailwindcss": "^4.0.0",
"typescript": "^5.7.2",
"vite": "^6.0.7"
}
}
Loading