12 KiB
Akefin Design System
A precision finance design system for Akefin — a multi-entity personal & business accounting platform for a solo consultant operating across South Korea (KRW), Turkey (TRY), and Japan (JPY).
This system is tuned for a domain where density, trust, and bilingual (Latin + Hangul) text rendering all matter. It draws aesthetic inspiration from pi.dev (the user's stated favourite): a calm, paper-light surface, a grid background, generously-italic serif display type, and crisp monospace data.
Source materials
| Source | Notes |
|---|---|
alkimake/akefin-design-system (private GitHub) |
Empty at time of writing — this project IS that design system. Re-pull when populated. https://github.com/alkimake/akefin-design-system |
uploads/picode_screenshot.png |
The pi.dev landing page, attached as the aesthetic target |
uploads/screenshot-2026-05-22_22-25-21.png |
pi.dev code-edit interaction view |
| Akefin brief (in chat) | Three legal entities (Personal / 9TFox / Finacode), 3-tier AI categorization, double-entry plain-text ledger output |
For future readers / agents: if you have access to the GitHub repo above, pull it before designing — there may be updated components, brand marks, or screenshots not reflected here.
Product context
Akefin automates the import of Korean Toss bank exports, categorizes transactions through a 3-tier AI pipeline (Rules → LLM → Agent), and routes anything unmatched to a human review queue. Final output: plain-text double-entry ledger files, git-versioned for audit.
Primary surfaces:
- Web dashboard — the daily-driver. Review queue, rule management, ledger overview, import status.
- Mobile (iOS/Android) — same data, optimised for the review-on-the-go case.
Three independently-tracked entities, always visible as scope:
| Badge | Entity | Scope |
|---|---|---|
| Personal | Personal finances | KR (KRW), TR (TRY), JP (JPY) |
| 9TFox | Korean sole trader | Consulting income/expenses (KRW) |
| Finacode | Turkish partnership | Partner-share only, Wise transfers |
Core UI primitives:
- Confidence chip — green (rules / 100%) → blue (LLM ≥0.85) → amber (0.70–0.85) → red (<0.70 or unmatched)
- Tier badge — Rules · LLM · Agent · Unmatched
- Entity badge — three distinct accent hues, used as scope, never as page tint
- Account picker — hierarchical, fuzzy-searchable, MRU-aware
- Ledger preview — monospace two-leg posting confirmation
CONTENT FUNDAMENTALS
Akefin is professional financial-operations software. Copy reflects that.
Voice & tone
- Authoritative, calm, technical. Never marketing-y, never cute. Closer to a Unix man page than a SaaS dashboard.
- Specific over generic. "23 transactions staged for review" — not "You have new items".
- No filler verbs. "Review", "Categorize", "Post" — not "Let's review", "Time to categorize".
- Domain language is welcome. Use ledger, posting, leg, account, entity, tier, match, unmatched, staged. Don't over-translate accounting terms for a user who lives in them.
Person & address
- Predominantly imperative ("Approve", "Override", "Promote rule").
- Where a subject is needed, you (sparingly). Never we. Never your money — say the ledger or this entity.
Casing
- Sentence case for body, descriptions, table headers, menu items, button labels longer than two words.
- UPPERCASE small-tracked for tab labels, eyebrow labels, section dividers, status strips — the pi.dev
[ READ THE DOCS ]-style chrome. - Title Case only for proper nouns (entity names, currency codes, Toss).
Numbers, currency, dates
- Amounts: always monospace, right-aligned, signed.
+ 1,240,000 KRWfor income,− 38,500 KRWfor expense. Decimal separator follows locale, but the column aligns on the decimal. - Currency code follows the amount, separated by a thin space. Never use the currency symbol alone (₩, ₺, ¥ are ambiguous at a glance across these three).
- Dates: ISO
YYYY-MM-DDin dense data views,2 Mar 2026in headers, never03/02/26. - Confidence: two-decimal fixed-point,
0.92, never92%.
Korean (한국어) handling
- Hangul appears natively in payee memos (적요) and bank institution names. Don't romanise. Don't translate inline.
- When showing a translated/AI-inferred name, render it secondary:
이마트 트레이더스 · E-Mart Traders (inferred).
Emoji & decoration
- No emoji. Anywhere. This is an accounting tool.
- Decorative iconography is sparse — keep glyphs functional (status, direction, expand/collapse).
Sample copy
Review queue · 23 staged · 4 high-confidence · 19 need attention
2026-03-02 −38,500 KRW 스타벅스 강남역점 Personal ★ 0.94 LLM
[ APPROVE ] [ OVERRIDE ] [ SKIP ]
Promote 17 suggested rules · Last import 4 min ago · 9TFox ledger clean
VISUAL FOUNDATIONS
The system is paper-quiet, grid-anchored, type-led. It should feel like a precision instrument from a well-lit study, not a SaaS app.
Surface & background
- Primary surface: warm cream paper (
--bg,#ECE7DC). The default page background. - Secondary surface: cool pale ink-grey (
--surface,#EBEEF1) for code/data blocks, terminal-style frames, ledger previews. The two-surface contrast is the system's signature. - Background grid texture (1px × 1px, ~6% opacity grey lines, 24px spacing) is applied to the page body. This is a load-bearing motif — do not omit.
Type
- Display serif (italic-leaning): Spectral — substitutes for Plantin MT Pro which pi.dev uses. Headings prefer italic at light weight. (Substitution flagged — please supply Plantin MT Pro woff2 to replace.)
- Body / UI sans: IBM Plex Sans — used for tab labels, body text, button chrome.
- Mono / data: JetBrains Mono — all amounts, account paths, dates in dense views, code blocks, ledger postings. Tabular figures are mandatory.
- Korean (Hangul): IBM Plex Sans KR for chrome, Pretendard for body when Hangul is the primary content. Hangul lines up at slightly larger optical size than Latin.
- Type ramp lives in
colors_and_type.css.
Color
- Background neutrals first; saturation is reserved for semantic meaning (confidence tiers, entity badges).
- Three entity hues — Personal (slate teal), 9TFox (rust), Finacode (indigo) — only as badge accent / 4px scope strip, never as a full UI tint.
- Confidence spectrum: green → blue → amber → red. These are the only "decorative" colors in the chrome.
- Full palette in
colors_and_type.css.
Spacing & density
- Base unit
4px. Compact density: row height32pxfor review-queue lines,40pxfor primary list rows,48pxfor table headers / page tabs. - Inner padding ramp
4 · 8 · 12 · 16 · 24 · 40. - Type at 14px / 1.45 line-height for chrome, 13px / 1.4 mono for data tables.
Borders
- Hairline borders are the primary divider —
1px solid var(--rule)(#D5CFC2on cream,#D7DCE2on ink-grey). No shadow-as-divider. - Card borders are 1px, never thicker. Border-radius is 2px. Rounded-everything is explicitly not the look.
- Terminal-style code frames have a 1px border + an inset 1px hairline on the inner edge, mimicking a window chrome.
Shadows
- Reserved. Use only for popovers, account-picker dropdowns, focus-mode dialogs. Never on cards or inline rows.
- Single elevation:
0 1px 0 rgba(20,18,12,.04), 0 8px 24px -8px rgba(20,18,12,.16). Soft, paper-shadow, not material.
Corner radii
--r-sm: 2px,--r-md: 3px,--r-lg: 4px. Maximum 4px. Pills (--r-pill: 999px) only on confidence chips and tier badges.
Borders, hover, press
- Hover: cream surfaces darken by ~3% (use
color-mix); ink-grey surfaces lighten by ~2%. Text links underline on hover; underline thickness1px, offset2px. - Press: scale
0.99, never a color flash. Buttons get a 1px inset shadow. - Focus: 2px outline in
--focus(#3A6FB0), offset 2px. No focus ring removal.
Transparency & blur
- Used only for modals/popovers' backdrop (
rgba(20,18,12,0.32)) and the global command-K palette. No frosted-glass elsewhere.
Animation
- Minimal and short. Cubic-bezier
(0.2, 0, 0.2, 1), durations80ms(chrome hover),140ms(popovers),220ms(modal/tab transitions). - No bounces, no springs. A calm, instrument-like motion language. Confidence chips do not pulse, entity badges do not animate in.
Layout rules
- Fixed top chrome: a 56px header strip (entity scope + global search + status).
- Optional 240px left navigation rail with collapse to 56px icon strip.
- Content max-width
1440px; tables and review queue may extend full-bleed inside the rail.
Imagery vibe
- Almost no photography. If product imagery is needed: cool, sober, well-lit, slight grain, no people, mostly objects. Default to no image and let type do the work.
Iconography vibe
- Light-weight (~1.25px stroke), monoline, geometric. Lucide is the substitute (see ICONOGRAPHY below).
Dark theme (secondary)
- A direct inversion: ink black background (
#13120F), warm paper foreground. Same hues, same hierarchy. Not the default for the user, but supported.
ICONOGRAPHY
Akefin has no proprietary icon set at time of writing. The system uses Lucide (https://lucide.dev) as the substitute — its 1.25px monoline geometric style matches the calm-instrument aesthetic.
- Loaded via CDN:
https://unpkg.com/lucide@latest - Used at three sizes only:
14px(inline chrome),16px(default UI),20px(page headers) - No filled variants. Stroked only.
- No emoji. Anywhere.
- No unicode glyph icons except:
↑ ↓ →(sort + direction),·(separator),✓(matched),—(em-dash, range). - The Akefin wordmark is the only branded glyph — it lives at
assets/akefin-wordmark.svgand is a small monospaced lockup, see Brand cards in preview/. - Three entity marks (Personal, 9TFox, Finacode) are 2-3 letter monograms in mono type with a 4px coloured stripe — see
assets/entity-marks.svg.
Flagged substitution: Lucide stands in until an Akefin-native icon set is produced. The closest mono-line set was chosen specifically to match the pi.dev stroke weight.
Index
/
├── README.md ← you are here
├── SKILL.md ← Claude/Agent Skill entrypoint
├── colors_and_type.css ← all color + type CSS variables + semantic classes
├── fonts/ ← webfonts (Spectral, IBM Plex Sans, IBM Plex Sans KR, JetBrains Mono, Pretendard)
├── assets/ ← logos, entity marks, sample iconography
├── preview/ ← design-system cards (registered in the Design System tab)
└── ui_kits/
├── web/ ← Akefin web dashboard recreation
│ ├── README.md
│ ├── index.html
│ └── *.jsx
└── mobile/ ← Akefin mobile (iOS frame) recreation
├── README.md
├── index.html
└── *.jsx
Known caveats
- Plantin MT Pro (pi.dev's display face) is proprietary — substituted with Spectral from Google Fonts. Please supply the original
.woff2to replace. - The akefin-design-system GitHub repo was empty when this was generated — components here are synthesised from the brief + pi.dev aesthetic, not lifted from existing code.
- No real Akefin screenshots were provided. The UI kits are an interpretation of the brief's component inventory, not a recreation of an existing UI. Iterate.
- Dark theme is sketched but light is the priority per user preference.