diff options
| -rw-r--r-- | _quarto.yml | 12 | ||||
| -rw-r--r-- | compose.yml | 15 | ||||
| -rwxr-xr-x | deploy.sh | 20 | ||||
| -rw-r--r-- | index.qmd | 28 | ||||
| -rw-r--r-- | nginx.conf | 48 | ||||
| -rw-r--r-- | projects/index.qmd | 44 |
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. + +-------------------------------------------------- |
