βββββββ ββββββββ ββββββ βββββββ ββββ ββββββββββββ ββββββββββββββββββββ ββββββββββ βββ βββββββ
βββββββββββββββββββββββββββββββββββββ βββββββββββββ ββββββββββββββββββββ βββββββββββββββββββββββ
ββββββββββββββ βββββββββββ ββββββββββββββββββββ ββββββββ βββ βββ ββββββ βββββββββ βββ
ββββββββββββββ βββββββββββ ββββββββββββββββββββ ββββββββ βββ βββ ββββββ βββββββββ βββ
βββ ββββββββββββββ ββββββββββββββ βββ βββββββββββ ββββββββ βββ βββββββββββββββββββββββββββββ
βββ ββββββββββββββ ββββββββββ βββ βββββββββββ ββββββββ βββ βββββββ βββββββ βββ βββββββ
A hyper-versatile, 100% client-side README & Markdown studio for developers. GitHub-parity preview, 3,300+ searchable tech badges, DevSecOps scanning, a command palette, and an export that makes your README look good on Twitter.
Live demo Β· Getting started Β· Deploy to Vercel Β· Contributing
I kept doing the same three things whenever I wrote a README:
- Writing markup, copying it to a sandbox, squinting to check whether GitHub would actually render the
<picture>/<source>/srcsetcombo I just wrote. - Hunting across four tabs to find a shield badge for that one obscure language.
- Discovering β after pushing β that I'd left an
sk-...key in a code block.
So I built one tool that does all three, and I built it the way I wanted it to feel: fast, dark (or light β it's your call), opinionated, with a preview pane that matches GitHub byte-for-byte.
Everything runs in the browser. There's no backend. There's no "sign up to save your work." Your README lives in localStorage and nowhere else.
- Monaco Editor (the thing VS Code is built on) with a custom neon theme
- Focus mode β fades every line except the one you're editing, Β±2 neighbors
- Typewriter mode β keeps your cursor vertically centered like Ulysses / iA Writer
- Drag & drop images anywhere; they're auto-uploaded and markdown-linked for you
- Visual diff against the last snapshot, GitHub red/green style
βS/Ctrl+Ssnapshots to a rolling 20-entry history you can restore from
Not "close enough to GitHub" β actually GitHub. I took apart rehype-sanitize's default schema and extended it to allow every element and attribute GitHub does, no more, no less.
<picture>/<source media>/srcsetβ profile-snake SVGs flip correctly on dark/light- Inline
<svg>,<details>,<kbd>,<mark>,<sup>,<sub>, table alignment, all of it - LaTeX via
remark-math+ KaTeX - Mermaid diagrams, lazy-rendered client-side
- Auto-slugged heading ids so your table of contents links actually work
- Every external
<a>getstarget="_blank" rel="noopener noreferrer"β no more router hijacking prefers-color-schemeis forced to track the app theme so your badges flip correctly
A regex + Shannon-entropy scanner runs on every keystroke (debounced 600 ms). Detects:
AWS keys Β· GitHub PATs (classic + fine-grained + OAuth) Β· Slack tokens
Stripe Β· Google & OpenAI keys Β· Anthropic keys Β· JWT
SSH/PGP/RSA private key blocks Β· Hardcoded passwords
Plus a GRC compliance pass that flags missing LICENSE / CONTRIBUTING / CODE_OF_CONDUCT / SECURITY sections. Everything runs in the browser. Nothing leaves your machine.
The drawer reads straight from simple-icons + a curated supplement of 75+ popular languages. (Because simple-icons ships openjdk but not "Java" β this catches every gap like that.)
- Sticky search with rank-aware ordering β typing
javasurfaces Java first, not JavaScript - Virtualized grid (
@tanstack/react-virtual) β scrolls 3,300 items at 60 fps - Multi-select basket β pick badges, inject them at your cursor as one clean
<p align="center">block - Auto-categorized into Languages, Frameworks, Databases, Data & ML, Cloud, DevOps, Cybersecurity, Dev Tools, Design, Testing, β¦
One click to drop GitHub stats / streak / WakaTime / top languages / activity graphs / trophies into your README, with custom hex colors, 8 theme presets, and a live preview that degrades gracefully when the username doesn't exist.
A Web Worker runs rule-based polish passes without blocking the main thread: smart quotes, em-dash normalization, heading spacing, trailing whitespace, bullet unification, blank-line collapsing. It masks HTML blocks, code fences, and URLs before rewriting anything β your profile <picture> markup stays intact. Shows you a tally of exactly what it changed.
Press βK anywhere. Every action in the app is fuzzy-searchable β save, toggle focus, run polish, open any drawer, switch theme. Arrow-key navigation, grouped sections, shortcut hints. It's the fastest path to every feature.
html2canvas captures the preview at 2Γ retina, wraps it in a neon-bordered browser mockup, and downloads a PNG ready for Twitter / LinkedIn / a portfolio page.
- Persisted Zustand store with schema versioning + migrations
- Error boundary β a render crash shows "Reload / Hard reset" instead of a white screen
- Auto-dismiss drawers β click anywhere outside and they close
- Full light & dark mode with an inline script that prevents flash-of-wrong-theme
- PWA manifest, installable as a standalone app
- Smooth scrolling with
prefers-reduced-motionrespected
git clone https://github.com/<DEVTHAKUR-90>/readme-studio
cd readme-studio
npm install
npm run devOpen http://localhost:3000 and you're writing.
npm run build
npm startThis app is 100% static-friendly β there's no server-side logic, no database, no API keys to configure. One-click deploy:
- Push the repo to GitHub
- Go to vercel.com/new β Import your repo
- Vercel auto-detects Next.js. Accept the defaults. Click Deploy.
It'll be live at <your-repo>.vercel.app in about 90 seconds.
Prefer Netlify / Cloudflare Pages / self-host?
Netlify: same story β import from Git, it auto-detects Next.js.
Cloudflare Pages: works via @cloudflare/next-on-pages. See their Next.js docs.
Self-host: npm run build && npm start β it's just a Next.js app. Put it behind Nginx/Caddy and you're set.
| Shortcut | Action |
|---|---|
βK / Ctrl+K |
Command palette |
βS / Ctrl+S |
Snapshot save |
β/ / Ctrl+/ |
Open security scanner |
Esc |
Close any drawer / palette |
| Click outside | Auto-dismiss drawer |
readme-studio/
βββ app/
β βββ layout.tsx β root layout + flash-proof theme init
β βββ page.tsx β client-only entry, error boundary here
β βββ globals.css β CSS-variable theme tokens
βββ components/
β βββ Workspace.tsx β top-level shell, splitter, drawer router
β βββ ErrorBoundary.tsx
β βββ editor/EditorPane.tsx
β βββ preview/
β β βββ PreviewPane.tsx
β β βββ MermaidBlock.tsx
β βββ panels/ β 7 drawers (Import, Security, Widgets, TechStack,
β β Changes, History, Export)
β βββ ui/
β βββ Toolbar.tsx
β βββ CommandPalette.tsx
βββ hooks/ β useClickOutside, useSecurityScanner, useMlFormatter
βββ lib/ β diff, editor-bridge, github-importer, sanitize-schema,
β security-scanner, tech-stack-generator, toc, widgets
βββ store/useMarkdownStore.ts β Zustand + localStorage persist
βββ workers/ml-formatter.worker.ts
| Framework | Next.js 14 (App Router) |
| Language | TypeScript (strict) |
| Styling | Tailwind CSS Β· @tailwindcss/typography |
| Motion | Framer Motion |
| Editor | @monaco-editor/react |
| State | Zustand + persist (localStorage) |
| Markdown | react-markdown Β· remark-gfm Β· remark-math |
| rehype-raw Β· rehype-sanitize Β· rehype-katex | |
| Highlighting | react-syntax-highlighter (Prism) |
| Diagrams | mermaid (lazy-loaded) |
| Badges | simple-icons + curated language supplement |
| Virtualization | @tanstack/react-virtual |
| Search | use-debounce + ranked substring matching |
| Icons | lucide-react |
| Export | html2canvas |
This started as a personal project but PRs are welcome.
Design constraints the codebase holds to:
- Client-side only. No backend, no telemetry. If you need to call an API, consider whether the feature belongs in a different tool.
- Lean dependencies. New heavy deps (>100 KB) need a
dynamic(...)wrapper so they don't bloat the initial bundle. - Reachable from the command palette. If a feature isn't in
CommandPalette.tsx, power users will never find it. - TypeScript strict, ESLint clean. Run
npm run type-check && npm run lintbefore opening a PR.
Quick workflow:
git checkout -b my-feature
npm run dev # iterate
npm run type-check
npm run lint
git commit -m "feat: ..."
git push origin my-feature
# open PROpen source under the MIT License.