How it's built
Now that AI can write the code, what matters more than how to code is what you can build with and what you need to know. Here is exactly what each moduhub tool is made of.
18 of 39 services are built without any external library, using only what the browser provides.
Shared foundation
The base technologies every tool is built on.
By service
Visual IT Encyclopedia
What you needed to know
SCAN, C-SCAN, LOOK and C-LOOK are combinations of two choices—whether the head goes to the last track and whether it serves in one direction only—so the downward direction is computed by flipping track numbers (t → last track − t) and reusing the upward code. The ARP view keeps no table state; it recomputes the ARP table from (mode, step) every time.
Libraries
Built without external libraries
Browser features
- SVG (opens in a new tab)Resolution-independent vector graphics
Koi Pond Growing Game
What you needed to know
A fish can only eat another when it is at least 1.15 times larger and the smaller fish's center is inside its body. Each meal adds half of the prey's area to the body (r' = √(r² + 0.5·r_prey²)), so growth slows as you get bigger.
Libraries
- three.js (opens in a new tab)3D graphics library for the browser
Browser features
- WebGL (opens in a new tab)GPU-accelerated 2D and 3D graphics in the browser
Jelly Dice Roller
What you needed to know
Each die is a 4×4×4 grid of 64 particles, and every cell is pulled back toward its original shape, which makes it squishy. The result is not a random number: it is the face pointing up in the resting grid's rotation.
Libraries
Built without external libraries
Browser features
- WebGPU (opens in a new tab)Next-generation GPU API after WebGL
- Web Audio API (opens in a new tab)Synthesizes and plays sound in the browser
2048 Combo
What you needed to know
Each tile merges at most once per move, and a new tile spawns in an empty cell as a 2 with 90% probability or a 4 with 10%.
Libraries
- three.js (opens in a new tab)3D graphics library for the browser
Browser features
- WebGL (opens in a new tab)GPU-accelerated 2D and 3D graphics in the browser
- Web Audio API (opens in a new tab)Synthesizes and plays sound in the browser
- Vibration API (opens in a new tab)Haptic feedback through phone vibration
- Web Share API (opens in a new tab)Shares results through the device share sheet
Chart Trading Practice
What you needed to know
From 5,000 Binance hourly candles, only the longest gap-free run is kept, and hourly candles are merged to rebuild 4-hour and daily candles.
Libraries
- Lightweight Charts (opens in a new tab)Financial charting library by TradingView
- TanStack Query (opens in a new tab)Caches and refetches server data
- tRPC (opens in a new tab)Type-safe API calls between client and server
- Drizzle ORM (opens in a new tab)TypeScript ORM for the database
- Supabase (opens in a new tab)Authentication and PostgreSQL database
Data sources
- Binance Market Data API (opens in a new tab)Historical Bitcoin and Ethereum candles
Tearable Cloth Simulator
What you needed to know
The cloth is a grid of points and sticks moved with Verlet integration, and a stick breaks once it stretches beyond 2.8–4 times its rest length.
Libraries
Built without external libraries
Browser features
- WebGL (opens in a new tab)GPU-accelerated 2D and 3D graphics in the browser
- Canvas 2D (opens in a new tab)Pixel drawing and image export
- File API (opens in a new tab)Reads image files you drop in
Pass Map
What you needed to know
Labels hide below 0.35× zoom; Korean glyphs are baked into an SDF atlas so nodes, edges, and text each render in a single draw call.
Libraries
- three.js (opens in a new tab)3D graphics library for the browser
- TinySDF (opens in a new tab)Renders glyphs to signed distance fields that stay sharp when scaled
Browser features
- WebGPU (opens in a new tab)Next-generation GPU API after WebGL
- WebGL (opens in a new tab)GPU-accelerated 2D and 3D graphics in the browser
- IndexedDB (opens in a new tab)Stores large data inside the browser
- Broadcast Channel API (opens in a new tab)Syncs changes between tabs of the same site
- File System Access API (opens in a new tab)Saves directly to files on your device
Data sources
- Google Drive API (opens in a new tab)Saves map files to your Google Drive
Korean-English Typo Converter
What you needed to know
Latin keys are mapped to Korean 2-set (Dubeolsik) letters and consecutive letters are assembled into syllables; shifted keys become double consonants or ㅒ·ㅖ.
Libraries
- Hangul.js (opens in a new tab)Splits and assembles Korean Hangul letters
Emoji Finder
What you needed to know
Subtracting 0xAC00 from a Hangul syllable code and dividing by 21×28 yields its initial consonant, which enables searching by initials such as 'ㅅㄹ'.
Libraries
Built without external libraries
Browser features
- Clipboard API (opens in a new tab)One-tap copy
Data sources
- Emojibase (opens in a new tab)Emoji names and keywords in three languages (converted at build time)
Daily Fortune Cookie
What you needed to know
The fortune is picked by hashing today's date plus a visitor ID with FNV-1a, so the same day always gives the same fortune.
Libraries
Built without external libraries
Browser features
- Web Crypto API (opens in a new tab)Cryptographically strong random numbers
- Web Storage (opens in a new tab)Small storage kept only in your browser
Color Vision Test
What you needed to know
As levels rise the grid grows from 3 to 8 cells per side and the color gap shrinks from 47 to 5; the odd cell changes only one HSL channel.
Libraries
- canvas-confetti (opens in a new tab)Confetti bursts for moments of success
Browser features
- Web Share API (opens in a new tab)Shares results through the device share sheet
Character Counter + Meta Snippet Checker
What you needed to know
Search-result titles are checked against 15–32 characters and descriptions against 50–120, and byte counts use UTF-8 encoding.
Libraries
Built without external libraries
Browser features
- Encoding API (opens in a new tab)Encodes text to UTF-8 bytes to measure size
GitHub Profile Comparator
What you needed to know
Six public metrics are scaled to 0–1 by dividing by the larger of the two users, then combined with weights such as followers 30% and repositories 25%.
Libraries
- TanStack Query (opens in a new tab)Caches and refetches server data
Browser features
- SVG (opens in a new tab)Resolution-independent vector graphics
Data sources
- GitHub REST API (opens in a new tab)Public profile and repository stats
Exchange Rate Time Machine
What you needed to know
No rates are published on weekends or holidays, so the closest earlier business day is used, and data is available from January 4, 1999.
Libraries
- Lightweight Charts (opens in a new tab)Financial charting library by TradingView
- TanStack Query (opens in a new tab)Caches and refetches server data
Data sources
- Frankfurter API (opens in a new tab)Free daily exchange-rate API
QR Code Generator
What you needed to know
WiFi QR codes use the WIFI:T:security;S:name;P:password;; format, and \ ; , : inside values are escaped with a backslash.
Libraries
- node-qrcode (opens in a new tab)Generates QR code images from text
Space Gallery
What you needed to know
NASA's Astronomy Picture of the Day has one entry per day since June 16, 1995; past days never change, so they are cached for 7 days and today's for 1 hour.
Libraries
- TanStack Query (opens in a new tab)Caches and refetches server data
- date-fns (opens in a new tab)Date arithmetic and calendar utilities
Data sources
- NASA APOD API (opens in a new tab)NASA Astronomy Picture of the Day
Time↔Frame Calculator
What you needed to know
29.97fps drop-frame skips the first two frame numbers of every minute except each tenth minute (four at 59.94fps) and marks it with a ; separator.
Libraries
Built without external libraries
Planet Age Calculator
What you needed to know
Planet age is Earth age divided by each planet's orbital period, and current planet positions come from solving Kepler's equation.
Libraries
- three.js (opens in a new tab)3D graphics library for the browser
Browser features
- WebGL (opens in a new tab)GPU-accelerated 2D and 3D graphics in the browser
Data sources
- NASA JPL Approximate Positions of the Planets (opens in a new tab)Planetary orbital elements (built into the code)
Percent Calculator
What you needed to know
Change rate is (current − previous) ÷ |previous| × 100, and margin uses revenue, not cost, as the denominator: (revenue − cost) ÷ revenue × 100.
Libraries
Built without external libraries
Browser features
- Intl API (opens in a new tab)Locale-aware numbers, country names, and text segmentation
Han River Temp Check
What you needed to know
Seoul's water-quality feed mixes several hourly rows per station, so only the latest date-and-hour row for each station is used.
Libraries
Built without external libraries
Browser features
- Geolocation API (opens in a new tab)Reads your location with permission
Data sources
- 서울 열린데이터광장 수질 측정 자료 (opens in a new tab)Hourly water temperature and quality by Han River station
Random Roulette
What you needed to know
The winning slice is the aim angle minus the target's rotation; on devices without 3D support, it falls back to an unbiased random draw.
Libraries
- three.js (opens in a new tab)3D graphics library for the browser
- lz-string (opens in a new tab)Compresses data into short shareable URLs
Browser features
- WebGL (opens in a new tab)GPU-accelerated 2D and 3D graphics in the browser
- Web Crypto API (opens in a new tab)Cryptographically strong random numbers
- Web Audio API (opens in a new tab)Synthesizes and plays sound in the browser
- Vibration API (opens in a new tab)Haptic feedback through phone vibration
- Web Share API (opens in a new tab)Shares results through the device share sheet
Military Service Calculator
What you needed to know
Discharge day is the day before enlistment date plus the service months (Army 18, Navy 20, Air Force 21); impossible dates snap to month end.
Libraries
Built without external libraries
Data sources
- 병무청 복무기간 안내 (opens in a new tab)Official service lengths by military branch
Color Code Converter
What you needed to know
HEX is the three 8-bit RGB channels written in hexadecimal; HSL derives saturation and hue from the gap between the largest and smallest RGB channel.
Libraries
- react-colorful (opens in a new tab)Lightweight color picker component
Random Number Generator
What you needed to know
A 32-bit integer from crypto.getRandomValues divided by 2^32 gives a number in [0, 1), and unique draws skip numbers that already appeared.
Libraries
Built without external libraries
Browser features
- Web Crypto API (opens in a new tab)Cryptographically strong random numbers
1-Min Interview Rhythm Coach
What you needed to know
Speaking time is estimated from the non-space character count at 4, 5, or 6 characters per second, plus 0.35s per period and 0.18s per comma.
Libraries
Built without external libraries
Browser features
- Web Audio API (opens in a new tab)Synthesizes and plays sound in the browser
- Canvas 2D (opens in a new tab)Pixel drawing and image export
Lotto Number Generator
What you needed to know
Six unique numbers are drawn from 1 to 45, using crypto.getRandomValues instead of Math.random for harder-to-predict randomness.
Libraries
Built without external libraries
Browser features
- Web Crypto API (opens in a new tab)Cryptographically strong random numbers
Data sources
- 동행복권 (opens in a new tab)Official Lotto 6/45 winning numbers
Draw Picker
What you needed to know
A 32-bit Web Crypto random number divided by 2^32 gives a value from 0 to 1, and already-drawn items are skipped on redraw.
Libraries
Built without external libraries
Browser features
- Web Crypto API (opens in a new tab)Cryptographically strong random numbers
D-Day Counter
What you needed to know
Both the target date and today are normalized to midnight before counting days, and impossible dates like February 30 are rejected on input.
Libraries
- date-fns (opens in a new tab)Date arithmetic and calendar utilities
Days Since Birth Calculator
What you needed to know
Elapsed days are computed between two UTC midnights, and milestones count the birth date as day 1, as in the Korean 100th-day tradition.
Libraries
- date-fns (opens in a new tab)Date arithmetic and calendar utilities
Date Calculator
What you needed to know
Including the end date adds one day, and months are counted by the calendar: starting on a month's last day, the shorter month's last day counts as one month.
Libraries
- date-fns (opens in a new tab)Date arithmetic and calendar utilities
Workday Calculator
What you needed to know
Saturdays and Sundays are excluded first, and only public holidays falling on weekdays are counted separately, using a per-year holiday list.
Libraries
- date-fns (opens in a new tab)Date arithmetic and calendar utilities
World Flags Quiz
What you needed to know
Flags are looked up by each country's two-letter ISO 3166-1 code, and missing Japanese country names are filled in with the browser's Intl.DisplayNames.
Libraries
Built without external libraries
Browser features
- Intl API (opens in a new tab)Locale-aware numbers, country names, and text segmentation
Data sources
- REST Countries (opens in a new tab)Country names, codes, and flag URLs
- Flagpedia flagcdn (opens in a new tab)Flag images by country code
Ethereum Unit Converter
What you needed to know
1 ETH equals 10^18 wei. To avoid floating-point errors, every value is converted to integer (bigint) wei before changing units.
Libraries
- viem (opens in a new tab)Ethereum toolkit for unit conversion and accounts
Browser features
- BigInt (opens in a new tab)Arbitrary-precision integers without rounding errors
Ethereum Account Generator
What you needed to know
128 bits of randomness become a 12-word BIP-39 phrase, and the first account key is derived on the BIP-44 path m/44'/60'/0'/0/0 (60 = Ethereum).
Libraries
- viem (opens in a new tab)Ethereum toolkit for unit conversion and accounts
- node-qrcode (opens in a new tab)Generates QR code images from text
Browser features
- Web Crypto API (opens in a new tab)Cryptographically strong random numbers
Gradient Generator
What you needed to know
Color stops are sorted by position and joined; linear gradients take an angle in degrees and conic gradients set their start with a from angle.
Libraries
Built without external libraries
Browser features
- CSS Gradients (opens in a new tab)Linear, radial, and conic gradients in pure CSS
Kinetic Text Effect Generator
What you needed to know
Text must be split into user-perceived characters (graphemes), not code units, so that combined emoji move as one character instead of breaking apart.
Libraries
Built without external libraries
Browser features
- Intl API (opens in a new tab)Locale-aware numbers, country names, and text segmentation
- CSS Animations (opens in a new tab)Keyframe-based motion in CSS
Study Cards
What you needed to know
Each card has a 0–100 mastery score: 'Knew it' adds 20 and 'Didn't know' subtracts 15; the lowest five cards under 50 are shown as weak cards.
Libraries
- tRPC (opens in a new tab)Type-safe API calls between client and server
- Drizzle ORM (opens in a new tab)TypeScript ORM for the database
- Supabase (opens in a new tab)Authentication and PostgreSQL database
- TanStack Query (opens in a new tab)Caches and refetches server data
JSON Toolkit
What you needed to know
A JWT's exp is in seconds, so it is compared with the current time divided by 1000; the signature is not verified, only the base64url parts are decoded.
Libraries
- Ajv (opens in a new tab)JSON Schema validator
- js-yaml (opens in a new tab)Converts between YAML and JSON
- JSONPath Plus (opens in a new tab)Queries JSON with JSONPath expressions
- jsdiff (opens in a new tab)Line-by-line text diffing
Pomodoro Timer
What you needed to know
25-minute focus and 5-minute breaks repeat, with a 15-minute long break every fourth round; remaining time is computed from the start timestamp.
Libraries
Built without external libraries
Browser features
- Web Audio API (opens in a new tab)Synthesizes and plays sound in the browser
- Web Locks API (opens in a new tab)Lets only one tab do the work at a time
- Page Visibility API (opens in a new tab)Detects when a tab is hidden or shown
- Fullscreen API (opens in a new tab)Shows content in full screen
Data sources
- Kenney Interface Sounds (opens in a new tab)Public-domain (CC0) notification sounds
- Unsplash (opens in a new tab)Nature background photos (credited)