Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
a822ba6
feat: update dev tooling (ESLint 9, Jest 29, Stylelint 16, TypeScript)
dpuscher Feb 19, 2026
d12bccb
feat: remove abandonware and update safe packages
dpuscher Feb 19, 2026
7d01985
feat: update Redis v2→v5 and connect-redis v4→v9
dpuscher Feb 19, 2026
1eb1c35
feat: update Mongoose v5→v8
dpuscher Feb 19, 2026
283e983
feat: update Express v4→v5, remove body-parser, update Helmet v3→v8
dpuscher Feb 19, 2026
4ba82ad
feat: update React ecosystem 16→18
dpuscher Feb 19, 2026
60ff13a
feat: update Next.js 9→14
dpuscher Feb 19, 2026
8e11de3
feat: migrate codebase to TypeScript
dpuscher Feb 19, 2026
4537bb4
feat: migrate Express routes to Next.js API routes
dpuscher Feb 19, 2026
bb213f2
feat: remove Express server, use Next.js exclusively
dpuscher Feb 19, 2026
5b6bcb4
fix: resolve React 18 warnings from docker logs
dpuscher Feb 19, 2026
fe93b52
fix: prevent OverwriteModelError in Next.js dev mode
dpuscher Feb 19, 2026
dc5f2c2
fix: handle unauthenticated session state correctly
dpuscher Feb 19, 2026
bbd65f9
fix: convert detected/scrobbled to dynamic routes
dpuscher Feb 19, 2026
fc02621
fix: pass full app props to useWrappedStore in _app.tsx
dpuscher Feb 19, 2026
5cf480d
refactor: replace propTypes/defaultProps with TypeScript interfaces
dpuscher Feb 19, 2026
2514503
refactor: migrate profile page from getInitialProps to getServerSideP…
dpuscher Feb 19, 2026
2dbee93
fix: update ProfileHistoryItem link href to use dynamic route path
dpuscher Feb 19, 2026
de51d92
fix: guard against null state.data in autoScrobbleReducer
dpuscher Feb 19, 2026
b4b3ddf
fix: check response.ok before parsing json in history and autoscrobbl…
dpuscher Feb 19, 2026
3a93a0f
fix: serialize error message correctly in history api error response
dpuscher Feb 19, 2026
47129d2
fix: rename ProfileHistorys class to ProfileHistory
dpuscher Feb 19, 2026
ad3244f
fix: update QueryRelease link href to use dynamic route path
dpuscher Feb 19, 2026
e2564bb
fix: surface Discogs errors and guard release fetch response
dpuscher Feb 19, 2026
6db9410
fix: handle duplicate key race condition in Release.firstOrCreate
dpuscher Feb 19, 2026
d77b593
fix: guard against undefined release.data in shouldFetchRelease
dpuscher Feb 19, 2026
8ea0c64
refactor: convert app/modules to TypeScript
dpuscher Feb 23, 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
3 changes: 1 addition & 2 deletions .babelrc
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
["styled-components", {
"displayName": false,
"ssr": true
}],
"transform-class-properties"
}]
]
}
27 changes: 0 additions & 27 deletions .eslintrc.js

This file was deleted.

10 changes: 0 additions & 10 deletions .stylelintrc

This file was deleted.

5 changes: 1 addition & 4 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
ENV NEXT_TELEMETRY_DISABLED=1
ENV NODE_OPTIONS=--openssl-legacy-provider
RUN yarn build

FROM base AS runner
Expand All @@ -28,8 +27,6 @@ RUN addgroup --system --gid 1001 nodejs && \
COPY --from=deps /app/node_modules ./node_modules
COPY --from=builder /app/.next ./.next
COPY --from=builder /app/public ./public
COPY --from=builder /app/server.js ./server.js
COPY --from=builder /app/config ./config
COPY --from=builder /app/app ./app
COPY --from=builder /app/lib ./lib
COPY package.json ./
Expand All @@ -38,4 +35,4 @@ USER nextjs

EXPOSE 3000

CMD ["node", "server.js"]
CMD ["node_modules/.bin/next", "start"]
15 changes: 0 additions & 15 deletions app/__mocks__/redis.js

This file was deleted.

25 changes: 25 additions & 0 deletions app/__mocks__/redis.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
/* eslint-disable no-underscore-dangle */

const store = new Map();

const mockGet = jest.fn(async (key) => store.get(key) || null);
const mockSet = jest.fn(async (key, value) => {
store.set(key, value);
return 'OK';
});
const mockConnect = jest.fn(async () => {});
const mockOn = jest.fn();

const createClient = jest.fn(() => ({
get: mockGet,
set: mockSet,
connect: mockConnect,
on: mockOn,
}));

module.exports = {
createClient,
_get: mockGet,
_set: mockSet,
_reset: () => store.clear(),
};
24 changes: 0 additions & 24 deletions app/cache.js

This file was deleted.

17 changes: 17 additions & 0 deletions app/cache.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import { createClient } from 'redis';

const client = createClient({ url: process.env.REDISCLOUD_URL });
client.connect().catch(console.error);
client.on('error', console.error);

export const set = (key: string, value: unknown, ttl = 86400) =>
client.set(key, JSON.stringify(value), { EX: ttl });

export const get = async <T = unknown>(key: string): Promise<T> => {
const value = await client.get(key);
if (value) {
return JSON.parse(value as string) as T;
}
// eslint-disable-next-line prefer-promise-reject-errors
return Promise.reject();
};
125 changes: 0 additions & 125 deletions app/discogs.js

This file was deleted.

Loading