Noureddine RAMDI / Snapframe: a React-based offline screenshot builder with JSON-driven AI workflows

Created Mon, 04 May 2026 10:23:02 +0000 Modified Sat, 23 May 2026 20:41:27 +0000

Pawandeep-prog/Snapframe

Snapframe addresses a common pain point in app marketing: creating polished screenshots that fit diverse device mockups and themes. Instead of a traditional drag-and-drop tool, it exposes a JSON editor with live preview that lets you programmatically define slides. This turns screenshot creation into a workflow that can be scripted, version-controlled, and even assisted by AI — a neat twist on what’s usually a purely visual task.

What snapframe does and how it is built

Snapframe is a local, web-based screenshot builder aimed at app store marketing assets. The UI is built with React 19, using Vite as a fast bundler and dev server. Styling relies on Tailwind CSS version 4, which keeps the CSS footprint minimal and utility-driven.

State management is handled through Zustand, a lightweight and flexible library that keeps the app fast and responsive even with complex undo/redo operations. The export function uses html-to-image and jszip to generate downloadable asset bundles client-side, so no server is involved.

The app offers device mockups from common phones and tablets, allowing users to place their screenshots inside realistic frames. Each slide can have per-slide theming and dynamic text blocks, which the user can customize. Undo and redo support is baked in, ensuring a smooth editing experience.

A standout architectural choice is the JSON editor panel with a live preview. Users can edit the entire project as JSON, and changes are reflected instantly in the UI. This supports workflows where you copy the JSON, prompt an LLM or script to generate or modify slides, then paste it back to see immediate results. This is not often seen in screenshot builders, and it opens doors to automation and AI assistance.

The app is offline-first, meaning all data and image generation happen in the browser without network dependencies. However, the README notes rendering glitches in Firefox, which is a limitation to keep in mind.

Technical strengths and tradeoffs

The codebase’s use of Zustand for state management is a solid choice. Zustand’s API is minimal and avoids the boilerplate of Redux or context-heavy solutions, while still supporting complex features like undo/redo. This choice contributes to a nimble developer experience and an app that feels responsive even with multiple slides and themes.

Using html-to-image for rendering screenshots client-side is convenient but has tradeoffs. While it avoids server dependencies, html-to-image can struggle with complex CSS or browser quirks — especially in Firefox as reported. This means the app might not be fully reliable in all environments, which is a common tradeoff for offline-first tools.

The JSON-driven UI is the repository’s most interesting feature. It turns the editor into a programmable canvas. The split-panel layout shows JSON on one side and a live rendered preview on the other. This means you can integrate AI workflows: export the current project JSON, feed it to an LLM prompt to generate new slide configurations, then paste them back. This pattern of blending manual editing with programmatic generation is unusual and enables version control and automation.

The device mockups and text blocks provide the essential building blocks for marketing assets, but the app is opinionated about the layout and theming options. It’s not a drag-and-drop freeform editor but a framework for structured screenshot generation. This is a tradeoff favoring repeatability and automation over absolute visual freedom.

Code quality appears good from the repo structure — modern React with hooks, clean TypeScript typings, and a clear separation of concerns. Zustand stores are modularized, and the json editor component is neatly integrated with live previews.

Quick start

Getting started with Snapframe locally is simple:

  1. Clone the repository:

    git clone https://github.com/Pawandeep-prog/Snapframe.git
    cd Snapframe
    
  2. Install dependencies:

    npm install
    
  3. Run the development server:

    npm run dev
    
  4. Open in browser: Navigate to http://localhost:5173

This straightforward setup uses Vite’s dev server for hot reload and fast iteration. To explore the JSON editor, open the app and toggle the JSON panel to see live updates of your project.

Verdict

Snapframe is a neat tool for developers or marketers who want a programmable approach to app screenshot generation. The JSON-driven live preview is an unusual feature that enables AI-assisted or scripted workflows, making it more than just a visual editor.

The offline-first architecture and export tooling mean you can run it entirely locally without dependencies. Zustand’s undo/redo support ensures a smooth UI experience.

However, the app is opinionated in layout and theming and not a general-purpose design tool. The html-to-image export can have browser-specific quirks, particularly in Firefox, which may limit reliability in some cases.

Overall, Snapframe is worth exploring if you’re building app marketing assets at scale or want to integrate AI into your design workflow. It’s a solid example of combining modern React, local state management, and JSON-driven UI to turn screenshot creation into a programmable process.


→ GitHub Repo: Pawandeep-prog/Snapframe ⭐ 227 · TypeScript