You are browsing as a guest. Sign up (or log in) to start making projects!

Kaorii

@Kaorii

Joined June 15th, 2026

  • 21Devlogs
  • 15Projects
  • 8Ships
  • 90Votes
Open comments for this post

4h 59m logged

Devlog

2026-07-31 — Ported training to actual hardware, kicked off full run

The training pipeline (README, configs/qlora.yaml) was written for a 16 GB
AMD RX 6800 XT (ROCm, gfx1030). This machine has no such card — its only GPUs
are an NVIDIA RTX 5060 Laptop (8 GB, CUDA) and a weak AMD iGPU. The config’s
RDNA2-only choices were actively hurting: fp16-only, 4-bit disabled, and
flash-linear-attention never installed.

Changes:

  • Installed CUDA torch (2.13.0+cu130) instead of the ROCm wheel.
  • Installed flash-linear-attention — enables the Gated-DeltaNet fast path
    transformers otherwise silently falls back from (up to ~18x slower per the
    README’s own measurement). Added to pyproject.toml.
  • configs/qlora.yaml: re-enabled quantization.load_in_4bit and switched
    compute_dtype to bfloat16. Both were disabled specifically for RDNA2’s
    missing bf16-dot instruction, which doesn’t apply on NVIDIA. Drops base
    weights ~8.1 GB → ~2.6 GB.
  • 00_check_env.py: was ROCm-only and hard-failed a working CUDA setup
    (/dev/kfd checks, “torch is a ROCm build”). Branched it so AMD-only gates
    no longer block a valid NVIDIA run; VRAM threshold now reads the actual
    load_in_4bit setting instead of a hardcoded 15 GB.
  • max_seq_length: 2048 → 1024. Smoke run measured 6.64/7.5 GB peak VRAM
    at 1024 — 2048 would very likely OOM mid-run on this 8 GB card.

Smoke run (20 steps): eval_loss 0.966 → 0.741, eval accuracy 0.756 → 0.793.
Real learning signal, despite the script’s own crude first/last train-loss
check flagging “NOT DECREASING” (too few steps, too noisy to read that way).

Full run started ~16:00, effective batch 16, ~1288 steps, ~27s/step →
~9.5h ETA. Checkpoints every 50 steps to training/out/renma-qlora.

Known non-issue: TRL logs “Mismatch between tokenized prompt and the start of
tokenized prompt+completion” on essentially every example. Expected —
the dataset intentionally ends prompts mid-template (dangling <think>, see
commit e04b564), so the prompt/completion split doesn’t land on a token
boundary. Cosmetic, not a masking bug (eval loss/accuracy both improve
cleanly through it).

0
0
13
Open comments for this post

1h 5m 52s logged

Wired all 78 switches into a full diode matrix — row diode chains on one net, column lines threading down through each switch, clean and fully connected, no shorts. Also locked the physical layout: 75% ANSI, 78 keys, mapped out in KLE.
Next: get the Pico onto the schematic and wire ROW0–5 / COL0–13 into it.

0
0
15
Open comments for this post

8h 21m 36s logged

Renma Devlog #1 

Dataset built, smoke test passed, full QLoRA run not started. 

Dataset:
12,000 examples (11,760 train / 240 val) from MathNet (18,823 kept of 27,817) + Hendrycks MATH (2,354 kept of 7,500, tiers 1–2 only), 149 dupes removed.
Tier mix: 1—2.5%, 2—8.7%, 3—43.9%, 4—36.1%, 5—8.8%.
Open question: tier 1 is thin (2.5%) — decide before full run whether to upsample or accept the skew. 

LoRA targeting:
Qwen3.5-4B is hybrid — 24/32 layers are Gated-DeltaNet (in_proj_qkv/in_proj_z/out_proj), only 8 are standard attention (q/k/v/o_proj).
Targeting just the usual four names would silently train ¼ of the network with no error.
qlora.yaml now targets both.
Still need to verify empirically via trainable param count after get_peft_model()

ROCm/bitsandbytes:
gfx1030 + rocm70 build segfaults with no traceback (no gfx1030 code objects despite support matrix).
Bisected to rocm714 build working — now forced via BNB_ROCM_VERSION=714 in rocm.py.
Also: flash-linear-attention/causal_conv1d are CUDA-only, so Gated-DeltaNet falls back to torch_chunk_gated_delta_rule (correct, 2–3x slower). 

