Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
10 changes: 7 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,12 @@ jobs:
test:
name: Test
runs-on: ubuntu-latest
container: node:22.19.0-bookworm
container: node:24.14.1-trixie
services:
db:
image: postgres:17.6
image: postgres:18.3
env:
POSTGRES_PASSWORD: postgres
minio:
image: minio/minio:RELEASE.2025-09-07T16-13-09Z
steps:
Expand All @@ -28,7 +30,9 @@ jobs:
- name: Install Dependencies
run: npm ci
- name: Generate Prisma client
run: cd server && npx prisma generate
run: npm run prisma:generate -w server
env:
DATABASE_URL: postgresql://postgres:postgres@db:5432/app
- name: Run ESLint
run: npm run lint
- name: Run Tests
Expand Down
6 changes: 3 additions & 3 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM node:22.19.0-bookworm
FROM node:24.14.1-trixie

# Support for multi-architecture builds
ARG TARGETARCH
Expand All @@ -11,9 +11,9 @@ RUN apt update -y && \
apt install -y curl ca-certificates && \
install -d /usr/share/postgresql-common/pgdg && \
curl -o /usr/share/postgresql-common/pgdg/apt.postgresql.org.asc --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc && \
sh -c 'echo "deb [signed-by=/usr/share/postgresql-common/pgdg/apt.postgresql.org.asc] https://apt.postgresql.org/pub/repos/apt bookworm-pgdg main" > /etc/apt/sources.list.d/pgdg.list' && \
sh -c 'echo "deb [signed-by=/usr/share/postgresql-common/pgdg/apt.postgresql.org.asc] https://apt.postgresql.org/pub/repos/apt trixie-pgdg main" > /etc/apt/sources.list.d/pgdg.list' && \
apt update -y && \
apt install -y postgresql-client-17 && \
apt install -y postgresql-client-18 && \
apt clean

