Zennote turns messy AI markdown into beautiful, shareable notes — instantly.
Zennote is a markdown beautifier built for the modern age of AI and instant sharing.
It takes unstructured markdown (often copied from AI tools), beautifies it with a clean design, and gives you a shareable URL — all in seconds.
Perfect for:
- Sharing AI responses or dev notes
- Creating clean, shareable docs from markdown
- Personal knowledge management
| Layer | Tech |
|---|---|
| Frontend | Next.js 15 + Tailwind CSS |
| Backend | Cloudflare Workers (TypeScript) |
| Auth | Clerk for authentication |
| Storage | Cloudflare R2 for OG images |
| DB | Cloudflare D1 for metadata |
| Cache | Cloudflare KV for caching and rate limiting |
| Deployment | Cloudflare Pages & Workers via Wrangler |
zennote/
├── apps/
│ ├── backend/ # Cloudflare Worker logic
│ │ ├── src/ # Worker source code (index.ts)
│ │ └── migrations/ # DB migrations (D1/R1)
│ └── frontend/ # Next.js app
│ └── src/ # App Router setup, components, libs, config
├── .gitignore
├── LICENSE
└── README.md
Zennote uses Cloudflare's full stack for hosting:
- Frontend is deployed using Cloudflare Pages
- Backend API is a Cloudflare Worker deployed via
wrangler - R2 stores pre-generated OG images (served via public URL)
- D1 stores metadata (notes, users, profiles, access permissions)
- KV provides caching and rate limiting
Configuration files:
apps/backend/wrangler.toml- Worker configurationapps/backend/migrations/- Database schema migrations
- Node.js 18+
- Cloudflare account (for Wrangler)
- Clerk account (for authentication)
# Clone the repo
git clone https://github.com/your-username/zennote.git
cd zennote
# Frontend setup
cd apps/frontend
npm install
# Create .env.local with:
# - NEXT_PUBLIC_API_URL=http://localhost:8787
# - NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=your-clerk-key
# - NEXT_PUBLIC_OG_CDN_BASE_URL=your-r2-public-url
npm run dev
# Backend setup
cd ../backend
npm install
# Set up secrets (see apps/backend/DATABASE_SETUP.md)
wrangler dev- Database: Run
npm run db:setupinapps/backend/(creates D1 database and runs migrations) - Secrets: Set required secrets via
npm run secrets:set(seewrangler.tomlfor list) - R2: Create R2 bucket and configure (see
apps/backend/R2_CDN_SETUP.md)
See apps/backend/DATABASE_SETUP.md for detailed setup instructions.
Contributions are welcome! Here’s how to get started:
- 🍴 Fork this repo
- 👯 Clone your fork
- 💡 Create a feature branch:
git checkout -b my-feature - 🧪 Make changes & test them
- 📬 Open a PR with a clear title and description
- Follow existing project structure
- Format code using Prettier (
.prettierrc) - Keep commits clean and meaningful
- Don’t commit secrets or
.envfiles
Open an issue or start a discussion! Whether it's a bug, feature idea, or random thought — we'd love to hear it.
MIT License.
Feel free to use, remix, or extend Zennote. Just don’t be evil 🙃
Made with ☕ + 💭 by Shivansh Karan