.NET React Templates
Operations

Configuration and secret ownership

Configure licensing, commerce and delivery without putting private material in client bundles.

The backend reads .env from the repository root (or the working directory) without logging values; process environment variables take precedence. In deployments, the Kamal release workflow supplies an APPSETTINGS_JSON secret instead; see deployment. Environment variables replace : with __, for example Licensing__LicensePrivateKeyPem.

Database

SettingMeaning
Database:Providersqlite (default), postgres, mysql or sqlserver; used by both OrmLite and EF Identity
ConnectionStrings:DefaultConnectionShared database; for SQLite write DataSource= with no space

Licensing

SettingMeaning
Licensing:LicensePrivateKeyPemPrivate P-256 PEM for signing licenses
Licensing:LicensePrivateKeyPathAlternative: path to that PEM, relative to MyApp or absolute
Licensing:ShortKeySaltStable random base64 32-byte salt for refresh keys; required for issuance
Licensing:LicenseIssuerJWT issuer your apps expect; default acme-studio
Licensing:GitHubRepositoryPublic owner/repository providing releases and downloads
Licensing:RenewalDiscountGraceDaysDays after a cutoff that renewal pricing still applies; default 60

Stripe

Settings in the Stripe section override the same settings in the older LicenseStripe section.

SettingMeaning
Stripe:SecretKeyServer-only API key
Stripe:WebhookSecretSigning secret for /stripe/webhook
Stripe:LiveModetrue only with a live key
Stripe:BaseUrlPublic HTTPS origin for Checkout return and account links
Stripe:AllowPromotionCodesShow promotion codes in Checkout; default off
Stripe:AutomaticTaxEnable Stripe Tax; default off

Email

SmtpConfig configures SMTP for Identity and licensing email. Without it, licensing messages stay queued.

Where each secret belongs

Signing keys, the salt and Stripe credentials are server-only. Never put them in NEXT_PUBLIC_* variables, generated DTOs, screenshots, logs or source control. Apps receive only the public key. /admin/settings reports whether each integration is configured without revealing values.

Integration status in light mode

Prices are configured at /admin/catalog and agreements at /admin/agreements, not in settings.

Product ID

The product ID is acme-studio, used as the JWT aud claim. To rename it, change the server's product ID, your apps' expected product and the branding together. The template supports one product per deployment.

Read keys and backups before replacing any stable secret.