Skip to content

Fixes button color and adds GitHub social link - #237

Merged
LunaUrsa merged 6 commits into
uatfrom
hotfix/colorcorrect_githubsocial
Aug 21, 2026
Merged

Fixes button color and adds GitHub social link#237
LunaUrsa merged 6 commits into
uatfrom
hotfix/colorcorrect_githubsocial

Conversation

@sympact06

@sympact06 sympact06 commented Aug 19, 2026

Copy link
Copy Markdown
Contributor

Summary

This pull request addresses visual consistency and social connectivity by introducing shared button styling across the platform and adding a GitHub social link in the footer. Button styles are centralized into a new shared solidButton class to ensure consistent color application across all components, addressing existing hover conflict issues. The Footer component is updated to include GitHub as a social media option, enhancing social connectivity.

Type of change

  • Bug fix
  • New feature
  • Documentation
  • Refactor / chore
  • Other (describe above)

Checklist

  • Branch is up to date with uat (this PR targets uat, not main)
  • Lint passes (npx eslint .)
  • npx next build succeeds locally (also type-checks)
  • No secrets, .env values, or user data included

Test plan

Verified visual consistency of button styles across various components, confirmed GitHub link functionality in the footer.

github-actions Bot and others added 6 commits August 18, 2026 15:25
* Adopt tripbot's uat-first CI/CD workflow and repo best practices (#217)

* Adopt tripbot's uat-first CI/CD workflow and repo best practices

Mirrors the tripbot repo's branching model and tooling:
- uat becomes the integration branch; GuardMainSource enforces that PRs
  into main can only come from uat.
- PullRequestOpenAll now gates PRs into both main and uat with lint,
  a production build (next build, which also type-checks), and CodeQL.
- PushToUat adds lint/build/docker-build/CodeQL/Sonar validation so a
  uat push is confirmed to build correctly before it can reach main.
- PushToMain drops the redundant pre-merge lint/build (already gated at
  PR/UAT time) and instead validates the production Docker image.
- .drone.yml gains a "Deploy Website UAT" pipeline targeting the uat
  branch, and fixes a duplicate `trigger:` YAML key in the main
  pipeline that was silently discarding the branch restriction.
- Husky + lint-staged run eslint --fix on staged files pre-commit.
- VS Code file nesting collapses config files under package.json.
- Adds CODEOWNERS, PR/issue templates, CONTRIBUTING.md, .nvmrc,
  .editorconfig, and .gitattributes for parity with tripbot.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Fix production Docker build broken by the husky prepare script

npm ci --omit=dev still runs the prepare lifecycle script, but husky
(a devDependency) gets its binary omitted, so it fails with
"sh: husky: not found" (exit 127). Drop scripts.prepare before the
production-only install, per husky's own documented fix for this.

Verified by reproducing `npm ci --omit=dev` against the built
node_modules outside Docker: failed with the exact same error before
the fix, succeeded (exit 0) after.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>

* Fix workflow

* Revamps design with modernized UI and improved accessibility (#210)

* Revamp design: new header, index page, tailwind styles

* Simplify homepage: drop dead subreddit fetch, dedupe link/card markup, remove stray bun.lock

* UI: Fix header link truncation by preventing wrapping

* Refactor ProfileButton: replace legacy CSS-in-JSX with Tailwind classes and inline fallbacks

* Redesign Footer: convert to component-driven layout, add link data and accessibility tweaks

* Make hero section fill viewport and center content; update CTA button styling

* Add contributor link for Sympact06 to site footer

* Auto stash before rebase of "revamp/design"

* Address review feedback

- Add a 3s timeout to the Discord guild fetch so a slow API can't stall
  SSR, and hoist the guild id/url into constants
- Guard the header click-outside handler with instanceof Element instead
  of a type cast that could crash on non-Element targets
- Replace the footer heart emoji with the boxicons heart and an sr-only
  label

* Update footer to dynamically display credits

Refactor footer credits to use a dynamic mapping for contributors.

* Add credits section to Footer component

Added credits section with contributors' names and links.

* Footer formatting

* Footer formatting

---------

Co-authored-by: silent-decibel <276324116+silent-decibel@users.noreply.github.com>
Co-authored-by: Julia Jeanne Dowejko <julia@agatha.co.za>

* Fix UAT Drone pipeline to use the mounted prod-named compose file

The env:uat runner's DRONE_RUNNER_VOLUMES mounts the host's UAT
compose file into every pipeline's working dir as
docker-compose.website-prod.yml, not docker-compose.website.yml.
Referencing docker-compose.website.yml was silently falling through
to the repo's own dev-target file (bind-mounted src/public, next dev
with --inspect) instead of the actual UAT deploy config.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Update dependencies: prettier, swiper, typescript-eslint, eslint-plugin-jest (#219)

* Bump prettier, swiper, typescript-eslint, eslint-plugin-jest

Applies the dependency updates from dependabot PRs #211, #212, #213,
#215. #213/#215's targeted versions (typescript-eslint 8.x,
eslint-plugin-jest 29.x) require eslint-config-airbnb-typescript
peer support that doesn't exist yet, so those land at the highest
versions still compatible with the current airbnb-based ESLint
config (7.18.0 / 28.14.0) instead of dependabot's exact targets.

