Rename Applirank to Reqcore throughout the codebase, updating documentation, configuration files, and error messages to reflect the new branding. Adjust Docker Compose setup and environment variables accordingly to ensure consistency with the new name.#48
Conversation
…tation, configuration files, and error messages to reflect the new branding. Adjust Docker Compose setup and environment variables accordingly to ensure consistency with the new name.
📝 WalkthroughWalkthroughThis PR performs a broad rebranding: replacing Applirank with Reqcore across docs, config, env vars, UI text, server logs, seed data, and container names. Most edits are textual substitutions; the seed script adds idempotent upsert/link logic. No public API signatures were materially changed. Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 2 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
🚅 Deployed to the applirank-pr-48 environment in applirank
|
There was a problem hiding this comment.
Actionable comments posted: 11
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
app/layouts/dashboard.vue (1)
30-35:⚠️ Potential issue | 🔴 CriticalFix the broken GitHub repository link before deployment.
The repository URL
https://github.com/reqcore/reqcoredoes not exist (404 error on both direct and API access). Users clicking this link in preview mode will encounter a broken page. Either create the repository with this name or update the link to point to an existing, accessible repository.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@app/layouts/dashboard.vue` around lines 30 - 35, The anchor element with text "Deploy your own instance →" has a broken href value "https://github.com/reqcore/reqcore"; update the href to a valid, existing GitHub repository or organization URL (or create the repo) so the link no longer 404s; locate the anchor in dashboard.vue (the <a> with class "ml-1 font-semibold underline..." and update its href to the correct repository URL or an alternative valid destination.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In @.agents/skills/4-technical-seo/SKILL.md:
- Line 42: The markdown table cell contains a code span with a leading space
inside the backticks (` — Reqcore`) which triggers markdownlint MD038; edit the
SKILL.md table entry so the code span has no leading space (e.g., change ` —
Reqcore` to `— Reqcore` or move the space outside the backticks like ` — `—
Reqcore` -> ` — ` + `— Reqcore`) ensuring the visible text remains the same but
the code span has no internal leading space.
In `@app/composables/useColorMode.ts`:
- Around line 28-29: The change replaces the stored color-mode key and will
reset existing users' themes; update the useColorMode composable to perform a
one-time migration from the legacy key to the new 'reqcore-color-mode' key: when
initializing (where you read or set localStorage and where
localStorage.setItem('reqcore-color-mode', colorMode.value) is used) check for
the old key (e.g., 'color-mode' or the previous key name), read its value if
present, apply it to colorMode.value, then write that value to
'reqcore-color-mode' and remove the legacy key so migration runs only once;
apply the same fallback/migration logic to the other setItem/read locations
referenced around the useColorMode initialization and the blocks at the other
noted call sites (the places using localStorage.setItem(...) and reading
colorMode.value) to ensure backward compatibility.
In `@app/pages/blog/index.vue`:
- Around line 45-47: The external anchor elements that use target="_blank" (the
anchors with attributes href="https://github.com/joachimhorsworthy/reqcore" and
the other anchor later in the file) must include rel="noopener noreferrer" to
prevent opener access and improve security; update the anchor tags that
currently have target="_blank" (the ones with class="transition
hover:text-white") to add rel="noopener noreferrer" so both external links
include this attribute.
In `@app/pages/catalog/index.vue`:
- Around line 541-543: Add rel="noopener noreferrer" to the external anchor that
has href="https://github.com/reqcore/reqcore" and target="_blank" in
app/pages/catalog/index.vue; locate the anchor element (the one with class
"inline-flex items-center gap-1 text-white/50 hover:text-white transition") and
update it to include rel="noopener noreferrer" to match other external GitHub
links and prevent window.opener security/privacy issues.
- Line 224: The page still shows the old monogram character 'A' above "Reqcore";
locate the template element that renders the monogram (the element immediately
above the "Reqcore" text in app/pages/catalog/index.vue) and replace the
hardcoded 'A' with the correct brand initial 'R' (or bind it to the centralized
brand variable/prop used across the app, e.g., a BRAND_MONOGRAM or computed
property) so the monogram matches "Reqcore".
In `@app/pages/index.vue`:
- Line 79: The avatar/logo badges adjacent to the "Reqcore" headings still
render the letter "A"; update each badge instance to show the new brand initial
"R". Locate the avatar elements or components (e.g., any <Avatar>, <div
class="avatar">, or inline badge nodes) that currently contain the literal "A"
near the "Reqcore" text (three occurrences corresponding to the three headings)
and change the inner text/content to "R" (or bind to a brandInitial variable set
to "R" if already using a prop). Ensure any hardcoded alt/title attributes or
aria-labels that reference the old initial are also updated to "R" for
accessibility.
- Line 108: Replace all occurrences of the broken repo URL
"https://github.com/reqcore/reqcore" in app/pages/index.vue with the active
repository URL "https://github.com/reqcore-inc/applirank"; specifically update
the anchor href attributes (e.g., the instance shown as
href="https://github.com/reqcore/reqcore") and the git clone command string so
links and the clone command point to "https://github.com/reqcore-inc/applirank"
instead.
In `@app/pages/roadmap.vue`:
- Line 419: The anchor href "https://github.com/reqcore/reqcore" used in the
roadmap.vue template is a broken link (404); locate the occurrences of that
exact string in the file (the anchor elements in the template) and either update
each href to the correct existing GitHub repository URL or remove the
anchor/replace it with plain text if there is no valid repo; ensure you update
all instances of "https://github.com/reqcore/reqcore" so no broken links remain
(search for that string to find the affected <a> tags).
In `@app/plugins/color-mode.client.ts`:
- Line 10: The rename of the localStorage key in the color-mode client causes
existing users to lose their preference; update the logic around the stored
variable and localStorage access to preserve/migrate old values by first
checking for the legacy key 'applirank-color-mode' before falling back to the
new 'reqcore-color-mode' (or read legacy and write it to the new key on load),
i.e., adjust the getItem calls and any subsequent writes that reference stored
to perform a fallback/migration so existing preferences are retained (look for
the const stored = localStorage.getItem(...) expression and the code path that
writes the color-mode back to localStorage).
In `@CONTRIBUTING.md`:
- Around line 14-15: Update the repository clone command in CONTRIBUTING.md:
replace the incorrect git clone URL "https://github.com/reqcore/reqcore" with
the correct "https://github.com/reqcore-inc/applirank.git" and change the
subsequent directory command from "cd reqcore" to "cd applirank" so new
contributors can successfully clone and enter the project.
In `@README.md`:
- Line 7: Update broken external links in README: replace the demo and GitHub
links referenced as "Live Demo" and "Report Bug" (currently pointing to
https://demo.reqcore.com and https://github.com/reqcore/reqcore/issues/new) with
the correct targets under the reqcore-inc/applirank repo (e.g., update any
occurrences of github.com/reqcore/reqcore and archive/refs/heads/main.zip to
github.com/reqcore-inc/applirank and the corresponding archive URL), and point
the "Live Demo" link to the actual deployed demo URL (or a working placeholder
if not yet deployed); change all README link targets that include the old
org/repo to the new org/repo to ensure users can reach documentation and issue
reporting.
---
Outside diff comments:
In `@app/layouts/dashboard.vue`:
- Around line 30-35: The anchor element with text "Deploy your own instance →"
has a broken href value "https://github.com/reqcore/reqcore"; update the href to
a valid, existing GitHub repository or organization URL (or create the repo) so
the link no longer 404s; locate the anchor in dashboard.vue (the <a> with class
"ml-1 font-semibold underline..." and update its href to the correct repository
URL or an alternative valid destination.
ℹ️ Review info
Configuration used: defaults
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (1)
package-lock.jsonis excluded by!**/package-lock.json
📒 Files selected for processing (90)
.agents/skills/1-topic-research/SKILL.md.agents/skills/2-source-gathering/SKILL.md.agents/skills/4-technical-seo/SKILL.md.agents/skills/5-review-quality/SKILL.md.agents/skills/seo-skill/SKILL.md.env.example.github/ISSUE_TEMPLATE/bug_report.yml.github/ISSUE_TEMPLATE/config.yml.github/ISSUE_TEMPLATE/feature_request.yml.github/prompts/master-seo-prompt.prompt.md.github/workflows/docker-readme-validation.ymlARCHITECTURE.mdCHANGELOG.mdCODE_OF_CONDUCT.mdCONTRIBUTING.mdDockerfilePRODUCT.mdREADME.mdROADMAP.mdSECURITY.mdTOPICAL-AUTHORITY-MAP.mdapp/assets/css/main.cssapp/components/AppSidebar.vueapp/components/FeedbackModal.vueapp/components/GiscusComments.vueapp/components/PreviewUpsellModal.vueapp/composables/useColorMode.tsapp/layouts/auth.vueapp/layouts/dashboard.vueapp/layouts/public.vueapp/pages/auth/sign-in.vueapp/pages/auth/sign-up.vueapp/pages/blog/[...slug].vueapp/pages/blog/index.vueapp/pages/catalog/index.vueapp/pages/dashboard/applications/[id].vueapp/pages/dashboard/applications/index.vueapp/pages/dashboard/candidates/[id].vueapp/pages/dashboard/candidates/index.vueapp/pages/dashboard/candidates/new.vueapp/pages/dashboard/index.vueapp/pages/dashboard/jobs/[id]/application-form.vueapp/pages/dashboard/jobs/[id]/candidates.vueapp/pages/dashboard/jobs/[id]/index.vueapp/pages/dashboard/jobs/[id]/pipeline.vueapp/pages/dashboard/jobs/[id]/swipe.vueapp/pages/dashboard/jobs/index.vueapp/pages/dashboard/jobs/new.vueapp/pages/index.vueapp/pages/jobs/[slug]/apply.vueapp/pages/jobs/[slug]/confirmation.vueapp/pages/jobs/[slug]/index.vueapp/pages/jobs/index.vueapp/pages/onboarding/create-org.vueapp/pages/roadmap.vueapp/plugins/color-mode.client.tscontent/blog/best-open-source-applicant-tracking-systems.mdcontent/blog/self-hosted-vs-cloud-ats.mdcontent/blog/total-cost-of-ownership-saas-ats-vs-self-hosted.mdcontent/catalog/ai-intelligence/ai-ranking/index.mdcontent/catalog/ai-intelligence/index.mdcontent/catalog/ai-intelligence/local-ai/index.mdcontent/catalog/ai-intelligence/resume-parsing/index.mdcontent/catalog/collaboration/index.mdcontent/catalog/collaboration/interview-scheduling/index.mdcontent/catalog/mobile-support/responsive-dashboard/index.mdcontent/catalog/pipeline-management/index.mdcontent/catalog/pipeline-management/job-management/index.mdcontent/catalog/pipeline-management/kanban-board/index.mdcontent/catalog/platform/deployment/index.mdcontent/catalog/platform/index.mdcontent/catalog/recruitment-tools/document-storage/index.mdcontent/catalog/recruitment-tools/index.mdcontent/catalog/recruitment-tools/public-job-board/index.mdcontent/catalog/security-compliance/gdpr/index.mdcontent/catalog/security-compliance/index.mddocker-compose.ymlnuxt.config.tspackage.jsonserver/api/auth/[...all].tsserver/api/candidates/[id]/documents/index.post.tsserver/api/documents/[id].delete.tsserver/api/public/jobs/[slug]/apply.post.tsserver/middleware/demo-guard.tsserver/plugins/migrations.tsserver/plugins/s3-bucket.tsserver/scripts/seed.tsserver/utils/auth.tsserver/utils/env.tssetup.sh
| | # | Check | Rule | | ||
| |---|-------|------| | ||
| | 1.1 | Character count | 50–60 chars (account for ` — Applirank` suffix = ~12 extra chars, so frontmatter title should be 50–60 chars) | | ||
| | 1.1 | Character count | 50–60 chars (account for ` — Reqcore` suffix = ~12 extra chars, so frontmatter title should be 50–60 chars) | |
There was a problem hiding this comment.
Fix markdownlint MD038 violation on Line 42.
The code span includes a leading space inside backticks, which triggers no-space-in-code.
Suggested fix
-| 1.1 | Character count | 50–60 chars (account for ` — Reqcore` suffix = ~12 extra chars, so frontmatter title should be 50–60 chars) |
+| 1.1 | Character count | 50–60 chars (account for `— Reqcore` suffix = ~12 extra chars, so frontmatter title should be 50–60 chars) |📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| | 1.1 | Character count | 50–60 chars (account for ` — Reqcore` suffix = ~12 extra chars, so frontmatter title should be 50–60 chars) | | |
| | 1.1 | Character count | 50–60 chars (account for `— Reqcore` suffix = ~12 extra chars, so frontmatter title should be 50–60 chars) | |
🧰 Tools
🪛 markdownlint-cli2 (0.21.0)
[warning] 42-42: Spaces inside code span elements
(MD038, no-space-in-code)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In @.agents/skills/4-technical-seo/SKILL.md at line 42, The markdown table cell
contains a code span with a leading space inside the backticks (` — Reqcore`)
which triggers markdownlint MD038; edit the SKILL.md table entry so the code
span has no leading space (e.g., change ` — Reqcore` to `— Reqcore` or move the
space outside the backticks like ` — `— Reqcore` -> ` — ` + `— Reqcore`)
ensuring the visible text remains the same but the code span has no internal
leading space.
| localStorage.setItem('reqcore-color-mode', colorMode.value) | ||
| } |
There was a problem hiding this comment.
Preserve existing users’ saved theme during key rename.
Switching the storage key without legacy fallback resets color mode for existing users. Add one-time fallback/migration from the old key.
🔁 Proposed backward-compatible migration
export function useColorMode() {
+ const STORAGE_KEY = 'reqcore-color-mode'
+ const LEGACY_STORAGE_KEY = 'applirank-color-mode'
const colorMode = useState<'light' | 'dark'>('color-mode', () => 'light')
@@
if (import.meta.client) {
- localStorage.setItem('reqcore-color-mode', colorMode.value)
+ localStorage.setItem(STORAGE_KEY, colorMode.value)
}
@@
if (import.meta.client) {
- localStorage.setItem('reqcore-color-mode', mode)
+ localStorage.setItem(STORAGE_KEY, mode)
}
@@
- const stored = localStorage.getItem('reqcore-color-mode') as 'light' | 'dark' | null
+ const stored = (localStorage.getItem(STORAGE_KEY)
+ ?? localStorage.getItem(LEGACY_STORAGE_KEY)) as 'light' | 'dark' | null
if (stored) {
colorMode.value = stored
+ localStorage.setItem(STORAGE_KEY, stored)
+ localStorage.removeItem(LEGACY_STORAGE_KEY)
} else if (window.matchMedia('(prefers-color-scheme: dark)').matches) {
colorMode.value = 'dark'
}Also applies to: 37-38, 44-47
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@app/composables/useColorMode.ts` around lines 28 - 29, The change replaces
the stored color-mode key and will reset existing users' themes; update the
useColorMode composable to perform a one-time migration from the legacy key to
the new 'reqcore-color-mode' key: when initializing (where you read or set
localStorage and where localStorage.setItem('reqcore-color-mode',
colorMode.value) is used) check for the old key (e.g., 'color-mode' or the
previous key name), read its value if present, apply it to colorMode.value, then
write that value to 'reqcore-color-mode' and remove the legacy key so migration
runs only once; apply the same fallback/migration logic to the other
setItem/read locations referenced around the useColorMode initialization and the
blocks at the other noted call sites (the places using localStorage.setItem(...)
and reading colorMode.value) to ensure backward compatibility.
| href="https://github.com/joachimhorsworthy/reqcore" | ||
| target="_blank" | ||
| class="transition hover:text-white" |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
# Find and check if the file exists
git ls-files app/pages/blog/index.vueRepository: reqcore-inc/applirank
Length of output: 89
🏁 Script executed:
# Get file size and line count
wc -l app/pages/blog/index.vueRepository: reqcore-inc/applirank
Length of output: 93
🏁 Script executed:
# Read the relevant sections around lines 45-47 and 143-145
sed -n '40,50p' app/pages/blog/index.vueRepository: reqcore-inc/applirank
Length of output: 610
🏁 Script executed:
# Check the second mentioned location
sed -n '138,150p' app/pages/blog/index.vueRepository: reqcore-inc/applirank
Length of output: 581
Add rel safeguards on external links opened in new tabs.
Both anchors at lines 45-47 and 143-145 use target="_blank" without rel="noopener noreferrer". Add it to prevent opener access and harden link security.
🔧 Proposed fix
<a
href="https://github.com/joachimhorsworthy/reqcore"
target="_blank"
+ rel="noopener noreferrer"
class="transition hover:text-white"
>
@@
<a
href="https://github.com/joachimhorsworthy/reqcore"
target="_blank"
+ rel="noopener noreferrer"
class="transition hover:text-white/60"
>📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| href="https://github.com/joachimhorsworthy/reqcore" | |
| target="_blank" | |
| class="transition hover:text-white" | |
| href="https://github.com/joachimhorsworthy/reqcore" | |
| target="_blank" | |
| rel="noopener noreferrer" | |
| class="transition hover:text-white" |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@app/pages/blog/index.vue` around lines 45 - 47, The external anchor elements
that use target="_blank" (the anchors with attributes
href="https://github.com/joachimhorsworthy/reqcore" and the other anchor later
in the file) must include rel="noopener noreferrer" to prevent opener access and
improve security; update the anchor tags that currently have target="_blank"
(the ones with class="transition hover:text-white") to add rel="noopener
noreferrer" so both external links include this attribute.
| <NuxtLink to="/" class="flex items-center gap-2.5 text-[15px] font-semibold tracking-tight text-white"> | ||
| <span class="flex h-7 w-7 items-center justify-center rounded-md bg-brand-500 text-xs font-black text-white">A</span> | ||
| Applirank | ||
| Reqcore |
There was a problem hiding this comment.
Brand monogram is still the old initial.
At Line 224 the text is now “Reqcore”, but Line 223 still renders A, which breaks rebrand consistency.
🎨 Suggested fix
- <span class="flex h-7 w-7 items-center justify-center rounded-md bg-brand-500 text-xs font-black text-white">A</span>
+ <span class="flex h-7 w-7 items-center justify-center rounded-md bg-brand-500 text-xs font-black text-white">R</span>🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@app/pages/catalog/index.vue` at line 224, The page still shows the old
monogram character 'A' above "Reqcore"; locate the template element that renders
the monogram (the element immediately above the "Reqcore" text in
app/pages/catalog/index.vue) and replace the hardcoded 'A' with the correct
brand initial 'R' (or bind it to the centralized brand variable/prop used across
the app, e.g., a BRAND_MONOGRAM or computed property) so the monogram matches
"Reqcore".
| href="https://github.com/reqcore/reqcore" | ||
| target="_blank" | ||
| class="inline-flex items-center gap-1 text-white/50 hover:text-white transition" |
There was a problem hiding this comment.
Add rel="noopener noreferrer" to the footer external link.
target="_blank" is present, but this anchor is missing rel, unlike your other external GitHub links.
🔒 Suggested fix
<a
href="https://github.com/reqcore/reqcore"
target="_blank"
+ rel="noopener noreferrer"
class="inline-flex items-center gap-1 text-white/50 hover:text-white transition"
>📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| href="https://github.com/reqcore/reqcore" | |
| target="_blank" | |
| class="inline-flex items-center gap-1 text-white/50 hover:text-white transition" | |
| href="https://github.com/reqcore/reqcore" | |
| target="_blank" | |
| rel="noopener noreferrer" | |
| class="inline-flex items-center gap-1 text-white/50 hover:text-white transition" |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@app/pages/catalog/index.vue` around lines 541 - 543, Add rel="noopener
noreferrer" to the external anchor that has
href="https://github.com/reqcore/reqcore" and target="_blank" in
app/pages/catalog/index.vue; locate the anchor element (the one with class
"inline-flex items-center gap-1 text-white/50 hover:text-white transition") and
update it to include rel="noopener noreferrer" to match other external GitHub
links and prevent window.opener security/privacy issues.
| </NuxtLink> | ||
| <a | ||
| href="https://github.com/applirank/applirank" | ||
| href="https://github.com/reqcore/reqcore" |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
urls=(
"https://github.com/reqcore/reqcore"
"https://github.com/reqcore/reqcore/blob/main/README.md"
"https://github.com/reqcore/reqcore/blob/main/LICENSE"
"https://github.com/reqcore-inc/applirank"
)
for u in "${urls[@]}"; do
code=$(curl -s -o /dev/null -w "%{http_code}" -L "$u")
echo "Status: $code | URL: $u"
doneRepository: reqcore-inc/applirank
Length of output: 324
🏁 Script executed:
# Check current file content to confirm the links
git ls-files app/pages/index.vueRepository: reqcore-inc/applirank
Length of output: 84
🏁 Script executed:
# Read the file to see the actual content at the flagged lines
cat -n app/pages/index.vue | sed -n '100,120p'
cat -n app/pages/index.vue | sed -n '155,175p'
cat -n app/pages/index.vue | sed -n '205,220p'
cat -n app/pages/index.vue | sed -n '575,635p'Repository: reqcore-inc/applirank
Length of output: 6208
Update all GitHub repository references to match the active project repository.
All seven instances contain broken links pointing to https://github.com/reqcore/reqcore (404 Not Found), including the git clone command on line 211. The active repository exists at https://github.com/reqcore-inc/applirank (200 OK). Users will encounter broken links and the clone command will fail until these URLs are corrected.
Affected lines: 108, 163, 211, 583, 610, 618, 626
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@app/pages/index.vue` at line 108, Replace all occurrences of the broken repo
URL "https://github.com/reqcore/reqcore" in app/pages/index.vue with the active
repository URL "https://github.com/reqcore-inc/applirank"; specifically update
the anchor href attributes (e.g., the instance shown as
href="https://github.com/reqcore/reqcore") and the git clone command string so
links and the clone command point to "https://github.com/reqcore-inc/applirank"
instead.
| </NuxtLink> | ||
| <a | ||
| href="https://github.com/applirank/applirank" | ||
| href="https://github.com/reqcore/reqcore" |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Verify the new GitHub repository URL is accessible
curl -s -I -L https://github.com/reqcore/reqcore | head -1Repository: reqcore-inc/applirank
Length of output: 76
The GitHub repository https://github.com/reqcore/reqcore does not exist (HTTP 404).
The URL at lines 419, 612, and 774 points to a non-existent repository. Either correct the URL to an existing repository or remove these broken links before merging.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@app/pages/roadmap.vue` at line 419, The anchor href
"https://github.com/reqcore/reqcore" used in the roadmap.vue template is a
broken link (404); locate the occurrences of that exact string in the file (the
anchor elements in the template) and either update each href to the correct
existing GitHub repository URL or remove the anchor/replace it with plain text
if there is no valid repo; ensure you update all instances of
"https://github.com/reqcore/reqcore" so no broken links remain (search for that
string to find the affected <a> tags).
| if (import.meta.server) return | ||
|
|
||
| const stored = localStorage.getItem('applirank-color-mode') as 'light' | 'dark' | null | ||
| const stored = localStorage.getItem('reqcore-color-mode') as 'light' | 'dark' | null |
There was a problem hiding this comment.
Existing users will lose their saved color mode preference.
Renaming the localStorage key from applirank-color-mode to reqcore-color-mode means users who previously set a preference will fall back to OS preference after this deploy. This is acceptable for a rebrand but worth noting for release communications.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@app/plugins/color-mode.client.ts` at line 10, The rename of the localStorage
key in the color-mode client causes existing users to lose their preference;
update the logic around the stored variable and localStorage access to
preserve/migrate old values by first checking for the legacy key
'applirank-color-mode' before falling back to the new 'reqcore-color-mode' (or
read legacy and write it to the new key on load), i.e., adjust the getItem calls
and any subsequent writes that reference stored to perform a fallback/migration
so existing preferences are retained (look for the const stored =
localStorage.getItem(...) expression and the code path that writes the
color-mode back to localStorage).
| git clone https://github.com/reqcore/reqcore.git | ||
| cd reqcore |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
curl -sI "https://github.com/reqcore/reqcore" | head -n 1Repository: reqcore-inc/applirank
Length of output: 76
🏁 Script executed:
curl -sI "https://github.com/reqcore-inc/applirank" | head -n 1Repository: reqcore-inc/applirank
Length of output: 76
Update the git clone URL to the correct repository location.
The clone URL on lines 14-15 uses https://github.com/reqcore/reqcore, which returns a 404. The correct repository is at https://github.com/reqcore-inc/applirank:
Corrected lines 14-15
git clone https://github.com/reqcore-inc/applirank.git
cd applirank
This must be fixed before merge to prevent new contributors from encountering a 404 error.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@CONTRIBUTING.md` around lines 14 - 15, Update the repository clone command in
CONTRIBUTING.md: replace the incorrect git clone URL
"https://github.com/reqcore/reqcore" with the correct
"https://github.com/reqcore-inc/applirank.git" and change the subsequent
directory command from "cd reqcore" to "cd applirank" so new contributors can
successfully clone and enter the project.
| **The open-source ATS you own. No per-seat fees. No data lock-in. No secret algorithms.** | ||
|
|
||
| [Live Demo](https://demo.applirank.com) · [Documentation](ARCHITECTURE.md) · [Roadmap](ROADMAP.md) · [Report Bug](https://github.com/applirank/applirank/issues/new) | ||
| [Live Demo](https://demo.reqcore.com) · [Documentation](ARCHITECTURE.md) · [Roadmap](ROADMAP.md) · [Report Bug](https://github.com/reqcore/reqcore/issues/new) |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
# First, let's check the README.md file to see the context
cat -n README.md | head -90Repository: reqcore-inc/applirank
Length of output: 4497
🏁 Script executed:
#!/bin/bash
# Validate key rebrand URLs from README.
urls=(
"https://demo.reqcore.com"
"https://github.com/reqcore/reqcore/issues/new"
"https://github.com/reqcore/reqcore.git"
"https://github.com/reqcore/reqcore/archive/refs/heads/main.zip"
)
for u in "${urls[@]}"; do
code=$(curl -s -o /dev/null -w "%{http_code}" -L "$u" --connect-timeout 5 --max-time 10)
echo "$code $u"
doneRepository: reqcore-inc/applirank
Length of output: 257
Fix broken URLs in README — all external links are unreachable.
The rebrand URLs are not live and must be corrected before merge:
https://demo.reqcore.com(000 — connection/DNS failed)https://github.com/reqcore/reqcore/issues/new(404)https://github.com/reqcore/reqcore.git(404)https://github.com/reqcore/reqcore/archive/refs/heads/main.zip(404)
The actual repository is at reqcore-inc/applirank. Update all GitHub links to use the correct organization and repository path, and ensure the demo site is deployed and reachable before users encounter broken onboarding or bug-reporting paths.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@README.md` at line 7, Update broken external links in README: replace the
demo and GitHub links referenced as "Live Demo" and "Report Bug" (currently
pointing to https://demo.reqcore.com and
https://github.com/reqcore/reqcore/issues/new) with the correct targets under
the reqcore-inc/applirank repo (e.g., update any occurrences of
github.com/reqcore/reqcore and archive/refs/heads/main.zip to
github.com/reqcore-inc/applirank and the corresponding archive URL), and point
the "Live Demo" link to the actual deployed demo URL (or a working placeholder
if not yet deployed); change all README link targets that include the old
org/repo to the new org/repo to ensure users can reach documentation and issue
reporting.
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@server/scripts/seed.ts`:
- Around line 375-387: The current flow assumes a credential account exists for
an existing user and blindly runs update on schema.account (using existingUser,
userId, hashedPassword, providerId 'credential') then logs success for
DEMO_EMAIL even if zero rows were affected; modify the logic to first check
whether a credential account row exists for that user and if not insert a new
credential account (populate userId, providerId 'credential', password:
hashedPassword, createdAt/updatedAt), otherwise perform the update and verify
the number of affected rows before logging; ensure the console.log for
DEMO_EMAIL only runs after either a successful update or a successful insert.
| if (existingUser.length > 0 && existingUser[0]) { | ||
| // User exists — ensure their credential password is current | ||
| userId = existingUser[0].id | ||
| await db | ||
| .update(schema.account) | ||
| .set({ password: hashedPassword, updatedAt: new Date() }) | ||
| .where( | ||
| and( | ||
| eq(schema.account.userId, userId), | ||
| eq(schema.account.providerId, 'credential'), | ||
| ), | ||
| ) | ||
| console.log(`✅ Demo user verified/updated: ${DEMO_EMAIL}`) |
There was a problem hiding this comment.
Handle existing users who are missing a credential account.
If the user exists but their credential account row does not, the update affects zero rows and the script still logs success. That leaves demo sign-in broken in a state this flow is intended to repair.
💡 Proposed fix
if (existingUser.length > 0 && existingUser[0]) {
// User exists — ensure their credential password is current
userId = existingUser[0].id
- await db
- .update(schema.account)
- .set({ password: hashedPassword, updatedAt: new Date() })
- .where(
- and(
- eq(schema.account.userId, userId),
- eq(schema.account.providerId, 'credential'),
- ),
- )
+ const existingCredential = await db
+ .select({ id: schema.account.id })
+ .from(schema.account)
+ .where(
+ and(
+ eq(schema.account.userId, userId),
+ eq(schema.account.providerId, 'credential'),
+ ),
+ )
+ .limit(1)
+
+ if (existingCredential.length > 0) {
+ await db
+ .update(schema.account)
+ .set({ password: hashedPassword, updatedAt: new Date() })
+ .where(eq(schema.account.id, existingCredential[0]!.id))
+ }
+ else {
+ await db.insert(schema.account).values({
+ id: id(),
+ userId,
+ accountId: userId,
+ providerId: 'credential',
+ password: hashedPassword,
+ createdAt: new Date(),
+ updatedAt: new Date(),
+ })
+ }
console.log(`✅ Demo user verified/updated: ${DEMO_EMAIL}`)
}📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| if (existingUser.length > 0 && existingUser[0]) { | |
| // User exists — ensure their credential password is current | |
| userId = existingUser[0].id | |
| await db | |
| .update(schema.account) | |
| .set({ password: hashedPassword, updatedAt: new Date() }) | |
| .where( | |
| and( | |
| eq(schema.account.userId, userId), | |
| eq(schema.account.providerId, 'credential'), | |
| ), | |
| ) | |
| console.log(`✅ Demo user verified/updated: ${DEMO_EMAIL}`) | |
| if (existingUser.length > 0 && existingUser[0]) { | |
| // User exists — ensure their credential password is current | |
| userId = existingUser[0].id | |
| const existingCredential = await db | |
| .select({ id: schema.account.id }) | |
| .from(schema.account) | |
| .where( | |
| and( | |
| eq(schema.account.userId, userId), | |
| eq(schema.account.providerId, 'credential'), | |
| ), | |
| ) | |
| .limit(1) | |
| if (existingCredential.length > 0) { | |
| await db | |
| .update(schema.account) | |
| .set({ password: hashedPassword, updatedAt: new Date() }) | |
| .where(eq(schema.account.id, existingCredential[0]!.id)) | |
| } | |
| else { | |
| await db.insert(schema.account).values({ | |
| id: id(), | |
| userId, | |
| accountId: userId, | |
| providerId: 'credential', | |
| password: hashedPassword, | |
| createdAt: new Date(), | |
| updatedAt: new Date(), | |
| }) | |
| } | |
| console.log(`✅ Demo user verified/updated: ${DEMO_EMAIL}`) | |
| } |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@server/scripts/seed.ts` around lines 375 - 387, The current flow assumes a
credential account exists for an existing user and blindly runs update on
schema.account (using existingUser, userId, hashedPassword, providerId
'credential') then logs success for DEMO_EMAIL even if zero rows were affected;
modify the logic to first check whether a credential account row exists for that
user and if not insert a new credential account (populate userId, providerId
'credential', password: hashedPassword, createdAt/updatedAt), otherwise perform
the update and verify the number of affected rows before logging; ensure the
console.log for DEMO_EMAIL only runs after either a successful update or a
successful insert.
There was a problem hiding this comment.
Actionable comments posted: 2
♻️ Duplicate comments (1)
server/scripts/seed.ts (1)
375-387:⚠️ Potential issue | 🟠 MajorExisting-user path still skips credential backfill.
If the user exists but has no
credentialaccount row, the update on Line 378–Line 386 affects zero rows and Line 387 still logs success. This leaves demo sign-in broken.💡 Proposed fix
if (existingUser.length > 0 && existingUser[0]) { // User exists — ensure their credential password is current userId = existingUser[0].id - await db - .update(schema.account) - .set({ password: hashedPassword, updatedAt: new Date() }) - .where( - and( - eq(schema.account.userId, userId), - eq(schema.account.providerId, 'credential'), - ), - ) + const existingCredential = await db + .select({ id: schema.account.id }) + .from(schema.account) + .where( + and( + eq(schema.account.userId, userId), + eq(schema.account.providerId, 'credential'), + ), + ) + .limit(1) + + if (existingCredential.length > 0 && existingCredential[0]) { + await db + .update(schema.account) + .set({ password: hashedPassword, updatedAt: new Date() }) + .where(eq(schema.account.id, existingCredential[0].id)) + } + else { + await db.insert(schema.account).values({ + id: id(), + userId, + accountId: userId, + providerId: 'credential', + password: hashedPassword, + createdAt: new Date(), + updatedAt: new Date(), + }) + } console.log(`✅ Demo user verified/updated: ${DEMO_EMAIL}`) }🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@server/scripts/seed.ts` around lines 375 - 387, The existing-user branch uses existingUser and updates schema.account rows filtering by schema.account.userId and schema.account.providerId === 'credential', but if no credential row exists the update affects zero rows while the script still logs success; modify the logic in the block handling existingUser (where userId, hashedPassword are available) to check whether a credential account row exists for that user after the update (or query directly for providerId 'credential'), and if missing insert a new account row for that user with providerId 'credential', password: hashedPassword, and updatedAt/createdAt timestamps before logging the "Demo user verified/updated" message so demo sign-in is guaranteed to have a credential entry.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@nuxt.config.ts`:
- Around line 46-50: The plausible analytics script is hardcoded in
nuxt.config.ts causing all deployments to send data to a fixed endpoint; make it
opt-in by gating the script inclusion on an environment/runtime config variable
(e.g., ENABLE_PLAUSIBLE or PLAUSIBLE_DOMAIN). Update the config that adds the
script (the object with keys defer, 'data-domain', src) so it is only pushed
into head/scripts when the env var is truthy, and read the domain and src from
env/runtime config instead of a literal string; ensure you reference the same
object keys ('defer', 'data-domain', 'src') and the nuxt config export
(defineNuxtConfig / runtimeConfig) when implementing the conditional logic.
- Line 110: Update the schemaOrg.identity.sameAs value to the canonical
repository URL: locate the schemaOrg.identity.sameAs array in nuxt.config.ts and
replace 'https://github.com/reqcore/reqcore' with
'https://github.com/reqcore-inc/applirank' so the sameAs entry points to the
valid repository URL.
---
Duplicate comments:
In `@server/scripts/seed.ts`:
- Around line 375-387: The existing-user branch uses existingUser and updates
schema.account rows filtering by schema.account.userId and
schema.account.providerId === 'credential', but if no credential row exists the
update affects zero rows while the script still logs success; modify the logic
in the block handling existingUser (where userId, hashedPassword are available)
to check whether a credential account row exists for that user after the update
(or query directly for providerId 'credential'), and if missing insert a new
account row for that user with providerId 'credential', password:
hashedPassword, and updatedAt/createdAt timestamps before logging the "Demo user
verified/updated" message so demo sign-in is guaranteed to have a credential
entry.
| { | ||
| defer: true, | ||
| 'data-domain': 'applirank.com', | ||
| 'data-domain': 'reqcore.com', | ||
| src: 'https://test-plausible.kjadfu.easypanel.host/js/script.js', | ||
| }, |
There was a problem hiding this comment.
Make analytics script opt-in instead of hardcoded.
This injects a third-party analytics script/domain for every deployment. In shared/open-source deployments, that can unintentionally send usage data to a fixed endpoint.
🔒 Suggested change
- script: [
- {
- defer: true,
- 'data-domain': 'reqcore.com',
- src: 'https://test-plausible.kjadfu.easypanel.host/js/script.js',
- },
- ],
+ script:
+ process.env.NUXT_PUBLIC_PLAUSIBLE_SCRIPT_SRC && process.env.NUXT_PUBLIC_PLAUSIBLE_DOMAIN
+ ? [{
+ defer: true,
+ 'data-domain': process.env.NUXT_PUBLIC_PLAUSIBLE_DOMAIN,
+ src: process.env.NUXT_PUBLIC_PLAUSIBLE_SCRIPT_SRC,
+ }]
+ : [],📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| { | |
| defer: true, | |
| 'data-domain': 'applirank.com', | |
| 'data-domain': 'reqcore.com', | |
| src: 'https://test-plausible.kjadfu.easypanel.host/js/script.js', | |
| }, | |
| script: | |
| process.env.NUXT_PUBLIC_PLAUSIBLE_SCRIPT_SRC && process.env.NUXT_PUBLIC_PLAUSIBLE_DOMAIN | |
| ? [{ | |
| defer: true, | |
| 'data-domain': process.env.NUXT_PUBLIC_PLAUSIBLE_DOMAIN, | |
| src: process.env.NUXT_PUBLIC_PLAUSIBLE_SCRIPT_SRC, | |
| }] | |
| : [], |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@nuxt.config.ts` around lines 46 - 50, The plausible analytics script is
hardcoded in nuxt.config.ts causing all deployments to send data to a fixed
endpoint; make it opt-in by gating the script inclusion on an
environment/runtime config variable (e.g., ENABLE_PLAUSIBLE or
PLAUSIBLE_DOMAIN). Update the config that adds the script (the object with keys
defer, 'data-domain', src) so it is only pushed into head/scripts when the env
var is truthy, and read the domain and src from env/runtime config instead of a
literal string; ensure you reference the same object keys ('defer',
'data-domain', 'src') and the nuxt config export (defineNuxtConfig /
runtimeConfig) when implementing the conditional logic.
| name: 'Reqcore', | ||
| url: 'https://reqcore.com', | ||
| logo: 'https://reqcore.com/og-image.png', | ||
| sameAs: ['https://github.com/reqcore/reqcore'], |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
for url in \
"https://github.com/reqcore/reqcore" \
"https://github.com/reqcore-inc/applirank" \
"https://github.com/reqcore-inc/reqcore"
do
code=$(curl -s -o /dev/null -w "%{http_code}" -L "$url")
echo "$code $url"
doneRepository: reqcore-inc/applirank
Length of output: 191
🏁 Script executed:
# Check the actual repository configuration
git config --get remote.origin.url
git remote -vRepository: reqcore-inc/applirank
Length of output: 240
🏁 Script executed:
# Check nuxt.config.ts to see the context and verify the line
head -120 nuxt.config.ts | tail -15Repository: reqcore-inc/applirank
Length of output: 473
Update schemaOrg.identity.sameAs to the canonical repository URL.
The current URL https://github.com/reqcore/reqcore returns a 404. Update it to https://github.com/reqcore-inc/applirank, which is the actual canonical repository (confirmed by the git remote and returns HTTP 200).
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@nuxt.config.ts` at line 110, Update the schemaOrg.identity.sameAs value to
the canonical repository URL: locate the schemaOrg.identity.sameAs array in
nuxt.config.ts and replace 'https://github.com/reqcore/reqcore' with
'https://github.com/reqcore-inc/applirank' so the sameAs entry points to the
valid repository URL.
e9220b9 to
172a2ca
Compare
Summary
Type of change
Validation
DCO
Signed-off-by) viagit commit -sSummary by CodeRabbit