feat(deploy): one-click deploy buttons and README screenshots - #39
Conversation
Render and Heroku are the two platforms whose deploy button requires manifests in the repository: - render.yaml deploys the app with a private MySQL and a MinIO service built from docker/Dockerfile.minio (Render passes its start command to the image entrypoint rather than replacing it, and MinIO's entrypoint prepends `minio` to whatever it receives). - app.json + heroku.yml build the image from source and attach JawsDB as DATABASE_URL. The container entrypoint now adopts JAWSDB_URL and RENDER_EXTERNAL_URL when the operator sets neither DATABASE_URL nor AUTH_URL, so both buttons boot without a manual configuration pass. The README demo section showed nothing: GitHub strips <video> tags, so every visitor saw an empty block. Replaced with real screenshots of the storefront and dashboard, a Docker pulls badge, and a star call to action.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 85b18c2f2d
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| "S3_ENDPOINT": { | ||
| "description": "S3-compatible endpoint for product images (AWS S3, Cloudflare R2, Scaleway, Backblaze B2...). Image uploads stay disabled until the five S3 values are set. Everything else works without them.", | ||
| "required": false |
There was a problem hiding this comment.
Provision the storage variables required at startup
When a user accepts the default Heroku deployment and leaves these fields blank, the container cannot start: apps/web/env.ts:46-50 declares all five S3 settings as required URL/non-empty values, and runtime validation is enabled in the final image. Marking them optional while supplying only S3_PUBLIC_URL therefore produces an environment-validation failure rather than the documented deployment with uploads disabled; either provision storage or make the application schema genuinely support missing S3 configuration.
Useful? React with 👍 / 👎.
| type: pserv | ||
| name: louez-minio | ||
| envVarKey: MINIO_ROOT_PASSWORD | ||
| dockerCommand: sh -c 'export DATABASE_URL="mysql://root:$MYSQL_PASSWORD@louez-mysql:3306/louez"; exec node apps/web/server.js' |
There was a problem hiding this comment.
Encode the prompted password before building DATABASE_URL
If the password entered in Render contains URI delimiters such as #, /, or ?, interpolating it directly into this MySQL URL changes how the value is parsed and the web service fails authentication or targets a malformed database URL. The Blueprint merely comments that users should choose alphanumeric characters, but that comment is not an enforced constraint in Render's sync: false prompt; construct the URL with percent-encoding or otherwise generate and enforce a URL-safe password.
Useful? React with 👍 / 👎.
One-click deploy
Adds the two manifests that Render and Heroku require in the repository (they are the only platforms whose button reads files from the source repo — every other catalog hosts the template on its side, and those PRs are open upstream).
render.yamlRENDER_EXTERNAL_URL.app.json+heroku.ymlDATABASE_URL, asks forAUTH_URL.docker/Dockerfile.miniominioto whatever it receives.docker/entrypoint.shadoptsJAWSDB_URLandRENDER_EXTERNAL_URLwhen the operator sets neitherDATABASE_URLnorAUTH_URL, so both buttons boot without a manual configuration pass. Tested against the published image: with only those two variables set, the process resolves both and reports healthy.README
The demo section rendered nothing: GitHub strips
<video>tags, so<video src="demo.mp4">has been an empty block for every visitor since it was added (verified — zero<video>elements in the rendered HTML returned by the API). It is replaced with real screenshots taken from a seeded instance, plus:Upstream catalogs (separate, already open)
Their buttons get added to the README as each one merges.
Verified
Both the Dokploy and Coolify stacks were deployed locally end to end before submitting anything: three services healthy, schema installed on first boot, account created, product image uploaded through the app into the MinIO bucket and served back byte-identical from
/files.