Same logic.
More bridges.
A design-thinking base for the next round of md-bridge features — built on the editorial system that already ships, ready to be sliced into community-friendly GitHub issues.
Five rules every new feature must respect.
These are not opinions — they're what makes md-bridge md-bridge. Any contribution that breaks one is a different product, not a feature.
1 · Deterministic
Same input, same output, every run. No AI in the conversion pipeline — pure heuristics. Features can help the user choose, but the conversion itself stays reproducible.
2 · Local-first
No external API calls during conversion. Temp files removed before the response goes out. Anything new that needs the network has to be opt-in and explicit.
3 · No persistence
No accounts, no database, no telemetry. User state lives in localStorage or the URL — that's the only memory we're allowed.
4 · Heuristic-first
Every new format pair (DOCX, EPUB, RTF) follows the same vendored-skill pattern under packages/. The route layer stays thin.
5 · Editorial UI
Fraunces + IBM Plex. Cream + ink + a single red accent. No purple gradients, no Inter, no glassy cards. Hierarchy over decoration.
→ Use this doc as a base
Every section below pairs a hi-fi mock (cream/red, same components, same logic) with a ready-to-paste GitHub Issue. Hit Copy issue and open it on the repo.
What md-bridge already gives us to build on.
The design system lives in apps/web/src/styles/tokens.css (49 lines, 14 variables). Every mock below reuses these exact tokens — no new font, no new color.
Color tokens · 9 ramps
Type stack · 3 families
--font-display
Fraunces — editorial serif
--font-body
IBM Plex Sans — humanist sans
--font-mono
JetBrains Mono — mono
modular scale · ratio 1.25
Existing components · reuse don't recreate
<DropZone />drag, click, folder walk, MIME validation<Button />primary · ghost · icon · loading<Card />surface · outline<ConvertButton />state machine: idle / loading / ok / error<MarkdownPreview />react-markdown with in-app theme<DiagnosticPanel />fonts, sizes, tagged-PDF, OCR hint<BatchPanel />queue, per-row status, per-row download<Toast />3s auto-hide, accent border-left<Spinner />thin SVG, accent color<LanguageSwitcher />EN / PT / ES, localStorage
Pages today
/Hero + two cards/convert/pdf-to-mdDropZone · Diagnostic · BatchPanel · MarkdownPreview/convert/md-to-pdfDropZone · paste textarea · BatchPanel · PDF iframe/aboutnarrative, limits, links
API surface
POST /api/pdf-to-mdmultipart · options jsonPOST /api/md-to-pdfmultipart · returns application/pdfPOST /api/inspect-pdfdiagnostics for the panelGET /api/healthstatus + version
Eight features. Eight issues. One coherent system.
Ordered by the user's explicit ask first (theme picker, custom CSS, future formats, languages), then by what unlocks the rest. Each card below carries a type, a scope, and a complexity hint so contributors can self-select.
CSS theme picker
Six bundled themes for the PDF render — default editorial, academic, technical, minimal, corporate, brief.
Theme library — deep picker
A dedicated browser with 12+ pre-defined themes. Visual A4 preview and read-only CSS source side-by-side. The user only picks — never edits.
Per-conversion options
Page size, margins, TOC, page numbers, header/footer text. Per file or per batch.
More formats: DOCX · EPUB · HTML
Generalise the /convert/X-to-Y shape so adding a new format pair is one route + one service.
Language workshop
A page that lists every locale, shows missing keys, and lets contributors export a draft PR-ready dictionary.
Conversion presets
Save the current set of options as a named preset, recall it from the dropzone toolbar.
Local conversion history
File names + sizes + result blob URLs in localStorage. Re-download a recent result without re-running.
Preferences page
Default theme, default locale, accent color override, "no telemetry" affirmation badge.