From 71f61b7bd2d96b6cfeee86a689805c004c8c1acb Mon Sep 17 00:00:00 2001 From: mboehmlaender Date: Sat, 16 Aug 2025 19:47:27 +0000 Subject: [PATCH] Initial commit: Projektstruktur mit Backend & Frontend --- .gitignore | 3 +++ README.md | 3 +++ backend/index.js | 16 ++++++++++++++++ backend/package.json | 12 ++++++++++++ frontend/index.html | 12 ++++++++++++ frontend/package.json | 21 +++++++++++++++++++++ frontend/src/App.jsx | 23 +++++++++++++++++++++++ frontend/src/main.jsx | 9 +++++++++ frontend/vite.config.js | 12 ++++++++++++ scripts/start-dev.sh | 24 ++++++++++++++++++++++++ 10 files changed, 135 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 backend/index.js create mode 100644 backend/package.json create mode 100644 frontend/index.html create mode 100644 frontend/package.json create mode 100644 frontend/src/App.jsx create mode 100644 frontend/src/main.jsx create mode 100644 frontend/vite.config.js create mode 100755 scripts/start-dev.sh diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..deed335 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +node_modules/ +dist/ +.env diff --git a/README.md b/README.md new file mode 100644 index 0000000..863f023 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# StackPulse + +StackPulse ist eine Fullstack-App zur Verwaltung und Aktualisierung von Portainer Stacks. diff --git a/backend/index.js b/backend/index.js new file mode 100644 index 0000000..e4acdee --- /dev/null +++ b/backend/index.js @@ -0,0 +1,16 @@ +const express = require("express"); +const axios = require("axios"); +const app = express(); +const PORT = 3000; + +app.get("/api/stacks", async (req, res) => { + try { + res.json([{ name: "stack1" }, { name: "stack2" }]); + } catch (err) { + res.status(500).json({ error: err.message }); + } +}); + +app.listen(PORT, () => { + console.log(\`Backend läuft auf http://localhost:\${PORT}\`); +}); diff --git a/backend/package.json b/backend/package.json new file mode 100644 index 0000000..23f0280 --- /dev/null +++ b/backend/package.json @@ -0,0 +1,12 @@ +{ + "name": "stackpulse-backend", + "version": "0.1.0", + "main": "index.js", + "scripts": { + "start": "node index.js" + }, + "dependencies": { + "express": "^4.18.2", + "axios": "^1.7.5" + } +} diff --git a/frontend/index.html b/frontend/index.html new file mode 100644 index 0000000..6591fa7 --- /dev/null +++ b/frontend/index.html @@ -0,0 +1,12 @@ + + + + + + StackPulse + + +
+ + + diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 0000000..28825b8 --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,21 @@ +{ + "name": "stackpulse-frontend", + "version": "0.1.0", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "dependencies": { + "react": "^18.2.0", + "react-dom": "^18.2.0", + "axios": "^1.7.5" + }, + "devDependencies": { + "vite": "^4.4.9", + "@vitejs/plugin-react": "^4.0.0", + "tailwindcss": "^3.3.3", + "postcss": "^8.4.26", + "autoprefixer": "^10.4.14" + } +} diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx new file mode 100644 index 0000000..354335a --- /dev/null +++ b/frontend/src/App.jsx @@ -0,0 +1,23 @@ +import React, { useEffect, useState } from "react"; +import axios from "axios"; + +function App() { + const [stacks, setStacks] = useState([]); + + useEffect(() => { + axios.get("/api/stacks").then(res => setStacks(res.data)); + }, []); + + return ( +
+

StackPulse

+ +
+ ); +} + +export default App; diff --git a/frontend/src/main.jsx b/frontend/src/main.jsx new file mode 100644 index 0000000..569fdf2 --- /dev/null +++ b/frontend/src/main.jsx @@ -0,0 +1,9 @@ +import React from "react"; +import ReactDOM from "react-dom/client"; +import App from "./App.jsx"; + +ReactDOM.createRoot(document.getElementById("root")).render( + + + +); diff --git a/frontend/vite.config.js b/frontend/vite.config.js new file mode 100644 index 0000000..b1a12f4 --- /dev/null +++ b/frontend/vite.config.js @@ -0,0 +1,12 @@ +import { defineConfig } from "vite"; +import react from "@vitejs/plugin-react"; + +export default defineConfig({ + plugins: [react()], + server: { + port: 5173, + proxy: { + "/api": "http://localhost:3000" + } + } +}); diff --git a/scripts/start-dev.sh b/scripts/start-dev.sh new file mode 100755 index 0000000..528e387 --- /dev/null +++ b/scripts/start-dev.sh @@ -0,0 +1,24 @@ +#!/bin/bash +set -e + +echo "🚀 Starte StackPulse Dev-Umgebung..." + +cd backend +npm install +npm start & +BACK_PID=$! +cd .. + +cd frontend +npm install +npm run dev & +FRONT_PID=$! +cd .. + +echo "" +echo "✅ StackPulse läuft lokal:" +echo "Frontend: http://localhost:5173" +echo "Backend: http://localhost:3000" +echo "Beenden mit STRG+C" + +wait $BACK_PID $FRONT_PID