From ea8fed58e9eaef920d9c0c7529532113c0563fb3 Mon Sep 17 00:00:00 2001 From: BusyBee3333 Date: Mon, 10 Nov 2025 16:16:08 -0500 Subject: [PATCH] Add minimal frontend dev server --- frontend/package-lock.json | 12 +++++++++++ frontend/package.json | 9 +++++++++ frontend/public/index.html | 16 +++++++++++++++ frontend/public/styles.css | 41 ++++++++++++++++++++++++++++++++++++++ frontend/server.js | 34 +++++++++++++++++++++++++++++++ 5 files changed, 112 insertions(+) create mode 100644 frontend/package-lock.json create mode 100644 frontend/package.json create mode 100644 frontend/public/index.html create mode 100644 frontend/public/styles.css create mode 100644 frontend/server.js diff --git a/frontend/package-lock.json b/frontend/package-lock.json new file mode 100644 index 0000000..dc8b759 --- /dev/null +++ b/frontend/package-lock.json @@ -0,0 +1,12 @@ +{ + "name": "beatmatchr-frontend", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "beatmatchr-frontend", + "version": "0.1.0" + } + } +} diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 0000000..87096ac --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,9 @@ +{ + "name": "beatmatchr-frontend", + "version": "0.1.0", + "private": true, + "description": "Simple development server for the beatmatchr frontend.", + "scripts": { + "dev": "node server.js" + } +} diff --git a/frontend/public/index.html b/frontend/public/index.html new file mode 100644 index 0000000..96541f9 --- /dev/null +++ b/frontend/public/index.html @@ -0,0 +1,16 @@ + + + + + + Beatmatchr + + + +
+

Beatmatchr

+

Welcome to the Beatmatchr prototype frontend.

+

This lightweight development server ensures npm run dev works.

+
+ + diff --git a/frontend/public/styles.css b/frontend/public/styles.css new file mode 100644 index 0000000..8b20224 --- /dev/null +++ b/frontend/public/styles.css @@ -0,0 +1,41 @@ +* { + box-sizing: border-box; +} + +body { + margin: 0; + min-height: 100vh; + font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; + background: radial-gradient(circle at top, #1f2937, #111827 60%); + color: #f3f4f6; + display: flex; + align-items: center; + justify-content: center; +} + +.container { + text-align: center; + background: rgba(17, 24, 39, 0.7); + border: 1px solid rgba(147, 197, 253, 0.2); + border-radius: 16px; + padding: 48px; + box-shadow: 0 20px 40px rgba(15, 23, 42, 0.6); +} + +h1 { + font-size: 3rem; + margin-bottom: 1rem; + letter-spacing: 0.08em; +} + +p { + margin: 0.5rem 0; + line-height: 1.6; +} + +code { + background: rgba(37, 99, 235, 0.2); + padding: 0.1rem 0.35rem; + border-radius: 6px; + font-family: 'Fira Code', 'Source Code Pro', monospace; +} diff --git a/frontend/server.js b/frontend/server.js new file mode 100644 index 0000000..1591da4 --- /dev/null +++ b/frontend/server.js @@ -0,0 +1,34 @@ +const http = require('http'); +const path = require('path'); +const fs = require('fs'); + +const PORT = process.env.PORT || 5173; +const PUBLIC_DIR = path.join(__dirname, 'public'); + +function serveFile(res, filePath, contentType = 'text/html') { + fs.readFile(filePath, (err, data) => { + if (err) { + res.writeHead(500, { 'Content-Type': 'text/plain' }); + res.end('Internal Server Error'); + return; + } + + res.writeHead(200, { 'Content-Type': contentType }); + res.end(data); + }); +} + +const server = http.createServer((req, res) => { + if (req.url === '/' || req.url === '/index.html') { + serveFile(res, path.join(PUBLIC_DIR, 'index.html')); + } else if (req.url === '/styles.css') { + serveFile(res, path.join(PUBLIC_DIR, 'styles.css'), 'text/css'); + } else { + res.writeHead(404, { 'Content-Type': 'text/plain' }); + res.end('Not Found'); + } +}); + +server.listen(PORT, () => { + console.log(`Beatmatchr frontend available at http://localhost:${PORT}`); +});