`bootstrap-app` is the entry point for a new product built on One Shot. Run it once, first, before
adding any feature. It turns the generic kit into your app: your name, your brand, your design
tokens, with the example resource and the kit's own sale flow removed. This page walks through what
the skill actually does; for the shorter, get-going version, see
[Making It Yours](/docs/getting-started/making-it-yours).

## Forking into a separate directory

If you're keeping the kit in place and forking into a dedicated product directory rather than
renaming this repository in place, seed the new directory first:

```bash
rsync -a --exclude .git --exclude tmp --exclude log --exclude storage --exclude .DS_Store <kit>/ <product>/
```

Then run the skill inside the product directory, not the kit. Everything below renames and rewrites
in place, so it needs to run where the product actually lives.

## Where identity lives, so you rarely grep for strings

Almost every piece of app identity and chrome is centralized:

- `config/initializers/app_identity.rb` is the one file for name, description, support email, legal
  entity, theme color, and the sender name on transactional email. It feeds the `<title>`, meta and
  Open Graph tags, the PWA manifest, the `> handle_` logo, and every mailer.
- `app/assets/stylesheets/application.css`'s `:root` block holds the design tokens.
- `app/views/pages/home.html.erb` is the one place that's genuinely per-product: the landing
  marketing copy, which the skill rewrites rather than re-points.
- The Rails module name, `Oneshot`, is the one true find-and-replace: code identifiers only, not
  app content.

## What to keep, replace, and remove

**Keep** (it's plumbing, and it's what you're paying for): authentication, billing and
subscriptions, email, tenancy, Pundit, security hardening, the PWA shell, mobile, Settings, and GDPR
export/delete.

**Replace**: the landing page copy, the design tokens, and the `app_identity.rb` values.

**Remove**: the example `Project` slice, and, unless you're also selling a downloadable kit the way
this repository does, the shiponeshot.com-specific license purchase flow (`License`,
`KitPurchasesController`, `LicensesController`, `RepoAccess`, and the `/buy` and `/license` routes).

## The steps, in order

1. Confirm the product name, module name, brand accent color, and production host with you, if you
   haven't already provided them.
2. Set `config/initializers/app_identity.rb`. This alone rebrands the title, meta tags, Open Graph
   tags, PWA manifest, logo, and every email. The default sender addresses point at
   `@shiponeshot.com`; set them to your domain and verify that sending domain in Resend before you
   rely on email working.
3. Regenerate the social share cards and icons for the new brand, after steps 2 and 4 (the card
   template reads the design tokens and the production host). If you drop the per-agent landing
   pages entirely, remove `public/og/`, `lib/tasks/og_images.rake`, and
   `lib/tasks/templates/og_card.html.erb` along with them.
4. Swap the design tokens in `application.css`, at minimum the accent color, keeping the token
   structure intact.
5. Rewrite the landing page with your product's own marketing copy.
6. Rename the `Oneshot` Rails module: `config/application.rb`, `config.ru`, deploy service and image
   names, and the session cookie key in `config/environments/production.rb`. This is scoped to
   `config/`; app content already reads from `app_identity.rb`, so there's nothing to find-replace
   in `app/`.
7. Remove the example `Project` slice: the model, policy, controller, views, route, the `Account`
   association, the dashboard card, and its specs.
8. Replace the two example blog posts in `content/posts/` with your own, or delete them; keep the
   blog engine itself, since it's a working, SEO-complete blog your product wants too. Set
   `APP_HOST` in your deploy environment so canonical URLs, the sitemap, and the feeds use your real
   domain.
9. Remove the kit-sale flow, unless you're also selling a downloadable kit, then verify the removal
   rather than assuming it: a grep across `app/`, `config/routes.rb`, and `spec/` for
   license-related terms should come back empty before you drop the `licenses` table.
10. If you're shipping the native mobile apps, update the in-app-purchase product ids in
    `app/adapters/in_app.rb` to match your real App Store and Play Console products; see
    [In-App Purchases](/docs/mobile-apps/in-app-purchases).
11. Generate a brand-new credentials pair. The app must never inherit anyone else's secrets:
    `rm -f config/credentials.yml.enc config/master.key && bin/rails credentials:edit`, adding a
    fresh `secret_key_base`.
12. Decide what to do with `LICENSE.md` and the legal pages: they describe the kit's own license and
    terms, not your product's, so either delete or rewrite them.
13. Run `bin/check`. Because the kit's own specs assert against
    `Rails.application.config.x.app_name` rather than the literal string "One Shot," a correct
    rebrand keeps the suite green without editing test strings by hand.

## Next

Once your product is bootstrapped, add your first real feature:
[The crud-with-billing Skill](/docs/claude-code/skill-crud-with-billing).
