Serverless Converter is a privacy-first, zero-backend conversion toolkit.
Everything runs locally in your browser.
- Markdown Converter: paste or upload
.md/.txt, preview Markdown, export TXT, MD, HTML, DOCX, and print/save as PDF. - Text Cleaner: paste or upload
.txt, remove Markdown formatting, normalize whitespace, convert smart quotes, remove zero-width characters, and export TXT. - PDF Tools: merge PDFs, split/extract ranges, delete pages, reorder pages, and unlock password-protected PDFs when you already know the password.
- JSON / CSV: pretty-print JSON and convert between JSON and CSV.
- Image Tools: convert and resize PNG, JPEG, and WebP images.
- Base64: encode and decode text or files.
- Slack: convert Markdown to Slack mrkdwn.
- Input: Markdown, plain text, PDF, JSON, CSV, PNG, JPEG, WebP, and Base64.
- Output: TXT, Markdown, standalone HTML, semantic DOCX, print/save-as-PDF, generated PDFs, JSON, CSV, PNG, JPEG, WebP, and Base64.
npm install
npm run devnpm run build
npm run previewFor a local root-path build instead of the default GitHub Pages base path:
VITE_BASE_PATH=/ npm run buildThis app is fully static and deploys to GitHub Pages:
https://vismaytiwari.github.io/serverless_converter/
Deployment is handled by .github/workflows/deploy.yml.
- Enable GitHub Pages for the repository.
- Set the Pages source to GitHub Actions.
- Push to
main. - The workflow installs dependencies, runs tests, builds with
VITE_BASE_PATH=/<repo-name>/, uploadsdist, and deploys the static site.
The app uses a single-page shell and hash-based tab state, so browser refreshes do not depend on server-side routing.
The app is split so design changes do not affect conversion logic:
src/appowns the app shell andtoolRegistry.src/components/commoncontains reusable UI only.src/tools/markdowncontains Markdown UI, service logic, exporters, types, and tests.src/tools/textcontains Text Cleaner UI, service logic, types, and tests.src/tools/pdfcontains PDF UI and separate services for merge, split, reorder/delete, and unlock.src/exportcontains TXT, HTML, DOCX, and print exporters.src/servicescontains reusable file and page-break helpers.src/stylescontrols theme and layout through CSS variables.
Conversion services do not import React or CSS. React components handle layout, interaction, and rendering only.
Tools are declared in src/app/toolRegistry.ts. Each tool is lazy-loaded through its own registry entry.
To remove a tool, remove its registry entry. The app shell still builds because it renders only enabled registry tools and does not import tool components directly.
To add a tool, create a new folder under src/tools/<tool-name>, keep service logic separate from UI, add focused tests, then add one registry entry.
PDF unlock is local-only and lazy-loads qpdf WASM only when the unlock tool is used. It only works when you already know the PDF password.
Serverless Converter does not crack, guess, brute force, or bypass unknown passwords.
Sample files live under public/samples:
simple-markdown.mdmultipage-markdown.mdmarkdown-table-list-code.mdsimple-text.txt
For PDF testing, create or use local PDFs from your own device. Do not upload private PDFs to third-party services to create samples.
- No backend conversion.
- No API calls.
- Browser memory limits apply.
- Very large files may be slow.
- Markdown PDF export uses browser print/save-as-PDF.
- DOCX export is semantic, not pixel-perfect.
- PDF unlock only works when the user already knows the password.
- No password cracking or brute-force support.
- Some encrypted PDFs may use unsupported encryption.