diff options
| author | CaptainJack2491 <jayrupnakawala@gmail.com> | 2026-09-02 11:00:42 +0100 |
|---|---|---|
| committer | CaptainJack2491 <jayrupnakawala@gmail.com> | 2026-09-02 11:00:42 +0100 |
| commit | 0ee667ac6cb2493e4f9ddaa5b69f595071aca936 (patch) | |
| tree | 9051ebe3279544efe4ba228aa311b6bf41d4f7d3 | |
| parent | e7dc4befde5bef83d198a631926174bae612f866 (diff) | |
fix: title frontmatter, terminal resume, project list sync, nginx hardening, and stylesfixes/titles-nav-typos
| -rw-r--r-- | assets/favicon.svg | 4 | ||||
| -rw-r--r-- | assets/robots.txt | 2 | ||||
| -rw-r--r-- | cv/index.txt | 67 | ||||
| -rwxr-xr-x | deploy-docker.sh | 6 | ||||
| -rwxr-xr-x | deploy.sh | 5 | ||||
| -rw-r--r-- | index.qmd | 4 | ||||
| -rw-r--r-- | nginx.conf | 39 | ||||
| -rw-r--r-- | projects/index.qmd | 62 | ||||
| -rw-r--r-- | terminal.css | 90 |
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 @@ -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 @@ -1,7 +1,5 @@ --- -format: - html: - title: "Jayrup Nakawala" +title: "Jayrup Nakawala" --- JAYRUP NAKAWALA @@ -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; + } +} |