Next:
Run full QLoRA training. 

0
0
6
Open comments for this post

49m 21s logged

Quick session finishing up the PCB layout wiring.

Fixed a routed trace that was cutting straight through the ESP32-S3’s antenna keepout area — would’ve wrecked WiFi/BT range if left in
Repositioned SW1 (boot/flash button) away from the OLED header — it was sitting close enough that the actual 44x36.5mm OLED module body would’ve physically overlapped it
Cleared remaining DRC violations (via clearance issue near the EN net, drill size on U2’s thermal pad)
Board is now fully routed with 0 errors on DRC

Next: case design in Fusion 360 now that component placement is locked in.

0
0
12
Open comments for this post

6h 40m 39s logged

Spent the session designing the full schematic and starting PCB layout for Poket, a Bluetooth MP3 player built around an ESP32-S3.

Wired up the ESP32-S3-WROOM-1 core: power decoupling, EN reset circuit, boot mode button, USB-C with proper D+/D- pairing and CC pull-downs
Built the TP4056 Li-ion charging circuit (battery connector, PROG/TEMP/CE configuration)
Wired the SSD1351 OLED display and microSD card over a shared SPI bus
Added 6 physical buttons: boot, play/pause, skip+/-, vol+/-
Assigned footprints to every component and ran ERC — caught and fixed a real bug (two buttons sharing one GPIO, USB D+/D- pins not tied across both connector orientations)
Started PCB layout and ran Freerouting — caught a trace routed straight through the ESP32’s antenna keepout area, needs a proper keepout zone before re-routing

Next: fix the antenna keepout, finish routing, run DRC clean.

0
0
14
Open comments for this post

4h 39m 52s logged

07:35 — Back at it. Package’s live on PyPI, install works, so this session’s about making the repo itself look like it belongs to a finished project instead of a hackathon fork.

07:55 — Wanted a banner for the README. Kept going back and forth on whether it should be a screenshot of the actual CLI output or something more abstract. Landed on abstract — a line of commit dots going from dull gray to a lit flare mark, wordmark next to it. Felt more “brand” than a terminal screenshot would.

08:30 — First SVG attempt had the flare rays overlapping the wordmark at smaller widths. Pushed the text further right, widened the canvas. Basic stuff but took a few passes to get spacing right by eye.

08:50 — Rendered a PNG fallback version for anywhere that doesn’t support inline SVG. Font fell back to a generic system font on the PNG since I didn’t bundle one, looks noticeably worse than the SVG. Decided the SVG is the primary asset for the README since GitHub renders those natively anyway, PNG’s just a backup.

09:15 — While in the repo, noticed –runs wasn’t being validated, someone could pass –runs 0 and it’d silently divide by zero computing flake rate. Added a floor of 1 and a proper error message instead of a traceback.

09:40 — Also caught that flarebisect config would happily let you set a provider without a model name, then blow up later when it actually tried to call the API. Added validation at config-set time instead of at call time, better to fail fast with a clear message than five minutes into a bisect run.

10:05 — Cleaned up the –help text, some of the flag descriptions were leftover placeholder text from when I first scaffolded the CLI and never got a proper pass.

10:25 — Dropped the banner into the README at the top, tested how it renders on GitHub’s actual page (not just the local markdown preview) since GitHub sometimes handles SVG differently. Looked fine.

10:45 — Version bump, rebuilt the package, twine check again to make sure everything’s still clean before pushing to PyPI. Small thing but wanted the fixes from earlier (the runs validation, the config validation) actually live and pip-installable, not just sitting in the repo.

11:10 — Published the update. Reinstalled in a clean venv just to confirm the new version actually pulls and the fixes are really there, not trusting past-me on this after the API key incident last session.

11:35 — Went back through the README end to end as if I were a judge seeing this cold for the first time. Tightened a couple of sentences that were doing too much work, moved the install command higher since that’s probably the first thing anyone actually copies.

12:14 — Banner’s in, small CLI footguns are patched, PyPI’s current. v1.

0
0
3
Open comments for this post

21h 39m 4s logged

FlareBisect - Find Flare in your codebase.

