This website requires JavaScript.
a520251dab
feat: implement bulk file import functionality in AddSongSheet component
master
Gabriel Kaszewski
2026-04-09 14:13:58 +02:00
ab5eb69f7a
chore: add .dockerignore and update Dockerfile to use debian:trixie-slim
Gabriel Kaszewski
2026-04-09 13:39:38 +02:00
b1d778284c
feat(api): config from env vars (HOST, PORT, CORS_ALLOWED_ORIGINS, DATABASE_URL)
Gabriel Kaszewski
2026-04-09 01:23:10 +02:00
808ce287a5
chore: docker compose template for homeserver deployment
Gabriel Kaszewski
2026-04-09 01:20:03 +02:00
3605bef2b0
feat: add Dockerfile and implement SQLite persistence layer with repository pattern
Gabriel Kaszewski
2026-04-09 01:17:18 +02:00
dbb7cbd92f
fix: use var(--x) not hsl(var(--x)) for oklch theme vars, redesign fretboard with explicit string lines
Gabriel Kaszewski
2026-04-09 01:15:49 +02:00
ed669b2e3a
fix: larger black key dots, active note names list on piano
Gabriel Kaszewski
2026-04-09 01:07:39 +02:00
2964475df9
fix: piano readability + note labels, open chord voicings for guitar
Gabriel Kaszewski
2026-04-09 01:00:34 +02:00
544474c074
fix: double-sharp notes in PianoKeys, barre bar on E-shape chords
Gabriel Kaszewski
2026-04-09 00:50:51 +02:00
e9c2f7a5e0
feat: chord diagram — piano/guitar diagrams in song detail
Gabriel Kaszewski
2026-04-09 00:44:32 +02:00
e99b581a43
feat: tappable chord names in ChordChart, extractUniqueChords
Gabriel Kaszewski
2026-04-09 00:42:24 +02:00
ec7237e8c7
feat: ChordGrid component
Gabriel Kaszewski
2026-04-09 00:40:41 +02:00
3d56b71aa9
feat: ChordDiagram component
Gabriel Kaszewski
2026-04-09 00:40:36 +02:00
5a4d0ef648
feat: GuitarFretboard component
Gabriel Kaszewski
2026-04-09 00:39:43 +02:00
7653933f46
feat: PianoKeys component
Gabriel Kaszewski
2026-04-09 00:38:14 +02:00
90df2b36f2
feat: chord voicing theory layer
Gabriel Kaszewski
2026-04-09 00:36:08 +02:00
ac65be1bb9
feat: guitar voicing templates
Gabriel Kaszewski
2026-04-09 00:31:25 +02:00
aeb9dfff67
chore: add tonal + vitest
Gabriel Kaszewski
2026-04-09 00:28:19 +02:00
bb99f5964a
docs: chord diagram implementation plan
Gabriel Kaszewski
2026-04-09 00:26:16 +02:00
df90e610ef
docs: chord diagram feature spec
Gabriel Kaszewski
2026-04-09 00:14:04 +02:00
f80ed4e88a
feat(app): PWA manifest, persistent transpose, font size, capo toggle, library sort
Gabriel Kaszewski
2026-04-08 04:09:25 +02:00
2558f19960
feat: add sort params to list/search, capo-aware GET /songs/{id}?apply_capo=true
Gabriel Kaszewski
2026-04-08 04:05:57 +02:00
41b9cb3d4c
feat: initialize project with .gitignore, LICENSE, README, and update dependencies
Gabriel Kaszewski
2026-04-08 03:56:28 +02:00
bef3bb8fed
feat(app): add dark/light theme switcher via next-themes
Gabriel Kaszewski
2026-04-08 03:56:05 +02:00
582bdbd901
refactor(app): extract previewChords to song-utils, simplify API_BASE, fix useEffect deps and cleanup
Gabriel Kaszewski
2026-04-08 03:53:44 +02:00
19829a0589
fix(app): reset edit sheet state on open, check deleteSong response status
Gabriel Kaszewski
2026-04-08 03:48:46 +02:00
8fc6e48aac
feat(app): add song edit and delete with dropdown menu
Gabriel Kaszewski
2026-04-08 03:46:56 +02:00
3a576f0018
feat(app): live server-side search with 300ms debounce and error state
Gabriel Kaszewski
2026-04-08 03:44:10 +02:00
65dd30df46
feat(app): add layout shell with bottom nav and Toaster
Gabriel Kaszewski
2026-04-08 03:42:13 +02:00
1936ced395
feat: add update_meta to SongRepositoryPort and PATCH /songs/{id}
Gabriel Kaszewski
2026-04-08 03:39:29 +02:00
6a3cdbe4c3
fix(persistence): extract row_to_summary helper, escape LIKE wildcards
Gabriel Kaszewski
2026-04-08 03:38:12 +02:00
377fe957bc
feat: add SongSearchService and GET /songs?q= search endpoint
Gabriel Kaszewski
2026-04-08 03:35:33 +02:00
c3b7cb78ab
docs: add search/nav/management implementation plan
Gabriel Kaszewski
2026-04-08 03:32:56 +02:00
7cd0c4aae1
docs: add search/nav/management/errors design spec
Gabriel Kaszewski
2026-04-08 03:28:36 +02:00
5390fe39e6
feat(app): wire frontend to real API, remove mock data and sessionStorage
Gabriel Kaszewski
2026-04-08 03:09:12 +02:00
8c0824c67c
feat(api): add song CRUD routes, wire SongService into AppState
Gabriel Kaszewski
2026-04-08 03:07:28 +02:00
0b47282547
feat(common): add SongService application layer
Gabriel Kaszewski
2026-04-08 03:05:50 +02:00
37a1e386e4
feat(persistence): add SqliteSongRepository and SqliteRepositoryFactory
Gabriel Kaszewski
2026-04-08 03:05:16 +02:00
8f9886c9a9
feat(domain): add StoredSong, SongSummary, SongRepositoryPort
Gabriel Kaszewski
2026-04-08 03:03:58 +02:00
852b1a8d0e
fix(app): wrap long chord/lyric lines at word boundaries for mobile
Gabriel Kaszewski
2026-04-08 02:47:17 +02:00
3bc7ad4c7c
fix: support raw HTML upload via FileReader, fix file import flow
Gabriel Kaszewski
2026-04-08 02:43:27 +02:00
90833c5b93
fix(app): meta null guard, deduplicate previewChords, env API URL, always show add card
Gabriel Kaszewski
2026-04-08 02:36:09 +02:00
9b68069151
feat(app): add song detail page with chord chart and transposition
Gabriel Kaszewski
2026-04-08 02:32:50 +02:00
3d18bb9e77
feat(app): add library page with song grid and search
Gabriel Kaszewski
2026-04-08 02:31:44 +02:00
cdb9c59d37
feat(app): add AddSongSheet component
Gabriel Kaszewski
2026-04-08 02:30:57 +02:00
8ca80c38f1
feat(app): add TransposeBar collapsible header
Gabriel Kaszewski
2026-04-08 02:29:48 +02:00
3844cc2296
feat(app): add ChordChart component with monospaced rendering
Gabriel Kaszewski
2026-04-08 02:29:10 +02:00
a6bec147d6
feat(app): add SongCard component
Gabriel Kaszewski
2026-04-08 02:28:39 +02:00
16fd6ba9ad
feat(app): add types, mock data, and transpose utility
Gabriel Kaszewski
2026-04-08 02:27:13 +02:00
eeb1ea9615
feat(app): install shadcn button, input, card, badge, sheet, tooltip
Gabriel Kaszewski
2026-04-08 02:25:13 +02:00
2483ed5a08
feat(api): add CORS middleware for browser fetch
Gabriel Kaszewski
2026-04-08 02:23:37 +02:00
0444d11fb4
feat(api): wire POST /tabs/parse endpoint with fetcher and parser
Gabriel Kaszewski
2026-04-08 01:56:06 +02:00
fe7d2dbceb
fix(ug-parser): address clippy warnings in parser
Gabriel Kaszewski
2026-04-08 01:54:43 +02:00
776389af49
feat(ug-parser): parse sections, lyrics, and chord positions from UG HTML
Gabriel Kaszewski
2026-04-08 01:47:17 +02:00
1a0458653a
feat(ug-parser): implement UgHtmlParser metadata extraction
Gabriel Kaszewski
2026-04-08 01:44:06 +02:00
36d38b9a78
fix(ug-parser): impl Default for UgTabFetcher
Gabriel Kaszewski
2026-04-08 01:42:35 +02:00
6416f5e9ab
feat(ug-parser): implement UgTabFetcher for file and URL sources
Gabriel Kaszewski
2026-04-08 01:41:29 +02:00
6435d92f8c
feat: scaffold ug-parser infrastructure crate
Gabriel Kaszewski
2026-04-08 01:40:26 +02:00
a5897a29d8
feat(domain): add ChordTransposer with semitone and key transposition
Gabriel Kaszewski
2026-04-08 01:37:41 +02:00
2f703fbb2a
feat(domain): add TabFetcherPort and TabParserPort traits
Gabriel Kaszewski
2026-04-08 01:35:55 +02:00
d004698923
feat(domain): add Song, Section, LyricLine, ChordPosition types
Gabriel Kaszewski
2026-04-08 01:34:26 +02:00
98370df27a
fix(domain): rename from_str to parse on Note and Chord
Gabriel Kaszewski
2026-04-08 01:33:19 +02:00
422afbb3f2
feat(domain): add Chord struct with parsing and display
Gabriel Kaszewski
2026-04-08 01:31:17 +02:00
ac1f1bd3da
fix(domain): remove dead use_sharps param, handle Cb enharmonic
Gabriel Kaszewski
2026-04-08 01:29:20 +02:00
a3ae4429f5
feat(domain): add Note enum with semitone math and display
Gabriel Kaszewski
2026-04-08 01:26:17 +02:00