After installation, most personalization happens from the Administrator Admin page in Settings: site images, deployment preferences, and links out to the service-provider dashboards. A custom domain still uses the setup script because it has to coordinate App Engine, DNS, and auth settings.
Site Image
Uploading a site image generates favicons, Apple Touch icons, and PWA manifest icons. Upload the image from the Admin page under Settings, then Site Image. The app stores a preview of the generated images right away, but the generated static files still need to be restored into the deployed app.
./setup.sh update
Deployment Settings
The Admin page also has a Settings, Deployment section for the App Engine settings Lagniappe writes into its deployment files. The default uses basic scaling, which lets a quiet app idle down. If you would rather keep the app warm and avoid most cold starts, you can switch to automatic scaling, usually at a higher cost.
This section also controls instance class, worker count, and instance counts, without hand-editing YAML for ordinary changes. Saving deployment settings in the app does not redeploy immediately; it saves the choices with the instance. To apply them to the local deployment files and deploy, run:
./setup.sh update
Custom Domain
A custom domain is a first-class setup option. The script creates or discovers the App Engine domain mapping first, then uses the exact DNS records returned by Google. You can add those records manually at any DNS provider or let setup reconcile them through Cloudflare.
./setup.sh url
Cloudflare automation requires a temporary token limited to Zone Read and DNS Edit for the selected zone. It is strictly a DNS convenience: records are created with proxying disabled, and setup does not configure Cloudflare WAF, bot, cache, or zone-security features. You can configure those independently later if you want them.
DNS and SSL changes take a little while to propagate, so it is worth keeping the default App Engine URL handy until the custom domain is confirmed working.
Authentication Email
Initial setup offers this custom-domain and SMTP path directly. If you install without a domain, it uses a Gmail or Google Workspace mailbox so the app can still send verification and password-reset links. Once the custom domain above is configured, you can replace that mailbox with any service that provides authenticated SMTP, including Resend, Postmark, Mailgun, Mailjet, SMTP2GO, Amazon SES, or another provider.
Resend has a guided shortcut. Setup opens its Domains page, where
Cloudflare users can choose Sign in to Cloudflare and
let Resend publish its email DNS records. Setup then opens the API Keys
page and supplies Resend’s fixed SMTP host, port, encryption, and
username automatically. Create a Sending access key restricted to the
verified domain, paste that one-time key, and copy the exact sending
domain shown by Resend. For example, a key restricted to
mail.example.com must send from an address such as
noreply@mail.example.com, not
noreply@example.com.
For another provider, first verify a sending domain and publish the SPF and DKIM records it supplies. Then enter the SMTP host, port, encryption mode, username, password or API key, sender address, and sender name. The sender address must be on a domain the provider has approved.
On macOS or Linux, run:
./setup.sh email
In Windows PowerShell, run:
.\setup.cmd email
The command supports STARTTLS and implicit SSL/TLS, sends a real test message before changing the saved configuration, and offers to deploy the new settings. If validation fails, the current email service remains active. The SMTP credential is stored in the private settings file, so protect that file like any other application secret.
AI Email Submissions
AI email lets registered users send questions, creation requests, and attachments to one Lagniappe address. It requires a custom application URL and authentication email configured through Resend; the receiving flow uses a dedicated inbound subdomain and reuses the verified Resend sender for replies.
The main installer offers AI email when those prerequisites are ready. To add or reconcile it later, run:
./setup.sh ai-email
Updates
Use update when settings saved inside the app need to be applied to the deployment files:
./setup.sh update
For an ordinary unmodified installation, use
./setup.sh upgrade instead to fetch the latest source from
origin/main, reconcile configuration, and optionally deploy.
The upgrade warns before replacing tracked local changes. If you maintain
a fork, merge the release yourself and use -update so setup
does not replace your worktree.