Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
268 commits
Select commit Hold shift + click to select a range
d80226c
chore: type global router context
frontend-datagenero Dec 6, 2025
7caf825
chore: set stale time to default
frontend-datagenero Dec 6, 2025
2da311c
chore: kill cache when entering home layout
frontend-datagenero Dec 6, 2025
9123e6f
docs: update readme
frontend-datagenero Dec 6, 2025
c2e5eac
build: add support for environmental variables for both web and elect…
frontend-datagenero Feb 2, 2026
e416ace
build: install and configure pandacss
frontend-datagenero Feb 2, 2026
67603f6
chore: flag stitches as deprecated
frontend-datagenero Feb 2, 2026
ebcf3a6
feat: add loading page and updated branding images
frontend-datagenero Feb 2, 2026
60cf7fd
chore: configure view transition for all pages
frontend-datagenero Feb 2, 2026
51fe099
feat: add loading screen on boot, timer of 1.5s
frontend-datagenero Feb 2, 2026
64048ac
chore: re-implement button and partially input
frontend-datagenero Feb 2, 2026
2393d18
chore: fix some tokens in panda and move stitches global styles
frontend-datagenero Feb 2, 2026
3a289e1
chore: add changes to router file
frontend-datagenero Feb 2, 2026
59363cd
chore: change to named export on local store
frontend-datagenero Feb 2, 2026
047b115
chore: replace custom use mutation hook with base on connect to host …
frontend-datagenero Feb 2, 2026
ab0a4e2
fix: add lineheight to text styles and adjust font weight
frontend-datagenero Feb 6, 2026
a6198d9
fix: add fixed height to button and auto adjust icon size
frontend-datagenero Feb 6, 2026
0833a98
feat: create components to render in home screen
frontend-datagenero Feb 6, 2026
0947627
feat: create link card tool for features
frontend-datagenero Feb 6, 2026
5e41df1
feat: redesign home
frontend-datagenero Feb 6, 2026
ce99113
fix: extra character in home layout and rename the component
frontend-datagenero Feb 6, 2026
9cd982f
chore(styles): add animation semantic tokens
frontend-datagenero Feb 8, 2026
5475a61
feat: add more brand images
frontend-datagenero Feb 8, 2026
edce729
feat(components): create brand, layout and ui components
frontend-datagenero Feb 8, 2026
a2c2040
fix: replace brand images with correct ones and set proper heights
frontend-datagenero Feb 21, 2026
edb8521
feat: create modern tooltip component
frontend-datagenero Feb 21, 2026
5a02a5d
chore: flag card as deprecated
frontend-datagenero Feb 21, 2026
41a158c
chore: create modern ui components
frontend-datagenero Feb 21, 2026
f6f7fac
fix: remove fadeIn scaling animation
frontend-datagenero Feb 21, 2026
3b79f39
build: update react and add radix dependencies
frontend-datagenero Feb 21, 2026
504840d
chore: export constants
frontend-datagenero Feb 21, 2026
0a50bb1
fix: adjust stepper styles (sizing and colors)
frontend-datagenero Feb 21, 2026
2eba84b
chore: refactor header so we can correctly position all elements
frontend-datagenero Feb 22, 2026
2344209
chore: use constants and base card element on feature selector
frontend-datagenero Feb 22, 2026
beb63bc
chore: migrate hidden input
frontend-datagenero Feb 22, 2026
24f6de0
build: add web or electron run modes
frontend-datagenero Feb 24, 2026
1e15bb7
fix: typo on anonymizer label
frontend-datagenero Feb 24, 2026
051b6bd
chore: add tutorial seen to local storage store
frontend-datagenero Feb 24, 2026
dc59ad2
feat: make card clickable
frontend-datagenero Feb 24, 2026
cef7f88
chore: adjust button sizes and enum import
frontend-datagenero Feb 24, 2026
347054d
chore: simplify main app layout
frontend-datagenero Feb 24, 2026
6c9daf3
feat: rework onboarding page
frontend-datagenero Feb 24, 2026
ee17865
feat(ui): create and/or adjust components
frontend-datagenero Feb 24, 2026
331ff8d
fix: update enum import
frontend-datagenero Feb 24, 2026
b6569f7
chore: rework layout components
frontend-datagenero Feb 24, 2026
5f91047
chore: ignore personal analysis folder
front-end2-lgtm Feb 25, 2026
146905f
feat: improve topbar accessibility with semantic icons and aria labels
front-end2-lgtm Feb 25, 2026
244027b
refactor(layout): hoist Topbar and Stepper to global wizard route
front-end2-lgtm Feb 25, 2026
36d70bb
build: add i18n
frontend-datagenero Mar 2, 2026
59dc125
feat: add i18n support for the whole app
frontend-datagenero Mar 2, 2026
cd15a77
fix(layout): address PR review on header and icon changes
front-end2-lgtm Mar 20, 2026
088bed8
feat: add api base url protection and apply it
frontend-datagenero Apr 7, 2026
cf9def0
chore: restructure HOC to be a regular component
frontend-datagenero Apr 7, 2026
31078ff
chore: cleanup
frontend-datagenero Apr 7, 2026
c34951e
fix: redo home layout
frontend-datagenero Apr 7, 2026
394121d
feat: add more copies to locale file
frontend-datagenero Apr 7, 2026
172b731
Merge branch 'feat/a11y-dataset-header' into feat/redesign
frontend-datagenero Apr 7, 2026
617ea97
feat: use a11y on finish page
frontend-datagenero Apr 7, 2026
2fd61a7
fix: add missing feature param call on route.tsx
frontend-datagenero Apr 7, 2026
9d915ca
chore: kill unused old hidden input component
frontend-datagenero Apr 7, 2026
baa9835
feat: add more copies for the finish page
frontend-datagenero Apr 7, 2026
d4830e4
feat: create label manager component
frontend-datagenero Apr 7, 2026
4a9a255
feat: create switch component
frontend-datagenero Apr 9, 2026
df53488
chore: minor changes
frontend-datagenero Apr 9, 2026
95e1723
fix: title in anonymizer locale
frontend-datagenero Apr 9, 2026
962961e
chore: remove stepper component
frontend-datagenero Apr 15, 2026
0bc48bc
chore: refactor Searchbar
frontend-datagenero Apr 15, 2026
bfc9baf
feat: create initial label manager
frontend-datagenero Apr 15, 2026
4e91d28
feat: add feature icon record
frontend-datagenero Apr 15, 2026
7d1a71f
add disambiguate and predict react query options
frontend-datagenero Apr 15, 2026
d31ec03
finish onboarding page
frontend-datagenero Apr 15, 2026
3c88d2f
finish preview page
frontend-datagenero Apr 15, 2026
23fa840
improve layout header component
frontend-datagenero Apr 15, 2026
5b069d6
connect rest of label manager
frontend-datagenero Apr 15, 2026
0978aff
add label manager to file annotator
frontend-datagenero Apr 15, 2026
091b2c5
make search bar static and follow scroll
frontend-datagenero Apr 15, 2026
9585726
use translation on droparea
frontend-datagenero Apr 15, 2026
59416b8
clear files on features menu
frontend-datagenero Apr 15, 2026
2c9d6cf
make dataset validation file annotator not annotable
frontend-datagenero Apr 15, 2026
762cf82
add missing built by in features page
frontend-datagenero Apr 16, 2026
4ed6845
drop file queries when resetting the progress
frontend-datagenero Apr 16, 2026
ba12dad
add className prop to footer
frontend-datagenero Apr 16, 2026
490a1ad
simplify finish dataset and anonymizer
frontend-datagenero Apr 17, 2026
12aa1c6
update decision tabs to panda
frontend-datagenero Apr 17, 2026
da1377e
update file processing component
frontend-datagenero Apr 17, 2026
b39d513
chore: add .worktrees to .gitignore
lionelchamorro Apr 17, 2026
6f07cb3
feat(voice-to-text): add types, config flags, and zod schema
lionelchamorro Apr 17, 2026
9653e33
feat(voice-to-text): add STT mock service, fixtures, and useTranscrib…
lionelchamorro Apr 17, 2026
e33eba1
feat(voice-to-text): add transcription context, reducer, and hooks
lionelchamorro Apr 17, 2026
7f04675
feat(voice-to-text): add FeatureCard, Switch, and SpeakerAvatar compo…
lionelchamorro Apr 17, 2026
a235a22
feat(voice-to-text): redesign features page and extend FeatureRouter
lionelchamorro Apr 17, 2026
114178f
feat(voice-to-text): add onboarding, preview, and process pages
lionelchamorro Apr 17, 2026
d59b0ba
feat(voice-to-text): add AudioPlayer component
lionelchamorro Apr 17, 2026
54f4b75
feat(voice-to-text): add TranscriptionEditor base with audio sync
lionelchamorro Apr 17, 2026
e10e7ce
feat(voice-to-text): add edit mode, speaker dialog, suggested speaker…
lionelchamorro Apr 17, 2026
2a62c3c
feat(voice-to-text): add validation and finish pages
lionelchamorro Apr 17, 2026
61e4124
fix: resolve biome lint issues in new voice-to-text files
lionelchamorro Apr 17, 2026
9e81ee1
hide file stepper selector arrows depending on cursor
frontend-datagenero Apr 20, 2026
204246c
fix gaps on finish page
frontend-datagenero Apr 20, 2026
7c1db95
add checked variant to button
frontend-datagenero Apr 20, 2026
707e844
update suggestion mark component's styles
frontend-datagenero Apr 20, 2026
642e760
improve suggestion component
frontend-datagenero Apr 20, 2026
93c9457
create toast component
frontend-datagenero Apr 20, 2026
03954d7
create callout from toast, and then apply a11y to toast
frontend-datagenero Apr 20, 2026
3a9a5cc
remove old component implementations
frontend-datagenero Apr 20, 2026
c28fdcd
fix title in process copy etxt
frontend-datagenero Apr 20, 2026
1cfba9c
adjust callout styling
frontend-datagenero Apr 20, 2026
d855a93
adjust styling and positioning on preview page
frontend-datagenero Apr 20, 2026
c5d7b4b
create better select component
frontend-datagenero Apr 20, 2026
7a323cd
kill more unused components
frontend-datagenero Apr 20, 2026
657e2a5
minor styling fixes + new select imports
frontend-datagenero Apr 20, 2026
0b05e18
wip: voice-to-text migration to main folder
lionelchamorro Apr 20, 2026
32d3441
add retro compatibility features to select
frontend-datagenero Apr 20, 2026
be48dac
add custom icons to callout, toast and showToast
frontend-datagenero Apr 20, 2026
ef56305
chore(voice-to-text): load renderer env from repo root, make mock STT…
lionelchamorro Apr 20, 2026
6825e52
fix(voice-to-text): center skip-5s label inside rotation arrow
lionelchamorro Apr 20, 2026
208bcee
fix(voice-to-text): accept negative speaker_no and hide non-speech turns
lionelchamorro Apr 20, 2026
2499e4c
add input size variants
frontend-datagenero Apr 22, 2026
92ceaac
remove old tooltip implementation
frontend-datagenero Apr 22, 2026
cd0f7d3
add radix's select as dependency
frontend-datagenero Apr 22, 2026
63c6bf0
initial mark component update
frontend-datagenero Apr 22, 2026
d6c3bd7
improve ui dialog component
frontend-datagenero Apr 22, 2026
e54adfb
add small version of select component
frontend-datagenero Apr 22, 2026
28ce40a
create search tagger
frontend-datagenero Apr 24, 2026
2719755
extract tagger popover logic
frontend-datagenero Apr 24, 2026
12348ed
update button icons
frontend-datagenero Apr 24, 2026
65ceb19
swap replace button icons
frontend-datagenero Apr 24, 2026
046a73e
deprecate usage of useSchemedMutation
frontend-datagenero Apr 25, 2026
efb04bc
deprecate usage of useSchemedQuery and useSchemedQueries
frontend-datagenero Apr 25, 2026
df491c1
add odt to pdf conversion
frontend-datagenero Apr 25, 2026
6edd710
update tanstack react query version
frontend-datagenero Apr 25, 2026
c2c21c2
add className to SectionTitle
frontend-datagenero Apr 25, 2026
af457c8
improve accessibility on host page
frontend-datagenero Apr 25, 2026
4fb2812
finish major pages and add file protection feature
frontend-datagenero Apr 25, 2026
5493cde
finish mark and tag annotation feature
frontend-datagenero Apr 25, 2026
aa2ce6a
adjust styles on callout
frontend-datagenero Apr 26, 2026
55a67bf
fix select viewport and add scroll
frontend-datagenero Apr 26, 2026
ca56bb6
add size variant to suggestion and adjust display
frontend-datagenero Apr 26, 2026
d1649e5
add max width to toast and remove instad of dismiss it
frontend-datagenero Apr 26, 2026
6b21903
move createAnnotationData, tag and suffix to context
frontend-datagenero Apr 26, 2026
cae3b90
disambiguate hook
frontend-datagenero Apr 26, 2026
7701754
adjust spacing on dataset validation
frontend-datagenero Apr 26, 2026
63c4d73
move suggestion label and add mark props
frontend-datagenero Apr 26, 2026
6c3112a
store label manager config in local storage
frontend-datagenero Apr 27, 2026
0f08b9c
add more anonymizer copy locale texts
frontend-datagenero Apr 27, 2026
52230ee
add metadata to search and tag annotations
frontend-datagenero Apr 27, 2026
cad8faa
simplify annotation components
frontend-datagenero Apr 27, 2026
a7e91ce
add remove dialog to label manager's entity tab
frontend-datagenero Apr 27, 2026
5655eac
smaller fixes on file annotation components
frontend-datagenero Apr 27, 2026
01aa8a7
fix TS issues
frontend-datagenero Apr 27, 2026
9f62ac6
adjust predicting and file parser flows
frontend-datagenero Apr 27, 2026
d10fe8c
add useShallow to local storage default getters
frontend-datagenero Apr 27, 2026
6aa895f
simplify and remove unused code on fille annotator component
frontend-datagenero Apr 27, 2026
74d4dac
add value as undefined on ui/input component
frontend-datagenero Apr 27, 2026
de2b641
add random cannonical id on search add event
frontend-datagenero Apr 27, 2026
ae09277
add update by cannonical id function
frontend-datagenero Apr 27, 2026
528c646
add more canonical id operations on reducers
frontend-datagenero Apr 27, 2026
6f8a478
adjust typings
frontend-datagenero Apr 27, 2026
072d751
remove axios' default api url
frontend-datagenero Apr 27, 2026
ea61e4e
add fixed height to validation dataset page
frontend-datagenero Apr 27, 2026
a36a740
make suggestion clickable on uncontrolled text input
frontend-datagenero Apr 27, 2026
70c44a0
more fixes in height to validate dataset
frontend-datagenero Apr 27, 2026
d975e3f
include label policies and annotations when anonymizing document
frontend-datagenero Apr 27, 2026
a0f6c68
fix ts clone element issue
frontend-datagenero Apr 27, 2026
8dc38fb
add knip
frontend-datagenero Apr 27, 2026
151e271
make OS taskbar API safe to call in web
frontend-datagenero Apr 27, 2026
eb791d0
add missing anonymize value on label attrs
frontend-datagenero Apr 27, 2026
49c3bc2
fix electron ts issues
frontend-datagenero Apr 27, 2026
b888214
make how it works modal bigger
frontend-datagenero Apr 27, 2026
a723be0
restore useNotify feature in process page
frontend-datagenero Apr 27, 2026
f4d5c5a
changes in render
lionelchamorro Apr 27, 2026
275572c
add library for sse
lionelchamorro Apr 27, 2026
91a5b96
merge: integrate refactor branch + migrate voice-to-text
lionelchamorro Apr 27, 2026
645be86
docs(readme): document pnpm prepare, lefthook, panda
lionelchamorro Apr 27, 2026
f926d37
fix(voice-to-text): audio-only picker, dedupe SSE, surface server errors
lionelchamorro Apr 28, 2026
6649a7d
chore(knip): configure entry points and warn-only rules
lionelchamorro Apr 28, 2026
526f300
test: add minimal vitest setup for renderer logic
lionelchamorro Jun 5, 2026
220b646
chore(knip): keep @testing-library/react for renderer tests
lionelchamorro Jun 5, 2026
302cd60
i18n(voice-to-text): add redesigned copy keys
lionelchamorro Jun 5, 2026
1e56007
feat(voice-to-text): add renameTranscription reducer action
lionelchamorro Jun 5, 2026
7c231c9
feat(voice-to-text): add audio snippet hook + duration formatter
lionelchamorro Jun 5, 2026
46f13d9
feat(voice-to-text): add header step indicator across screens
lionelchamorro Jun 5, 2026
35c962f
refactor(voice-to-text): stepper uses cva recipe and text-style token
lionelchamorro Jun 5, 2026
3bc4e4b
feat(voice-to-text): shared how-it-works grid and always-on help modal
lionelchamorro Jun 5, 2026
67c8154
refactor(voice-to-text): how-it-works badge uses text-style token
lionelchamorro Jun 5, 2026
fde9f18
feat(voice-to-text): gate onboarding grid vs audio drop area
lionelchamorro Jun 5, 2026
63d1690
fix(voice-to-text): make drop zone clickable, stop drag flicker, pers…
lionelchamorro Jun 5, 2026
ea1a38e
feat(voice-to-text): restyle file preview with 10s snippet play
lionelchamorro Jun 5, 2026
fa06081
feat(voice-to-text): progress states with stop, replace, and callout
lionelchamorro Jun 5, 2026
69ff1a3
refactor(voice-to-text): drop dead retryKey, flag inline keyframe TODO
lionelchamorro Jun 5, 2026
010ea56
feat(voice-to-text): results header reorder, editable title, unified …
lionelchamorro Jun 5, 2026
44f997d
fix(voice-to-text): keep single accessible control per turn header
lionelchamorro Jun 5, 2026
d1f9994
fix(voice-to-text): Persona/Roles wording + load Archivo 700 weight
lionelchamorro Jun 5, 2026
e9fcf9f
fix(voice-to-text): remove load-more on preview, thicker file-row border
lionelchamorro Jun 5, 2026
8c9a961
fix(voice-to-text): align progress bar with project style, outline co…
lionelchamorro Jun 5, 2026
fdd53ce
fix(voice-to-text): widen how-it-works modal, flex card text, remove …
lionelchamorro Jun 5, 2026
57b924e
fix(voice-to-text): move transcript title and edit banner into gray s…
lionelchamorro Jun 5, 2026
a2ee6e3
feat(voice-to-text): splitTurn and mergeTurnWithPrevious reducer actions
lionelchamorro Jun 5, 2026
cc9780c
feat(voice-to-text): in-place editable turn text component
lionelchamorro Jun 5, 2026
9b55feb
feat(voice-to-text): selection-assign toolbar and shared speaker picker
lionelchamorro Jun 5, 2026
d947614
feat(voice-to-text): per-turn floating edit toolbar with timestamp po…
lionelchamorro Jun 5, 2026
cfd76ba
feat(voice-to-text): floating-toolbar edit mode with in-place editing…
lionelchamorro Jun 5, 2026
a6a40de
fix(voice-to-text): idempotent turn selection, preserve id on split, …
lionelchamorro Jun 5, 2026
5a36115
chore(voice-to-text): remove modal dialog, suggested panel, inter-tur…
lionelchamorro Jun 5, 2026
135ede8
fix(voice-to-text): unique turn aria-label, clear selection after spl…
lionelchamorro Jun 5, 2026
5d44913
docs(voice-to-text): capture redesign + Variant-B edit-mode plans
lionelchamorro Jun 5, 2026
0c85203
feat(vtt-c): turn side panel and shared timestamp parser
lionelchamorro Jun 5, 2026
359fc81
feat(vtt-c): persistent side-panel edit mode, remove floating toolbar
lionelchamorro Jun 5, 2026
4da2867
i18n(vtt-c): drop orphaned floating-toolbar keys, align startsAt copy
lionelchamorro Jun 5, 2026
a0ce33d
fix(vtt-c): timestamp parser round-trips formatTime, clear selection …
lionelchamorro Jun 5, 2026
aa23897
fix(vtt-c): drop literal + in Nuevo chip label (icon already renders +)
lionelchamorro Jun 5, 2026
345b3f5
fix(voice-to-text): show Reemplazar on stopped state to swap the audi…
lionelchamorro Jun 5, 2026
57d3f47
feat(vtt-c): inline global speaker rename in side panel
lionelchamorro Jun 5, 2026
ffb9722
fix(voice-to-text): merge speakers when rename collides with an exist…
lionelchamorro Jun 5, 2026
8d6acc5
refactor(voice-to-text): consume shared @aymurai/ui components
lionelchamorro Jun 19, 2026
d2d6964
docs(vtt): spec for Voz a Texto Figma 'Speech to text WIP' alignment
lionelchamorro Jun 21, 2026
265b1f6
docs(vtt): add Figma get_design_context workflow to spec
lionelchamorro Jun 21, 2026
475d247
docs(vtt): implementation plan for Figma 'Speech to text WIP' alignment
lionelchamorro Jun 21, 2026
e930096
chore: restore pnpm toolchain install
lionelchamorro Jun 21, 2026
39e37b0
feat(vtt): clear transcriptions on onboarding mount
lionelchamorro Jun 21, 2026
c862a17
chore(dev): optional VITE_DEV_HOST auto-connect for dev:web
lionelchamorro Jun 21, 2026
311bff5
fix(vtt): widen how-it-works modal so 2x2 grid renders (Figma)
lionelchamorro Jun 21, 2026
0763650
chore: move agent-browser to devDependencies
lionelchamorro Jun 21, 2026
76a2b61
chore: move blockExoticSubdeps to pnpm-workspace.yaml
lionelchamorro Jun 21, 2026
953c03a
chore(deps): bump @aymurai/ui to v0.3.0 (release branch)
lionelchamorro Jun 22, 2026
fcb3ab1
fix(vtt): adopt ArchiveProgress + white transcript background (Figma)
lionelchamorro Jun 22, 2026
76441dc
docs(vtt): visual-fixes analysis + plan (lib vs project classification)
lionelchamorro Jun 22, 2026
94b14c9
chore(deps): repin @aymurai/ui to v0.3.1 tag
lionelchamorro Jun 22, 2026
0772258
fix(vtt): align preview + drop screens to Figma spec
lionelchamorro Jun 22, 2026
194fff1
feat(vtt): adopt @aymurai/ui SidePanel + TranscriptBlock
lionelchamorro Jun 22, 2026
94f98db
fix(vtt): add gap between player time and the rightSlot action
lionelchamorro Jun 22, 2026
1491744
fix(vtt): hide ArchiveProgress dismiss (✕) button on the process screen
lionelchamorro Jun 22, 2026
298ce2b
fix(vtt): parse new typed ASR stream protocol (meta/delta/segments/done)
lionelchamorro Jun 25, 2026
b56bd8e
feat(vtt): restore transcript playback follow-along and click-to-seek
lionelchamorro Jun 26, 2026
5b4cb88
fix(vtt): show streaming transcript as a static scrollable preview
lionelchamorro Jun 26, 2026
67b1634
fix(i18n): update audio transcription duration message in Spanish locale
jansaldo Jun 29, 2026
6e38c57
feat(asr): enhance ASR schema and transcription mapping with speaker …
jansaldo Jun 29, 2026
c881263
feat(asr): update transcription title generation to use file name wit…
jansaldo Jun 29, 2026
9164a30
feat(asr): enhance transcription handling for negative speaker segments
jansaldo Jun 29, 2026
94b1e61
feat(file-upload): support video transcription and scoped extension l…
jansaldo Jun 29, 2026
70f3872
feat(asr): support cached validation and track transcript source
jansaldo Jun 30, 2026
1e18058
feat(asr): add optional title field to ASR document schema and update…
jansaldo Jul 1, 2026
0e0b4da
feat(vtt): sync audio playback with transcript in edit mode
jansaldo Jul 2, 2026
aa674f5
feat: update suggested transcription speaker roles
jansaldo Jul 2, 2026
4bec5eb
fix(vtt): stop click bubbling on turn header and cover keyboard focus…
jansaldo Jul 3, 2026
f293d5c
fix(vtt): apportion split-turn time correctly when an edge is whitesp…
jansaldo Jul 3, 2026
0cdcc0a
fix(vtt): give manually-inserted turns a real duration and validate t…
jansaldo Jul 3, 2026
2b9776d
refactor(asr): extract stripKnownMediaExtension shared helper
jansaldo Jul 3, 2026
a9d1e94
feat(vtt): add .odt and .pdf export formats alongside .txt
jansaldo Jul 3, 2026
551d7c0
Merge branch 'main' of github.com:AymurAI/desktop-app into feature/vt…
lionelchamorro Jul 8, 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
38 changes: 38 additions & 0 deletions .claude/CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# Project-local Claude instructions

