Scaffold project structure
This commit is contained in:
74
demo/confirmed.html
Normal file
74
demo/confirmed.html
Normal file
@@ -0,0 +1,74 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Email confirmed — hamprint</title>
|
||||
<script src="https://cdn.tailwindcss.com"></script>
|
||||
<style>
|
||||
body { font-family: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif; }
|
||||
.mono { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; }
|
||||
</style>
|
||||
</head>
|
||||
<body class="min-h-screen bg-slate-50 text-slate-900">
|
||||
|
||||
<div class="bg-slate-900 text-slate-200 text-xs">
|
||||
<div class="mx-auto max-w-6xl px-4 py-2 flex flex-wrap items-center gap-x-3 gap-y-1">
|
||||
<span class="font-semibold text-amber-400">PROTOTYPE</span>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="index.html">Dashboard</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="submit.html">Submit (guest)</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="submit-signed-in.html">Submit (signed-in)</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="login.html">Sign in</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="my-prints.html">My prints</a>
|
||||
<span class="text-slate-500">|</span>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="detail-pending.html">Detail: pending</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="detail-queued.html">queued</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="detail-printing.html">printing</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="detail-completed.html">completed</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="detail-rejected.html">rejected</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline font-semibold text-amber-300" href="confirmed.html">confirmation link</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<nav class="border-b border-slate-200 bg-white">
|
||||
<div class="mx-auto max-w-6xl px-4 py-3 flex items-center justify-between">
|
||||
<a href="index.html" class="flex items-center gap-2">
|
||||
<span class="inline-grid place-items-center w-8 h-8 rounded-md bg-amber-500 text-white font-bold">h</span>
|
||||
<span class="font-bold text-lg tracking-tight">hamprint</span>
|
||||
<span class="hidden sm:inline text-xs text-slate-500 ml-1">· hamlab.lt</span>
|
||||
</a>
|
||||
<div class="flex items-center gap-1">
|
||||
<a href="index.html" class="px-3 py-1.5 text-sm rounded-md text-slate-700 hover:bg-slate-100">Dashboard</a>
|
||||
<a href="submit.html" class="px-3 py-1.5 text-sm rounded-md bg-amber-500 text-white hover:bg-amber-600 font-medium">+ Submit a print</a>
|
||||
<a href="login.html" class="px-3 py-1.5 text-sm rounded-md text-slate-700 hover:bg-slate-100">Sign in</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<main class="mx-auto max-w-xl px-4 py-16">
|
||||
<div class="bg-white border border-slate-200 rounded-lg p-8 text-center shadow-sm">
|
||||
<div class="inline-grid place-items-center w-16 h-16 rounded-full bg-emerald-100 mb-4">
|
||||
<svg class="w-9 h-9 text-emerald-600" fill="currentColor" viewBox="0 0 20 20"><path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z" clip-rule="evenodd" /></svg>
|
||||
</div>
|
||||
<h1 class="text-2xl font-bold tracking-tight">Email confirmed</h1>
|
||||
<p class="text-slate-600 mt-2">Your submission <a href="detail-queued.html" class="mono text-amber-700 font-medium hover:underline">cheerful_curie</a> is now in the print queue.</p>
|
||||
|
||||
<a href="detail-queued.html" class="inline-block mt-6 px-4 py-2 rounded-md bg-amber-500 text-white hover:bg-amber-600 font-medium">View your submission →</a>
|
||||
|
||||
<p class="text-xs text-slate-500 mt-4">Redirecting in a few seconds…</p>
|
||||
</div>
|
||||
|
||||
<div class="mt-6 rounded-lg border border-slate-200 bg-white p-4 text-sm text-slate-600">
|
||||
<p class="font-medium text-slate-800 mb-1">Tip</p>
|
||||
<p>Bookmark the submission page — it's the only way to find this print without an account. Or <a href="login.html" class="text-amber-700 hover:underline font-medium">sign in with Google</a> to see all your prints in one place.</p>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<footer class="mt-12 border-t border-slate-200 bg-white">
|
||||
<div class="mx-auto max-w-6xl px-4 py-6 text-sm text-slate-500 text-center">
|
||||
A community service of <a href="https://hamlab.lt" class="font-medium text-slate-700 hover:underline">hamlab.lt</a>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
134
demo/detail-completed.html
Normal file
134
demo/detail-completed.html
Normal file
@@ -0,0 +1,134 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>jolly_bardeen · completed — hamprint</title>
|
||||
<script src="https://cdn.tailwindcss.com"></script>
|
||||
<style>
|
||||
body { font-family: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif; }
|
||||
.mono { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; }
|
||||
</style>
|
||||
</head>
|
||||
<body class="min-h-screen bg-slate-50 text-slate-900">
|
||||
|
||||
<div class="bg-slate-900 text-slate-200 text-xs">
|
||||
<div class="mx-auto max-w-6xl px-4 py-2 flex flex-wrap items-center gap-x-3 gap-y-1">
|
||||
<span class="font-semibold text-amber-400">PROTOTYPE</span>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="index.html">Dashboard</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="submit.html">Submit (guest)</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="submit-signed-in.html">Submit (signed-in)</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="login.html">Sign in</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="my-prints.html">My prints</a>
|
||||
<span class="text-slate-500">|</span>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="detail-pending.html">Detail: pending</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="detail-queued.html">queued</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="detail-printing.html">printing</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline font-semibold text-amber-300" href="detail-completed.html">completed</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="detail-rejected.html">rejected</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="confirmed.html">confirmation link</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<nav class="border-b border-slate-200 bg-white">
|
||||
<div class="mx-auto max-w-6xl px-4 py-3 flex items-center justify-between">
|
||||
<a href="index.html" class="flex items-center gap-2">
|
||||
<span class="inline-grid place-items-center w-8 h-8 rounded-md bg-amber-500 text-white font-bold">h</span>
|
||||
<span class="font-bold text-lg tracking-tight">hamprint</span>
|
||||
<span class="hidden sm:inline text-xs text-slate-500 ml-1">· hamlab.lt</span>
|
||||
</a>
|
||||
<div class="flex items-center gap-1">
|
||||
<a href="index.html" class="px-3 py-1.5 text-sm rounded-md text-slate-700 hover:bg-slate-100">Dashboard</a>
|
||||
<a href="submit.html" class="px-3 py-1.5 text-sm rounded-md bg-amber-500 text-white hover:bg-amber-600 font-medium">+ Submit a print</a>
|
||||
<a href="login.html" class="px-3 py-1.5 text-sm rounded-md text-slate-700 hover:bg-slate-100">Sign in</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<main class="mx-auto max-w-4xl px-4 py-8">
|
||||
<!-- Status banner -->
|
||||
<div class="rounded-lg border border-emerald-200 bg-emerald-50 p-5 mb-6 flex items-start gap-4">
|
||||
<svg class="w-8 h-8 text-emerald-600 flex-shrink-0 mt-0.5" fill="currentColor" viewBox="0 0 20 20"><path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z" clip-rule="evenodd" /></svg>
|
||||
<div class="flex-1">
|
||||
<h2 class="font-semibold text-emerald-900">Ready for pickup!</h2>
|
||||
<p class="text-sm text-emerald-900/80 mt-1">Your print is finished and waiting at the hamlab.lt space. See pickup instructions below.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<header class="mb-6">
|
||||
<div class="flex items-center gap-3 mb-2">
|
||||
<span class="inline-flex items-center gap-1.5 px-2.5 py-0.5 rounded-full bg-emerald-100 text-emerald-800 text-xs font-medium">Completed</span>
|
||||
<span class="text-xs text-slate-500">Finished 3 hours ago</span>
|
||||
</div>
|
||||
<h1 class="mono text-3xl font-bold tracking-tight text-amber-700">jolly_bardeen</h1>
|
||||
</header>
|
||||
|
||||
<div class="grid lg:grid-cols-3 gap-6">
|
||||
<section class="lg:col-span-2 space-y-4">
|
||||
<div class="bg-white border border-slate-200 rounded-lg p-5">
|
||||
<h3 class="font-semibold text-sm uppercase tracking-wide text-slate-500 mb-3">Pickup instructions</h3>
|
||||
<p class="text-slate-800 text-sm whitespace-pre-line">Shelf above the workbench in the main room, labelled with your codename on masking tape. Door code is in the Matrix channel pinned message. Please take the whole bag — brim is loose in there.</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-white border border-slate-200 rounded-lg p-5">
|
||||
<h3 class="font-semibold text-sm uppercase tracking-wide text-slate-500 mb-3">Source</h3>
|
||||
<a href="https://makerworld.com/" target="_blank" class="flex items-center gap-3 p-3 rounded-md bg-slate-50 border border-slate-200 hover:border-amber-400 hover:bg-amber-50/40">
|
||||
<span class="w-10 h-10 rounded-md bg-cyan-100 grid place-items-center text-cyan-700 font-bold text-xs">M</span>
|
||||
<div class="flex-1 min-w-0">
|
||||
<p class="font-medium text-sm truncate">makerworld.com/en/models/98765-shelf-bracket</p>
|
||||
<p class="text-xs text-slate-500">MakerWorld · external link</p>
|
||||
</div>
|
||||
<svg class="w-4 h-4 text-slate-400" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" d="M13.5 6H5.25A2.25 2.25 0 003 8.25v10.5A2.25 2.25 0 005.25 21h10.5A2.25 2.25 0 0018 18.75V10.5m-10.5 6L21 3m0 0h-5.25M21 3v5.25" /></svg>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
</section>
|
||||
|
||||
<aside class="space-y-4">
|
||||
<div class="bg-white border border-slate-200 rounded-lg p-5">
|
||||
<h3 class="font-semibold text-sm uppercase tracking-wide text-slate-500 mb-3">Timeline</h3>
|
||||
<ol class="space-y-3 text-sm">
|
||||
<li class="flex gap-3">
|
||||
<span class="w-2 h-2 rounded-full bg-emerald-500 mt-1.5 flex-shrink-0"></span>
|
||||
<div><p class="font-medium">Submitted</p><p class="text-xs text-slate-500">Yesterday</p></div>
|
||||
</li>
|
||||
<li class="flex gap-3">
|
||||
<span class="w-2 h-2 rounded-full bg-emerald-500 mt-1.5 flex-shrink-0"></span>
|
||||
<div><p class="font-medium">Confirmed</p><p class="text-xs text-slate-500">Yesterday</p></div>
|
||||
</li>
|
||||
<li class="flex gap-3">
|
||||
<span class="w-2 h-2 rounded-full bg-emerald-500 mt-1.5 flex-shrink-0"></span>
|
||||
<div><p class="font-medium">Queued</p><p class="text-xs text-slate-500">Yesterday</p></div>
|
||||
</li>
|
||||
<li class="flex gap-3">
|
||||
<span class="w-2 h-2 rounded-full bg-emerald-500 mt-1.5 flex-shrink-0"></span>
|
||||
<div><p class="font-medium">Printing</p><p class="text-xs text-slate-500">6 h ago</p></div>
|
||||
</li>
|
||||
<li class="flex gap-3">
|
||||
<span class="w-2 h-2 rounded-full bg-emerald-500 mt-1.5 flex-shrink-0 ring-4 ring-emerald-100"></span>
|
||||
<div><p class="font-medium">Completed</p><p class="text-xs text-slate-500">3 h ago, by <span class="font-medium">@aurimas</span></p></div>
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<div class="bg-white border border-slate-200 rounded-lg p-5 text-sm">
|
||||
<h3 class="font-semibold text-sm uppercase tracking-wide text-slate-500 mb-3">Details</h3>
|
||||
<dl class="space-y-2">
|
||||
<div class="flex justify-between"><dt class="text-slate-500">Source</dt><dd>makerworld.com</dd></div>
|
||||
<div class="flex justify-between"><dt class="text-slate-500">Submitter</dt><dd>Guest</dd></div>
|
||||
<div class="flex justify-between"><dt class="text-slate-500">Created</dt><dd>Yesterday</dd></div>
|
||||
<div class="flex justify-between"><dt class="text-slate-500">Completed</dt><dd>3 h ago</dd></div>
|
||||
</dl>
|
||||
</div>
|
||||
</aside>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<footer class="mt-12 border-t border-slate-200 bg-white">
|
||||
<div class="mx-auto max-w-6xl px-4 py-6 text-sm text-slate-500 text-center">
|
||||
A community service of <a href="https://hamlab.lt" class="font-medium text-slate-700 hover:underline">hamlab.lt</a>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
153
demo/detail-pending.html
Normal file
153
demo/detail-pending.html
Normal file
@@ -0,0 +1,153 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>cheerful_curie · pending confirmation — hamprint</title>
|
||||
<script src="https://cdn.tailwindcss.com"></script>
|
||||
<style>
|
||||
body { font-family: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif; }
|
||||
.mono { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; }
|
||||
</style>
|
||||
</head>
|
||||
<body class="min-h-screen bg-slate-50 text-slate-900">
|
||||
|
||||
<div class="bg-slate-900 text-slate-200 text-xs">
|
||||
<div class="mx-auto max-w-6xl px-4 py-2 flex flex-wrap items-center gap-x-3 gap-y-1">
|
||||
<span class="font-semibold text-amber-400">PROTOTYPE</span>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="index.html">Dashboard</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="submit.html">Submit (guest)</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="submit-signed-in.html">Submit (signed-in)</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="login.html">Sign in</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="my-prints.html">My prints</a>
|
||||
<span class="text-slate-500">|</span>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline font-semibold text-amber-300" href="detail-pending.html">Detail: pending</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="detail-queued.html">queued</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="detail-printing.html">printing</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="detail-completed.html">completed</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="detail-rejected.html">rejected</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="confirmed.html">confirmation link</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<nav class="border-b border-slate-200 bg-white">
|
||||
<div class="mx-auto max-w-6xl px-4 py-3 flex items-center justify-between">
|
||||
<a href="index.html" class="flex items-center gap-2">
|
||||
<span class="inline-grid place-items-center w-8 h-8 rounded-md bg-amber-500 text-white font-bold">h</span>
|
||||
<span class="font-bold text-lg tracking-tight">hamprint</span>
|
||||
<span class="hidden sm:inline text-xs text-slate-500 ml-1">· hamlab.lt</span>
|
||||
</a>
|
||||
<div class="flex items-center gap-1">
|
||||
<a href="index.html" class="px-3 py-1.5 text-sm rounded-md text-slate-700 hover:bg-slate-100">Dashboard</a>
|
||||
<a href="submit.html" class="px-3 py-1.5 text-sm rounded-md bg-amber-500 text-white hover:bg-amber-600 font-medium">+ Submit a print</a>
|
||||
<a href="login.html" class="px-3 py-1.5 text-sm rounded-md text-slate-700 hover:bg-slate-100">Sign in</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<main class="mx-auto max-w-4xl px-4 py-8">
|
||||
<!-- Pending confirmation banner -->
|
||||
<div class="rounded-lg border-2 border-yellow-300 bg-yellow-50 p-5 mb-6 flex items-start gap-4">
|
||||
<svg class="w-8 h-8 text-yellow-600 flex-shrink-0 mt-0.5" fill="none" stroke="currentColor" stroke-width="1.5" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" d="M21.75 6.75v10.5a2.25 2.25 0 01-2.25 2.25h-15a2.25 2.25 0 01-2.25-2.25V6.75m19.5 0A2.25 2.25 0 0019.5 4.5h-15a2.25 2.25 0 00-2.25 2.25m19.5 0v.243a2.25 2.25 0 01-1.07 1.916l-7.5 4.615a2.25 2.25 0 01-2.36 0L3.32 8.91a2.25 2.25 0 01-1.07-1.916V6.75" /></svg>
|
||||
<div class="flex-1">
|
||||
<h2 class="font-semibold text-yellow-900">Check your inbox to confirm this submission</h2>
|
||||
<p class="text-sm text-yellow-900/80 mt-1">We sent a confirmation link to <span class="font-mono font-medium">y••••@example.com</span>. Click it within <span class="font-medium">1 hour</span> or this submission will be permanently deleted (along with the uploaded STL).</p>
|
||||
<div class="mt-3 flex flex-wrap items-center gap-3 text-sm">
|
||||
<button class="px-3 py-1.5 rounded-md bg-yellow-600 text-white hover:bg-yellow-700 font-medium">Resend confirmation email</button>
|
||||
<span class="text-yellow-900/70">Expires in <span class="font-mono font-medium">52 min</span> · 0 / 3 resends used</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Header -->
|
||||
<header class="mb-6">
|
||||
<div class="flex items-center gap-3 mb-2">
|
||||
<span class="inline-flex items-center gap-1.5 px-2.5 py-0.5 rounded-full bg-yellow-100 text-yellow-900 text-xs font-medium border border-yellow-200">Pending confirmation</span>
|
||||
<span class="text-xs text-slate-500">Not yet visible on the dashboard</span>
|
||||
</div>
|
||||
<h1 class="mono text-3xl font-bold tracking-tight text-amber-700">cheerful_curie</h1>
|
||||
</header>
|
||||
|
||||
<div class="grid lg:grid-cols-3 gap-6">
|
||||
<!-- Main -->
|
||||
<section class="lg:col-span-2 space-y-4">
|
||||
<div class="bg-white border border-slate-200 rounded-lg p-5">
|
||||
<h3 class="font-semibold text-sm uppercase tracking-wide text-slate-500 mb-3">Source</h3>
|
||||
<div class="flex items-center gap-3 p-3 rounded-md bg-slate-50 border border-slate-200">
|
||||
<svg class="w-8 h-8 text-slate-400" fill="none" stroke="currentColor" stroke-width="1.5" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" d="M19.5 14.25v-2.625a3.375 3.375 0 00-3.375-3.375h-1.5A1.125 1.125 0 0113.5 7.125v-1.5a3.375 3.375 0 00-3.375-3.375H8.25m2.25 0H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 00-9-9z" /></svg>
|
||||
<div class="flex-1">
|
||||
<p class="font-medium text-sm">spool_holder_v3.stl</p>
|
||||
<p class="text-xs text-slate-500">2.1 MB · uploaded just now</p>
|
||||
</div>
|
||||
<span class="text-xs text-slate-400">Hidden until confirmed</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</section>
|
||||
|
||||
<!-- Sidebar -->
|
||||
<aside class="space-y-4">
|
||||
<div class="bg-white border border-slate-200 rounded-lg p-5">
|
||||
<h3 class="font-semibold text-sm uppercase tracking-wide text-slate-500 mb-3">Timeline</h3>
|
||||
<ol class="space-y-3 text-sm">
|
||||
<li class="flex gap-3">
|
||||
<span class="w-2 h-2 rounded-full bg-yellow-500 mt-1.5 flex-shrink-0 ring-4 ring-yellow-100"></span>
|
||||
<div>
|
||||
<p class="font-medium">Submitted</p>
|
||||
<p class="text-xs text-slate-500">Just now · awaiting email confirmation</p>
|
||||
</div>
|
||||
</li>
|
||||
<li class="flex gap-3 opacity-50">
|
||||
<span class="w-2 h-2 rounded-full bg-slate-300 mt-1.5 flex-shrink-0"></span>
|
||||
<div>
|
||||
<p class="font-medium">Confirmed</p>
|
||||
<p class="text-xs text-slate-500">Click the email link</p>
|
||||
</div>
|
||||
</li>
|
||||
<li class="flex gap-3 opacity-50">
|
||||
<span class="w-2 h-2 rounded-full bg-slate-300 mt-1.5 flex-shrink-0"></span>
|
||||
<div>
|
||||
<p class="font-medium">Queued</p>
|
||||
<p class="text-xs text-slate-500">Operator picks it up</p>
|
||||
</div>
|
||||
</li>
|
||||
<li class="flex gap-3 opacity-50">
|
||||
<span class="w-2 h-2 rounded-full bg-slate-300 mt-1.5 flex-shrink-0"></span>
|
||||
<div>
|
||||
<p class="font-medium">Printing</p>
|
||||
</div>
|
||||
</li>
|
||||
<li class="flex gap-3 opacity-50">
|
||||
<span class="w-2 h-2 rounded-full bg-slate-300 mt-1.5 flex-shrink-0"></span>
|
||||
<div>
|
||||
<p class="font-medium">Completed</p>
|
||||
</div>
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<div class="bg-white border border-slate-200 rounded-lg p-5 text-sm">
|
||||
<h3 class="font-semibold text-sm uppercase tracking-wide text-slate-500 mb-3">Details</h3>
|
||||
<dl class="space-y-2">
|
||||
<div class="flex justify-between"><dt class="text-slate-500">Source</dt><dd>.stl upload</dd></div>
|
||||
<div class="flex justify-between"><dt class="text-slate-500">Submitter</dt><dd>Guest</dd></div>
|
||||
<div class="flex justify-between"><dt class="text-slate-500">Created</dt><dd>Just now</dd></div>
|
||||
</dl>
|
||||
</div>
|
||||
|
||||
<div class="bg-amber-50 border border-amber-200 rounded-lg p-4 text-xs text-amber-900">
|
||||
<p class="font-medium mb-1">Bookmark this page</p>
|
||||
<p>This URL is the only way to find this submission. Save it now, or sign in with Google before submitting next time.</p>
|
||||
</div>
|
||||
</aside>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<footer class="mt-12 border-t border-slate-200 bg-white">
|
||||
<div class="mx-auto max-w-6xl px-4 py-6 text-sm text-slate-500 text-center">
|
||||
A community service of <a href="https://hamlab.lt" class="font-medium text-slate-700 hover:underline">hamlab.lt</a>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
134
demo/detail-printing.html
Normal file
134
demo/detail-printing.html
Normal file
@@ -0,0 +1,134 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>cheerful_curie · printing — hamprint</title>
|
||||
<script src="https://cdn.tailwindcss.com"></script>
|
||||
<style>
|
||||
body { font-family: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif; }
|
||||
.mono { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; }
|
||||
</style>
|
||||
</head>
|
||||
<body class="min-h-screen bg-slate-50 text-slate-900">
|
||||
|
||||
<div class="bg-slate-900 text-slate-200 text-xs">
|
||||
<div class="mx-auto max-w-6xl px-4 py-2 flex flex-wrap items-center gap-x-3 gap-y-1">
|
||||
<span class="font-semibold text-amber-400">PROTOTYPE</span>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="index.html">Dashboard</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="submit.html">Submit (guest)</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="submit-signed-in.html">Submit (signed-in)</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="login.html">Sign in</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="my-prints.html">My prints</a>
|
||||
<span class="text-slate-500">|</span>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="detail-pending.html">Detail: pending</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="detail-queued.html">queued</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline font-semibold text-amber-300" href="detail-printing.html">printing</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="detail-completed.html">completed</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="detail-rejected.html">rejected</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="confirmed.html">confirmation link</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<nav class="border-b border-slate-200 bg-white">
|
||||
<div class="mx-auto max-w-6xl px-4 py-3 flex items-center justify-between">
|
||||
<a href="index.html" class="flex items-center gap-2">
|
||||
<span class="inline-grid place-items-center w-8 h-8 rounded-md bg-amber-500 text-white font-bold">h</span>
|
||||
<span class="font-bold text-lg tracking-tight">hamprint</span>
|
||||
<span class="hidden sm:inline text-xs text-slate-500 ml-1">· hamlab.lt</span>
|
||||
</a>
|
||||
<div class="flex items-center gap-1">
|
||||
<a href="index.html" class="px-3 py-1.5 text-sm rounded-md text-slate-700 hover:bg-slate-100">Dashboard</a>
|
||||
<a href="submit.html" class="px-3 py-1.5 text-sm rounded-md bg-amber-500 text-white hover:bg-amber-600 font-medium">+ Submit a print</a>
|
||||
<a href="login.html" class="px-3 py-1.5 text-sm rounded-md text-slate-700 hover:bg-slate-100">Sign in</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<main class="mx-auto max-w-4xl px-4 py-8">
|
||||
<!-- Status banner -->
|
||||
<div class="rounded-lg border border-orange-200 bg-gradient-to-r from-orange-50 to-amber-50 p-5 mb-6 flex items-start gap-4">
|
||||
<div class="relative">
|
||||
<svg class="w-8 h-8 text-orange-600" fill="none" stroke="currentColor" stroke-width="1.5" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" d="M3.75 13.5l10.5-11.25L12 10.5h8.25L9.75 21.75 12 13.5H3.75z" /></svg>
|
||||
</div>
|
||||
<div class="flex-1">
|
||||
<h2 class="font-semibold text-orange-900 flex items-center gap-2">Printing now <span class="w-2 h-2 rounded-full bg-orange-500 animate-pulse"></span></h2>
|
||||
<p class="text-sm text-orange-900/80 mt-1">An operator is running this print at the hamlab.lt printer. Page refreshes every 30 s.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<header class="mb-6">
|
||||
<div class="flex items-center gap-3 mb-2">
|
||||
<span class="inline-flex items-center gap-1.5 px-2.5 py-0.5 rounded-full bg-orange-100 text-orange-800 text-xs font-medium"><span class="w-1.5 h-1.5 rounded-full bg-orange-500 animate-pulse"></span>Printing</span>
|
||||
<span class="text-xs text-slate-500">Started 12 minutes ago</span>
|
||||
</div>
|
||||
<h1 class="mono text-3xl font-bold tracking-tight text-amber-700">cheerful_curie</h1>
|
||||
</header>
|
||||
|
||||
<div class="grid lg:grid-cols-3 gap-6">
|
||||
<section class="lg:col-span-2 space-y-4">
|
||||
<div class="bg-white border border-slate-200 rounded-lg p-5">
|
||||
<h3 class="font-semibold text-sm uppercase tracking-wide text-slate-500 mb-3">Source</h3>
|
||||
<div class="flex items-center gap-3 p-3 rounded-md bg-slate-50 border border-slate-200">
|
||||
<svg class="w-8 h-8 text-slate-400" fill="none" stroke="currentColor" stroke-width="1.5" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" d="M19.5 14.25v-2.625a3.375 3.375 0 00-3.375-3.375h-1.5A1.125 1.125 0 0113.5 7.125v-1.5a3.375 3.375 0 00-3.375-3.375H8.25m2.25 0H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 00-9-9z" /></svg>
|
||||
<div class="flex-1">
|
||||
<p class="font-medium text-sm">spool_holder_v3.stl</p>
|
||||
<p class="text-xs text-slate-500">2.1 MB</p>
|
||||
</div>
|
||||
<a href="#" class="text-xs text-amber-700 hover:underline font-medium">Download</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="bg-white border border-slate-200 rounded-lg p-5">
|
||||
<h3 class="font-semibold text-sm uppercase tracking-wide text-slate-500 mb-2">Notes from the operator</h3>
|
||||
<p class="text-slate-700 text-sm whitespace-pre-line">Slicing took 38 min in PrusaSlicer, 0.2 mm layers, 15% infill, red PLA from the shared spool. ETA ~2 h.</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<aside class="space-y-4">
|
||||
<div class="bg-white border border-slate-200 rounded-lg p-5">
|
||||
<h3 class="font-semibold text-sm uppercase tracking-wide text-slate-500 mb-3">Timeline</h3>
|
||||
<ol class="space-y-3 text-sm">
|
||||
<li class="flex gap-3">
|
||||
<span class="w-2 h-2 rounded-full bg-emerald-500 mt-1.5 flex-shrink-0"></span>
|
||||
<div><p class="font-medium">Submitted</p><p class="text-xs text-slate-500">2 h ago</p></div>
|
||||
</li>
|
||||
<li class="flex gap-3">
|
||||
<span class="w-2 h-2 rounded-full bg-emerald-500 mt-1.5 flex-shrink-0"></span>
|
||||
<div><p class="font-medium">Confirmed</p><p class="text-xs text-slate-500">2 h ago</p></div>
|
||||
</li>
|
||||
<li class="flex gap-3">
|
||||
<span class="w-2 h-2 rounded-full bg-emerald-500 mt-1.5 flex-shrink-0"></span>
|
||||
<div><p class="font-medium">Queued</p><p class="text-xs text-slate-500">1 h ago</p></div>
|
||||
</li>
|
||||
<li class="flex gap-3">
|
||||
<span class="w-2 h-2 rounded-full bg-orange-500 mt-1.5 flex-shrink-0 ring-4 ring-orange-100"></span>
|
||||
<div><p class="font-medium">Printing</p><p class="text-xs text-slate-500">Started 12 min ago</p></div>
|
||||
</li>
|
||||
<li class="flex gap-3 opacity-50">
|
||||
<span class="w-2 h-2 rounded-full bg-slate-300 mt-1.5 flex-shrink-0"></span>
|
||||
<div><p class="font-medium">Completed</p></div>
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<div class="bg-white border border-slate-200 rounded-lg p-5 text-sm">
|
||||
<h3 class="font-semibold text-sm uppercase tracking-wide text-slate-500 mb-3">Details</h3>
|
||||
<dl class="space-y-2">
|
||||
<div class="flex justify-between"><dt class="text-slate-500">Source</dt><dd>.stl upload</dd></div>
|
||||
<div class="flex justify-between"><dt class="text-slate-500">Submitter</dt><dd>Guest</dd></div>
|
||||
<div class="flex justify-between"><dt class="text-slate-500">Created</dt><dd>2 h ago</dd></div>
|
||||
</dl>
|
||||
</div>
|
||||
</aside>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<footer class="mt-12 border-t border-slate-200 bg-white">
|
||||
<div class="mx-auto max-w-6xl px-4 py-6 text-sm text-slate-500 text-center">
|
||||
A community service of <a href="https://hamlab.lt" class="font-medium text-slate-700 hover:underline">hamlab.lt</a>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
150
demo/detail-queued.html
Normal file
150
demo/detail-queued.html
Normal file
@@ -0,0 +1,150 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>sleepy_volta · queued — hamprint</title>
|
||||
<script src="https://cdn.tailwindcss.com"></script>
|
||||
<style>
|
||||
body { font-family: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif; }
|
||||
.mono { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; }
|
||||
</style>
|
||||
</head>
|
||||
<body class="min-h-screen bg-slate-50 text-slate-900">
|
||||
|
||||
<div class="bg-slate-900 text-slate-200 text-xs">
|
||||
<div class="mx-auto max-w-6xl px-4 py-2 flex flex-wrap items-center gap-x-3 gap-y-1">
|
||||
<span class="font-semibold text-amber-400">PROTOTYPE</span>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="index.html">Dashboard</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="submit.html">Submit (guest)</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="submit-signed-in.html">Submit (signed-in)</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="login.html">Sign in</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="my-prints.html">My prints</a>
|
||||
<span class="text-slate-500">|</span>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="detail-pending.html">Detail: pending</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline font-semibold text-amber-300" href="detail-queued.html">queued</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="detail-printing.html">printing</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="detail-completed.html">completed</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="detail-rejected.html">rejected</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="confirmed.html">confirmation link</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<nav class="border-b border-slate-200 bg-white">
|
||||
<div class="mx-auto max-w-6xl px-4 py-3 flex items-center justify-between">
|
||||
<a href="index.html" class="flex items-center gap-2">
|
||||
<span class="inline-grid place-items-center w-8 h-8 rounded-md bg-amber-500 text-white font-bold">h</span>
|
||||
<span class="font-bold text-lg tracking-tight">hamprint</span>
|
||||
<span class="hidden sm:inline text-xs text-slate-500 ml-1">· hamlab.lt</span>
|
||||
</a>
|
||||
<div class="flex items-center gap-1">
|
||||
<a href="index.html" class="px-3 py-1.5 text-sm rounded-md text-slate-700 hover:bg-slate-100">Dashboard</a>
|
||||
<a href="submit.html" class="px-3 py-1.5 text-sm rounded-md bg-amber-500 text-white hover:bg-amber-600 font-medium">+ Submit a print</a>
|
||||
<a href="login.html" class="px-3 py-1.5 text-sm rounded-md text-slate-700 hover:bg-slate-100">Sign in</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<main class="mx-auto max-w-4xl px-4 py-8">
|
||||
<!-- Status banner -->
|
||||
<div class="rounded-lg border border-blue-200 bg-blue-50 p-5 mb-6 flex items-start gap-4">
|
||||
<svg class="w-8 h-8 text-blue-600 flex-shrink-0 mt-0.5" fill="none" stroke="currentColor" stroke-width="1.5" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" d="M12 6v6h4.5m4.5 0a9 9 0 11-18 0 9 9 0 0118 0z" /></svg>
|
||||
<div class="flex-1">
|
||||
<h2 class="font-semibold text-blue-900">In the queue · position #1</h2>
|
||||
<p class="text-sm text-blue-900/80 mt-1">An operator will pick this up soon. This page refreshes automatically every 30 s.</p>
|
||||
</div>
|
||||
<span class="hidden sm:inline-flex items-center gap-1.5 text-xs text-blue-700 bg-blue-100 px-2 py-1 rounded-md">
|
||||
<span class="w-1.5 h-1.5 rounded-full bg-blue-500 animate-pulse"></span>
|
||||
Live
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<!-- Header -->
|
||||
<header class="mb-6 flex flex-wrap items-start justify-between gap-4">
|
||||
<div>
|
||||
<div class="flex items-center gap-3 mb-2">
|
||||
<span class="inline-flex items-center gap-1.5 px-2.5 py-0.5 rounded-full bg-blue-100 text-blue-800 text-xs font-medium">Queued</span>
|
||||
<span class="text-xs text-slate-500">Submitted 42 minutes ago</span>
|
||||
</div>
|
||||
<h1 class="mono text-3xl font-bold tracking-tight text-amber-700">sleepy_volta</h1>
|
||||
</div>
|
||||
<button class="px-3 py-1.5 text-sm rounded-md border border-slate-300 bg-white text-slate-700 hover:bg-slate-100 flex items-center gap-1.5">
|
||||
<svg class="w-4 h-4" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" d="M13.19 8.688a4.5 4.5 0 011.242 7.244l-4.5 4.5a4.5 4.5 0 01-6.364-6.364l1.757-1.757m13.35-.622l1.757-1.757a4.5 4.5 0 00-6.364-6.364l-4.5 4.5a4.5 4.5 0 001.242 7.244" /></svg>
|
||||
Copy link
|
||||
</button>
|
||||
</header>
|
||||
|
||||
<div class="grid lg:grid-cols-3 gap-6">
|
||||
<!-- Main -->
|
||||
<section class="lg:col-span-2 space-y-4">
|
||||
<div class="bg-white border border-slate-200 rounded-lg p-5">
|
||||
<h3 class="font-semibold text-sm uppercase tracking-wide text-slate-500 mb-3">Source</h3>
|
||||
<a href="https://www.printables.com/" target="_blank" class="flex items-center gap-3 p-3 rounded-md bg-slate-50 border border-slate-200 hover:border-amber-400 hover:bg-amber-50/40">
|
||||
<span class="w-10 h-10 rounded-md bg-orange-100 grid place-items-center text-orange-700 font-bold text-xs">P</span>
|
||||
<div class="flex-1 min-w-0">
|
||||
<p class="font-medium text-sm truncate">printables.com/model/123456-detailed-dragon-mini</p>
|
||||
<p class="text-xs text-slate-500">Printables.com · external link</p>
|
||||
</div>
|
||||
<svg class="w-4 h-4 text-slate-400" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" d="M13.5 6H5.25A2.25 2.25 0 003 8.25v10.5A2.25 2.25 0 005.25 21h10.5A2.25 2.25 0 0018 18.75V10.5m-10.5 6L21 3m0 0h-5.25M21 3v5.25" /></svg>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
</section>
|
||||
|
||||
<!-- Sidebar -->
|
||||
<aside class="space-y-4">
|
||||
<div class="bg-white border border-slate-200 rounded-lg p-5">
|
||||
<h3 class="font-semibold text-sm uppercase tracking-wide text-slate-500 mb-3">Timeline</h3>
|
||||
<ol class="space-y-3 text-sm">
|
||||
<li class="flex gap-3">
|
||||
<span class="w-2 h-2 rounded-full bg-emerald-500 mt-1.5 flex-shrink-0"></span>
|
||||
<div>
|
||||
<p class="font-medium">Submitted</p>
|
||||
<p class="text-xs text-slate-500">42 min ago</p>
|
||||
</div>
|
||||
</li>
|
||||
<li class="flex gap-3">
|
||||
<span class="w-2 h-2 rounded-full bg-emerald-500 mt-1.5 flex-shrink-0"></span>
|
||||
<div>
|
||||
<p class="font-medium">Confirmed</p>
|
||||
<p class="text-xs text-slate-500">41 min ago</p>
|
||||
</div>
|
||||
</li>
|
||||
<li class="flex gap-3">
|
||||
<span class="w-2 h-2 rounded-full bg-blue-500 mt-1.5 flex-shrink-0 ring-4 ring-blue-100"></span>
|
||||
<div>
|
||||
<p class="font-medium">Queued · #1</p>
|
||||
<p class="text-xs text-slate-500">Now</p>
|
||||
</div>
|
||||
</li>
|
||||
<li class="flex gap-3 opacity-50">
|
||||
<span class="w-2 h-2 rounded-full bg-slate-300 mt-1.5 flex-shrink-0"></span>
|
||||
<div><p class="font-medium">Printing</p></div>
|
||||
</li>
|
||||
<li class="flex gap-3 opacity-50">
|
||||
<span class="w-2 h-2 rounded-full bg-slate-300 mt-1.5 flex-shrink-0"></span>
|
||||
<div><p class="font-medium">Completed</p></div>
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<div class="bg-white border border-slate-200 rounded-lg p-5 text-sm">
|
||||
<h3 class="font-semibold text-sm uppercase tracking-wide text-slate-500 mb-3">Details</h3>
|
||||
<dl class="space-y-2">
|
||||
<div class="flex justify-between"><dt class="text-slate-500">Source</dt><dd>printables.com</dd></div>
|
||||
<div class="flex justify-between"><dt class="text-slate-500">Submitter</dt><dd>Guest</dd></div>
|
||||
<div class="flex justify-between"><dt class="text-slate-500">Created</dt><dd>13:04, today</dd></div>
|
||||
</dl>
|
||||
</div>
|
||||
</aside>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<footer class="mt-12 border-t border-slate-200 bg-white">
|
||||
<div class="mx-auto max-w-6xl px-4 py-6 text-sm text-slate-500 text-center">
|
||||
A community service of <a href="https://hamlab.lt" class="font-medium text-slate-700 hover:underline">hamlab.lt</a>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
128
demo/detail-rejected.html
Normal file
128
demo/detail-rejected.html
Normal file
@@ -0,0 +1,128 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>stoic_turing · rejected — hamprint</title>
|
||||
<script src="https://cdn.tailwindcss.com"></script>
|
||||
<style>
|
||||
body { font-family: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif; }
|
||||
.mono { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; }
|
||||
</style>
|
||||
</head>
|
||||
<body class="min-h-screen bg-slate-50 text-slate-900">
|
||||
|
||||
<div class="bg-slate-900 text-slate-200 text-xs">
|
||||
<div class="mx-auto max-w-6xl px-4 py-2 flex flex-wrap items-center gap-x-3 gap-y-1">
|
||||
<span class="font-semibold text-amber-400">PROTOTYPE</span>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="index.html">Dashboard</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="submit.html">Submit (guest)</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="submit-signed-in.html">Submit (signed-in)</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="login.html">Sign in</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="my-prints.html">My prints</a>
|
||||
<span class="text-slate-500">|</span>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="detail-pending.html">Detail: pending</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="detail-queued.html">queued</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="detail-printing.html">printing</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="detail-completed.html">completed</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline font-semibold text-amber-300" href="detail-rejected.html">rejected</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="confirmed.html">confirmation link</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<nav class="border-b border-slate-200 bg-white">
|
||||
<div class="mx-auto max-w-6xl px-4 py-3 flex items-center justify-between">
|
||||
<a href="index.html" class="flex items-center gap-2">
|
||||
<span class="inline-grid place-items-center w-8 h-8 rounded-md bg-amber-500 text-white font-bold">h</span>
|
||||
<span class="font-bold text-lg tracking-tight">hamprint</span>
|
||||
<span class="hidden sm:inline text-xs text-slate-500 ml-1">· hamlab.lt</span>
|
||||
</a>
|
||||
<div class="flex items-center gap-1">
|
||||
<a href="index.html" class="px-3 py-1.5 text-sm rounded-md text-slate-700 hover:bg-slate-100">Dashboard</a>
|
||||
<a href="submit.html" class="px-3 py-1.5 text-sm rounded-md bg-amber-500 text-white hover:bg-amber-600 font-medium">+ Submit a print</a>
|
||||
<a href="login.html" class="px-3 py-1.5 text-sm rounded-md text-slate-700 hover:bg-slate-100">Sign in</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<main class="mx-auto max-w-4xl px-4 py-8">
|
||||
<!-- Status banner -->
|
||||
<div class="rounded-lg border border-red-200 bg-red-50 p-5 mb-6 flex items-start gap-4">
|
||||
<svg class="w-8 h-8 text-red-600 flex-shrink-0 mt-0.5" fill="currentColor" viewBox="0 0 20 20"><path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zM8.28 7.22a.75.75 0 00-1.06 1.06L8.94 10l-1.72 1.72a.75.75 0 101.06 1.06L10 11.06l1.72 1.72a.75.75 0 101.06-1.06L11.06 10l1.72-1.72a.75.75 0 00-1.06-1.06L10 8.94 8.28 7.22z" clip-rule="evenodd" /></svg>
|
||||
<div class="flex-1">
|
||||
<h2 class="font-semibold text-red-900">Submission rejected</h2>
|
||||
<p class="text-sm text-red-900/80 mt-1">An operator declined to print this. See the reason below.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<header class="mb-6">
|
||||
<div class="flex items-center gap-3 mb-2">
|
||||
<span class="inline-flex items-center gap-1.5 px-2.5 py-0.5 rounded-full bg-red-100 text-red-800 text-xs font-medium">Rejected</span>
|
||||
<span class="text-xs text-slate-500">3 days ago</span>
|
||||
</div>
|
||||
<h1 class="mono text-3xl font-bold tracking-tight text-amber-700">stoic_turing</h1>
|
||||
</header>
|
||||
|
||||
<div class="grid lg:grid-cols-3 gap-6">
|
||||
<section class="lg:col-span-2 space-y-4">
|
||||
<div class="bg-white border border-slate-200 rounded-lg p-5">
|
||||
<h3 class="font-semibold text-sm uppercase tracking-wide text-slate-500 mb-3">Reason from the operator</h3>
|
||||
<p class="text-slate-800 text-sm whitespace-pre-line">Model is 340 × 280 mm — doesn't fit on our build plate (235 × 235 mm max). Also the part requires PETG/ABS for structural use, which we don't stock right now. Feel free to resubmit a scaled or split version.</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-white border border-slate-200 rounded-lg p-5">
|
||||
<h3 class="font-semibold text-sm uppercase tracking-wide text-slate-500 mb-3">Source</h3>
|
||||
<div class="flex items-center gap-3 p-3 rounded-md bg-slate-50 border border-slate-200">
|
||||
<svg class="w-8 h-8 text-slate-400" fill="none" stroke="currentColor" stroke-width="1.5" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" d="M19.5 14.25v-2.625a3.375 3.375 0 00-3.375-3.375h-1.5A1.125 1.125 0 0113.5 7.125v-1.5a3.375 3.375 0 00-3.375-3.375H8.25m2.25 0H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 00-9-9z" /></svg>
|
||||
<div class="flex-1 min-w-0">
|
||||
<p class="font-medium text-sm truncate">drone_frame_v2.stl</p>
|
||||
<p class="text-xs text-slate-500">3.4 MB · raw .stl upload</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="rounded-lg border border-amber-200 bg-amber-50 p-4 text-sm text-amber-900">
|
||||
<p class="font-medium mb-1">Want to try again?</p>
|
||||
<p>Adjust the model based on the operator's feedback and <a href="submit.html" class="underline font-medium">submit a new print</a>.</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<aside class="space-y-4">
|
||||
<div class="bg-white border border-slate-200 rounded-lg p-5">
|
||||
<h3 class="font-semibold text-sm uppercase tracking-wide text-slate-500 mb-3">Timeline</h3>
|
||||
<ol class="space-y-3 text-sm">
|
||||
<li class="flex gap-3">
|
||||
<span class="w-2 h-2 rounded-full bg-emerald-500 mt-1.5 flex-shrink-0"></span>
|
||||
<div><p class="font-medium">Submitted</p><p class="text-xs text-slate-500">3 d ago</p></div>
|
||||
</li>
|
||||
<li class="flex gap-3">
|
||||
<span class="w-2 h-2 rounded-full bg-emerald-500 mt-1.5 flex-shrink-0"></span>
|
||||
<div><p class="font-medium">Confirmed</p><p class="text-xs text-slate-500">3 d ago</p></div>
|
||||
</li>
|
||||
<li class="flex gap-3">
|
||||
<span class="w-2 h-2 rounded-full bg-red-500 mt-1.5 flex-shrink-0 ring-4 ring-red-100"></span>
|
||||
<div><p class="font-medium">Rejected</p><p class="text-xs text-slate-500">3 d ago, by <span class="font-medium">@aurimas</span></p></div>
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<div class="bg-white border border-slate-200 rounded-lg p-5 text-sm">
|
||||
<h3 class="font-semibold text-sm uppercase tracking-wide text-slate-500 mb-3">Details</h3>
|
||||
<dl class="space-y-2">
|
||||
<div class="flex justify-between"><dt class="text-slate-500">Source</dt><dd>.stl upload</dd></div>
|
||||
<div class="flex justify-between"><dt class="text-slate-500">Submitter</dt><dd>linutas@gmail.com</dd></div>
|
||||
<div class="flex justify-between"><dt class="text-slate-500">Created</dt><dd>3 d ago</dd></div>
|
||||
</dl>
|
||||
</div>
|
||||
</aside>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<footer class="mt-12 border-t border-slate-200 bg-white">
|
||||
<div class="mx-auto max-w-6xl px-4 py-6 text-sm text-slate-500 text-center">
|
||||
A community service of <a href="https://hamlab.lt" class="font-medium text-slate-700 hover:underline">hamlab.lt</a>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
151
demo/index.html
Normal file
151
demo/index.html
Normal file
@@ -0,0 +1,151 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>hamprint — public 3D print dashboard</title>
|
||||
<script src="https://cdn.tailwindcss.com"></script>
|
||||
<style>
|
||||
body { font-family: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif; }
|
||||
.mono { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; }
|
||||
</style>
|
||||
</head>
|
||||
<body class="min-h-screen bg-slate-50 text-slate-900">
|
||||
|
||||
<!-- Prototype navigator (not part of the real app) -->
|
||||
<div class="bg-slate-900 text-slate-200 text-xs">
|
||||
<div class="mx-auto max-w-6xl px-4 py-2 flex flex-wrap items-center gap-x-3 gap-y-1">
|
||||
<span class="font-semibold text-amber-400">PROTOTYPE</span>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="index.html">Dashboard</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="submit.html">Submit (guest)</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="submit-signed-in.html">Submit (signed-in)</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="login.html">Sign in</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="my-prints.html">My prints</a>
|
||||
<span class="text-slate-500">|</span>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="detail-pending.html">Detail: pending</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="detail-queued.html">queued</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="detail-printing.html">printing</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="detail-completed.html">completed</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="detail-rejected.html">rejected</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="confirmed.html">confirmation link</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Top nav -->
|
||||
<nav class="border-b border-slate-200 bg-white">
|
||||
<div class="mx-auto max-w-6xl px-4 py-3 flex items-center justify-between">
|
||||
<a href="index.html" class="flex items-center gap-2">
|
||||
<span class="inline-grid place-items-center w-8 h-8 rounded-md bg-amber-500 text-white font-bold">h</span>
|
||||
<span class="font-bold text-lg tracking-tight">hamprint</span>
|
||||
<span class="hidden sm:inline text-xs text-slate-500 ml-1">· hamlab.lt</span>
|
||||
</a>
|
||||
<div class="flex items-center gap-1">
|
||||
<a href="index.html" class="px-3 py-1.5 text-sm rounded-md text-slate-900 bg-slate-100 font-medium">Dashboard</a>
|
||||
<a href="submit.html" class="px-3 py-1.5 text-sm rounded-md bg-amber-500 text-white hover:bg-amber-600 font-medium">+ Submit a print</a>
|
||||
<a href="login.html" class="px-3 py-1.5 text-sm rounded-md text-slate-700 hover:bg-slate-100">Sign in</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<main class="mx-auto max-w-6xl px-4 py-8">
|
||||
<!-- Page heading -->
|
||||
<header class="mb-6">
|
||||
<h1 class="text-2xl font-bold tracking-tight">Print dashboard</h1>
|
||||
<p class="text-slate-600 mt-1">Every public print job submitted to the hamlab.lt printer. Look up your submission by its codename.</p>
|
||||
</header>
|
||||
|
||||
<!-- Filter chips -->
|
||||
<div class="flex flex-wrap items-center gap-2 mb-4">
|
||||
<button class="px-3 py-1.5 text-sm rounded-full border border-slate-900 bg-slate-900 text-white">All <span class="opacity-70">42</span></button>
|
||||
<button class="px-3 py-1.5 text-sm rounded-full border border-slate-300 bg-white text-slate-700 hover:bg-slate-100">Queued <span class="text-slate-400">7</span></button>
|
||||
<button class="px-3 py-1.5 text-sm rounded-full border border-slate-300 bg-white text-slate-700 hover:bg-slate-100">Printing <span class="text-slate-400">1</span></button>
|
||||
<button class="px-3 py-1.5 text-sm rounded-full border border-slate-300 bg-white text-slate-700 hover:bg-slate-100">Completed <span class="text-slate-400">34</span></button>
|
||||
|
||||
<div class="ml-auto flex items-center gap-2">
|
||||
<input type="search" placeholder="Search by codename…" class="px-3 py-1.5 text-sm rounded-md border border-slate-300 bg-white w-64 focus:outline-none focus:ring-2 focus:ring-amber-500 focus:border-amber-500" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Submission list -->
|
||||
<div class="bg-white border border-slate-200 rounded-lg overflow-hidden">
|
||||
<table class="w-full text-sm">
|
||||
<thead class="bg-slate-50 border-b border-slate-200 text-slate-600">
|
||||
<tr class="text-left">
|
||||
<th class="px-4 py-2.5 font-medium">Codename</th>
|
||||
<th class="px-4 py-2.5 font-medium">Status</th>
|
||||
<th class="px-4 py-2.5 font-medium hidden sm:table-cell">Age</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class="divide-y divide-slate-100">
|
||||
<tr class="hover:bg-slate-50">
|
||||
<td class="px-4 py-3"><a href="detail-printing.html" class="mono text-amber-700 hover:underline font-medium">cheerful_curie</a></td>
|
||||
<td class="px-4 py-3"><span class="inline-flex items-center gap-1.5 px-2 py-0.5 rounded-full bg-orange-100 text-orange-800 text-xs font-medium"><span class="w-1.5 h-1.5 rounded-full bg-orange-500 animate-pulse"></span>Printing</span></td>
|
||||
<td class="px-4 py-3 hidden sm:table-cell text-slate-500">12 min</td>
|
||||
</tr>
|
||||
<tr class="hover:bg-slate-50">
|
||||
<td class="px-4 py-3"><a href="detail-queued.html" class="mono text-amber-700 hover:underline font-medium">sleepy_volta</a></td>
|
||||
<td class="px-4 py-3"><span class="inline-flex items-center gap-1.5 px-2 py-0.5 rounded-full bg-blue-100 text-blue-800 text-xs font-medium">Queued · #1</span></td>
|
||||
<td class="px-4 py-3 hidden sm:table-cell text-slate-500">42 min</td>
|
||||
</tr>
|
||||
<tr class="hover:bg-slate-50">
|
||||
<td class="px-4 py-3"><a href="detail-queued.html" class="mono text-amber-700 hover:underline font-medium">grumpy_hopper</a></td>
|
||||
<td class="px-4 py-3"><span class="inline-flex items-center gap-1.5 px-2 py-0.5 rounded-full bg-blue-100 text-blue-800 text-xs font-medium">Queued · #2</span></td>
|
||||
<td class="px-4 py-3 hidden sm:table-cell text-slate-500">1 h</td>
|
||||
</tr>
|
||||
<tr class="hover:bg-slate-50">
|
||||
<td class="px-4 py-3"><a href="detail-completed.html" class="mono text-amber-700 hover:underline font-medium">jolly_bardeen</a></td>
|
||||
<td class="px-4 py-3"><span class="inline-flex items-center gap-1.5 px-2 py-0.5 rounded-full bg-emerald-100 text-emerald-800 text-xs font-medium">Completed</span></td>
|
||||
<td class="px-4 py-3 hidden sm:table-cell text-slate-500">3 h</td>
|
||||
</tr>
|
||||
<tr class="hover:bg-slate-50">
|
||||
<td class="px-4 py-3"><a href="detail-completed.html" class="mono text-amber-700 hover:underline font-medium">vibrant_lovelace</a></td>
|
||||
<td class="px-4 py-3"><span class="inline-flex items-center gap-1.5 px-2 py-0.5 rounded-full bg-emerald-100 text-emerald-800 text-xs font-medium">Completed</span></td>
|
||||
<td class="px-4 py-3 hidden sm:table-cell text-slate-500">5 h</td>
|
||||
</tr>
|
||||
<tr class="hover:bg-slate-50">
|
||||
<td class="px-4 py-3"><a href="detail-rejected.html" class="mono text-amber-700 hover:underline font-medium">stoic_turing</a></td>
|
||||
<td class="px-4 py-3"><span class="inline-flex items-center gap-1.5 px-2 py-0.5 rounded-full bg-red-100 text-red-800 text-xs font-medium">Rejected</span></td>
|
||||
<td class="px-4 py-3 hidden sm:table-cell text-slate-500">8 h</td>
|
||||
</tr>
|
||||
<tr class="hover:bg-slate-50">
|
||||
<td class="px-4 py-3"><a href="detail-completed.html" class="mono text-amber-700 hover:underline font-medium">brave_hamilton</a></td>
|
||||
<td class="px-4 py-3"><span class="inline-flex items-center gap-1.5 px-2 py-0.5 rounded-full bg-emerald-100 text-emerald-800 text-xs font-medium">Completed</span></td>
|
||||
<td class="px-4 py-3 hidden sm:table-cell text-slate-500">1 d</td>
|
||||
</tr>
|
||||
<tr class="hover:bg-slate-50">
|
||||
<td class="px-4 py-3"><a href="detail-completed.html" class="mono text-amber-700 hover:underline font-medium">cool_einstein</a></td>
|
||||
<td class="px-4 py-3"><span class="inline-flex items-center gap-1.5 px-2 py-0.5 rounded-full bg-emerald-100 text-emerald-800 text-xs font-medium">Completed</span></td>
|
||||
<td class="px-4 py-3 hidden sm:table-cell text-slate-500">2 d</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<!-- Pagination -->
|
||||
<div class="flex items-center justify-between mt-4 text-sm">
|
||||
<p class="text-slate-500">Showing 1–8 of 42</p>
|
||||
<div class="flex items-center gap-1">
|
||||
<button disabled class="px-3 py-1.5 rounded-md border border-slate-200 text-slate-400 cursor-not-allowed">Previous</button>
|
||||
<button class="px-3 py-1.5 rounded-md border border-slate-300 bg-white text-slate-700 hover:bg-slate-100">Next →</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Helper card -->
|
||||
<div class="mt-10 rounded-lg border border-amber-200 bg-amber-50 p-4 flex items-start gap-3">
|
||||
<div class="w-8 h-8 rounded-full bg-amber-500 text-white grid place-items-center flex-shrink-0 font-bold">?</div>
|
||||
<div class="text-sm">
|
||||
<p class="font-semibold text-amber-900">Don't have an account?</p>
|
||||
<p class="text-amber-800/90 mt-0.5">You don't need one. Just hit <a href="submit.html" class="underline font-medium">Submit a print</a>, give us an email, and we'll send you a codename to track your job.</p>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<footer class="mt-12 border-t border-slate-200 bg-white">
|
||||
<div class="mx-auto max-w-6xl px-4 py-6 flex flex-col sm:flex-row sm:items-center sm:justify-between gap-2 text-sm text-slate-500">
|
||||
<p>A community service of <a href="https://hamlab.lt" class="font-medium text-slate-700 hover:underline">hamlab.lt</a></p>
|
||||
<p>Operators: please use the <a href="#" class="hover:underline">admin panel</a>.</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
83
demo/login.html
Normal file
83
demo/login.html
Normal file
@@ -0,0 +1,83 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Sign in — hamprint</title>
|
||||
<script src="https://cdn.tailwindcss.com"></script>
|
||||
<style>
|
||||
body { font-family: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif; }
|
||||
</style>
|
||||
</head>
|
||||
<body class="min-h-screen bg-slate-50 text-slate-900">
|
||||
|
||||
<div class="bg-slate-900 text-slate-200 text-xs">
|
||||
<div class="mx-auto max-w-6xl px-4 py-2 flex flex-wrap items-center gap-x-3 gap-y-1">
|
||||
<span class="font-semibold text-amber-400">PROTOTYPE</span>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="index.html">Dashboard</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="submit.html">Submit (guest)</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="submit-signed-in.html">Submit (signed-in)</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="login.html">Sign in</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="my-prints.html">My prints</a>
|
||||
<span class="text-slate-500">|</span>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="detail-pending.html">Detail: pending</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="detail-queued.html">queued</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="detail-printing.html">printing</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="detail-completed.html">completed</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="detail-rejected.html">rejected</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="confirmed.html">confirmation link</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<nav class="border-b border-slate-200 bg-white">
|
||||
<div class="mx-auto max-w-6xl px-4 py-3 flex items-center justify-between">
|
||||
<a href="index.html" class="flex items-center gap-2">
|
||||
<span class="inline-grid place-items-center w-8 h-8 rounded-md bg-amber-500 text-white font-bold">h</span>
|
||||
<span class="font-bold text-lg tracking-tight">hamprint</span>
|
||||
<span class="hidden sm:inline text-xs text-slate-500 ml-1">· hamlab.lt</span>
|
||||
</a>
|
||||
<div class="flex items-center gap-1">
|
||||
<a href="index.html" class="px-3 py-1.5 text-sm rounded-md text-slate-700 hover:bg-slate-100">Dashboard</a>
|
||||
<a href="submit.html" class="px-3 py-1.5 text-sm rounded-md bg-amber-500 text-white hover:bg-amber-600 font-medium">+ Submit a print</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<main class="mx-auto max-w-md px-4 py-16">
|
||||
<div class="bg-white border border-slate-200 rounded-lg p-8 shadow-sm">
|
||||
<div class="text-center mb-6">
|
||||
<div class="inline-grid place-items-center w-12 h-12 rounded-lg bg-amber-500 text-white font-bold text-xl mb-3">h</div>
|
||||
<h1 class="text-2xl font-bold tracking-tight">Sign in to hamprint</h1>
|
||||
<p class="text-slate-600 mt-2 text-sm">Optional — you can also <a href="submit.html" class="text-amber-700 font-medium hover:underline">submit as a guest</a>.</p>
|
||||
</div>
|
||||
|
||||
<a href="my-prints.html" class="flex items-center justify-center gap-3 w-full px-4 py-3 rounded-md border border-slate-300 bg-white hover:bg-slate-50 text-slate-900 font-medium shadow-sm">
|
||||
<svg class="w-5 h-5" viewBox="0 0 24 24" aria-hidden="true">
|
||||
<path fill="#4285F4" d="M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.75h3.57c2.08-1.92 3.28-4.74 3.28-8.07z"/>
|
||||
<path fill="#34A853" d="M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.75c-.99.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z"/>
|
||||
<path fill="#FBBC05" d="M5.84 14.12A6.97 6.97 0 015.46 12c0-.74.13-1.45.36-2.12V7.04H2.18A10.99 10.99 0 001 12c0 1.77.42 3.45 1.18 4.96l3.66-2.84z"/>
|
||||
<path fill="#EA4335" d="M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.04l3.66 2.84C6.71 7.31 9.14 5.38 12 5.38z"/>
|
||||
</svg>
|
||||
Continue with Google
|
||||
</a>
|
||||
|
||||
<div class="mt-6 text-center">
|
||||
<a href="submit.html" class="text-sm text-slate-600 hover:underline">No thanks, just submit as a guest →</a>
|
||||
</div>
|
||||
|
||||
<div class="mt-8 pt-6 border-t border-slate-200 text-xs text-slate-500 space-y-2">
|
||||
<p class="flex items-start gap-2"><span class="text-emerald-600 mt-0.5">✓</span> Signed-in prints skip email confirmation.</p>
|
||||
<p class="flex items-start gap-2"><span class="text-emerald-600 mt-0.5">✓</span> See all your past prints in one place.</p>
|
||||
<p class="flex items-start gap-2"><span class="text-emerald-600 mt-0.5">✓</span> We don't share your email, ever.</p>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<footer class="mt-12 border-t border-slate-200 bg-white">
|
||||
<div class="mx-auto max-w-6xl px-4 py-6 text-sm text-slate-500 text-center">
|
||||
A community service of <a href="https://hamlab.lt" class="font-medium text-slate-700 hover:underline">hamlab.lt</a>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
129
demo/my-prints.html
Normal file
129
demo/my-prints.html
Normal file
@@ -0,0 +1,129 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>My prints — hamprint</title>
|
||||
<script src="https://cdn.tailwindcss.com"></script>
|
||||
<style>
|
||||
body { font-family: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif; }
|
||||
.mono { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; }
|
||||
</style>
|
||||
</head>
|
||||
<body class="min-h-screen bg-slate-50 text-slate-900">
|
||||
|
||||
<div class="bg-slate-900 text-slate-200 text-xs">
|
||||
<div class="mx-auto max-w-6xl px-4 py-2 flex flex-wrap items-center gap-x-3 gap-y-1">
|
||||
<span class="font-semibold text-amber-400">PROTOTYPE</span>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="index.html">Dashboard</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="submit.html">Submit (guest)</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="submit-signed-in.html">Submit (signed-in)</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="login.html">Sign in</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="my-prints.html">My prints</a>
|
||||
<span class="text-slate-500">|</span>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="detail-pending.html">Detail: pending</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="detail-queued.html">queued</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="detail-printing.html">printing</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="detail-completed.html">completed</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="detail-rejected.html">rejected</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="confirmed.html">confirmation link</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<nav class="border-b border-slate-200 bg-white">
|
||||
<div class="mx-auto max-w-6xl px-4 py-3 flex items-center justify-between">
|
||||
<a href="index.html" class="flex items-center gap-2">
|
||||
<span class="inline-grid place-items-center w-8 h-8 rounded-md bg-amber-500 text-white font-bold">h</span>
|
||||
<span class="font-bold text-lg tracking-tight">hamprint</span>
|
||||
<span class="hidden sm:inline text-xs text-slate-500 ml-1">· hamlab.lt</span>
|
||||
</a>
|
||||
<div class="flex items-center gap-1">
|
||||
<a href="index.html" class="px-3 py-1.5 text-sm rounded-md text-slate-700 hover:bg-slate-100">Dashboard</a>
|
||||
<a href="my-prints.html" class="px-3 py-1.5 text-sm rounded-md text-slate-900 bg-slate-100 font-medium">My prints</a>
|
||||
<a href="submit-signed-in.html" class="px-3 py-1.5 text-sm rounded-md bg-amber-500 text-white hover:bg-amber-600 font-medium">+ Submit a print</a>
|
||||
<div class="ml-2 relative group">
|
||||
<button class="flex items-center gap-2 px-2 py-1 rounded-md hover:bg-slate-100">
|
||||
<span class="w-7 h-7 rounded-full bg-gradient-to-br from-emerald-400 to-blue-500 grid place-items-center text-white text-xs font-bold">L</span>
|
||||
<span class="text-sm text-slate-700 hidden sm:inline">Linas</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<main class="mx-auto max-w-6xl px-4 py-8">
|
||||
<header class="mb-6 flex items-end justify-between flex-wrap gap-3">
|
||||
<div>
|
||||
<h1 class="text-2xl font-bold tracking-tight">My prints</h1>
|
||||
<p class="text-slate-600 mt-1">All prints submitted with <span class="font-medium text-slate-800">linutas@gmail.com</span>.</p>
|
||||
</div>
|
||||
<div class="text-sm text-slate-500">
|
||||
<span class="font-medium text-slate-900">14</span> total · <span class="font-medium text-blue-700">2</span> queued · <span class="font-medium text-emerald-700">12</span> completed
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div class="bg-white border border-slate-200 rounded-lg overflow-hidden">
|
||||
<table class="w-full text-sm">
|
||||
<thead class="bg-slate-50 border-b border-slate-200 text-slate-600">
|
||||
<tr class="text-left">
|
||||
<th class="px-4 py-2.5 font-medium">Codename</th>
|
||||
<th class="px-4 py-2.5 font-medium">Source</th>
|
||||
<th class="px-4 py-2.5 font-medium">Status</th>
|
||||
<th class="px-4 py-2.5 font-medium hidden sm:table-cell">Submitted</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class="divide-y divide-slate-100">
|
||||
<tr class="hover:bg-slate-50">
|
||||
<td class="px-4 py-3"><a href="detail-queued.html" class="mono text-amber-700 hover:underline font-medium">sleepy_volta</a></td>
|
||||
<td class="px-4 py-3 text-slate-600">printables.com</td>
|
||||
<td class="px-4 py-3"><span class="inline-flex items-center gap-1.5 px-2 py-0.5 rounded-full bg-blue-100 text-blue-800 text-xs font-medium">Queued · #1</span></td>
|
||||
<td class="px-4 py-3 hidden sm:table-cell text-slate-500">Today, 13:04</td>
|
||||
</tr>
|
||||
<tr class="hover:bg-slate-50">
|
||||
<td class="px-4 py-3"><a href="detail-queued.html" class="mono text-amber-700 hover:underline font-medium">grumpy_hopper</a></td>
|
||||
<td class="px-4 py-3 text-slate-600">.stl upload</td>
|
||||
<td class="px-4 py-3"><span class="inline-flex items-center gap-1.5 px-2 py-0.5 rounded-full bg-blue-100 text-blue-800 text-xs font-medium">Queued · #2</span></td>
|
||||
<td class="px-4 py-3 hidden sm:table-cell text-slate-500">Today, 12:28</td>
|
||||
</tr>
|
||||
<tr class="hover:bg-slate-50">
|
||||
<td class="px-4 py-3"><a href="detail-completed.html" class="mono text-amber-700 hover:underline font-medium">vibrant_lovelace</a></td>
|
||||
<td class="px-4 py-3 text-slate-600">thingiverse.com</td>
|
||||
<td class="px-4 py-3"><span class="inline-flex items-center gap-1.5 px-2 py-0.5 rounded-full bg-emerald-100 text-emerald-800 text-xs font-medium">Completed</span></td>
|
||||
<td class="px-4 py-3 hidden sm:table-cell text-slate-500">Yesterday</td>
|
||||
</tr>
|
||||
<tr class="hover:bg-slate-50">
|
||||
<td class="px-4 py-3"><a href="detail-rejected.html" class="mono text-amber-700 hover:underline font-medium">stoic_turing</a></td>
|
||||
<td class="px-4 py-3 text-slate-600">.stl upload</td>
|
||||
<td class="px-4 py-3"><span class="inline-flex items-center gap-1.5 px-2 py-0.5 rounded-full bg-red-100 text-red-800 text-xs font-medium">Rejected</span></td>
|
||||
<td class="px-4 py-3 hidden sm:table-cell text-slate-500">3 d ago</td>
|
||||
</tr>
|
||||
<tr class="hover:bg-slate-50">
|
||||
<td class="px-4 py-3"><a href="detail-completed.html" class="mono text-amber-700 hover:underline font-medium">brave_hamilton</a></td>
|
||||
<td class="px-4 py-3 text-slate-600">.stl upload</td>
|
||||
<td class="px-4 py-3"><span class="inline-flex items-center gap-1.5 px-2 py-0.5 rounded-full bg-emerald-100 text-emerald-800 text-xs font-medium">Completed</span></td>
|
||||
<td class="px-4 py-3 hidden sm:table-cell text-slate-500">1 wk ago</td>
|
||||
</tr>
|
||||
<tr class="hover:bg-slate-50">
|
||||
<td class="px-4 py-3"><a href="detail-completed.html" class="mono text-amber-700 hover:underline font-medium">cool_einstein</a></td>
|
||||
<td class="px-4 py-3 text-slate-600">printables.com</td>
|
||||
<td class="px-4 py-3"><span class="inline-flex items-center gap-1.5 px-2 py-0.5 rounded-full bg-emerald-100 text-emerald-800 text-xs font-medium">Completed</span></td>
|
||||
<td class="px-4 py-3 hidden sm:table-cell text-slate-500">2 wk ago</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="mt-6 flex items-center justify-between text-sm">
|
||||
<a href="submit-signed-in.html" class="text-amber-700 hover:underline font-medium">+ Submit another print</a>
|
||||
<a href="#" class="text-slate-500 hover:underline">Sign out</a>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<footer class="mt-12 border-t border-slate-200 bg-white">
|
||||
<div class="mx-auto max-w-6xl px-4 py-6 text-sm text-slate-500 text-center">
|
||||
A community service of <a href="https://hamlab.lt" class="font-medium text-slate-700 hover:underline">hamlab.lt</a>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
151
demo/submit-signed-in.html
Normal file
151
demo/submit-signed-in.html
Normal file
@@ -0,0 +1,151 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Submit a print — hamprint</title>
|
||||
<script src="https://cdn.tailwindcss.com"></script>
|
||||
<style>
|
||||
body { font-family: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif; }
|
||||
.mono { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; }
|
||||
.src-pane { display: none; }
|
||||
#src-upload:checked ~ .src-pane[data-pane="upload"] { display: block; }
|
||||
#src-printables:checked ~ .src-pane[data-pane="printables"] { display: block; }
|
||||
#src-makerworld:checked ~ .src-pane[data-pane="makerworld"] { display: block; }
|
||||
#src-thingiverse:checked ~ .src-pane[data-pane="thingiverse"] { display: block; }
|
||||
</style>
|
||||
</head>
|
||||
<body class="min-h-screen bg-slate-50 text-slate-900">
|
||||
|
||||
<div class="bg-slate-900 text-slate-200 text-xs">
|
||||
<div class="mx-auto max-w-6xl px-4 py-2 flex flex-wrap items-center gap-x-3 gap-y-1">
|
||||
<span class="font-semibold text-amber-400">PROTOTYPE</span>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="index.html">Dashboard</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="submit.html">Submit (guest)</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="submit-signed-in.html">Submit (signed-in)</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="login.html">Sign in</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="my-prints.html">My prints</a>
|
||||
<span class="text-slate-500">|</span>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="detail-pending.html">Detail: pending</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="detail-queued.html">queued</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="detail-printing.html">printing</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="detail-completed.html">completed</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="detail-rejected.html">rejected</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="confirmed.html">confirmation link</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<nav class="border-b border-slate-200 bg-white">
|
||||
<div class="mx-auto max-w-6xl px-4 py-3 flex items-center justify-between">
|
||||
<a href="index.html" class="flex items-center gap-2">
|
||||
<span class="inline-grid place-items-center w-8 h-8 rounded-md bg-amber-500 text-white font-bold">h</span>
|
||||
<span class="font-bold text-lg tracking-tight">hamprint</span>
|
||||
<span class="hidden sm:inline text-xs text-slate-500 ml-1">· hamlab.lt</span>
|
||||
</a>
|
||||
<div class="flex items-center gap-1">
|
||||
<a href="index.html" class="px-3 py-1.5 text-sm rounded-md text-slate-700 hover:bg-slate-100">Dashboard</a>
|
||||
<a href="my-prints.html" class="px-3 py-1.5 text-sm rounded-md text-slate-700 hover:bg-slate-100">My prints</a>
|
||||
<a href="submit-signed-in.html" class="px-3 py-1.5 text-sm rounded-md bg-amber-500 text-white font-medium">+ Submit a print</a>
|
||||
<div class="ml-2 flex items-center gap-2 px-2 py-1 rounded-md hover:bg-slate-100">
|
||||
<span class="w-7 h-7 rounded-full bg-gradient-to-br from-emerald-400 to-blue-500 grid place-items-center text-white text-xs font-bold">L</span>
|
||||
<span class="text-sm text-slate-700 hidden sm:inline">Linas</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<main class="mx-auto max-w-3xl px-4 py-8">
|
||||
<header class="mb-6">
|
||||
<h1 class="text-2xl font-bold tracking-tight">Submit a print</h1>
|
||||
<p class="text-slate-600 mt-1">Your email is already verified through Google — this print goes straight to the queue.</p>
|
||||
</header>
|
||||
|
||||
<!-- Signed-in banner -->
|
||||
<div class="rounded-lg border border-emerald-200 bg-emerald-50 p-4 mb-6 flex items-start gap-3 text-sm">
|
||||
<svg class="w-5 h-5 text-emerald-600 flex-shrink-0 mt-0.5" fill="currentColor" viewBox="0 0 20 20"><path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z" clip-rule="evenodd" /></svg>
|
||||
<p class="text-emerald-900">Signed in as <span class="font-medium">linutas@gmail.com</span>. No email confirmation needed.</p>
|
||||
</div>
|
||||
|
||||
<form class="space-y-6 bg-white border border-slate-200 rounded-lg p-6">
|
||||
<fieldset>
|
||||
<legend class="block text-sm font-medium text-slate-900 mb-2">Where is the model coming from? <span class="text-red-500">*</span></legend>
|
||||
<div class="grid grid-cols-2 sm:grid-cols-4 gap-2 mb-4">
|
||||
<input type="radio" name="source" id="src-upload" class="hidden peer/upload" checked />
|
||||
<label for="src-upload" class="cursor-pointer border border-slate-300 rounded-md px-3 py-2 text-center text-sm hover:border-amber-500 peer-checked/upload:border-amber-500 peer-checked/upload:bg-amber-50 peer-checked/upload:text-amber-900 peer-checked/upload:font-medium">.stl file</label>
|
||||
<input type="radio" name="source" id="src-printables" class="hidden peer/printables" />
|
||||
<label for="src-printables" class="cursor-pointer border border-slate-300 rounded-md px-3 py-2 text-center text-sm hover:border-amber-500 peer-checked/printables:border-amber-500 peer-checked/printables:bg-amber-50 peer-checked/printables:text-amber-900 peer-checked/printables:font-medium">Printables</label>
|
||||
<input type="radio" name="source" id="src-makerworld" class="hidden peer/makerworld" />
|
||||
<label for="src-makerworld" class="cursor-pointer border border-slate-300 rounded-md px-3 py-2 text-center text-sm hover:border-amber-500 peer-checked/makerworld:border-amber-500 peer-checked/makerworld:bg-amber-50 peer-checked/makerworld:text-amber-900 peer-checked/makerworld:font-medium">MakerWorld</label>
|
||||
<input type="radio" name="source" id="src-thingiverse" class="hidden peer/thingiverse" />
|
||||
<label for="src-thingiverse" class="cursor-pointer border border-slate-300 rounded-md px-3 py-2 text-center text-sm hover:border-amber-500 peer-checked/thingiverse:border-amber-500 peer-checked/thingiverse:bg-amber-50 peer-checked/thingiverse:text-amber-900 peer-checked/thingiverse:font-medium">Thingiverse</label>
|
||||
</div>
|
||||
|
||||
<div class="src-pane" data-pane="upload">
|
||||
<label class="block">
|
||||
<div class="border-2 border-dashed border-slate-300 rounded-md p-6 text-center hover:border-amber-500 hover:bg-amber-50/40 cursor-pointer">
|
||||
<svg class="w-8 h-8 mx-auto text-slate-400" fill="none" stroke="currentColor" stroke-width="1.5" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" d="M12 16.5V9.75m0 0L9 12.75M12 9.75l3 3M3 17.25V18a2.25 2.25 0 002.25 2.25h13.5A2.25 2.25 0 0021 18v-.75" /></svg>
|
||||
<p class="mt-2 text-sm font-medium text-slate-700">Drop your .stl here or click to browse</p>
|
||||
<p class="text-xs text-slate-500 mt-1">Raw <span class="mono">.stl</span> only, max 4 MB.</p>
|
||||
</div>
|
||||
<input type="file" accept=".stl" class="sr-only" />
|
||||
</label>
|
||||
</div>
|
||||
<div class="src-pane" data-pane="printables">
|
||||
<label class="block text-sm font-medium text-slate-700 mb-1">Printables.com URL</label>
|
||||
<input type="url" placeholder="https://www.printables.com/model/…" class="w-full px-3 py-2 rounded-md border border-slate-300 bg-white focus:outline-none focus:ring-2 focus:ring-amber-500 focus:border-amber-500" />
|
||||
</div>
|
||||
<div class="src-pane" data-pane="makerworld">
|
||||
<label class="block text-sm font-medium text-slate-700 mb-1">MakerWorld URL</label>
|
||||
<input type="url" placeholder="https://makerworld.com/en/models/…" class="w-full px-3 py-2 rounded-md border border-slate-300 bg-white focus:outline-none focus:ring-2 focus:ring-amber-500 focus:border-amber-500" />
|
||||
</div>
|
||||
<div class="src-pane" data-pane="thingiverse">
|
||||
<label class="block text-sm font-medium text-slate-700 mb-1">Thingiverse URL</label>
|
||||
<input type="url" placeholder="https://www.thingiverse.com/thing:…" class="w-full px-3 py-2 rounded-md border border-slate-300 bg-white focus:outline-none focus:ring-2 focus:ring-amber-500 focus:border-amber-500" />
|
||||
</div>
|
||||
|
||||
<p class="text-xs text-slate-500 mt-3">Got something from elsewhere? Download the <span class="mono">.stl</span> and upload it as a file.</p>
|
||||
</fieldset>
|
||||
|
||||
<div>
|
||||
<label for="filament" class="block text-sm font-medium text-slate-900 mb-1">Filament</label>
|
||||
<select id="filament" class="w-full px-3 py-2 rounded-md border border-slate-300 bg-white focus:outline-none focus:ring-2 focus:ring-amber-500 focus:border-amber-500">
|
||||
<option value="">No preference — operator's choice</option>
|
||||
<option>Red PLA</option>
|
||||
<option>Black PLA</option>
|
||||
<option>White PLA</option>
|
||||
<option>Silver PLA</option>
|
||||
<option>Mil green PETG</option>
|
||||
<option>Translucent PETG</option>
|
||||
<option>Orange PETG</option>
|
||||
<option>Black TPU 95A</option>
|
||||
</select>
|
||||
<p class="text-xs text-slate-500 mt-1">Only filaments currently loaded at hamlab.lt are listed.</p>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<label for="notes" class="block text-sm font-medium text-slate-900 mb-1">
|
||||
Notes for the operator
|
||||
<span class="ml-1 inline-flex items-center gap-1 px-1.5 py-0.5 rounded bg-slate-100 text-slate-600 text-[10px] font-medium uppercase tracking-wide align-middle">
|
||||
<svg class="w-3 h-3" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" d="M16.5 10.5V6.75a4.5 4.5 0 10-9 0v3.75m-.75 11.25h10.5a2.25 2.25 0 002.25-2.25v-6.75a2.25 2.25 0 00-2.25-2.25H6.75a2.25 2.25 0 00-2.25 2.25v6.75a2.25 2.25 0 002.25 2.25z" /></svg>
|
||||
Private
|
||||
</span>
|
||||
</label>
|
||||
<textarea id="notes" rows="3" placeholder="e.g. 0.2 mm layer height, 20% infill, pickup Saturday afternoon." class="w-full px-3 py-2 rounded-md border border-slate-300 bg-white focus:outline-none focus:ring-2 focus:ring-amber-500 focus:border-amber-500"></textarea>
|
||||
<p class="text-xs text-slate-500 mt-1">Only the operator sees these — they're not shown on your public submission page.</p>
|
||||
</div>
|
||||
|
||||
<div class="flex items-center justify-end gap-3 border-t border-slate-200 pt-6">
|
||||
<a href="index.html" class="px-4 py-2 text-sm rounded-md text-slate-700 hover:bg-slate-100">Cancel</a>
|
||||
<a href="detail-queued.html" class="px-4 py-2 text-sm rounded-md bg-amber-500 text-white hover:bg-amber-600 font-medium">Submit print</a>
|
||||
</div>
|
||||
</form>
|
||||
</main>
|
||||
|
||||
<footer class="mt-12 border-t border-slate-200 bg-white">
|
||||
<div class="mx-auto max-w-6xl px-4 py-6 text-sm text-slate-500 text-center">
|
||||
A community service of <a href="https://hamlab.lt" class="font-medium text-slate-700 hover:underline">hamlab.lt</a>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
172
demo/submit.html
Normal file
172
demo/submit.html
Normal file
@@ -0,0 +1,172 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Submit a print — hamprint</title>
|
||||
<script src="https://cdn.tailwindcss.com"></script>
|
||||
<style>
|
||||
body { font-family: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif; }
|
||||
.mono { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; }
|
||||
/* show/hide source inputs based on radio selection */
|
||||
#src-upload:checked ~ .src-pane[data-pane="upload"] { display: block; }
|
||||
#src-printables:checked ~ .src-pane[data-pane="printables"] { display: block; }
|
||||
#src-makerworld:checked ~ .src-pane[data-pane="makerworld"] { display: block; }
|
||||
#src-thingiverse:checked ~ .src-pane[data-pane="thingiverse"] { display: block; }
|
||||
.src-pane { display: none; }
|
||||
</style>
|
||||
</head>
|
||||
<body class="min-h-screen bg-slate-50 text-slate-900">
|
||||
|
||||
<div class="bg-slate-900 text-slate-200 text-xs">
|
||||
<div class="mx-auto max-w-6xl px-4 py-2 flex flex-wrap items-center gap-x-3 gap-y-1">
|
||||
<span class="font-semibold text-amber-400">PROTOTYPE</span>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="index.html">Dashboard</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="submit.html">Submit (guest)</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="submit-signed-in.html">Submit (signed-in)</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="login.html">Sign in</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="my-prints.html">My prints</a>
|
||||
<span class="text-slate-500">|</span>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="detail-pending.html">Detail: pending</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="detail-queued.html">queued</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="detail-printing.html">printing</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="detail-completed.html">completed</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="detail-rejected.html">rejected</a>
|
||||
<a class="hover:text-white underline-offset-2 hover:underline" href="confirmed.html">confirmation link</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<nav class="border-b border-slate-200 bg-white">
|
||||
<div class="mx-auto max-w-6xl px-4 py-3 flex items-center justify-between">
|
||||
<a href="index.html" class="flex items-center gap-2">
|
||||
<span class="inline-grid place-items-center w-8 h-8 rounded-md bg-amber-500 text-white font-bold">h</span>
|
||||
<span class="font-bold text-lg tracking-tight">hamprint</span>
|
||||
<span class="hidden sm:inline text-xs text-slate-500 ml-1">· hamlab.lt</span>
|
||||
</a>
|
||||
<div class="flex items-center gap-1">
|
||||
<a href="index.html" class="px-3 py-1.5 text-sm rounded-md text-slate-700 hover:bg-slate-100">Dashboard</a>
|
||||
<a href="submit.html" class="px-3 py-1.5 text-sm rounded-md bg-amber-500 text-white font-medium">+ Submit a print</a>
|
||||
<a href="login.html" class="px-3 py-1.5 text-sm rounded-md text-slate-700 hover:bg-slate-100">Sign in</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<main class="mx-auto max-w-3xl px-4 py-8">
|
||||
<header class="mb-6">
|
||||
<h1 class="text-2xl font-bold tracking-tight">Submit a print</h1>
|
||||
<p class="text-slate-600 mt-1">Anyone can submit a job. We'll send you a codename to follow it on the dashboard.</p>
|
||||
</header>
|
||||
|
||||
<!-- Guest banner -->
|
||||
<div class="rounded-lg border border-slate-200 bg-white p-4 mb-6 flex items-start gap-3 text-sm">
|
||||
<span class="px-2 py-0.5 rounded-md bg-slate-100 text-slate-700 text-xs font-medium uppercase tracking-wide">Guest</span>
|
||||
<p class="text-slate-700">You're submitting anonymously. We'll email you a confirmation link — click it within 1 hour to put your print in the queue. <a href="login.html" class="text-amber-700 font-medium hover:underline">Sign in with Google</a> to skip this step.</p>
|
||||
</div>
|
||||
|
||||
<form class="space-y-6 bg-white border border-slate-200 rounded-lg p-6">
|
||||
<!-- Source -->
|
||||
<fieldset>
|
||||
<legend class="block text-sm font-medium text-slate-900 mb-2">Where is the model coming from? <span class="text-red-500">*</span></legend>
|
||||
<div class="grid grid-cols-2 sm:grid-cols-4 gap-2 mb-4">
|
||||
<input type="radio" name="source" id="src-upload" class="hidden peer/upload" checked />
|
||||
<label for="src-upload" class="cursor-pointer border border-slate-300 rounded-md px-3 py-2 text-center text-sm hover:border-amber-500 peer-checked/upload:border-amber-500 peer-checked/upload:bg-amber-50 peer-checked/upload:text-amber-900 peer-checked/upload:font-medium">.stl file</label>
|
||||
|
||||
<input type="radio" name="source" id="src-printables" class="hidden peer/printables" />
|
||||
<label for="src-printables" class="cursor-pointer border border-slate-300 rounded-md px-3 py-2 text-center text-sm hover:border-amber-500 peer-checked/printables:border-amber-500 peer-checked/printables:bg-amber-50 peer-checked/printables:text-amber-900 peer-checked/printables:font-medium">Printables</label>
|
||||
|
||||
<input type="radio" name="source" id="src-makerworld" class="hidden peer/makerworld" />
|
||||
<label for="src-makerworld" class="cursor-pointer border border-slate-300 rounded-md px-3 py-2 text-center text-sm hover:border-amber-500 peer-checked/makerworld:border-amber-500 peer-checked/makerworld:bg-amber-50 peer-checked/makerworld:text-amber-900 peer-checked/makerworld:font-medium">MakerWorld</label>
|
||||
|
||||
<input type="radio" name="source" id="src-thingiverse" class="hidden peer/thingiverse" />
|
||||
<label for="src-thingiverse" class="cursor-pointer border border-slate-300 rounded-md px-3 py-2 text-center text-sm hover:border-amber-500 peer-checked/thingiverse:border-amber-500 peer-checked/thingiverse:bg-amber-50 peer-checked/thingiverse:text-amber-900 peer-checked/thingiverse:font-medium">Thingiverse</label>
|
||||
</div>
|
||||
|
||||
<!-- Upload pane -->
|
||||
<div class="src-pane" data-pane="upload">
|
||||
<label class="block">
|
||||
<div class="border-2 border-dashed border-slate-300 rounded-md p-6 text-center hover:border-amber-500 hover:bg-amber-50/40 cursor-pointer">
|
||||
<svg class="w-8 h-8 mx-auto text-slate-400" fill="none" stroke="currentColor" stroke-width="1.5" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" d="M12 16.5V9.75m0 0L9 12.75M12 9.75l3 3M3 17.25V18a2.25 2.25 0 002.25 2.25h13.5A2.25 2.25 0 0021 18v-.75" /></svg>
|
||||
<p class="mt-2 text-sm font-medium text-slate-700">Drop your .stl here or click to browse</p>
|
||||
<p class="text-xs text-slate-500 mt-1">Raw <span class="mono">.stl</span> only, max 4 MB. No <span class="mono">.3mf</span>, <span class="mono">.gcode</span>, <span class="mono">.zip</span>, etc.</p>
|
||||
</div>
|
||||
<input type="file" accept=".stl" class="sr-only" />
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<!-- Printables pane -->
|
||||
<div class="src-pane" data-pane="printables">
|
||||
<label class="block text-sm font-medium text-slate-700 mb-1">Printables.com URL</label>
|
||||
<input type="url" placeholder="https://www.printables.com/model/…" class="w-full px-3 py-2 rounded-md border border-slate-300 bg-white focus:outline-none focus:ring-2 focus:ring-amber-500 focus:border-amber-500" />
|
||||
<p class="text-xs text-slate-500 mt-1">Must be a <span class="mono">printables.com</span> link.</p>
|
||||
</div>
|
||||
|
||||
<!-- Makerworld pane -->
|
||||
<div class="src-pane" data-pane="makerworld">
|
||||
<label class="block text-sm font-medium text-slate-700 mb-1">MakerWorld URL</label>
|
||||
<input type="url" placeholder="https://makerworld.com/en/models/…" class="w-full px-3 py-2 rounded-md border border-slate-300 bg-white focus:outline-none focus:ring-2 focus:ring-amber-500 focus:border-amber-500" />
|
||||
<p class="text-xs text-slate-500 mt-1">Must be a <span class="mono">makerworld.com</span> link.</p>
|
||||
</div>
|
||||
|
||||
<!-- Thingiverse pane -->
|
||||
<div class="src-pane" data-pane="thingiverse">
|
||||
<label class="block text-sm font-medium text-slate-700 mb-1">Thingiverse URL</label>
|
||||
<input type="url" placeholder="https://www.thingiverse.com/thing:…" class="w-full px-3 py-2 rounded-md border border-slate-300 bg-white focus:outline-none focus:ring-2 focus:ring-amber-500 focus:border-amber-500" />
|
||||
<p class="text-xs text-slate-500 mt-1">Must be a <span class="mono">thingiverse.com</span> link.</p>
|
||||
</div>
|
||||
|
||||
<p class="text-xs text-slate-500 mt-3">Got something from elsewhere? Download the <span class="mono">.stl</span> and upload it as a file.</p>
|
||||
</fieldset>
|
||||
|
||||
<!-- Filament -->
|
||||
<div>
|
||||
<label for="filament" class="block text-sm font-medium text-slate-900 mb-1">Filament</label>
|
||||
<select id="filament" class="w-full px-3 py-2 rounded-md border border-slate-300 bg-white focus:outline-none focus:ring-2 focus:ring-amber-500 focus:border-amber-500">
|
||||
<option value="">No preference — operator's choice</option>
|
||||
<option>Red PLA</option>
|
||||
<option>Black PLA</option>
|
||||
<option>White PLA</option>
|
||||
<option>Silver PLA</option>
|
||||
<option>Mil green PETG</option>
|
||||
<option>Translucent PETG</option>
|
||||
<option>Orange PETG</option>
|
||||
<option>Black TPU 95A</option>
|
||||
</select>
|
||||
<p class="text-xs text-slate-500 mt-1">Only filaments currently loaded at hamlab.lt are listed. The list is curated by operators — out-of-stock options are hidden.</p>
|
||||
</div>
|
||||
|
||||
<!-- Notes -->
|
||||
<div>
|
||||
<label for="notes" class="block text-sm font-medium text-slate-900 mb-1">
|
||||
Notes for the operator
|
||||
<span class="ml-1 inline-flex items-center gap-1 px-1.5 py-0.5 rounded bg-slate-100 text-slate-600 text-[10px] font-medium uppercase tracking-wide align-middle">
|
||||
<svg class="w-3 h-3" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" d="M16.5 10.5V6.75a4.5 4.5 0 10-9 0v3.75m-.75 11.25h10.5a2.25 2.25 0 002.25-2.25v-6.75a2.25 2.25 0 00-2.25-2.25H6.75a2.25 2.25 0 00-2.25 2.25v6.75a2.25 2.25 0 002.25 2.25z" /></svg>
|
||||
Private
|
||||
</span>
|
||||
</label>
|
||||
<textarea id="notes" rows="3" placeholder="e.g. 0.2 mm layer height, 20% infill, pickup Saturday afternoon." class="w-full px-3 py-2 rounded-md border border-slate-300 bg-white focus:outline-none focus:ring-2 focus:ring-amber-500 focus:border-amber-500"></textarea>
|
||||
<p class="text-xs text-slate-500 mt-1">Only the operator sees these — they're not shown on your public submission page. Layer height, infill, pickup arrangement, anything useful.</p>
|
||||
</div>
|
||||
|
||||
<!-- Email (guest-only) -->
|
||||
<div class="border-t border-slate-200 pt-6">
|
||||
<label for="email" class="block text-sm font-medium text-slate-900 mb-1">Your email <span class="text-red-500">*</span></label>
|
||||
<input id="email" type="email" placeholder="you@example.com" class="w-full px-3 py-2 rounded-md border border-slate-300 bg-white focus:outline-none focus:ring-2 focus:ring-amber-500 focus:border-amber-500" />
|
||||
<p class="text-xs text-slate-500 mt-1">We'll send a confirmation link. The submission disappears in 1 hour if not confirmed. Never shown publicly.</p>
|
||||
</div>
|
||||
|
||||
<!-- Submit -->
|
||||
<div class="flex items-center justify-end gap-3 border-t border-slate-200 pt-6">
|
||||
<a href="index.html" class="px-4 py-2 text-sm rounded-md text-slate-700 hover:bg-slate-100">Cancel</a>
|
||||
<a href="detail-pending.html" class="px-4 py-2 text-sm rounded-md bg-amber-500 text-white hover:bg-amber-600 font-medium">Submit print</a>
|
||||
</div>
|
||||
</form>
|
||||
</main>
|
||||
|
||||
<footer class="mt-12 border-t border-slate-200 bg-white">
|
||||
<div class="mx-auto max-w-6xl px-4 py-6 text-sm text-slate-500 text-center">
|
||||
A community service of <a href="https://hamlab.lt" class="font-medium text-slate-700 hover:underline">hamlab.lt</a>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user