diff --git a/README.md b/README.md index 3e11dc3..c866479 100644 --- a/README.md +++ b/README.md @@ -1,20 +1,35 @@ # Getting started -Before starting, make sure you have a working python and nodejs setup with pyenv and nvm. +Before starting, make sure you have Python 3.9 and Node.js 20 available. ```bash -apt-get install libmysqlclient-dev -pre-commit install uv run manage.py migrate -uv run bin/run cp .env-default .env +uv run manage.py seed_demo_data -# in another terminal -cd frontend -npm install -npm start +# Optional: create an admin login +uv run manage.py createsuperuser + +# Install frontend packages once +cd frontend && npm install ``` +Start the backend and frontend in separate terminals from the project root: + +```bash +uv run bin/run +``` + +```bash +uv run bin/run-frontend +``` + +Vite prints the frontend URL when it starts (normally ; if that port is busy, it selects another). Django runs at ; open the admin directly at or through the frontend dev proxy at the printed Vite URL followed by `/admin/`. The GraphQL API is at ; the frontend uses Vite's proxy for development API requests. + +To test the frontend against a different backend, set `VITE_DEV_API_PROXY` when starting Vite, for example `VITE_DEV_API_PROXY=https://bbs.neuf.no uv run bin/run-frontend`. This affects the development proxy only; use caution with a live backend, since app changes and submissions may modify production data. + +To create the admin during data seeding instead, set `BBS_SEED_ADMIN_PASSWORD` for that command; the command only creates a local `admin` superuser if one does not already exist. + ## References - We use JS code generation to work with queries/mutations in our graphql API: diff --git a/bin/run b/bin/run index 4a65373..a7b6db9 100755 --- a/bin/run +++ b/bin/run @@ -1,3 +1,3 @@ #!/bin/bash -python manage.py runserver \ No newline at end of file +exec python manage.py runserver 127.0.0.1:3000 \ No newline at end of file diff --git a/bin/run-frontend b/bin/run-frontend index 959292f..098589a 100755 --- a/bin/run-frontend +++ b/bin/run-frontend @@ -1,4 +1,3 @@ #!/bin/bash -cd frontend && npm run start - +cd frontend && npm run start -- --host 127.0.0.1 diff --git a/frontend/src/client.ts b/frontend/src/client.ts index 51ff67e..947a838 100644 --- a/frontend/src/client.ts +++ b/frontend/src/client.ts @@ -1,7 +1,7 @@ import { ApolloClient, InMemoryCache } from "@apollo/client"; const client = new ApolloClient({ - uri: `${import.meta.env.VITE_API_URL}/graphql/`, + uri: import.meta.env.DEV ? "/graphql/" : `${import.meta.env.VITE_API_URL}/graphql/`, cache: new InMemoryCache(), }); diff --git a/frontend/vite.config.js b/frontend/vite.config.js index c1147a7..72c0650 100644 --- a/frontend/vite.config.js +++ b/frontend/vite.config.js @@ -9,5 +9,13 @@ export default defineConfig({ __DEV__: process.env.NODE_ENV !== "production", }, envDir: "..", + server: { + host: "127.0.0.1", + proxy: Object.fromEntries( + ["/admin", "/accounts", "/inventory", "/report", "/static", "/media", "/graphql"].map( + (path) => [path, process.env.VITE_DEV_API_PROXY || "http://127.0.0.1:3000"], + ), + ), + }, build: { outDir: "../static", emptyOutDir: false }, });