From 3aa4af93ff7b0f9af57832ace7727db3ad45b19f Mon Sep 17 00:00:00 2001 From: uroma Date: Mon, 19 Jan 2026 17:15:00 +0000 Subject: [PATCH] feat: add projects page route and navigation link - Add GET /projects route in server.js with authentication check - Serve projects.html when authenticated, redirect to login otherwise - Add navigation header to both landing page and projects page - Include Sessions, Projects navigation links with active state styling - Add logout button to navigation header - Style navigation with dark theme matching existing design - Make navigation responsive for mobile devices Co-Authored-By: Claude Sonnet 4.5 --- public/claude-landing.html | 115 ++++++++++++++++++++++++++++++++++++ public/projects.html | 117 ++++++++++++++++++++++++++++++++++++- server.js | 11 ++++ 3 files changed, 242 insertions(+), 1 deletion(-) diff --git a/public/claude-landing.html b/public/claude-landing.html index 39a9862b..78094852 100644 --- a/public/claude-landing.html +++ b/public/claude-landing.html @@ -6,8 +6,113 @@ Claude Code + + + +

Claude Code

@@ -57,5 +162,15 @@ + diff --git a/public/projects.html b/public/projects.html index 2f8bdbb1..57e905cf 100644 --- a/public/projects.html +++ b/public/projects.html @@ -6,14 +6,119 @@ Projects - Claude Code Web Interface + + + +
@@ -96,5 +201,15 @@
+ diff --git a/server.js b/server.js index cea96f17..7ee363f1 100644 --- a/server.js +++ b/server.js @@ -89,6 +89,17 @@ app.get('/claude/ide/*', requireAuth, (req, res) => { res.sendFile(path.join(__dirname, 'public', 'claude-ide', 'index.html')); }); +// Projects page route +app.get('/projects', (req, res) => { + if (req.session.userId) { + // Authenticated - serve projects page + res.sendFile(path.join(__dirname, 'public', 'projects.html')); + } else { + // Not authenticated - redirect to login + res.redirect('/claude/'); + } +}); + // Serve static files (must come after specific routes) app.use('/claude', express.static(path.join(__dirname, 'public')));