How Madhav got here.
From a scrappy Telegram bot to a full cross-platform productivity system with real-time sync, AES-256 encryption, and a side panel that lives on your screen edge.
Reliable Auto-Updates & In-App Announcements
Auto-Updates Fixed for Good
- ⚡Fixed a bug where the installer was spawned twice on update, causing both to fail and the app to stay on the old version
- ✓A smooth 'Installing…' overlay now appears before the app quits, so updates never feel like a crash
- ✓Windows artifact naming is now locked — latest.yml and the installer filename always match, no more 404 silent failures
In-App Announcements
- ⚡Bell icon in the sidebar header — blinks teal when new announcements are waiting
- ✓Slide-in announcements panel with update notes, tips, and community news — no need to check external channels
- ✓Per-device read tracking: once you've seen an announcement, the dot goes away
Other Fixes
- ✓Windows notifications now show 'Madhav' as the sender instead of 'Electron'
- ✓OCR screen capture now works correctly at 125% display scaling
Global Capture & OCR Snip
Capture Anything, Anywhere
- ⚡Alt+S captures selected text from any app — browser, PDF, code editor — and saves it as a note instantly
- ⚡Alt+Shift+S opens a full-screen snip overlay: draw a rectangle around any text on screen, Madhav OCRs and saves it
- ✓The screen unblocks the moment you release the mouse — OCR runs silently in the background, no freezing
- ✓Windows notification confirms every capture so you always know it landed
Smart Category Detection
- ✓Captured URLs (with or without https://) are automatically saved as Bookmarks with a normalized link
- ✓Bullet lists detected by OCR are saved as Tasks with proper markdown formatting
- ✓Both capture shortcuts are configurable in Settings → Shortcuts
Bookmark Link Previews & UI Polish
Bookmark Link Previews
- ⚡Bookmark cards now show a rich link preview — favicon, page title, description, and cover image fetched automatically
- ✓Twitter / X posts show the author name and tweet text via the public oEmbed API
- ✓Hover over any bookmark to reveal a 'Visit ↗' button that opens the link in your browser
- ✓Previews are cached per session — no re-fetching when you scroll past the same bookmark
Settings & Shortcuts
- ⚡Bookmark shortcut defaults to Ctrl+4 — hit it while typing a URL to save it instantly as a bookmark
- ✓Show completed tasks and Sound effects toggles moved above the Shortcuts section for quicker access
Auto-Update Fix & Telegram Cleanup
Auto-Update Fixed
- ⚡Fixed a bug where update download failures showed 'Already on latest' — making it impossible to update without reinstalling manually
- ✓Download button now reappears after a failed download so you can retry without restarting the app
- ✓The 'Latest ↗' button now correctly links to the GitHub releases page
Telegram Cleanup
- ⚡Removed 'Thought' as a category option from the Telegram bot — the type picker now shows Uncategorized, Task, Note, Idea
- ✓Removed /thoughts command from the bot menu — it no longer shows up or returns 'not found'
- ✓Bot command menu now self-corrects on /start so it always reflects the latest available commands
Thoughts, Export & Card Intelligence
Thoughts Terminology & Category Cleanup
- ⚡All captured items now have a collective name: Thoughts. Notes, tasks, ideas, and uncategorized are all types of thoughts — one consistent language across the app and Telegram.
- ✓Category order is now Uncategorized → Task → Note → Idea everywhere — desktop and Telegram now match
- ✓Removed 'Thought' as a selectable type — the type picker tells you what kind of thought it is, not what it is
- ✓New thoughts default to Uncategorized (was Note), matching the Telegram default
Export & Data Control
- ⚡Export all your thoughts (or archive only) to a Markdown file via the native save dialog — your data, your file system
- ✓Delete all data from Settings with a 6-digit confirmation code — removes from both local storage and Convex cloud
- ✓Long Telegram messages no longer get silently dropped — notes are truncated at 3800 chars with a note pointing you back to the app
Card Improvements
- ⚡Long thoughts (>500 chars) auto-collapse in the sidebar — a clean list without losing any content
- ✓Collapsed cards show a subtle · · · indicator at the bottom so you always know there's more inside
- ✓Madhav now stays in the system tray only — no taskbar button appearing on Windows
Auto-Update Polish, Installer UX & Stability
Auto-Update Experience
- ⚡Update banner moved to the bottom of the panel — slides up cleanly without covering your content
- ✓Install Now renamed to Restart Now. Dismissing the ready-to-install banner shows a friendly note that the update will apply on next quit.
- ✓Auto and Notify modes now check for updates on startup automatically — no more manual button press to see if a new version is available
- ✓Manual mode removed from the slider. A direct 'Latest ↗' link opens the GitHub releases page instead.
Invisible Overlay Fix
- ⚡Fixed a bug where Madhav would become an invisible click-blocker on the right edge of the screen after waking from sleep or after an update restart
- ✓The panel now waits for the renderer to fully mount before moving the native window — no more ghost window blocking your screen
- ✓Waking from hibernate/sleep now reloads the renderer to reset GPU state, so the panel always comes back visible
Settings & Installer
- ⚡Exit button added to the Settings header — quit the app instantly without going to the tray
- ✓NSIS installer now lets you choose a custom install directory (not just C: drive)
- ✓Installer shows a plain-English note about the Windows SmartScreen warning so first-time users know the app is safe
- ✓Splash screen redesigned — dark background, video logo in a rounded tile, app name, tagline, and a smooth loading bar
Archive, Settings Tabs & Sounds
Archive
- ⚡Archive any card with one click — it disappears from your main list without being deleted
- ✓Archived notes are never fetched with your active notes — zero bandwidth cost until you actually open the Archive filter
- ✓Select 'Archived' in the filter bar to browse archived cards. Unarchive any card to bring it back.
- ✓Telegram /archive command lists your last 10 archived notes from the bot
Settings — Basic / Advanced Tabs
- ⚡Settings panel is now split into Basic and Advanced tabs with a smooth sliding animated indicator
- ✓Switching tabs plays a directional slide animation — left/right depending on which tab you pick
- ✓Basic: Panel Behavior, Appearance, Shortcuts. Advanced: Updates, Experimental, Telegram, Feedback, Contact.
Sounds & Polish
- ⚡Tab switching and accordion expand/collapse now play synthesized UI sounds — swoosh on tab switch, soft pop on expand
- ✓Collapsed card height is now consistent across all sections — no more taller-than-expected collapsed headers
- ✓Feedback form no longer pre-fills the contact field with a URL; gap between settings cards made uniform
- ✓Version shown at the bottom of both Basic and Advanced tabs
Community
- ✓Telegram community and Discord server links added to the Contact section in Settings and to this landing page footer
Global Quick Capture
Quick Capture
- ⚡Press Alt+C anywhere on your desktop — a floating capture window appears instantly, no need to open the sidebar
- ✓Pick a category, type your note, hit Ctrl+Enter to save. The card animates away toward the sidebar, or Esc to cancel.
- ✓Click outside to close — the exit animation plays even on blur, no jarring disappearance
- ✓Drag the window anywhere on screen by the top bar. Shortcut is configurable in Settings.
Polish
- ⚡Both the Quick Capture input and sidebar note input now cycle through animated placeholder phrases — 'Drop that idea here…', 'Something to remember?', and more
- ✓Markdown guide accessible from Quick Capture — 2-column reference panel slides up inside the card
Completed Tasks Done Right
Task UX
- ⚡Completed tasks now live in a collapsible 'Completed · N' section at the bottom — your active list stays clean and focused
- ✓Section is collapsed by default, expands with a smooth animation. Arrow rotates to show state.
- ✓Whole card fades to 60% opacity — border, background, and text dim together, not just the text. One glance is enough to tell open from done.
Polish
- ✓Pin icon now uses the same button style as Edit, Copy, Delete — consistent 22×22 size, tinted background, and spacing
Lucide Icons, Smart Filters & Markdown Composer
Icons
- ⚡Switched to Lucide React icons for all action controls — crisp, pixel-perfect, consistent on every machine
- ✓Hybrid approach: category labels (📝 Note, 💡 Idea, ✅ Task) keep their emoji warmth. Edit, delete, copy, pin, remind, fold all get clean vector icons.
- ✓No more rendering inconsistencies between Windows, macOS, and Telegram
Filters
- ⚡Task filter is now split into two: Completed Tasks and Open Tasks — filter exactly what you need
- ✓Lucide CheckSquare and Square icons in the filter rows — perfectly aligned, no more emoji baseline mismatch
- ✓Filter dropdown closes on Escape key and when the panel slides away
Markdown Composer
- ⚡Live markdown preview in the note input — type '- item' and see the bullet list render instantly below as you type
- ✓M button in the composer footer shows a quick reference card of all supported markdown: lists, bold, italic, code, headings, quotes, links
Settings & Cards
- ✓Panel Behavior section now in a consistent card — all settings headings at the same alignment
- ✓Appearance section is now collapsible (expanded by default)
- ✓Action buttons and fold button enlarged (18 → 22 px) for easier tapping — card height stays fixed, no layout shift
- ✓Completed task text opacity tuned: slightly less aggressive so long notes remain readable while still clearly done
Instant Everything, Smart Fold & Telegram Notifications
Performance
- ⚡Every toggle — complete, fold, pin — is now instant. No more 1–2 second wait for Convex to respond.
- ✓Optimistic updates across the board: UI reacts immediately, syncs in the background, reverts if it fails
Smart Task Fold
- ⚡Mark a task done → card auto-collapses with a smooth animation. Undo it → card expands right back.
- ✓Fold/unfold animation now runs over the real content height — smooth at any note length, not a jarring snap
- ✓Fold state is local-only — expanding or collapsing never triggers a Telegram notification or server round-trip
Telegram Notifications
- ⚡Edit a note's content → Telegram gets a notification with the updated text
- ✓Change a note's category → Telegram tells you what it moved to
- ✓Complete a task → Telegram confirms with a ✅ message
Card UX
- ✓Category dropdown no longer hides behind other cards — it floats freely above everything
- ✓Opening the panel always shows a clean slate — no stale dropdowns or menus left open from last time
- ✓Double-click to edit removed — the dedicated ✎ button is the only way in, no accidental edits
Under the Hood
- 🔧Fixed a memory leak — with many cards open, background listeners were accumulating silently. Gone.
- 🔧Fixed 'Note not found' errors when folding or completing synced notes
Settings Experiments, Edit UX & Layout Fixes
Experimental
- ⚡New Experimental section in Settings — try different UI variants and vote on which you prefer
- ✓Action button experiment: V1 (click to expand a footer bar) vs V2 (icons appear inline in the card header on hover)
- ✓Built-in upvote system — your vote is counted in real time to help decide what ships by default
Edit Mode
- ✓Edit hint bar replaced with two clear buttons: Esc / Cancel (grey) and Ctrl+Enter / Save (green)
- 🔧Cursor now correctly lands at the end of text when entering edit mode — no more caret jumping to position 0
Card Layout
- 🔧Card header is now a fixed 38px height — hover icons no longer push content down when they appear
- ✓V2 hover icons match the fold button size exactly (18×18 px) with a smooth slide-in animation
- 🔧Checkbox and TASK category label now sit on the same baseline — the misalignment is fixed
Settings Polish
- 🔧Scrollbar no longer shifts the panel content left when it appears — layout is rock solid
- ✓All collapsible settings sections have consistent spacing whether open or closed
Polish, Sounds & Smarter Telegram
Sounds
- ⚡Realistic UI sounds — filtered noise for clicks, ascending chime for task completion, distinct sounds per action
- ✓Toggle sounds on/off in Settings
Experience
- ✓Confetti burst when you complete a task
- ✓Action button hover transitions — 75 ms snap instead of sluggish 150 ms
- ✓Click to expand card actions (replaces hover-only reveal)
- ✓Max 5 pinned notes — pin button disabled with visual cue when limit reached
Appearance
- ✓Custom sidebar width slider (280–520 px)
- ✓Backdrop blur slider with live preview
- ✓Image background with draggable crop overlay — choose exactly which part shows in the panel
- ✓Animated logo splash screen on app launch
Shortcuts
- ✓Ctrl+1–5 in the note composer to instantly save as a specific category
- ✓All shortcuts configurable in a new Settings section
Telegram
- ⚡Notes save instantly as Uncategorized the moment you send a message — no more lost notes if you forget to pick a category
- ✓Category picker now shows Task → Note → Idea → Thought → Cancel in a consistent order
- ✓Cancel keeps the note as Uncategorized — nothing is ever lost
Panel
- ✓Hotkey mode — panel stays hidden, opens with your keyboard shortcut, closes when you click away
- ✓New Telegram-created notes always appear at the top of the list
Search, Drag & Full Telegram Control
Panel
- ⚡3 panel modes — Hover (auto-hide), Fixed (always visible), Hotkey (AutoHotKey shortcut to toggle)
Search
- ✓Expandable search bar with live filtering across all notes
- ✓Keyword highlights rendered inline inside markdown cards
Cards
- ✓Drag to reorder — right-click hold on any non-pinned card, drop it anywhere
- 🔧Edit mode preserves card height — no more jarring collapse to a tiny textarea
Telegram
- ✓Edit, delete, and mark tasks done directly from Telegram — desktop not required
- ✓Category-aware message display — notes render as notes, tasks as tasks
UI
- 🔧Ctrl+Enter label fix (was incorrectly shown as ⌘ Enter)
- 🔧Panel behavior info button moved inline with section heading
Server-side Encryption + Readable Telegram
Notes added from the desktop showed as encrypted gibberish in Telegram. AES-256 is great for privacy — terrible for readability. Your Telegram bot was sending you ciphertext.
Architecture
- ⚡Moved to server-side encryption — Convex stores encrypted at rest, decrypts for authorized Telegram delivery
- ✓Bidirectional sync — create from desktop → appears in Telegram; send to bot → appears in panel
Telegram
- ✓Messages now render with markdown, category labels, emoji, and action buttons (Done / Edit / Del)
- ✓Pinned notes, completed tasks, and folded cards — all synced across both surfaces
Convex Backend + Client-side Encryption
Long polling only worked while the desktop app was running. Close the app — bot goes silent. There was no backend, no persistence. It was pure peer-to-peer through Telegram's API.
Backend
- ⚡Shifted to Convex as central backend — always-on, real-time, serverless
- ✓Notes now persist and sync even when the desktop app is closed
Security
- ✓AES-256-GCM client-side encryption — your key, never sent to the server
Onboarding
- ✓QR link-code flow — connect Telegram in 30 seconds, no manual token entry
Known limitation
- 🔧Client-side encryption meant Telegram couldn't decrypt note content — showed ciphertext instead of notes
The Beginning
What we built
- ✓Simple Telegram bot + Electron desktop app, connected via long polling
- ✓Desktop sent notes back to Telegram via the bot
- ✓Worked great… as long as the app was open
The aha moment
- 🔧Close the app → bot goes silent. No backend, no persistence — everything peer-to-peer
- 🔧People wanted capture-anywhere, not capture-only-when-laptop-is-open
The story continues…