Alex Byun ยท Sydney

Final-year CS student, looking for graduate work in AI, data and software.

I build AI agents, data pipelines and the tooling around them, then run them every day. Some of it ships. All of it is real.

About

The short story.

I am Alex, a final-year Computer Science student in Sydney, finishing at the end of 2026. Last year I noticed I was a person with strong ideas and nothing shipped, so I changed how I work: I build with AI as a daily collaborator, in public, with dates on everything. The projects on this site are the result and the pace is the point. I study part-time and schedule classes outside working hours, so I am available for full-time work now.

I am looking for graduate and junior roles in AI engineering, data, and software: building the systems around a model, moving data from a messy source into something a program can trust, and making the whole thing hold up in production. The projects on this site are my evidence. I document obsessively, I verify before I call something done, and I am comfortable saying an approach failed when the numbers say it failed. I have also spent years in frontline retail and hospitality, so explaining a technical thing to a person who does not want a lecture is familiar work.

Process

How I work.

Building with AI as a daily collaborator is a discipline, not a shortcut. These are the rules I hold myself to.

Build in public

Everything gets a date and a public trace: a repo, a post, a line in the build log below. Consistency is easier to prove than talent.

Human gates where taste matters

I automate aggressively but keep approval steps wherever quality is a judgement call. The pipeline serves the taste, not the other way around.

Verify before done

Nothing is finished until it runs end to end and the docs let a stranger (or a memoryless AI) pick it up cold.

The build log.

Dated, public, and honest. This is the pace I actually ship at. Open a month for the full list.

October 2026 2 entries A habit-tracker product generated from a script, its formulas proven against live Google Sheets A carousel courier and a WebGL renderer that only worked once I watched them fail
  1. Built the last mile for my carousel posts: a courier that sends finished slides to my phone byte-exact, and a renderer for animated gradient backdrops. Both only worked once I watched them fail. Headless Chrome screenshots a WebGL page before its first frame paints and silently saves a flat image, so the renderer checks every frame and retries until the real one lands. The slide renderer handed Chrome a relative path, which Chrome resolves against its own folder, so it reported success while writing nothing. "It printed done" is not evidence.
  2. Generated a habit-tracker spreadsheet product from a script: 16 tabs, 1,935 formulas. The first design, a month dropdown over one grid, looked right and was wrong: changing the month silently re-dated everything already entered, so it became one tab per month with no shared grid for data to cross. My generator could write formulas but not run them, so I tested the arithmetic against live Google Sheets with a hand-checkable fixture, and 11 of 11 matched. Until then the honest status was "structure verified, arithmetic not", and three bugs had shipped under that caveat.
