# AppShot AI

AI-powered App Store and Google Play screenshot maker. Describe your app and let AI generate a complete, on-brand set of store screenshots — headlines, backgrounds, colors, and layout — then fine-tune everything in a fast, browser-based editor with photoreal device frames, multi-screen project templates, and one-click PNG export. All from a single Laravel + React install.

Ships in two deployment modes from one codebase:

| Mode | For | Billing |
|---|---|---|
| **Self-hosted** | Running it for yourself on your own server. Single user, all features unlocked. | Disabled |
| **SaaS** | Running it as a multi-tenant SaaS where end-users sign up and pay. | Stripe + Razorpay + PayPal |

You pick the mode in the install wizard — no code changes.

---

## What you can do

- **AI screenshot generation** — describe your app and generate a complete, on-brand screenshot set as fully editable layers. Start a fresh project from a template or drop AI designs onto existing screens. Bring your own AI provider key; meter usage with per-plan token quotas (SaaS).
- **Design screenshots** for iPhone, iPad, Android phones, Android tablets — portrait + landscape — plus the Play Store Feature Graphic banner.
- **Photorealistic device frames** for the latest hardware (iPhone 17 Pro Max, iPad Pro 13" (M5), Pixel 10 Pro, Galaxy S26, Galaxy Tab S8 Ultra) in multiple colors. Procedural bezels for everything else.
- **Layer-based editor** with text, shapes (with gradients, multi-shadow, blend modes), images, callouts (zoom-and-frame annotations), and groups.
- **Multi-screen project templates** — pick a kit at project creation, design across every device size simultaneously, export an App Store-ready ZIP.
- **One-click PNG export** organized into the folder structure App Store Connect and Play Console expect.
- **Admin-editable marketing site** — Welcome, Pricing, Templates, About, Contact, legal pages, and custom slug pages are all editable from the admin dashboard without touching code.
- **Subscription billing** (SaaS mode) — Stripe, Razorpay, and PayPal, with multi-currency support, per-locale currency switching, and per-plan AI token quotas.
- **Light + dark theme** with admin-managed color palettes.

---

## Requirements

| | Minimum |
|---|---|
| PHP | 8.3 |
| MySQL | 8.0 |
| Disk | ~80 MB for the install + storage growth per project |
| Cron | One entry running `php artisan schedule:run` every minute |
| SSH | Not required — works on shared hosting (Hostinger, SiteGround, Bluehost, etc.) |

The release ZIP ships with all dependencies pre-built. **No `composer install`, no `npm install`, no Node.js on the server.**

---

## Install

1. Upload the ZIP contents to your web root.
2. Point your domain at the `public/` directory.
3. Browse to `https://your-domain.com/install` — the web wizard handles:
   - **Deployment mode** — choose Self-hosted or SaaS (this is where the mode is set; you never edit it by hand)
   - Database connection + migration run
   - Admin account creation (first user becomes admin)
   - License activation
   - Cron setup instructions (one line you copy into your hosting control panel)
4. Log in with the admin email + password you set during install.

That's it. The installer locks itself after completion — re-running is a no-op unless you delete `storage/installed.lock`.

---

## Setting up SaaS mode

Choose **SaaS** at the mode step of the install wizard. Then, once you're logged in as admin:

1. Configure SMTP from **Admin → Settings → Email** so password reset and email verification deliver.
2. Add payment providers from **Admin → Billing → Providers** — paste API keys for Stripe, Razorpay, or PayPal (any subset). Multi-tenant signup, plans, invoicing, and refunds all light up automatically.
3. Optional: enable AI screenshot generation by pasting an AI provider key in **Admin → Settings**, then set per-plan AI token quotas from **Admin → Billing → Plans**.
4. Optional: pick the default currency for new visitors from **Admin → Settings → Branding**.

The Production Checklist on the Billing page shows green/amber indicators so you know when each provider is ready to charge real cards.

> **Changing mode later?** The mode is chosen once at install. To switch an existing install between Self-hosted and SaaS, re-run the installer (delete `storage/installed.lock`) rather than editing config by hand — the wizard rewrites the right settings and runs any needed migrations.

---

## Configuration (`.env`)

The defaults work for most installs, and the deployment mode is set by the install wizard (not something you edit here). Common overrides:

| Var | Default | Purpose |
|---|---|---|
| `APP_URL` | `http://localhost:8000` | Public URL — used to build webhook callback URLs |
| `VERIFY_EMAILS` | `true` | Enforce email verification in SaaS mode |
| `DB_*` | — | Standard Laravel MySQL connection |
| `MAIL_*` | `MAIL_MAILER=log` | Override in admin Settings without editing `.env` |
| `SESSION_SECURE_COOKIE` | _blank_ | Set to `true` in production behind HTTPS |

Most settings (site name, support email, SMTP credentials, logo, AI provider key, etc.) are editable from the admin dashboard — no `.env` edits required after the initial install.

---

## Editor quick start

1. From `/projects`, click a template or **Blank** → name → land in the editor. Or click **Generate with AI** to describe your app and have a screenshot set built for you.
2. **Toolbar** (left) — add layers, shapes, text, frames.
3. **Workspace** (center) — pan with space-drag, zoom with ⌘+wheel.
4. **Properties** (right) — context-aware controls per layer type.
5. **Form factor switcher** (top) — flip between iPhone / iPad / Android phone / tablet × portrait / landscape.
6. **Layers panel** — hierarchy, hide / lock / duplicate / delete.
7. ⌘D duplicate, Del delete, ⌘Z / ⌘⇧Z undo / redo.

Saves are automatic — no Save button.

---

## Support

- Installation issues, billing setup, admin dashboard help: contact via the channel listed on your purchase receipt.
- Each release ships with a `CHANGELOG.md` summarising changes.
- The admin Settings page surfaces raw SMTP errors during test-send, so you can debug delivery issues without leaving the UI.