This repo's renderer (`src/renderer/`) uses:

- **Panda CSS** for styling. See `.claude/rules/panda-css.md`.
- **Radix UI** primitives wrapped under `src/renderer/src/components/ui/`.
See `.claude/rules/radix-ui.md`.
- **TanStack Router** for file-based routing in `src/renderer/src/routes/`.
- **TanStack React Query** for backend data; query/mutation factories live in
`src/renderer/src/services/aymurai/queries.ts`.
- **i18next** for Spanish UI strings under
`src/renderer/src/constants/i18n/locales/es/`.

When adding code to the renderer, the rules above apply. When uncertain about a
library API, prefer `mcp__plugin_context7_context7__query-docs` over guessing
from training data.

## Tooling

- Package manager: **pnpm** (`pnpm-lock.yaml` is authoritative). `npm install`
is unsupported in this repo.
- `pnpm prepare` runs `panda codegen && lefthook install`. Run after a fresh
clone or after pulling changes that touch `panda.config.ts`.
- Pre-commit gate (lefthook): biome (autoformat + lint), panda codegen,
forbidden-pattern grep (`console.log`, `debugger`, leftover merge markers,
`.only(`, `@stitches/react`).
- Pre-push gate: `pnpm typecheck` and `pnpm knip`.

## Migration in progress

