Borderify is a open source Progressive Web App (PWA) for gallery-grade image styling, vibe coded from scratch using Google's Antigravity and Gemini 3.0 Pro/Flash.
It allows you to add professional Polaroid-style borders, variable background blurring, and customize your image presentations effortlessly. It runs fully offline and can be installed natively on both mobile devices and desktops.
If you like this, do not forget to give us a Star! That's the only way we can estimate whether people are using it or not since we do not collect any data, at all.
To get started with Borderify locally, you'll need Node.js installed.
git clone https://github.com/lordamit/borderify.git
cd borderify
npm install
npm run devThis will start the Vite development server. You can access the app at http://localhost:5173.
Want to just try it in a browser without compiling from source? Check out the webapp hosted on GitHub: https://amitsealami.com/ai/borderify.
Want to look at source code? Want to run tests or build things yourself?
- Build for production:
npm run build - Run tests (Vitest):
npm run test
The core rendering logic is inside src/render.ts, and the state is managed in src/store.tsx. The application relies heavily on standard Web Canvas APIs for performance and accurate EXIF metadata preservation.
The following features are implemented:
- Professional Styling: Add Polaroid-style borders and variable background blurring.
- Preset Management: Save and load your design configurations (borders, colors, margins, fonts, and logos) via JSON.
- Custom Export Settings: Control JPEG compression quality and set resolution limits (Original, 4K, Facebook 2048px, Instagram 1350px).
- EXIF Preservation: Original camera EXIF metadata is forcefully re-injected back into the final JPEG regardless of compression or scaling.
- Batch Processing: Apply your selected preset and export settings to multiple photos at once.
- PWA Support: Installable as a native-like app on iOS, Android, and Desktops.
We might implement additional features in the future based on user feedback. The current version is stable and should work as intended.
If you find any issues, please report them on GitHub! Since this relies heavily on Canvas and File APIs, performance might vary on extremely old devices.
The blur effect does not work on mobile browsers, we are aware of that. I do not know why and how to fix it, so any help on this will be great.
When processing extremely large RAW files or very high-resolution images in batch mode on older iOS devices, Safari might enforce strict memory limits. If the app reloads during export, try utilizing the 4K or Facebook resolution limits.
This project was initially vibe coded using Google Antigravity and Gemini 3.0 Pro/Flash.
This does not mean I did not know what I was doing, or at least what I wanted to achieve through vibe coding, since I have over a decade of combined experience from industry, academic background and software engineering research. However, I don't have experience in web tech as a stack nor do I have the time to develop my skills in it. Later, I learned more about AI-driven software engineering and resturctured the repository to reflect some of the recent AI-driven software engineering practices, such as Spec Driven Development, Behavior Defined Testing and Agent Governnance.
In the unlikely case that you find a bug in this app, I will probably attempt to solve it through AI-assisted coding.
Regardless, use at your own risk. As far as the specification goes, it does NOT:
- collect data
- corrupt local documents
- corrupt your photos
- harm you in anyway
In other words, it is a free app as in free beer, literally. The only reason I have google analytics enabled for the web app hosted in my website is to get an aggregated estimation about the number of users.
This project is licensed under the Creative Commons Attribution 4.0 International (CC BY 4.0) License.
You are free to use and distribute this application, but any modifications, adaptations, or redistributions must provide clear attribution to the original creator (Amit Seal Ami). See the LICENSE file for the full legal text.
