서울밤 Seoulnight
An editor color scheme drawn from Seoul after dark. Eight hues from neon, river, and ginkgo, tuned for late-night code.
// Seoul, 02:14. The signs are still on.
import { palette } from "seoulnight";
type Signal = {
line: number;
hue: string;
};
const lastTrain: Signal[] = [
{ line: 2, hue: palette.hangang },
{ line: 4, hue: palette.dancheong },
];
function nightShift(hour: number) {
if (hour < 5) return palette.neon;
// dawn turns the signs off
return palette.dalbit;
}
Eight colors, numbered like transit lines
Every hue is sampled from the city at night, then desaturated until it can hold still for hours. Contrast is measured against the editor background.
Tuned for the hour after midnight
Most dark schemes are designed at noon, on bright monitors, by people who log off at six. Seoulnight is calibrated the other way around: every hue was checked at two in the morning, at low brightness, against the tired eyes it will actually meet. The background is not black but a deep river-blue, because true black turns bright accents into halos and makes every glyph vibrate at the edges.
The eight colors come from the city itself. Han River blue for functions, because calls flow into one another. Sign-neon magenta for keywords, the words that stay lit all night. Ginkgo yellow for numbers, vermilion from palace eaves for types, pine green off Namsan for strings. Comments sit back in fog.
Nothing in the scheme glows or pulses. A color scheme should hold still for six hours straight, and the best compliment it can earn is that you stopped noticing it.
Notes from the night shift
A devlog on how the scheme is tuned: one decision per note, with the measurements that backed it.
-
Release notes, version 1.0
The scheme is frozen: eight colors, every one measured, none of them moving again without a note in this log.
-
The roundel legend
The scheme needed a legend that works at thumbnail size. Metro line roundels turned out to be the answer.
-
Hangul in the margins
Korean glyphs are visually denser than Latin ones. What that means for line height, UI labels, and the specimen on the landing page.