Vuyo Kwakweni

Computer scientist ready for takeoff

From data analysis to system design, a recent graduate who thrives on novel problems.

Plan for growth, test early, run it like it's live

  1. 1Rolling Grouped effect sizes Donethesis, 2026
  2. 2Logger's World Serverless CDK Live7-day build
  3. 3Turaco Chorus Ports and adapters CDK Live
  4. 4AskYimalini LGLI Hybrid RAG In progressverifier planned

Use the arrow keys or the bar at the top to move between platforms.

Platform1

Rolling

BSc Computer Science thesis, University of Pécs (Hungary), 2026

Delving into sports science using Ethics by design

With small data, descriptive over prescriptive.

  1. The problem: small, domain-specific datasets, where big methods overreach.
  2. The first case: menstrual pain and hormone levels in elite athletes, and whether they relate to performance.
  3. The design: an analysis engine with no web or database code, built for this study, with room to grow.
  4. The rule: the optional AI step only ever sees the aggregated results.

LessonAlways sanity check your logic.

OpenAIOllama

In the product: an optional step that sends only aggregated results to OpenAI or a local Ollama model, to rewrite the report.

Building it: I built the analysis to be mathematically sound, and AI makes the results easy to read.

How Rolling analyses a dataset An analyst uploads a dataset, observations are grouped, statistics are calculated, results are mapped to plain-language conclusions, and an optional AI step rewrites only the aggregated results. UploaddatasetGroupobservationsStatisticseffect sizesPlainconclusionsAI, optionalaggregatesonly

Synthetic data · seed 2026 · not real participants

1 · Grouping

One hormone split by cycle phase and training season, with uneven group sizes Oestrogen, 103 observations, is split by cycle phase and then by training season into eight groups. High intensity: menstrual 22, follicular 19, ovulation 12, luteal 22. Off season: menstrual 11, follicular 8, ovulation 4, luteal 5. Groups with fewer than six observations are shown in amber. OESTROGEN103 observations split by cycle phase MenstrualFollicularOvulationLuteal then by season High intensityOff season n = 22n = 19n = 12n = 22n = 11n = 8n = 4n = 5

2 · Reporting

Hormone by Performance Type and Cycle Phase
OESTROGEN in 'MENSTRUAL' with HIGH INTENSITY: n=22, mean=39.59, sd=5.55
OESTROGEN in 'FOLLICULAR' with HIGH INTENSITY: n=19, mean=87.18, sd=19.53
OESTROGEN in 'OVULATION' with HIGH INTENSITY: n=12, mean=159.96, sd=18.96
OESTROGEN in 'LUTEAL' with HIGH INTENSITY: n=22, mean=113.00, sd=17.24
OESTROGEN in 'MENSTRUAL' with OFF SEASON: n=11, mean=34.42, sd=6.16
OESTROGEN in 'FOLLICULAR' with OFF SEASON: n=8, mean=87.02, sd=18.51
OESTROGEN in 'OVULATION' with OFF SEASON: n=4, mean=158.84, sd=32.57
OESTROGEN in 'LUTEAL' with OFF SEASON: n=5, mean=109.56, sd=25.03

3 · AI-augmented reporting mock-up

Sent to the AI: hormone_name observation_count mean median standard_deviation hedges_g independent_t never the raw measured values

Platform2

Logger's World

Log any habit, your way.

7-day build · 6 AWS servicesinside the free tier

  1. The plan: a seven-day roadmap, one lifecycle phase a day.
  2. The early catch: I changed the sign-up rule while there were zero users, not after.
  3. The trade-off: no Amplify in Africa, so the front end goes via Ireland and the API stays close.

LessonGet the stack right early, then spend your time on what users see.

In the product: none of its own. Its Wonder page calls Turaco Chorus, the next stop.

Anthropic · Claude Code

Building it: Using Anthropic's Claude Code as a coding assistant, I could design my abstract data types and streamline code writing.

