Run the development server:
npm run devWe use shadcn-ui for the UI components. You can find the existing components under the components/ui directory.
For examples and usage, refer to the official shadcn documentation. To add a new component, run the following command:
npx shadcn add <component-name>. This will generate the necessary files and include them in the components/ui directory. Make sure to
update any relevant styles or configurations as needed.
After adding a new component, you will likely need to fix the code style to adhere to our formatting standards. Additionally, ensure the cn import is correctly handled, as it may need to be adjusted.
GitHub Actions builds and pushes the production image when main is updated.
- Lint runs on every push.
- Image build runs only on
main. Docker Hub login uses theDOCKERHUB_TOKENsecret. Build args come from repository variables (PAYLOAD_URL,FRONTEND_URL,TURNSTILE_SITE_KEY,MATOMO_SITE_ID,MATOMO_ENDPOINT). The Dockerfile maps those toNEXT_PUBLIC_*for Next. They are public client values. - Tags pushed to the public Docker Hub repo:
bsidems/bside-website:latestbsidems/bside-website:<git sha>
- On the server (
/srv/docker/b-side.ms/website/):
docker compose up -d --pull alwaysThe Hub repo is public on purpose. This GitHub repo is public, and the image only bakes NEXT_PUBLIC_* values that already ship to the browser (CMS URL, site URL, Turnstile site key, Matomo). Runtime secrets (REVALIDATION_KEY, mail, Turnstile secret, API keys) stay in website.env on the server. Do not pass real secrets as Docker build args.
bsidems has one private-repo slot. Keep that for something that must stay private. A public image also means the server can pull without docker login.
hooks/build is leftover from Docker Hub Automated Builds and is not used anymore.