Skip to content

Repository files navigation

File Format Converter

Atlanta, USA

GitHub Cloud2BR OSS - Learning Hub

Last updated: 2026-08-24


A free, private, in-browser file format converter deployed to GitHub Pages. Upload a file, pick a target format, click convert, and download the result. Every conversion runs locally in your browser — files are never uploaded to a server.

Live app

The project is deployed to GitHub Pages via GitHub Actions, with two environments driven by the main and test branches:

Branch Environment Description URL
main Production Stable release served at the site root. File Converter
test Staging Preview of in-progress work served under the /test/ path. File Converter Test

Supported conversions

From To
Markdown HTML, PDF, Word (.docx), PowerPoint (.pptx)
Word (.docx) HTML, Markdown, PDF
PDF Images (per page + ZIP of all pages), extracted text
HTML Markdown, PDF
Plain text Markdown, HTML, PDF, PowerPoint
CSV JSON
JSON CSV
JPG, PNG, WebP JPG, PNG, WebP, or a compressed image in its original format

Every supported upload also has a Compress file size mode whose download keeps the uploaded extension. JPG, PNG, and WebP use native image compression. Word and PowerPoint packages are recompressed losslessly in their original format. PDFs are rewritten with compressed object streams, JSON is compacted, and text-based formats use safe encoding and line-ending normalization. Every path keeps the original extension and falls back to the upload when optimization would make the result larger.

PDF compression also includes an optional Reduce PDF below 25 MB mode. It first uses lossless structural compression. When needed, it rebuilds the PDF from JPEG page images at a lower resolution to meet the 25 MB maximum; this removes selectable text, links, and form fields.

Note

PDF → images renders each page to PNG. You can preview and save pages individually, and also download a ZIP containing every page.

Images have two modes: Convert format changes between JPG, PNG, and WebP, while Compress file size keeps the uploaded extension. Choose maximum quality, balanced, or smallest-file ranges, or provide a target size in KB or MB. Target-size matching is best effort and can reduce image dimensions when quality reduction alone is insufficient. PNG remains lossless; convert it to JPG or WebP when a specific smaller target is required.

Same-format compression cannot guarantee a smaller result. Formats that are already compressed internally may not become significantly smaller.

How it works

The app is a single-page React + TypeScript project built with Vite. A small conversion engine (src/converters/) maps each input format to its available targets and runs the matching browser library:

  • marked — Markdown → HTML
  • mammoth — Word → HTML
  • turndown — HTML → Markdown
  • docx — Markdown/text → Word
  • pdfjs-dist — PDF rendering and text extraction
  • pptxgenjs — slides from headings
  • papaparse — CSV ↔ JSON
  • html2pdf.js — HTML → PDF
  • jszip / file-saver — packaging and downloads

Local development

npm install
npm run dev      # start the dev server
npm run build    # type-check and produce the production bundle in dist/
npm run preview  # serve the built bundle locally

Deployment

.github/workflows/deploy-pages.yml builds the app and deploys it to GitHub
Pages on pushes to main and on manual runs. Pushes to test trigger an automatic
dispatch of the same workflow on main (to satisfy github-pages environment protection rules).
Both environments ship in a single
Pages artifact:

  • main → built with base /File-Format-Converter/ → served at the site root /.
  • test → built with base /File-Format-Converter/test/ → served at /test/.

Smart refresh behavior:

  • Push to test → refreshes /test/ first, while production (/) is reused from cache when possible.
  • Push to main → refreshes production (/) first, while /test/ is reused from cache when possible.

Repository automation

This repo keeps the organization's standard pipelines:

Workflow Trigger What it does
.github/workflows/deploy-pages.yml Push to main / test and manual runs Deploys from protected main only; test pushes auto-dispatch a main run in test-refresh mode. Rebuild priority is branch-aware (test -> /test/, main -> /).
.github/workflows/cleanup-deployments.yml After Pages deploy success, daily schedule, and manual runs Keeps only the two newest deployment records in the github-pages environment and prunes older ones.
.github/workflows/validate_and_fix_markdown.yml Pull requests to main Runs markdownlint, auto-fixes Markdown style issues when possible, validates the required header block for every tracked Markdown file, and pushes any fixes back to the PR branch.
.github/workflows/update-md-date.yml Pull requests to main Looks at the full PR diff, updates the Last updated: line inside the standard Markdown header block for changed Markdown files, and pushes the result back to the PR branch.
.github/workflows/validate_and_fix_notebook.yml Pull requests to main Validates Jupyter notebooks, normalizes widget metadata when needed, and commits notebook-format fixes back to the PR branch.
.github/workflows/use-visitor-counter.yml Pull requests to main and manual runs Runs the vendored visitor-counter script stored in this repo to refresh Markdown counter badges and metrics.json, then commits the updated repository traffic data.

Total views

Refresh Date: 2026-04-07

About

Demo web app that lets users upload their files and choose the format in which they will like their final format from the options

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages