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.rbis 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:rootblock holds the design tokens.app/views/pages/home.html.erbis 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
- Confirm the product name, module name, brand accent color, and production host with you, if you haven't already provided them.
- 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. - 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, andlib/tasks/templates/og_card.html.erbalong with them. - Swap the design tokens in
application.css, at minimum the accent color, keeping the token structure intact. - Rewrite the landing page with your product's own marketing copy.
- Rename the
OneshotRails module:config/application.rb,config.ru, deploy service and image names, and the session cookie key inconfig/environments/production.rb. This is scoped toconfig/; app content already reads fromapp_identity.rb, so there's nothing to find-replace inapp/. - Remove the example
Projectslice: the model, policy, controller, views, route, theAccountassociation, the dashboard card, and its specs. - 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. SetAPP_HOSTin your deploy environment so canonical URLs, the sitemap, and the feeds use your real domain. - 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, andspec/for license-related terms should come back empty before you drop thelicensestable. - If you're shipping the native mobile apps, update the in-app-purchase product ids in
app/adapters/in_app.rbto match your real App Store and Play Console products; see In-App Purchases. - 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 freshsecret_key_base. - Decide what to do with
LICENSE.mdand the legal pages: they describe the kit's own license and terms, not your product's, so either delete or rewrite them. - Run
bin/check. Because the kit's own specs assert againstRails.application.config.x.app_namerather 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.