brand
無料Apply this site's visual identity — colours, type, logo files and fixed brand strings. Use for any page, component, social asset or document that should look like the site.
日本語の概要は準備中です。原文の説明を表示しています。
Use when standing up a fresh deployment of this codebase (or the public vigyan-site-os template) — populates company identity, branding and starting content without committing any of it, and decides for each value whether it belongs in platform env, encrypted DB secrets, DB config, or an admin screen.
インストールする前に、エージェントに与えられる指示の中身を確認できます。
This codebase separates four things that are easy to confuse. Getting a value into the wrong one is the difference between a template someone can adopt and a template that boots already believing it is somebody else's company.
| Layer | Holds | Changed by |
|---|---|---|
DDL — supabase/migrations/ | tables, functions, policies, triggers | a migration |
Required seed — seed/01_required.sql | rows the system cannot run without | a migration |
Defaults — seed/02_defaults.sql | starting values with a screen behind them | the admin UI |
| Platform env | what you need before you can reach the database | the host (Coolify/Vercel/AWS) |
Encrypted DB secrets — app_secrets | vendor credentials | /admin/settings/secrets |
| Company & content data | who you are, what you sell | this skill, or the admin UI |
Run node scripts/sql-classify.mjs to see which tier every migration falls in. It parses
dollar-quoted bodies, so an INSERT inside a trigger is correctly read as DDL rather than
data.
Nothing this skill produces gets committed. It writes a local seed file and a
brand.config.ts; both are gitignored. What ships is the interview and the shape it fills,
never the answers.
If you find yourself about to git add a file containing a legal name, a tax identifier, a
bank account or an API key, stop — that is the failure this separation exists to prevent.
Some values cannot live in the database, because they are what you need in order to reach
or decrypt it. env.manifest.json is the authority — its bootstrap and public
tiers are the platform env, and pnpm env:check fails if code reads a name it does not
describe. Do not keep a separate list in this skill. Today that is:
DATABASE_URL, SUPABASE_SERVICE_ROLE_KEY, NEXT_PUBLIC_SUPABASE_URL,
NEXT_PUBLIC_SUPABASE_ANON_KEY — reaching the databaseCONFIG_ENCRYPTION_KEY (the key itself; _CURRENT is only the version number, _V2
only during rotation) — without it app_secrets is undecryptable ciphertextACCOUNT_DELETION_ENCRYPTION_KEY, OTP_HASH_SECRET — read before any DB lookuppublic tier (NEXT_PUBLIC_GA4_ID, optional NEXT_PUBLIC_SITE_URL) — baked in at buildEverything else that looks like an env var should be asked for here and stored encrypted in
app_secrets (tier secret, /admin/settings/secrets) or app_config (tier config,
/admin/settings), where it is rotatable from a screen and auditable.
These differ by host, which is the whole reason they are separable:
| Coolify (self-hosted) | Vercel | |
|---|---|---|
DATABASE_URL | internal Docker hostname, direct connection | pooled connection string |
NEXT_PUBLIC_SITE_URL | your domain behind Cloudflare | VERCEL_URL on previews, domain in prod |
| Cron | system cron or a Coolify scheduled task | Vercel Cron, which needs CRON_SECRET |
| How values get there | pnpm secrets sync coolify --env prod --apply | pnpm secrets sync vercel --env prod --apply |
A value that changes per host must never be a committed seed row: it would be correct on exactly one machine and silently wrong everywhere else.
Ask these in order. Skip anything already set — read company_profile first and only ask for
what is missing or empty.
1. Identity. Legal name, brand name, entity type, jurisdiction, city, country.
2. Tax and registration. Only what the jurisdiction actually needs. For India: CIN, GSTIN, PAN. For elsewhere, ask what applies rather than assuming Indian fields — the schema carries them as nullable text for exactly this reason.
3. Contact. Public email, phone, and whether a WhatsApp number should be shown. If the
site will send WhatsApp, say plainly that a Business Account and an approved template are
needed before any business-initiated message will be delivered — cold outbound returns 200
with a wamid and is silently dropped, which reads as a broken integration when it is
working correctly.
4. Brand. Palette (primary, accent, surface, text), typeface pairing, logo path, tagline, and voice in a sentence or two. If they have no palette, offer to derive one from the logo rather than inventing colours.
5. What they sell. This template supports two commercial models:
Subscriptions, services and usage credits are deliberately not here. If the adopter needs
recurring billing, say so directly rather than bending one_off into a subscription.
6. Payments. Razorpay or Stripe, test or live. Never ask for a key in chat — point them
at /admin/settings/secrets, which encrypts on write.
seed/local/01_company.sql — gitignored. Their answers as INSERTs against
company_profile, company_accounts, social_links. Idempotent (ON CONFLICT DO UPDATE)
so re-running is safe.
brand.config.ts — gitignored. Palette, fonts, logo, tagline, voice, feeding CSS custom
properties so one file re-skins the whole site.
Run pnpm bootstrap once the hosts/accounts exist:
pnpm bootstrap --host coolify|vercel|aws|local --supabase cloud|coolify [--project-ref REF | --service UUID].
It generates what is generatable (encryption keys, OTP/cron secrets), fetches what a
provider can return (Supabase cloud via supabase CLI; self-hosted Supabase via the Coolify
API with a read:sensitive token), and asks — hidden — for the rest with the exact place to
find each. Run by an agent (no terminal) it asks nothing: it reports what is still missing
with the same guidance and exits 3 — relay that to the operator, who runs it in a terminal.
Never ask the operator to paste a value into chat.
The encrypted vault — secrets/prod.sops.env, never a plaintext file. Run
pnpm secrets init (age key + recipient), then pnpm secrets edit --env prod and fill the
bootstrap/public names; pnpm secrets check --env prod must report nothing missing.
Push with pnpm secrets sync coolify|vercel --env prod --apply. The vault is ciphertext and
safe to commit; the age key in ~/.config/sops/age/keys.txt never is — back it up offline.
A plaintext file of secrets is still the thing this whole structure exists to avoid.
A checklist, printed not written — the secret/config values to enter in
/admin/settings/secrets and /admin/settings after first sign-in, grouped by screen.
pnpm typecheck
git status --porcelain # must show NOTHING from this skill
psql "$DATABASE_URL" -c "select brand_name, legal_name from company_profile"
Then load the site. If the header still shows the template's placeholder name, brand.config.ts
was written but not imported — check app/layout.tsx reads it.
app_config; it is not encrypted. app_secrets is.まだレビューはありません。使ってみた感想をお寄せください。
概要と使いどころ
Apply this site's visual identity — colours, type, logo files and fixed brand strings. Use for any page, component, social asset or document that should look like the site.
日本語の概要は準備中です。原文の説明を表示しています。
Use FIRST when someone asks for a new feature or a change to an existing one — before any schema, code or test. Works out what is actually being asked for, whether to build it or integrate a third party (Trustpilot, Stripe, Calendly and the like), where the data lives, who may do what, and what happens when the vendor is down. Produces a decision, then hands to feature-schema.
日本語の概要は準備中です。原文の説明を表示しています。
Use when a new feature needs a table, column or capability — evolving the schema so the new thing joins the permission, audit and RLS contract instead of sitting outside it. Covers the DDL/DML split, the resource/capability wiring, and the self-verifying migration.
日本語の概要は準備中です。原文の説明を表示しています。
Use after building a feature — explore it in a real browser to find what nobody predicted, then turn each finding into a deterministic test that guards it forever. Covers the agentic pass, what to generate vs hand-write, and how to skip honestly when a capability is missing.
日本語の概要は準備中です。原文の説明を表示しています。
Publishing content or deploying site-os — what caches exist, what refreshes them, and how to prove a change is actually live. Use when publishing a post or product, launching a page, deploying, or when someone says a change "isn't showing".
日本語の概要は準備中です。原文の説明を表示しています。
Handling secrets, keys and credentials for site-os — reading vigyan-secrets.md safely, moving keys into app_secrets, rotating, and responding to an exposure. Use whenever a task touches a key, token, password, .env file, app_secrets, encryption, or the secrets document.
日本語の概要は準備中です。原文の説明を表示しています。