September 2026 13 entries Cut my AI agent workspace's per-session token cost by about 69% without deleting a byte Turned the avatar content pipeline into a repeatable workflow: 24 references in, 11 finished reels out Took a paid product's site from a dead end to a buyable store, and proved the advertised price is the charged price
  1. Cut the per-session token cost of my 41-folder AI agent workspace by about 69%, from roughly 153k tokens of orientation to 48k, without deleting anything. The cost was invisible because it was not one big file: the model resends the whole conversation on every tool call, so one large read early on was paid again on every turn after it. I profiled what actually loaded, split the hot files behind small generated indexes, and proved nothing was lost with counts instead of review: 419 log entries in and out, 199 open tasks in and out.
  2. Built cookie-free funnel analytics for Braindock's site on a Cloudflare Worker: page views, traffic source, scroll to the price, buy clicks and downloads. The first version kept one counter per day and lost one of two hits in its own self-test, because the storage caches reads for about a minute. I rebuilt it as one record per hit with the counts carried in the listing, so a total never depends on a stale read.
  3. Built a Shopify store generator where consumer law is part of the build, not a checklist. One product file renders three page layouts plus paste-ready sections. The courses I learned from treat fake reviews and inflated "was" prices as standard, so the generator refuses a compare-at price with no sales evidence, a review with no order behind it, or a claim with no recorded basis. It writes down what it dropped, and I tested it against five failure cases.
  4. Upgraded the avatar content pipeline into a repeatable production workflow: a reference library that turns a viral reel into a scene-by-scene rebuild spec, scene counts measured with ffmpeg to pick the generation method, and a ledger that marks each reference used so nothing is proposed twice. First batch: 24 references in, 11 finished reels out, in one session. The bug worth telling is a generation call that reported success with the character's identity silently dropped; the fix is reading back the parameters the API actually used, because an accepted call is not an applied one.
  5. Gave my Telegram capture bot an honest receipt. Seventeen links went in across two messages and thirteen arrived, with every note from the second message missing. The Worker stores the raw payload verbatim and the first message's prose arrived intact, which put the loss on the sending side, before the server ever saw it. The cause is still unproven, so I shipped detection rather than a guessed repair: the reply now reports how many links and note lines it actually stored, so a short message is visibly short at send time instead of days later.
  6. Built a harvester for public exam marking feedback across 12 subjects and 7 years. The marker commentary is no longer a PDF for most subjects but an accordion rendered on each year's page, and the subject index only exists in JavaScript, so page addresses were probed by request and the accordion flattened to Markdown with the standard library alone. Syllabus documents span three generations of URL scheme, all handled from one map, and the whole 256 MB set re-fetches in one command.
  7. Fixed an image-to-video model animating the one thing that had to stay still, at no cost. The model rotated an observatory dome in an ambient loop on two renders in a row, which would have snapped back roughly 1,540 times across a three-hour video. The standing rule, leave the static object unmentioned so there is nothing to animate, had been followed and did not hold: the model animates what an object does in the real world, and domes rotate. Instead of a third paid render I composited the original still back over the building through a feathered mask in one ffmpeg pass. Motion in the dome dropped from 11.25 to 2.49 while the sky stayed at 10.44, checked frame by frame.
  8. Built a way for a voice note from my phone to correct the documents an AI agent is about to act on. It looked like it needed a new deploy and did not: the capture Worker already stored every Telegram update verbatim, so voice notes had been sitting there unread since July, and its acknowledge endpoint took explicit ids, which let a second consumer share the queue without either one eating the other's messages. A Python puller downloads the audio, transcribes it on my own machine with faster-whisper, and acknowledges nothing until the text is filed. Raw transcripts are append-only as the audit trail; one distilled page is what the agents read.
  9. Took Braindock's website from a dead end to a live, buyable store, and proved the price it advertises is the price it charges. The homepage was still the pre-launch waitlist form seven weeks after the product went on sale, so every visitor from the bio landed somewhere with no way to buy. The checkout prices could not be read at all, because a plain fetch returns the same JavaScript shell for every payment link, so I rendered both in headless Chrome to watch the real price paint. The deploy zip on disk was five weeks old and would have reverted the site, and a second tier's delivery page was missing from it entirely, which would have taken money and served a dead page. Both were caught by diffing the archive against the working tree instead of trusting its timestamp, and the release check now verifies all 19 paths from a clean extract.
  10. Built a local app that turns my own goals into an RPG with focus timers, XP and ranks. The point was not the timer: the accountability system it feeds could only ever ask what I did and believe the answer, so areas read "last moved: never" while real work went unrecorded. Every number is derived from an append-only session ledger rather than stored, so the scoreboard cannot drift from what actually happened, and it reads the source-of-truth file read-only so a new build cannot corrupt it. Phone app-blocking was researched and refused as specified, because it needs a native entitlement a web page cannot have. A CSS cascade bug had been live since the first version, a class-level display rule silently overriding the browser's hidden default, which exposed that my tests covered the API exhaustively and the rendering not at all. UI is now verified by headless screenshot.
  11. Built a cross-project knowledge library where the hard part was the direction of the link. A correct, current, linked document had already sat unread for ten weeks while four accounts were wired to publish against its advice, so notes now carry a table naming every file that depends on them, and ingesting a source walks that table and shows me what the new material actually beats before anything is edited.
  12. Root-caused a four times cost overrun and a silent content bug in the video pipeline. The spend looked correct at every checkpoint, because the API's own cost preflight returned a figure that did not match what was actually billed, so the only reliable measurement was the balance before and after.
  13. Fired the Instagram publish chain live for the first time, then found the three platform limits that make full auto-publish wrong for this account and replaced it with a phone hand-off. Also shipped a short-clip layer on the video pipeline: the channel's whole look is a wide panoramic sky that a naive vertical crop destroys, so the clips are composed rather than cropped, and they cost nothing to produce.
