diff --git a/package-lock.json b/package-lock.json
index f8da860..f477f0f 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -45,8 +45,29 @@
},
"engines": {
"node": "22.x"
+ },
+ "workspaces": [
+ "server"
+ ]
+ },
+ "server": {
+ "name": "helphone-prover",
+ "version": "1.0.0",
+ "dependencies": {
+ "@aztec/bb.js": "^0.87.9",
+ "@noir-lang/noir_js": "^1.0.0-beta.9",
+ "@stellar/stellar-sdk": "^16.0.0",
+ "cors": "^2.8.5",
+ "express": "^4.21.0"
+ },
+ "devDependencies": {
+ "supertest": "^7.0.0"
}
},
+ "node_modules/helphone-prover": {
+ "resolved": "server",
+ "link": true
+ },
"node_modules/@adobe/css-tools": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.5.0.tgz",
diff --git a/package.json b/package.json
index 174bad2..2400049 100644
--- a/package.json
+++ b/package.json
@@ -3,13 +3,18 @@
"version": "1.0.0",
"description": "",
"main": "server/index.js",
+ "workspaces": [
+ "server"
+ ],
"scripts": {
"dev": "node scripts/dev.mjs",
"dev:vite": "vite",
+ "dev:all": "node scripts/dev.mjs",
"server": "node server/index.js",
"start": "node server/index.js",
- "dev:all": "node scripts/dev.mjs",
+ "start:all": "node scripts/dev.mjs",
"build": "vite build",
+ "build:all": "npm run build && npm run build --workspace server --if-present",
"preview": "vite preview",
"prepare": "husky",
"test": "vitest run",
diff --git a/server/package.json b/server/package.json
index 1db594f..2908046 100644
--- a/server/package.json
+++ b/server/package.json
@@ -1,9 +1,11 @@
{
"name": "helphone-prover",
+ "version": "1.0.0",
"private": true,
"type": "module",
"scripts": {
"start": "node index.js",
+ "build": "node -e \"process.exit(0)\"",
"test": "node --test *.test.js"
},
"dependencies": {
diff --git a/src/components/MapboxWrapper.jsx b/src/components/MapboxWrapper.jsx
new file mode 100644
index 0000000..9070ec2
--- /dev/null
+++ b/src/components/MapboxWrapper.jsx
@@ -0,0 +1,76 @@
+import { forwardRef } from "react";
+import Map, { NavigationControl } from "react-map-gl/mapbox";
+import "mapbox-gl/dist/mapbox-gl.css";
+
+/**
+ * MapboxWrapper (#87)
+ *
+ * Encapsulates Mapbox / react-map-gl initialisation so pages don't have to
+ * repeat the access-token wiring, the default view state and the standard
+ * on-map controls. Everything specific to a screen — markers, sources,
+ * layers, popups, controllers — is passed as `children` and rendered inside
+ * the underlying `