# update path to include any installed node module executables
Expand Down
5 changes: 3 additions & 2 deletions Procfile.dev
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
server: npm run dev -w server -- --port 3000
client: npm run dev -w client -- --host --port 5000
prisma: npm run prisma:studio -w server
tsc: npm run tsc:watch -w server
client: npm run dev -w client -- --host --port 3333
prisma: npm run prisma:studio -w server -- --browser none --port 5555
115 changes: 19 additions & 96 deletions client/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "full-stack-starter-client",
"private": true,
"version": "6.0.0",
"version": "7.0.0",
"type": "module",
"scripts": {
"dev": "vite",
Expand All @@ -13,110 +13,33 @@
"test": ""
},
"dependencies": {
"@mantine/core": "^8.3.1",
"@mantine/form": "^8.3.1",
"@mantine/hooks": "^8.3.1",
"@mantine/modals": "^8.3.1",
"@tanstack/react-query": "^5.89.0",
"@unhead/react": "^2.0.17",
"axios": "^1.12.2",
"@mantine/core": "^8.3.18",
"@mantine/form": "^8.3.18",
"@mantine/hooks": "^8.3.18",
"@mantine/modals": "^8.3.18",
"@tanstack/react-query": "^5.95.2",
"@unhead/react": "^2.1.12",
"axios": "^1.14.0",
"classnames": "^2.5.1",
"http-status-codes": "^2.3.0",
"inflection": "^3.0.2",
"luxon": "^3.7.2",
"react": "^19.1.1",
"react-dom": "^19.1.1",
"react": "^19.2.4",
"react-dom": "^19.2.4",
"react-dropzone-esm": "^15.2.0",
"react-router": "^7.9.1",
"react-router": "^7.13.2",
"uuid": "^13.0.0"
},
"devDependencies": {
"@types/react": "^19.1.13",
"@types/react-dom": "^19.1.9",
"@vitejs/plugin-react-swc": "^4.1.0",
"eslint": "^9.36.0",
"globals": "^16.4.0",
"neostandard": "^0.12.2",
"postcss": "^8.5.6",
"@types/react": "^19.2.14",
"@types/react-dom": "^19.2.3",
"@vitejs/plugin-react": "^6.0.1",
"eslint": "^9.39.4",
"globals": "^17.4.0",
"neostandard": "^0.13.0",
"postcss": "^8.5.8",
"postcss-preset-mantine": "^1.18.0",
"postcss-simple-vars": "^7.0.1",
"vite": "^7.1.6"
},
"optionalDependencies": {
"@esbuild/aix-ppc64": "0.25.8",
"@esbuild/android-arm": "0.25.8",
"@esbuild/android-arm64": "0.25.8",
"@esbuild/android-x64": "0.25.8",
"@esbuild/darwin-arm64": "0.25.8",
"@esbuild/darwin-x64": "0.25.8",
"@esbuild/freebsd-arm64": "0.25.8",
"@esbuild/freebsd-x64": "0.25.8",
"@esbuild/linux-arm": "0.25.8",
"@esbuild/linux-arm64": "0.25.8",
"@esbuild/linux-ia32": "0.25.8",
"@esbuild/linux-loong64": "0.25.8",
"@esbuild/linux-mips64el": "0.25.8",
"@esbuild/linux-ppc64": "0.25.8",
"@esbuild/linux-riscv64": "0.25.8",
"@esbuild/linux-s390x": "0.25.8",
"@esbuild/linux-x64": "0.25.8",
"@esbuild/netbsd-arm64": "0.25.8",
"@esbuild/netbsd-x64": "0.25.8",
"@esbuild/openbsd-arm64": "0.25.8",
"@esbuild/openbsd-x64": "0.25.8",
"@esbuild/openharmony-arm64": "0.25.8",
"@esbuild/sunos-x64": "0.25.8",
"@esbuild/win32-arm64": "0.25.8",
"@esbuild/win32-ia32": "0.25.8",
"@esbuild/win32-x64": "0.25.8",
"@rollup/rollup-android-arm-eabi": "4.45.1",
"@rollup/rollup-android-arm64": "4.45.1",
"@rollup/rollup-darwin-arm64": "4.45.1",
"@rollup/rollup-darwin-x64": "4.45.1",
"@rollup/rollup-freebsd-arm64": "4.45.1",
"@rollup/rollup-freebsd-x64": "4.45.1",
"@rollup/rollup-linux-arm-gnueabihf": "4.45.1",
"@rollup/rollup-linux-arm-musleabihf": "4.45.1",
"@rollup/rollup-linux-arm64-gnu": "4.45.1",
"@rollup/rollup-linux-arm64-musl": "4.45.1",
"@rollup/rollup-linux-loongarch64-gnu": "4.45.1",
"@rollup/rollup-linux-powerpc64le-gnu": "4.45.1",
"@rollup/rollup-linux-riscv64-gnu": "4.45.1",
"@rollup/rollup-linux-riscv64-musl": "4.45.1",
"@rollup/rollup-linux-s390x-gnu": "4.45.1",
"@rollup/rollup-linux-x64-gnu": "4.45.1",
"@rollup/rollup-linux-x64-musl": "4.45.1",
"@rollup/rollup-win32-arm64-msvc": "4.45.1",
"@rollup/rollup-win32-ia32-msvc": "4.45.1",
"@rollup/rollup-win32-x64-msvc": "4.45.1",
"@swc/core-darwin-arm64": "1.13.5",
"@swc/core-darwin-x64": "1.13.5",
"@swc/core-linux-arm-gnueabihf": "1.13.5",
"@swc/core-linux-arm64-gnu": "1.13.5",
"@swc/core-linux-arm64-musl": "1.13.5",
"@swc/core-linux-x64-gnu": "1.13.5",
"@swc/core-linux-x64-musl": "1.13.5",
"@swc/core-win32-arm64-msvc": "1.13.5",
"@swc/core-win32-ia32-msvc": "1.13.5",
"@swc/core-win32-x64-msvc": "1.13.5",
"@unrs/resolver-binding-android-arm-eabi": "1.11.1",
"@unrs/resolver-binding-android-arm64": "1.11.1",
"@unrs/resolver-binding-darwin-arm64": "1.11.1",
"@unrs/resolver-binding-darwin-x64": "1.11.1",
"@unrs/resolver-binding-freebsd-x64": "1.11.1",
"@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1",
"@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1",
"@unrs/resolver-binding-linux-arm64-gnu": "1.11.1",
"@unrs/resolver-binding-linux-arm64-musl": "1.11.1",
"@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1",
"@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1",
"@unrs/resolver-binding-linux-riscv64-musl": "1.11.1",
"@unrs/resolver-binding-linux-s390x-gnu": "1.11.1",
"@unrs/resolver-binding-linux-x64-gnu": "1.11.1",
"@unrs/resolver-binding-linux-x64-musl": "1.11.1",
"@unrs/resolver-binding-wasm32-wasi": "1.11.1",
"@unrs/resolver-binding-win32-arm64-msvc": "1.11.1",
"@unrs/resolver-binding-win32-ia32-msvc": "1.11.1",
"@unrs/resolver-binding-win32-x64-msvc": "1.11.1"
"vite": "^8.0.3"
}
}
5 changes: 3 additions & 2 deletions client/src/Login.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { useEffect } from 'react';
import { useNavigate, Link, useLocation, useSearchParams } from 'react-router';
import { Alert, Box, Button, Container, Fieldset, Group, Stack, TextInput, Title } from '@mantine/core';
import { hasLength, isEmail, useForm } from '@mantine/form';
import { useMutation } from '@tanstack/react-query';
import { useMutation, useQueryClient } from '@tanstack/react-query';
import { Head } from '@unhead/react';

import Api from './Api';
Expand All @@ -15,6 +15,7 @@ function Login () {
const location = useLocation();
const [searchParams] = useSearchParams();
const navigate = useNavigate();
const queryClient = useQueryClient();

const from = location.state?.from || searchParams.get('from') || '/';

Expand All @@ -38,7 +39,7 @@ function Login () {

const onSubmitMutation = useMutation({
mutationFn: ({ email, password }) => Api.auth.login(email, password),
onSuccess: () => navigate(from, { replace: true }),
onSuccess: (response) => queryClient.setQueryData(['users', 'me'], response.data),
onError: (errors) => form.setErrors(errors),
onSettled: () => window.scrollTo({ top: 0, behavior: 'smooth' }),
});
Expand Down
2 changes: 1 addition & 1 deletion client/vite.config.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react-swc';
import react from '@vitejs/plugin-react';

// https://vite.dev/config/
export default defineConfig({
Expand Down
2 changes: 1 addition & 1 deletion compose.override.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ services:
- full-stack-starter
ports:
- 3000:3000 # fastify
- 5000:5000 # vite
- 3333:3333 # vite
- 5555:5555 # prisma studio
depends_on:
- db
Expand Down
2 changes: 1 addition & 1 deletion compose.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
services:
db:
image: postgres:17.6
image: postgres:18.3
environment:
- POSTGRES_HOST_AUTH_METHOD=trust
- PGDATA=/var/lib/postgresql/data/pgdata
Expand Down
Loading
Loading