Hour 0 — 23:40 — Locked the idea: bisect on flake rate instead of pass/fail. Repo’s up, README written before any code so I remember why this is cool by hour 10.

Hour 2 — 01:33 — Core loop: walk commit range, checkout each into a git worktree, run tests N times, count pass/fail. First time scripting worktrees, cleanup semantics bit me immediately.

Hour 3 — 02:20 — Needed a demo repo with an actual flaky bug. Wrote a throwaway project: module-level dict mutated by a thread with no lock. Good commit passes clean, bad commit fails ~30-40% of the time. Perfect.

Hour 4 — 03:05 — First real bug: worktree checkouts were reusing the same directory, so “parallel” runs were actually serialized and reading stale files. Race condition in the tool that detects race conditions. Fixed with per-run temp dirs.

Hour 7 — 05:30 — Wired up the actual bisection walk, narrowing the range by comparing midpoint flake rate to baseline. First full run against the demo repo — it found the real seeded bug commit. Stared at the terminal for a second like an idiot.

Hour 9 — 07:02 — Slept ~40 min on the floor next to the desk.

Hour 10 — 07:50 — AI explanation layer. First prompt was too open, got a 4-paragraph essay nobody’s reading in a 30s demo. Rewrote for one or two sentences, plain English.

Hour 11 — 08:41 — API key wasn’t loading — .env was being read after typer’s own startup. Moved load_dotenv() to the top of main. 25 minutes lost to printing None.

Hour 13 — 10:22 — Demo run was too slow for a 30s video (5 runs × 12 commits). Trimmed the demo repo’s range, made –runs configurable without touching real defaults.

Hour 14 — 11:15 — Built flarebisect demo as its own command so I’m not fumbling flags live. Should’ve done this at hour 3.

Hour 16 — 12:50 — Existential dip — is “flake rate as a bisectable signal” actually novel or just a dressed-up loop. Decided it doesn’t matter, demo’s good, keep going.

Hour 19 — 15:05 — Recorded the demo. Six takes. Too-small font, fat-fingered hash, then a clean one under 30 seconds.

Hour 20 — 15:50 — Slides — kept text minimal, letting the terminal recording carry it.

Hour 21 — 16:40 — Packaging pass so this is pip install-able, not clone-and-pray. pyproject.toml metadata, GitHub Actions build/publish workflow, twine check clean.

Also ripped out the hardcoded Claude API call — didn’t want to ship something that only works with my personal key. Abstracted behind a provider interface, added flarebisect config, verified it against local Ollama too (worse explanations, but the abstraction’s real).

Ended up redoing the CLI output a third time as a side effect of the provider switch. Wasn’t planning on it, no regrets.

Pushed to github.com/kaorii-ako/FlareBisect, stripped the Claude Code co-author trailer first.

Still not done — demo needs a re-record since the output changed again, slides aren’t finished. Going.

0
0
41
Open comments for this post

35m 59s logged

shipped the portfolio. dark, minimal, 3D, actually interactive — not another cream-background-serif template.

four pages: home, projects, about, contact. proof section leads with QBoard (macropad, XIAO RP2040, QMK, KiCad — repo: github.com/kaorii-ako/QBoard), alongside axon OS and the F1 CFD work.

near-black background, off-white text, one accent color, space grotesk for headers, jetbrains mono for code/labels. checked it on desktop and mobile, fixed the spacing/overflow stuff that broke on smaller screens.

live now.

0
0
7
Open comments for this post

2h 5m 14s logged

CLEARED is a flight-themed deep focus timer, built with Tauri 2 (Rust + React + TypeScript). Instead of a plain countdown, every focus session is framed as a flight: pick your home airport, choose a destination and flight duration, pick a seat class, get a boarding pass, then watch a live animated flight map track your session in real time. Land, and you get a streak + miles tracked over time.
Stack:

  • Rust (Tauri 2) backend - timer logic, SQLite persistence, system tray, native notifications
  • React 19 + TypeScript + Tailwind CSS 4 frontend
  • Framer Motion for the flight animations

Features shipped in v0.1.0:

  • Full onboarding → destination/seat picker → boarding pass → live tracking flow
  • Background system tray timer + native completion notifications
  • Local SQLite session history with stats

Repo: github.com/kaorii-ako/CLEARED

0
0
3
Open comments for this post

