Docs · Working with Claude Code

The bootstrap-app Skill

Walkthrough of turning the starter kit into your own product in one pass.

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.

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:

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.
  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.