Skip to content

Projects

Things I have built and tinkered with

CMMhero Automation

A Next.js dashboard with solvers, leaderboards, an encyclopedia, and license management behind Discord login. A C# desktop bot grinding game loops through screen capture. A realtime fleet backend streaming bot stats to dashboards. And a license service pushing state to clients with expiry automation.

Technical highlights

Dashboard with Discord-auth licenses, autoclan config, renewal charts
Hand-rolled AMF3 game client with encrypted login
C# pixel bot with OpenCV templates plus GDI color search
Fleet backend on Soketi plus Redis with TTL presence
License service with SSE push and expiry automation
Built-in solvers for pipes, kekkai, and cards
Next.jsC#MongoDB
Click a screenshot to expand

H320 Discord Bot

Slash commands, autocomplete, an XP system, and a music queue.

Technical highlights

Event-driven Discord.js core
MongoDB for users, XP, and settings
AniList GraphQL for anime search
Music queue with playback controls
Slash commands with autocomplete
XP curves via aggregation pipelines
Node.jsDiscord.jsMongoDB
Click a screenshot to expand

zentype

I wanted a typing test without the noise, so I built one, then kept going. Monkeytype-grade stats, XP and achievements, profiles with trend charts, and global leaderboards. Two hundred themes happened along the way. A head-to-head racing mode is in the works.

Technical highlights

Net and raw WPM, accuracy, and consistency, monkeytype-style
XP, levels, streaks, and 110+ achievements
Profiles with trend charts and streak calendars
Global leaderboards on Redis sorted sets, Postgres fallback
200+ themes and 90+ fonts
Guest mode that syncs to the cloud on first login
Next.jsPostgresRedis
Click a screenshot to expand

Lachisean Library

A full CMS for books that ships with a seeded demo dataset. Members browse and review, admins run the catalog.

Technical highlights

Laravel 9 MVC with Eloquent
Gates for admin, member, and owner access
Similar-book picks by title, author, and category
Factories seeding users, books, and reviews
Paginated reviews with edited flags
Cover uploads with a default fallback
Dynamic category filters
LaravelPHPMySQL
Click a screenshot to expand

Simplicon

A scratch-my-own-itch tool. Layers, undo/redo, drag on canvas, export SVG. The ICO exporter is hand-written, byte by byte. Auto-save means closing the tab mid-icon does not sting.

Technical highlights

ICO encoder written from scratch, no dependency
One serializable SVG, so export is lossless
Layer reorder via drag and drop
Fifty font presets with gradients and patterns
Copy, paste, and duplicate on shortcuts
Autosave to LocalStorage
ReactTypeScriptTailwind
Click a screenshot to expand

Note Lachisean

A notes app built around one question. Who gets to see this. Private, shared, or public with unguessable token links, plus search and file uploads on top.

Technical highlights

PHP and MySQL, no framework
Visibility roles per note
Public links gated by random tokens
Full-text search with indexes
PDO prepared statements throughout
Renames audit-logged, deletes cascade fully
Uploads stored on disk and listed per note
HTML/CSSPHPMySQL
Click a screenshot to expand

Dungeon Survivor

A campus team project where I owned gameplay systems. Kill thresholds at 10, 25, and 50 kills open new waves. Each wave buffs enemy HP, speed, and damage and pops a power-up menu. Kills pay 5 coins apiece.

Technical highlights

C# gameplay code in an OOP structure
Kill-threshold waves with per-wave stat scaling
Coin score with an on-screen counter
Physics-based combat through hitboxes
Menu, pause, and game-over states
Modular stat upgrades
UnityC#3D Game Dev
Click a screenshot to expand

Foodiematch

A discovery feed for food. Swipe nearby spots, get picks tuned by a hybrid recommender. Likes stream back through Supabase realtime, so the home feed updates as you rate.

Technical highlights

Hybrid recommender: cosine CF over 5 nearest users plus TF-IDF content match
Haversine distance filter with halal, rating, and distance prefs
Chain-level exclusion so no franchise appears twice
Swipe deck with haptics in React Native
Home feed refetches live over Supabase realtime
Expo app with location-gated content
React NativeFlaskPostgres
Click a screenshot to expand

H320 Gamelist

A fast front for RAWG data. Infinite scroll, filters in the URL, a command palette for search, hover previews on cards. Built to feel instant.

Technical highlights

Command palette search with debounce
Four parallel RAWG requests per detail page
Hover previews with ratings and platforms
Plain fetch and hooks, no data library
Saved grid, cards, and list layouts
Infinite scroll on Intersection Observer
ReactTailwind
Click a screenshot to expand

My first real e-commerce exercise. jQuery and Bootstrap, cart in localStorage, checkout against a wallet balance. Cart to receipt, the whole flow runs.

Technical highlights

jQuery and Bootstrap storefront
Cart persisted in localStorage
Wallet checkout with balance checks
Username-only demo login gate
Rupiah formatting through Intl
Persisted light, dark, and auto themes
HTML/CSSBootstrapjQuery
Click a screenshot to expand

ZenTimer

I kept losing focus across three apps, so now there is one. Timers, a task list, notes, and a browser notification when a session ends.

Technical highlights

SVG progress ring with per-mode page tints
Browser notification when a session ends
Tasks plus notes in one panel
Prefs and tasks persisted locally
Work auto-advances to break
ReactTypeScriptTailwind
Click a screenshot to expand

AniScroll

Log in with any AniList username and get a vertical feed built from your list. Native recommendations first, genre similarity second, trending as backstop.

Technical highlights

Three-phase recommender with an infinite-scroll guarantee
Taste profiling from scores, genres, and tags
Snap feed with prefetch and dedupe
Autoplay-muted trailer cards with 3D tilt
Hand-rolled glass UI, no component library
AniList GraphQL plus YouTube embeds
ReactTypeScriptTailwind
Click a screenshot to expand

Wash N Go

Staff create orders, track wash and dry progress, take cash or QRIS, and hand over receipts. English and Indonesian. One joined query keeps every screen simple.

Technical highlights

Order lifecycle from new to done with per-item states
Multi-payment with change calculation
Receipts captured and shared to WhatsApp
Full English and Indonesian translations
Role-gated admin screens
Expo app on Postgres with offline-friendly state
React NativeExpoPostgres