🔄 Alihformat — Eighty File Converters That Never Upload the File, and One Route for the Four That Must
An Indonesian-language file converter of eighty tools on seven shelves — images, PDF, archives, spreadsheets and data, documents, audio and video, and AI — built on a promise printed on the page of every local tool: Diproses di perangkatmu, tanpa upload. Seventy-six converters run entirely in the browser in JavaScript and WebAssembly; only the four marked AI send a file anywhere. The whole catalogue is one data file with no functions in it, read by the server to pre-render a static page per converter for search engines and by the client to dispatch each engine kind to a module imported only when needed, so a new pair such as WEBP to BMP is one line in an array. Images pass through Canvas with hand-written BMP and six-size ICO encoders, heic2any for iPhone photos, SVGs sized from their viewBox, and a pixel ceiling that drops to 16 MP on iOS Safari, where larger canvases fail silently. PDFs are assembled with pdf-lib — which reads a JPEG’s EXIF orientation to decide whether a phone photo can be embedded as-is or must be redrawn upright — and rendered with pdf.js under the print intent so a background tab does not stall the job. Archives open with fflate for plain ZIP and libarchive.js in WebAssembly for RAR, 7Z and TAR; 7Z is written by having libarchive gzip the stream, because it emits an empty file uncompressed, and gunzipping the result. Spreadsheets use SheetJS 0.20.3 from its own CDN rather than the outdated npm release, every CSV carries a BOM so Excel reads UTF-8, and XML keeps 08123 as text. Audio and video run on a 30 MB ffmpeg.wasm fetched once, with jobs serialised through a promise queue so two tools never share temporary files. The AI shelf — PDF to Markdown, OCR, table photo to CSV, invoice to JSON — posts to one Next.js route that holds the OpenRouter key, fixes the prompt at temperature zero, and caps files at 3 MB under the platform’s 4.5 MB body limit, shrinking oversized photos a fifth at a time until they fit.
Keywords Client-Side Conversion·WebAssembly·ffmpeg.wasm·libarchive.js·pdf-lib·pdf.js·SheetJS·Next.js SSG·OpenRouter·Bahasa Indonesia