eslint-config-next's bump to 16.x (#214) is excluded entirely: it's
flat-config-only and requires ESLint >=9, which is incompatible with
eslint-config-airbnb-base/airbnb-typescript as currently used. That
needs a dedicated ESLint 9 flat-config migration, tracked separately.

* Add dependabot.yml targeting uat

PRs into main now require the uat branch as their source
(GuardMainSource.yml, added in #217). Dependabot always opens PRs
against the default branch, so without this config every future
Dependabot PR against main would be permanently blocked by that
check, same as #211-#215.

* Regenerate package-lock.json with npm 10.9.2 to match CI

The lockfile from local npm 11.6.2 resolved optional/platform-specific
packages differently than the npm 10.9.2 bundled with the Node version
pinned in .nvmrc, so `npm ci` failed in CI with EUSAGE (lock file out
of sync). Regenerated with npm 10.9.2 and verified `npm ci` matches
CI's install exactly.

* Speed up Docker deploy build (#226)

The production Docker build was running a full second npm ci to strip
devDependencies after next build, ~doubling install time, and had no
persistent cache for npm or Next's compiler between builds.

- next.config.js: enable output: "standalone" so next build traces each
  page's real dependencies instead of needing the full node_modules tree
- Dockerfile: drop the redundant npm ci --omit=dev pass, copy the traced
  .next/standalone output instead (80MB vs 1.1GB), add BuildKit cache
  mounts for the npm and Next build caches
- .dockerignore: exclude .git, .next, .github, docs, etc. (previously
  only node_modules/), shrinking build context and preventing needless
  cache busts
- .drone.yml: drop apk update && apk upgrade in both pipelines - was
  upgrading a throwaway CI container's unrelated system packages on
  every deploy
- .npmrc: skip audit/funding network calls during npm ci

Verified locally: next build with standalone output completes and
produces .next/standalone/server.js; docker build --target production
succeeds and the resulting image serves HTTP 200 on first request.

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>

* Auto-open a uat -> main PR on every push to uat (#228)

GuardMainSource already requires PRs into main to come from uat, but
promoting uat to main was still a manual step. This adds a workflow
that opens that PR automatically after a push to uat (skipping it if
one is already open, and failing harmlessly if there's no diff to
promote).

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>

* Drop BuildKit-only cache mounts breaking the UAT build (#229)

The Drone runner's docker compose build uses the legacy builder, not
BuildKit, regardless of the DOCKER_BUILDKIT secret - so `RUN --mount=
type=cache` failed outright ("the --mount option requires BuildKit").

Removing the cache mounts loses the cross-build npm/Next cache, but
the bigger win (standalone output removing the second npm ci) doesn't
need BuildKit at all - already verified that combination builds and
serves correctly under the legacy builder.

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>

* Truncate commit message in prod Discord notification (#230)

* Drop BuildKit-only cache mounts breaking the UAT build

The Drone runner's docker compose build uses the legacy builder, not
BuildKit, regardless of the DOCKER_BUILDKIT secret - so `RUN --mount=
type=cache` failed outright ("the --mount option requires BuildKit").

Removing the cache mounts loses the cross-build npm/Next cache, but
the bigger win (standalone output removing the second npm ci) doesn't
need BuildKit at all - already verified that combination builds and
serves correctly under the legacy builder.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Truncate commit message in prod Discord notification

The Deploy Website pipeline sent the full untruncated commit.message
to Discord, which rejects payloads over 2000 chars with a 400 the
appleboy/drone-discord plugin can't parse into a readable error.
Apply the same truncate(500) fix already used in Deploy Website UAT.

---------

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>

* Migrate to ESLint 10 flat config, drop airbnb (#232)

* Migrate to ESLint 10 flat config, drop airbnb

Replaces .eslintrc/.eslintignore with eslint.config.mjs built on
next/core-web-vitals, next/typescript, sonarjs recommended, and
prettier recommended. Drops eslint-config-airbnb-base/-typescript and
the unused eslint-plugin-jest/eslint-plugin-import direct deps in
favor of the unified typescript-eslint package and what
eslint-config-next already pulls in.

Fixes the real issues the new rule set surfaced: dead stores, an
ignored exception, an impure Date.now() call in a useState
initializer, an insecure Math.random() usage, plaintext http:// links,
an unsafe {} type, and a few other small correctness/style fixes.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Fix modulo bias in randomString CSPRNG usage

CodeQL flagged crypto.getRandomValues()[0] % N as biased since 256
isn't evenly divisible by 10 or 94. Use rejection sampling instead so
the modulo only ever applies to a uniformly-sized subrange.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Untrack another session's Jest work accidentally swept into this branch

A concurrent session sharing this working directory was adding a Jest
test suite (jest.config.ts, jest.setup.ts, test files, CI wiring,
testing-library deps). It got picked up by a broad `git add -A` on the
previous commit. This reverts package.json, package-lock.json, and
the workflow file to their state before that commit, and untracks
(without deleting from disk) the Jest files so that work isn't lost
and can be committed properly on its own branch.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>

* Add Jest test suite (#234)

* Add Jest test suite

Adds jest + next/jest config, testing-library, and unit tests for
addDictionaryDefs, ComboCard, Legend, combo data helpers, queryString,
and randomString. Wires the pre-existing commented-out CI test job
back on.

Fixed two airbnb lint violations picked up along the way: the
next/jest.js import needs its extension (that's the only path in
next's package exports) so it gets a scoped import/extensions
disable, and the character-range test used an array iteration instead
of a bare for...of loop.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Regenerate package-lock.json to fix npm ci

The lockfile was missing optional platform packages (@emnapi/core,
@emnapi/runtime), which made npm ci fail in CI even though npm install
worked fine locally. Regenerated from a clean node_modules.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Add ts-node so Jest can load jest.config.ts on Node 22

.nvmrc pins Node 22.14.0 for CI, which lacks the native TS type-stripping
that let this work unnoticed on newer local Node versions. Jest's
loader needs ts-node to parse a .ts config file without it. Also
regenerated package-lock.json from scratch again — the wasm32-wasi
optional fallback packages (tailwindcss oxide, @unrs resolver) pull in
@emnapi/* sub-dependencies that drift between incremental npm installs;
a from-scratch install is what stays in sync with npm ci.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>

---------

Co-authored-by: LunaUrsa <1836049+LunaUrsa@users.noreply.github.com>
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
Co-authored-by: Sympact <47295195+sympact06@users.noreply.github.com>
Co-authored-by: silent-decibel <276324116+silent-decibel@users.noreply.github.com>
Co-authored-by: Julia Jeanne Dowejko <julia@agatha.co.za>

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR improves UI consistency by centralizing “solid” brand button styling into a shared solidButton class to prevent global a:hover styles from overriding button label colors, and it adds a GitHub social link to the Footer’s community links.

Changes:

  • Added a shared solidButton Tailwind class string and applied it to solid buttons in the Home page and Header.
  • Added a GitHub link (icon + URL) to the Footer’s “Community” column and cleaned up credit-render spacing.
  • Updated package-lock.json with additional "peer": true metadata entries.

Reviewed changes

Copilot reviewed 4 out of 5 changed files in this pull request and generated no comments.

Show a summary per file
File Description
src/pages/index.tsx Uses the shared solidButton classes for the primary CTA links to ensure consistent hover behavior.
src/components/Header.tsx Applies solidButton to “Get Help Now” buttons and adds explicit hover text color on Discord links.
src/components/Footer.tsx Adds a GitHub social link and adjusts whitespace rendering in the credits line.
src/components/buttonClasses.ts Introduces the centralized solidButton class string with rationale about the global a:hover rule.
package-lock.json Adds "peer": true metadata in multiple package entries (lockfile churn unrelated to UI changes).

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

@silent-decibel silent-decibel left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good

@LunaUrsa
LunaUrsa merged commit 1b84f0b into uat Aug 21, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants