Skip to content

feat(auth-service): add Powered by Certified footer to /account/login#130

Merged
s-adamantine merged 4 commits intomainfrom
fix/account-login-powered-by-footer
Apr 30, 2026
Merged

feat(auth-service): add Powered by Certified footer to /account/login#130
s-adamantine merged 4 commits intomainfrom
fix/account-login-powered-by-footer

Conversation

@s-adamantine
Copy link
Copy Markdown
Contributor

@s-adamantine s-adamantine commented Apr 30, 2026

Summary

Requested by Ma Earth to be done before launch

  • Renders the same "Powered by Certified" wordmark footer on the Account Settings sign-in flow (/account/login) — both the email-entry step and the "Enter your code" step.
  • Matches the footer already shown on the main OAuth sign-in page, so branding is consistent across both sign-in surfaces.
  • Inlines the wordmark SVG (no extra static request) and wraps each form's .container in a .page-wrap so the footer sits below the card.

Test plan

  • Visit /account/login and confirm the "Powered by Certified" footer is visible below the card.
  • Submit any email on /account/login, land on the "Enter your code" page, and confirm the footer is visible there too.
  • Confirm the wordmark click opens https://certified.app in a new tab.

🤖 Generated with Claude Code

Summary by CodeRabbit

Release Notes

  • New Features

    • Added "Powered by Certified" footer branding across all authentication pages, including login, account settings, account recovery, and error pages.
  • Style

    • Improved page layout with unified wrapper structure for consistent visual presentation across all auth surfaces.

Manually tested on auth.epds1.test.certified.app by @Kzoeps and it works

…gin pages

Match the main sign-in page's footer on the Account Settings sign-in
flow — both the email-entry step and the "Enter your code" step now
render the inlined Certified wordmark below the card.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Copy link
Copy Markdown

@claude claude Bot left a comment

Choose a reason for hiding this comment

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

Claude Code Review

This repository is configured for manual code reviews. Comment @claude review to trigger a review and subscribe this PR to future pushes, or @claude review once for a one-time review.

Tip: disable this comment in your organization's Code Review settings.

@changeset-bot
Copy link
Copy Markdown

changeset-bot Bot commented Apr 30, 2026

🦋 Changeset detected

Latest commit: c68fe8a

The changes in this PR will be included in the next version bump.

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@vercel
Copy link
Copy Markdown

vercel Bot commented Apr 30, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
epds-demo Ready Ready Preview, Comment Apr 30, 2026 7:49pm

Request Review

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Apr 30, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 17c7571c-3ca8-4b63-b0c1-865b6f243869

📥 Commits

Reviewing files that changed from the base of the PR and between 489e3fc and c68fe8a.

📒 Files selected for processing (1)
  • .changeset/account-login-powered-by-footer.md
✅ Files skipped from review due to trivial changes (1)
  • .changeset/account-login-powered-by-footer.md

📝 Walkthrough

Walkthrough

The pull request adds a "Powered by Certified" footer to all auth-service pages by introducing shared helper functions for footer HTML/CSS generation and injecting them across account-login, account-settings, choose-handle, recovery, and error page templates. CSS updates introduce a new .page-wrap wrapper for consistent layout and spacing.

Changes

Cohort / File(s) Summary
Footer Helpers
packages/auth-service/src/lib/page-helpers.ts
Introduces POWERED_BY_HTML and POWERED_BY_CSS exports that generate the "Powered by Certified" footer HTML (with processed SVG asset) and associated styling (layout, color, hover behavior, sizing).
Page Template Injections
packages/auth-service/src/routes/account-login.ts, packages/auth-service/src/routes/account-settings.ts, packages/auth-service/src/routes/choose-handle.ts, packages/auth-service/src/routes/recovery.ts, packages/auth-service/src/lib/render-error.ts
Injects shared footer helpers into page templates by wrapping content in new .page-wrap container, adding POWERED_BY_HTML to body markup, and embedding POWERED_BY_CSS into page styles. CSS adjusted for new wrapper's max-width and centering responsibility.
Release Notes
.changeset/account-login-powered-by-footer.md
Documents the visual change, enumerating all auth surfaces now displaying "Powered by Certified" footer branding.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~15 minutes

Possibly related PRs

Suggested reviewers

  • aspiers
  • Kzoeps

Poem

🐰 A footer appears, so proud and so bright,
"Certified" whispers, powered just right,
On login and settings, on every page spread,
The wordmark hops gently, footer ahead! 🎀✨

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 10.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The PR title accurately describes the main change: adding the Powered by Certified footer to the /account/login page.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/account-login-powered-by-footer

Review rate limit: 4/5 reviews remaining, refill in 12 minutes.

Comment @coderabbitai help to get the list of available commands and usage tips.

@railway-app
Copy link
Copy Markdown

railway-app Bot commented Apr 30, 2026

🚅 Deployed to the ePDS-pr-130 environment in ePDS

Service Status Web Updated (UTC)
@certified-app/auth-service ✅ Success (View Logs) Web Apr 30, 2026 at 7:26 pm
@certified-app/demo untrusted ✅ Success (View Logs) Web Apr 30, 2026 at 6:41 pm
@certified-app/pds-core ✅ Success (View Logs) Web Apr 30, 2026 at 6:41 pm
@certified-app/demo ✅ Success (View Logs) Web Apr 30, 2026 at 6:41 pm

@coveralls-official
Copy link
Copy Markdown

coveralls-official Bot commented Apr 30, 2026

Coverage Report for CI Build 25185989257

Warning

Build has drifted: This PR's base is out of sync with its target branch, so coverage data may include unrelated changes.
Quick fix: rebase this PR. Learn more →

Coverage increased (+0.05%) to 49.418%

Details

  • Coverage increased (+0.05%) from the base build.
  • Patch coverage: 4 of 4 lines across 1 file are fully covered (100%).
  • No coverage regressions found.

Uncovered Changes

No uncovered changes found.

Coverage Regressions

No coverage regressions found.


Coverage Stats

Coverage Status
Relevant Lines: 2673
Covered Lines: 1332
Line Coverage: 49.83%
Relevant Branches: 1623
Covered Branches: 791
Branch Coverage: 48.74%
Branches in Coverage %: Yes
Coverage Strength: 4.99 hits per line

💛 - Coveralls

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

🧹 Nitpick comments (1)
packages/auth-service/src/routes/account-login.ts (1)

16-24: ⚡ Quick win

Reorder imports to match the repository import convention.

node:* built-ins should be first, followed by external packages, then @certified-app/*, then local relative imports.

Suggested diff
-import { Router, type Request, type Response } from 'express'
 import { readFileSync } from 'node:fs'
 import path from 'node:path'
 import { fileURLToPath } from 'node:url'
-import { escapeHtml, maskEmail, createLogger } from '@certified-app/shared'
+import { Router, type Request, type Response } from 'express'
 import { fromNodeHeaders } from 'better-auth/node'
+import { createLogger, escapeHtml, maskEmail } from '@certified-app/shared'
 import type { AuthServiceContext } from '../context.js'
 import { buildOtpInputProps } from '../otp-input.js'
 import type { BetterAuthInstance } from '../better-auth.js'

As per coding guidelines: "Order imports as: Node built-ins (with node: prefix), external packages, internal workspace packages (@certified-app/*), local relative imports (with .js extension)".

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@packages/auth-service/src/routes/account-login.ts` around lines 16 - 24,
Reorder the import block so node built-ins come first (use node:fs, node:path,
node:url for readFileSync, path, fileURLToPath), then external packages
(express, better-auth/node), then internal workspace packages (imports from
`@certified-app/shared`), and lastly local relative imports (AuthServiceContext,
buildOtpInputProps, BetterAuthInstance) ensuring local imports use the .js
extension; update the existing import lines (Router/Request/Response,
readFileSync, path, fileURLToPath, fromNodeHeaders,
escapeHtml/maskEmail/createLogger, AuthServiceContext, buildOtpInputProps,
BetterAuthInstance) to follow that order.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@packages/auth-service/src/routes/account-login.ts`:
- Around line 16-24: Reorder the import block so node built-ins come first (use
node:fs, node:path, node:url for readFileSync, path, fileURLToPath), then
external packages (express, better-auth/node), then internal workspace packages
(imports from `@certified-app/shared`), and lastly local relative imports
(AuthServiceContext, buildOtpInputProps, BetterAuthInstance) ensuring local
imports use the .js extension; update the existing import lines
(Router/Request/Response, readFileSync, path, fileURLToPath, fromNodeHeaders,
escapeHtml/maskEmail/createLogger, AuthServiceContext, buildOtpInputProps,
BetterAuthInstance) to follow that order.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 65f9897a-14bb-4ba9-93bd-5ddbfd09fa52

📥 Commits

Reviewing files that changed from the base of the PR and between 6e6c3dc and 6a8671d.

📒 Files selected for processing (2)
  • .changeset/account-login-powered-by-footer.md
  • packages/auth-service/src/routes/account-login.ts

@s-adamantine s-adamantine marked this pull request as draft April 30, 2026 19:16
…er and recovery pages

Extracts the footer HTML + SVG read into a shared POWERED_BY_HTML /
POWERED_BY_CSS pair in lib/page-helpers.ts so the SVG is read once,
then applies it to /auth/choose-handle and both /auth/recover steps.
account-login is refactored to consume the same helper.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…eleted, and error pages

Extends the shared POWERED_BY_HTML / POWERED_BY_CSS helper to the
remaining auth-service pages: the /account dashboard, the backup-email
verify confirmation, the post-deletion screen, and the generic error
page used by 404/500 handlers and session-expired guards.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@railway-app railway-app Bot temporarily deployed to ePDS / ePDS-pr-130 April 30, 2026 19:24 Destroyed
@s-adamantine s-adamantine marked this pull request as ready for review April 30, 2026 19:36
Comment thread .changeset/handle-recovery-powered-by-footer.md Outdated
The handle-picker/recovery and settings/error footer rollouts were
landing as separate changesets alongside the original account-login
one. Fold all three into a single changeset describing the full
auth-service footer coverage so the next release notes read as one
change instead of three near-duplicates.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@sonarqubecloud
Copy link
Copy Markdown

@s-adamantine s-adamantine added this pull request to the merge queue Apr 30, 2026
Merged via the queue into main with commit 215f4d8 Apr 30, 2026
15 checks passed
@railway-app railway-app Bot temporarily deployed to ePDS / ePDS-pr-130 April 30, 2026 21:08 Destroyed
@aspiers aspiers deleted the fix/account-login-powered-by-footer branch April 30, 2026 21:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants