Repository navigation
Expand file tree
/
Copy pathmatrix.html
More file actions
114 lines (103 loc) · 5.75 KB
/
Copy pathmatrix.html
File metadata and controls
114 lines (103 loc) · 5.75 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
<!doctype html>
<html lang="en" data-theme="auto">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
<title>Enter the Matrix — Rahil Sahu</title>
<meta name="description" content="An interactive Matrix-universe terminal: digital rain, an in-browser shell, and a way back out.">
<meta name="author" content="Rahil Sahu">
<meta name="robots" content="noindex">
<link rel="canonical" href="https://rahilsahu.github.io/matrix.html">
<!-- CSP without inline-script hash: this page ships zero inline scripts or styles. -->
<meta http-equiv="Content-Security-Policy" content="default-src 'none'; script-src 'self'; style-src 'self'; img-src 'self' data:; font-src 'self'; connect-src 'self' https://api.groq.com https://openrouter.ai; base-uri 'self'; form-action 'none'; frame-ancestors 'none'; object-src 'none'; upgrade-insecure-requests">
<meta http-equiv="X-Content-Type-Options" content="nosniff">
<meta name="referrer" content="strict-origin-when-cross-origin">
<link rel="icon" href="assets/favicon.svg" type="image/svg+xml">
<link rel="stylesheet" href="assets/styles.css?v=20261108a">
<link rel="stylesheet" href="assets/palette.css?v=20261108a">
<link rel="stylesheet" href="assets/matrix-assistant.css?v=20261108a">
</head>
<body class="matrix-page">
<noscript>
<div class="mx-fallback">
<p>This experience needs JavaScript — the rain and the terminal are rendered client-side.<br>
You can still <a href="index.html" class="mx-home-link">go back home</a>.</p>
</div>
</noscript>
<canvas class="mx-rain" id="mxRain" aria-hidden="true"></canvas>
<div class="mx-vignette" aria-hidden="true"></div>
<header class="site-header">
<div class="wrap header-inner">
<a class="brand" href="index.html" aria-label="Rahil Sahu — home">
<span class="brand-mark" aria-hidden="true">
<span class="brand-bracket">[</span><span class="brand-initials">rs</span><span class="brand-bracket">]</span>
</span>
<span class="brand-text">
<span class="brand-name">Rahil Sahu</span>
<span class="brand-role">Application Security Engineer</span>
</span>
</a>
<div class="header-actions">
<button class="theme-toggle" id="themeToggle" type="button" aria-label="Toggle colour theme" aria-pressed="false">
<span class="theme-toggle-track" aria-hidden="true"></span>
<span class="theme-toggle-label" data-label-light="light" data-label-dark="dark">auto</span>
</button>
</div>
</div>
</header>
<a class="mx-exit" href="index.html">exit the matrix ↑</a>
<div class="mx-gate" id="mxGate" role="dialog" aria-modal="true" aria-labelledby="mxGateTitle">
<h1 id="mxGateTitle">WAKE UP, NEO…</h1>
<p>The Matrix has you. Follow the white rabbit.<br>
Step inside for a terminal session rendered in your browser — no tracking.<br>
Type <span class="mx-prompt">ask</span> to question the oracle (it needs a key, and answers five times per session).</p>
<button class="mx-jackin" id="mxJackin" type="button">JACK IN</button>
<p><a href="index.html" class="mx-bluepill">…or take the blue pill and go home</a></p>
</div>
<main id="main">
<div class="mx-term-wrap">
<section class="mx-term" aria-label="Matrix terminal">
<div class="mx-term-head"><span aria-hidden="true">● ● ●</span><span>neo@construct</span></div>
<div class="mx-term-body" id="mxOut" aria-live="polite"></div>
<!-- Wrapped in a form so mobile keyboards reliably submit via the
action/Go key; the submit handler (not keydown) runs the command. -->
<form class="mx-term-row" id="mxForm" aria-label="Terminal command form">
<span class="mx-prompt" aria-hidden="true">neo@construct:~$</span>
<label class="visually-hidden" for="mxIn">Terminal command</label>
<input class="mx-input" id="mxIn" type="text" autocomplete="off" autocapitalize="off" spellcheck="false" placeholder="type 'help'" enterkeyhint="go" disabled>
</form>
</section>
</div>
</main>
<div class="mx-keypanel" id="mxKeypanel" hidden>
<div class="mx-keycard" role="dialog" aria-modal="true" aria-labelledby="mxKeyTitle">
<h2 id="mxKeyTitle">oracle uplink</h2>
<p class="mx-keynote">Paste a key to wake the oracle. It lives only in this tab’s memory — never written to disk, never in the page source, and sent only to the API you choose below.</p>
<label>provider
<select id="mxProvider">
<option value="https://api.groq.com/openai/v1">Groq</option>
<option value="https://openrouter.ai/api/v1">OpenRouter</option>
<option value="custom">Custom OpenAI-compatible…</option>
</select>
</label>
<label id="mxBaseWrap" hidden>base url
<input id="mxBase" type="text" autocomplete="off" spellcheck="false" placeholder="https://your-host/v1">
</label>
<label>model
<input id="mxModel" type="text" autocomplete="off" spellcheck="false" placeholder="model id for your key">
</label>
<label>api key
<input id="mxKey" type="password" autocomplete="off" spellcheck="false" placeholder="paste key — it never leaves this tab">
</label>
<div class="mx-keyrow">
<button id="mxKeySave" type="button">connect</button>
<button id="mxKeyCancel" type="button">cancel</button>
<button id="mxKeyForget" type="button" class="mx-key-danger">forget key</button>
</div>
<p class="mx-keystatus" id="mxKeyStatus" role="status"></p>
</div>
</div>
<script src="assets/matrix.js?v=20261108a" defer></script>
<script src="assets/palette.js?v=20261108a" defer></script>
</body>
</html>