How I Built GlassPad
GlassPad started as a simple itch: I wanted a free word processor in the browser that looked modern, respected privacy, and did not force an account. No Electron bloat. No “we train on your docs.” Just open the URL and write. This is how I built it — and what I would tell myself on day one.
The problem
Most online editors want a login. Many “free” tools watermark exports or quietly sync everything to a server. I needed something I could recommend to travel clients and friends without a privacy disclaimer longer than the document.
Constraints I set early:
- Static site — HTML, CSS, JS only (easy to host, easy to reason about)
- Documents stay on-device (localStorage / browser storage)
- Glassmorphism UI aligned with the brand I was already building
- Export to PDF and Word without a backend
- Works on phones and laptops
A shipping v1 with bold/italic/lists/tables beats a half-finished AI co-author. Cut features until the core loop feels inevitable.
Approach
I treated GlassPad like a product, not a code golf exercise:
- Paper prototype the chrome — toolbar, document surface, export menu. The glass panels had to feel like one composition, not a dashboard of widgets.
- Pick an editing strategy — contentEditable with careful sanitisation vs a lightweight editor library. Either can work; what matters is predictable formatting and undo.
- Storage first — autosave to local storage early. Users forgive missing features; they do not forgive lost words.
- Export last-mile — PDF/Word export is where many browser editors fail. Test real documents, not lorem ipsum.
- Polish the empty state — first open should feel inviting, not like a developer demo.
Tech stack (intentionally boring)
- HTML/CSS/JS — no heavy framework tax for a focused tool
- CSS variables for light/dark and the blue→purple accent gradient
- localStorage (and related browser storage) for drafts — privacy by architecture
- Client-side export libraries where needed for PDF/DOCX
Boring stack means fewer supply-chain surprises and a site you can still understand at 1 a.m. in a hotel in Japan.
If the architecture never sends document text to a server, you do not need a marketing claim — the product behaviour is the claim. Be honest about what you do store locally and how to clear it.
Features that made the cut
- Rich text: headings, emphasis, lists, tables, images
- Glass UI with dark mode
- Export to PDF and Word (.docx)
- Import Word, Markdown, and plain text into a local draft
- Storage health cues and honest limits on browser persistence
- Keyboard shortcuts, Full New reset, and installable PWA
- GlassCompress handoff for private image shrink-then-insert
- No signup wall
What shipped after the first public cut
v1 proved write → format → export. The next wave made GlassPad feel like a real daily driver: open real files people already have, warn before storage gets tight, and hand heavy images to GlassCompress without leaving the privacy story. A public changelog at glasspad.madushka.com/changelog keeps that timeline honest.
What went wrong (so you can skip it)
- Over-animating the UI — motion should signal hierarchy, not decorate every button.
- Under-testing mobile keyboards — toolbar vs soft keyboard layout needs real devices.
- Export edge cases — nested lists, wide tables, and images need golden-file tests.
- Assuming localStorage is forever — browsers can evict data; communicate that and offer download backups.
Results and links
GlassPad is live at glasspad.madushka.com. It sits under Zetova Technologies as a public, free tool — and as proof that a solo founder can ship something useful without a backend team.
For the portfolio framing (problem → approach → features → tech), see the GlassPad case study. For more how-tos, browse Guides.
If you build your own tool
- Write the privacy story into the architecture, not the About page.
- Ship a narrow v1 to real users quickly.
- Keep the stack boring enough to maintain on travel days.
- Document export and storage limitations honestly.
That is the GlassPad playbook in one page: constrain, ship, polish, import what people already wrote, and protect the user’s words.