- Wallabag v2 API compatible (OAuth2, entries CRUD, tags) - Express + SQLite (better-sqlite3), zero extra deps - Gated web UI with session auth - PWA: service worker, manifest, offline support - Mobile-first design, dark mode, FAB + modal
62 lines
1.6 KiB
HTML
62 lines
1.6 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>Sign in — bagg</title>
|
|
<link rel="stylesheet" href="/style.css">
|
|
<link rel="manifest" href="/manifest.json">
|
|
<meta name="theme-color" content="#2563eb">
|
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
|
<meta name="apple-mobile-web-app-status-bar-style" content="default">
|
|
<meta name="apple-mobile-web-app-title" content="bagg">
|
|
</head>
|
|
<body>
|
|
<div class="login-page">
|
|
<div class="login-card">
|
|
<h1>bagg</h1>
|
|
<p class="tagline">Read later, actually.</p>
|
|
|
|
<div id="error-msg" class="login-error" style="display:none">
|
|
Wrong username or password.
|
|
</div>
|
|
|
|
<form method="post" action="/web/login">
|
|
<label for="username">Username</label>
|
|
<input
|
|
type="text"
|
|
id="username"
|
|
name="username"
|
|
autocomplete="username"
|
|
autocapitalize="none"
|
|
autocorrect="off"
|
|
spellcheck="false"
|
|
required
|
|
autofocus
|
|
>
|
|
|
|
<label for="password">Password</label>
|
|
<input
|
|
type="password"
|
|
id="password"
|
|
name="password"
|
|
autocomplete="current-password"
|
|
required
|
|
>
|
|
|
|
<button type="submit" class="btn-primary">Sign in</button>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
|
|
<script>
|
|
if (location.search.includes('error=1')) {
|
|
document.getElementById('error-msg').style.display = 'block';
|
|
}
|
|
// Detect dark mode pref stored in localStorage
|
|
const theme = localStorage.getItem('bagg_theme');
|
|
if (theme) document.documentElement.setAttribute('data-theme', theme);
|
|
</script>
|
|
</body>
|
|
</html>
|