Przedstawiam FormattedAI — narzędzia deweloperskie stawiające na prywatność
Adam SzczotkaDlaczego zbudowałem FormattedAI
Za każdym razem, gdy musiałem sformatować markdown, zminifikować CSS czy skonwertować obraz do AVIF, musiałem wrzucać pliki na jakąś losową stronę. Dla dewelopera pracującego z kodem klienta pod NDA, to jest nie do zaakceptowania.
Dlatego zbudowałem FormattedAI — kolekcję narzędzi, które działają całkowicie w przeglądarce. Nic nigdy nie trafia na serwer.
Co robi
FormattedAI oferuje obecnie 5 narzędzi:
- Formater Markdown — wklej markdown wygenerowany przez AI i eksportuj do DOCX, HTML lub Google Docs
- Konwerter AVIF — wsadowa konwersja obrazów przez WebAssembly z pobieraniem ZIP
- Minifikator CSS — zasilany przez CSSO, działa w przeglądarce
- Minifikator JS — zasilany przez Terser, obsługuje ES6+
- Generator tagów SEO/GEO — meta tagi, Open Graph, JSON-LD, llms.txt, robots.txt zoptymalizowany pod AI
Podejście techniczne
Cała aplikacja zbudowana jest z czystego HTML, SCSS i JavaScript. Bez React, bez Vue, bez frameworków. Narzędzia budowania ograniczają się do Sass i esbuild. To utrzymuje bundle poniżej 50KB na stronę i eliminuje ryzyko supply chain.
Konwerter AVIF to najbardziej technicznie interesująca część. Używa jSquash skompilowanego do WebAssembly, działającego w Web Workerze, żeby główny wątek był responsywny. Możesz skonwertować paczkę 20 obrazów bez zamrożenia UI.
Prywatność w projekcie
Każda decyzja architektoniczna została podjęta z myślą o prywatności:
- Zero przetwarzania po stronie serwera — wszystko działa w JavaScript/WASM
- Zero analityki — nawet self-hosted
- Zero ciasteczek — preferencja motywu używa localStorage
- Ścisła Content Security Policy — zapobiega eksfiltracji danych nawet jeśli zależność zostanie skompromitowana
Co dalej
Dwa kolejne narzędzia są w przygotowaniu: JSON Formatter i Generator Palet Kolorów ze sprawdzaniem kontrastu WCAG. Oba będą działać na tej samej zasadzie — zero kontaktu z serwerem, wszystko w przeglądarce.
Sprawdź na formattedai.pl lub zobacz kod źródłowy na GitHub.