1h 32m 53s logged

Devlog #1 — Vox: push-to-talk dictation

Started Vox: free, open-source, bring-your-own-key dictation. Hold a hotkey, speak, release — cleaned-up text pastes at your cursor. Tauri + Rust, with an LLM pass that polishes the raw transcript.

Funniest bug so far: dictate “do you want to go with a race” → Vox types “I don’t identify with a particular race.” The transcript went to the LLM as a plain chat message, so it answered dictated questions instead of transcribing them. Fixed by wrapping the transcript in <transcript> tags and adding a hard rule: never answer, only clean up. Tested against a local llama3.2 — 4/4 trap inputs now transcribe correctly.

Also wrestled the release CI: macOS builds needed a 10.15+ deployment target for whisper.cpp, Windows ARM doesn’t build upstream yet (dropped it).

Shipped v0.2.2: Linux, Windows, macOS.

0
0
3
Ship

An open-source AI study companion with Google Classroom sync, Gemini AI plans, SRS flashcards, GPA predictor, AI quiz, MCP server for Claude Code!

  • 1 devlog
  • 1h
  • 3.50x multiplier
  • 3 Stardust
Try project → See source code →
Ship

Portfolio Website — kaorii-ako.vercel.app

Built a personal portfolio from scratch with Next.js 14, Three.js, and Framer Motion. Key features:

3D Hero - Interactive Three.js icosahedron
GitHub Dashboard
Project
Custom Design — Syne + Manrope fonts, glass morphism, film grain texture, scroll animations
Stack: TypeScript, Tailwind CSS, Three.js (@react-three/fiber), Framer Motion, Lucide icons. Deployed on Vercel.

AI used for debugging ONLY

Theres also some secret features if you press ctrl+ `

Try project → See source code →
Open comments for this post

10h 14m 58s logged

Portfolio Website — kaorii-ako.vercel.app

Built a personal portfolio from scratch with Next.js 14, Three.js, and Framer Motion. Key features:

  • 3D Hero - Interactive Three.js icosahedron
  • GitHub Dashboard
  • Project
  • Custom Design — Syne + Manrope fonts, glass morphism, film grain texture, scroll animations

Stack: TypeScript, Tailwind CSS, Three.js (@react-three/fiber), Framer Motion, Lucide icons. Deployed on Vercel.

Theres also some secret features if you press ctrl+ `

0
0
58
Ship

What I built

STDerr is a Slack bot for developers. A little something you’d actually use mid-coding when you’re too lazy to open a browser.

Six commands total:

/stderr-ping - STDerr latency test

/stderr-connect - Connect to your AI provider with your API key

/stderr-stack [error] - turns a error message into how and what caused it. Powered by your AI provider with API Key

/stderr-timestamp - returns unix timestamp + ISO 8601.

/stderr-commit [description] - turns description into a proper conventional commit message (feat:, fix:, chore:, etc.) powered by your AI provider with API Key

/stderr-regex [description] - turns description into a Regex expression that you can use.

Stack:

  • index.js - Main Slack bot (Socket Mode)
  • ai.js - Unified AI chat interface
  • providers.js - Provider registry
  • store.js - Per-user config persistence
Try project → See source code →
Open comments for this post

32m 1s logged

What I built

STDerr is a Slack bot for developers. A little something you’d actually use mid-coding when you’re too lazy to open a browser. Three commands:

/stderr-ping - STDerr latency test

/stderr-connect - Connect to your AI provider with your API key

/stderr-stack [error] - turns a error message into how and what caused it. Powered by your AI provider with API Key

/stderr-timestamp - returns unix timestamp + ISO 8601.

/stderr-commit [description] - turns description into a proper conventional commit message (feat:, fix:, chore:, etc.) powered by your AI provider with API Key

/stderr-regex [description] - turns description into a Regex expression that you can use.

Stack:

  • index.js - Main Slack bot (Socket Mode)
  • ai.js - Unified AI chat interface
  • providers.js - Provider registry
  • store.js - Per-user config persistence
0
0
7
Open comments for this post

15m 42s logged

Done all the wirings for the PCB.

Currently trying to install fusion onto my linux (Zorin - Ubuntu) right now. If anyone knows how to do it please let me know.

0
0
8
Loading more…

Followers

Loading…