August 2026 19 entries Shipped an AML alert-ranking system, and caught two leaks that were flattering my own results Turned market-cycle and Wyckoff theory into testable code, then measured which half of it holds Published the data-engineering half of a private scanner as its own open-source repo
  1. Built a local-first study PWA end to end across eight slices: React, TypeScript, Vite and Dexie over IndexedDB, bring your own API key, works offline. 202 tests with no test framework, written as plain assertions so the suite has no dependency of its own.
  2. An idea-to-project pipeline went live: a texted idea is researched, gated by an approval press on my phone, and only then given a folder and a machine-checkable job spec. Its first promoted output was a real fix for the capture bot. 98 tests.
  3. De-coursed the flashcard engine so any subject can use it. Its course-specificity was structural rather than cosmetic, a hardcoded dictionary the whole build step read from, and I proved the rebuild on a deck from a subject I have never studied.
  4. aml-alert-triage went public: it ranks anti-money-laundering alerts so the top ten percent of the queue reaches 95.3% of real cases, explains every score in plain English, and hash-chains every decision. The work worth telling is that I caught myself cheating twice, and both leaks made the results look better. The label was recoverable from one column, and a feature was reading the future. Removing the look-ahead raised the score from 0.827 to 0.895, so the honest version was also the better one. Accuracy is deliberately not reported, because a model that flags nothing scores 92.67% here.
  5. The trading bot now records what it did and runs itself. The journal had to match the diary the strategy's own community uses, which was not in the course at all and turned up as a spreadsheet link in a forum thread, so the real schema could be mirrored rather than invented. Backfilling a real round trip exposed the honest limit: the stop I intended at the time was never written down, so those rows carry no result multiple, because a guessed stop would make every number on the dashboard fiction. The bug worth telling is a function called one line above the constant it depended on, which killed the whole script while the page still rendered, so it read as missing data rather than a crash. A syntax check passed it. A screenshot found it in four seconds. 247 tests.
  6. Built a crypto trading system on market-cycle and Wyckoff theory, with a local paper-trading terminal, then spent most of the work measuring which parts of the theory actually hold. The confirmation signals beat a matched control by roughly 2x on profit factor. One timing parameter did not reproduce at all, and a walk-forward showed one asset falling from 7.56 to 1.30 out of sample. I also caught a data trap that would have poisoned every signal, because the venue I intended to trade on prints phantom lows that the pivot detector reads directly. Live trading is gated off in five separate code paths until the evidence says otherwise. 216 tests.
  7. AlexOS v1.3: agents can hold a conversation now. Every run's stream already carried a session id and the server was throwing it away, so an agent forgot you the moment it answered. Follow-ups resume that exact session, and the expensive multi-agent threads persist to disk so a restart no longer destroys them. 21 of 21 end-to-end, including an agent recalling a token from an earlier turn.
  8. Caught a misattribution on this site: a project page described an open-source video editor as my build. The repo history says one commit, by its actual author, and none by me. I had already credited him elsewhere three weeks earlier, but nothing was checking the site, so the page kept serving the claim. Rewritten around the part that is genuinely mine, upstream credited, and the rule written into my job-hunt notes so a future me cannot regress it. An unearned line is worse than a missing one.
  9. braindock.co went live on its real domain. The bio link was not returning a 404, it was serving the registrar's parking page, which reads as abandoned. Diagnosed by DNS lookup, moved the hosting, and verified the whole path end to end including SSL.
  10. Flashcard engine v2: spaced repetition with an exam cap. Plain SM-2 pushes a well-known card days out, which with an exam on Friday means it is never seen again before it counts, so every interval is clamped to a fraction of the time remaining. Rebuilt from one hand-written file into a template and data pipeline, with the real lecture diagrams cropped in under the cards that need them.
  11. todo-viz open-sourced: a browser checklist that writes every tick straight back into the Markdown file, with atomic writes and a conflict guard so a concurrent edit is rejected rather than clobbered.
  12. market-data-scanner published as a public repo: the data-engineering half of a private scanner, carved out on its own. The hard part was proving nothing leaked, because the strategy in the private version is someone else's intellectual property. Signal logic, config and theory excluded, every reference scrubbed from the surviving comments, re-scanned to zero before pushing. What is public is real engineering: async exchange adapters, one candle model, a rolling store that rejects still-forming, duplicate and out-of-order candles, 49 tests.
  13. Built two offline flashcard apps from raw course notes, each with an explain-it-like-I-know-nothing layer written for every card. Self-contained, no build step, works with no internet once opened, and reskins to any subject by swapping one data array.
  14. Web agency lane opened: audited a live business site (27 concrete issues, no working contact form), then built a 5-page replacement demo and the agency's own site the same day.
  15. Braindock carousels built on a new render pipeline, with a claim guard that blocks any statement I cannot back with a real number.
  16. ai-avatar-pipeline open-sourced: the whole avatar content pipeline written up as a public case study, with third-party parts credited rather than claimed.
  17. Two videos shipped in a day across both channels; the old boomerang loop retired for crossfade-only assembly after the seam showed on a big screen.
  18. Braindock funnel diagnosed properly: 67k views and no sales traced to a profile that sold nothing. Guide and PDF rebuilt and redeployed.
  19. First avatar reel built end to end: stills, motion, ffmpeg overlays, delivered to my phone for review.
