Skip to main content
Himanshu Chandola

Markdrop: Two Versions, One App — Why I Kept v1 and Shipped v2

|4 min read

I’ve been running a small side project called Markdrop — a markdown editor with live preview where you can share a document via link and anyone with the link can view the rendered result. Over time it evolved into two distinct versions: an older stack (v1) and a newer one (v2). Instead of dropping v1, I kept both and gave each its own domain. Here’s what each version does and why I moved to v2 while keeping v1 around.

What Markdrop Does

Markdrop is a minimal “write → share → view” flow:

  1. You write markdown in an editor with live preview.
  2. You share the document (e.g. via a “Share” action).
  3. Anyone with the link can open and read the rendered markdown — no sign-up, no auth.

Both v1 and v2 follow this idea; they differ in stack, features, and where they live.

v1: The Original (MongoDB + Next.js Pages)

The first version is the legacy app. It’s still live and unchanged for people who already use it.

Where it lives: v1-markdown.himanshuchandola.dev

Stack:

  • Next.js (Pages Router), React, TypeScript
  • MongoDB (Mongoose) for storing documents
  • markdown-it + highlight.js for rendering, dompurify for sanitization
  • Jest + Testing Library for tests
  • PostCSS, next-themes (light/dark)

Features:

  • Editor: Type or paste markdown, upload .md / .txt files, clear and start over. Live preview.
  • Share: Create a “page” with optional password protection and optional expiration. Anyone with the link (and password if set) can view.
  • Edit: If you set a password, you can edit the document at /[slug]/edit (e.g. v1-markdown.himanshuchandola.dev/your-slug/edit).
  • URLs: Documents are at /[slug] on the v1 domain.

So v1 is the “full-featured” version: uploads, passwords, expiration, and in-place editing. It’s solid for private or time-limited notes. The tradeoff is operational: you run and maintain MongoDB (or Atlas), env vars, and a slightly heavier app.

v2: The New Default (Supabase + Next.js App Router)

The current default is v2 — the one I point people to for new use.

Where it lives: markdown.himanshuchandola.dev

Stack:

  • Next.js (App Router), React, TypeScript
  • Supabase (Postgres) for storing documents — no MongoDB, no DB server to run
  • TailwindCSS, Radix UI / shadcn/ui
  • react-markdown, rehype-highlight, remark-gfm (markdown + code + math)

Features:

  • Editor: Type or paste markdown with real-time preview. Syntax highlighting for code blocks. Clean, minimal UI.
  • Share: Create a document and get a share link. Anyone with the link can view at /share/[id]. No passwords or expiration — just “create and share.”
  • URLs: Shared docs are at /share/[id] (e.g. markdown.himanshuchandola.dev/share/abc123).

v2 is intentionally simpler: no uploads, no passwords, no expiration. The focus is “write → share → view” with the least friction and a managed backend.

Why I Chose v2 as the Main Version

1. Managed backend. Supabase gives me Postgres, auth (if I need it later), and a REST/real-time API without running or patching a database myself. For a small side project, that’s a big win.

2. No DB ops. With v1 I had to think about MongoDB (local or Atlas), connection strings, and backups. With v2, Supabase handles that. Deploy is “connect repo, set env vars, go.”

3. Modern Next.js. App Router, Server Components, and the current React/Next patterns fit how I want to build new features. v1 is stable on Pages Router; v2 is where I iterate.

4. Simpler mental model. v2’s flow is “one document, one share link.” No passwords or expiration to explain. That makes it easier to use and to describe.

5. Free tier. Supabase’s free tier is enough for my traffic. Same idea as “no DB server” — lower cost and less to maintain.

So v2 isn’t “v1 with fewer features” — it’s a deliberate simplification and a different product shape. v1 remains for people who already rely on passwords, expiration, or uploads.

Why Keep v1 (and Give It Its Own Domain)

I didn’t retire v1 because:

  • Existing content. People have already created documents. Those live in MongoDB and are identified by slug. Killing v1 would break those links and that data.
  • Old links. Any shared link that used the main domain with a v1-style path points at v1. Redirecting those paths from the main domain to the v1 subdomain keeps old links working without mixing v1 and v2 logic.
  • Clear split. Having v1-markdown.himanshuchandola.dev for the legacy app and markdown.himanshuchandola.dev for v2 makes it obvious which version you’re on and which stack backs it.

So: v1 stays up on its subdomain, unchanged. v2 is the default on the main domain. New users get v2; existing v1 links and content keep working.

If you’re new to Markdrop, use markdown.himanshuchandola.dev. If you have old links or need password/expiration, use v1-markdown.himanshuchandola.dev. Both versions are open source on the same repo: github.com/himanshuchandola/markdown-share — v1 on the v1 branch, v2 on main.