Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
450df01
chore: update CLAUDE config
AdamJ Jun 1, 2026
4a4e039
feat: redesign application UI
AdamJ Jun 6, 2026
a7b6470
chore: add @radix-ui/colors
AdamJ Jun 8, 2026
71aa190
feat: import Radix color CSS variables
AdamJ Jun 8, 2026
f26e196
feat: map Radix color scales to Tailwind utilities
AdamJ Jun 8, 2026
ef2f1a4
docs: update color constraints to allow Radix scale classes
AdamJ Jun 8, 2026
45956a7
docs: document Radix color scale steps and Tailwind usage
AdamJ Jun 8, 2026
1b11480
docs: update conventions to reflect Radix scale class availability
AdamJ Jun 8, 2026
e1dbc7b
feat: add Radix colors and swap dailogs for sheets when adding to kan…
AdamJ Jun 8, 2026
8256cbe
feat: update settings page and upgrade Lucide icons
AdamJ Jun 9, 2026
50b8774
feat: Update Settings view
AdamJ Jun 9, 2026
a6c621a
feat: continue UI updates
AdamJ Jun 9, 2026
09f8634
feat: extend Client interface with address and contact fields
AdamJ Jun 9, 2026
4ad154f
feat: add address and contact columns to clients table
AdamJ Jun 9, 2026
5c3fb6b
feat: map address and contact fields in Supabase client read/write
AdamJ Jun 9, 2026
eb74269
feat: complete client address and contact form and card display
AdamJ Jun 9, 2026
9693ac3
docs: add client edit design spec
AdamJ Jun 9, 2026
abe7d97
test: add failing tests for updateClient
AdamJ Jun 9, 2026
4f88fd2
feat: add updateClient to TimeTrackingContext
AdamJ Jun 9, 2026
98d5330
feat: add ClientSheet component for add/edit
AdamJ Jun 9, 2026
431b445
feat: wire ClientSheet into ClientManagement for add and edit
AdamJ Jun 9, 2026
32b37de
fix: consistent indentation in updateClient, clear editingClient on s…
AdamJ Jun 9, 2026
96764ed
docs: sync CLAUDE.md, README, and CHANGELOG for client edit feature
AdamJ Jun 9, 2026
e203030
feat: update Client management interface
AdamJ Jun 9, 2026
d0cff87
fix: begin project sheet work
AdamJ Jun 10, 2026
b4d9f64
feat: convert Add/Edit Project form to Sheet drawer
AdamJ Jun 10, 2026
97254d5
fix: wire ProjectSheet into ProjectList add/edit
AdamJ Jun 10, 2026
6f4e167
feat: convert Add/Edit Category form to Sheet drawer
AdamJ Jun 10, 2026
2ed7b1d
fix: resolve console warnings on ProjectList (missing key, invalid <p…
AdamJ Jun 10, 2026
387e077
feat: continue cleanup process
AdamJ Jun 10, 2026
154026f
docs: sync docs for Tailwind v4 upgrade
AdamJ Jun 10, 2026
a38dca8
feat: upgrade to Tailwind CSS v4
AdamJ Jun 10, 2026
759d528
fix: remove @radix-ui/themes conflicting with shadcn theming
AdamJ Jun 10, 2026
e02a677
docs: add Theming section to README-EXT
AdamJ Jun 10, 2026
7579e58
refactor: prune unused Radix color scales from theme
AdamJ Jun 10, 2026
0d19862
fix: more improvements
AdamJ Jun 11, 2026
1424638
chore: bump version
AdamJ Jun 11, 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
185 changes: 0 additions & 185 deletions .claude/SKILLS/ios-health-check/SKILL.md

This file was deleted.

3 changes: 3 additions & 0 deletions .claude/SKILLS/security-audit/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Security Audit

Scan the codebase for: missing auth guards, hardcoded secrets, XSS sinks, missing security headers, and unsafe external links (noopener/noreferrer). For each finding, propose a fix and offer to implement. End by syncing docs.
15 changes: 15 additions & 0 deletions .claude/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"hooks": {
"PostToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{
"type": "command",
"command": "npm run lint --silent && npx tsc --noEmit"
}
]
}
]
}
}
11 changes: 11 additions & 0 deletions .mcp.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"mcpServers": {
"shadcn": {
"command": "npx",
"args": [
"shadcn@latest",
"mcp"
]
}
}
}
26 changes: 24 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,32 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

### Fixed

- Removed `@radix-ui/themes` (separate design system, leftover from earlier scaffold). Its `<Theme>` wrapper applied a `.radix-themes` class that set its own `--color-background`, overriding the shadcn `--color-background` token from `@theme` and breaking `bg-background`/theming app-wide after the Tailwind v4 upgrade. `Badge`/`Flex` usages replaced with shadcn `Badge` + Radix color-scale utility classes (`bg-X-3 text-X-11 border-X-6`).
— `src/main.tsx`, `src/components/KanbanColumn.tsx`, `src/components/PlannedTaskCard.tsx`, `src/components/TaskItem.tsx`, `src/pages/Archive.tsx`, `package.json`

- Pruned unused `@radix-ui/colors` scale imports and their `@theme` mappings in `src/index.css` — kept only the 12 scales referenced by components (`gray`, `mauve`, `slate`, `red`, `purple`, `violet`, `indigo`, `blue`, `cyan`, `green`, `brown`, `orange`), removing 18 unused light/dark scale imports and ~250 lines of `--color-X-1..12` mappings. No behavior change.
— `src/index.css`

### Changed

- Upgraded to Tailwind CSS v4 via the official `@tailwindcss/upgrade` codemod. `tailwind.config.ts` removed — theme (semantic colors, Radix scales, radius, keyframes/animations, `container`) now lives in `@theme`/`@layer base` blocks in `src/index.css`. PostCSS now uses `@tailwindcss/postcss` (replaces `tailwindcss` + `autoprefixer`). Deprecated utility renames applied across components (`outline-none` → `outline-hidden`, `shadow-sm` → `shadow-xs`, etc.). `components.json` updated to drop the now-deleted `tailwind.config.ts` reference.
— `src/index.css`, `postcss.config.js`, `package.json`, `components.json`, 42 component files

### Added

- Category add/edit forms moved to a Sheet drawer — both `CategoryManagement.tsx` (legacy dialog) and the `/categories` page's inline "Add/Edit Category" cards are replaced by a shared `CategorySheet` (mirrors `ClientSheet`/`ProjectSheet`), opened via "Add Category" or per-category Edit and pre-filled in edit mode.
— `src/components/CategorySheet.tsx` (new: shared add/edit Sheet form), `src/components/CategoryManagement.tsx`, `src/pages/Categories.tsx` (removed inline form cards, added sheet state)

- Project add/edit forms moved to a Sheet drawer — the Project Management dialog's inline "Add/Edit Project" card is replaced by a shared `ProjectSheet` (mirrors `ClientSheet`), opened via the "Add Project" button or per-project Edit action and pre-filled in edit mode. Submitting calls `addProject`/`updateProject` followed by `forceSyncToDatabase()` (project mutations don't auto-save).
— `src/components/ProjectSheet.tsx` (new: shared add/edit Sheet form), `src/components/ProjectManagement.tsx` (removed inline form card, added sheet state)

- Client editing — clients can now be edited after creation. An Edit button (pencil icon) appears on each active client card and opens a Sheet drawer pre-filled with the client's current name, address, and contact fields. The same Sheet is reused for "Add Client" (previously an inline card form), making both flows consistent. `updateClient(id, data)` added to `TimeTrackingContext` — merges partial data into the existing client, preserves `id`/`createdAt`/`archived`, updates `clientsRef` + state, and returns the updated `Client`; callers persist via the existing `persistClient` → `upsertClient` path (1 Supabase call). Archived clients show no Edit button (restore first).
— `src/components/ClientSheet.tsx` (new: shared add/edit Sheet form), `src/components/ClientManagement.tsx` (removed inline form card, added edit button + sheet state), `src/contexts/TimeTrackingContext.tsx` (`updateClient` method in interface + implementation + context value)

### Added

- Automated Electron desktop release CI — when the existing version-bump release workflow publishes a new GitHub Release, a new `electron-release.yml` workflow builds the Electron app for macOS (DMG) and Windows (NSIS) on `release: published` and uploads the installers as release assets via `softprops/action-gh-release`.
— `.github/workflows/electron-release.yml` (new)
- Electron desktop build target — the app can now be packaged as a native Mac (DMG) or Windows (NSIS) desktop app via Electron. `electron/main.ts` creates a `BrowserWindow` (1280×800, `contextIsolation: true`, `nodeIntegration: false`) with a CSP header that allows `self`, `data:`, and `https://*.supabase.co`. Dev mode loads `http://localhost:8080`; production serves `dist/` via a custom `app://` protocol handler (required because the app uses `BrowserRouter` — `file://` + pushState breaks without a real origin). `vite.electron.config.ts` compiles the main process to CJS (`dist-electron/main.cjs`) in isolation from the app Vite config. New scripts: `electron:build:main`, `electron:dev`, `electron:preview`, `electron:build`. CI updated to use pnpm exclusively (`pnpm/action-setup@v4`, `pnpm install --frozen-lockfile`); `package-lock.json` removed in favour of `pnpm-lock.yaml` as the single lock file.
— `electron/main.ts` (new), `electron/tsconfig.json` (new), `vite.electron.config.ts` (new), `package.json` (`packageManager`, `main`, scripts, electron-builder `build` config), `.gitignore` (`dist-electron/`, `dist-electron-build/`), `.github/workflows/test.yml` (pnpm)

Expand Down
Loading
Loading