Logger's World architecture A React app in the browser loads its files from Amplify Hosting, signs in through Cognito, and calls an Express API on Lambda with a token. The API reads and writes a single DynamoDB table. BrowserReact app Amplifystatic files Cognitosign-in LambdaExpress API DynamoDBone table filestokenREST + token
Logger's World: the whole backend is defined in code (AWS CDK) and deployed by GitHub Actions on every merge.
The Logger's World landing page: a dark green page with the app's tree-log logo, the heading Logger's World, the line 'A quiet clearing for everything you want to keep track of', two buttons, Start logging and Log In, and three cards headed Log anything, See your patterns and Yours, always.
The live landing page.
Platform3

Turaco Chorus

Microservice for insights.

5 ports · 2 AI providers

  1. The rules: consent first, the AI sees only counts, every request is audited.
  2. A stale image crash-looped the first deploy for about two and a half hours.
  3. A rolling update that can never finish on a single instance.
  4. A silent failure: everything reported healthy, and the service was unreachable.

LessonA healthy dashboard can lie. Do manual user-level walk-throughs.

AnthropicGoogle Gemini

In the product: answers come from Anthropic's Claude or Google's Gemini, switchable, and the model only ever sees counts.

Building it: Using Anthropic's Claude Code as a coding assistant, I could design my abstract data types and streamline code writing.

Still in progress: actively developing features and refining auditing.

A call to Turaco Chorus

POST /ask
Authorization: Bearer <jwt>
Content-Type: application/json

{ "question": "How many books and movies did I watch in August?" }
{
  "answer": "You read 2 books and watched 2 films this August.",
  "dataUsed": {
    "statsQueried": ["Books", "Films"],
    "range": { "from": "2026-08-01", "to": "2026-08-31" }
  }
}

The AI saw only counts: Books 2 Films 2 Other 4

Consent first
Counts only
Every request audited
  • Identity
  • Consent
  • Data
  • AI
  • Audit

The core talks to five ports. Each has swappable adapters.

Platform4

AskYimalini

Municipal expenditure explained to residents.

177 official documents · 30,725 pagesfrom 9 municipalities, 2021 to 2024; 6 ingested so far

  1. The idea: answers about municipal expenditure that you can trace and trust.
  2. The catch: 23 empty tables turned out to be the main financial statements, pasted in as pictures.
  3. The trade-off: a reranker moves the right page up, but costs about 18 seconds a question.
  4. The question: can AI models even reach these sources? Planned, and to be published.

LessonQuestions matter as much as answers.

Anthropic

In the product: Anthropic's Claude writes the answers; the search models run locally.

Building it: AI helped with writing code and tests, and drafting the evaluation questions. I decided the design at every step and checked each answer against its page.

Where it stands: still setting up the corpus, but the app skeleton is up.

How AskYimalini answers Three steps: numbers are computed by code, documents are cited by page, and a check runs before an answer is shown. The check is planned and not yet built. Numberscomputed by code Documentscited by page Checkedbefore shown(planned)
The rules: the model explains, code does the arithmetic, and every figure and quote can be traced.
How AskYimalini builds its corpus and answers from it Building the corpus: documents are parsed locally with Docling and OCR, chunked one page each, embedded locally with BGE-M3, and stored in Postgres with pgvector and keyword search, skipping unchanged files. Answering: a question is searched by vector and keyword, reranked, returned as passages cited by page, and Claude writes the answer. BUILDING THE CORPUS Documentsscanned PDFsParseDocling + OCRChunkone page eachEmbedBGE-M3, localStorePostgres versioned ingestion: unchanged files are skipped ANSWERING Questionplain wordsSearchvector + keywordRerankBGE rerankerPassagescited by pageClaudewrites answer
Right page in the top five results Share of 40 hand-checked questions where the right page appears in the top five results: vector search 75 percent, keyword search 80 percent, the two combined 85 percent, combined and reranked 87.5 percent. Right page in the top 5 (40 hand-checked questions) VectorKeywordCombinedCombined + rerank 75% 80% 85% 87.5%
Source: eval/results/retrieval-*.json. Measured on this machine, one author, six documents.
The AskYimalini sources site: a dark green page titled Our sources, and how they behave, with a transit-map of twelve sources.
The live sources site.

What connects them

My approach broken into five checks

Checked before every departure

How I work with AI

  • Coding assistant
  • Insight engine
  • Chatbot
  • Agent

Curious about my progress?

Logos belong to their owners (Anthropic, OpenAI, Ollama, Google). Icon data from the Simple Icons set.