spb/drive Public
SPB Drive — self-hosted personal cloud drive (files, previews, sharing) on the MacLustr cluster.
JavaScript 82.7%
CSS 10.6%
Nunjucks 3.6%
Shell 1.8%
SQL 1.3%
1{#2 ─────────────────────────────────────────────3 SPB Drive — Personal Cloud Drive4 ─────────────────────────────────────────────5 Author : Simon-Pierre Boucher6 Contact : contact@spboucher.ai7 File : src/web/views/request.njk8 Purpose : Public file-request page — anyone can drop files for Simon-Pierre9 License : MIT © Simon-Pierre Boucher10 ─────────────────────────────────────────────11#}12{% extends "base.njk" %}13{% block title %}Send files · SPB Drive{% endblock %}14{% block og %}15 <meta property="og:site_name" content="SPB Drive">16 <meta property="og:title" content="Send files to Simon-Pierre Boucher">17 <meta property="og:type" content="website">18 <meta property="og:url" content="{{ publicUrl }}/r/{{ token }}">19 <meta property="og:description" content="Drop your files here — they go straight to Simon-Pierre's drive.">20 <meta name="twitter:card" content="summary">21{% endblock %}22{% block body %}23<div class="share-page"24 data-token="{{ token }}"25 data-max-files="{{ maxFiles or '' }}"26 data-received="{{ received }}">27 <header class="share-topbar">28 <div class="brand"><div class="mark">SPB</div><span>SPB Drive</span></div>29 </header>30 <main class="share-main request-main">31 <div class="request-card">32 <h1>Send files to Simon-Pierre Boucher</h1>33 {% if label %}<p class="request-label">“{{ label }}”</p>{% endif %}34 <p class="request-sub">35 Files land directly in Simon-Pierre's private drive. Nobody else can see them.36 {% if maxFiles %}<br>Up to {{ maxFiles }} file(s) accepted on this link.{% endif %}37 </p>38 <div class="request-drop" id="requestDrop" tabindex="0" role="button" aria-label="Choose files">39 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6"><path d="M12 16V4m0 0 5 5m-5-5-5 5"/><path d="M4 17v2a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-2"/></svg>40 <div><strong>Drop files here</strong> or click to browse</div>41 </div>42 <div class="upload-list" id="requestList"></div>43 <input type="file" id="requestPick" multiple hidden>44 </div>45 </main>46 <footer class="share-footer">47 SPB Drive · <a href="mailto:contact@spboucher.ai">contact@spboucher.ai</a>48 </footer>49</div>50<div class="toasts" id="toasts"></div>51<script type="module" src="/assets/js/request-page.js"></script>52{% endblock %}53