July 2026 19 entries Root-caused a live duplicate-message incident on an Instagram automation serving a 57k-view post Self-hosted that automation across Vercel, Railway, Postgres and Redis, replacing a paid SaaS Trading Scanner added a second market as an adapter, not a rewrite
  1. Root-caused a live incident on my Instagram automation: duplicate replies and DMs going out on a post with 57k views, every one logging as failed. The cause was not in my code. A second tool was still connected to the same account, double-firing on every comment, and because Instagram allows exactly one private reply per comment, its message landed first and mine came back as an API error. The tell was a missing emoji on the duplicate's button. Two real bugs found on the way and fixed: a retry storm, and a race between the webhook and the polling job claiming the same comment.
  2. Two weeks of channel analytics turned into a strategy: subjects and titles now picked from what the numbers say, not from taste.
  3. Self-hosted that automation end to end instead of paying for it: web app on Vercel, queue worker plus Postgres and Redis on Railway, transactional email and a published Meta app. The worker is a separate service because a queue consumer has to stay awake and serverless sleeps. Four deploy failures worth remembering, including a build that pruned the runtime dependencies and an encryption key that has to be byte-identical across two services or every message fails to decrypt.
  4. Fixed a product ladder in code rather than copy: the free tier was cannibalising the paid one, so the rebuild shipped with seven guards in the verification script that fail the build if it ever happens again.
  5. Telegram capture got per-project routing: replies land in the right topic instead of one flat inbox.
  6. overnight-agent went public: a verify-gated pipeline for unattended AI runs, built around five named failure modes.
  7. Eight new project pages deployed to this site, taking the portfolio from seven builds to fifteen.
  8. Per-channel OAuth clients killed a recurring token-expiry failure for good, instead of re-authorising every few days.
  9. Braindock v1 went live and purchasable: payment wired, site deployed, the whole path from ad to download working.
  10. Trading Scanner hit 143 passing tests with the signal gates reordered to match how the strategy is actually traded.
  11. A 134-lesson trading course scraped and distilled into 18 concrete scanner rules: research turned into something executable.
  12. overnight-agent proven on two live runs: verify-gated, reporting back to my phone when it finished.
  13. A mobile app built to a working end-to-end state in one session: forked, wired to a backend, 11 of 11 tests green.
  14. Trading Scanner added the Korean market with no API key and no rewrite: 2,768 stocks behind a new adapter, 117 tests.
  15. Whole-workspace reorganisation: one roadmap, one to-do list, one plain-English explainer for a system that had grown past what I could hold in my head.
  16. Murmur shipped: local dictation for Windows, on-device Whisper, live-tested and a real input-layer bug fixed.
  17. First YouTube channel launched, with the first long-form video published through the pipeline that builds it.
  18. AlexOS went public in beta: five Markdown-defined agents running in parallel as real headless Claude processes.
  19. log-triage shipped and this site went live: a zero-dependency CLI that ranks and explains a messy log, and a portfolio built in a day.
