Skip to content

Commit 3fc653e

Browse files
authored
Chore/update deps and docs (#1)
* chore: update minor/patch dependencies and fix react-hooks lint errors Update dexie, i18next, react, vite, tailwindcss, typescript-eslint, ts-jest and other deps to latest minor/patch versions. Fix new react-hooks/set-state-in-effect and exhaustive-deps warnings: - useCollection: inline effect body to avoid calling setState via loadItems - useDiscogsAuth: memoize credentials, reset OAuth state during render * chore: update eslint to v10, typescript to v6, @types/node to v25 All major version bumps pass lint, tests, and build without issues. * docs: replace default Vite README with project documentation * docs: update AGENTS.md — ESLint 10, correct test counts
1 parent 4e0150b commit 3fc653e

6 files changed

Lines changed: 556 additions & 574 deletions

File tree

AGENTS.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,10 @@ CI pipeline runs: lint -> test -> build (Node 22).
2323

2424
## Tech Stack
2525

26-
- React 19 + TypeScript 5.9 + Vite 8 + TailwindCSS 4
26+
- React 19 + TypeScript 6 + Vite 8 + TailwindCSS 4
2727
- Dexie.js (IndexedDB), PapaParse, react-i18next
2828
- Jest 30 + ts-jest + @testing-library/react + fake-indexeddb
29-
- ESLint 9 flat config (no Prettier)
29+
- ESLint 10 flat config (no Prettier)
3030
- Package type: `"module"` (ESM)
3131
- Deployment: GitHub Pages via GitHub Actions (`.github/workflows/deploy.yml`)
3232

@@ -124,9 +124,9 @@ Persisted in localStorage via `useColumnVisibility` hook. `DEFAULT_VISIBLE_COLUM
124124
### Test files
125125
| File | Focus | Tests |
126126
|------|-------|-------|
127-
| `csvParser.test.ts` | CSV parsing, condition mapping | 13 |
128-
| `database.test.ts` | Dexie operations, dedup, merge | 14 |
129-
| `discogsApi.test.ts` | API client, rate limiting, OAuth | 25 |
127+
| `csvParser.test.ts` | CSV parsing, condition mapping | 12 |
128+
| `database.test.ts` | Dexie operations, dedup, merge | 15 |
129+
| `discogsApi.test.ts` | API client, rate limiting, OAuth | 48 |
130130
| `formatters.test.ts` | normalizeFormat (CD/DVD/BD/VINYL) | 21 |
131131
| `CollectionTable.test.tsx` | Table rendering, sorting, UI | 6 |
132132

@@ -282,7 +282,7 @@ tsconfig.json # Root config with project references
282282
tsconfig.app.json # App config (erasableSyntaxOnly, verbatimModuleSyntax)
283283
tsconfig.test.json # Test config (no verbatimModuleSyntax, esModuleInterop)
284284
vite.config.ts # Vite 8 config (base: '/', react, tailwindcss)
285-
eslint.config.js # ESLint 9 flat config (ESM)
285+
eslint.config.js # ESLint 10 flat config (ESM)
286286
package.json # type: "module", scripts, dependencies
287287
AGENTS.md # This file
288288
```

README.md

Lines changed: 50 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1,73 +1,64 @@
1-
# React + TypeScript + Vite
1+
# My Collection
22

3-
This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
3+
A client-side web app for managing your Discogs vinyl/CD/DVD/BD collection. Import your Discogs CSV export, enrich it with metadata and price suggestions via the Discogs API, search, sort, and track purchase prices — all stored locally in IndexedDB.
44

5-
Currently, two official plugins are available:
5+
**Live:** deployed to GitHub Pages via CI.
66

7-
- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Oxc](https://oxc.rs)
8-
- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/)
7+
## Features
98

