summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaptainJack2491 <jayrupnakawala@gmail.com>2025-12-27 16:39:29 +0000
committerCaptainJack2491 <jayrupnakawala@gmail.com>2025-12-27 16:39:29 +0000
commita2fac7bc0b1a5d825b8ed8d07923a17cb16dc32c (patch)
tree7b38225470d75f950b6ccfcd93b02a1b431acb58
inital commit
-rw-r--r--_quarto.yml12
-rw-r--r--compose.yml15
-rwxr-xr-xdeploy.sh20
-rw-r--r--index.qmd28
-rw-r--r--nginx.conf48
-rw-r--r--projects/index.qmd44
6 files changed, 167 insertions, 0 deletions
diff --git a/_quarto.yml b/_quarto.yml
new file mode 100644
index 0000000..766110e
--- /dev/null
+++ b/_quarto.yml
@@ -0,0 +1,12 @@
+project:
+ type: website
+ output-dir: public
+
+# This tells Quarto: "Every time you see a .qmd, make an HTML and a TXT"
+format:
+ html:
+ theme: none
+ minimal: true
+ embed-resources: true
+ plain:
+ output-ext: txt # This forces the extension to .txt instead of .plain
diff --git a/compose.yml b/compose.yml
new file mode 100644
index 0000000..b884097
--- /dev/null
+++ b/compose.yml
@@ -0,0 +1,15 @@
+services:
+ homepage:
+ image: nginx:alpine
+ container_name: homepage
+ restart: unless-stopped
+ ports:
+ - "8080:80"
+ volumes:
+ - ./:/usr/share/nginx/html:ro
+ - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
+ networks:
+ - nginx_default
+networks:
+ nginx_default:
+ external: true
diff --git a/deploy.sh b/deploy.sh
new file mode 100755
index 0000000..991dd6d
--- /dev/null
+++ b/deploy.sh
@@ -0,0 +1,20 @@
+#!/usr/bin/env bash
+
+# 1. Clear the old garbage
+rm -rf public/
+
+# 2. Render the whole website (HTML)
+# This creates the directories and index.html files correctly
+quarto render --to html
+
+# 3. Render the Plain Text versions manually to ensure mirroring
+# We find every .qmd, and render it to a .txt in the corresponding public/ folder
+find . -name "*.qmd" -not -path "./.*" -not -path "./public/*" | while read -r file; do
+ # Get the directory structure (e.g., ./projects/index.qmd -> projects)
+ rel_dir=$(dirname "${file#./}")
+ # Get the filename without extension (e.g., index)
+ base_name=$(basename "$file" .qmd)
+
+ # Render to plain text directly into the correct public sub-directory
+ quarto render "$file" --to plain --output "${base_name}.txt" --output-dir "public/$rel_dir"
+done
diff --git a/index.qmd b/index.qmd
new file mode 100644
index 0000000..f104ee8
--- /dev/null
+++ b/index.qmd
@@ -0,0 +1,28 @@
+JAYRUP NAKAWALA
+--------------------------------------------------
+Infrastructure & AI Safety–Focused CS Undergraduate
+University of East London
+
+I build and study systems where models act, decide,
+and sometimes misbehave.
+
+Current focus:
+- Agentic LLM behaviour and deceptive alignment
+- AI safety evaluation via controlled environments
+- Self-hosted, reproducible infrastructure
+- Compact and efficient model representations
+
+I prefer tools that run locally, logs that can be
+inspected, and experiments that fail loudly.
+
+--------------------------------------------------
+
+PROJECTS: curl jayrup.me/projects | less
+CV: curl jayrup.me/cv | less
+GITHUB: github.com/CaptainJack2491
+LINKEDIN: linkedin.com/in/jayrupnakawala
+EMAIL: jayrupnakawala@gmail.com
+
+--------------------------------------------------
+
+Feel free to reach out!
diff --git a/nginx.conf b/nginx.conf
new file mode 100644
index 0000000..cf4b30e
--- /dev/null
+++ b/nginx.conf
@@ -0,0 +1,48 @@
+server {
+ listen 80;
+ server_name jayrup.me;
+
+ root /usr/share/nginx/html;
+ index index.html;
+
+ # Helper variable: detect text clients
+ set $want_text 0;
+
+ if ($http_user_agent ~* "(curl|wget)") {
+ set $want_text 1;
+ }
+
+ if ($http_accept ~* "text/plain") {
+ set $want_text 1;
+ }
+
+ # Home
+ location = / {
+ if ($want_text) {
+ rewrite ^ /index.txt break;
+ }
+ try_files /index.html =404;
+ }
+
+ # Projects
+ location = /projects {
+ if ($want_text) {
+ rewrite ^ /projects.txt break;
+ }
+ try_files /projects.html =404;
+ }
+
+ # CV
+ location = /cv {
+ if ($want_text) {
+ rewrite ^ /cv.txt break;
+ }
+ try_files /cv.html =404;
+ }
+
+ # Force correct type for text files
+ location ~ \.txt$ {
+ default_type text/plain;
+ }
+}
+
diff --git a/projects/index.qmd b/projects/index.qmd
new file mode 100644
index 0000000..e7c9113
--- /dev/null
+++ b/projects/index.qmd
@@ -0,0 +1,44 @@
+PROJECTS
+==================================================
+
+[1] DECEPTIVE ALIGNMENT IN AUTONOMOUS LLM AGENTS
+Undergraduate Dissertation (Final Year)
+
+Built an agentic LLM framework to study hidden goal
+pursuit under conflicting in-context instructions.
+Agents operate in a sandboxed virtual file system
+with constrained tools and full behavioural logging.
+
+Experiments vary perceived oversight levels and
+analyse deceptive tactics using:
+- deterministic text filters
+- black-box LLM judges (user perception)
+- glass-box reasoning vs output analysis
+
+Focus: AI safety, evaluation methodology, detectability
+of hidden goals.
+
+--------------------------------------------------
+
+[2] SELF-HOSTED INFRASTRUCTURE
+
+Personal infrastructure spanning home server and VPS,
+using Tailscale for private access and Docker Compose
+for service orchestration.
+
+Public and private services are segmented cleanly,
+with minimal maintenance and reproducible setup.
+
+--------------------------------------------------
+
+[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 implimented
+in python for production.
+
+--------------------------------------------------