Stitches CSS-in-JS is being replaced by Panda CSS. Files under `components/ui/`,
`components/voice-to-text/`, `components/finish/`, `components/anonymizer/`,
`components/home/`, and `components/layout/` are already on Panda. Older
components (under `components/{checkbox,radio,file-*,validation-form,...}` and
`components/{label,title,text,subtitle,spinner,uncontrolled-input}`) still
import from `@/styles/stitches.config`. Migrate any of these you touch; the
biome rule banning `@stitches/react` is **not yet enabled** because of this
backlog.
95 changes: 95 additions & 0 deletions .claude/rules/panda-css.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
# Panda CSS Rules (this repo)

The renderer uses [Panda CSS](https://panda-css.com) for all styling. The legacy
Stitches setup (`@stitches/react`, `@/styles/stitches.config`) is being phased
out — do not introduce new stitches usage; migrate any file you touch.

## Setup

- Config: `panda.config.ts` at repo root.
- Generated output: `src/renderer/src/styled/` (gitignored). Regenerated by
`pnpm prepare` (which runs `panda codegen`) and on pre-commit by lefthook
whenever `panda.config.ts` or any source file changes.
- PostCSS plugin wires the runtime: `postcss.config.cjs`.
- `strictTokens: true` is enabled — arbitrary values must use the `[bracket]`
escape syntax (e.g. `width: "[36px]"`, `bg: "[#9F99A5]"`).

## Authoring

Pick the lightest tool that fits:

1. **`css({ ... })`** — one-off styles attached via `className={...}`.
2. **`cva({ base, variants })`** — components with prop-driven variants
(button-like, with active/disabled/size states).
3. **`sva({ slots, base, variants })`** — slot recipes (e.g. dialog with
overlay/content/header slots).

Prefer layout primitives from `@/styled/jsx` over raw divs:

- `<Stack>` (vertical), `<HStack>` (horizontal), `<Grid>`, `<Box>`, `<Divider>`
- `<styled.h1 textStyle="title.md.strong">` for typography that already has a
named text style — use them instead of repeating `fontSize`/`lineHeight`.

## Tokens

Defined in `panda.config.ts theme.semanticTokens`:

- `colors.brand.{primary,secondary,tertiary}`
- `colors.text.{default,lighter,onbutton-default,onbutton-alternative,onbutton-disabled}`
- `colors.action.{default,disabled,alt-default,hover,pressed,focus}`
- `colors.bg.{primary,secondary,primary-alternative,primary-highlight,secondary-highlight}`
- `colors.system.{success,success-secondary,error,error-secondary,warning,warning-secondary,info,info-secondary}`
- `borders.{primary,secondary,primary-alt,error}`
- `gradients.primary`

Text styles: `title.md.{strong,default}`, `subtitle.{md,sm}.{strong,default}`,
`paragraph.{md,sm,xsm}.{strong,default}`, `cta.{md,sm}.{strong,default}`,
`label.{md,sm}.{strong,default}`.

Reference tokens by dotted path: `color: "text.default"`, never raw hex unless
bracketed (`color: "[#FFE066]"`).

## Conditions

Use Panda's `_hover` / `_focus` / `_disabled` style props in recipes, **or** the
nested `&:hover` / `&:focus-visible` / `&:disabled` selector form inside `css()`
— both are valid. Pick one style per component for consistency.

```ts
const button = cva({
base: { ... },
variants: { variant: { primary: { bg: "action.default", _hover: { bg: "action.hover" } } } },
});
```

## Workflow

- After changes to `panda.config.ts`, run `pnpm panda codegen` (lefthook does
this on commit, but the IDE needs the regenerated types to type-check).
- New tokens: add to `theme.semanticTokens` instead of inlining bracketed
values across many files.
- Animations: add `keyframes` + `tokens.animations` to `panda.config.ts` rather
than inline `<style>{@keyframes …}</style>` (only acceptable as a temporary
bridge — flag with TODO).

## Don'ts

- Don't import from `@stitches/react` in new code.
- Don't inline raw hex without `[bracket]` — strictTokens will reject it.
- Don't bypass `strictTokens: true` by editing the config; if a value is needed
often, add a token.
- Don't write Tailwind-style `className="hover:bg-blue"`. Panda does not parse
utility class strings.

## Quick reference for migration from Stitches

| Stitches | Panda |
|---|---|
| `styled("div", { color: "$primary" })` | inline `<div className={css({ color: "text.default" })}>` |
| `styled("button", { variants: { ... } })` | `const button = cva({ base, variants })` then `<button className={button({ ... })}>` |
| `keyframes({ ... })` | `theme.extend.keyframes` in `panda.config.ts` + `animationName: "myAnim"` token |
| `$primary`, `$primaryAlt`, `$bgSecondary` etc. | semantic tokens in `panda.config.ts` |
| `css={{ ... }}` JSX prop | `className={css({ ... })}` |

When uncertain about a recent Panda CSS API, look it up via
`mcp__plugin_context7_context7__query-docs` rather than guessing.
85 changes: 85 additions & 0 deletions .claude/rules/radix-ui.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
# Radix UI Rules (this repo)

The renderer uses [Radix UI primitives](https://www.radix-ui.com/primitives)
for accessible UI building blocks (dialog, popover, select, switch, tooltip).
Visuals are layered on top with Panda CSS recipes.

## Where primitives live

All wrapped primitives are exported from `src/renderer/src/components/ui/`:

- `ui/dialog.tsx` — wraps `@radix-ui/react-dialog`
- `ui/popover.tsx` — wraps `@radix-ui/react-popover`
- `ui/select.tsx` — wraps `@radix-ui/react-select`
- `ui/switch.tsx` — wraps `@radix-ui/react-switch`
- `ui/tooltip.tsx` — wraps `@radix-ui/react-tooltip`
- Plus visual primitives without a Radix dependency: `button`, `card`, `input`,
`back-button`, `callout`, `suggestion`, `toast`.

Feature code imports from `@/components/ui/*`, **never** directly from
`@radix-ui/react-*`. If a primitive isn't wrapped yet, add it to `ui/` first.

## Composition pattern (shadcn-style)

Each primitive exports the parts the consumer needs:

```tsx
import {
Dialog,
DialogContent,
DialogTitle,
DialogTrigger,
} from "@/components/ui/dialog";

<Dialog open={open} onOpenChange={setOpen}>
<DialogContent>
<DialogTitle>...</DialogTitle>
...
</DialogContent>
</Dialog>
```

- Open/close state lives in the consumer (`open` + `onOpenChange`).
- Content goes inside the matching `*Content`.
- Don't re-export every Radix part — only what the codebase actually uses.

## Styling

- Each `ui/` file owns its visuals via Panda's `css()` / `cva()` / `sva()`.
- Apply styles via `className={cx(internalStyles, className)}` so callers can
pass extra utility classes when needed.
- Animations use the `animations` panda tokens (`fadeIn`, `fadeOut`); keyframes
live in `panda.config.ts theme.extend.keyframes`.

## Accessibility

- Trust Radix to manage focus traps, `aria-*` attributes, escape/click-outside
behavior. Don't replicate it manually.
- Always pair form primitives with a `<label>` (or `aria-label`).
- Forward `ref` through your wrapper so consumers can use `useRef`.
- Do not add `autoFocus` props to dialog inputs — Radix focuses the first
focusable element on open. If a different element should be focused, use
`onOpenAutoFocus` to redirect.

## Adding a new primitive wrapper

1. Install the radix package as a devDep (e.g. `pnpm add -D @radix-ui/react-X`).
2. Create `src/renderer/src/components/ui/<name>.tsx` and re-export the parts
the codebase will use, wrapped in a Panda recipe.
3. Use `forwardRef` if the primitive accepts a ref.
4. Co-locate styles in the same file. If the recipe grows past ~100 lines,
split into a `ui/<name>.styles.ts`.

## Don'ts

- Don't import `@radix-ui/*` directly from feature code.
- Don't reimplement focus management, escape handling, or click-outside logic.
- Don't add `autoFocus` to dialog inputs.
- Don't keep state inside `ui/` primitives that should be in the consumer
(open/value/checked etc.).

## Quick check before reaching for Radix

If the UI is purely visual (a card, a button, a callout), skip Radix and use a
Panda recipe directly. Radix is for primitives that need keyboard/focus/ARIA
choreography.
26 changes: 26 additions & 0 deletions .claude/skills/panda-css/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
---
name: panda-css
description: Use when authoring or refactoring styles in the Electron renderer of this repo. Triggers on edits to .tsx files that import from @/styled/css or @/styled/jsx, when adding tokens to panda.config.ts, or when migrating Stitches code to Panda.
---

# Panda CSS

This repo's styling stack is Panda CSS. Read the full reference at
`.claude/rules/panda-css.md` — it lists tokens, text styles, escape syntax, and
the Stitches → Panda migration table.

Quick checklist when you're about to touch styling:

1. **Pick the right tool**: `css()` for one-offs, `cva()` for variants, `sva()`
for slot recipes. Layout uses `<Stack>` / `<HStack>` / `<Grid>` from
`@/styled/jsx`.
2. **strictTokens is on**. Raw values need `[bracket]` escape (e.g.
`width: "[36px]"`).
3. **Use semantic tokens** for colors (`text.default`, `bg.secondary`,
`brand.primary`) — never raw hex unless bracketed.
4. **Run `pnpm panda codegen`** after editing `panda.config.ts` (lefthook
handles this on commit, but the IDE needs it to type-check).
5. **Don't import from `@stitches/react`**. Migrate any Stitches code you touch.

For unfamiliar APIs, query the latest docs:
`mcp__plugin_context7_context7__query-docs` with library `panda-css`.
28 changes: 28 additions & 0 deletions .claude/skills/radix-ui/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
---
name: radix-ui
description: Use when adding or modifying Radix UI primitives in this repo's renderer (dialog, popover, select, switch, tooltip) or wiring accessible interactive components. Triggers on edits under src/renderer/src/components/ui/ or imports from @radix-ui/*.
---

# Radix UI

This repo wraps Radix primitives in `src/renderer/src/components/ui/`. The full
guidelines are in `.claude/rules/radix-ui.md` — read it before adding a new
primitive or refactoring an existing one.

Quick checklist:

1. **Import from `@/components/ui/*`** in feature code, never directly from
`@radix-ui/react-*`. Wrap missing primitives under `ui/` first.
2. **State stays with the consumer** (`open` + `onOpenChange`). The primitive
is presentational.
3. **Don't add `autoFocus` to dialog inputs** — Radix manages focus on open;
use `onOpenAutoFocus` to redirect if a specific element must be focused.
4. **Style with Panda** (`css()`, `cva()`, `sva()`) — see
`.claude/rules/panda-css.md`. Animations come from panda's `animations`
tokens.
5. **Forward refs** through the wrapper so `useRef` works in callers.
6. **Trust Radix's a11y**: focus traps, ARIA, escape/outside-click. Don't
replicate.

For unfamiliar APIs, query the latest docs:
`mcp__plugin_context7_context7__query-docs` with library `radix-ui`.
4 changes: 4 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
VITE_USE_MOCK_STT=false
VITE_STT_MOCK_DELAY_MS=4000
# Transcription cache on the ASR backend. Defaults to true in prod builds, false in dev.
VITE_ASR_USE_CACHE=false
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.

# git worktrees
.worktrees/

# dependencies
/node_modules
node_modules/*
Expand Down
1 change: 1 addition & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
{
"uiMergePreview.devCommand": "pnpm run dev:web",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.fixAll": "explicit",
Expand Down
13 changes: 12 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
tools
- ⚡ **Electron** as the _deployment and packaging tool_. It also serves the
purpose of communicating the webapp with the _NodeJS_ process.
- 🪡 **Stitches** as the _styling library_
- 🐼 **Panda CSS** as the _styling library_ (migrating off legacy Stitches)
- 🛣️ **Tanstack React Router** as the _routing library_ to navigate across the webapp
- 📄 **Mammoth** + **ExcelJS** as the _libraries_ to read and write `.docx` and
datasheet files
Expand All @@ -17,6 +17,7 @@ datasheet files

- **pnpm** as _package manager_
- **biome** as code _linter and formatter_
- **lefthook** for git hooks (pre-commit + pre-push gates)

##  Getting started

Expand All @@ -28,6 +29,14 @@ datasheet files
pnpm install
```

1. Run `prepare` to generate the Panda CSS runtime and install the lefthook
git hooks (also runs automatically after `pnpm install`, but re-run it
after pulling changes that touch `panda.config.ts` or `lefthook.yml`):

```bash
pnpm prepare
```

1. Start the app in development mode with

```bash
Expand Down Expand Up @@ -72,6 +81,8 @@ datasheet files
- `typecheck:node`: runs type checking on the _Electron_ application
- `typecheck:web`: runs type checking on the _React_ application
- `validate`: runs linting and type checking on both React and renderer
- `prepare`: runs `panda codegen` and installs lefthook git hooks (auto-runs after `pnpm install`)
- `knip`: detects unused exports and dependencies (also gated on `pre-push`)
- `pre-commit`: runs _LintStaged_

### Deployment
Expand Down
3 changes: 3 additions & 0 deletions biome.json
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,9 @@
"level": "error"
}
},
"suspicious": {
"noConsoleLog": "warn"
},
"a11y": {
"noSvgWithoutTitle": "off",
"useKeyWithClickEvents": "off"
Expand Down
Loading