10-
## React Compiler
9+
- **CSV import** — drag-and-drop or pick your Discogs collection export file
10+
- **Discogs API enrichment** — fetch cover art, genres, styles, tracklist, community stats, and price suggestions (OAuth 1.0a via Cloudflare Worker proxy)
11+
- **Search & sort** — filter by artist/title, sort by date added, price, format, folder, etc.
12+
- **Suggested price** — computed per-item from Discogs price suggestions based on media condition
13+
- **Purchase price tracking** — inline-editable field with running total
14+
- **Column customization** — show/hide any of the 25 available columns
15+
- **Internationalization** — English and Polish (auto-detected)
16+
- **Offline-first** — all data stored in the browser (IndexedDB via Dexie.js)
17+
- **Dark mode** — via Tailwind `dark:` variants
1118

12-
The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see [this documentation](https://react.dev/learn/react-compiler/installation).
19+
## Tech Stack
1320

14-
## Expanding the ESLint configuration
21+
| Layer | Technology |
22+
|-------|------------|
23+
| UI | React 19, TypeScript 6, Vite 8, TailwindCSS 4 |
24+
| Storage | Dexie.js (IndexedDB) |
25+
| I18n | react-i18next |
26+
| CSV | PapaParse |
27+
| Testing | Jest 30, Testing Library, fake-indexeddb |
28+
| Linting | ESLint 10 (flat config) |
29+
| CI/CD | GitHub Actions → GitHub Pages |
1530

16-
If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules:
31+
## Getting Started
1732

18-
```js
19-
export default defineConfig([
20-
globalIgnores(['dist']),
21-
{
22-
files: ['**/*.{ts,tsx}'],
23-
extends: [
24-
// Other configs...
33+
```bash
34+
npm install
35+
npm run dev # start dev server with HMR
36+
```
2537

26-
// Remove tseslint.configs.recommended and replace with this
27-
tseslint.configs.recommendedTypeChecked,
28-
// Alternatively, use this for stricter rules
29-
tseslint.configs.strictTypeChecked,
30-
// Optionally, add this for stylistic rules
31-
tseslint.configs.stylisticTypeChecked,
38+
Open http://localhost:5173.
3239

33-
// Other configs...
34-
],
35-
languageOptions: {
36-
parserOptions: {
37-
project: ['./tsconfig.node.json', './tsconfig.app.json'],
38-
tsconfigRootDir: import.meta.dirname,
39-
},
40-
// other options...
41-
},
42-
},
43-
])
44-
```
40+
## Scripts
4541

46-
You can also install [eslint-plugin-react-x](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-x) and [eslint-plugin-react-dom](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-dom) for React-specific lint rules:
42+
| Command | Description |
43+
|---------|-------------|
44+
| `npm run dev` | Start Vite dev server |
45+
| `npm run build` | Type-check + production build |
46+
| `npm run lint` | Run ESLint |
47+
| `npm test` | Run all tests |
48+
| `npm run test:watch` | Run tests in watch mode |
49+
| `npm run preview` | Preview production build locally |
4750

48-
```js
49-
// eslint.config.js
50-
import reactX from 'eslint-plugin-react-x'
51-
import reactDom from 'eslint-plugin-react-dom'
51+
## Project Structure
5252

53-
export default defineConfig([
54-
globalIgnores(['dist']),
55-
{
56-
files: ['**/*.{ts,tsx}'],
57-
extends: [
58-
// Other configs...
59-
// Enable lint rules for React
60-
reactX.configs['recommended-typescript'],
61-
// Enable lint rules for React DOM
62-
reactDom.configs.recommended,
63-
],
64-
languageOptions: {
65-
parserOptions: {
66-
project: ['./tsconfig.node.json', './tsconfig.app.json'],
67-
tsconfigRootDir: import.meta.dirname,
68-
},
69-
// other options...
70-
},
71-
},
72-
])
7353
```
54+
src/
55+
components/ # React UI components (CollectionTable, CSVImport, DiscogsSettings, Layout)
56+
db/ # Dexie schema, CRUD operations, types
57+
hooks/ # Custom hooks (useCollection, useCSVImport, useDiscogsFetch, useDiscogsAuth)
58+
i18n/ # i18next config + EN/PL translations
59+
services/ # Discogs API client (rate limiting, OAuth)
60+
utils/ # CSV parser, formatters
61+
__tests__/ # Jest test suites
62+
```
63+
64+
See [AGENTS.md](./AGENTS.md) for detailed architecture documentation.

0 commit comments

Comments
 (0)