summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--assets/favicon.svg4
-rw-r--r--assets/robots.txt2
-rw-r--r--cv/index.txt67
-rwxr-xr-xdeploy-docker.sh6
-rwxr-xr-xdeploy.sh5
-rw-r--r--index.qmd4
-rw-r--r--nginx.conf39
-rw-r--r--projects/index.qmd62
-rw-r--r--terminal.css90
9 files changed, 236 insertions, 43 deletions
diff --git a/assets/favicon.svg b/assets/favicon.svg
new file mode 100644
index 0000000..0b15e21
--- /dev/null
+++ b/assets/favicon.svg
@@ -0,0 +1,4 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
+ <rect width="32" height="32" rx="6" fill="#1a1b26"/>
+ <text x="16" y="23" font-family="'JetBrains Mono', monospace, sans-serif" font-size="20" font-weight="bold" fill="#bb9af7" text-anchor="middle">λ</text>
+</svg>
diff --git a/assets/robots.txt b/assets/robots.txt
new file mode 100644
index 0000000..c2a49f4
--- /dev/null
+++ b/assets/robots.txt
@@ -0,0 +1,2 @@
+User-agent: *
+Allow: /
diff --git a/cv/index.txt b/cv/index.txt
index 5f4b42e..efd50a9 100644
--- a/cv/index.txt
+++ b/cv/index.txt
@@ -1 +1,66 @@
-use `curl jayrup.me/cv.pdf > jayrup_cv.pdf`
+JAYRUP NAKAWALA
+London, UK | jayrupnakawala@gmail.com
+jayrup.me | github.com/CaptainJack2491 | linkedin.com/in/jayrupnakawala
+------------------------------------------------------------------------
+
+RESEARCH EXPERIENCE
+------------------------------------------------------------------------
+
+[1] Prime-Grokking: Pre-registered Grokking Study (Aug 2026 — Present)
+ git.jayrup.me/c/prime-grokking.git
+ - Tested whether minimal transformers and RNNs can grok next-prime prediction,
+ running the study like production research: every experiment batch pre-registered
+ with commit-locked interpretations before launch.
+ - Caught two experimental-design blockers via hostile pre-run review; built an
+ idempotent multi-cell sweep runner and batched the evaluation loop 46x faster.
+ - Ran a 16-cell PyTorch CUDA/AMP sweep (architecture x weight decay) on a remote GPU
+ node, then extended through 10x more data and a 20x longer horizon.
+ - Published a 3-part writeup at jayrup.me with a public, re-runnable repository.
+
+[2] Stress-Testing the J-space Interpretability Lens (Jul 2026 — Aug 2026)
+ jayrup.me/blog/jacobian-lens-frequency
+ - Independently reproduced a frontier interpretability method (Anthropic's July 2026
+ J-space/J-lens analysis) on a small PyTorch transformer and found scores track token frequency.
+ - Designed a matched-frequency control showing contextual predictability remains
+ detectable — framed and published as a control requirement for the method.
+
+[3] Dissertation: Moral Cover and Watchful Eyes (Nov 2025 — May 2026)
+ github.com/CaptainJack2491/dissertation | jayrup.me/dissertation
+ - Architected a sandboxed evaluation framework with a Virtual File System (VFS) to safely
+ execute and monitor autonomous LLM tool-use across multiple providers.
+ - Built a provider abstraction layer for glass-box reasoning extraction and post-hoc
+ interrogation to probe agent intent.
+ - Designed a 3-prong automated judging pipeline and ran 960 experimental trials.
+ - Quantified a "Stealth Gap": deceptive intent held steady (~62–67%) under high oversight
+ while output-level detectability dropped (47.8% -> 35.6%).
+
+PROJECTS
+------------------------------------------------------------------------
+
+[1] Hybrid-Cloud Research Infrastructure & Zero-Trust Mesh (Jan 2024 — Present)
+ - Operate a multi-node Linux estate (Void, Arch, Ubuntu) unified over a Tailscale/WireGuard
+ zero-trust mesh.
+ - Run 15+ containerized services via Docker Compose with automated backups, resource
+ monitoring, and an NVMe-backed storage tier.
+ - Solved CGNAT reachability using VPS forward proxies without port forwarding.
+ - Built jayrup.me on this stack: Nginx dual-interface serving (HTML vs plaintext) with a Quarto
+ pipeline rendering web and CLI docs from one Markdown source.
+
+EDUCATION
+------------------------------------------------------------------------
+
+University of East London (London, UK)
+BSc (Hons) Data Science & Artificial Intelligence — First-Class Honours (94%) (Sept 2023 — May 2026)
+Relevant Coursework: Math for Computing, Data Structures & Algorithms, Networking, Databases, Big Data, AI
+
+SKILLS
+------------------------------------------------------------------------
+
+Programming: Python, Bash, SQL
+ML / AI: PyTorch, Transformers, Hugging Face, llama.cpp (GGUF quant), LangChain, scikit-learn
+Infrastructure: Docker, Docker Compose, Nginx, Caddy, Tailscale, WireGuard, Quarto
+Systems: Linux (Arch, Void, Ubuntu), Git, rsync, Tmux, Neovim
+
+------------------------------------------------------------------------
+PDF DOWNLOAD: curl -O https://jayrup.me/cv.pdf
+------------------------------------------------------------------------
diff --git a/deploy-docker.sh b/deploy-docker.sh
index 69ccdce..f6ad4b4 100755
--- a/deploy-docker.sh
+++ b/deploy-docker.sh
@@ -51,11 +51,11 @@ docker run --rm \
"$QUARTO_IMAGE" /render.sh
# Static assets bundled in the repo
-mkdir -p public/cv
+mkdir -p public/cv public/assets
cp cv/index.pdf public/cv.pdf
cp cv/index.txt public/cv.txt
-cp assets/dissertation.pdf public/dissertation.pdf
-cp assets/public_key public/public_key
+cp -r assets/* public/
+cp -r assets/* public/assets/
# Deploy status marker — site-visible proof of the last successful deploy
printf 'deployed %s commit %s\n' "$(date -u +%Y-%m-%dT%H:%M:%SZ)" "$SHORT_SHA" > public/last-deploy.txt
diff --git a/deploy.sh b/deploy.sh
index 5fa8abf..9ef565c 100755
--- a/deploy.sh
+++ b/deploy.sh
@@ -36,8 +36,9 @@ cp cv/index.pdf public/cv.pdf
cp cv/index.txt public/cv.txt
# 5. Add assets (static files bundled in the repo)
-cp assets/dissertation.pdf public/dissertation.pdf
-cp assets/public_key public/public_key
+mkdir -p public/assets
+cp -r assets/* public/
+cp -r assets/* public/assets/
# 6. Deploy marker
printf 'deployed %s commit %s\n' "$(date -u +%Y-%m-%dT%H:%M:%SZ)" "$(git rev-parse --short HEAD)" > public/last-deploy.txt
diff --git a/index.qmd b/index.qmd
index d06ad06..bd12083 100644
--- a/index.qmd
+++ b/index.qmd
@@ -1,7 +1,5 @@
---
-format:
- html:
- title: "Jayrup Nakawala"
+title: "Jayrup Nakawala"
---
JAYRUP NAKAWALA
diff --git a/nginx.conf b/nginx.conf
index d4517f5..bae90e3 100644
--- a/nginx.conf
+++ b/nginx.conf
@@ -17,6 +17,32 @@ server {
# Don't leak nginx version on error pages / server header
server_tokens off;
+ # Gzip compression
+ gzip on;
+ gzip_vary on;
+ gzip_min_length 1024;
+ gzip_proxied any;
+ gzip_types text/plain text/css text/xml application/json application/javascript application/xml+rss image/svg+xml;
+
+ # Security headers
+ add_header X-Content-Type-Options "nosniff" always;
+ add_header X-Frame-Options "SAMEORIGIN" always;
+ add_header Referrer-Policy "strict-origin-when-cross-origin" always;
+
+ # Static asset caching
+ location ~* \.(ico|css|js|gif|jpe?g|png|svg|woff2?)$ {
+ expires 30d;
+ add_header Cache-Control "public, no-transform";
+ }
+
+ # Compatibility for assets prefix
+ location = /assets/public_key {
+ try_files /public_key /assets/public_key =404;
+ }
+ location = /assets/dissertation.pdf {
+ try_files /dissertation.pdf /assets/dissertation.pdf =404;
+ }
+
# Serve PDFs directly
location ~* \.pdf$ {
add_header Content-Type application/pdf;
@@ -24,13 +50,13 @@ server {
try_files $uri =404;
}
- # /cv should point to the PDF
+ # /cv should point to the PDF or plaintext cv
location = /cv {
- try_files
- /cv$final_suffix
- /cv/index$final_suffix
- /cv.pdf
- =404;
+ try_files
+ /cv$final_suffix
+ /cv/index$final_suffix
+ /cv.pdf
+ =404;
}
# /dissertation serves summary page or PDF fallback
@@ -43,7 +69,6 @@ server {
=404;
}
-
location / {
try_files
$uri$final_suffix
diff --git a/projects/index.qmd b/projects/index.qmd
index 9b44f24..1b54353 100644
--- a/projects/index.qmd
+++ b/projects/index.qmd
@@ -7,7 +7,37 @@ title: "Jayrup Nakawala | Projects"
</nav>
-## [1] DECEPTIVE ALIGNMENT IN AUTONOMOUS LLM AGENTS \
+## [1] PRIME-GROKKING: PRE-REGISTERED GROKKING STUDY \
+[Git Repository](https://git.jayrup.me/c/prime-grokking.git) | [Blog Series](https://jayrup.me/blog/prime-grokking-1)
+
+Tested whether minimal transformers and RNNs can grok next-prime
+prediction, run like production research: every batch pre-registered
+with commit-locked interpretations before launch.
+
+- Built an idempotent multi-cell sweep runner, batching evaluation 46× faster.
+- Ran a 16-cell PyTorch CUDA/AMP sweep across architectures and weight decay.
+- Executed four pre-registered forensic diagnostics pinning down the exact wall to generalization.
+- Published a 3-part writeup with public, re-runnable repositories.
+
+More: curl [jayrup.me/blog/prime-grokking-1](https://jayrup.me/blog/prime-grokking-1)
+
+--------------------------------------------------
+
+## [2] STRESS-TESTING THE J-SPACE INTERPRETABILITY LENS \
+[Git Repository](https://git.jayrup.me/c/jspace-nanogpt.git) | [Full Writeup](https://jayrup.me/blog/jacobian-lens-frequency)
+
+Independent reproduction of Anthropic's July 2026 J-space/J-lens
+interpretability method on a small PyTorch transformer.
+
+- Discovered that Jacobian norms track token frequency as a primary confound.
+- Designed matched-frequency controls showing contextual predictability remains detectable.
+- Shared with the mech-interp community as a methodology control requirement.
+
+More: curl [jayrup.me/blog/jacobian-lens-frequency](https://jayrup.me/blog/jacobian-lens-frequency)
+
+--------------------------------------------------
+
+## [3] DECEPTIVE ALIGNMENT IN AUTONOMOUS LLM AGENTS \
[GitHub](https://github.com/CaptainJack2491/dissertation) | [Full Summary](https://jayrup.me/dissertation) \
Undergraduate Dissertation (Final Year)
@@ -25,35 +55,23 @@ it drives concealment. Model identity explains 60–83%
of variance. Output monitoring underestimates intent
by 35–46%.
-More: curl jayrup.me/dissertation
+More: curl [jayrup.me/dissertation](https://jayrup.me/dissertation)
--------------------------------------------------
-## [2] SELF-HOSTED INFRASTRUCTURE
+## [4] HYBRID-CLOUD RESEARCH INFRASTRUCTURE & ZERO-TRUST MESH
Personal infrastructure spanning home server and VPS,
-using Tailscale for private access and Docker Compose
-for service orchestration.
+using Tailscale/WireGuard for zero-trust private mesh access
+and Docker Compose for service orchestration.
-Public and private services are segmented cleanly,
-with minimal maintenance and reproducible setup.
+- Unified multi-node Linux estate (Void, Arch, Ubuntu) across homelab, GPU research node, and edge VPS.
+- Automated backups, resource monitoring, NVMe-backed storage, and VPS reverse-proxy ingress bypassing CGNAT.
--------------------------------------------------
-## [3] THREE REWARDS SCRAPER
-
-Found the internal API used by the Three (sim company)
-rewards website and automated collecting rewards using
-a script attached to a cron job.
-
-Worked with JWTs and jq to parse the response. First
-used curl and jq for prototyping and then implemented
-in python for production.
-
---------------------------------------------------
-
-## [4] THIS WEBSITE \
-[GitHub](https://github.com/CaptainJack2491/website)
+## [5] THIS WEBSITE \
+[GitHub](https://github.com/CaptainJack2491/website) | [How This Site Works](https://jayrup.me/blog/how-this-site-works)
A personal website designed to be read from the
terminal. Every page renders as both HTML and plain
@@ -67,4 +85,6 @@ terminal aesthetic.
Stack: Quarto, nginx, Docker Compose, rsync.
Deployed to a VPS with a single shell script.
+More: curl [jayrup.me/blog/how-this-site-works](https://jayrup.me/blog/how-this-site-works)
+
--------------------------------------------------
diff --git a/terminal.css b/terminal.css
index 70da81e..b0ad23e 100644
--- a/terminal.css
+++ b/terminal.css
@@ -1,9 +1,12 @@
:root {
--bg-color: #1a1b26; /* Tokyo Night style */
+ --card-bg: #24283b;
+ --border-color: #414868;
--text-color: #a9b1d6;
--accent-color: #7aa2f7;
--prompt-color: #bb9af7;
- --font-family: 'JetBrains Mono', 'Fira Code', monospace;
+ --quote-color: #cfc9c2;
+ --font-family: 'JetBrains Mono', 'Fira Code', 'Cascadia Code', 'Source Code Pro', Menlo, Monaco, Consolas, monospace;
}
body {
@@ -34,7 +37,7 @@ a:hover {
/* Navbar styling to match the vibe */
nav {
- border-bottom: 1px solid #414868;
+ border-bottom: 1px solid var(--border-color);
padding-bottom: 1rem;
margin-bottom: 2rem;
}
@@ -44,18 +47,81 @@ nav a {
font-weight: bold;
}
+/* Code & Preformatted Blocks */
+pre {
+ background-color: var(--card-bg);
+ border: 1px solid var(--border-color);
+ border-radius: 4px;
+ padding: 1rem;
+ overflow-x: auto;
+ font-family: var(--font-family);
+ font-size: 0.9rem;
+ line-height: 1.5;
+}
+
+code {
+ font-family: var(--font-family);
+ font-size: 0.9em;
+}
+
+:not(pre) > code {
+ background-color: var(--card-bg);
+ color: var(--prompt-color);
+ padding: 0.15em 0.4em;
+ border-radius: 3px;
+ border: 1px solid rgba(65, 72, 104, 0.5);
+}
+
+/* Tables */
+table {
+ border-collapse: collapse;
+ width: 100%;
+ margin: 1.5rem 0;
+ display: block;
+ overflow-x: auto;
+}
+
+th, td {
+ border: 1px solid var(--border-color);
+ padding: 0.5rem 0.75rem;
+ text-align: left;
+}
+
+th {
+ background-color: var(--card-bg);
+ color: var(--accent-color);
+ font-weight: bold;
+}
+
+tr:nth-child(even) {
+ background-color: rgba(36, 40, 59, 0.4);
+}
+
+/* Blockquotes */
+blockquote {
+ border-left: 3px solid var(--accent-color);
+ margin: 1.25rem 0;
+ padding: 0.5rem 1rem;
+ background-color: rgba(36, 40, 59, 0.3);
+ color: var(--quote-color);
+}
+
+/* Horizontal Rules */
+hr {
+ border: none;
+ border-top: 1px dashed var(--border-color);
+ margin: 2rem 0;
+}
+
/* Minimalist container for the "Terminal" feel */
#quarto-content {
- border: 1px solid #414868;
+ border: 1px solid var(--border-color);
padding: 2rem;
border-radius: 4px;
box-shadow: 0 10px 30px rgba(0,0,0,0.5);
}
/* Figures: constrain to the content column, keep aspect ratio, center */
-/* NOTE: with format minimal:true quarto emits .quarto-figure divs directly in
- body — there is NO #quarto-content wrapper in the rendered HTML. Target the
- figure classes + generic imgs, not #quarto-content. */
.quarto-figure {
margin: 1.5rem 0;
}
@@ -86,3 +152,15 @@ body::before {
pointer-events: none;
background-size: 100% 2px, 3px 100%;
}
+
+/* Mobile Responsiveness */
+@media (max-width: 600px) {
+ body {
+ padding: 1rem;
+ }
+ nav a {
+ margin-right: 0.75rem;
+ display: inline-block;
+ margin-bottom: 0.25rem;
+ }
+}