repos
/ orchard main

orchard

mirror

Every site I host, in one repo, along with the Cloudflare Tunnel and Caddy that front them. It's all Go, Vite, and SQLite, and it runs on a desktop at home with nothing listening on an inbound port.

blogbuncaddycloudflare-tunneldockergogolanghomelabhtml-templatemonorepoself-hostedseosqlitestatic-sitetypstuptime-monitoringviteweb-analytics

6.0 KB · 143 lines · HTML Raw History
  1<!doctype html>
  2<html lang="en">
  3<head>
  4<meta charset="utf-8">
  5<meta name="viewport" content="width=device-width, initial-scale=1">
  6<title>Ask &middot; search</title>
  7<link rel="stylesheet" href="{{ asset "static/app.css" }}">
  8{{- if .Analytics }}
  9<script>
 10  (function (m, e, t, r, i, c, s) {
 11    m.collectorQueue = m.collectorQueue || r;
 12    m.collectorServer = c;
 13    m.collectorId = s;
 14    m.collectorScript = e.createElement(t);
 15    m.collectorScript.src = c + i;
 16    e.head.appendChild(m.collectorScript);
 17  })(window, document, "script", [], "/static/collector.js",
 18     "https://analytics.bythewood.me", "{{ .AnalyticsID }}");
 19</script>
 20{{- end }}
 21</head>
 22<body data-session="{{.SessionID}}">
 23<div class="crt"></div>
 24<div class="vignette"></div>
 25
 26<header class="bar">
 27  <div class="barin">
 28    <a class="brand" href="/">
 29      <span class="key"><span class="cursor"></span></span>
 30      <span>search</span>
 31    </a>
 32    <span class="where">Ask</span>
 33    <span class="spacer"></span>
 34    <span class="counts" id="archive"><b>{{ num .Pages }}</b> pages &middot; <b>{{ num .Chunks }}</b> passages</span>
 35    <span class="gauge" id="gauge" title="How much searching is left before it paces itself">
 36      <span class="segs" id="segs"></span>
 37      <span class="gtext" id="gtext">ready</span>
 38    </span>
 39    <button class="ghost incogbtn" id="incog" aria-pressed="false"
 40            title="Ask without keeping the question or the answer">incognito</button>
 41    <a class="ghost" href="/history" title="What has been asked, and what was thumbed">history</a>
 42    <button class="ghost" id="reset" title="Start a new conversation">new</button>
 43    <span class="dot {{if .LLMUp}}up{{end}}" id="modeldot" title="model"></span>
 44  </div>
 45</header>
 46
 47<main>
 48  <div class="askwrap">
 49    <form class="ask" id="ask">
 50      <input type="text" id="q" placeholder="Ask a question" autocomplete="off">
 51      <button type="submit" id="go">Search</button>
 52    </form>
 53    <p class="incognote" id="incognote" hidden>
 54      <span class="label">incognito</span>
 55      Nothing about this question is written down. Pages it reads still go in the
 56      archive, which holds public articles and no question, so it cannot be read
 57      back as what you asked.
 58    </p>
 59    <p class="faint hint" id="followhint" hidden>Following on from the last answer. Use <strong>New question</strong> to start fresh.</p>
 60    <p class="hint capnote" id="capnote" hidden></p>
 61  </div>
 62
 63  <div id="transcript">
 64    <div class="intro">
 65      <p class="introline">Ask a question. It searches the web, reads what it finds, and writes an
 66      answer where every sentence is checked against the passage it cites.</p>
 67
 68      <div class="skills">
 69        <div class="skhead">
 70          <span class="label">try</span>
 71          <span class="skrule"></span>
 72        </div>
 73        <ul class="skillrow">
 74          <li><button class="skill" data-q="how do i make a breakfast burrito">
 75            <span class="skname">recipe</span>
 76            <span class="skex">how do i make a breakfast burrito</span>
 77          </button></li>
 78          <li><button class="skill" data-q="how do i set up wireguard on debian">
 79            <span class="skname">how&#8209;to</span>
 80            <span class="skex">how do i set up wireguard on debian</span>
 81          </button></li>
 82          <li><button class="skill" data-q="write a python script that runs restic backups from cron">
 83            <span class="skname">code</span>
 84            <span class="skex">write a python script that runs restic backups from cron</span>
 85          </button></li>
 86          <li><button class="skill" data-q="sqlite vs postgres for a small site">
 87            <span class="skname">compare</span>
 88            <span class="skex">sqlite vs postgres for a small site</span>
 89          </button></li>
 90          <li><button class="skill" data-q="most popular tool for running LLMs locally">
 91            <span class="skname">find</span>
 92            <span class="skex">most popular tool for running LLMs locally</span>
 93          </button></li>
 94          <li><button class="skill" data-q="did Liverpool win their last match">
 95            <span class="skname">scores</span>
 96            <span class="skex">did Liverpool win their last match</span>
 97            <span class="sktag">live</span>
 98          </button></li>
 99          <li><button class="skill" data-q="what is the status of the Artemis moon program">
100            <span class="skname">status</span>
101            <span class="skex">what is the status of the Artemis moon program</span>
102          </button></li>
103          <li><button class="skill" data-q="what is the weather this weekend">
104            <span class="skname">weather</span>
105            <span class="skex">what is the weather this weekend</span>
106            <span class="sktag">live</span>
107          </button></li>
108          <li><button class="skill" data-q="what is the S&amp;P 500 right now">
109            <span class="skname">markets</span>
110            <span class="skex">what is the S&amp;P 500 right now</span>
111            <span class="sktag">live</span>
112          </button></li>
113          <li><button class="skill" data-q="what are the odds on the us open">
114            <span class="skname">odds</span>
115            <span class="skex">what are the odds on the us open</span>
116            <span class="sktag">live</span>
117          </button></li>
118          <li><button class="skill" data-q="100 usd in eur">
119            <span class="skname">convert</span>
120            <span class="skex">100 usd in eur</span>
121          </button></li>
122          <li><button class="skill" data-q="what time is it in tokyo">
123            <span class="skname">time</span>
124            <span class="skex">what time is it in tokyo</span>
125            <span class="sktag">instant</span>
126          </button></li>
127          <li><button class="skill" data-q="30 * 27">
128            <span class="skname">maths</span>
129            <span class="skex">30 * 27</span>
130            <span class="sktag">instant</span>
131          </button></li>
132        </ul>
133      </div>
134
135      <p class="ambient">{{.Ambient}}</p>
136    </div>
137  </div>
138</main>
139
140<script src="{{ asset "static/app.js" }}"></script>
141</body>
142</html>