Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ Thanks for contributing to Reqcore.
## Development Setup

```bash
git clone https://github.com/reqcore/reqcore.git
git clone https://github.com/reqcore-inc/reqcore.git
cd reqcore
cp .env.example .env
docker compose up -d
Expand Down
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

**The open-source ATS you own. No per-seat fees. No data lock-in. No secret algorithms.**

[Live Demo](https://demo.reqcore.com) · [Documentation](ARCHITECTURE.md) · [Roadmap](ROADMAP.md) · [Report Bug](https://github.com/reqcore/reqcore/issues/new)
[Live Demo](https://demo.reqcore.com) · [Documentation](ARCHITECTURE.md) · [Roadmap](ROADMAP.md) · [Report Bug](https://github.com/reqcore-inc/reqcore/issues/new)

[![License: AGPL-3.0](https://img.shields.io/badge/License-AGPL--3.0-blue.svg)](LICENSE)

Expand Down Expand Up @@ -75,11 +75,11 @@ You should see something like `Docker version 27.x.x`. If you get `command not f
Clone the repository (this downloads the source code):

```bash
git clone https://github.com/reqcore/reqcore.git
git clone https://github.com/reqcore-inc/reqcore.git
cd reqcore
```

> Don't have `git`? [Download it here](https://git-scm.com/downloads), or [download a ZIP](https://github.com/reqcore/reqcore/archive/refs/heads/main.zip) and unzip it manually.
> Don't have `git`? [Download it here](https://git-scm.com/downloads), or [download a ZIP](https://github.com/reqcore-inc/reqcore/archive/refs/heads/main.zip) and unzip it manually.

---

Expand Down
5 changes: 4 additions & 1 deletion app/components/AppSidebar.vue
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,10 @@ function isActiveTab(to: string, exact: boolean) {
<!-- Top -->
<div class="flex flex-col gap-5">
<!-- Logo -->
<div class="px-2 text-lg font-bold text-surface-900 dark:text-surface-100">Reqcore</div>
<NuxtLink to="/" class="flex items-center gap-2 px-2 no-underline">
<img src="/eagle-mascot-logo.png" alt="Reqcore mascot" class="size-7 shrink-0 object-contain" />
<span class="text-lg font-bold text-surface-900 dark:text-surface-100">Reqcore</span>
</NuxtLink>

<!-- Org Switcher -->
<div>
Expand Down
2 changes: 1 addition & 1 deletion app/components/PreviewUpsellModal.vue
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ function closeModal() {
</a>

<a
href="https://github.com/reqcore/reqcore"
href="https://github.com/reqcore-inc/reqcore"
target="_blank"
rel="noopener noreferrer"
class="inline-flex items-center rounded-lg border border-surface-300 px-3 py-2 text-sm font-medium text-surface-700 transition-colors hover:bg-surface-50 dark:border-surface-700 dark:text-surface-200 dark:hover:bg-surface-800"
Expand Down
3 changes: 3 additions & 0 deletions app/layouts/auth.vue
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@
<div class="min-h-screen flex items-center justify-center bg-surface-50 dark:bg-surface-950 p-4">
<div class="w-full max-w-[420px] bg-white dark:bg-surface-900 rounded-lg shadow-sm dark:shadow-none dark:border dark:border-surface-800 p-8">
<div class="text-center mb-8">
<div class="flex justify-center mb-3">
<img src="/eagle-mascot-logo.png" alt="Reqcore mascot" class="size-16 object-contain" />
</div>
<h1 class="text-2xl font-bold text-surface-900 dark:text-surface-100">Reqcore</h1>
<p class="text-sm text-surface-500 dark:text-surface-400 mt-1">The Sovereign Recruitment Engine</p>
</div>
Expand Down
2 changes: 1 addition & 1 deletion app/layouts/dashboard.vue
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ const isDemo = computed(() => {
<span>
<strong>Preview mode</strong> — You're exploring with sample data in read-only mode. Changes are disabled.
<a
href="https://github.com/reqcore/reqcore"
href="https://github.com/reqcore-inc/reqcore"
target="_blank"
rel="noopener noreferrer"
class="ml-1 font-semibold underline decoration-brand-400/40 underline-offset-2 hover:decoration-brand-400"
Expand Down
4 changes: 2 additions & 2 deletions app/pages/blog/[...slug].vue
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ const { data: session } = await authClient.useSession(useFetch)
<NuxtLink to="/catalog" class="transition hover:text-white">Features</NuxtLink>
<NuxtLink to="/blog" class="text-white transition">Blog</NuxtLink>
<a
href="https://github.com/joachimhorsworthy/reqcore"
href="https://github.com/reqcore-inc/reqcore"
target="_blank"
class="transition hover:text-white"
Comment on lines 72 to 75
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

Add rel="noopener noreferrer" to new-tab external links.

Line 74 and Line 174 open external URLs in a new tab without rel, which leaves a reverse-tabnabbing vector.

🔒 Proposed fix
           <a
             href="https://github.com/reqcore-inc/reqcore"
             target="_blank"
+            rel="noopener noreferrer"
             class="transition hover:text-white"
           >
             <Github class="size-4" />
           </a>
@@
           <a
             href="https://github.com/reqcore-inc/reqcore"
             target="_blank"
+            rel="noopener noreferrer"
             class="transition hover:text-white/60"
           >
             GitHub
           </a>

Also applies to: 172-175

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

In `@app/pages/blog/`[...slug].vue around lines 72 - 75, The external anchor(s) in
app/pages/blog/[...slug].vue that use target="_blank" (e.g., the <a> with
href="https://github.com/reqcore-inc/reqcore" and the other external link around
the second occurrence) must include rel="noopener noreferrer" to prevent
reverse-tabnabbing; update those <a ... target="_blank"> elements (search for
target="_blank" occurrences in the file) to add rel="noopener noreferrer"
alongside the existing class/attributes.

>
Expand Down Expand Up @@ -170,7 +170,7 @@ const { data: session } = await authClient.useSession(useFetch)
<NuxtLink to="/" class="transition hover:text-white/60">Home</NuxtLink>
<NuxtLink to="/roadmap" class="transition hover:text-white/60">Roadmap</NuxtLink>
<a
href="https://github.com/joachimhorsworthy/reqcore"
href="https://github.com/reqcore-inc/reqcore"
target="_blank"
class="transition hover:text-white/60"
>
Expand Down
4 changes: 2 additions & 2 deletions app/pages/blog/index.vue
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ const { data: posts } = await useAsyncData('blog-posts', () =>
<NuxtLink to="/catalog" class="transition hover:text-white">Features</NuxtLink>
<NuxtLink to="/blog" class="text-white transition">Blog</NuxtLink>
<a
href="https://github.com/joachimhorsworthy/reqcore"
href="https://github.com/reqcore-inc/reqcore"
target="_blank"
class="transition hover:text-white"
Comment on lines 44 to 47
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

Harden both external GitHub links with rel.

Line 46 and Line 144 open new tabs without rel="noopener noreferrer".

🔒 Proposed fix
           <a
             href="https://github.com/reqcore-inc/reqcore"
             target="_blank"
+            rel="noopener noreferrer"
             class="transition hover:text-white"
           >
             <Github class="size-4" />
           </a>
@@
           <a
             href="https://github.com/reqcore-inc/reqcore"
             target="_blank"
+            rel="noopener noreferrer"
             class="transition hover:text-white/60"
           >
             GitHub
           </a>

Also applies to: 142-145

🤖 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 44 - 47, Two external anchor elements
in app/pages/blog/index.vue that open in a new tab (the <a
href="https://github.com/reqcore-inc/reqcore" class="transition
hover:text-white" anchor and the other anchor around lines 142-145) are missing
rel attributes; update each anchor that uses target="_blank" to include
rel="noopener noreferrer" to prevent window.opener vulnerabilities and improve
security.

>
Expand Down Expand Up @@ -140,7 +140,7 @@ const { data: posts } = await useAsyncData('blog-posts', () =>
<NuxtLink to="/" class="transition hover:text-white/60">Home</NuxtLink>
<NuxtLink to="/roadmap" class="transition hover:text-white/60">Roadmap</NuxtLink>
<a
href="https://github.com/joachimhorsworthy/reqcore"
href="https://github.com/reqcore-inc/reqcore"
target="_blank"
class="transition hover:text-white/60"
>
Expand Down
4 changes: 2 additions & 2 deletions app/pages/catalog/index.vue
Original file line number Diff line number Diff line change
Expand Up @@ -243,7 +243,7 @@ const stats = computed(() => {
Blog
</NuxtLink>
<a
href="https://github.com/reqcore/reqcore"
href="https://github.com/reqcore-inc/reqcore"
target="_blank"
rel="noopener noreferrer"
class="hidden items-center gap-1.5 rounded-md px-3 py-1.5 text-[13px] font-medium text-surface-400 transition hover:text-white sm:flex"
Expand Down Expand Up @@ -538,7 +538,7 @@ const stats = computed(() => {
<div class="flex items-center gap-2">
<span>Open source on</span>
<a
href="https://github.com/reqcore/reqcore"
href="https://github.com/reqcore-inc/reqcore"
target="_blank"
class="inline-flex items-center gap-1 text-white/50 hover:text-white transition"
Comment on lines 540 to 543
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

Add rel="noopener noreferrer" on footer external link.

Line 542 uses target="_blank" without rel, which is a security gap.

🔒 Proposed fix
           <a
             href="https://github.com/reqcore-inc/reqcore"
             target="_blank"
+            rel="noopener noreferrer"
             class="inline-flex items-center gap-1 text-white/50 hover:text-white transition"
           >
             GitHub <ArrowUpRight class="size-3" />
           </a>
📝 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.

Suggested change
<a
href="https://github.com/reqcore/reqcore"
href="https://github.com/reqcore-inc/reqcore"
target="_blank"
class="inline-flex items-center gap-1 text-white/50 hover:text-white transition"
<a
href="https://github.com/reqcore-inc/reqcore"
target="_blank"
rel="noopener noreferrer"
class="inline-flex items-center gap-1 text-white/50 hover:text-white transition"
>
GitHub <ArrowUpRight class="size-3" />
</a>
🤖 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 540 - 543, The external footer
anchor (the <a> element with href="https://github.com/reqcore-inc/reqcore" and
target="_blank") opens a new tab without safe rel attributes; update that anchor
to include rel="noopener noreferrer" so the link uses rel="noopener noreferrer"
alongside target="_blank" to mitigate reverse tabnabbing and leaking
window.opener.

>
Expand Down
22 changes: 13 additions & 9 deletions app/pages/index.vue
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
import {
ArrowRight,
Briefcase,
Database,
ScanEye,
UsersRound,
ShieldCheck,
Expand Down Expand Up @@ -90,7 +89,7 @@ const ctaRef = useScrollFade()
<nav class="fixed inset-x-0 top-0 z-50 border-b border-white/[0.06] bg-[#09090b]/80 backdrop-blur-xl">
<div class="mx-auto flex h-14 max-w-6xl items-center justify-between px-6">
<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">R</span>
<img src="/eagle-mascot-logo.png" alt="Reqcore mascot" class="h-7 w-7 object-contain" />
Reqcore
</NuxtLink>

Expand Down Expand Up @@ -416,7 +415,7 @@ const ctaRef = useScrollFade()
<div class="relative p-7 pb-4">
<div class="mb-1 flex items-center gap-2.5">
<div class="flex h-8 w-8 items-center justify-center rounded-lg bg-brand-500/10 text-brand-400 ring-1 ring-inset ring-brand-500/20">
<Database class="h-4 w-4" :stroke-width="1.75" />
<img src="/database-icon.png" alt="Database" class="h-4 w-4 object-contain" />
</div>
<h3 class="text-[15px] font-semibold text-white">Ownership over Access</h3>
</div>
Expand Down Expand Up @@ -444,7 +443,7 @@ const ctaRef = useScrollFade()
<div class="overflow-hidden rounded-t-lg border border-b-0 border-white/[0.06] bg-white/[0.02]">
<div class="border-b border-white/[0.06] bg-white/[0.03] px-3 py-1.5">
<div class="flex items-center gap-1.5">
<Database class="h-2.5 w-2.5 text-brand-400" :stroke-width="2" />
<img src="/database-icon.png" alt="Database" class="h-2.5 w-2.5 object-contain" />
<span class="text-[10px] font-semibold text-surface-300">candidates</span>
</div>
</div>
Expand Down Expand Up @@ -713,9 +712,7 @@ const ctaRef = useScrollFade()

<!-- Separator + attribution -->
<div class="mt-8 flex items-center gap-4 border-t border-white/[0.06] pt-8">
<div class="flex h-10 w-10 items-center justify-center rounded-full bg-brand-500 text-sm font-bold text-white">
R
</div>
<img src="/eagle-mascot-logo.png" alt="Reqcore mascot" class="h-10 w-10 object-contain" />
<div>
<div class="text-sm font-semibold text-white">The Reqcore Team</div>
<div class="text-[13px] text-surface-500">Building the open-source applicant tracking system</div>
Expand Down Expand Up @@ -1126,7 +1123,7 @@ const ctaRef = useScrollFade()
<div class="tech-card-border" />
<div class="relative flex items-start gap-4 p-6">
<div class="flex h-11 w-11 shrink-0 items-center justify-center rounded-xl bg-[#336791]/10 ring-1 ring-inset ring-[#336791]/20 transition-all duration-300 group-hover:bg-[#336791]/15 group-hover:ring-[#336791]/30 group-hover:shadow-[0_0_20px_rgba(51,103,145,0.1)]">
<Database class="h-5 w-5 text-[#5B9BD5]" :stroke-width="1.5" />
<img src="/database-icon.png" alt="Database" class="h-5 w-5 object-contain" />
</div>
<div class="min-w-0">
<h3 class="text-[15px] font-semibold text-white">PostgreSQL</h3>
Expand Down Expand Up @@ -1290,6 +1287,13 @@ const ctaRef = useScrollFade()
</div>

<div class="relative mx-auto max-w-3xl px-6 text-center">
<div class="mb-8 flex justify-center">
<img
src="/eagle-mascot-logo.png"
alt="Reqcore mascot"
class="h-20 w-20 object-contain drop-shadow-[0_0_40px_rgba(59,130,246,0.5)]"
/>
</div>
<h2 class="text-3xl font-bold tracking-tight text-white sm:text-4xl lg:text-5xl">
Ready to own your hiring pipeline?
</h2>
Expand Down Expand Up @@ -1322,7 +1326,7 @@ const ctaRef = useScrollFade()
<footer class="border-t border-white/[0.06] py-8">
<div class="mx-auto flex max-w-6xl flex-col items-center justify-between gap-4 px-6 sm:flex-row">
<div class="flex items-center gap-2 text-[13px] text-surface-500">
<span class="flex h-5 w-5 items-center justify-center rounded bg-brand-500 text-[9px] font-black text-white">R</span>
<img src="/eagle-mascot-logo.png" alt="Reqcore mascot" class="h-5 w-5 object-contain" />
&copy; {{ new Date().getFullYear() }} Reqcore. Open source under AGPL-3.0.
</div>
<div class="flex gap-6 text-[13px] text-surface-500">
Expand Down
6 changes: 3 additions & 3 deletions app/pages/roadmap.vue
Original file line number Diff line number Diff line change
Expand Up @@ -416,7 +416,7 @@ const upcomingItems = computed(() => items.filter(item => item.status !== 'shipp
Blog
</NuxtLink>
<a
href="https://github.com/reqcore/reqcore"
href="https://github.com/reqcore-inc/reqcore"
target="_blank"
rel="noopener noreferrer"
class="hidden items-center gap-1.5 rounded-md px-3 py-1.5 text-[13px] font-medium text-surface-400 transition hover:text-white sm:flex"
Expand Down Expand Up @@ -609,7 +609,7 @@ const upcomingItems = computed(() => items.filter(item => item.status !== 'shipp

<div class="flex flex-1 flex-col items-center justify-center p-10 text-center">
<a
href="https://github.com/reqcore/reqcore"
href="https://github.com/reqcore-inc/reqcore"
target="_blank"
rel="noopener noreferrer"
class="mb-8 inline-flex items-center gap-2 rounded-full border border-white/[0.08] bg-white/[0.04] px-4 py-1.5 text-[13px] font-medium text-surface-300 transition hover:border-white/[0.15] hover:bg-white/[0.06]"
Expand Down Expand Up @@ -771,7 +771,7 @@ const upcomingItems = computed(() => items.filter(item => item.status !== 'shipp
</p>
<div class="mt-6 flex flex-col gap-3 sm:flex-row">
<a
href="https://github.com/reqcore/reqcore/issues"
href="https://github.com/reqcore-inc/reqcore/issues"
target="_blank"
rel="noopener noreferrer"
class="inline-flex items-center gap-2 rounded-lg bg-white px-4 py-2 text-[13px] font-semibold text-[#09090b] shadow-[0_0_20px_rgba(255,255,255,0.08)] transition hover:bg-white/90"
Expand Down
4 changes: 3 additions & 1 deletion nuxt.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ export default defineNuxtConfig({
titleTemplate: '%s — Reqcore',
link: [
{ rel: 'icon', type: 'image/svg+xml', href: '/favicon.svg' },
{ rel: 'icon', type: 'image/png', href: '/eagle-mascot-logo.png' },
{ rel: 'apple-touch-icon', sizes: '180x180', href: '/apple-touch-icon.png' },
],
meta: [
{ name: 'theme-color', content: '#09090b' },
Expand Down Expand Up @@ -105,7 +107,7 @@ export default defineNuxtConfig({
name: 'Reqcore',
url: 'https://reqcore.com',
logo: 'https://reqcore.com/og-image.png',
sameAs: ['https://github.com/reqcore/reqcore'],
sameAs: ['https://github.com/reqcore-inc/reqcore'],
},
},

Expand Down
Loading