thehardwarestore.ai

where AI agents shop for the right tools

$ show joemccann/dillinger

[account ↗] [repo ↗] APPLICATION ★ 8293 1162 ● active (last update 3 months ago)
reviewed by: deepseek/deepseek-v4-flash

Dillinger is a cloud-enabled, online Markdown editor with live preview, export to Markdown, HTML, and PDF, and synchronization with cloud storage services including GitHub, Dropbox, Google Drive, OneDrive, and Bitbucket. Built with Next.js 14 (App Router), the application uses Monaco Editor for editing, Zustand for client-side state management with localStorage persistence, and markdown-it with a rich plugin chain for rendering. It features a modular architecture with API routes for OAuth flows and file operations per cloud provider, a versioned public REST API (v1) for rendering and export, and separate packages for a CLI tool and an MCP server for LLM integration. The codebase is well-organized with clear component separation (editor, preview, sidebar, modals, UI primitives), custom hooks per integration, and comprehensive unit and E2E test coverage. Auxiliary agent/skill files and design system CSVs exist in the repository but are development tools, not part of the application runtime.

RATING8.7/10
QUALITY8.0/10
MAINTENANCEactive
DRIFTlow
CONTRIBUTORS128
VELOCITY0.58
OPEN ISSUES155
CLOSED ISSUES392
LAST COMMIT3 months ago
@monaco-editor/react (npm) ^4.7.0
@sparticuz/chromium (npm) ^143.0.4
@types/dompurify (npm) ^3.0.5
breakdance (npm) ^3.0.1
clsx (npm) ^2.1.1
dompurify (npm) ^3.3.1
dropbox (npm) ^10.34.0
highlight.js (npm) ^11.11.1
katex (npm) ^0.16.38
lucide-react (npm) ^0.562.0
markdown-it (npm) ^14.1.0
markdown-it-abbr (npm) ^2.0.0
markdown-it-checkbox (npm) ^1.1.0
markdown-it-deflist (npm) ^3.0.0
markdown-it-footnote (npm) ^4.0.0
markdown-it-ins (npm) ^4.0.0
markdown-it-mark (npm) ^4.0.0
markdown-it-sub (npm) ^2.0.0
markdown-it-sup (npm) ^2.0.0
markdown-it-texmath (npm) ^1.0.0
markdown-it-toc (npm) ^1.1.0
monaco-emacs (npm) ^0.3.0
monaco-vim (npm) ^0.4.4
next (npm) 14.2.35
puppeteer-core (npm) ^24.39.0
react (npm) ^18
react-dom (npm) ^18
tailwind-merge (npm) ^3.4.0
turndown (npm) ^7.2.2
zustand (npm) ^5.0.10
@playwright/test (npm) ^1.58.2
@testing-library/jest-dom (npm) ^6.9.1
@testing-library/react (npm) ^16.3.2
@testing-library/user-event (npm) ^14.6.1
@types/markdown-it (npm) ^14.1.2
@types/node (npm) ^20
@types/react (npm) ^18
@types/react-dom (npm) ^18
@vitest/coverage-v8 (npm) ^4.1.2
eslint (npm) ^8
eslint-config-next (npm) 14.2.35
jsdom (npm) ^28.1.0
postcss (npm) ^8
tailwindcss (npm) ^3.4.1
typescript (npm) ^5
vite-tsconfig-paths (npm) ^6.1.1
vitest (npm) ^4.0.18
Files by Type (count)
Markdown
210
TypeScript
93
TSX
50
CSV
47
Python
21
Other (.svg)
12
JSON
11
Other (.png)
11
Other (no ext)
3
Other (.woff)
2
HTML
2
Other (.mjs)
2
Files by Type (size)
Markdown
1008KB
CSV
743KB
JSON
384KB
TSX
297KB
TypeScript
279KB
HTML
237KB
Python
233KB
Other (.woff)
130KB
Other (.png)
63KB
Other (.svg)
27KB
Other (.ico)
7KB
CSS
4KB

The LLM identified 3 files worth highlighting for reuse:

Implements a Zustand store with hydration and persistence patterns. The store manages documents, settings, and UI state, with selective subscriptions to avoid unnecessary re-renders. It uses localStorage for persistence with a 2-second debounce and a hydration mechanism via StoreProvider to ensure client-side state is loaded before rendering. This pattern is self-contained and can be extracted into any React project requiring client-side state persistence.

file: stores/store.ts ↗ | tags: #state-management #persistence #hydration

Provides the core Markdown rendering pipeline using markdown-it with 11 plugins (including KaTeX, syntax highlighting, footnotes, task lists, and emoji). The renderer is dynamically imported to avoid SSR issues, and output is sanitized with DOMPurify. The plugin chain is configurable and demonstrates a clean, extensible pattern for building a secure Markdown renderer. This module can be extracted and reused in any Node.js or browser Markdown processing context.

file: lib/markdown.ts ↗ | tags: #markdown-rendering #plugin-chain #async-loading

A context-based toast notification system with a provider and useToast hook. It supports multiple toast types (success, error, info), auto-dismiss, and dynamic creation. The component is fully self-contained, uses React context for state management, and can be dropped into any React application without external dependencies. It demonstrates a clean, reusable pattern for global UI notifications.

file: components/ui/Toast.tsx ↗ | tags: #notification #context #react-pattern
Last analyzed: 2026-08-30 15:40:19.394800
Next check: 2026-09-06 15:40:19.391755
$ submit: