mirror of
https://github.com/VibedByKaKi/t3-code-android-nightly.git
synced 2026-10-10 12:21:16 +02:00
95 lines
3.3 KiB
HTML
95 lines
3.3 KiB
HTML
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
<title>Upload journal · Neon + Alchemy</title>
|
|
</head>
|
|
<body>
|
|
<main>
|
|
<header>
|
|
<span class="eyebrow">NEON + ALCHEMY</span>
|
|
<h1>Upload journal</h1>
|
|
<p>Private files. A real upload event. A durable processing record.</p>
|
|
</header>
|
|
<p id="message" role="status" aria-live="polite">
|
|
Connecting to managed authentication…
|
|
</p>
|
|
<section aria-labelledby="account-heading">
|
|
<h2 id="account-heading">Your account</h2>
|
|
<p id="identity">Signed out</p>
|
|
<form id="account">
|
|
<label
|
|
>Name<input
|
|
name="name"
|
|
autocomplete="name"
|
|
value="Neon explorer"
|
|
maxlength="100"
|
|
/></label>
|
|
<label
|
|
>Email<input
|
|
name="email"
|
|
type="email"
|
|
autocomplete="username"
|
|
required
|
|
/></label>
|
|
<label
|
|
>Password<input
|
|
name="password"
|
|
type="password"
|
|
autocomplete="current-password"
|
|
minlength="8"
|
|
required
|
|
/></label>
|
|
<div class="actions">
|
|
<button name="mode" value="signup">Create account</button
|
|
><button name="mode" value="signin" class="secondary">
|
|
Sign in
|
|
</button>
|
|
</div>
|
|
</form>
|
|
<button id="signout" class="secondary" hidden>Sign out</button>
|
|
</section>
|
|
<section aria-labelledby="upload-heading">
|
|
<h2 id="upload-heading">Add a file</h2>
|
|
<p>
|
|
Choose a file up to 10 MiB. Your browser uploads directly to a private
|
|
bucket using a short-lived signed URL.
|
|
</p>
|
|
<form id="upload">
|
|
<label>File<input name="file" type="file" required /></label
|
|
><button id="upload-button" disabled>Upload file</button>
|
|
</form>
|
|
</section>
|
|
<section aria-labelledby="files-heading">
|
|
<div class="section-title">
|
|
<h2 id="files-heading">Your uploads</h2>
|
|
<button id="refresh" class="secondary">Refresh status</button>
|
|
</div>
|
|
<p id="empty">Sign in to see your files.</p>
|
|
<ul id="files"></ul>
|
|
</section>
|
|
<details>
|
|
<summary>Security and processing</summary>
|
|
<p>
|
|
Only the signed-in owner can request upload or download URLs. The
|
|
Function verifies JWT signatures and expiry. A bucket event verifies
|
|
file metadata and updates Postgres; the browser never marks a file
|
|
ready.
|
|
</p>
|
|
<p>
|
|
Signout ends your session. Previously issued JWTs can remain valid
|
|
until their short expiry. This tutorial disables email verification
|
|
and allows localhost; enable verification and restrict origins before
|
|
production.
|
|
</p>
|
|
<p>
|
|
Size is checked before signing and again after delivery, not enforced
|
|
as a storage quota by the signed PUT. This is metadata processing, not
|
|
malware scanning. No AI calls or credits are required.
|
|
</p>
|
|
</details>
|
|
</main>
|
|
<script type="module" src="/src/main.ts"></script>
|
|
</body>
|
|
</html>
|