Add Rails backend: accounts via magic link, server documents, sharing
The app becomes a Rails 8 application; the Vue frontend moves to app/frontend and is served through vite_rails. - Without an account documents stay in the browser (IndexedDB). Sign-in is by magic link or the 6-digit code from the same mail; afterwards local documents can be uploaded into the account. - Server documents (/d/<id>) with versioned saves and a single-editor lock per browser tab; others see them read-only and follow by polling. - Sharing via link (works without an account) and via e-mail invitation, roles viewer/editor; the owner manages links and people. - Store gains a read-only mode that blocks all content changes. - Solid Queue, Cache and Cable share the one PostgreSQL database. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,30 @@
|
||||
<!doctype html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="color-scheme" content="light dark">
|
||||
<meta name="robots" content="noindex">
|
||||
<title>Anmelden – numolus</title>
|
||||
<%= csrf_meta_tags %>
|
||||
<style>
|
||||
:root { --bg: #f5f5f7; --surface: #fff; --text: #1d1d1f; --dim: #6e6e73; --accent: #0a84ff; --border: #d2d2d7; }
|
||||
@media (prefers-color-scheme: dark) { :root { --bg: #1c1c1e; --surface: #2c2c2e; --text: #f5f5f7; --dim: #a1a1a6; --border: #3a3a3c; } }
|
||||
body { margin: 0; min-height: 100vh; display: grid; place-items: center; background: var(--bg); color: var(--text);
|
||||
font: 15px/1.5 -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; padding: 16px; box-sizing: border-box; }
|
||||
.card { width: min(400px, 100%); background: var(--surface); border: 1px solid var(--border); border-radius: 14px; padding: 28px; box-sizing: border-box; }
|
||||
h1 { font-size: 20px; margin: 0 0 8px; }
|
||||
p { margin: 0 0 18px; color: var(--dim); }
|
||||
button, .btn { display: inline-block; border: 0; border-radius: 9px; background: var(--accent); color: #fff; font: inherit; font-weight: 600;
|
||||
padding: 10px 18px; cursor: pointer; text-decoration: none; }
|
||||
.brand { display: flex; align-items: center; gap: 8px; font-weight: 600; margin-bottom: 20px; }
|
||||
.brand i { display: inline-block; width: 14px; height: 14px; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main class="card">
|
||||
<div class="brand"><i style="background:#FFD400"></i><i style="background:#0057FF"></i><i style="background:#E8384F"></i> numolus</div>
|
||||
<%= yield %>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,13 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<style>
|
||||
/* Email styles need to be inline */
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<%= yield %>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1 @@
|
||||
<%= yield %>
|
||||
Reference in New Issue
Block a user