June 2026 8 entries Brain Dashboard built and open-sourced: the home base everything else runs from My first autonomous cloud agents, running on a schedule without me Started building in public, with a date on everything
  1. Telegram idea-bot created so an idea I have away from the desk survives the walk back to it.
  2. Built my first autonomous cloud agents: a daily Morning Brief email and a Sunday Weekly Wrap, running on a schedule without me.
  3. planner MVP shipped the same day it was scoped: one self-contained HTML file.
  4. job-ad-extractor shipped: prompt versioning, a validation gate, and an eval harness around a single model call.
  5. claude-session-continuity open-sourced: durable memory for a tool that forgets everything between sessions.
  6. Brain Dashboard open-sourced as a public repo.
  7. First build-in-public post live on X and Instagram: the start of putting a date on everything.
  8. Built the Brain Dashboard: the local Jarvis home base everything else runs from.

The systems behind the tools.

These run my actual life, so the content stays private. The architecture is public and written up as case studies.

Second Brain: a personal accountability engine

An Obsidian vault where a CLAUDE.md behaviour spec turns the assistant into an accountability coach. A daily /checkin skill reviews yesterday's commitments, forces dated ones for today, and files the record. Built to fix my own follow-through problem; used every day. The behaviour is the product, the notes are just its memory.

Read the case study →

Morning-brief agent: an email that writes itself

A scheduled Claude Code cloud agent that reads my calendar, inbox, to-dos and the weather each morning and emails me a brief before the day starts, plus a strategic Sunday wrap. The whole behaviour is defined in two Markdown spec files: edit a bullet, the brief changes. No code to redeploy.

Read the case study →

study-brain: an LLM-maintained study wiki

A study system with a strict division of labour: I curate sources and ask questions, the AI writes and maintains the entire wiki. Every practice and exam question gets answered and linked back to the concept it tests, written beginner-first so revision compounds instead of evaporating.

Read the case study →

Telegram capture: ideas from my phone to my vault

A capture pipeline: message a Telegram bot from anywhere, a Cloudflare Worker webhook stores it in KV, and my local system ingests it into the right vault with an acknowledgement back. Built because ideas die in the gap between having them and being at the computer.

Private pipeline; writeup on request.

Portfolio

Things I built.

Proof over credentials. Each of these is public code or a working system on my machine, and most of them run daily. Click through for the full story, including an honest note on what it took to build.

Trading Scanner

A scanner that keeps the strategy and the data apart.

Thousands of symbols, multiple timeframes, breakout signals in real time. Ports-and-adapters core, 140+ tests, keyless data feed. The data engine is open source; the strategy is not.

multi-week buildFull story →

Cycle Bot

