From e3c379d069ffa9661561d25cdbf2f5894a2f8ee8 Mon Sep 17 00:00:00 2001
From: Adam Mathes <adam@adammathes.com>
Date: Sat, 14 Feb 2026 08:58:38 -0800
Subject: Refactor: project structure, implement dependency injection, and
 align v2 UI with v1

---
 frontend/src/components/Login.tsx | 84 +++++++++++++++++++--------------------
 1 file changed, 42 insertions(+), 42 deletions(-)

(limited to 'frontend/src/components/Login.tsx')

diff --git a/frontend/src/components/Login.tsx b/frontend/src/components/Login.tsx
index 2e8bbf7..5f63248 100644
--- a/frontend/src/components/Login.tsx
+++ b/frontend/src/components/Login.tsx
@@ -3,52 +3,52 @@ import { useNavigate } from 'react-router-dom';
 import './Login.css';
 
 export default function Login() {
-    const [password, setPassword] = useState('');
-    const [error, setError] = useState('');
-    const navigate = useNavigate();
+  const [password, setPassword] = useState('');
+  const [error, setError] = useState('');
+  const navigate = useNavigate();
 
-    const handleSubmit = async (e: FormEvent) => {
-        e.preventDefault();
-        setError('');
+  const handleSubmit = async (e: FormEvent) => {
+    e.preventDefault();
+    setError('');
 
-        try {
-            // Use URLSearchParams to send as form-urlencoded, matching backend expectation
-            const params = new URLSearchParams();
-            params.append('password', password);
+    try {
+      // Use URLSearchParams to send as form-urlencoded, matching backend expectation
+      const params = new URLSearchParams();
+      params.append('password', password);
 
-            const res = await fetch('/api/login', {
-                method: 'POST',
-                body: params,
-            });
+      const res = await fetch('/api/login', {
+        method: 'POST',
+        body: params,
+      });
 
-            if (res.ok) {
-                navigate('/');
-            } else {
-                const data = await res.json();
-                setError(data.message || 'Login failed');
-            }
-        } catch (err) {
-            setError('Network error');
-        }
-    };
+      if (res.ok) {
+        navigate('/');
+      } else {
+        const data = await res.json();
+        setError(data.message || 'Login failed');
+      }
+    } catch (err) {
+      setError('Network error');
+    }
+  };
 
-    return (
-        <div className="login-container">
-            <form onSubmit={handleSubmit} className="login-form">
-                <h1>neko rss mode</h1>
-                <div className="form-group">
-                    <label htmlFor="password">password</label>
-                    <input
-                        id="password"
-                        type="password"
-                        value={password}
-                        onChange={(e) => setPassword(e.target.value)}
-                        autoFocus
-                    />
-                </div>
-                {error && <div className="error-message">{error}</div>}
-                <button type="submit">login</button>
-            </form>
+  return (
+    <div className="login-container">
+      <form onSubmit={handleSubmit} className="login-form">
+        <h1>neko rss mode</h1>
+        <div className="form-group">
+          <label htmlFor="password">password</label>
+          <input
+            id="password"
+            type="password"
+            value={password}
+            onChange={(e) => setPassword(e.target.value)}
+            autoFocus
+          />
         </div>
-    );
+        {error && <div className="error-message">{error}</div>}
+        <button type="submit">login</button>
+      </form>
+    </div>
+  );
 }
-- 
cgit v1.2.3

