Compare commits

..
43 Commits
Author SHA1 Message Date
theis.gaedigk 5759666ef7 Merge branch 'dev' into host 2026-07-15 15:41:10 +02:00
theis.gaedigk 3ff31ecbf6 Merge branch 'dev' into host 2026-05-09 11:39:26 +02:00
theis.gaedigk 3f910f937b edited port on nginx config 2026-05-01 12:55:29 +02:00
theis.gaedigk 3ed6121a0b fixed version infos 2026-05-01 12:47:21 +02:00
theis.gaedigk 5d9e965597 fixed docker compose 2026-05-01 12:39:32 +02:00
theis.gaedigk e296de27ef Merge branch 'dev' into host 2026-05-01 12:35:45 +02:00
theis.gaedigk 5c7a96912b Merge branch 'dev' into debian12 2026-04-18 15:00:51 +02:00
theis.gaedigk 195f270064 Merge branch 'dev' into debian12 2026-02-22 23:46:35 +01:00
theis.gaedigk 3d592c5c76 Merge branch 'dev' into debian12 2026-02-22 23:44:46 +01:00
theis.gaedigk 08104d32db Merge branch 'dev' into debian12 2026-02-20 16:30:34 +01:00
theis.gaedigk cc7c024892 Merge branch 'dev' into debian12 2026-02-07 17:48:44 +01:00
theis.gaedigk 3eb452aeab fixed version 2026-02-07 17:41:09 +01:00
theis.gaedigk f46a654184 Merge branch 'dev' into debian12 2026-02-07 17:40:47 +01:00
theis.gaedigk 863409aed9 Merge branch 'dev' into debian12 2026-02-04 13:47:04 +01:00
theis.gaedigk 052137a697 removed ports 2026-02-01 15:50:52 +01:00
theis.gaedigk 2f3583ccd0 Merge branch 'dev' into debian12 2026-01-28 18:26:08 +01:00
theis.gaedigk 9da72cc5bf Merge branch 'dev' into debian12 2026-01-28 13:06:19 +01:00
theis.gaedigk c633627b7c Merge branch 'dev' into debian12 2026-01-28 12:44:25 +01:00
theis.gaedigk 5259c41b13 Merge branch 'dev' into debian12 2026-01-27 21:29:08 +01:00
theis.gaedigk 3d9e3814fe edited docker 2026-01-27 10:33:32 +01:00
theis.gaedigk b44edb2b1d chnaged config 2026-01-16 17:17:15 +01:00
theis.gaedigk a72fabc0a0 Merge branch 'dev' into debian12 2026-01-16 17:11:30 +01:00
theis.gaedigk 1406f28f86 Merge branch 'dev' into debian12 2026-01-07 15:06:51 +01:00
theis.gaedigk 38d1091e9b Merge branch 'dev' into debian12 2025-11-30 21:23:22 +01:00
theis.gaedigk f82efecb8c edited docker config 2025-11-30 21:21:21 +01:00
theis.gaedigk 1f12bc8839 t 2025-11-30 21:17:36 +01:00
theis.gaedigk f19750f6f3 edited port config 2025-11-30 21:12:14 +01:00
theis.gaedigk 808b3fd5c4 Merge branch 'dev' into debian12 2025-11-30 21:07:32 +01:00
theis.gaedigk 0891598eb9 changed version info 2025-11-25 17:30:56 +01:00
theis.gaedigk 39ff02f2e7 Merge branch 'dev' into debian12 2025-11-25 17:11:27 +01:00
theis.gaedigk cc67fb4f85 changed version info 2025-11-24 15:35:03 +01:00
theis.gaedigk 75ff4aadc1 fixed color bug 2025-11-24 14:16:55 +01:00
theis.gaedigk 6f998d07c1 Merge branch 'dev' into debian12 2025-11-23 21:52:34 +01:00
theis.gaedigk f2bb326040 Merge branch 'dev' into debian12 2025-11-23 21:40:11 +01:00
theis.gaedigk 8c701db900 changed ports 2025-11-23 21:11:23 +01:00
theis.gaedigk d1664338a6 add networks configuration for frontend and backend services in docker-compose 2025-11-23 21:06:12 +01:00
theis.gaedigk 1a2624cd9e again 2025-11-23 20:34:19 +01:00
theis.gaedigk a138190cc6 fixed bugs 2025-11-23 20:32:14 +01:00
theis.gaedigk 993e0cd74b fixed bugs 2025-11-23 20:29:31 +01:00
theis.gaedigk dab004a7b6 changed docker config 2025-11-23 20:26:27 +01:00
theis.gaedigk d039336f39 Merge branch 'dev' into debian12 2025-11-23 20:20:41 +01:00
theis.gaedigk 4c781e9325 changed ports 2025-11-23 20:12:41 +01:00
theis.gaedigk 451e6b3646 published v2 2025-11-23 20:11:36 +01:00
103 changed files with 9106 additions and 3380 deletions
-14
View File
@@ -1,14 +0,0 @@
**/node_modules
**/dist
**/dist-ssr
.git
.idea
.vscode
**/.env
**/.env.*
**/.DS_Store
**/*.log
docs
pics
icon
no-as-a-service
-10
View File
@@ -1,10 +0,0 @@
DB_PASSWORD=
BACKEND_URL=
MAIL_HOST=
MAIL_PORT=
MAIL_USER=
MAIL_PASSWORD=
MAIL_SENDEES_CONTACT=
MAIL_SENDEES=
NAAS_URL=
SECRET_KEY=
+1 -3
View File
@@ -11,8 +11,6 @@ dist/
build/
out/
docker-compose.override.yml
# Environment variables
.env
.env.local
@@ -121,6 +119,6 @@ ToDo.txt
next-env.d.ts
# psd files from footage
pics/*.psd
footage/*.psd
icon/
-7
View File
@@ -1,7 +0,0 @@
{
"semi": true,
"singleQuote": false,
"trailingComma": "all",
"printWidth": 80,
"tabWidth": 2
}
-78
View File
@@ -1,78 +0,0 @@
# Docker
## Prerequisites
You have created an empty `docker-compose.override.yml` file in the root directory of this repository.
## Docker Network
If you want to run the stack in a docker network, you need to change the `BACKEND_HOST` variable in the root `.env` file
to `stockhome-backend`. To add a docker network, create a `docker-compose.override.yml` file in the root directory of
this repository with the following content:
```yaml
services:
admin-frontend:
networks:
- proxynet
backend:
networks:
- proxynet
usr-frontend:
networks:
- proxynet
no-as-a-service:
networks:
- proxynet
mysql:
networks:
- proxynet
networks:
proxynet:
external: true
```
To start off I recommend to set the `BACKEND_HOST` variable to `localhost` and start the stack without a docker network.
After you have started the stack and everything is working, you can add a docker network.
## Ports
### Change Exposed Ports
If you want to change the exposed ports, you can do this in the `docker-compose.yml` file like so:
```yaml
services:
mysql:
ports:
- "3306:3306"
backend:
ports:
- "8004:8004"
usr-frontend:
ports:
- "80:80"
```
### Remove Exposed Ports
If you want to remove the exposed ports, you can do this in the `docker-compose.override.yml` file like so:
```yaml
services:
mysql:
ports: !override [ ]
backend:
ports: !override [ ]
usr-frontend:
ports: !override [ ]
```

Before

Width:  |  Height:  |  Size: 1.2 MiB

After

Width:  |  Height:  |  Size: 1.2 MiB

Before

Width:  |  Height:  |  Size: 1.8 MiB

After

Width:  |  Height:  |  Size: 1.8 MiB

Before

Width:  |  Height:  |  Size: 428 KiB

After

Width:  |  Height:  |  Size: 428 KiB

Before

Width:  |  Height:  |  Size: 416 KiB

After

Width:  |  Height:  |  Size: 416 KiB

+19
View File
@@ -0,0 +1,19 @@
FROM node:22-alpine AS builder
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM nginx:alpine AS runner
WORKDIR /usr/share/nginx/html
COPY --from=builder /app/dist .
COPY nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
@@ -14,7 +14,7 @@ server {
}
location /backend/ {
proxy_pass http://borrow-system_backend:8004/;
proxy_pass http://borrow_system-backend_v2:8004/;
}
location ~* \.(?:js|mjs|css|png|jpg|jpeg|gif|ico|svg|woff2?)$ {
File diff suppressed because it is too large Load Diff
@@ -1,7 +1,7 @@
{
"name": "frontend",
"name": "admin",
"private": true,
"version": "2.1.2-dev",
"version": "v2.1.2 (dev)",
"type": "module",
"scripts": {
"dev": "vite",
@@ -45,7 +45,6 @@
"eslint-plugin-react-hooks": "^5.2.0",
"eslint-plugin-react-refresh": "^0.4.20",
"globals": "^16.3.0",
"prettier": "^3.9.10",
"typescript": "~5.8.3",
"typescript-eslint": "^8.39.0",
"vite": "^7.1.0",

Before

Width:  |  Height:  |  Size: 1.9 MiB

After

Width:  |  Height:  |  Size: 1.9 MiB

Before

Width:  |  Height:  |  Size: 1.7 MiB

After

Width:  |  Height:  |  Size: 1.7 MiB

Before

Width:  |  Height:  |  Size: 4.0 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

+23
View File
@@ -0,0 +1,23 @@
"use client";
import { ChakraProvider, defaultSystem } from "@chakra-ui/react";
import * as React from "react";
import type { ReactNode } from "react";
import { ColorModeProvider as ThemeColorModeProvider } from "./color-mode";
export interface ColorModeProviderProps {
children: React.ReactNode;
}
export function ColorModeProvider({ children }: ColorModeProviderProps) {
// Wrap children with the real color-mode provider
return <ThemeColorModeProvider>{children}</ThemeColorModeProvider>;
}
export function Provider({ children }: { children: ReactNode }) {
return (
<ChakraProvider value={defaultSystem}>
<ColorModeProvider>{children}</ColorModeProvider>
</ChakraProvider>
);
}
@@ -14,5 +14,5 @@ createRoot(document.getElementById("root")!).render(
<Provider>
<App />
</Provider>
</StrictMode>,
</StrictMode>
);
+23
View File
@@ -0,0 +1,23 @@
import { defineConfig } from "vite";
import tailwindcss from "@tailwindcss/vite";
import path from "node:path";
export default defineConfig({
plugins: [tailwindcss()],
resolve: {
alias: {
"@": path.resolve(__dirname, "src"),
},
},
server: {
host: "0.0.0.0",
allowedHosts: ["insta.the1s.de"],
port: 8101,
watch: { usePolling: true },
hmr: {
host: "insta.the1s.de",
port: 8101,
protocol: "wss",
},
},
});
+15 -18
View File
@@ -19,18 +19,14 @@ A small full‑stack system to log in, view available items, reserve them for a
## Contents
- Frontend: [frontend/](frontend)
- Vite/Tailwind
config: [frontend/vite.config.ts](frontend/vite.config.ts), [frontend/tailwind.config.js](frontend/tailwind.config.js)
- Vite/Tailwind config: [frontend/vite.config.ts](frontend/vite.config.ts), [frontend/tailwind.config.js](frontend/tailwind.config.js)
- App entry: [frontend/src/main.tsx](frontend/src/main.tsx), [frontend/src/App.tsx](frontend/src/App.tsx)
-
UI: [frontend/src/layout/Layout.tsx](frontend/src/layout/Layout.tsx), [frontend/src/components](frontend/src/components)
-
Data/utilities: [frontend/src/utils/fetchData.ts](frontend/src/utils/fetchData.ts), [frontend/src/utils/userHandler.ts](frontend/src/utils/userHandler.ts), [frontend/src/utils/toastify.ts](frontend/src/utils/toastify.ts)
- UI: [frontend/src/layout/Layout.tsx](frontend/src/layout/Layout.tsx), [frontend/src/components](frontend/src/components)
- Data/utilities: [frontend/src/utils/fetchData.ts](frontend/src/utils/fetchData.ts), [frontend/src/utils/userHandler.ts](frontend/src/utils/userHandler.ts), [frontend/src/utils/toastify.ts](frontend/src/utils/toastify.ts)
- Backend: [backend/](backend)
- Server: [backend/server.js](backend/server.js)
- Routes: [backend/routes/api.js](backend/routes/api.js), [backend/routes/apiV2.js](backend/routes/apiV2.js)
- DB +
services: [backend/services/database.js](backend/services/database.js), [backend/services/tokenService.js](backend/services/tokenService.js)
- DB + services: [backend/services/database.js](backend/services/database.js), [backend/services/tokenService.js](backend/services/tokenService.js)
- Schema/seed: [backend/scheme.sql](backend/scheme.sql)
- Docs: [docs/](docs)
- API docs (see below): [docs/backend_API_docs/README.md](docs/backend_API_docs/README.md)
@@ -45,8 +41,7 @@ A small full‑stack system to log in, view available items, reserve them for a
Key frontend utilities:
- [`utils.fetchData.fetchAllData`](frontend/src/utils/fetchData.ts): loads items, loans, and user loans after login.
- [`utils.fetchData.getBorrowableItems`](frontend/src/utils/fetchData.ts): fetches borrowable items for the selected
time range.
- [`utils.fetchData.getBorrowableItems`](frontend/src/utils/fetchData.ts): fetches borrowable items for the selected time range.
- [`utils.userHandler.createLoan`](frontend/src/utils/userHandler.ts): creates a new loan for selected items.
- [`utils.userHandler.handleDeleteLoan`](frontend/src/utils/userHandler.ts): deletes a loan and syncs local state.
- [`utils.toastify.myToast`](frontend/src/utils/toastify.ts): toast notifications.
@@ -59,18 +54,20 @@ UI flow (main screens):
## Development
- The NAAS (no-as-a-service) and the mysql database are running in a docker container
- `frontend`, `backend` and `admin` are both in a vite dev server and can be started by `npm run dev` in the root
directory.
- Scripts: see [frontend/package.json](frontend/package.json) and [backend/package.json](backend/package.json)
- Frontend: `npm run dev`, `npm run build`, `npm run preview`, `npm run lint`
- Backend: `npm start`
- Linting: ESLint configured via [frontend/eslint.config.js](frontend/eslint.config.js)
- TypeScript configs: [frontend/tsconfig.app.json](frontend/tsconfig.app.json), [frontend/tsconfig.node.json](frontend/tsconfig.node.json)
## Configuration notes
- Vite/Tailwind integration via [frontend/vite.config.ts](frontend/vite.config.ts) and `@tailwindcss/vite`; CSS entry
uses `@import "tailwindcss"` in [frontend/src/index.css](frontend/src/index.css).
- Vite/Tailwind integration via [frontend/vite.config.ts](frontend/vite.config.ts) and `@tailwindcss/vite`; CSS entry uses `@import "tailwindcss"` in [frontend/src/index.css](frontend/src/index.css).
- Toasts wired in [frontend/src/main.tsx](frontend/src/main.tsx) with `react-toastify`.
- Local state is stored in `localStorage` keys: `allItems`, `allLoans`, `userLoans`, `borrowableItems`. Cross‑component
updates are signaled via window events from [`utils.fetchData`](frontend/src/utils/fetchData.ts).
- Local state is stored in `localStorage` keys: `allItems`, `allLoans`, `userLoans`, `borrowableItems`. Cross‑component updates are signaled via window events from [`utils.fetchData`](frontend/src/utils/fetchData.ts).
## API documentation
Refer to the dedicated [API-Docs](docs/backend_API_docs/README.md)
Refer to the dedicated API docs:
`docs/backend_API_docs/README.md`
+6 -13
View File
@@ -1,26 +1,19 @@
# Build context is the repo root (npm workspaces share one root package-lock.json)
FROM node:22-alpine AS builder
FROM node:18 as builder
WORKDIR /app
COPY package.json package-lock.json ./
COPY frontend/package.json frontend/
COPY admin/package.json admin/
COPY backend/package.json backend/
RUN npm ci -w admin
RUN npm ci
ARG VITE_BACKEND_URL
ENV VITE_BACKEND_URL=$VITE_BACKEND_URL
COPY admin/ admin/
RUN npm run build -w admin
COPY . .
RUN npm run build
FROM nginx:alpine AS runner
WORKDIR /usr/share/nginx/html
COPY --from=builder /app/admin/dist .
COPY --from=builder /app/dist .
COPY admin/nginx.conf /etc/nginx/conf.d/default.conf
COPY nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
+1 -1
View File
@@ -14,7 +14,7 @@ server {
}
location /backend/ {
proxy_pass http://borrow-system_backend:8004/;
proxy_pass http://borrow_system-backend_v2:8102/;
}
location ~* \.(?:js|mjs|css|png|jpg|jpeg|gif|ico|svg|woff2?)$ {
+6066
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "admin",
"private": true,
"version": "1.3.2-dev",
"version": "v1.3.2 (dev)",
"type": "module",
"scripts": {
"dev": "vite",
+7 -3
View File
@@ -8,9 +8,13 @@ export default defineConfig({
plugins: [react(), svgr(), tailwindcss(), tsconfigPaths()],
server: {
host: "0.0.0.0",
port: 8003,
watch: {
usePolling: true,
allowedHosts: ["admin.insta.the1s.de"],
port: 8103,
watch: { usePolling: true },
hmr: {
host: "admin.insta.the1s.de",
port: 8103,
protocol: "wss",
},
},
});
-28
View File
@@ -1,28 +0,0 @@
# Build context is the repo root (npm workspaces share one root package-lock.json)
FROM node:20-alpine
ENV NODE_ENV=production
WORKDIR /app
COPY package.json package-lock.json ./
COPY frontend/package.json frontend/
COPY admin/package.json admin/
COPY backend/package.json backend/
RUN npm ci -w backend --omit=dev
COPY backend/ backend/
# Generate info.json from the workspace package.json versions, without the "-dev" suffix
RUN node -e ' \
const fs = require("fs"); \
const v = (p) => "v" + JSON.parse(fs.readFileSync(p + "/package.json")).version.replace(/-dev$/, ""); \
fs.writeFileSync("backend/info.json", JSON.stringify({ \
"backend-info": { version: v("backend") }, \
"frontend-info": { version: v("frontend") }, \
"admin-panel-info": { version: v("admin") } \
}, null, 4)); \
'
WORKDIR /app/backend
EXPOSE 8004
CMD ["npm", "start"]
-11
View File
@@ -1,11 +0,0 @@
{
"backend-info": {
"version": "v2.2 (dev)"
},
"frontend-info": {
"version": "v2.2 (dev)"
},
"admin-panel-info": {
"version": "v1.4 (dev)"
}
}
+12
View File
@@ -0,0 +1,12 @@
FROM node:20-alpine
ENV NODE_ENV=production
WORKDIR /backend
COPY package*.json ./
RUN npm ci --omit=dev
COPY . .
EXPOSE 8004
CMD ["npm", "start"]
+11
View File
@@ -0,0 +1,11 @@
{
"backend-info": {
"version": "v2.2"
},
"frontend-info": {
"version": "v2.2"
},
"admin-panel-info": {
"version": "v1.4"
}
}
+1141
View File
File diff suppressed because it is too large Load Diff
@@ -1,11 +1,10 @@
{
"name": "backend",
"version": "2.1.1-dev",
"private": true,
"name": "backendv2",
"version": "v2.1.1 (dev)",
"main": "server.js",
"scripts": {
"dev": "node --watch server.js",
"start": "NODE_ENV=production node server.js"
"test": "echo \"Error: no test specified\" && exit 1",
"start": "node server.js"
},
"keywords": [],
"author": "",
@@ -19,6 +18,6 @@
"express-rate-limit": "^8.4.1",
"jose": "^6.0.12",
"mysql2": "^3.14.3",
"nodemailer": "^10.2.1"
"nodemailer": "^8.0.6"
}
}
+1 -1
View File
@@ -1,7 +1,7 @@
import express from "express";
import cors from "cors";
import dotenv from "dotenv";
import info from "./info.json" with { type: "json" };
import info from "./info.json" assert { type: "json" };
import { authenticate } from "./services/authentication.js";
import { rateLimit } from "express-rate-limit";
+29
View File
@@ -0,0 +1,29 @@
# Changelog for upcoming version: vX.X
Introduction
## New features
-
## Improvements
-
## Fixed bugs
-
---
## New version numbers
**Backend:** vX.X
**Frontend:** vX.X
**Admin panel:** vX.X
---
-[Theis](https://portfolio-theis.de)
-56
View File
@@ -1,56 +0,0 @@
services:
# usr-frontend_v2:
# container_name: borrow_system-usr-frontend
# build: ./FrontendV2
# ports:
# - "8001:80"
# restart: always
# admin-frontend:
# container_name: borrow_system-admin-frontend
# build: ./admin
# ports:
# - "8003:80"
# restart: always
# backend_v2:
# container_name: borrow_system-backend_v2
# build: ./backend
# ports:
# - "8004:8004"
# environment:
# NODE_ENV: production
# DB_HOST: mysql_v2
# DB_USER: root
# DB_PASSWORD: ${DB_PASSWORD_V2}
# DB_NAME: borrow_system_new
# depends_on:
# - mysql_v2
# restart: always
mysql:
container_name: borrow-system_mysql
image: mysql:8.0
restart: always
environment:
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD_V2}
MYSQL_DATABASE: borrow_system_new
TZ: Europe/Berlin
volumes:
- mysql-v2-data:/var/lib/mysql
- ./mysql-timezone.cnf:/etc/mysql/conf.d/timezone.cnf:ro
ports:
- "3310:3306"
no-as-a-service:
container_name: borrow-system_naas
ports:
- "3000:3000"
build:
context: ./no-as-a-service
dockerfile: Dockerfile
restart: always
volumes:
mysql-data:
mysql-v2-data:
+33 -37
View File
@@ -1,51 +1,41 @@
services:
usr-frontend:
container_name: borrow-system_usr-frontend
build:
context: .
dockerfile: frontend/Dockerfile
args:
VITE_BACKEND_URL: ${BACKEND_URL}
restart: always
usr-frontend_v2:
container_name: borrow_system-usr-frontend
networks:
- proxynet
build: ./FrontendV2
restart: unless-stopped
admin-frontend:
container_name: borrow-system_admin-frontend
build:
context: .
dockerfile: admin/Dockerfile
args:
VITE_BACKEND_URL: ${BACKEND_URL}
restart: always
container_name: borrow_system-admin-frontend
networks:
- proxynet
build: ./admin
restart: unless-stopped
backend:
container_name: borrow-system_backend
build:
context: .
dockerfile: backend/Dockerfile
backend_v2:
container_name: borrow_system-backend_v2
networks:
- proxynet
build: ./backendV2
environment:
NODE_ENV: production
DB_HOST: borrow-system_mysql
DB_HOST: mysql_v2
DB_USER: root
DB_PASSWORD: ${DB_PASSWORD}
DB_PASSWORD: ${DB_PASSWORD_V2}
DB_NAME: borrow_system_new
MAIL_HOST: ${MAIL_HOST}
MAIL_PORT: ${MAIL_PORT}
MAIL_USER: ${MAIL_USER}
MAIL_PASSWORD: ${MAIL_PASSWORD}
MAIL_SENDEES_CONTACT: ${MAIL_SENDEES_CONTACT}
MAIL_SENDEES: ${MAIL_SENDEES}
NAAS_URL: ${NAAS_URL}
SECRET_KEY: ${SECRET_KEY}
depends_on:
- mysql
restart: always
- mysql_v2
restart: unless-stopped
mysql:
container_name: borrow-system_mysql
mysql_v2:
container_name: borrow_system-mysql-v2
networks:
- proxynet
image: mysql:8.0
restart: always
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD_V2}
MYSQL_DATABASE: borrow_system_new
TZ: Europe/Berlin
volumes:
@@ -53,7 +43,9 @@ services:
- ./mysql-timezone.cnf:/etc/mysql/conf.d/timezone.cnf:ro
no-as-a-service:
container_name: borrow-system_naas
container_name: borrow_system-naas
networks:
- proxynet
build:
context: ./no-as-a-service
dockerfile: Dockerfile
@@ -62,3 +54,7 @@ services:
volumes:
mysql-data:
mysql-v2-data:
networks:
proxynet:
external: true
-26
View File
@@ -1,26 +0,0 @@
# Build context is the repo root (npm workspaces share one root package-lock.json)
FROM node:22-alpine AS builder
WORKDIR /app
COPY package.json package-lock.json ./
COPY frontend/package.json frontend/
COPY admin/package.json admin/
COPY backend/package.json backend/
RUN npm ci -w frontend
ARG VITE_BACKEND_URL
ENV VITE_BACKEND_URL=$VITE_BACKEND_URL
COPY frontend/ frontend/
RUN npm run build -w frontend
FROM nginx:alpine AS runner
WORKDIR /usr/share/nginx/html
COPY --from=builder /app/frontend/dist .
COPY frontend/nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
-15
View File
@@ -1,15 +0,0 @@
"use client"
import { ChakraProvider, defaultSystem } from "@chakra-ui/react"
import {
ColorModeProvider,
type ColorModeProviderProps,
} from "./color-mode"
export function Provider(props: ColorModeProviderProps) {
return (
<ChakraProvider value={defaultSystem}>
<ColorModeProvider {...props} />
</ChakraProvider>
)
}

Some files were not shown because too many files have changed in this diff Show More