A theory I believe in, held to evidence anyway.

Market-cycle and Wyckoff theory turned into testable components, then measured against a control and a walk-forward, so I know which parts hold and which I had only assumed.

multi-week buildFull story →

AML Alert Triage

Ninety percent of the queue is noise. This decides what to open first.

Re-ranks a compliance alert queue so the top 10% reaches 95.3% of real cases, explains every score in plain English, and hash-chains every decision. I found two leaks flattering my own results, and fixing the second one raised the score.

multi-week buildFull story →

AlexOS

Five AI agents that run my workspace in parallel.

Markdown-defined agents run as real headless Claude processes, debate in Mastermind rounds, and only the server may write memory.

multi-week buildFull story →

Braindock

A digital product, and the factory that makes its ads.

A paid product shipped end to end, plus a pipeline that renders eight branded promo reels from one JSON spec.

multi-week buildFull story →

Instagram Comment Gate

I stopped paying for the SaaS and ran it myself.

Self-hosted across Vercel, Railway, Postgres and Redis, then root-caused a live duplicate-message incident on a post at 57k views.

two-day build, live sinceFull story →

overnight-agent

Hand an agent a job at night, wake to a verified result.

Dispatch, watchdog and report for unattended AI runs, with an independent verify gate that never trusts the worker's word.

multi-week buildFull story →

Avatar Factory

One content engine, swap a file to change the whole channel.

A persona-driven video pipeline: face-consistent generation, agent-driven editing, reskinned to a new niche by one config file.

multi-week buildFull story →

Reel Compiler

Ad reels compiled from a text file, not cut by hand.

Words in a JSON file become finished vertical mp4s, and a claim guard fails the build on any number I cannot back.

multi-week buildFull story →

morning-brief-agent

A daily brief that writes itself and emails me.

A scheduled cloud agent over Gmail and Calendar via MCP. Behaviour is a Markdown spec, and it fails loud instead of inventing.

living systemFull story →

telegram-idea-capture

An idea inbox that never drops a thought.

A Cloudflare Worker and KV webhook that captures Telegram messages durably at the edge, even with my PC off.

living systemFull story →

Brain Dashboard

A local Jarvis for every project on my machine.

Chat with Claude, a real embedded terminal, project context switching, live token costs.

living systemFull story →

Interactive Life Planner

A weekly planner that asks whether you actually did it.

Time-block your week, then answer for every block: done, or skipped? AI plans from a brain dump.

weekend hackFull story →

content-factory

One AI orchestrator, four tools, a finished video at the end.

Claude drives music, visuals and FFmpeg assembly through one pipeline, with human approval gates.

multi-week buildFull story →

claude-session-continuity

Memory for a tool that forgets everything.

Custom skills that give Claude Code a durable cross-session memory over one Session Diary.

living systemFull story →

job-ad-extractor

The reliability layer around an LLM call.

Messy job ad in, strict validated JSON out. Prompt versioning, schema gates, an eval harness.

weekend hackFull story →

log-triage

Paste a messy log, get a ranked diagnosis.

Distinct issues ranked the way a support engineer would, each with a likely cause and next command.

weekend hackFull story →

todo-viz

A checklist that writes straight back into the file.

Tick a box in the browser and the edit lands in your Markdown to-do file, safely, with atomic writes and a stale-edit conflict guard.

weekend hackFull story →

Flashcard Engine

Spaced repetition that knows when the exam is.

Offline, one file, no install. Every interval is clamped to the time left before the exam, so a well-known card cannot hide past the day it counts.

weekend hackFull story →

Murmur

Dictation that never leaves your machine.

Hotkey, talk, and cleaned-up text lands at your cursor. On-device Whisper, no cloud, no subscription.

weekend hackFull story →

Contact

One email, no forms.

If you are hiring for a graduate or junior role in AI, data or software in Sydney, or you want to talk about anything on this site, I read everything.

kimjay2288@gmail.com