Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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="/raccoon-reqcore-mascot.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="/raccoon-reqcore-mascot.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="/raccoon-reqcore-mascot.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="/raccoon-reqcore-mascot.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="/raccoon-reqcore-mascot.png"
alt="Reqcore raccoon mascot"
class="h-20 w-20 object-contain drop-shadow-[0_0_30px_rgba(99,102,241,0.35)]"
/>
</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="/raccoon-reqcore-mascot.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: '/raccoon-reqcore-mascot.png' },
{ rel: 'apple-touch-icon', href: '/raccoon-reqcore-mascot.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
Binary file added public/database-icon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/raccoon-reqcore-mascot.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading